[Bf-blender-cvs] [ce4a1a9] temp_widgets_c++_experiment: Bunch of changes - Blender works again \o/

Julian Eisel noreply at git.blender.org
Mon Dec 21 17:28:47 CET 2015


Commit: ce4a1a9dcd2a5fe844f989784d7b409407a77523
Author: Julian Eisel
Date:   Mon Dec 21 17:25:18 2015 +0100
Branches: temp_widgets_c++_experiment
https://developer.blender.org/rBce4a1a9dcd2a5fe844f989784d7b409407a77523

Bunch of changes - Blender works again \o/

Changes include: More porting, fixes, cleanup

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

M	source/blender/blenkernel/intern/screen.c
M	source/blender/blenlib/BLI_listbase.h
M	source/blender/blenlib/intern/listbase.c
M	source/blender/editors/object/object_edit.c
M	source/blender/editors/space_graph/graph_edit.c
M	source/blender/editors/space_node/space_node.c
M	source/blender/editors/space_sequencer/sequencer_view.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/makesdna/DNA_widget_types.h
M	source/blender/makesrna/intern/rna_wm.c
M	source/blender/windowmanager/WM_api.h
M	source/blender/windowmanager/WM_types.h
M	source/blender/windowmanager/intern/widgets/wm_widgetgroup.cc
M	source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.cc
M	source/blender/windowmanager/intern/widgets/wm_widgetgrouptype.h
M	source/blender/windowmanager/intern/widgets/wm_widgetmap.cc
M	source/blender/windowmanager/intern/widgets/wm_widgetmap.h
M	source/blender/windowmanager/intern/widgets/wm_widgetmaptype.cc
M	source/blender/windowmanager/intern/widgets/wm_widgetmaptype.h
M	source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cc
M	source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h
M	source/blender/windowmanager/intern/wm_event_system.c
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/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index b0a3edc..27621d9 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -295,7 +295,6 @@ void BKE_spacedata_id_unref(struct SpaceLink *sl, const struct ID *id)
 void BKE_area_region_free(SpaceType *st, ARegion *ar)
 {
 	uiList *uilst;
-	struct wmWidgetMapC *wmap, *wmap_tmp;
 
 	if (st) {
 		ARegionType *art = BKE_regiontype_from_id(st, ar->regiontype);
@@ -341,11 +340,8 @@ void BKE_area_region_free(SpaceType *st, ARegion *ar)
 			MEM_freeN(uilst->properties);
 		}
 	}
-	
-	for (wmap = ar->widgetmaps.first; wmap; wmap = wmap_tmp) {
-		wmap_tmp = wmap->next;
-		WM_widgetmap_delete(wmap);
-	}
+
+	WM_widgetmaps_delete(&ar->widgetmaps);
 	BLI_listbase_clear(&ar->widgetmaps);
 	BLI_freelistN(&ar->ui_lists);
 	BLI_freelistN(&ar->ui_previews);
