Commit: 291c28642dce6b0ab22d1a848c40ed352bef8975
Author: Julian Eisel
Date:   Mon Oct 3 20:04:21 2016 +0200
Branches: custom-manipulators temp_manipulators_core
https://developer.blender.org/rB291c28642dce6b0ab22d1a848c40ed352bef8975

Split wmManipulator flag into behavior flags and state flags

===================================================================

M       source/blender/windowmanager/manipulators/WM_manipulator_types.h
M       source/blender/windowmanager/manipulators/intern/wm_manipulator.c
M       source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
M       source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
M       source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c

===================================================================

diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_types.h 
b/source/blender/windowmanager/manipulators/WM_manipulator_types.h
index 13ae223..ab9220a 100644
--- a/source/blender/windowmanager/manipulators/WM_manipulator_types.h
+++ b/source/blender/windowmanager/manipulators/WM_manipulator_types.h
@@ -59,19 +59,15 @@ typedef struct wmManipulatorWrapper {
 } wmManipulatorWrapper;
 
 /* wmManipulator->flag */
+/* TODO some of these could become group-type flags */
 enum eManipulatorFlag {
-       /* states (TODO separate bitfield) */
-       WM_MANIPULATOR_HIGHLIGHT   = (1 << 0),
-       WM_MANIPULATOR_ACTIVE      = (1 << 1),
-       WM_MANIPULATOR_SELECTED    = (1 << 2),
-       /* settings */
-       WM_MANIPULATOR_DRAW_HOVER  = (1 << 3),
-       WM_MANIPULATOR_DRAW_ACTIVE = (1 << 4), /* draw while dragging */
-       WM_MANIPULATOR_DRAW_VALUE  = (1 << 5), /* draw a indicator for the 
current value while dragging */
-       WM_MANIPULATOR_SCALE_3D    = (1 << 6),
-       WM_MANIPULATOR_SCENE_DEPTH = (1 << 7), /* manipulator is depth culled 
with scene objects (TODO could be group flag) */
-       WM_MANIPULATOR_HIDDEN      = (1 << 8),
-       WM_MANIPULATOR_SELECTABLE  = (1 << 9),
+       WM_MANIPULATOR_DRAW_HOVER  = (1 << 0), /* draw *only* while hovering */
+       WM_MANIPULATOR_DRAW_ACTIVE = (1 << 1), /* draw while dragging */
+       WM_MANIPULATOR_DRAW_VALUE  = (1 << 2), /* draw a indicator for the 
current value while dragging */
+       WM_MANIPULATOR_SCALE_3D    = (1 << 3),
+       WM_MANIPULATOR_SCENE_DEPTH = (1 << 4), /* manipulator can be depth 
culled with scene objects */
+       WM_MANIPULATOR_HIDDEN      = (1 << 5),
+       WM_MANIPULATOR_SELECTABLE  = (1 << 6),
 };
 
 
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator.c 
b/source/blender/windowmanager/manipulators/intern/wm_manipulator.c
index 0d5c46b..347726e 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulator.c
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator.c
@@ -185,13 +185,13 @@ bool wm_manipulator_register(wmManipulatorGroup *mgroup, 
wmManipulator *manipula
  */
 void WM_manipulator_delete(ListBase *manipulatorlist, wmManipulatorMap *mmap, 
wmManipulator *manipulator, bContext *C)
 {
-       if (manipulator->flag & WM_MANIPULATOR_HIGHLIGHT) {
+       if (manipulator->state & WM_MANIPULATOR_HIGHLIGHT) {
                wm_manipulatormap_set_highlighted_manipulator(mmap, C, NULL, 0);
        }
-       if (manipulator->flag & WM_MANIPULATOR_ACTIVE) {
+       if (manipulator->state & WM_MANIPULATOR_ACTIVE) {
                wm_manipulatormap_set_active_manipulator(mmap, C, NULL, NULL);
        }
-       if (manipulator->flag & WM_MANIPULATOR_SELECTED) {
+       if (manipulator->state & WM_MANIPULATOR_SELECTED) {
                wm_manipulator_deselect(mmap, manipulator);
        }
 
@@ -338,7 +338,7 @@ bool wm_manipulator_deselect(wmManipulatorMap *mmap, 
wmManipulator *manipulator)
        bool changed = false;
 
        /* caller should check! */
-       BLI_assert(manipulator->flag & WM_MANIPULATOR_SELECTED);
+       BLI_assert(manipulator->state & WM_MANIPULATOR_SELECTED);
 
        /* remove manipulator from selected_manipulators array */
        for (int i = 0; i < (*tot_selected); i++) {
@@ -360,7 +360,7 @@ bool wm_manipulator_deselect(wmManipulatorMap *mmap, 
wmManipulator *manipulator)
                (*tot_selected)--;
        }
 
-       manipulator->flag &= ~WM_MANIPULATOR_SELECTED;
+       manipulator->state &= ~WM_MANIPULATOR_SELECTED;
        return changed;
 }
 
@@ -375,7 +375,7 @@ bool wm_manipulator_select(bContext *C, wmManipulatorMap 
*mmap, wmManipulator *m
        wmManipulator ***sel = &mmap->mmap_context.selected_manipulator;
        int *tot_selected = &mmap->mmap_context.tot_selected;
 
-       if (!manipulator || (manipulator->flag & WM_MANIPULATOR_SELECTED))
+       if (!manipulator || (manipulator->state & WM_MANIPULATOR_SELECTED))
                return false;
 
        (*tot_selected)++;
@@ -383,7 +383,7 @@ bool wm_manipulator_select(bContext *C, wmManipulatorMap 
*mmap, wmManipulator *m
        *sel = MEM_reallocN(*sel, sizeof(wmManipulator *) * (*tot_selected));
        (*sel)[(*tot_selected) - 1] = manipulator;
 
-       manipulator->flag |= WM_MANIPULATOR_SELECTED;
+       manipulator->state |= WM_MANIPULATOR_SELECTED;
        if (manipulator->select) {
                manipulator->select(C, manipulator, SEL_SELECT);
        }
@@ -442,13 +442,13 @@ bool wm_manipulator_is_visible(wmManipulator *manipulator)
        if (manipulator->flag & WM_MANIPULATOR_HIDDEN) {
                return false;
        }
-       if ((manipulator->flag & WM_MANIPULATOR_ACTIVE) &&
+       if ((manipulator->state & WM_MANIPULATOR_ACTIVE) &&
            !(manipulator->flag & (WM_MANIPULATOR_DRAW_ACTIVE | 
WM_MANIPULATOR_DRAW_VALUE)))
        {
                /* don't draw while active (while dragging) */
                return false;
        }
-       if ((manipulator->flag & WM_MANIPULATOR_DRAW_HOVER) && 
!(manipulator->flag & WM_MANIPULATOR_HIGHLIGHT)) {
+       if ((manipulator->flag & WM_MANIPULATOR_DRAW_HOVER) && 
!(manipulator->state & WM_MANIPULATOR_HIGHLIGHT)) {
                /* only draw on mouse hover */
                return false;
        }
diff --git 
a/source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h 
b/source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
index 4791282..dd284e9 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
@@ -71,7 +71,8 @@ typedef struct wmManipulator {
        /* called when manipulator selection state changes */
        wmManipulatorSelectFunc select;
 
-       int flag; /* flags set by drawing and interaction, such as highlighting 
*/
+       int flag; /* flags that influence the behavior or how the manipulators 
are drawn */
+       short state; /* state flags (active, highlighted, selected) */
 
        unsigned char highlighted_part;
 
@@ -105,6 +106,13 @@ typedef struct wmManipulator {
        PropertyRNA **props;
 } wmManipulator;
 
+/* wmManipulator.state */
+enum {
+       WM_MANIPULATOR_HIGHLIGHT   = (1 << 0), /* while hovered */
+       WM_MANIPULATOR_ACTIVE      = (1 << 1), /* while dragging */
+       WM_MANIPULATOR_SELECTED    = (1 << 2),
+};
+
 /**
  * \brief Manipulator tweak flag.
  * Bitflag passed to manipulator while tweaking.
diff --git 
a/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c 
b/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
index c2780d3..fc869eb 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
@@ -204,7 +204,7 @@ static int manipulator_select_invoke(bContext *C, 
wmOperator *op, const wmEvent
        }
 
        if (highlighted) {
-               const bool is_selected = (highlighted->flag & 
WM_MANIPULATOR_SELECTED);
+               const bool is_selected = (highlighted->state & 
WM_MANIPULATOR_SELECTED);
                bool redraw = false;
 
                if (toggle) {
diff --git 
a/source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c 
b/source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c
index 579d6b2..cac8eb1 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c
@@ -212,13 +212,11 @@ static void manipulatormap_prepare_drawing(
        for (wmManipulatorGroup *mgroup = mmap->manipulator_groups.first; 
mgroup; mgroup = mgroup->next) {
                /* account for drawstep on manipulator-group level (do first to 
avoid calling mgroup->poll if not needed) */
                if ((drawstep == WM_MANIPULATORMAP_DRAWSTEP_2D && 
mgroup->type->is_3d) ||
-                   (drawstep == WM_MANIPULATORMAP_DRAWSTEP_3D && 
!mgroup->type->is_3d))
+                   (drawstep == WM_MANIPULATORMAP_DRAWSTEP_3D && 
!mgroup->type->is_3d) ||
+                   !wm_manipulatorgroup_is_visible(mgroup, C))
                {
                        continue;
                }
-               if (!wm_manipulatorgroup_is_visible(mgroup, C)) {
-                       continue;
-               }
 
                /* needs to be initialized on first draw */
                wm_manipulatorgroup_ensure_initialized(mgroup, C);
@@ -485,7 +483,7 @@ bool wm_manipulatormap_deselect_all(wmManipulatorMap *mmap, 
wmManipulator ***sel
                return false;
 
        for (int i = 0; i < mmap->mmap_context.tot_selected; i++) {
-               (*sel)[i]->flag &= ~WM_MANIPULATOR_SELECTED;
+               (*sel)[i]->state &= ~WM_MANIPULATOR_SELECTED;
                (*sel)[i] = NULL;
        }
        wm_manipulatormap_selected_delete(mmap);
@@ -523,10 +521,10 @@ static bool wm_manipulatormap_select_all_intern(
        GHASH_ITER_INDEX (gh_iter, hash, i) {
                wmManipulator *manipulator_iter = 
BLI_ghashIterator_getValue(&gh_iter);
 
-               if ((manipulator_iter->flag & WM_MANIPULATOR_SELECTED) == 0) {
+               if ((manipulator_iter->state & WM_MANIPULATOR_SELECTED) == 0) {
                        changed = true;
                }
-               manipulator_iter->flag |= WM_MANIPULATOR_SELECTED;
+               manipulator_iter->state |= WM_MANIPULATOR_SELECTED;
                if (manipulator_iter->select) {
                        manipulator_iter->select(C, manipulator_iter, action);
                }
@@ -628,14 +626,14 @@ void wm_manipulatormap_set_highlighted_manipulator(
            (manipulator && part != manipulator->highlighted_part))
        {
                if (mmap->mmap_context.highlighted_manipulator) {
-                       mmap->mmap_context.highlighted_manipulator->flag &= 
~WM_MANIPULATOR_HIGHLIGHT;
+                       mmap->mmap_context.highlighted_manipulator->state &= 
~WM_MANIPULATOR_HIGHLIGHT;
                        
mmap->mmap_context.highlighted_manipulator->highlighted_part = 0;
                }
 
                mmap->mmap_context.highlighted_manipulator = manipulator;
 
                if (manipulator) {
-                       manipulator->flag |= WM_MANIPULATOR_HIGHLIGHT;
+                       manipulator->state |= WM_MANIPULATOR_HIGHLIGHT;
                        manipulator->highlighted_part = part;
 
                        if (C && manipulator->get_cursor) {
@@ -667,7 +665,7 @@ void wm_manipulatormap_set_active_manipulator(
         wmManipulatorMap *mmap, bContext *C, const wmEvent *event, 
wmManipulator *manipulator)
 {
        if (manipulator && C) {
-               manipulator->flag |= WM_MANIPULATOR_ACTIVE;
+               manipulator->state |= WM_MANIPULATOR_ACTIVE;
                mmap->mmap_context.active_manipulator = manipulator;
 
                if (manipulator->opname) {
@@ -683,7 +681,7 @@ void wm_manipulatormap_set_active_manipulator(
 
                                /* we failed to hook the manipulator to the 
operator handler or operator was cancelled, return */
                                if (!mmap->mmap_context.active_manipulator) {
-                                       manipulator->flag &= 
~WM_MANIPULATOR_ACTIVE;
+                                       manipulator->state &= 
~WM_MANIPULATOR_ACTIVE;
                                        /* first activate the manipulator 
itself */
                                        if (manipulator->interaction_data) {
                                                
MEM_freeN(manipulator->interaction_data);
@@ -711,7 +709,7 @@ void wm_manipulatormap_set_active_manipulator(
 
        

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to