RESULTCODE FerryRegionSymbolImpl::Draw(Geometry* pGeometry, Renderer* pRenderer, Transformation* pTransform)
	{
		if(pGeometry==NULL)
		{
			return AG_FAILURE;
		}
		augeGeometryType geom_type = pGeometry->GeometryType();
		if((geom_type!=augeGTPolygon) &&(geom_type!=augeGTMultiPolygon))
		{
			return AG_FAILURE;
		}
		if(m_size==0)
		{
			return AG_FAILURE;
		}

		RendererCairo* pRendererCairo = static_cast<RendererCairo*>(pRenderer);
		cairo_t			*canvas_cairo = pRendererCairo->GetCairo();
		cairo_surface_t	*canvas_surface=pRendererCairo->GetCairoSurface();

		Fill	*pFill = GetFill();
		Stroke	*pStroke = GetStroke();

		g_uchar* wkb = pGeometry->AsBinary();
		cairo_new_path(canvas_cairo);
		switch(geom_type)
		{
		case augeGTPolygon:
			build_path(canvas_cairo, (WKBPolygon*)wkb, pTransform);
			break;
		case augeGTMultiPolygon:
			build_path(canvas_cairo, (WKBMultiPolygon*)wkb, pTransform);
			break;
		}

		if(pFill!=NULL)
		{
			GColor& color = pFill->GetColor();
			cairo_set_source_rgba(canvas_cairo, color.GetRedF(), color.GetGreenF(), color.GetBlueF(), color.GetAlphaF());
			if(pStroke==NULL)
				cairo_fill(canvas_cairo);
			else
				cairo_fill_preserve(canvas_cairo);
		}
		if(pStroke!=NULL)
		{
			set_stroke_style(canvas_cairo, pStroke);
			cairo_stroke(canvas_cairo);
		}

		return AG_SUCCESS;
	}
Example #2
0
wxSVGRect wxSVGEllipseElement::GetResultBBox(wxSVG_COORDINATES coordinates) {
	wxSVGRect bbox = GetBBox(coordinates);
	if (GetStroke().GetPaintType() == wxSVG_PAINTTYPE_NONE)
		return bbox;

	double strokeWidthX = GetStrokeWidth();
	double strokeWidthY = strokeWidthX;
	if (coordinates != wxSVG_COORDINATES_USER) {
		wxSVGMatrix matrix = GetMatrix(coordinates);
		strokeWidthX *= matrix.GetA();
		strokeWidthY *= matrix.GetD();
	}

	return wxSVGRect(bbox.GetX() - strokeWidthX / 2, bbox.GetY() - strokeWidthY / 2, bbox.GetWidth() + strokeWidthX,
			bbox.GetHeight() + strokeWidthY);
}