[gtk+] win32 theme: Draw checkmarks and radiomarks properly



commit b227d023f3b2fc512d364b2297d885184d4444c2
Author: Benjamin Otte <otte gnome org>
Date:   Mon Feb 15 01:47:43 2016 +0100

    win32 theme: Draw checkmarks and radiomarks properly
    
    Instead of drawing them as the background, use -gtk-icon-source.
    Also size the marks properly.
    
    Because Windows doesn't have indeterminate radio buttons, use a
    cross-fade between checked and unchecked radiomark instead. But
    unlike previously, use CSS cross-fade() syntax to draw it.

 gtk/theme/win32/gtk-win32-base.css |  223 ++++++++++++++++++++++++------------
 1 files changed, 148 insertions(+), 75 deletions(-)
---
diff --git a/gtk/theme/win32/gtk-win32-base.css b/gtk/theme/win32/gtk-win32-base.css
index 3db320c..329b109 100644
--- a/gtk/theme/win32/gtk-win32-base.css
+++ b/gtk/theme/win32/gtk-win32-base.css
@@ -132,6 +132,154 @@ assistant .sidebar .highlight {
     color:  -gtk-win32-color(button, 9);
 }
 
+/* checkmarks */
+
+check {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 1);
+    min-width: -gtk-win32-part-width(button, 3, 1);
+    min-height: -gtk-win32-part-height(button, 3, 1);
+}
+
+check:hover {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 2);
+    min-width: -gtk-win32-part-width(button, 3, 2);
+    min-height: -gtk-win32-part-height(button, 3, 2);
+}
+
+check:active {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 3);
+    min-width: -gtk-win32-part-width(button, 3, 3);
+    min-height: -gtk-win32-part-height(button, 3, 3);
+}
+
+check:disabled {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 4);
+    min-width: -gtk-win32-part-width(button, 3, 4);
+    min-height: -gtk-win32-part-height(button, 3, 4);
+}
+
+check:checked {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 5);
+    min-width: -gtk-win32-part-width(button, 3, 5);
+    min-height: -gtk-win32-part-height(button, 3, 5);
+}
+
+check:checked:hover {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 6);
+    min-width: -gtk-win32-part-width(button, 3, 6);
+    min-height: -gtk-win32-part-height(button, 3, 6);
+}
+
+check:checked:active {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 7);
+    min-width: -gtk-win32-part-width(button, 3, 7);
+    min-height: -gtk-win32-part-height(button, 3, 7);
+}
+
+check:checked:disabled {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 8);
+    min-width: -gtk-win32-part-width(button, 3, 8);
+    min-height: -gtk-win32-part-height(button, 3, 8);
+}
+
+check:indeterminate {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 9);
+    min-width: -gtk-win32-part-width(button, 3, 9);
+    min-height: -gtk-win32-part-height(button, 3, 9);
+}
+
+check:indeterminate:hover {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 10);
+    min-width: -gtk-win32-part-width(button, 3, 10);
+    min-height: -gtk-win32-part-height(button, 3, 10);
+}
+
+check:indeterminate:active {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 11);
+    min-width: -gtk-win32-part-width(button, 3, 11);
+    min-height: -gtk-win32-part-height(button, 3, 11);
+}
+
+check:indeterminate:disabled {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 3 12);
+    min-width: -gtk-win32-part-width(button, 3, 12);
+    min-height: -gtk-win32-part-height(button, 3, 12);
+}
+
+/* radiomarks */
+
+radio {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 2 1);
+    min-width: -gtk-win32-part-width(button, 2, 1);
+    min-height: -gtk-win32-part-height(button, 2, 1);
+}
+
+radio:hover {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 2 2);
+    min-width: -gtk-win32-part-width(button, 2, 2);
+    min-height: -gtk-win32-part-height(button, 2, 2);
+}
+
+radio:active {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 2 3);
+    min-width: -gtk-win32-part-width(button, 2, 3);
+    min-height: -gtk-win32-part-height(button, 2, 3);
+}
+
+radio:disabled {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 2 4);
+    min-width: -gtk-win32-part-width(button, 2, 4);
+    min-height: -gtk-win32-part-height(button, 2, 4);
+}
+
+radio:checked {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 2 5);
+    min-width: -gtk-win32-part-width(button, 2, 5);
+    min-height: -gtk-win32-part-height(button, 2, 5);
+}
+
+radio:checked:hover {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 2 6);
+    min-width: -gtk-win32-part-width(button, 2, 6);
+    min-height: -gtk-win32-part-height(button, 2, 6);
+}
+
+radio:checked:active {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 2 7);
+    min-width: -gtk-win32-part-width(button, 2, 7);
+    min-height: -gtk-win32-part-height(button, 2, 7);
+}
+
+radio:checked:disabled {
+    -gtk-icon-source: -gtk-win32-theme-part(button, 2 8);
+    min-width: -gtk-win32-part-width(button, 2, 8);
+    min-height: -gtk-win32-part-height(button, 2, 8);
+}
+
+radio:indeterminate {
+    -gtk-icon-source: cross-fade(30% -gtk-win32-theme-part(button, 2 5), -gtk-win32-theme-part(button, 2 1));
+    min-width: -gtk-win32-part-width(button, 2, 9);
+    min-height: -gtk-win32-part-height(button, 2, 9);
+}
+
+radio:indeterminate:hover {
+    -gtk-icon-source: cross-fade(30% -gtk-win32-theme-part(button, 2 6), -gtk-win32-theme-part(button, 2 2));
+    min-width: -gtk-win32-part-width(button, 2, 2);
+    min-height: -gtk-win32-part-height(button, 2, 2);
+}
+
+radio:indeterminate:active {
+    -gtk-icon-source: cross-fade(30% -gtk-win32-theme-part(button, 2 7), -gtk-win32-theme-part(button, 2 3));
+    min-width: -gtk-win32-part-width(button, 2, 3);
+    min-height: -gtk-win32-part-height(button, 2, 3);
+}
+
+radio:indeterminate:disabled {
+    -gtk-icon-source: cross-fade(30% -gtk-win32-theme-part(button, 2 8), -gtk-win32-theme-part(button, 2 4));
+    min-width: -gtk-win32-part-width(button, 2, 4);
+    min-height: -gtk-win32-part-height(button, 2, 4);
+}
+
 /* Buttons */
 
 button {
@@ -183,51 +331,13 @@ button.radio:hover {
 .check:focus,
 .check {
     background-color: transparent;
-    background-image: -gtk-win32-theme-part(button, 3 1);
     border-width: 0;
 }
 
-.check:disabled {
-    background-image: -gtk-win32-theme-part(button, 3 4);
-}
-
 /* The button here is to avoid problems with checkboxes
    in a listview where all checkboxes in a row gets prelighted
    whenever the row is prelighted */
 
-button.check:focus:hover,
-button.check:hover {
-    background-image: -gtk-win32-theme-part(button, 3 2);
-}
-
-check:focus:active,
-check:active {
-    background-image: -gtk-win32-theme-part(button, 3 5);
-}
-
-check:active:disabled {
-    background-image: -gtk-win32-theme-part(button, 3 8);
-}
-
-button.check:focus:active:hover,
-button.check:active:hover {
-    background-image: -gtk-win32-theme-part(button, 3 6);
-}
-
-check:focus:indeterminate,
-check:indeterminate {
-    background-image: -gtk-win32-theme-part(button, 3 9);
-}
-
-check:indeterminate:disabled {
-    background-image: -gtk-win32-theme-part(button, 3 12);
-}
-
-check:focus:indeterminate:hover,
-check:indeterminate:hover {
-    background-image: -gtk-win32-theme-part(button, 3 10);
-}
-
 check:selected {
     background-color: transparent;
 }
@@ -236,46 +346,9 @@ check:selected {
 
 radio {
     background-color: transparent;
-    background-image: -gtk-win32-theme-part(button, 2 1);
     border-width: 0;
 }
 
-radio:disabled {
-    background-image: -gtk-win32-theme-part(button, 2 4);
-}
-
-radio:hover {
-    background-image: -gtk-win32-theme-part(button, 2 2);
-}
-
-radio:active {
-    background-image: -gtk-win32-theme-part(button, 2 5);
-}
-
-radio:active:disabled {
-    background-image: -gtk-win32-theme-part(button, 2 8);
-}
-
-radio:active:hover {
-    background-image: -gtk-win32-theme-part(button, 2 6);
-}
-
-radio:indeterminate {
-    background-image: -gtk-win32-theme-part(button, 2 1, over (2 5, 0.3));
-}
-
-radio:indeterminate:disabled {
-    background-image: -gtk-win32-theme-part(button, 2 4, over (2 8, 0.3));
-}
-
-radio:indeterminate:hover {
-    background-image: -gtk-win32-theme-part(button, 2 4, over(2 6, 0.3));
-}
-
-radio:selected {
-    background-color: transparent;
-}
-
 /* Scrollbars */
 
 /* TODO: Win32 has different concept for upper and lower trough, we


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]