From d2c12d6eb3a1dd5ef4ed10ce893a5071be415eb3 Mon Sep 17 00:00:00 2001 From: rachytski Date: Fri, 25 May 2012 17:49:30 +0400 Subject: [PATCH] added ShapeRenderer::drawRoundedRectangle. --- yg/shape_renderer.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++ yg/shape_renderer.hpp | 1 + 2 files changed, 76 insertions(+) diff --git a/yg/shape_renderer.cpp b/yg/shape_renderer.cpp index f6155b4930..5b6cd30dea 100644 --- a/yg/shape_renderer.cpp +++ b/yg/shape_renderer.cpp @@ -154,5 +154,80 @@ namespace yg style->m_pipelineID ); } + + void ShapeRenderer::drawRoundedRectangle(m2::RectD const & r, double rad, yg::Color const & c, double depth) + { + ResourceStyle const * style = skin()->fromID(skin()->mapColor(c)); + + if (style == 0) + { + LOG(LINFO, ("cannot map color")); + return; + } + + shared_ptr texture = skin()->getPage(style->m_pipelineID)->texture(); + + if (!texture) + { + LOG(LDEBUG, ("returning as no texture is reserved")); + return; + } + + m2::PointF texPt = texture->mapPixel(m2::RectF(style->m_texRect).Center()); + + vector seg00; + vector seg10; + vector seg11; + vector seg01; + + approximateArc(m2::PointD(r.minX() + rad, r.minY() + rad), + math::pi, + 3 * math::pi / 2, + rad, + seg00); + + approximateArc(m2::PointD(r.minX() + rad, r.maxY() - rad), + math::pi / 2, + math::pi, + rad, + seg01); + + approximateArc(m2::PointD(r.maxX() - rad, r.maxY() - rad), + 0, + math::pi / 2, + rad, + seg11); + + approximateArc(m2::PointD(r.maxX() - rad, r.minY() + rad), + 3 * math::pi / 2, + math::pi * 2, + rad, + seg10); + + vector pts; + + for (unsigned i = 0; i < seg11.size(); ++i) + pts.push_back(m2::PointF(seg11[i])); + + for (unsigned i = 0; i < seg01.size(); ++i) + pts.push_back(m2::PointF(seg01[i])); + + for (unsigned i = 0; i < seg00.size(); ++i) + pts.push_back(m2::PointF(seg00[i])); + + for (unsigned i = 0; i < seg10.size(); ++i) + pts.push_back(m2::PointF(seg10[i])); + + addTexturedFanStrided( + &pts[0], + sizeof(m2::PointF), + &texPt, + 0, + pts.size(), + depth, + style->m_pipelineID + ); + } + } } diff --git a/yg/shape_renderer.hpp b/yg/shape_renderer.hpp index eb85b35d96..2303d2e441 100644 --- a/yg/shape_renderer.hpp +++ b/yg/shape_renderer.hpp @@ -23,6 +23,7 @@ namespace yg void drawRectangle(m2::AnyRectD const & r, yg::Color const & c, double depth); void drawRectangle(m2::RectD const & r, yg::Color const & c, double depth); + void drawRoundedRectangle(m2::RectD const & r, double rad, yg::Color const & c, double depth); }; } }