예제 #1
0
/* Draw Scene-Markers in time window */
void draw_markers_time(const bContext *C, int flag)
{
	ListBase *markers = ED_context_get_markers(C);
	View2D *v2d;
	TimeMarker *marker;
	Scene *scene;

	if (markers == NULL)
		return;

	scene = CTX_data_scene(C);
	v2d = UI_view2d_fromcontext(C);

	/* unselected markers are drawn at the first time */
	for (marker = markers->first; marker; marker = marker->next) {
		if ((marker->flag & SELECT) == 0) {
			draw_marker(v2d, marker, scene->r.cfra, flag);
		}
	}
	
	/* selected markers are drawn later */
	for (marker = markers->first; marker; marker = marker->next) {
		if (marker->flag & SELECT) {
			draw_marker(v2d, marker, scene->r.cfra, flag);
		}
	}
}
예제 #2
0
/* Draw Scene-Markers in time window */
void ED_markers_draw(const bContext *C, int flag)
{
	ListBase *markers = ED_context_get_markers(C);
	View2D *v2d;
	TimeMarker *marker;
	Scene *scene;
	int select_pass;
	int v2d_clip_range_x[2];
	float font_width_max;

	/* cache values */
	float ypixels, xscale, yscale;

	if (markers == NULL || BLI_listbase_is_empty(markers)) {
		return;
	}

	scene = CTX_data_scene(C);
	v2d = UI_view2d_fromcontext(C);

	if (flag & DRAW_MARKERS_MARGIN) {
		const unsigned char shade[4] = {0, 0, 0, 16};
		glColor4ubv(shade);

		glEnable(GL_BLEND);
		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

		glRectf(v2d->cur.xmin, 0, v2d->cur.xmax, UI_MARKER_MARGIN_Y);

		glDisable(GL_BLEND);
	}

	/* no time correction for framelen! space is drawn with old values */
	ypixels = BLI_rcti_size_y(&v2d->mask);
	UI_view2d_scale_get(v2d, &xscale, &yscale);
	glScalef(1.0f / xscale, 1.0f, 1.0f);

	/* x-bounds with offset for text (adjust for long string, avoid checking string width) */
	font_width_max = (10 * UI_DPI_FAC) / xscale;
	v2d_clip_range_x[0] = v2d->cur.xmin - (sizeof(marker->name) * font_width_max);
	v2d_clip_range_x[1] = v2d->cur.xmax + font_width_max;

	/* loop [unselected, selected] */
	for (select_pass = 0; select_pass <= SELECT; select_pass += SELECT) {
		/* unselected markers are drawn at the first time */
		for (marker = markers->first; marker; marker = marker->next) {
			if ((marker->flag & SELECT) == select_pass) {
				/* bounds check */
				if ((marker->frame >= v2d_clip_range_x[0]) &&
				    (marker->frame <= v2d_clip_range_x[1]))
				{
					draw_marker(v2d, marker, scene->r.cfra, flag,
					            ypixels, xscale, yscale);
				}
			}
		}
	}

	glScalef(xscale, 1.0f, 1.0f);
}
예제 #3
0
int Leveler::draw() 
{	
	Stroke		(255, 128, 128, 0.5);
	StrokeWidth (2);

	draw_l_title		(  );
	draw_horizontal_tics(  );
	draw_vertical_line  (  );
	draw_x_label	 	(  );
	draw_y_label	 	(  );

	draw_marker(  );
}
예제 #4
0
int Leveler::draw() 
{	
	if (!Visible) return 0;
	
	Stroke		(255, 128, 128, 0.5);
	StrokeWidth (2); 
 
	draw_l_title		(  );
	draw_horizontal_tics(  );
	draw_vertical_line  (  );
	draw_x_label	 	(  );
	draw_y_label	 	(  );

	draw_marker			(  );
	return 1;	
}
예제 #5
0
static void
gtk_plot_canvas_ellipse_select(GtkPlotCanvas *canvas, GtkPlotCanvasChild *child, GtkAllocation area)
{
  GdkGC *xor_gc = NULL;
  GdkGCValues values;
  
  gdk_gc_get_values(GTK_WIDGET(canvas)->style->fg_gc[0], &values);
  values.function = GDK_INVERT;
  values.foreground = GTK_WIDGET(canvas)->style->white;
  values.subwindow_mode = GDK_INCLUDE_INFERIORS;
  xor_gc = gdk_gc_new_with_values(GTK_WIDGET(canvas)->window,
                                  &values,
                                  GDK_GC_FOREGROUND |
                                  GDK_GC_FUNCTION |
                                  GDK_GC_SUBWINDOW);

  gdk_draw_rectangle (GTK_WIDGET(canvas)->window,
                      xor_gc,
                      FALSE,
                      area.x, area.y,
                      area.width, area.height);
  draw_marker(canvas, xor_gc, area.x, area.y);
  draw_marker(canvas, xor_gc, area.x, area.y + area.height);
  draw_marker(canvas, xor_gc, area.x + area.width, area.y);
  draw_marker(canvas, xor_gc, area.x + area.width, area.y + area.height);
  if(area.height > DEFAULT_MARKER_SIZE * 2){
    draw_marker(canvas, xor_gc, area.x, area.y + area.height / 2);
    draw_marker(canvas, xor_gc, area.x + area.width,
                                area.y + area.height / 2);
  }
  if(area.width > DEFAULT_MARKER_SIZE * 2){
    draw_marker(canvas, xor_gc, area.x + area.width / 2, area.y);
    draw_marker(canvas, xor_gc, area.x + area.width / 2,
                                area.y + area.height);
  }

  gdk_gc_set_line_attributes(xor_gc, 1, 1, 0, 0);
  gdk_draw_arc (GTK_WIDGET(canvas)->window, xor_gc,
                FALSE,
                roundint(area.x), roundint(area.y),
                roundint(area.width), roundint(area.height), 0, 25000);

  if(xor_gc) gdk_gc_unref(xor_gc);
}
예제 #6
0
파일: osedit_e.cpp 프로젝트: 112212/7k2
// ----- begin of function ScenarioEditro::disp_edit_view -------//
//
void ScenarioEditor::disp_edit_view()
{
	if( power.command_id )
		return;

	int drawMarker = 0;
	int validAction = 0;
	int markerX1, markerY1, markerX2, markerY2;

	if( mouse.in_area( ZOOM_X1, ZOOM_Y1, ZOOM_X2, ZOOM_Y2) )
	{
		int xLoc, yLoc;
		char mobileType;

		if( world.zoom_matrix->get_detect_location( mouse.cur_x, mouse.cur_y, 
			&xLoc, &yLoc, &mobileType) )
		{
			if( unit_array.selected_recno && !unit_array.is_deleted(unit_array.selected_recno)  )
			{
				Unit *unitPtr = unit_array[unit_array.selected_recno];
				if( world.check_unit_space( xLoc, yLoc, 
					xLoc+unitPtr->sprite_info->loc_width-1, yLoc+unitPtr->sprite_info->loc_height-1,
					unitPtr->mobile_type) )
				{
					validAction = 1;
				}
				markerX1 = xLoc;
				markerY1 = yLoc;
				markerX2 = xLoc + unitPtr->obj_loc_width() - 1;
				markerY2 = yLoc + unitPtr->obj_loc_height() - 1;
				drawMarker = 1;
			}
		}
	}

	// ------ draw marker -------//

	if( drawMarker )
	{
		draw_marker( validAction, markerX1, markerY1, markerX2, markerY2 );
	}
}
예제 #7
0
파일: mac.c 프로젝트: albertocabello/gr
static
void marker_routine(
  int n, double *px, double *py, int mtype, double mscale, int mcolor)
{
  double x, y;
  double *clrt = gkss->viewport[gkss->cntnr];
  register int i, draw;

  for (i = 0; i < n; i++)
  {
    WC_to_NDC(px[i], py[i], gkss->cntnr, x, y);
    seg_xform(&x, &y);

    if (gkss->clip == GKS_K_CLIP)
      draw = (x >= clrt[0] && x <= clrt[1] && y >= clrt[2] && y <= clrt[3]);
    else
      draw = 1;

    if (draw)
      draw_marker(x, y, mtype, mscale, mcolor);
  }
}
예제 #8
0
파일: osedit_f.cpp 프로젝트: mecirt/7k2
// ----- begin of function ScenarioEditor::disp_monster_view ------//
//
void ScenarioEditor::disp_monster_view()
{
	if( power.command_id )
		return;

	int drawMarker = 0;
	int validAction = 0;
	int markerX1, markerY1, markerX2, markerY2;

	int xLoc, yLoc;
	char mobileType;

	if( mouse.in_area(ZOOM_X1, ZOOM_Y1, ZOOM_X2, ZOOM_Y2) )
	{
		// destruction marker if there is a human

		Location *locPtr = power.test_detect(mouse.cur_x, mouse.cur_y, &mobileType, &xLoc, &yLoc);
		
		if( locPtr && locPtr->base_obj_recno() )
		{
			BaseObj *baseObj = base_obj_array[locPtr->base_obj_recno()];
			drawMarker = 1;
			validAction = 1;
			markerX1 = baseObj->obj_loc_x1();
			markerY1 = baseObj->obj_loc_y1();
			markerX2 = baseObj->obj_loc_x2();
			markerY2 = baseObj->obj_loc_y2();
		}

		// construction marker

		else if( world.zoom_matrix->get_detect_location(mouse.cur_x, mouse.cur_y, &xLoc, &yLoc, NULL) )
		{
			locPtr = world.get_loc( xLoc, yLoc );

			if( unit_or_struct == 0 && !vbrowse_unit_id.none_record )
			{
				// put unit monster_unit_id_array[monster_unit_id_browse_recno-1]
				// on (xLoc, yLoc)
				int unitId = monster_unit_id_array[monster_unit_id_browse_recno-1];
				UnitInfo *unitInfo = unit_res[unitId];
				SpriteInfo *spriteInfo = sprite_res[unitInfo->sprite_id];
				if( world.check_unit_space(xLoc, yLoc, 
					xLoc+spriteInfo->loc_width-1, yLoc+spriteInfo->loc_height-1, unitInfo->mobile_type) )
				{
					validAction = 1;
				}
				markerX1 = xLoc;
				markerY1 = yLoc;
				markerX2 = xLoc + spriteInfo->loc_width -1;
				markerY2 = yLoc + spriteInfo->loc_height -1;
				drawMarker = markerX2 < MAX_WORLD_X_LOC && markerY2 < MAX_WORLD_Y_LOC;
			}
			else if( unit_or_struct == 1 && !vbrowse_firm_build.none_record )
			{
				err_when( monster_firm_group_array[monster_firm_group_browse_recno-1] == 0 );
				// put firm group monster_firm_group_array[monster_firm_group_browse_recno]
				// on (xLoc, yLoc)

				FirmGroup *firmGroup = firm_res.get_group(monster_firm_group_array[monster_firm_group_browse_recno-1]);
				if( world.can_build_firm( xLoc, yLoc, firmGroup->firm_id, 0) )
				{
					validAction = 1;
				}
				markerX1 = xLoc;
				markerY1 = yLoc;
				markerX2 = xLoc + firm_res[firmGroup->firm_id]->loc_width - 1;
				markerY2 = yLoc + firm_res[firmGroup->firm_id]->loc_height - 1;
				drawMarker = markerX2 < MAX_WORLD_X_LOC && markerY2 < MAX_WORLD_Y_LOC;
			}
		}
	}

	// ------ draw marker -------//

	if( drawMarker )
	{
		draw_marker( validAction, markerX1, markerY1, markerX2, markerY2 );
	}
}
예제 #9
0
// mouse proc for mouseTrack, handles the actual tracking messages from the
// MAX command mode system
int
TrackMouseCallBack::proc(HWND hwnd, int msg, int point, int flag, IPoint2 m)
{	
	if (ref_deleted)
	{
		// bail if my tracking object is deleted under me
		end_track_mouse = TRUE; 
		return FALSE;		
	}
	
	int result = TRUE;
	ViewExp& vpx = MAXScript_interface->GetViewExp(hwnd); 
	if ( ! vpx.IsAlive() )
	{
		// why are we here
		DbgAssert(!_T("Invalid viewport!"));
		return FALSE;
	}

	int snap = (snap_mode == n_2D) ? SNAP_IN_PLANE : SNAP_IN_3D;
	IPoint2 sm;
	Value* cbmsg = NULL;

	// determine what kind of mouse event
	switch (msg) 
	{
		case MOUSE_FREEMOVE:
			SetCursor(LoadCursor(g_hInst, MAKEINTRESOURCE(IDC_CROSS_HAIR)));
			cbmsg = n_freeMove;
			break;

		case MOUSE_MOVE:
			cbmsg = n_mouseMove;
			break;

		case MOUSE_POINT:
			if (!MAXScript_interface->IsCPEdgeOnInView())
				cbmsg = n_mousePoint;
			break;

		case MOUSE_ABORT:
		case MOUSE_PROPCLICK:	// right click exit
			cbmsg = n_mouseAbort;
			break;
	}
	
	if (cbmsg != NULL)
	{
		//  we have an event to signal to the scripted callback
		Point3 wp;
		Point3 wdirp;
		BOOL   ok = TRUE;
		// valid mouse op, compute tracking point & normal and invoke callback
		if (nodeTab.Count() > 0)
		{
			// point on object surface, get the normal ray
			ok = point_on_obj(vpx, m, r.p, r.dir);
			if (ok == TRUE)
				draw_marker(vpx, r.p, r.dir);
		}
		else
		{
			// point on active grid, compute normal ray
			vpx.SnapPreview(m, sm, NULL, snap);
			Point3 cpp = vpx.SnapPoint(m, sm, NULL, snap);
			Point3 dirp = cpp + Point3(0.0f, 0.0f, 1.0f);
			wp = vpx.MapCPToWorld(cpp);
			wdirp = vpx.MapCPToWorld(dirp);
			r.p = wp; r.dir = wdirp - wp;
			draw_marker(vpx, r.p, r.dir);
		}
		
		// call the scripted callback
		vl->ray_val = ok ? (Value*)new RayValue (r) : (Value*)&undefined;
		if (track_callback != NULL)
			result = do_track_callback(this, cbmsg, flag);
	}

	if (!result)
		end_track_mouse = TRUE; 
	return result;
}