[Bf-blender-cvs] [313cfcb] wiggly-widgets: Make offset a property for all widgets, not only certain widget types

Julian Eisel noreply at git.blender.org
Sat Aug 29 00:40:55 CEST 2015


Commit: 313cfcb093cf8c937044ea519d50bc94705a43c1
Author: Julian Eisel
Date:   Sat Aug 29 00:39:04 2015 +0200
Branches: wiggly-widgets
https://developer.blender.org/rB313cfcb093cf8c937044ea519d50bc94705a43c1

Make offset a property for all widgets, not only certain widget types

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

M	source/blender/editors/space_sequencer/sequencer_view.c
M	source/blender/editors/transform/transform_manipulator.c
M	source/blender/windowmanager/WM_api.h
M	source/blender/windowmanager/intern/wm_generic_widgets.c
M	source/blender/windowmanager/intern/wm_widgets.c
M	source/blender/windowmanager/wm.h

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

diff --git a/source/blender/editors/space_sequencer/sequencer_view.c b/source/blender/editors/space_sequencer/sequencer_view.c
index d3292db..e8a0985 100644
--- a/source/blender/editors/space_sequencer/sequencer_view.c
+++ b/source/blender/editors/space_sequencer/sequencer_view.c
@@ -519,7 +519,7 @@ static int sequencer_image_transform_widget_modal(bContext *C, wmOperator *op, c
 
 			/* no offset needed in this case */
 			offset[0] = offset[1] = 0;
-			WIDGET_rect_transform_set_offset(wmap->active_widget, offset);
+			WM_widget_set_offset(wmap->active_widget, offset);
 			break;
 		}
 
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index f121348..fb2bd9f 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -1167,7 +1167,7 @@ void WIDGETGROUP_manipulator_create(const struct bContext *C, struct wmWidgetGro
 
 				WM_widget_set_scale(axis, 0.07f);
 				WM_widget_set_origin(axis, rv3d->twmat[3]);
-				WIDGET_plane_set_offset(axis, ofs);
+				WM_widget_set_offset(axis, ofs);
 				WIDGET_plane_set_direction(axis, rv3d->twmat[aidx_norm - 1 < 0 ? 2 : aidx_norm - 1]);
 				WIDGET_plane_set_up_vector(axis, rv3d->twmat[aidx_norm + 1 > 2 ? 0 : aidx_norm + 1]);
 				break;
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 6c7111a..7448d0d 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -514,6 +514,7 @@ void WM_widgetgroup_customdata_set(struct wmWidgetGroup *wgroup, void *data);
 void *WM_widgetgroup_customdata(const struct wmWidgetGroup *wgroup);
 
 void WM_widget_set_origin(struct wmWidget *widget, const float origin[3]);
+void WM_widget_set_offset(struct wmWidget *widget, const float offset[3]);
 void WM_widget_set_3d_scale(struct wmWidget *widget, const bool scale);
 void WM_widget_flag_set(struct wmWidget *widget, const int flag, const bool enable);
 void WM_widget_set_draw_on_hover_only(struct wmWidget *widget, const bool draw);
@@ -585,13 +586,11 @@ void WIDGET_dial_set_direction(struct wmWidget *widget, const float direction[3]
 
 struct wmWidget *WIDGET_plane_new(struct wmWidgetGroup *wgroup, const char *name, const int style);
 void WIDGET_plane_set_direction(struct wmWidget *widget, const float direction[3]);
-void WIDGET_plane_set_offset(struct wmWidget *widget, const float offset[3]);
 void WIDGET_plane_set_up_vector(struct wmWidget *widget, const float direction[3]);
 
 struct wmWidget *WIDGET_rect_transform_new(
         struct wmWidgetGroup *wgroup, const char *name, const int style,
         const float width, const float height);
-void WIDGET_rect_transform_set_offset(struct wmWidget *widget, const float offset[2]);
 
 struct wmWidget *WIDGET_facemap_new(
         struct wmWidgetGroup *wgroup, const char *name, const int style,
diff --git a/source/blender/windowmanager/intern/wm_generic_widgets.c b/source/blender/windowmanager/intern/wm_generic_widgets.c
index 092ec7e..aa3a2e7 100644
--- a/source/blender/windowmanager/intern/wm_generic_widgets.c
+++ b/source/blender/windowmanager/intern/wm_generic_widgets.c
@@ -322,6 +322,7 @@ static void arrow_draw_intern(ArrowWidget *arrow, const bool select, const bool
 	}
 
 	glEnable(GL_BLEND);
+	glTranslatef(UNPACK3(arrow->widget.offset));
 	arrow_draw_geom(arrow, select);
 	glDisable(GL_BLEND);
 
@@ -710,6 +711,7 @@ static void dial_draw_intern(DialWidget *dial, const bool select, const bool hig
 	else
 		glColor4fv(dial->widget.col);
 
+	glTranslatef(UNPACK3(dial->widget.offset));
 	dial_draw_geom(dial, select);
 
 	glPopMatrix();
@@ -810,13 +812,12 @@ typedef struct PlaneWidget {
 	wmWidget widget;
 
 	float direction[3];
-	float offset[3];
 	float up[3];
 	int flag;
 } PlaneWidget;
 
 
-static void widget_plane_draw_geom(const float ofs[3], const float col_inner[4], const float col_outer[4])
+static void widget_plane_draw_geom(const float col_inner[4], const float col_outer[4])
 {
 	static float vec[4][3] = {
 		{-1, -1, 0},
@@ -825,8 +826,6 @@ static void widget_plane_draw_geom(const float ofs[3], const float col_inner[4],
 		{-1,  1, 0},
 	};
 
-	glTranslatef(UNPACK3(ofs));
-
 	glEnable(GL_MULTISAMPLE_ARB);
 
 	glEnableClientState(GL_VERTEX_ARRAY);
@@ -874,7 +873,8 @@ static void widget_plane_draw_intern(PlaneWidget *plane, const bool UNUSED(selec
 	col_inner[3] *= 0.5f;
 
 	glEnable(GL_BLEND);
-	widget_plane_draw_geom(plane->offset, col_inner, col_outer);
+	glTranslatef(UNPACK3(plane->widget.offset));
+	widget_plane_draw_geom(col_inner, col_outer);
 	glDisable(GL_BLEND);
 
 	glPopMatrix();
@@ -903,7 +903,6 @@ wmWidget *WIDGET_plane_new(wmWidgetGroup *wgroup, const char *name, const int UN
 
 	/* defaults */
 	copy_v3_v3(plane->direction, dir_default);
-	zero_v3(plane->offset);
 
 	wm_widget_register(wgroup, &plane->widget, name);
 
@@ -918,13 +917,6 @@ void WIDGET_plane_set_direction(wmWidget *widget, const float direction[3])
 	normalize_v3(plane->direction);
 }
 
-void WIDGET_plane_set_offset(wmWidget *widget, const float offset[3])
-{
-	PlaneWidget *plane = (PlaneWidget *)widget;
-
-	copy_v3_v3(plane->offset, offset);
-}
-
 void WIDGET_plane_set_up_vector(wmWidget *widget, const float direction[3])
 {
 	PlaneWidget *plane = (PlaneWidget *)widget;
@@ -954,7 +946,6 @@ enum {
 
 typedef struct RectTransformWidget {
 	wmWidget widget;
-	float offset[2]; /* position of widget */
 	float w, h;      /* dimensions of widget */
 	float rotation;  /* rotation of the rectangle */
 	float scale[2]; /* scaling for the widget for non-destructive editing. */
@@ -1072,7 +1063,7 @@ static void widget_rect_transform_draw(const bContext *UNUSED(C), wmWidget *widg
 	r.ymax = half_h;
 	
 	glPushMatrix();
-	glTranslatef(widget->origin[0] + cage->offset[0], widget->origin[1] + cage->offset[1], 0.0f);
+	glTranslatef(widget->origin[0] + widget->offset[0], widget->origin[1] + widget->offset[1], 0.0f);
 	if (cage->style & WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM)
 		glScalef(cage->scale[0], cage->scale[0], 1.0);
 	else
@@ -1136,8 +1127,8 @@ static int widget_rect_tranfrorm_intersect(bContext *UNUSED(C), const wmEvent *e
 	
 	/* rotate mouse in relation to the center and relocate it */
 	sub_v2_v2v2(point_local, mouse, widget->origin);
-	point_local[0] -= cage->offset[0];
-	point_local[1] -= cage->offset[1];
+	point_local[0] -= widget->offset[0];
+	point_local[1] -= widget->offset[1];
 	//rotate_m2(matrot, -cage->transform.rotation);
 
 	if (cage->style & WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM)
@@ -1256,7 +1247,7 @@ static int widget_rect_transform_invoke(bContext *UNUSED(C), const wmEvent *even
 	RectTransformWidget *cage = (RectTransformWidget *) widget;
 	RectTransformInteraction *data = MEM_callocN(sizeof (RectTransformInteraction), "cage_interaction");
 	
-	copy_v2_v2(data->orig_offset, cage->offset);
+	copy_v2_v2(data->orig_offset, widget->offset);
 	copy_v2_v2(data->orig_scale, cage->scale);
 	
 	data->orig_mouse[0] = event->mval[0];
@@ -1269,30 +1260,30 @@ static int widget_rect_transform_invoke(bContext *UNUSED(C), const wmEvent *even
 
 static int widget_rect_transform_handler(bContext *C, const wmEvent *event, wmWidget *widget)
 {
-	RectTransformWidget *cage = (RectTransformWidget *) widget;
+	RectTransformWidget *cage = (RectTransformWidget *)widget;
 	RectTransformInteraction *data = widget->interaction_data;
 	ARegion *ar = CTX_wm_region(C);
 	float valuex, valuey;
 	/* needed here as well in case clamping occurs */
-	const float orig_ofx = cage->offset[0], orig_ofy = cage->offset[1];
+	const float orig_ofx = widget->offset[0], orig_ofy = widget->offset[1];
 	
 	valuex = (event->mval[0] - data->orig_mouse[0]);
 	valuey = (event->mval[1] - data->orig_mouse[1]);
 	
 	if (widget->highlighted_part == WIDGET_RECT_TRANSFORM_INTERSECT_TRANSLATE) {
-		cage->offset[0] = data->orig_offset[0] + valuex;
-		cage->offset[1] = data->orig_offset[1] + valuey;
+		widget->offset[0] = data->orig_offset[0] + valuex;
+		widget->offset[1] = data->orig_offset[1] + valuey;
 	}
 	else if (widget->highlighted_part == WIDGET_RECT_TRANSFORM_INTERSECT_SCALEX_LEFT) {
-		cage->offset[0] = data->orig_offset[0] + valuex / 2.0;
+		widget->offset[0] = data->orig_offset[0] + valuex / 2.0;
 		cage->scale[0] = (cage->w * data->orig_scale[0] - valuex) / cage->w;
 	}
 	else if (widget->highlighted_part == WIDGET_RECT_TRANSFORM_INTERSECT_SCALEX_RIGHT) {
-		cage->offset[0] = data->orig_offset[0] + valuex / 2.0;
+		widget->offset[0] = data->orig_offset[0] + valuex / 2.0;
 		cage->scale[0] = (cage->w * data->orig_scale[0] + valuex) / cage->w;
 	}
 	else if (widget->highlighted_part == WIDGET_RECT_TRANSFORM_INTERSECT_SCALEY_DOWN) {
-		cage->offset[1] = data->orig_offset[1] + valuey / 2.0;
+		widget->offset[1] = data->orig_offset[1] + valuey / 2.0;
 		
 		if (cage->style & WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM) {
 			cage->scale[0] = (cage->h * data->orig_scale[0] - valuey) / cage->h;
@@ -1302,7 +1293,7 @@ static int widget_rect_transform_handler(bContext *C, const wmEvent *event, wmWi
 		}
 	}
 	else if (widget->highlighted_part == WIDGET_RECT_TRANSFORM_INTERSECT_SCALEY_UP) {
-		cage->offset[1] = data->orig_offset[1] + valuey / 2.0;
+		widget->offset[1] = data->orig_offset[1] + valuey / 2.0;
 		
 		if (cage->style & WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM) {
 			cage->scale[0] = (cage->h * data->orig_scale[0] + valuey) / cage->h;
@@ -1318,18 +1309,18 @@ static int widget_rect_transform_handler(bContext *C, const wmEvent *event, wmWi
 		    cage->scale[0] < WIDGET_RECT_MIN_WIDTH / cage->w) 
 		{
 			cage->scale[0] = max_ff(WIDGET_RECT_MIN_WIDTH / cage->h, WIDGET_RECT_MIN_WIDTH / cage->w);
-			cage->offset[0] = orig_ofx;
-			cage->offset[1] = orig_ofy;
+			widget->offset[0] = orig_ofx;
+			widget->offset[1] = orig_ofy;
 		}
 	}
 	else {
 		if (cage->scale[0] < WIDGET_RECT_MIN_WIDTH / cage->w) {
 			cage->scale[0] = WIDGET_RECT_MIN_WIDTH / cage->w;
-			cage->offset[0] = orig_ofx;
+			widget->offset[0] = orig_ofx;
 		}
 		if (cage->scale[1] < WIDGET_RECT_MIN_WIDTH / cage->h) {
 			cage->scale[1] = WIDGET_RECT_MIN_WIDTH / cage->h;
-			cage->offset[1] = orig_ofy;
+			widget->offset[1] =

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list