/* * Copyright (c) 2017 TOYOTA MOTOR CORPORATION * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include #include "wm_error.hpp" #include "util.hpp" namespace wm { class Screen { public: Screen(unsigned w, unsigned h) : _width(w), _height(h){} unsigned width() { return _width; } unsigned height() { return _height; } private: unsigned _width; unsigned _height; unsigned _pysical_width = 0; unsigned _pysical_height = 0; }; class LayerControlCallbacks { public: LayerControlCallbacks() {}; ~LayerControlCallbacks() = default; LayerControlCallbacks(const LayerControlCallbacks &obj) = default; // callback functions std::function surfaceCreated; std::function surfaceDestroyed; /* std::function surfaceDestroyed; std::function layerCreated; std::function layerDestroyed; */ }; class WMLayer; class LayerState; class WMAction; class WMClient; class LayerControl { public: explicit LayerControl(const std::string& root, const std::string& ecu_name); ~LayerControl() = default; WMError init(const LayerControlCallbacks& cb); void createNewLayer(unsigned id); void createNewRemoteLayer(unsigned id); unsigned getNewLayerID(const std::string& role, std::string* layer_name); std::shared_ptr getWMLayer(unsigned layer); std::shared_ptr getWMLayer(std::string layer_name); struct rect getAreaSize(const std::string& area); void setupArea(const rectangle& base_rct, double scaling); Screen getScreenInfo(); double scale(); // void setRenderOrder(const std::vector layer_render_order); // std::vector getAllRenderOrder(); // std::vector>& getAllLayers(); // std::vector getRenderOrder(const std::string& layer_name); WMError updateLayer(LayerState& layer_state); WMError renderLayers(); WMError renderLayersRemote(); WMError setXDGSurfaceOriginSize(unsigned surface); // WMError renderWMLayers(); void undoUpdate(); WMError layoutChange(const WMAction& action); WMError visibilityChange(const WMAction &action); void terminateApp(const std::shared_ptr client); // Don't use this function. void dispatchCreateEvent(ilmObjectType object, unsigned id, bool created); void dispatchSurfacePropChangeEvent(unsigned id, struct ilmSurfaceProperties*, t_ilm_notification_mask); void dispatchLayerPropChangeEvent(unsigned id, struct ilmLayerProperties*, t_ilm_notification_mask); private: WMError makeVisible(const std::shared_ptr client); WMError makeInvisible(const std::shared_ptr client); bool moveForeGround(const std::shared_ptr client); bool moveBackGround(const std::shared_ptr client); WMError loadLayerSetting(const std::string& path); WMError loadAreasConfigFile(const std::string& path, const std::string& ecu_name); // For Remote WMError makeRemoteVisible(const std::shared_ptr client); WMError makeRemoteInvisible(const std::shared_ptr client); std::vector> wm_layers; std::vector> wm_remote_layers; std::unordered_map lid2wmlid; std::unordered_map area2size; unsigned screenID; signed remoteScreenID; struct ilmScreenProperties screen_prop; double scaling; int offset_x; int offset_y; LayerControlCallbacks cb; }; } // namespace wm