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; }
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); }