Rect Canvas::GetCoverageBounds () { Brush *background = GetBackground (); if (background && background->IsOpaque ()) return coverage_bounds; return Rect (); }
void GLShapeRenderer::renderPolygon(LKSurface& Surface, const XShape& shape, Brush& brush, const ScreenProjection& _Proj) { /* OpenGL cannot draw complex polygons so we need to use a Tessallator to draw the polygon using a GL_TRIANGLE_FAN */ #ifdef USE_GLSL OpenGL::solid_shader->Use(); #endif brush.Bind(); std::unique_ptr<const GLBlend> blend; if(!brush.IsOpaque()) { blend = std::make_unique<const GLBlend>(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } curr_LabelPos = clipRect.GetBottomRight(); const shapeObj& shp = shape.shape; gluTessBeginPolygon(tess, this ); for (int j = 0; j < shp.numlines; j++) { gluTessBeginContour(tess); for (int i = 0; i < shp.line[j].numpoints; i++) { const RasterPoint pt = _Proj.LonLat2Screen(shp.line[j].point[i]); if (!noLabel && (pt.x<=curr_LabelPos.x)) { curr_LabelPos = pt; } vertex_t& vertex = *(pointers.insert(pointers.end(), vertex_t({{(GLdouble)pt.x, (GLdouble)pt.y, 0.}}))); gluTessVertex(tess, vertex.data(), vertex.data()); } gluTessEndContour(tess); } gluTessEndPolygon(tess); if(shape.HasLabel() && clipRect.IsInside(curr_LabelPos)) { shape.renderSpecial(Surface, curr_LabelPos.x, curr_LabelPos.y, clipRect); } pointers.clear(); }