summaryrefslogtreecommitdiff
path: root/navit/gui/internal/gui_internal_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'navit/gui/internal/gui_internal_menu.c')
-rw-r--r--navit/gui/internal/gui_internal_menu.c61
1 files changed, 55 insertions, 6 deletions
diff --git a/navit/gui/internal/gui_internal_menu.c b/navit/gui/internal/gui_internal_menu.c
index 7769953b9..33def9983 100644
--- a/navit/gui/internal/gui_internal_menu.c
+++ b/navit/gui/internal/gui_internal_menu.c
@@ -91,10 +91,31 @@ gui_internal_prune_menu_count(struct gui_priv *this, int count, int render)
}
}
+
+/**
+ * @brief Initializes a GUI screen
+ *
+ * This method initializes the internal GUI's screen on which all other elements (such as HTML menus,
+ * dialogs or others) are displayed.
+ *
+ * It sets up a view hierarchy, which includes a title bar and a client area to hold widgets defined by
+ * the caller.
+ *
+ * @param this The GUI instance
+ * @param label The label to display in the top bar
+ *
+ * @return The container for caller-defined widgets
+ */
struct widget *
gui_internal_menu(struct gui_priv *this, const char *label)
{
struct widget *menu,*w,*w1,*topbox;
+ struct padding *padding = NULL;
+
+ if (this->gra) {
+ padding = graphics_get_data(this->gra, "padding");
+ } else
+ dbg(lvl_warning, "cannot get padding: this->gra is NULL\n");
gui_internal_search_idle_end(this);
topbox=gui_internal_box_new_with_label(this, 0, label);
@@ -102,8 +123,18 @@ gui_internal_menu(struct gui_priv *this, const char *label)
topbox->h=this->root.h;
gui_internal_widget_append(&this->root, topbox);
menu=gui_internal_box_new(this, gravity_left_center|orientation_vertical);
- menu->w=this->root.w;
- menu->h=this->root.h;
+
+ if (padding) {
+ menu->p.x = padding->left;
+ menu->p.y = padding->top;
+ menu->w = topbox->w - padding->left - padding->right;
+ menu->h = topbox->h - padding->top - padding->bottom;
+ } else {
+ menu->p.x = 0;
+ menu->p.y = 0;
+ menu->w = topbox->w;
+ menu->h = topbox->h;
+ }
menu->background=this->background;
gui_internal_apply_config(this);
topbox->menu_data=g_new0(struct menu_data, 1);
@@ -134,8 +165,17 @@ gui_internal_menu(struct gui_priv *this, const char *label)
}
if (this->flags & 192) {
menu=gui_internal_box_new(this, gravity_left_center|orientation_vertical);
- menu->w=this->root.w;
- menu->h=this->root.h;
+ if (padding) {
+ menu->p.x = padding->left;
+ menu->p.y = padding->top;
+ menu->w = topbox->w - padding->left - padding->right;
+ menu->h = topbox->h - padding->top - padding->bottom;
+ } else {
+ menu->p.x = 0;
+ menu->p.y = 0;
+ menu->w = topbox->w;
+ menu->h = topbox->h;
+ }
w1=gui_internal_time_help(this);
gui_internal_widget_append(menu, w1);
w1=gui_internal_box_new(this, gravity_center|orientation_horizontal_vertical|flags_expand|flags_fill);
@@ -147,8 +187,17 @@ gui_internal_menu(struct gui_priv *this, const char *label)
gui_internal_widget_reset_pack(this, topbox);
topbox->w=this->root.w;
topbox->h=this->root.h;
- menu->w=this->root.w;
- menu->h=this->root.h;
+ if (padding) {
+ menu->p.x = padding->left;
+ menu->p.y = padding->top;
+ menu->w = topbox->w - padding->left - padding->right;
+ menu->h = topbox->h - padding->top - padding->bottom;
+ } else {
+ menu->p.x = 0;
+ menu->p.y = 0;
+ menu->w = topbox->w;
+ menu->h = topbox->h;
+ }
return w;
}