UI: allow off/on icons to be in reverse order.
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Mon, 29 Oct 2018 15:58:34 +0000 (16:58 +0100)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Mon, 29 Oct 2018 18:04:07 +0000 (19:04 +0100)
The same icons are reused for "hide" and "show" properties, which need
to be in reverse order compared to each other.

source/blender/editors/include/UI_interface.h
source/blender/editors/interface/interface.c
source/blender/editors/interface/interface_widgets.c
source/blender/makesrna/RNA_define.h
source/blender/makesrna/RNA_types.h
source/blender/makesrna/intern/rna_define.c

index 92423d84c3f2e3aaaef213ddc3af04a9386ff61a..ac463fe87a2e0f5b17d403a922636e3c5485ce0e 100644 (file)
@@ -236,6 +236,8 @@ enum {
        UI_BUT_ACTIVE_RIGHT      = (1 << 22), /* Active right part of number button */
 
        UI_BUT_HAS_SHORTCUT      = (1 << 23), /* Button has shortcut text */
        UI_BUT_ACTIVE_RIGHT      = (1 << 22), /* Active right part of number button */
 
        UI_BUT_HAS_SHORTCUT      = (1 << 23), /* Button has shortcut text */
+
+       UI_BUT_ICON_REVERSE      = (1 << 24), /* Reverse order of consecutive off/on icons */
 };
 
 /* scale fixed button widths by this to account for DPI */
 };
 
 /* scale fixed button widths by this to account for DPI */
index 3e8d32c0e2b6e64ccef0a11c66eb72521b159c94..1e1c9c1fa3fbe3a1aaa2ed22b8eac3144651f0d7 100644 (file)
@@ -2985,7 +2985,11 @@ void ui_but_update_ex(uiBut *but, const bool validate)
 
                case UI_BTYPE_ICON_TOGGLE:
                case UI_BTYPE_ICON_TOGGLE_N:
 
                case UI_BTYPE_ICON_TOGGLE:
                case UI_BTYPE_ICON_TOGGLE_N:
-                       if (!but->rnaprop || (RNA_property_flag(but->rnaprop) & PROP_ICONS_CONSECUTIVE)) {
+                       if ((but->rnaprop == NULL) || (RNA_property_flag(but->rnaprop) & PROP_ICONS_CONSECUTIVE)) {
+                               if (but->rnaprop && RNA_property_flag(but->rnaprop) & PROP_ICONS_REVERSE) {
+                                       but->drawflag |= UI_BUT_ICON_REVERSE;
+                               }
+
                                but->iconadd = (but->flag & UI_SELECT) ? 1 : 0;
                        }
                        break;
                                but->iconadd = (but->flag & UI_SELECT) ? 1 : 0;
                        }
                        break;
index 99022a14b6aa43ccd28b26099891702199fd2c5f..b8a661c55426b181651fb85b3298ec4f226e0789 100644 (file)
@@ -2016,6 +2016,21 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b
        }
 }
 
        }
 }
 
+static BIFIconID widget_icon_id(uiBut *but)
+{
+       if (!(but->flag & UI_HAS_ICON)) {
+               return ICON_NONE;
+       }
+
+       /* Consecutive icons can be toggle between. */
+       if (but->drawflag & UI_BUT_ICON_REVERSE) {
+               return but->icon - but->iconadd;
+       }
+       else {
+               return but->icon + but->iconadd;
+       }
+}
+
 /* draws text and icons for buttons */
 static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *but, rcti *rect)
 {
 /* draws text and icons for buttons */
 static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *but, rcti *rect)
 {
@@ -2039,7 +2054,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB
 
        /* Big previews with optional text label below */
        if (but->flag & UI_BUT_ICON_PREVIEW && ui_block_is_menu(but->block)) {
 
        /* Big previews with optional text label below */
        if (but->flag & UI_BUT_ICON_PREVIEW && ui_block_is_menu(but->block)) {
-               const BIFIconID icon = (but->flag & UI_HAS_ICON) ? but->icon + but->iconadd : ICON_NONE;
+               const BIFIconID icon = widget_icon_id(but);
                int icon_size = BLI_rcti_size_y(rect);
                int text_size = 0;
 
                int icon_size = BLI_rcti_size_y(rect);
                int text_size = 0;
 
@@ -2076,7 +2091,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB
                }
 #endif
 
                }
 #endif
 
-               const BIFIconID icon = (but->flag & UI_HAS_ICON) ? but->icon + but->iconadd : ICON_NONE;
+               const BIFIconID icon = widget_icon_id(but);
                int icon_size_init = is_tool ? ICON_DEFAULT_HEIGHT_TOOLBAR : ICON_DEFAULT_HEIGHT;
                const float icon_size = icon_size_init / (but->block->aspect / UI_DPI_FAC);
                const float icon_padding = 2 * UI_DPI_FAC;
                int icon_size_init = is_tool ? ICON_DEFAULT_HEIGHT_TOOLBAR : ICON_DEFAULT_HEIGHT;
                const float icon_size = icon_size_init / (but->block->aspect / UI_DPI_FAC);
                const float icon_padding = 2 * UI_DPI_FAC;
index 551805f6a80450ceb14a220684da51f0908c26f0..e14dcbea09e7d7931ab2ea0c4216d7fb791a6c9b 100644 (file)
@@ -175,7 +175,7 @@ void RNA_def_property_string_default(PropertyRNA *prop, const char *value);
 
 void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description);
 void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision);
 
 void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description);
 void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision);
-void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, bool consecutive);
+void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive);
 
 void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *updatefunc);
 void RNA_def_property_editable_func(PropertyRNA *prop, const char *editable);
 
 void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *updatefunc);
 void RNA_def_property_editable_func(PropertyRNA *prop, const char *editable);
index 0e7c3956d7ba6e3fe9268ac3c79aa79ea6f69472..72e1c05de3ce801f1067dd5398fb10145382502b 100644 (file)
@@ -184,6 +184,7 @@ typedef enum PropertyFlag {
 
        /* icon */
        PROP_ICONS_CONSECUTIVE       = (1 << 12),
 
        /* icon */
        PROP_ICONS_CONSECUTIVE       = (1 << 12),
+       PROP_ICONS_REVERSE           = (1 << 8),
 
        /* hidden in  the user interface */
        PROP_HIDDEN                  = (1 << 19),
 
        /* hidden in  the user interface */
        PROP_HIDDEN                  = (1 << 19),
index c3c7367283e296d85b02cbd08ced2efd75406e1f..42db80c83c058e54c7ad91a1288b8860d60d8482 100644 (file)
@@ -1426,11 +1426,13 @@ void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *d
        prop->description = description;
 }
 
        prop->description = description;
 }
 
-void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, bool consecutive)
+void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
 {
        prop->icon = icon;
 {
        prop->icon = icon;
-       if (consecutive)
+       if (consecutive != 0)
                prop->flag |= PROP_ICONS_CONSECUTIVE;
                prop->flag |= PROP_ICONS_CONSECUTIVE;
+       if (consecutive < 0)
+               prop->flag |= PROP_ICONS_REVERSE;
 }
 
 /**
 }
 
 /**