]> Dogcows Code - chaz/openbox/commitdiff
small change to the render API. RrMinsize became RrMinSize. added RrMinWidth and...
authorDana Jansens <danakj@orodu.net>
Wed, 2 May 2007 00:35:22 +0000 (00:35 +0000)
committerDana Jansens <danakj@orodu.net>
Wed, 2 May 2007 00:35:22 +0000 (00:35 +0000)
make focus/desktop popups wider based on the screen size with the old size as a minimum.
left-align the desktop dialog.. i think better dialogs would be nice. and to make them hide or something when you switch desktops while switching windows etc.

openbox/dock.c
openbox/focus.c
openbox/menuframe.c
openbox/popup.c
openbox/popup.h
openbox/screen.c
render/render.c
render/render.h

index 2e191f1c5a883c5f5273f326c6f28dfc1ac45757..5e61f00fb198b48d903a7a149d2fc7294213f844 100644 (file)
@@ -220,7 +220,7 @@ void dock_configure()
     gint strw, strh;
     Rect *a;
 
-    RrMinsize(dock->a_frame, &minw, &minh);
+    RrMinSize(dock->a_frame, &minw, &minh);
 
     dock->w = dock->h = 0;
 
index 4c663c3f124eabd30a223489263f1f24b6eb2120..c1d5147773aac2366b27f138648885a7f238e35b 100644 (file)
@@ -304,13 +304,8 @@ static void popup_cycle(ObClient *c, gboolean show)
         a = screen_physical_area_monitor(0);
         icon_popup_position(focus_cycle_popup, CenterGravity,
                             a->x + a->width / 2, a->y + a->height / 2);
-/*        icon_popup_size(focus_cycle_popup, a->height/2, a->height/16);
-        icon_popup_show(focus_cycle_popup, c->title,
-                        client_icon(c, a->height/16, a->height/16));
-*/
-        /* XXX the size and the font extents need to be related on some level
-         */
-        icon_popup_size(focus_cycle_popup, POPUP_WIDTH, POPUP_HEIGHT);
+        icon_popup_width(focus_cycle_popup, MAX(a->width/3, POPUP_WIDTH));
+        icon_popup_height(focus_cycle_popup, POPUP_HEIGHT);
 
         /* use the transient's parent's title/icon */
         while (p->transient_for && p->transient_for != OB_TRAN_GROUP)
index cf9bfcbf5c7cd41c4c72e2d954626f7cca4a7ea0..06a434598b36bafbea6da18da159df90f4f63283 100644 (file)
@@ -561,7 +561,7 @@ static void menu_frame_render(ObMenuFrame *self)
         gint l, t, r, b;
 
         e->a_text_normal->texture[0].data.text.string = "";
-        RrMinsize(e->a_text_normal, &tw, &th);
+        RrMinSize(e->a_text_normal, &tw, &th);
         tw += 2*PADDING;
         th += 2*PADDING;
         self->item_h = th;
