[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