Commit: 0e56297ca9a7a294c06d612e69b42a473ec64133
Author: Julian Eisel
Date:   Fri Dec 11 04:53:22 2015 +0100
Branches: temp_widgets_c++_experiment
https://developer.blender.org/rB0e56297ca9a7a294c06d612e69b42a473ec64133

Initial steps for porting wmWidget types to C++

Antony and myself came to the conclusion that widgets could make good use of 
C++ features, so I decided to try porting them over.
Main changes in this commit are:
* Introduce object oriented file structure
* Port some wmWidget structs to classes
* Add initial C API
* Actually use some of this stuff

Some things are a bit tricky to port over (ListBase, registering widgets in 
rna_ files for Python API, etc), but they're definitely solvable.

NOTE: This branch is completely unstable for now, but that is expected. Also 
some parts of the Python API are commented out now (I'd be surprised if it 
still worked anyway :S).

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

M       source/blender/editors/object/object_edit.c
M       source/blender/editors/space_graph/graph_edit.c
M       source/blender/editors/space_sequencer/sequencer_view.c
M       source/blender/editors/space_view3d/view3d_widgets.c
M       source/blender/makesdna/DNA_widget_types.h
M       source/blender/makesrna/intern/rna_wm.c
M       source/blender/windowmanager/CMakeLists.txt
M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/WM_types.h
A       source/blender/windowmanager/intern/widgets/wm_widget.cpp
A       source/blender/windowmanager/intern/widgets/wm_widget.h
A       source/blender/windowmanager/intern/widgets/wm_widgetgroup.cpp
A       source/blender/windowmanager/intern/widgets/wm_widgetgroup.h
A       source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.cpp
A       source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.h
A       source/blender/windowmanager/intern/widgets/wm_widgetmap.cpp
A       source/blender/windowmanager/intern/widgets/wm_widgetmap.h
A       source/blender/windowmanager/intern/widgets/wm_widgetmaptype.cpp
A       source/blender/windowmanager/intern/widgets/wm_widgetmaptype.h
A       source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cpp
A       source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h
M       source/blender/windowmanager/intern/wm_widgets.c
M       source/blender/windowmanager/wm_event_system.h
M       source/blenderplayer/bad_level_call_stubs/stubs.c

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

