[Bf-blender-cvs] [bfa1744] wiggly-widgets: Cage actually now draws something, also change widget, will be modified to control placement of backdrop.
Antony Riakiotakis
noreply at git.blender.org
Fri Nov 21 16:24:16 CET 2014
Commit: bfa17440eb1096ada23506b505eb87a2c18fad43
Author: Antony Riakiotakis
Date: Fri Nov 21 15:49:51 2014 +0100
Branches: wiggly-widgets
https://developer.blender.org/rBbfa17440eb1096ada23506b505eb87a2c18fad43
Cage actually now draws something, also change widget, will be modified
to control placement of backdrop.
===================================================================
M source/blender/editors/space_node/node_draw.c
M source/blender/editors/space_node/space_node.c
M source/blender/windowmanager/intern/wm_generic_widgets.c
M source/blenderplayer/bad_level_call_stubs/stubs.c
===================================================================
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index e85a3a4..70da0d7 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -1334,20 +1334,17 @@ void drawnodespace(const bContext *C, ARegion *ar)
/* backdrop */
draw_nodespace_back_pix(C, ar, snode, path->parent_key);
-
+
glMatrixMode(GL_PROJECTION);
glPushMatrix();
- glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
+
+ glaDefine2DArea(&ar->winrct);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
-
- /* somehow the offset has to be calculated inverse */
-
- //glaDefine2DArea(&ar->winrct);
- /* ortho at pixel level curarea */
- /* almost #wmOrtho2_region_pixelspace, but no +1 px */
- //wmOrtho2_pixelspace(ar->winx, ar->winy);
WM_widgets_draw(C, ar);
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 57d7c74..6841972 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -842,7 +842,7 @@ static bool WIDGETGROUP_node_transform_poll(struct wmWidgetGroup *UNUSED(wgroup)
if (snode && snode->edittree && snode->edittree->type == NTREE_COMPOSIT) {
bNode *node = nodeGetActive(snode->edittree);
- if (node && node->type == CMP_NODE_TRANSFORM)
+ if (node && node->type == CMP_NODE_VIEWER)
return true;
}
@@ -851,22 +851,36 @@ static bool WIDGETGROUP_node_transform_poll(struct wmWidgetGroup *UNUSED(wgroup)
static void WIDGETGROUP_node_transform_update(struct wmWidgetGroup *wgroup, const struct bContext *C)
{
- /* temporarily get the first */
- SpaceNode *snode = CTX_wm_space_node(C);
wmWidget *cage = WM_widgetgroup_widgets(wgroup)->first;
- bNode *node = nodeGetActive(snode->edittree);
Image *ima;
ImBuf *ibuf;
void *lock;
+
ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
if (ibuf) {
- WIDGET_cage_bounds_set(cage, ibuf->x, ibuf->y);
+ SpaceNode *snode = CTX_wm_space_node(C);
+ ARegion *ar = CTX_wm_region(C);
+ float origin[3];
+ float xsize, ysize;
+
+ xsize = snode->zoom * ibuf->x / ar->winx;
+ ysize = snode->zoom * ibuf->y / ar->winy;
+
+ origin[0] = (ar->winx - xsize) / 2 + snode->xof;
+ origin[1] = (ar->winy - ysize) / 2 + snode->yof;
+
+ WIDGET_cage_bounds_set(cage, 2.0 * xsize, 2.0 * ysize);
+ WM_widget_set_origin(cage, origin);
+ WM_widget_set_draw(cage, true);
+ }
+ else {
+ WM_widget_set_draw(cage, false);
}
BKE_image_release_ibuf(ima, ibuf, lock);
}
-static void WIDGETGROUP_node_transform_free(struct wmWidgetGroup *wgroup)
+static void WIDGETGROUP_node_transform_free(struct wmWidgetGroup *UNUSED(wgroup))
{
}
diff --git a/source/blender/windowmanager/intern/wm_generic_widgets.c b/source/blender/windowmanager/intern/wm_generic_widgets.c
index 993c4cc..4a055da 100644
--- a/source/blender/windowmanager/intern/wm_generic_widgets.c
+++ b/source/blender/windowmanager/intern/wm_generic_widgets.c
@@ -627,16 +627,55 @@ typedef struct CageWidget {
int style;
} CageWidget;
+static void cage_draw_corners(rctf *r, float offsetx, float offsety)
+{
+ glBegin(GL_LINES);
+ glVertex2f(r->xmin, r->ymin + offsety);
+ glVertex2f(r->xmin, r->ymin);
+ glVertex2f(r->xmin, r->ymin);
+ glVertex2f(r->xmin + offsetx, r->ymin);
+
+ glVertex2f(r->xmax, r->ymin + offsety);
+ glVertex2f(r->xmax, r->ymin);
+ glVertex2f(r->xmax, r->ymin);
+ glVertex2f(r->xmax - offsetx, r->ymin);
+
+ glVertex2f(r->xmax, r->ymax - offsety);
+ glVertex2f(r->xmax, r->ymax);
+ glVertex2f(r->xmax, r->ymax);
+ glVertex2f(r->xmax - offsetx, r->ymax);
+
+ glVertex2f(r->xmin, r->ymax - offsety);
+ glVertex2f(r->xmin, r->ymax);
+ glVertex2f(r->xmin, r->ymax);
+ glVertex2f(r->xmin + offsetx, r->ymax);
+ glEnd();
+}
+
static void widget_cage_draw(struct wmWidget *widget, const struct bContext *UNUSED(C))
{
CageWidget *cage = (CageWidget *)widget;
+ float w = BLI_rctf_size_x(&cage->bound);
+ float h = BLI_rctf_size_y(&cage->bound);
+
+ glColor4f(1.0f, 0.6f, 0.0f, 0.1f);
- glColor3f(1.0, 1.0, 1.0);
- glRectf(cage->bound.xmin, cage->bound.ymin, cage->bound.xmax, cage->bound.ymax);
+// glEnable(GL_BLEND);
+// glRectf(cage->bound.xmin, cage->bound.ymin, cage->bound.xmax, cage->bound.ymax);
+// glDisable(GL_BLEND);
+
+ /* corner widgets */
+ glColor3f(0.0, 0.0, 0.0);
+ glLineWidth(3.0);
+ cage_draw_corners(&cage->bound, w/8.0f, h/8.0f);
+ /* corner widgets */
+ glColor3f(1.0, 1.0, 1.0);
+ glLineWidth(1.0);
+ cage_draw_corners(&cage->bound, w/8.0f, h/8.0f);
}
-int widget_cage_intersect(struct bContext *UNUSED(C), const struct wmEvent *event, struct wmWidget *widget)
+static int widget_cage_intersect(struct bContext *UNUSED(C), const struct wmEvent *event, struct wmWidget *widget)
{
CageWidget *cage = (CageWidget *)widget;
float mouse[2] = {event->mval[0], event->mval[1]};
@@ -660,6 +699,7 @@ struct wmWidget *WIDGET_cage_new(int style, void *customdata)
cage->widget.customdata = customdata;
cage->widget.draw = widget_cage_draw;
cage->widget.intersect = widget_cage_intersect;
+ cage->widget.user_scale = 1.0f;
cage->style = style;
return (wmWidget *)cage;
@@ -667,7 +707,9 @@ struct wmWidget *WIDGET_cage_new(int style, void *customdata)
void WIDGET_cage_bind_to_rotation(struct wmWidget *widget, float rotation)
{
-
+ CageWidget *cage = (CageWidget *)widget;
+
+ cage->rotation = rotation;
}
void WIDGET_cage_bounds_set(struct wmWidget *widget, float w, float h)
@@ -676,7 +718,7 @@ void WIDGET_cage_bounds_set(struct wmWidget *widget, float w, float h)
cage->bound.xmax = w/2;
cage->bound.ymax = h/2;
cage->bound.xmin = -w/2;
- cage->bound.ymin = h/2;
+ cage->bound.ymin = -h/2;
}
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 606409e..fe959ec 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -127,6 +127,7 @@ struct wmOperator;
struct wmOperatorType;
struct wmWindow;
struct wmWindowManager;
+struct wmWidgetMap;
/* -------------------------------------------------------------------- */
@@ -294,6 +295,8 @@ void WM_cursor_modal_restore(struct wmWindow *win) RET_NONE
void WM_cursor_time(struct wmWindow *win, int nr) RET_NONE
void WM_cursor_warp(struct wmWindow *win, int x, int y) RET_NONE
+void WM_widgetmap_delete(struct wmWidgetMap *wmap) RET_NONE
+
void WM_uilisttype_init(void) RET_NONE
struct uiListType *WM_uilisttype_find(const char *idname, bool quiet) RET_NULL
bool WM_uilisttype_add(struct uiListType *ult) RET_ZERO
More information about the Bf-blender-cvs
mailing list