@@ -623,7 +623,7 @@ static void menu_frame_render(ObMenuFrame *self)
         switch (e->entry->type) {
         case OB_MENU_ENTRY_TYPE_NORMAL:
             text_a->texture[0].data.text.string = e->entry->data.normal.label;
-            RrMinsize(text_a, &tw, &th);
+            RrMinSize(text_a, &tw, &th);
             tw = MIN(tw, MAX_MENU_WIDTH);
 
             if (e->entry->data.normal.icon_data ||
@@ -633,7 +633,7 @@ static void menu_frame_render(ObMenuFrame *self)
         case OB_MENU_ENTRY_TYPE_SUBMENU:
             sub = e->entry->data.submenu.submenu;
             text_a->texture[0].data.text.string = sub ? sub->title : "";
-            RrMinsize(text_a, &tw, &th);
+            RrMinSize(text_a, &tw, &th);
             tw = MIN(tw, MAX_MENU_WIDTH);
 
             if (e->entry->data.normal.icon_data ||
@@ -646,7 +646,7 @@ static void menu_frame_render(ObMenuFrame *self)
             if (e->entry->data.separator.label != NULL) {
                 e->a_text_title->texture[0].data.text.string =
                     e->entry->data.separator.label;
-                RrMinsize(e->a_text_title, &tw, &th);
+                RrMinSize(e->a_text_title, &tw, &th);
                 tw = MIN(tw, MAX_MENU_WIDTH);
                 th = ob_rr_theme->menu_title_height +
                     (ob_rr_theme->mbwidth - PADDING) *2;
index 9af23be0d88bfe291139cfec9b4bf6794daf338b..392aa9d164228b5b497c3ace11576c0286ed70a1 100644 (file)
@@ -75,25 +75,52 @@ void popup_position(ObPopup *self, gint gravity, gint x, gint y)
     self->y = y;
 }
 
-void popup_size(ObPopup *self, gint w, gint h)
+void popup_width(ObPopup *self, gint w)
 {
     self->w = w;
-    self->h = h;
 }
 
-void popup_size_to_string(ObPopup *self, gchar *text)
+void popup_height(ObPopup *self, gint h)
 {
-    gint textw, texth;
-    gint iconw;
+    gint texth;
 
-    self->a_text->texture[0].data.text.string = text;
-    RrMinsize(self->a_text, &textw, &texth);
-    /*XXX textw += ob_rr_theme->bevel * 2;*/
-    texth += ob_rr_theme->paddingy * 2;
+    /* don't let the height be smaller than the text */
+    texth = RrMinHeight(self->a_text) + ob_rr_theme->paddingy * 2;
+    self->h = MAX(h, texth);
+}
 
-    self->h = texth + ob_rr_theme->paddingy * 2;
-    iconw = (self->hasicon ? texth : 0);
+void popup_width_to_string(ObPopup *self, gchar *text, gint max)
+{
+    gint textw, iconw;
+
+    self->a_text->texture[0].data.text.string = text;
+    textw = RrMinWidth(self->a_text);
+    if (self->hasicon) {
+        gint texth = RrMinHeight(self->a_text) + ob_rr_theme->paddingy * 2;
+        iconw = texth;
+    } else
+        iconw = 0;
     self->w = textw + iconw + ob_rr_theme->paddingx * (self->hasicon ? 3 : 2);
+    /* cap it at "max" */
+    if (max > 0)
+        self->w = MIN(self->w, max);
+}
+
+void popup_height_to_string(ObPopup *self, gchar *text)
+{
+    self->h = RrMinHeight(self->a_text) + ob_rr_theme->paddingy * 2;
+}
+
+void popup_width_to_strings(ObPopup *self, gchar **strings, gint max)
+{
+    gint i, maxw;
+
+    maxw = 0;
+    for (i = 0; strings[i] != NULL; ++i) {
+        popup_width_to_string(self, strings[i], max);
+        maxw = MAX(maxw, self->w);
+    }
+    self->w = maxw;
 }
 
 void popup_set_text_align(ObPopup *self, RrJustify align)
@@ -122,9 +149,8 @@ void popup_show(ObPopup *self, gchar *text)
     /* set up the textures */
     self->a_text->texture[0].data.text.string = text;
 
-    /* measure the shit out */
-    RrMinsize(self->a_text, &textw, &texth);
-    /*XXX textw += ob_rr_theme->padding * 2;*/
+    /* measure the text out */
+    RrMinSize(self->a_text, &textw, &texth);
     texth += ob_rr_theme->paddingy * 2;
 
     /* set the sizes up and reget the text sizes from the calculated
index 609c30286a030741f8748b5b2c480e5636f9fc61..3ce0b5ccf106b870345d32fab276efd91a68fed3 100644 (file)
@@ -83,8 +83,11 @@ void popup_free(ObPopup *self);
 void popup_position(ObPopup *self, gint gravity, gint x, gint y);
 /*! Set the sizes for the popup. When set to 0, the size will be based on
   the text size. */
-void popup_size(ObPopup *self, gint w, gint h);
-void popup_size_to_string(ObPopup *self, gchar *text);
+void popup_width(ObPopup *self, gint w);
+void popup_height(ObPopup *self, gint w);
+void popup_width_to_string(ObPopup *self, gchar *text, gint max);
+void popup_height_to_string(ObPopup *self, gchar *text);
+void popup_width_to_strings(ObPopup *self, gchar **strings, gint max);
 
 void popup_set_text_align(ObPopup *self, RrJustify align);
 
@@ -101,8 +104,12 @@ void icon_popup_show(ObIconPopup *self,
                      gchar *text, const struct _ObClientIcon *icon);
 #define icon_popup_hide(p) popup_hide((p)->popup)
 #define icon_popup_position(p, g, x, y) popup_position((p)->popup,(g),(x),(y))
-#define icon_popup_size(p, w, h) popup_size((p)->popup,(w),(h))
-#define icon_popup_size_to_string(p, s) popup_size_to_string((p)->popup,(s))
+#define icon_popup_width(p, w) popup_width((p)->popup,(w))
+#define icon_popup_height(p, h) popup_height((p)->popup,(h))
+#define icon_popup_width_to_string(p, s, m) \
+    popup_width_to_string((p)->popup,(s),(m))
+#define icon_popup_width_to_strings(p, s, m) \
+    popup_width_to_strings((p)->popup,(s),(m))
 #define icon_popup_set_text_align(p, j) popup_set_text_align((p)->popup,(j))
 
 ObPagerPopup *pager_popup_new();
@@ -111,8 +118,12 @@ void pager_popup_free(ObPagerPopup *self);
 void pager_popup_show(ObPagerPopup *self, gchar *text, guint desk);
 #define pager_popup_hide(p) popup_hide((p)->popup)
 #define pager_popup_position(p, g, x, y) popup_position((p)->popup,(g),(x),(y))
-#define pager_popup_size(p, w, h) popup_size((p)->popup,(w),(h))
-#define pager_popup_size_to_string(p, s) popup_size_to_string((p)->popup,(s))
+#define pager_popup_width(p, w) popup_width((p)->popup,(w))
+#define pager_popup_height(p, h) popup_height((p)->popup,(h))
+#define pager_popup_width_to_string(p, s, m) \
+    popup_width_to_string((p)->popup,(s),(m))
+#define pager_popup_width_to_strings(p, s, m) \
+    popup_width_to_strings((p)->popup,(s),(m))
 #define pager_popup_set_text_align(p, j) popup_set_text_align((p)->popup,(j))
 
 #endif
index 0773caad9e210b43e042e2cb4345c63486c5397f..a302828baf1a7a293d87dc995e6efce2cbb687a5 100644 (file)
@@ -598,11 +598,8 @@ void screen_desktop_popup(guint d, gboolean show)
         a = screen_physical_area_monitor(0);
         pager_popup_position(desktop_cycle_popup, CenterGravity,
                              a->x + a->width / 2, a->y + a->height / 2);
-        /* XXX the size and the font extents need to be related on some level
-         */
-        pager_popup_size(desktop_cycle_popup, POPUP_WIDTH, POPUP_HEIGHT);
-
-        pager_popup_set_text_align(desktop_cycle_popup, RR_JUSTIFY_CENTER);
+        pager_popup_width(desktop_cycle_popup, MAX(a->width/3, POPUP_WIDTH));
+        pager_popup_height(desktop_cycle_popup, POPUP_HEIGHT);
 
         pager_popup_show(desktop_cycle_popup, screen_desktop_names[d], d);
     }
index 8c39fcd249d0a1e86dcae115a500e2ab2fe97747..2755e6678056f9fd60a9eaa3231715ed35a9cc84 100644 (file)
@@ -344,52 +344,85 @@ void RrMargins (RrAppearance *a, gint *l, gint *t, gint *r, gint *b)
     }
 }
 
