Ejemplo n.º 1
0
///////////////////////////////////////////////////////////////////////////////////////////////
// paint routine
void PixRasterBaseCtrl::Paint(Draw &d)
{
	// clears background
	d.DrawRect(GetSize(), SColorFace());

	// if no associated PixRaster, does nothing
	if(!pixRasterCtrl->GetPixBase())
		return;

	// paints image inside cache, if needed
	PaintCache();
	
	// paints image cache inside control
	if(imageCache.GetWidth() >= GetSize().cx)
		imageCache.Paint(d, Point(0, 0));
	else
		imageCache.Paint(d, Point((GetSize().cx - imageCache.GetWidth()) / 2, 0));
	
	// paints markers inside control
	PaintMarkers(d);
	
	// if dragging, paints rubber banded polygon
	if(selectedMarker && dragPolygon.GetCount())
	{
		d.DrawPolygon(dragPolygon, dragPolygon.GetCount(),
		selectedMarker->GetFillColor(),
		selectedMarker->GetBorderThickness(),
		selectedMarker->GetBorderColor(),
		PEN_DOT,
		White);
	}

} // END LeptonicaBaseCtrl::Paint()
Ejemplo n.º 2
0
	virtual void Paint(Draw& w) {
		w.DrawRect(GetSize(), White());

		w.DrawRect(10, 10, 60, 80, Green());

		w.DrawLine(100, 10, 160, 80, 0, Black());
		w.DrawLine(160, 10, 100, 80, 4, Red());
		w.DrawLine(160, 40, 100, 50, PEN_DOT, Red());

		w.DrawEllipse(210, 20, 80, 60, Blue());

		w.DrawEllipse(310, 20, 80, 60, LtBlue(), 5, Red());

		w.DrawArc(RectC(410, 20, 80, 60), Point(10, 10), Point(450, 80), 3, Cyan);

		Vector<Point> p;
		p << Point(30, 110) << Point(60, 180) << Point(10, 150) << Point(70, 150);
		w.DrawPolyline(p, 4, Black);

		p.Clear();
		p << Point(130, 110) << Point(160, 180) << Point(110, 150) << Point(170, 120)
		  << Point(130, 110);
		w.DrawPolygon(p, Blue);

		p.Clear();
		p << Point(230, 110) << Point(260, 180) << Point(210, 150) << Point(270, 120)
		  << Point(230, 110);
		w.DrawPolygon(p, Cyan, 5, Magenta);

		p.Clear();
		p << Point(330, 110) << Point(360, 180) << Point(310, 150) << Point(370, 120)
		  << Point(330, 110);
		w.DrawPolygon(p, Cyan, 5, Magenta, I64(0xaa55aa55aa55aa55));

		w.DrawImage(40, 240, CtrlImg::save());
		w.DrawImage(110, 210, 80, 80, CtrlImg::save());
		w.DrawImage(240, 240, CtrlImg::save(), Blue);
		w.DrawImage(310, 210, 80, 80, CtrlImg::save(), Blue);

		w.DrawText(20, 330, "Hello world!");
		w.DrawText(120, 330, "Hello world!", Arial(15).Bold());
		w.DrawText(220, 330, "Hello world!", Roman(15).Italic(), Red);
		w.DrawText(320, 380, 400, "Hello world!", Courier(15).Underline());
	}
