[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