[Bf-blender-cvs] [0e56297] temp_widgets_c++_experiment: Initial steps for porting wmWidget types to C++

Julian Eisel noreply at git.blender.org
Fri Dec 11 05:38:48 CET 2015


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. @@




More information about the Bf-blender-cvs mailing list