-void RrMinsize(RrAppearance *a, gint *w, gint *h)
+void RrMinSize(RrAppearance *a, gint *w, gint *h)
+{
+    *w = RrMinWidth(a);
+    *h = RrMinHeight(a);
+}
+
+gint RrMinWidth(RrAppearance *a)
 {
     gint i;
     RrSize *m;
     gint l, t, r, b;
-    *w = *h = 0;
+    gint w = 0;
 
     for (i = 0; i < a->textures; ++i) {
         switch (a->texture[i].type) {
         case RR_TEXTURE_NONE:
             break;
         case RR_TEXTURE_MASK:
-            *w = MAX(*w, a->texture[i].data.mask.mask->width);
-            *h = MAX(*h, a->texture[i].data.mask.mask->height);
+            w = MAX(w, a->texture[i].data.mask.mask->width);
             break;
         case RR_TEXTURE_TEXT:
             m = RrFontMeasureString(a->texture[i].data.text.font,
                                     a->texture[i].data.text.string, 
                                     a->texture[i].data.text.shadow_offset_x,
                                     a->texture[i].data.text.shadow_offset_y);
-            *w = MAX(*w, m->width + 4);
-            m->height = RrFontHeight(a->texture[i].data.text.font,
-                                     a->texture[i].data.text.shadow_offset_y);
-            *h += MAX(*h, m->height);
+            w = MAX(w, m->width + 4);
             g_free(m);
             break;
         case RR_TEXTURE_RGBA:
-            *w += MAX(*w, a->texture[i].data.rgba.width);
-            *h += MAX(*h, a->texture[i].data.rgba.height);
+            w += MAX(w, a->texture[i].data.rgba.width);
+            break;
+        case RR_TEXTURE_LINE_ART:
+            w += MAX(w, MAX(a->texture[i].data.lineart.x1,
+                            a->texture[i].data.lineart.x2));
+            break;
+        }
+    }
+
+    RrMargins(a, &l, &t, &r, &b);
+
+    w += l + r;
+
+    if (w < 1) w = 1;
+    return w;
+}
+
+gint RrMinHeight(RrAppearance *a)
+{
+    gint i;
+    gint l, t, r, b;
+    gint h = 0;
+
+    for (i = 0; i < a->textures; ++i) {
+        switch (a->texture[i].type) {
+        case RR_TEXTURE_NONE:
+            break;
+        case RR_TEXTURE_MASK:
+            h = MAX(h, a->texture[i].data.mask.mask->height);
+            break;
+        case RR_TEXTURE_TEXT:
+            h += MAX(h, RrFontHeight(a->texture[i].data.text.font,
+                                     a->texture[i].data.text.shadow_offset_y));
+            break;
+        case RR_TEXTURE_RGBA:
+            h += MAX(h, a->texture[i].data.rgba.height);
             break;
         case RR_TEXTURE_LINE_ART:
-            *w += MAX(*w, MAX(a->texture[i].data.lineart.x1,
-                              a->texture[i].data.lineart.x2));
-            *h += MAX(*h, MAX(a->texture[i].data.lineart.y1,
-                              a->texture[i].data.lineart.y2));
+            h += MAX(h, MAX(a->texture[i].data.lineart.y1,
+                            a->texture[i].data.lineart.y2));
             break;
         }
     }
 
     RrMargins(a, &l, &t, &r, &b);
 
-    *w += l + r;
-    *h += t + b;
+    h += t + b;
 
-    if (*w < 1) *w = 1;
-    if (*h < 1) *h = 1;
+    if (h < 1) h = 1;
+    return h;
 }
 
 static void reverse_bits(gchar *c, gint n)
index da2361cc805d7766ce0edec05183cf403e2cc0f8..3b996375b7896023f67564860236b5239b35a189 100644 (file)
@@ -245,7 +245,9 @@ gint    RrFontMaxCharWidth  (const RrFont *f);
    it is non-null. */
 Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
 void   RrPaint       (RrAppearance *a, Window win, gint w, gint h);
-void   RrMinsize     (RrAppearance *a, gint *w, gint *h);
+void   RrMinSize     (RrAppearance *a, gint *w, gint *h);
+gint   RrMinWidth    (RrAppearance *a);
+gint   RrMinHeight   (RrAppearance *a);
 void   RrMargins     (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
 
 gboolean RrPixmapToRGBA(const RrInstance *inst,
This page took 0.034543 seconds and 4 git commands to generate.