add osd theme elements
authorDana Jansens <danakj@orodu.net>
Tue, 5 Jun 2007 15:51:36 +0000 (15:51 +0000)
committerDana Jansens <danakj@orodu.net>
Tue, 5 Jun 2007 15:51:36 +0000 (15:51 +0000)
data/themerc.xsd
render/theme.c
tools/themetoxml/themetoxml.c

index 112b020..eb7bd7d 100644 (file)
 
   <xs:complexType name="allosd">
     <xs:all>
-      <xs:element name="text" type="obt:text" minOccurs="0"/>
+      <xs:element name="label" type="obt:textarea" minOccurs="0"/>
+      <xs:element name="background" type="obt:area" minOccurs="0"/>
+      <xs:element name="hilight" type="obt:area" minOccurs="0"/>
+      <xs:element name="unhilight" type="obt:area" minOccurs="0"/>
     </xs:all>
   </xs:complexType>
 
index 313f834..15b7e3c 100644 (file)
@@ -141,6 +141,10 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
     theme->a_menu_bullet_selected = RrAppearanceNew(inst, 1);
     theme->a_clear = RrAppearanceNew(inst, 0);
     theme->a_clear_tex = RrAppearanceNew(inst, 1);
+    theme->osd_hilite_bg = RrAppearanceNew(inst, 0);
+    theme->osd_hilite_label = RrAppearanceNew(inst, 1);
+    theme->osd_hilite_fg = RrAppearanceNew(inst, 0);
+    theme->osd_unhilite_fg = RrAppearanceNew(inst, 0);
 
     /* load the font stuff */
 
@@ -263,7 +267,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
     if (!FIND(color, L("window","active","label","text","primary"),
               &theme->title_focused_color, NULL))
         theme->title_focused_color = RrColorNew(inst, 0x0, 0x0, 0x0);
