From 08279e6288798c17b7b722b7a86a15b6832092bc Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 17 Aug 2022 13:33:58 +0200 Subject: [PATCH] Create Point, Area, Rect via 'from_xml' functions By using the new functions provided by the base API, this patch removes the dependency of several components from include/decorator/xml_utils.h. Issue #4584 --- repos/gems/recipes/src/backdrop/content.mk | 6 --- repos/gems/recipes/src/menu_view/content.mk | 6 +-- .../recipes/src/window_layouter/content.mk | 8 ---- repos/gems/src/app/backdrop/main.cc | 3 +- repos/gems/src/app/decorator/main.cc | 2 +- repos/gems/src/app/decorator/window.cc | 2 +- repos/gems/src/app/menu_view/main.cc | 10 ++--- repos/gems/src/app/menu_view/types.h | 1 - repos/gems/src/app/sculpt_manager/graph.cc | 23 +++++------- repos/gems/src/app/sculpt_manager/main.cc | 4 +- repos/gems/src/app/themed_decorator/main.cc | 2 +- repos/gems/src/app/themed_decorator/theme.cc | 6 +-- repos/gems/src/app/themed_decorator/window.h | 2 +- repos/gems/src/app/window_layouter/assign.h | 4 +- repos/gems/src/app/window_layouter/types.h | 12 ++---- .../src/app/window_layouter/window_list.h | 4 +- repos/os/include/decorator/xml_utils.h | 37 +------------------ 17 files changed, 32 insertions(+), 100 deletions(-) diff --git a/repos/gems/recipes/src/backdrop/content.mk b/repos/gems/recipes/src/backdrop/content.mk index e2053b242f..5d7cd07a6a 100644 --- a/repos/gems/recipes/src/backdrop/content.mk +++ b/repos/gems/recipes/src/backdrop/content.mk @@ -1,8 +1,2 @@ SRC_DIR := src/app/backdrop include $(GENODE_DIR)/repos/base/recipes/src/content.inc - -content: include/decorator - -include/decorator: - mkdir -p $@ - cp $(GENODE_DIR)/repos/os/include/decorator/* $@ diff --git a/repos/gems/recipes/src/menu_view/content.mk b/repos/gems/recipes/src/menu_view/content.mk index 594a88039b..12400e46e6 100644 --- a/repos/gems/recipes/src/menu_view/content.mk +++ b/repos/gems/recipes/src/menu_view/content.mk @@ -1,11 +1,7 @@ SRC_DIR := src/app/menu_view include $(GENODE_DIR)/repos/base/recipes/src/content.inc -content: include/decorator include/polygon_gfx - -include/decorator: - mkdir -p $@ - cp $(GENODE_DIR)/repos/os/include/decorator/* $@ +content: include/polygon_gfx include/polygon_gfx: mkdir -p $@ diff --git a/repos/gems/recipes/src/window_layouter/content.mk b/repos/gems/recipes/src/window_layouter/content.mk index 6584a2af41..053d21706f 100644 --- a/repos/gems/recipes/src/window_layouter/content.mk +++ b/repos/gems/recipes/src/window_layouter/content.mk @@ -1,10 +1,2 @@ SRC_DIR := src/app/window_layouter include $(GENODE_DIR)/repos/base/recipes/src/content.inc - -DECORATOR_INCLUDES := $(addprefix include/decorator/,xml_utils.h types.h) - -content: $(DECORATOR_INCLUDES) - -$(DECORATOR_INCLUDES): - mkdir -p $(dir $@) - cp $(GENODE_DIR)/repos/os/$@ $@ diff --git a/repos/gems/src/app/backdrop/main.cc b/repos/gems/src/app/backdrop/main.cc index 42b34e2675..de00fa8aa6 100644 --- a/repos/gems/src/app/backdrop/main.cc +++ b/repos/gems/src/app/backdrop/main.cc @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -262,7 +261,7 @@ void Backdrop::Main::_apply_image(Xml_node operation) : anchor.vertical == Anchor::HIGH ? v_gap : 0; - Point const offset = Decorator::point_attribute(operation); + Point const offset = Point::from_xml(operation); Point const pos = Point(anchored_xpos, anchored_ypos) + offset; diff --git a/repos/gems/src/app/decorator/main.cc b/repos/gems/src/app/decorator/main.cc index 4440d51551..67983ffa2e 100644 --- a/repos/gems/src/app/decorator/main.cc +++ b/repos/gems/src/app/decorator/main.cc @@ -232,7 +232,7 @@ find_hover(Genode::Xml_node pointer_node, Decorator::Window_stack &window_stack) || !pointer_node.has_attribute("ypos")) return Decorator::Window_base::Hover(); - return window_stack.hover(Decorator::point_attribute(pointer_node)); + return window_stack.hover(Decorator::Point::from_xml(pointer_node)); } diff --git a/repos/gems/src/app/decorator/window.cc b/repos/gems/src/app/decorator/window.cc index ad67c6c900..5895388cf4 100644 --- a/repos/gems/src/app/decorator/window.cc +++ b/repos/gems/src/app/decorator/window.cc @@ -202,7 +202,7 @@ bool Decorator::Window::update(Genode::Xml_node window_node) /* * Detect geometry changes */ - Rect new_geometry = rect_attribute(window_node); + Rect new_geometry = Rect::from_xml(window_node); if (new_geometry.p1() != geometry().p1() || new_geometry.p2() != geometry().p2()) { diff --git a/repos/gems/src/app/menu_view/main.cc b/repos/gems/src/app/menu_view/main.cc index ef818f25ff..e27a39909c 100644 --- a/repos/gems/src/app/menu_view/main.cc +++ b/repos/gems/src/app/menu_view/main.cc @@ -255,14 +255,10 @@ void Menu_view::Main::_handle_dialog_update() { _styles.flush_outdated_styles(); - try { - Xml_node const config = _config.xml(); + Xml_node const config = _config.xml(); - _position = Decorator::point_attribute(config); - - _configured_size = Area(config.attribute_value("width", 0U), - config.attribute_value("height", 0U)); - } catch (...) { } + _position = Point::from_xml(config); + _configured_size = Area ::from_xml(config); _dialog_rom.update(); diff --git a/repos/gems/src/app/menu_view/types.h b/repos/gems/src/app/menu_view/types.h index 15860c2af4..99c24ff874 100644 --- a/repos/gems/src/app/menu_view/types.h +++ b/repos/gems/src/app/menu_view/types.h @@ -17,7 +17,6 @@ /* Genode includes */ #include #include -#include #include #include #include diff --git a/repos/gems/src/app/sculpt_manager/graph.cc b/repos/gems/src/app/sculpt_manager/graph.cc index 2e179f5e8b..225d5a7ee2 100644 --- a/repos/gems/src/app/sculpt_manager/graph.cc +++ b/repos/gems/src/app/sculpt_manager/graph.cc @@ -302,25 +302,22 @@ Dialog::Hover_result Graph::hover(Xml_node hover) /* update anchor geometry of popup menu */ auto hovered_rect = [] (Xml_node const dialog) { - if (!dialog.has_type("dialog")) return Rect(); + if (!dialog.has_type("dialog")) + return Rect(); - auto point_from_xml = [] (Xml_node node) { - return Point((int)node.attribute_value("xpos", 0L), - (int)node.attribute_value("ypos", 0L)); }; + if (!dialog.has_sub_node("depgraph")) + return Rect(); - auto area_from_xml = [] (Xml_node node) { - return Area(node.attribute_value("width", 0U), - node.attribute_value("height", 0U)); }; - - if (!dialog.has_sub_node("depgraph")) return Rect(); Xml_node const depgraph = dialog.sub_node("depgraph"); - if (!depgraph.has_sub_node("button")) return Rect(); + if (!depgraph.has_sub_node("button")) + return Rect(); + Xml_node const button = depgraph.sub_node("button"); - return Rect(point_from_xml(dialog) + point_from_xml(depgraph) + - point_from_xml(button), - area_from_xml(button)); + return Rect(Point::from_xml(dialog) + Point::from_xml(depgraph) + + Point::from_xml(button), + Area::from_xml(button)); }; _popup_anchor = hovered_rect(hover); diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 936e56cc5f..5e78da4d03 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -1289,9 +1289,7 @@ void Sculpt::Main::_handle_window_layout() _window_list.update(); Xml_node const window_list = _window_list.xml(); - auto win_size = [&] (Xml_node win) { - return Area(win.attribute_value("width", 0U), - win.attribute_value("height", 0U)); }; + auto win_size = [&] (Xml_node win) { return Area::from_xml(win); }; unsigned panel_height = 0; _with_window(window_list, panel_view_label, [&] (Xml_node win) { diff --git a/repos/gems/src/app/themed_decorator/main.cc b/repos/gems/src/app/themed_decorator/main.cc index a8d1f05b70..c751df8cc9 100644 --- a/repos/gems/src/app/themed_decorator/main.cc +++ b/repos/gems/src/app/themed_decorator/main.cc @@ -217,7 +217,7 @@ find_hover(Genode::Xml_node pointer_node, Decorator::Window_stack &window_stack) || !pointer_node.has_attribute("ypos")) return Decorator::Window_base::Hover(); - return window_stack.hover(Decorator::point_attribute(pointer_node)); + return window_stack.hover(Decorator::Point::from_xml(pointer_node)); } diff --git a/repos/gems/src/app/themed_decorator/theme.cc b/repos/gems/src/app/themed_decorator/theme.cc index 8b55f595ba..7c3bb785bb 100644 --- a/repos/gems/src/app/themed_decorator/theme.cc +++ b/repos/gems/src/app/themed_decorator/theme.cc @@ -149,8 +149,8 @@ Decorator::Theme::Margins Decorator::Theme::decor_margins() const Decorator::Rect Decorator::Theme::title_geometry() const { static Genode::Xml_node node = metadata(_alloc); - static Rect rect = node.has_sub_node("title") - ? rect_attribute(node.sub_node("title")) + static Rect rect = node.has_sub_node("title") + ? Rect::from_xml(node.sub_node("title")) : Rect(Point(0, 0), Area(0, 0)); return rect; } @@ -168,7 +168,7 @@ element_geometry(Genode::Ram_allocator &ram, Genode::Region_map &rm, if (!node.has_sub_node(sub_node_type)) return Rect(Point(0, 0), Area(0, 0)); - return Rect(point_attribute(node.sub_node(sub_node_type)), + return Rect(Point::from_xml(node.sub_node(sub_node_type)), texture_by_id(ram, rm, alloc, texture_id).size()); } diff --git a/repos/gems/src/app/themed_decorator/window.h b/repos/gems/src/app/themed_decorator/window.h index ba0fd04b39..39e3100f59 100644 --- a/repos/gems/src/app/themed_decorator/window.h +++ b/repos/gems/src/app/themed_decorator/window.h @@ -511,7 +511,7 @@ class Decorator::Window : public Window_base, public Animator::Item _motion = _config.motion(_title); Rect const old_geometry = geometry(); - Rect const new_geometry = rect_attribute(window_node); + Rect const new_geometry = Rect::from_xml(window_node); geometry(new_geometry); diff --git a/repos/gems/src/app/window_layouter/assign.h b/repos/gems/src/app/window_layouter/assign.h index 840177db0e..8ecea234af 100644 --- a/repos/gems/src/app/window_layouter/assign.h +++ b/repos/gems/src/app/window_layouter/assign.h @@ -81,8 +81,8 @@ class Window_layouter::Assign : public List_model::Element _maximized = assign.attribute_value("maximized", false); _xpos_any = assign.attribute_value("xpos", String<20>()) == "any"; _ypos_any = assign.attribute_value("ypos", String<20>()) == "any"; - _pos = point_attribute(assign); - _size = area_attribute(assign); + _pos = Point::from_xml(assign); + _size = Area::from_xml(assign); } /* diff --git a/repos/gems/src/app/window_layouter/types.h b/repos/gems/src/app/window_layouter/types.h index a331faaed3..254fcc37e1 100644 --- a/repos/gems/src/app/window_layouter/types.h +++ b/repos/gems/src/app/window_layouter/types.h @@ -15,19 +15,15 @@ #define _TYPES_H_ /* Genode includes */ -#include -#include +#include namespace Window_layouter { using namespace Genode; - typedef Decorator::Point Point; - typedef Decorator::Area Area; - typedef Decorator::Rect Rect; - - using Decorator::area_attribute; - using Decorator::point_attribute; + typedef Surface_base::Point Point; + typedef Surface_base::Area Area; + typedef Surface_base::Rect Rect; struct Window_id { diff --git a/repos/gems/src/app/window_layouter/window_list.h b/repos/gems/src/app/window_layouter/window_list.h index 6945de0cf7..851b2ee1bd 100644 --- a/repos/gems/src/app/window_layouter/window_list.h +++ b/repos/gems/src/app/window_layouter/window_list.h @@ -72,7 +72,7 @@ class Window_layouter::Window_list Window &create_element(Xml_node node) { unsigned const id = node.attribute_value("id", 0U); - Area const initial_size = area_attribute(node); + Area const initial_size = Area::from_xml(node); Window::Label const label = node.attribute_value("label",Window::Label()); @@ -85,7 +85,7 @@ class Window_layouter::Window_list void update_element(Window &win, Xml_node node) { - win.client_size(area_attribute(node)); + win.client_size(Area::from_xml(node)); win.title (node.attribute_value("title", Window::Title(""))); win.has_alpha (node.attribute_value("has_alpha", false)); win.hidden (node.attribute_value("hidden", false)); diff --git a/repos/os/include/decorator/xml_utils.h b/repos/os/include/decorator/xml_utils.h index ab99a433e0..73c7ce7859 100644 --- a/repos/os/include/decorator/xml_utils.h +++ b/repos/os/include/decorator/xml_utils.h @@ -16,42 +16,7 @@ #include - -namespace Decorator { - - static Point point_attribute(Xml_node const &); - static Area area_attribute(Xml_node const &); - static Rect rect_attribute(Xml_node const &); - static Color color(Xml_node const &); -} - - -/** - * Read point position from XML node - */ -static inline Decorator::Point Decorator::point_attribute(Genode::Xml_node const &point) -{ - return Point((int)point.attribute_value("xpos", 0L), - (int)point.attribute_value("ypos", 0L)); } - - -/** - * Read area size from XML node - */ -static inline Decorator::Area Decorator::area_attribute(Genode::Xml_node const &area) -{ - return Area(area.attribute_value("width", 0U), - area.attribute_value("height", 0U)); -} - - -/** - * Read rectangle coordinates from XML node - */ -static inline Decorator::Rect Decorator::rect_attribute(Genode::Xml_node const &rect) -{ - return Rect(point_attribute(rect), area_attribute(rect)); -} +namespace Decorator { static Color color(Xml_node const &); } /**