Commit: 2e595daee3fa40737f5813349a4d7e6ad27d825f
Author: Julian Eisel
Date:   Sun Oct 2 22:11:14 2016 +0200
Branches: temp_manipulators_core
https://developer.blender.org/rB2e595daee3fa40737f5813349a4d7e6ad27d825f

Refactor manipulator-group flags

Flags are internal now, not exposed to non-manipulator window manager code.

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

M       source/blender/makesdna/DNA_manipulator_types.h
M       source/blender/windowmanager/manipulators/WM_manipulator_types.h
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
M       source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h

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

diff --git a/source/blender/makesdna/DNA_manipulator_types.h 
b/source/blender/makesdna/DNA_manipulator_types.h
index 9a3289b..2414573 100644
--- a/source/blender/makesdna/DNA_manipulator_types.h
+++ b/source/blender/makesdna/DNA_manipulator_types.h
@@ -43,7 +43,7 @@ typedef struct wmManipulatorGroup {
 
        void *customdata;
        void (*customdata_free)(void *); /* for freeing customdata from above */
-       int flag;
+       int flag; /* private */
        int pad;
 } wmManipulatorGroup;
 
diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_types.h 
b/source/blender/windowmanager/manipulators/WM_manipulator_types.h
index 2a3be7d..c4cdaea 100644
--- a/source/blender/windowmanager/manipulators/WM_manipulator_types.h
+++ b/source/blender/windowmanager/manipulators/WM_manipulator_types.h
@@ -66,6 +66,9 @@ typedef struct wmManipulatorGroupType {
        /* refresh data for drawing, called before each redraw */
        wmManipulatorGroupDrawPrepareFunc draw_prepare;
 
+       /* manipulator-group will be treated as 2d if this isn't set to true */
+       bool is_3d;
+
        /* keymap init callback for this manipulator-group */
        struct wmKeyMap *(*keymap_init)(const struct wmManipulatorGroupType *, 
struct wmKeyConfig *);
        /* keymap created with callback from above */
@@ -77,8 +80,7 @@ typedef struct wmManipulatorGroupType {
        /* RNA integration */
        ExtensionRNA ext;
 
-       /* manipulatorTypeflags (includes copy of wmManipulatorMapType.flag - 
used for comparisons) */
-       int flag;
+       char flag;
 
        /* if type is spawned from operator this is set here */
        void *op;
@@ -92,7 +94,6 @@ struct wmManipulatorMapType_Params {
        const char *idname;
        const int spaceid;
        const int regionid;
-       const int flag;
 };
 
 /**
diff --git 
a/source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h 
b/source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
index fd44b43..52a5cb3 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
@@ -143,6 +143,8 @@ enum {
 
 struct wmManipulatorGroup *wm_manipulatorgroup_new_from_type(struct 
wmManipulatorGroupType *mgrouptype);
 void wm_manipulatorgroup_free(bContext *C, struct wmManipulatorMap *mmap, 
struct wmManipulatorGroup *mgroup);
+void wm_manipulatorgroup_ensure_initialized(struct wmManipulatorGroup *mgroup, 
const struct bContext *C);
+bool wm_manipulatorgroup_is_visible(const struct wmManipulatorGroup *mgroup, 
const struct bContext *C);
 
 void wm_manipulatorgrouptype_keymap_init(struct wmManipulatorGroupType 
*mgrouptype, struct wmKeyConfig *keyconf);
 
diff --git 
a/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c 
b/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
index f7a8895..3f635f8 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
@@ -58,6 +58,18 @@
 #include "wm_manipulator_intern.h"
 
 
+/* wmManipulatorGroupType.flag_intern */
+enum {
+       /* manipulator group is attached to operator, and is only accessible as 
long as this runs */
+       WM_MANIPULATORGROUPTYPE_OP      = (1 << 0),
+};
+
+/* wmManipulatorGroup.flag */
+enum {
+       WM_MANIPULATORGROUP_INITIALIZED = (1 << 2), /* mgroup has been 
initialized */
+};
+
+
 /* -------------------------------------------------------------------- */
 /** \name wmManipulatorGroup
  *
@@ -128,6 +140,22 @@ void wm_manipulatorgroup_attach_to_modal_handler(
        WM_event_add_mousemove(C);
 }
 
+void wm_manipulatorgroup_ensure_initialized(wmManipulatorGroup *mgroup, const 
bContext *C)
+{
+       /* prepare for first draw */
+       if (UNLIKELY((mgroup->flag & WM_MANIPULATORGROUP_INITIALIZED) == 0)) {
+               mgroup->type->init(C, mgroup);
+               mgroup->flag |= WM_MANIPULATORGROUP_INITIALIZED;
+       }
+}
+
+bool wm_manipulatorgroup_is_visible(const wmManipulatorGroup *mgroup, const 
bContext *C)
+{
+       /* Check for poll function, if manipulator-group belongs to an 
operator, also check if the operator is running. */
+       return ((mgroup->type->flag & WM_MANIPULATORGROUPTYPE_OP) == 0 || 
mgroup->type->op) &&
+              (!mgroup->type->poll || mgroup->type->poll(C, mgroup->type));
+}
+
 /** \name Manipulator operators
  *
  * Basic operators for manipulator interaction with user configurable keymaps.
@@ -495,7 +523,7 @@ void WM_manipulatorgrouptype_unregister(bContext *C, Main 
*bmain, wmManipulatorG
 
        wmManipulatorMapType *mmaptype = WM_manipulatormaptype_find(&(const 
struct wmManipulatorMapType_Params) {
                mgrouptype->mapidname, mgrouptype->spaceid,
-               mgrouptype->regionid, mgrouptype->flag});
+               mgrouptype->regionid});
 
        BLI_remlink(&mmaptype->manipulator_grouptypes, mgrouptype);
        mgrouptype->prev = mgrouptype->next = NULL;
diff --git 
a/source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c 
b/source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c
index b55ddcf..9a4c568 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c
@@ -183,19 +183,11 @@ void WM_manipulatormap_update(const bContext *C, 
wmManipulatorMap *mmap)
        }
 
        for (wmManipulatorGroup *mgroup = mmap->manipulator_groups.first; 
mgroup; mgroup = mgroup->next) {
-               if (mgroup->type->flag & WM_MANIPULATORGROUPTYPE_OP && 
!mgroup->type->op) {
-                       /* only while operator runs */
-                       continue;
-               }
-               if (mgroup->type->poll && !mgroup->type->poll(C, mgroup->type)) 
{
+               if (!wm_manipulatorgroup_is_visible(mgroup, C)) {
                        continue;
                }
 
-               /* prepare for first draw */
-               if (UNLIKELY((mgroup->flag & WM_MANIPULATORGROUP_INITIALIZED) 
== 0)) {
-                       mgroup->type->init(C, mgroup);
-                       mgroup->flag |= WM_MANIPULATORGROUP_INITIALIZED;
-               }
+               wm_manipulatorgroup_ensure_initialized(mgroup, C);
                /* update data if needed */
                /* XXX weak: Manipulator-group may skip refreshing if it's 
invisible (map gets untagged nevertheless) */
                if (mmap->update_flag & MANIPULATORMAP_REFRESH && 
mgroup->type->refresh) {
@@ -390,12 +382,12 @@ static void 
manipulators_prepare_visible_3D(wmManipulatorMap *mmap, ListBase *vi
        wmManipulator *manipulator;
 
        for (wmManipulatorGroup *mgroup = mmap->manipulator_groups.first; 
mgroup; mgroup = mgroup->next) {
-               if (mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) {
-                       if (!mgroup->type->poll || mgroup->type->poll(C, 
mgroup->type)) {
-                               for (manipulator = mgroup->manipulators.first; 
manipulator; manipulator = manipulator->next) {
-                                       if (manipulator->render_3d_intersection 
&& (manipulator->flag & WM_MANIPULATOR_HIDDEN) == 0) {
-                                               
BLI_addhead(visible_manipulators, BLI_genericNodeN(manipulator));
-                                       }
+               if (mgroup->type->is_3d &&
+                   (!mgroup->type->poll || mgroup->type->poll(C, 
mgroup->type)))
+               {
+                       for (manipulator = mgroup->manipulators.first; 
manipulator; manipulator = manipulator->next) {
+                               if (manipulator->render_3d_intersection && 
(manipulator->flag & WM_MANIPULATOR_HIDDEN) == 0) {
+                                       BLI_addhead(visible_manipulators, 
BLI_genericNodeN(manipulator));
                                }
                        }
                }
@@ -627,13 +619,13 @@ wmManipulator 
*wm_manipulatormap_find_highlighted_manipulator(
        wmManipulator *manipulator;
 
        for (wmManipulatorGroup *mgroup = mmap->manipulator_groups.first; 
mgroup; mgroup = mgroup->next) {
-               if ((mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) == 0) {
-                       if (!mgroup->type->poll || mgroup->type->poll(C, 
mgroup->type)) {
-                               for (manipulator = mgroup->manipulators.first; 
manipulator; manipulator = manipulator->next) {
-                                       if (manipulator->intersect) {
-                                               if ((*part = 
manipulator->intersect(C, event, manipulator)))
-                                                       return manipulator;
-                                       }
+               if (!mgroup->type->is_3d &&
+                   (!mgroup->type->poll || mgroup->type->poll(C, 
mgroup->type)))
+               {
+                       for (manipulator = mgroup->manipulators.first; 
manipulator; manipulator = manipulator->next) {
+                               if (manipulator->intersect) {
+                                       if ((*part = manipulator->intersect(C, 
event, manipulator)))
+                                               return manipulator;
                                }
                        }
                }
diff --git a/source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h 
b/source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h
index d02b75c..fbdca91 100644
--- a/source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h
+++ b/source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h
@@ -62,16 +62,6 @@ void  wm_manipulatorgroup_attach_to_modal_handler(
         struct bContext *C, struct wmEventHandler *handler,
         struct wmManipulatorGroupType *mgrouptype, struct wmOperator *op);
 
-/* wmManipulatorGroupType->flag */
-enum {
-       WM_MANIPULATORGROUPTYPE_3D      = (1 << 0),
-       /* manipulator group is attached to operator, and is only accessible as 
long as this runs */
-       WM_MANIPULATORGROUPTYPE_OP      = (1 << 1),
-       /* TODO mixed group and group-type flags, should be separate enums */
-       WM_MANIPULATORGROUP_INITIALIZED = (1 << 2), /* mgroup has been 
initialized */
-};
-
-
 /* -------------------------------------------------------------------- */
 /* wmManipulatorMap */

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

Reply via email to