[Bf-blender-cvs] [7909e8e] temp_widgets_update_tagging: Port over lamp and forcefield widgets
Julian Eisel
noreply at git.blender.org
Wed Mar 16 12:20:20 CET 2016
Commit: 7909e8ec0642478486f21024a8fb703aa0abd5ef
Author: Julian Eisel
Date: Wed Mar 16 12:18:55 2016 +0100
Branches: temp_widgets_update_tagging
https://developer.blender.org/rB7909e8ec0642478486f21024a8fb703aa0abd5ef
Port over lamp and forcefield widgets
===================================================================
M source/blender/editors/include/ED_view3d.h
M source/blender/editors/space_view3d/space_view3d.c
M source/blender/editors/space_view3d/view3d_intern.h
M source/blender/editors/space_view3d/view3d_widgets.c
M source/blender/windowmanager/widgets/WM_widget_types.h
===================================================================
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 3bd1cb9..fcdab8f 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -415,6 +415,7 @@ bool ED_view3d_snap_from_ray(
int WIDGETGROUP_lamp_poll(const struct bContext *C, struct wmWidgetGroupType *wgrouptype);
void WIDGETGROUP_lamp_init(const struct bContext *C, struct wmWidgetGroup *wgroup);
+void WIDGETGROUP_lamp_refresh(const struct bContext *C, struct wmWidgetGroup *wgroup);
/* render */
void ED_view3d_stop_render_preview(struct wmWindowManager *wm, struct ARegion *ar);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 68bb212..84e7330 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -749,16 +749,20 @@ static void view3d_widgets(void)
WIDGETGROUP_armature_facemaps_init,
WM_widgetgroup_keymap_common_sel,
"Face Map Widgets");
- WM_widgetgrouptype_register_ptr(
+ WM_widgetgrouptype_register_ptr_update(
NULL, wmaptype,
WIDGETGROUP_lamp_poll,
WIDGETGROUP_lamp_init,
+ WIDGETGROUP_lamp_refresh,
+ NULL,
WM_widgetgroup_keymap_common,
"Lamp Widgets");
- WM_widgetgrouptype_register_ptr(
+ WM_widgetgrouptype_register_ptr_update(
NULL, wmaptype,
WIDGETGROUP_forcefield_poll,
WIDGETGROUP_forcefield_init,
+ WIDGETGROUP_forcefield_refresh,
+ NULL,
WM_widgetgroup_keymap_common,
"Force Field Widgets");
WM_widgetgrouptype_register_ptr_update(
@@ -1037,6 +1041,7 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
break;
case ND_LIGHTING_DRAW:
ED_region_tag_redraw(ar);
+ WM_widgetmap_tag_refresh(wmap);
break;
}
break;
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 79493b0..2798de1 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -278,12 +278,13 @@ ARegion *view3d_has_tools_region(ScrArea *sa);
extern const char *view3d_context_dir[]; /* doc access */
/* view3d_widgets.c */
-int WIDGETGROUP_camera_poll(const struct bContext *C, struct wmWidgetGroupType *wgrouptype);
-void WIDGETGROUP_camera_init(const struct bContext *C, struct wmWidgetGroup *wgroup);
-void WIDGETGROUP_camera_refresh(const struct bContext *C, struct wmWidgetGroup *wgroup);
+int WIDGETGROUP_camera_poll (const struct bContext *C, struct wmWidgetGroupType *wgrouptype);
+void WIDGETGROUP_camera_init (const struct bContext *C, struct wmWidgetGroup *wgroup);
+void WIDGETGROUP_camera_refresh (const struct bContext *C, struct wmWidgetGroup *wgroup);
void WIDGETGROUP_camera_draw_prepare(const struct bContext *C, struct wmWidgetGroup *wgroup);
-int WIDGETGROUP_forcefield_poll(const struct bContext *C, struct wmWidgetGroupType *wgrouptype);
-void WIDGETGROUP_forcefield_init(const struct bContext *C, struct wmWidgetGroup *wgroup);
+int WIDGETGROUP_forcefield_poll (const struct bContext *C, struct wmWidgetGroupType *wgrouptype);
+void WIDGETGROUP_forcefield_init (const struct bContext *C, struct wmWidgetGroup *wgroup);
+void WIDGETGROUP_forcefield_refresh (const struct bContext *C, struct wmWidgetGroup *wgroup);
int WIDGETGROUP_armature_facemaps_poll(const struct bContext *C, struct wmWidgetGroupType *wgrouptype);
void WIDGETGROUP_armature_facemaps_init(const struct bContext *C, struct wmWidgetGroup *wgroup);
diff --git a/source/blender/editors/space_view3d/view3d_widgets.c b/source/blender/editors/space_view3d/view3d_widgets.c
index 76bb27a..45efcf5 100644
--- a/source/blender/editors/space_view3d/view3d_widgets.c
+++ b/source/blender/editors/space_view3d/view3d_widgets.c
@@ -58,7 +58,7 @@ typedef struct CameraWidgetGroup {
} CameraWidgetGroup;
-int WIDGETGROUP_lamp_poll(const struct bContext *C, struct wmWidgetGroupType *UNUSED(wgrouptype))
+int WIDGETGROUP_lamp_poll(const bContext *C, wmWidgetGroupType *UNUSED(wgrouptype))
{
Object *ob = CTX_data_active_object(C);
@@ -69,29 +69,37 @@ int WIDGETGROUP_lamp_poll(const struct bContext *C, struct wmWidgetGroupType *UN
return false;
}
-void WIDGETGROUP_lamp_init(const struct bContext *C, struct wmWidgetGroup *wgroup)
+void WIDGETGROUP_lamp_init(const bContext *C, wmWidgetGroup *wgroup)
{
Object *ob = CTX_data_active_object(C);
Lamp *la = ob->data;
- wmWidget *widget;
PointerRNA ptr;
- float dir[3];
const char *propname = "spot_size";
const float color[4] = {0.5f, 0.5f, 1.0f, 1.0f};
const float color_hi[4] = {0.8f, 0.8f, 0.45f, 1.0f};
+ wmWidgetWrapper *wwrapper = MEM_mallocN(sizeof(wmWidgetWrapper), __func__);
- negate_v3_v3(dir, ob->obmat[2]);
-
- widget = WIDGET_arrow_new(wgroup, propname, WIDGET_ARROW_STYLE_INVERTED);
+ wwrapper->widget = WIDGET_arrow_new(wgroup, propname, WIDGET_ARROW_STYLE_INVERTED);
+ wgroup->customdata = wwrapper;
RNA_pointer_create(&la->id, &RNA_Lamp, la, &ptr);
- WIDGET_arrow_set_range_fac(widget, 4.0f);
- WIDGET_arrow_set_direction(widget, dir);
- WM_widget_set_origin(widget, ob->obmat[3]);
- WM_widget_set_colors(widget, color, color_hi);
- WM_widget_set_property(widget, ARROW_SLOT_OFFSET_WORLD_SPACE, &ptr, propname);
+ WIDGET_arrow_set_range_fac(wwrapper->widget, 4.0f);
+ WM_widget_set_colors(wwrapper->widget, color, color_hi);
+ WM_widget_set_property(wwrapper->widget, ARROW_SLOT_OFFSET_WORLD_SPACE, &ptr, propname);
+}
+
+void WIDGETGROUP_lamp_refresh(const bContext *C, wmWidgetGroup *wgroup)
+{
+ wmWidgetWrapper *wwrapper = wgroup->customdata;
+ Object *ob = CTX_data_active_object(C);
+ float dir[3];
+
+ negate_v3_v3(dir, ob->obmat[2]);
+
+ WIDGET_arrow_set_direction(wwrapper->widget, dir);
+ WM_widget_set_origin(wwrapper->widget, ob->obmat[3]);
}
int WIDGETGROUP_camera_poll(const bContext *C, wmWidgetGroupType *UNUSED(wgrouptype))
@@ -241,33 +249,44 @@ int WIDGETGROUP_forcefield_poll(const bContext *C, wmWidgetGroupType *UNUSED(wgr
return (ob && ob->pd && ob->pd->forcefield);
}
-void WIDGETGROUP_forcefield_init(const bContext *C, wmWidgetGroup *wgroup)
+void WIDGETGROUP_forcefield_init(const bContext *UNUSED(C), wmWidgetGroup *wgroup)
{
- Object *ob = CTX_data_active_object(C);
- PartDeflect *pd = ob->pd;
- PointerRNA ptr;
- wmWidget *widget;
-
- const float size = (ob->type == OB_EMPTY) ? ob->empty_drawsize : 1.0f;
- const float ofs[3] = {0.0f, -size, 0.0f};
-
const float col[4] = {0.8f, 0.8f, 0.45f, 0.5f};
const float col_hi[4] = {0.8f, 0.8f, 0.45f, 1.0f};
-
/* only wind effector for now */
+ wmWidgetWrapper *wwrapper = MEM_mallocN(sizeof(wmWidgetWrapper), __func__);
+ wgroup->customdata = wwrapper;
+
+ wwrapper->widget = WIDGET_arrow_new(wgroup, "field_strength", WIDGET_ARROW_STYLE_CONSTRAINED);
+
+ WIDGET_arrow_set_ui_range(wwrapper->widget, -200.0f, 200.0f);
+ WIDGET_arrow_set_range_fac(wwrapper->widget, 6.0f);
+ WM_widget_set_colors(wwrapper->widget, col, col_hi);
+ WM_widget_set_flag(wwrapper->widget, WM_WIDGET_SCALE_3D, false);
+}
+
+void WIDGETGROUP_forcefield_refresh(const bContext *C, wmWidgetGroup *wgroup)
+{
+ wmWidgetWrapper *wwrapper = wgroup->customdata;
+ Object *ob = CTX_data_active_object(C);
+ PartDeflect *pd = ob->pd;
+
if (pd->forcefield == PFIELD_WIND) {
- widget = WIDGET_arrow_new(wgroup, "field_strength", WIDGET_ARROW_STYLE_CONSTRAINED);
+ const float size = (ob->type == OB_EMPTY) ? ob->empty_drawsize : 1.0f;
+ const float ofs[3] = {0.0f, -size, 0.0f};
+ PointerRNA ptr;
RNA_pointer_create(&ob->id, &RNA_FieldSettings, pd, &ptr);
- WIDGET_arrow_set_direction(widget, ob->obmat[2]);
- WIDGET_arrow_set_ui_range(widget, -200.0f, 200.0f);
- WIDGET_arrow_set_range_fac(widget, 6.0f);
- WM_widget_set_colors(widget, col, col_hi);
- WM_widget_set_origin(widget, ob->obmat[3]);
- WM_widget_set_offset(widget, ofs);
- WM_widget_set_flag(widget, WM_WIDGET_SCALE_3D, false);
- WM_widget_set_property(widget, ARROW_SLOT_OFFSET_WORLD_SPACE, &ptr, "strength");
+
+ WIDGET_arrow_set_direction(wwrapper->widget, ob->obmat[2]);
+ WM_widget_set_origin(wwrapper->widget, ob->obmat[3]);
+ WM_widget_set_offset(wwrapper->widget, ofs);
+ WM_widget_set_flag(wwrapper->widget, WM_WIDGET_HIDDEN, false);
+ WM_widget_set_property(wwrapper->widget, ARROW_SLOT_OFFSET_WORLD_SPACE, &ptr, "strength");
+ }
+ else {
+ WM_widget_set_flag(wwrapper->widget, WM_WIDGET_HIDDEN, true);
}
}
diff --git a/source/blender/windowmanager/widgets/WM_widget_types.h b/source/blender/windowmanager/widgets/WM_widget_types.h
index 0794a4a..b2aa509 100644
--- a/source/blender/windowmanager/widgets/WM_widget_types.h
+++ b/source/blender/windowmanager/widgets/WM_widget_types.h
@@ -120,6 +120,13 @@ struct wmWidgetMapType_Params {
const int flag;
};
+/**
+ * Simple utility wrapper for storing a single widget as wmWidgetGroup.customdata
+ */
+typedef struct wmWidgetWrapper {
+ struct wmWidget *widget;
+} wmWidgetWrapper;
+
/* -------------------------------------------------------------------- */
More information about the Bf-blender-cvs
mailing list