]> Dogcows Code - chaz/openbox/blobdiff - openbox/popup.c
small change to the render API. RrMinsize became RrMinSize. added RrMinWidth and...
[chaz/openbox] / openbox / popup.c
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
This page took 0.023683 seconds and 4 git commands to generate.