-struct controller : public wayland_proxy<struct ivi_wm> {
- // This controller is still missing ivi-input
-
- typedef std::unordered_map<uintptr_t, uint32_t> proxy_to_id_map_type;
- typedef std::unordered_map<uint32_t, std::unique_ptr<struct surface>>
- surface_map_type;
- typedef std::unordered_map<uint32_t, std::unique_ptr<struct layer>>
- layer_map_type;
- typedef std::unordered_map<uint32_t, struct screen *> screen_map_type;
- typedef std::unordered_map<uint32_t, struct surface_properties> props_map;
-
- // HACK:
- // The order of these member is mandatory, as when objects are destroyed
- // they will call their parent (that's us right here!) and remove their
- // proxy-to-id mapping. I.e. the *_proxy_to_id members need to be valid
- // when the surfaces/layers/screens maps are destroyed. This sucks, but
- // I cannot see a better solution w/o globals or some other horrible
- // call-our-parent construct.
- proxy_to_id_map_type surface_proxy_to_id;
- proxy_to_id_map_type layer_proxy_to_id;
- proxy_to_id_map_type screen_proxy_to_id;
-
- props_map sprops;
- props_map lprops;
-
- surface_map_type surfaces;
- layer_map_type layers;
- screen_map_type screens;
-
- std::unique_ptr<struct screen> screen;
-
- size output_size;
-
- wm::controller_hooks *chooks;
-
- struct wl::display *display;
-
- void add_proxy_to_sid_mapping(struct ivi_wm *p, uint32_t id);
- void remove_proxy_to_sid_mapping(struct ivi_wm *p);
-
- void add_proxy_to_lid_mapping(struct ivi_wm *p, uint32_t id);
- void remove_proxy_to_lid_mapping(struct ivi_wm *p);
-
- void add_proxy_to_id_mapping(struct wl_output *p, uint32_t id);
- void remove_proxy_to_id_mapping(struct wl_output *p);
-
- bool surface_exists(uint32_t id) const {
- return this->surfaces.find(id) != this->surfaces.end();
- }
-
- bool layer_exists(uint32_t id) const {
- return this->layers.find(id) != this->layers.end();
- }
-
- controller(struct wl_registry *r, uint32_t name, uint32_t version);
-
- // Requests
- void commit_changes() const {
- ivi_wm_commit_changes(this->proxy.get());
- }
- void layer_create(uint32_t id, int32_t w, int32_t h);
- void surface_create(uint32_t id);
- void create_screen(struct wl_output *output);
-
- // Events
- void surface_visibility_changed(struct surface *s, int32_t visibility);
- void surface_opacity_changed(struct surface *s, float opacity);
- void surface_source_rectangle_changed(struct surface *s, int32_t x, int32_t y,
- int32_t width, int32_t height);
- void surface_destination_rectangle_changed(struct surface *s, int32_t x, int32_t y,
- int32_t width, int32_t height);
- void surface_created(uint32_t id);
- void surface_destroyed(struct surface *s, uint32_t surface_id);
- void surface_error_detected(uint32_t object_id,
- uint32_t error_code, char const *error_text);
- void surface_size_changed(struct surface *s, int32_t width, int32_t height);
- void surface_stats_received(struct surface *s, uint32_t surface_id,
- uint32_t frame_count, uint32_t pid);
- void surface_added_to_layer(struct surface *s, uint32_t layer_id, uint32_t surface_id);
-
- void layer_visibility_changed(struct layer *l, uint32_t layer_id,int32_t visibility);
- void layer_opacity_changed(struct layer *l, uint32_t layer_id,float opacity);
- void layer_source_rectangle_changed(struct layer *l, uint32_t layer_id,int32_t x, int32_t y,
- int32_t width, int32_t height);
- void layer_destination_rectangle_changed(struct layer *l, uint32_t layer_id,int32_t x, int32_t y,
- int32_t width, int32_t height);
- void layer_created(uint32_t id);
- void layer_destroyed(struct layer *l, uint32_t layer_id);
- void layer_error_detected(uint32_t object_id,
- uint32_t error_code, char const *error_text);
- void layer_configuration(struct layer *l, int32_t width, int32_t height);
- void layer_orientation(struct layer *l, int32_t orientation);
- void layer_screen(struct layer *l, struct wl_output *screen);
-
+struct controller : public wayland_proxy<struct ivi_wm>
+{
+ // This controller is still missing ivi-input
+
+ typedef std::unordered_map<uintptr_t, uint32_t> proxy_to_id_map_type;
+ typedef std::unordered_map<uint32_t, std::unique_ptr<struct surface>>
+ surface_map_type;
+ typedef std::unordered_map<uint32_t, std::unique_ptr<struct layer>>
+ layer_map_type;
+ typedef std::unordered_map<uint32_t, struct screen *> screen_map_type;
+ typedef std::unordered_map<uint32_t, struct surface_properties> props_map;
+
+ // HACK:
+ // The order of these member is mandatory, as when objects are destroyed
+ // they will call their parent (that's us right here!) and remove their
+ // proxy-to-id mapping. I.e. the *_proxy_to_id members need to be valid
+ // when the surfaces/layers/screens maps are destroyed. This sucks, but
+ // I cannot see a better solution w/o globals or some other horrible
+ // call-our-parent construct.
+ proxy_to_id_map_type surface_proxy_to_id;
+ proxy_to_id_map_type layer_proxy_to_id;
+ proxy_to_id_map_type screen_proxy_to_id;
+
+ props_map sprops;
+ props_map lprops;
+
+ surface_map_type surfaces;
+ layer_map_type layers;
+ screen_map_type screens;
+
+ std::unique_ptr<struct screen> screen;
+
+ size output_size; // Display size[pixel]
+ size physical_size; // Display size[mm]
+
+ // Scale for conversion CSS PX -> DP(Device Pixel)
+ double scale;
+
+ wm::controller_hooks *chooks;
+
+ struct wl::display *display;
+
+ void add_proxy_to_sid_mapping(struct ivi_wm *p, uint32_t id);
+ void remove_proxy_to_sid_mapping(struct ivi_wm *p);
+
+ void add_proxy_to_lid_mapping(struct ivi_wm *p, uint32_t id);
+ void remove_proxy_to_lid_mapping(struct ivi_wm *p);
+
+ void add_proxy_to_id_mapping(struct wl_output *p, uint32_t id);
+ void remove_proxy_to_id_mapping(struct wl_output *p);
+
+ bool surface_exists(uint32_t id) const
+ {
+ return this->surfaces.find(id) != this->surfaces.end();
+ }
+
+ bool layer_exists(uint32_t id) const
+ {
+ return this->layers.find(id) != this->layers.end();
+ }
+
+ controller(struct wl_registry *r, uint32_t name, uint32_t version);
+
+ // Requests
+ void commit_changes() const
+ {
+ ivi_wm_commit_changes(this->proxy.get());
+ }
+ void layer_create(uint32_t id, int32_t w, int32_t h);
+ void surface_create(uint32_t id);
+ void create_screen(struct wl_output *output);
+ void get_surface_properties(uint32_t surface_id, int param = 0);
+
+ // Events
+ void surface_visibility_changed(uint32_t id, int32_t visibility);
+ void surface_opacity_changed(uint32_t id, float opacity);
+ void surface_source_rectangle_changed(uint32_t id, int32_t x, int32_t y,
+ int32_t width, int32_t height);
+ void surface_destination_rectangle_changed(uint32_t id, int32_t x, int32_t y,
+ int32_t width, int32_t height);
+ void surface_created(uint32_t id);
+ void surface_destroyed(uint32_t surface_id);
+ void surface_error_detected(uint32_t object_id,
+ uint32_t error_code, char const *error_text);
+ void surface_size_changed(uint32_t id, int32_t width, int32_t height);
+ void surface_stats_received(uint32_t surface_id,
+ uint32_t frame_count, uint32_t pid);
+ void surface_added_to_layer(uint32_t layer_id, uint32_t surface_id);
+
+ void layer_visibility_changed(uint32_t layer_id, int32_t visibility);
+ void layer_opacity_changed(uint32_t layer_id, float opacity);
+ void layer_source_rectangle_changed(uint32_t layer_id, int32_t x, int32_t y,
+ int32_t width, int32_t height);
+ void layer_destination_rectangle_changed(uint32_t layer_id, int32_t x, int32_t y,
+ int32_t width, int32_t height);
+ void layer_created(uint32_t id);
+ void layer_destroyed(uint32_t layer_id);
+ void layer_error_detected(uint32_t object_id,
+ uint32_t error_code, char const *error_text);