Beispiel #1
0
/* if rect set, do not draw */
void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect)
{
	wmWindowManager *wm= CTX_wm_manager(C);
	wmDrag *drag;
	int cursorx, cursory, x, y;
	
	cursorx= win->eventstate->x;
	cursory= win->eventstate->y;
	if(rect) {
		rect->xmin= rect->xmax= cursorx;
		rect->ymin= rect->ymax= cursory;
	}
	
	/* XXX todo, multiline drag draws... but maybe not, more types mixed wont work well */
	glEnable(GL_BLEND);
	for(drag= wm->drags.first; drag; drag= drag->next) {
		
		/* image or icon */
		if(drag->imb) {
			x= cursorx - drag->sx/2;
			y= cursory - drag->sy/2;
			
			if(rect)
				drag_rect_minmax(rect, x, y, x+drag->sx, y+drag->sy);
			else {
				glColor4f(1.0, 1.0, 1.0, 0.65);	/* this blends texture */
				glaDrawPixelsTexScaled(x, y, drag->imb->x, drag->imb->y, GL_UNSIGNED_BYTE, drag->imb->rect, drag->scale, drag->scale);
			}
		}
		else {
			x= cursorx - 8;
			y= cursory - 2;
			
			/* icons assumed to be 16 pixels */
			if(rect)
				drag_rect_minmax(rect, x, y, x+16, y+16);
			else
				UI_icon_draw_aspect(x, y, drag->icon, 1.0, 0.8);
		}
		
		/* item name */
		if(drag->imb) {
			x= cursorx - drag->sx/2;
			y= cursory - drag->sy/2 - 16;
		}
		else {
			x= cursorx + 10;
			y= cursory + 1;
		}
		
		if(rect) {
			int w=  UI_GetStringWidth(wm_drag_name(drag));
			drag_rect_minmax(rect, x, y, x+w, y+16);
		}
		else {
			glColor4ub(255, 255, 255, 255);
			UI_DrawString(x, y, wm_drag_name(drag));
		}
		
		/* operator name with roundbox */
		if(drag->opname[0]) {
			if(drag->imb) {
				x= cursorx - drag->sx/2;
				y= cursory + drag->sy/2 + 4;
			}
			else {
				x= cursorx - 8;
				y= cursory + 16;
			}
			
			if(rect) {
				int w=  UI_GetStringWidth(wm_drag_name(drag));
				drag_rect_minmax(rect, x, y, x+w, y+16);
			}
			else 
				wm_drop_operator_draw(drag->opname, x, y);
			
		}
	}
	glDisable(GL_BLEND);
}
Beispiel #2
0
/* if rect set, do not draw */
void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect)
{
	wmWindowManager *wm = CTX_wm_manager(C);
	wmDrag *drag;
	const int winsize_y = WM_window_pixels_y(win);
	int cursorx, cursory, x, y;
	
	cursorx = win->eventstate->x;
	cursory = win->eventstate->y;
	if (rect) {
		rect->xmin = rect->xmax = cursorx;
		rect->ymin = rect->ymax = cursory;
	}
	
	/* XXX todo, multiline drag draws... but maybe not, more types mixed wont work well */
	glEnable(GL_BLEND);
	for (drag = wm->drags.first; drag; drag = drag->next) {
		int iconsize = 16 * UI_DPI_FAC; /* assumed to be 16 pixels */
		int padding = 4 * UI_DPI_FAC;
		
		/* image or icon */
		if (drag->imb) {
			x = cursorx - drag->sx / 2;
			y = cursory - drag->sy / 2;
			
			if (rect)
				drag_rect_minmax(rect, x, y, x + drag->sx, y + drag->sy);
			else {
				glColor4f(1.0, 1.0, 1.0, 0.65); /* this blends texture */
				glaDrawPixelsTexScaled(x, y, drag->imb->x, drag->imb->y, GL_RGBA, GL_UNSIGNED_BYTE, GL_NEAREST, drag->imb->rect, drag->scale, drag->scale);
			}
		}
		else {
			x = cursorx - 2 * padding;
			y = cursory - 2 * UI_DPI_FAC;
			
			if (rect)
				drag_rect_minmax(rect, x, y, x + iconsize, y + iconsize);
			else
				UI_icon_draw_aspect(x, y, drag->icon, 1.0f / UI_DPI_FAC, 0.8);
		}
		
		/* item name */
		if (drag->imb) {
			x = cursorx - drag->sx / 2;
			y = cursory - drag->sy / 2 - iconsize;
		}
		else {
			x = cursorx + 10 * UI_DPI_FAC;
			y = cursory + 1 * UI_DPI_FAC;
		}
		
		if (rect) {
			int w =  UI_fontstyle_string_width(wm_drag_name(drag));
			drag_rect_minmax(rect, x, y, x + w, y + iconsize);
		}
		else {
			glColor4ub(255, 255, 255, 255);
			UI_draw_string(x, y, wm_drag_name(drag));
		}
		
		/* operator name with roundbox */
		if (drag->opname[0]) {
			if (drag->imb) {
				x = cursorx - drag->sx / 2;

				if (cursory + drag->sy / 2 + padding + iconsize < winsize_y)
					y = cursory + drag->sy / 2 + padding;
				else
					y = cursory - drag->sy / 2 - padding - iconsize - padding - iconsize;
			}
			else {
				x = cursorx - 2 * padding;

				if (cursory + iconsize + iconsize < winsize_y)
					y = cursory + iconsize;
				else
					y = cursory - iconsize - 2 * UI_DPI_FAC;
			}
			
			if (rect) {
				int w =  UI_fontstyle_string_width(wm_drag_name(drag));
				drag_rect_minmax(rect, x, y, x + w, y + iconsize);
			}
			else 
				wm_drop_operator_draw(drag->opname, x, y);
			
		}
	}
	glDisable(GL_BLEND);
}