Ejemplo n.º 3
0
static void DrawPie(Draw& w, double c_x, double c_y, double r, int start, int alpha, int width = 0, 
					Color fill = Null, Color outline = Black, uint64 pattern = 0, Color background = White) {
	const int dalpha = 1;
	int n = alpha/dalpha;
	
	Vector <Point> vP;
	Point centre = Point(int(c_x), int(c_y));
	vP << centre;
	int ix;
	int iy;	
	for (int i = 0; i <= n; i++) {
		double x = c_x + r*cos((start+i*dalpha)*M_PI/1800);
		ix = fround(x);		
		double y = c_y + r*sin((start+i*dalpha)*M_PI/1800);
		iy = fround(y);
		double dxy = (x-ix)*(x-ix) + (y-iy)*(y-iy);
		if(dxy < 0.1 || i == 0 || i == n) 
			vP << Point(ix,iy);
		if(w.IsGui()) 
			w.DrawRect(ix, iy, 1, 1, Blend(fill, background, 150));			
	}
	vP << centre;	
	w.DrawPolygon(vP, fill, width, outline, pattern, Null);
}
Ejemplo n.º 4
0
///////////////////////////////////////////////////////////////////////////////////////////////
// repaint polygon markers over the images
void PixRasterBaseCtrl::PaintMarkers(Draw &d)
{
	// if no associated PixRaster object, do nothing
	if(!pixRasterCtrl || !pixRasterCtrl->GetPixBase())
		return;
	
	// gets associated PixRaster object
	PixBase *pixBase = pixRasterCtrl->GetPixBase();
	
	// calculate view position inside the full tiff image
	int left, top;
	if(hScrollBar.IsVisible())
		left = hScrollBar.Get();
	else
		left = 0;
	if(vScrollBar.IsVisible())
		top = vScrollBar.Get();
	else
		top = 0;

	// loop for all pages, to see which of them fits the view
	int currentTop = 0;
	int currentPage = pixBase->GetActivePage();
	for(int i = 0 ; i < pixBase->GetPageCount() ; i++)
	{
		// sets the active page
		pixBase->SeekPage(i);
		
		// translates current top of page in view coordinates
		int viewCurrentTop = ScaleToView(currentTop);
		
		// gets current page size and translates it in view coordinates
		Rect viewPageRect(
			-left,
			-top + viewCurrentTop,
			ScaleToView(pixBase->GetSize().cx) - left,
			ScaleToView(pixBase->GetSize().cy) - top + viewCurrentTop
		);
		
		// this is when page view is smaller than ctrl view
		int hGap;
		int pw = viewPageRect.right - viewPageRect.left;
		if(pw >= GetSize().cx)
			hGap = 0;
		else
			hGap = (GetSize().cx - pw) / 2;

		// checks wether the page fits the view..
		viewPageRect.Intersect(GetView());
		if(!viewPageRect.IsEmpty())
		{
		
			// this page is inside view, let's take its markers
			Markers &markers = *pixBase->GetMarkers();
			for(int iMarker = 0; iMarker < markers.GetCount(); iMarker++)
			{
				Marker &marker = markers[iMarker];
				
				// don't paint marker being dragged... it will be done by
				// drag routine itself
				if(&marker == selectedMarker)
					continue;
				
				switch(marker.GetKind())
				{
					case Marker::EmptyMarker:
						continue;
						
					default:
						Vector<Point> pts = marker.GetPoints();
						Point points[pts.GetCount()];
						for(int i = 0; i < pts.GetCount(); i++)
						{
							points[i].x = ScaleToView(pts[i].x) - left + hGap;
							points[i].y = ScaleToView(pts[i].y) - top + viewCurrentTop;
						}
						if(&marker != highlightMarker)
							d.DrawPolygon(points, pts.GetCount(),
							marker.GetFillColor(),
							marker.GetBorderThickness(),
							marker.GetBorderColor(),
							marker.GetBorderLineType(),
							White);
						else
							d.DrawPolygon(points, pts.GetCount(),
							marker.GetSelFillColor(),
							marker.GetSelBorderThickness(),
							marker.GetSelBorderColor(),
							marker.GetSelBorderLineType(),
							White);
						break;
				}
			}
		}
		currentTop += pixBase->GetHeight() + ScaleToPage(10);
	}

	// restore PixRaster's active page
	pixBase->SeekPage(currentPage);
	
} // END PixRasterBaseCtrl::PaintMarkers()