diff --git a/source/blender/blenlib/BLI_listbase.h b/source/blender/blenlib/BLI_listbase.h
index 9dfa800..98a9627 100644
--- a/source/blender/blenlib/BLI_listbase.h
+++ b/source/blender/blenlib/BLI_listbase.h
@@ -92,6 +92,8 @@ BLI_INLINE void BLI_listbase_clear(struct ListBase *lb) { lb->first = lb->last =
 /* create a generic list node containing link to provided data */
 struct LinkData *BLI_genericNodeN(void *data);
 
+extern const ListBase ListBase_NULL;
+
 /**
  * Does a full loop on the list, with any value acting as first
  * (handy for cycling items)
diff --git a/source/blender/blenlib/intern/listbase.c b/source/blender/blenlib/intern/listbase.c
index ebee2c7..c3afdfa 100644
--- a/source/blender/blenlib/intern/listbase.c
+++ b/source/blender/blenlib/intern/listbase.c
@@ -44,6 +44,9 @@
 
 #include "BLI_strict_flags.h"
 
+const ListBase ListBase_NULL = {NULL, NULL};
+
+
 /* implementation */
 
 /**
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 6a2a382..1bfe2b6 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -2139,9 +2139,9 @@ 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)) {
-		char *idname = NULL;
-		WM_widgetgrouptype_idname_get(wgrouptype, idname);
+		char idname[MAX_NAME];
 
+		WM_widgetgrouptype_idname_get(wgrouptype, idname);
 		if (STREQ(idname, ob->id.name)) {
 			return true;
 		}
@@ -2159,9 +2159,7 @@ static int object_widget_add_exec(bContext *C, wmOperator *UNUSED(op))
 	                                                              SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
 
 	/* assign the objects id name to the widget */
-	char *idname = NULL;
-	WM_widgetgrouptype_idname_get(wgrouptype, idname);
-	strcpy(idname, ob->id.name);
+	WM_widgetgrouptype_idname_set(wgrouptype, 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 be272b2..8047c47 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -2610,7 +2610,7 @@ static int graph_widget_backdrop_transform_poll(bContext *C)
 static void widgetgroup_backdrop_create(const struct bContext *C, struct wmWidgetGroup *wgroup)
 {
 	ARegion *ar = CTX_wm_region(C);
-	wmOperator *op = wgroup->type->op;
+	wmOperator *op = WM_widgetgrouptype_operator_get(wgroup->type);
 	Scene *scene = CTX_data_scene(C);
 	int width = (scene->r.size * scene->r.xsch) / 150.0f;
 	int height = (scene->r.size * scene->r.ysch) / 150.0f;
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 1754ad6..ef20419 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -652,7 +652,7 @@ static void node_main_region_init(wmWindowManager *wm, ARegion *ar)
 		BLI_addhead(&ar->widgetmaps, WM_widgetmap_new("Node_Canvas", SPACE_NODE, RGN_TYPE_WINDOW, false));
 	}
 
-	WM_event_add_area_widgetmap_handlers(ar);
+	WM_widgetmaps_create_region_handlers(ar);
 
 	/* own keymaps */
 	keymap = WM_keymap_find(wm->defaultconf, "Node Generic", SPACE_NODE, 0);
diff --git a/source/blender/editors/space_sequencer/sequencer_view.c b/source/blender/editors/space_sequencer/sequencer_view.c
index fec9d09..dfb513c 100644
--- a/source/blender/editors/space_sequencer/sequencer_view.c
+++ b/source/blender/editors/space_sequencer/sequencer_view.c
@@ -269,7 +269,7 @@ static int sequencer_overdrop_transform_poll(bContext *C)
 static void widgetgroup_overdrop_create(const struct bContext *C, struct wmWidgetGroup *wgroup)
 {
 	ARegion *ar = CTX_wm_region(C);
-	wmOperator *op = wgroup->type->op;
+	wmOperator *op = WM_widgetgrouptype_operator_get(wgroup->type);
 	Scene *sce = CTX_data_scene(C);
 	int sizex = (sce->r.size * sce->r.xsch) / 100;
 	int sizey = (sce->r.size * sce->r.ysch) / 100;
@@ -433,7 +433,7 @@ static void widgetgroup_image_transform_create(const struct bContext *C, struct
 {
 	ARegion *ar = CTX_wm_region(C);
 	View2D *v2d = &ar->v2d;
-	wmOperator *op = wgroup->type->op;
+	wmOperator *op = WM_widgetgrouptype_operator_get(wgroup->type);
 	wmWidget *cage;
 	float origin[3];
 	float viewrect[2];
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 5c4e206..a6f00c3 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -504,7 +504,7 @@ static void view3d_main_region_init(wmWindowManager *wm, ARegion *ar)
 		BLI_addhead(&ar->widgetmaps, WM_widgetmap_new("View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true));
 	}
 
-	WM_event_add_area_widgetmap_handlers(ar);
+	WM_widgetmaps_create_region_handlers(ar);
 
 	/* object ops. */
 	
diff --git a/source/blender/makesdna/DNA_widget_types.h b/source/blender/makesdna/DNA_widget_types.h
index 13fce0a..5fa2cd8 100644
--- a/source/blender/makesdna/DNA_widget_types.h
+++ b/source/blender/makesdna/DNA_widget_types.h
@@ -47,8 +47,7 @@ typedef enum WidgetType {
 struct wmWidgetGroup {
 	struct wmWidgetGroup *next, *prev;
 
-	struct wmWidgetGroupTypeC *type;
-	struct wmWidgetGroupType *type_cxx;
+	struct wmWidgetGroupType *type;
 	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 dd52ce7..ac22bcd 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -1533,7 +1533,7 @@ static StructRNA *rna_WidgetGroup_register(Main *bmain, ReportList *reports, voi
 	int have_function[2];
 
 	/* setup dummy widgetgroup & widgetgroup type to store static properties in */
-	dummywg.type_cxx = &dummywgt;
+	dummywg.type = &dummywgt;
 	RNA_pointer_create(NULL, &RNA_WidgetGroup, &dummywg, &wgptr);
 
 	/* clear in case they are left unset */
@@ -1891,6 +1891,8 @@ static void rna_def_widgetgroup(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Has Reports",
 	                         "WidgetGroup has a set of reports (warnings and errors) from last execution");
 
+#ifdef USE_WM_WIDGET_API
+
 	/* Registration */
 	prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
 	RNA_def_property_string_sdna(prop, NULL, "type->idname");
@@ -1918,6 +1920,8 @@ static void rna_def_widgetgroup(BlenderRNA *brna)
 	RNA_def_property_ui_text(prop, "Options",  "Options for this operator type");
 #endif
 
+#endif /* USE_WM_WIDGET_API */
+
 	prop = RNA_def_property(srna, "widgets", PROP_COLLECTION, PROP_NONE);
 	RNA_def_property_collection_sdna(prop, NULL, "widgets", NULL);
 	RNA_def_property_struct_type(prop, "Widget");
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 90848b1..dc0d4cc 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -61,7 +61,6 @@ struct wmOperator;
 struct wmWidget;
 struct wmWidgetGroup;
 struct wmWidgetMapC;
-struct wmWidgetGroupTypeC;
 struct wmWidgetMapType;
 struct rcti;
 struct PointerRNA;
@@ -512,10 +511,6 @@ struct wmWidget *WM_widget_new(void (*draw)(const struct bContext *, struct wmWi
                                int  (*intersect)(struct bContext *, const struct wmEvent *, struct wmWidget *),
                                int  (*handler)(struct bContext *, const struct wmEvent *, struct wmWidget *, const int));
 
-void  WM_event_add_area_widgetmap_handlers(struct ARegion *ar);
-void  WM_modal_handler_attach_widgetgroup(struct bContext *C, struct wmEventHandler *handler,
-                                          struct wmWidgetGroupTypeC *wgrouptype, struct wmOperator *op);
-
 /* wmWidget->flag */
 enum widgetflags {
 	/* states */
@@ -557,12 +552,6 @@ wmKeyMap *WM_widgetgroup_keymap_common(wmKeyConfig *config, const char *wgroupna
 
 bool WM_widgetmap_select_all(struct bContext *C, struct wmWidgetMapC *wmap, const int action);
 
-/* creates a widgetmap with all registered widgets for that type */
-void WM_widgetmap_delete(struct wmWidgetMapC *wmap);
-bool WM_widgetmap_cursor_set(const struct wmWidgetMapC *wmap, struct wmWindow *win);
-
-void WM_widgetmaptypes_free(void);
-
 /* wm_generic_widgets.c */
 
 enum {
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index 7b1acf2..4a217d6 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -679,43 +679,6 @@ typedef struct wmWidget wmWidget;
 typedef struct wmWidgetGroup wmWidgetGroup;
 typedef struct wmWidgetMapType wmWidgetMapType;
 
-/* factory class for a widgetgroup type, gets called every time a new area is spawned */
-typedef struct wmWidgetGroupTypeC {
-	struct wmWidgetGroupTypeC *next, *prev;
-
-	char idname[64]; /* MAX_NAME */
-	char name[64]; /* widget group name - displayed in UI (keymap editor) */
-
-	/* poll if widgetmap should be active */
-	int (*poll)(const struct bContext *C, struct wmWidgetGroupTypeC *wgrouptype) ATTR_WARN_UNUSED_RESULT;
-
-	/* update widgets, called right before drawing */
-	void (*create)(const st

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list