diff --git a/source/blender/editors/object/object_edit.c 
b/source/blender/editors/object/object_edit.c
index db3bca7..027cae1 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -2093,7 +2093,10 @@ static int WIDGETGROUP_object_manipulator_poll(const 
struct bContext *C, struct
        Object *ob = ED_object_active_context((bContext *)C);
 
        if (ED_operator_object_active((bContext *)C)) {
-               if (STREQ(wgrouptype->idname, ob->id.name)) {
+               char *idname = NULL;
+               WM_widgetgrouptype_idname_get(wgrouptype, idname);
+
+               if (STREQ(idname, ob->id.name)) {
                        return true;
                }
        }
@@ -2103,14 +2106,16 @@ static int WIDGETGROUP_object_manipulator_poll(const 
struct bContext *C, struct
 static int object_widget_add_exec(bContext *C, wmOperator *UNUSED(op))
 {
        Object *ob = ED_object_active_context((bContext *)C);
-       wmWidgetGroupType *wgrouptype = 
WM_widgetgrouptype_new(WIDGETGROUP_object_manipulator_poll,
-                                                              
WIDGETGROUP_object_manipulator_create,
-                                                              
WM_widgetgroup_keymap_common,
-                                                              
CTX_data_main(C), "View3D", "Object Widgets",
-                                                              SPACE_VIEW3D, 
RGN_TYPE_WINDOW, true);
+       struct wmWidgetGroupType *wgrouptype = 
WM_widgetgrouptype_new(WIDGETGROUP_object_manipulator_poll,
+                                                                     
WIDGETGROUP_object_manipulator_create,
+                                                                     
WM_widgetgroup_keymap_common,
+                                                                     
CTX_data_main(C), "View3D", "Object Widgets",
+                                                                     
SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
 
        /* assign the objects id name to the widget */
-       strcpy(wgrouptype->idname, ob->id.name);
+       char *idname = NULL;
+       WM_widgetgrouptype_idname_get(wgrouptype, idname);
+       strcpy(idname, ob->id.name);
 
        return OPERATOR_FINISHED;
 }
diff --git a/source/blender/editors/space_graph/graph_edit.c 
b/source/blender/editors/space_graph/graph_edit.c
index d46c4d7..1ca7407 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -2525,7 +2525,7 @@ typedef struct BackDropTransformData {
        float init_offset[2];
        float init_zoom;
        short event_type;
-       wmWidgetGroupType *cagetype;
+       struct wmWidgetGroupType *cagetype;
 } BackDropTransformData;
 
 static int graph_widget_backdrop_transform_poll(bContext *C)
@@ -2566,13 +2566,13 @@ static int 
graph_widget_backdrop_transform_invoke(bContext *C, wmOperator *op, c
        ScrArea *sa = CTX_wm_area(C);
        SpaceIpo *sipo = CTX_wm_space_graph(C);
        /* no poll, lives always for the duration of the operator */
-       wmWidgetGroupType *cagetype = WM_widgetgrouptype_new(NULL, 
widgetgroup_backdrop_create,
-                                                            
WM_widgetgroup_keymap_common, CTX_data_main(C),
-                                                            "Graph_Canvas", 
"Backdrop Transform Widgets",
-                                                            SPACE_IPO, 
RGN_TYPE_WINDOW, false);
+       struct wmWidgetGroupType *cagetype = WM_widgetgrouptype_new(NULL, 
widgetgroup_backdrop_create,
+                                                                   
WM_widgetgroup_keymap_common, CTX_data_main(C),
+                                                                   
"Graph_Canvas", "Backdrop Transform Widgets",
+                                                                   SPACE_IPO, 
RGN_TYPE_WINDOW, false);
        struct wmEventHandler *handler = WM_event_add_modal_handler(C, op);
        BackDropTransformData *data = 
MEM_mallocN(sizeof(BackDropTransformData), "overdrop transform data");
-       WM_modal_handler_attach_widgetgroup(C, handler, cagetype, op);
+       WM_widgetgrouptype_attach_to_handler(C, cagetype, handler, op);
 
        RNA_float_set_array(op->ptr, "offset", sipo->backdrop_offset);
        RNA_float_set(op->ptr, "scale", sipo->backdrop_zoom);
diff --git a/source/blender/editors/space_sequencer/sequencer_view.c 
b/source/blender/editors/space_sequencer/sequencer_view.c
index 000dddc..9e27937 100644
--- a/source/blender/editors/space_sequencer/sequencer_view.c
+++ b/source/blender/editors/space_sequencer/sequencer_view.c
@@ -255,7 +255,7 @@ typedef struct OverDropTransformData {
        float init_zoom;
        float init_offset[2];
        int event_type;
-       wmWidgetGroupType *cagetype;
+       struct wmWidgetGroupType *cagetype;
 } OverDropTransformData;
 
 static int sequencer_overdrop_transform_poll(bContext *C)
@@ -293,13 +293,13 @@ static int sequencer_overdrop_transform_invoke(bContext 
*C, wmOperator *op, cons
        ScrArea *sa = CTX_wm_area(C);
        SpaceSeq *sseq = CTX_wm_space_seq(C);
        /* no poll, lives always for the duration of the operator */
-       wmWidgetGroupType *cagetype = WM_widgetgrouptype_new(NULL, 
widgetgroup_overdrop_create,
-                                                            
WM_widgetgroup_keymap_common, CTX_data_main(C),
-                                                            "Seq_Canvas", 
"Backdrop Transform Widgets",
-                                                            SPACE_SEQ, 
RGN_TYPE_WINDOW, false);
+       struct wmWidgetGroupType *cagetype = WM_widgetgrouptype_new(NULL, 
widgetgroup_overdrop_create,
+                                                                   
WM_widgetgroup_keymap_common, CTX_data_main(C),
+                                                                   
"Seq_Canvas", "Backdrop Transform Widgets",
+                                                                   SPACE_SEQ, 
RGN_TYPE_WINDOW, false);
        struct wmEventHandler *handler = WM_event_add_modal_handler(C, op);
        OverDropTransformData *data = 
MEM_mallocN(sizeof(OverDropTransformData), "overdrop transform data");
-       WM_modal_handler_attach_widgetgroup(C, handler, cagetype, op);
+       WM_widgetgrouptype_attach_to_handler(C, cagetype, handler, op);
        
        RNA_float_set_array(op->ptr, "offset", sseq->overdrop_offset);
        RNA_float_set(op->ptr, "scale", sseq->overdrop_zoom);
@@ -418,7 +418,7 @@ typedef struct ImageTransformData {
        ImBuf *ibuf; /* image to be transformed (preview image transformation 
widget) */
        int init_size[2];
        int event_type;
-       wmWidgetGroupType *cagetype;
+       struct wmWidgetGroupType *cagetype;
 } ImageTransformData;
 
 static int sequencer_image_transform_widget_poll(bContext *C)
@@ -459,10 +459,10 @@ static int 
sequencer_image_transform_widget_invoke(bContext *C, wmOperator *op,
        SpaceSeq *sseq = CTX_wm_space_seq(C);
        Scene *scene = CTX_data_scene(C);
        /* no poll, lives always for the duration of the operator */
-       wmWidgetGroupType *cagetype = WM_widgetgrouptype_new(NULL, 
widgetgroup_image_transform_create,
-                                                            
WM_widgetgroup_keymap_common, CTX_data_main(C),
-                                                            "Seq_Canvas", 
"Image Transform Widgets",
-                                                            SPACE_SEQ, 
RGN_TYPE_PREVIEW, false);
+       struct wmWidgetGroupType *cagetype = WM_widgetgrouptype_new(NULL, 
widgetgroup_image_transform_create,
+                                                                   
WM_widgetgroup_keymap_common, CTX_data_main(C),
+                                                                   
"Seq_Canvas", "Image Transform Widgets",
+                                                                   SPACE_SEQ, 
RGN_TYPE_PREVIEW, false);
        struct wmEventHandler *handler = WM_event_add_modal_handler(C, op);
        ImageTransformData *data = MEM_mallocN(sizeof(ImageTransformData), 
"overdrop transform data");
        ImBuf *ibuf = sequencer_ibuf_get(CTX_data_main(C), scene, sseq, CFRA, 
0, NULL);
@@ -471,7 +471,7 @@ static int sequencer_image_transform_widget_invoke(bContext 
*C, wmOperator *op,
                return OPERATOR_CANCELLED;
        }
 
-       WM_modal_handler_attach_widgetgroup(C, handler, cagetype, op);
+       WM_widgetgrouptype_attach_to_handler(C, cagetype, handler, op);
 
        copy_v2_v2_int(data->init_size, &ibuf->x);
        data->cagetype = cagetype;
diff --git a/source/blender/editors/space_view3d/view3d_widgets.c 
b/source/blender/editors/space_view3d/view3d_widgets.c
index e23cea7..ef01220 100644
--- a/source/blender/editors/space_view3d/view3d_widgets.c
+++ b/source/blender/editors/space_view3d/view3d_widgets.c
@@ -86,7 +86,7 @@ void WIDGETGROUP_lamp_create(const struct bContext *C, struct 
wmWidgetGroup *wgr
        WM_widget_set_property(widget, ARROW_SLOT_OFFSET_WORLD_SPACE, &ptr, 
propname);
 }
 
-int WIDGETGROUP_camera_poll(const bContext *C, wmWidgetGroupType 
*UNUSED(wgrouptype))
+int WIDGETGROUP_camera_poll(const bContext *C, struct wmWidgetGroupType 
*UNUSED(wgrouptype))
 {
        Object *ob = CTX_data_active_object(C);
 
@@ -178,7 +178,7 @@ void WIDGETGROUP_camera_create(const bContext *C, 
wmWidgetGroup *wgroup)
        }
 }
 
-int WIDGETGROUP_forcefield_poll(const bContext *C, wmWidgetGroupType 
*UNUSED(wgrouptype))
+int WIDGETGROUP_forcefield_poll(const bContext *C, struct wmWidgetGroupType 
*UNUSED(wgrouptype))
 {
        Object *ob = CTX_data_active_object(C);
 
@@ -218,7 +218,7 @@ void WIDGETGROUP_forcefield_create(const bContext *C, 
wmWidgetGroup *wgroup)
 /* draw facemaps depending on the selected bone in pose mode */
 #define USE_FACEMAP_FROM_BONE
 
-int WIDGETGROUP_armature_facemaps_poll(const bContext *C, wmWidgetGroupType 
*UNUSED(wgrouptype))
+int WIDGETGROUP_armature_facemaps_poll(const bContext *C, struct 
wmWidgetGroupType *UNUSED(wgrouptype))
 {
        Object *ob = CTX_data_active_object(C);
 
diff --git a/source/blender/makesdna/DNA_widget_types.h 
b/source/blender/makesdna/DNA_widget_types.h
index 5fa2cd8..13fce0a 100644
--- a/source/blender/makesdna/DNA_widget_types.h
+++ b/source/blender/makesdna/DNA_widget_types.h
@@ -47,7 +47,8 @@ typedef enum WidgetType {
 struct wmWidgetGroup {
        struct wmWidgetGroup *next, *prev;
 
-       struct wmWidgetGroupType *type;
+       struct wmWidgetGroupTypeC *type;
+       struct wmWidgetGroupType *type_cxx;
        ListBase widgets;
 
        void *py_instance;            /* python stores the class instance here 
*/
diff --git a/source/blender/makesrna/intern/rna_wm.c 
b/source/blender/makesrna/intern/rna_wm.c
index fadf06f..3e81ac6 100644
--- a/source/blender/makesrna/in

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to