-    if (!FIND(color, L("osd","text","primary"),
+    if (!FIND(color, L("osd","label","text","primary"),
               &theme->osd_color, NULL))
         theme->osd_color = RrColorNew(inst,
                                       theme->title_focused_color->r,
@@ -388,7 +392,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
         theme->title_focused_shadow_color = RrColorNew(inst, 0, 0, 0);
         theme->title_focused_shadow_alpha = 50;
     }
-    if (!FIND(color, L("osd","text","shadow","primary"),
+    if (!FIND(color, L("osd","label","text","shadow","primary"),
               &theme->osd_shadow_color, &theme->osd_shadow_alpha))
     {
         theme->osd_shadow_color = 
@@ -604,17 +608,33 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
         theme->a_menu_disabled_selected =
             RrAppearanceCopy(theme->a_menu_selected);
 
-    /* read the appearances for rendering non-decorations */
-    theme->osd_hilite_bg = RrAppearanceCopy(theme->a_focused_title);
-    theme->osd_hilite_label = RrAppearanceCopy(theme->a_focused_label);
-    if (theme->a_focused_label->surface.grad != RR_SURFACE_PARENTREL)
-        theme->osd_hilite_fg = RrAppearanceCopy(theme->a_focused_label);
-    else
-        theme->osd_hilite_fg = RrAppearanceCopy(theme->a_focused_title);
-    if (theme->a_unfocused_label->surface.grad != RR_SURFACE_PARENTREL)
-        theme->osd_unhilite_fg = RrAppearanceCopy(theme->a_unfocused_label);
-    else
-        theme->osd_unhilite_fg = RrAppearanceCopy(theme->a_unfocused_title);
+    /* read appearances for non-decorations (on-screen-display) */
+    if (!FIND(appearance, L("osd", "background"), theme->osd_hilite_bg, FALSE)) {
+        RrAppearanceFree(theme->osd_hilite_bg);
+        theme->osd_hilite_bg = RrAppearanceCopy(theme->a_focused_title);
+    }
+    if (!FIND(appearance, L("osd", "label"), theme->osd_hilite_label, TRUE)) {
+        RrAppearanceFree(theme->osd_hilite_label);
+        theme->osd_hilite_label = RrAppearanceCopy(theme->a_focused_label);
+    }
+    /* osd_hilite_fg can't be parentrel */
+    if (!FIND(appearance, L("osd", "hilight"), theme->osd_hilite_fg, FALSE)) {
+        RrAppearanceFree(theme->osd_hilite_fg);
+        if (theme->a_focused_label->surface.grad != RR_SURFACE_PARENTREL)
+            theme->osd_hilite_fg = RrAppearanceCopy(theme->a_focused_label);
+        else
+            theme->osd_hilite_fg = RrAppearanceCopy(theme->a_focused_title);
+    }
+    /* osd_unhilite_fg can't be parentrel either */
+    if (!FIND(appearance, L("osd", "unhilight"), theme->osd_unhilite_fg,
+              FALSE))
+    {
+        RrAppearanceFree(theme->osd_unhilite_fg);
+        if (theme->a_unfocused_label->surface.grad != RR_SURFACE_PARENTREL)
+            theme->osd_unhilite_fg=RrAppearanceCopy(theme->a_unfocused_label);
+        else
+            theme->osd_unhilite_fg=RrAppearanceCopy(theme->a_unfocused_title);
+    }
 
     /* read buttons textures */
     if (!FIND(appearance, L("window","active","buttons","disabled"),
@@ -816,7 +836,7 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name,
     theme->a_focused_label->texture[0].data.text.shadow_alpha =
         theme->title_focused_shadow_alpha;
 
-    if (!FIND(shadow, L("osd","text","shadow","offset"),
+    if (!FIND(shadow, L("osd","label","text","shadow","offset"),
               theme->osd_hilite_label))
     {
         theme->osd_hilite_label->texture[0].data.text.shadow_offset_x =
index 464944d..8e3ce40 100644 (file)
@@ -465,6 +465,9 @@ int main(int argc, char **argv)
                    &i, &j, &k))
         COLOR4("menu","active","text","primary",i,j,k,255);
 
+    if (read_color(db, "osd.label.text.color", &i, &j, &k))
+        COLOR4("osd","label","text","primary",i,j,k,255);
+
     APPEARANCE3("window.active.title.bg", "window", "active", "titlebar");
     APPEARANCE3("window.inactive.title.bg", "window", "inactive", "titlebar");
     APPEARANCE3("window.active.label.bg", "window", "active", "label");
@@ -499,6 +502,11 @@ int main(int argc, char **argv)
     APPEARANCE4("window.inactive.button.hover.bg",
                 "window", "inactive", "buttons", "hover");
 
+    APPEARANCE2("osd.bg", "osd", "background");
+    APPEARANCE2("osd.label.bg", "osd", "label");
+    APPEARANCE2("osd.hilight.bg", "osd", "hilight");
+    APPEARANCE2("osd.unhilight.bg", "osd", "unhilight");
+
     if (read_string(db, "window.active.label.text.font", &s)) {
         char *p;
         if (strstr(s, "shadow=y")) {
@@ -592,6 +600,25 @@ int main(int argc, char **argv)
         }
     }
 
+    if (read_string(db, "osd.label.text.font", &s)) {
+        char *p;
+        if (strstr(s, "shadow=y")) {
+            if ((p = strstr(s, "shadowoffset=")))
+                i = parse_inline_number(p + strlen("shadowoffset="));
+            else
+                i = 1;
+            ATTR5("osd","label","text","shadow","offset","x",NUM(i));
+            ATTR5("osd","label","text","shadow","offset","y",NUM(i));
+        }
+        if ((p = strstr(s, "shadowtint=")))
+        {
+            i = parse_inline_number(p + strlen("shadowtint="));
+            j = (i > 0 ? 0 : 255);
+            i = ABS(i*255/100);
+            COLOR5("osd","label","text","shadow","primary",j,j,j,i);
+        }
+    }
+
     if (xmlSaveFormatFile("-", doc, 1) < 0) {
         fprintf(stderr, "Error writing the xml tree\n");
         ret = 1;