[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