From 336b6c2c1d9c66b7a8e692ab2605c457436c298e Mon Sep 17 00:00:00 2001 From: rachytski Date: Thu, 27 Sep 2012 18:45:11 +0300 Subject: [PATCH] aligning every glyph in StraightTextElement to pixel boundary for non-blurry rendering of GUI elements. --- yg/path_text_element.cpp | 4 ++-- yg/straight_text_element.cpp | 4 ++-- yg/text_element.cpp | 13 ++++++++++--- yg/text_element.hpp | 1 + 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/yg/path_text_element.cpp b/yg/path_text_element.cpp index 46033aec1c..5123ebe2cd 100644 --- a/yg/path_text_element.cpp +++ b/yg/path_text_element.cpp @@ -70,11 +70,11 @@ namespace yg if (desc.m_isMasked) { - drawTextImpl(m_glyphLayout, screen, m, false, desc, yg::maxDepth - 1); + drawTextImpl(m_glyphLayout, screen, m, false, false, desc, yg::maxDepth - 1); desc.m_isMasked = false; } - drawTextImpl(m_glyphLayout, screen, m, false, desc, yg::maxDepth); + drawTextImpl(m_glyphLayout, screen, m, false, false, desc, yg::maxDepth); } void PathTextElement::setPivot(m2::PointD const & pivot) diff --git a/yg/straight_text_element.cpp b/yg/straight_text_element.cpp index 429b1ccd45..e9d7f31a4d 100644 --- a/yg/straight_text_element.cpp +++ b/yg/straight_text_element.cpp @@ -271,14 +271,14 @@ namespace yg for (unsigned i = 0; i < m_glyphLayouts.size(); ++i) { if (m_glyphLayouts[i].fontDesc().m_isMasked) - drawTextImpl(m_glyphLayouts[i], screen, m, true, m_glyphLayouts[i].fontDesc(), yg::maxDepth - 1); + drawTextImpl(m_glyphLayouts[i], screen, m, true, true, m_glyphLayouts[i].fontDesc(), yg::maxDepth - 1); } for (unsigned i = 0; i < m_glyphLayouts.size(); ++i) { yg::FontDesc fontDesc = m_glyphLayouts[i].fontDesc(); fontDesc.m_isMasked = false; - drawTextImpl(m_glyphLayouts[i], screen, m, true, fontDesc, yg::maxDepth); + drawTextImpl(m_glyphLayouts[i], screen, m, true, true, fontDesc, yg::maxDepth); } } diff --git a/yg/text_element.cpp b/yg/text_element.cpp index 48e0902549..f937ef240f 100644 --- a/yg/text_element.cpp +++ b/yg/text_element.cpp @@ -75,6 +75,7 @@ namespace yg gl::OverlayRenderer * screen, math::Matrix const & m, bool doTransformPivotOnly, + bool doAlignPivot, FontDesc const & fontDesc, double depth) const { @@ -113,12 +114,18 @@ namespace yg if (doTransformPivotOnly) { +#ifdef USING_GLSL + m2::PointD offsPt = offs + elem.m_pt; + m2::PointD fullPt = pv + offs + elem.m_pt; + + offsPt.x -= fullPt.x - floor(fullPt.x); + offsPt.y -= fullPt.y - floor(fullPt.y); + + screen->drawStraightGlyph(pv, offsPt, glyphStyle, depth); +#else glyphPt = pv + offs + elem.m_pt; glyphAngle = elem.m_angle; -#ifdef USING_GLSL - screen->drawStraightGlyph(pv, offs + elem.m_pt, glyphStyle, depth); -#else screen->drawGlyph(glyphPt, m2::PointD(0.0, 0.0), glyphAngle, 0, glyphStyle, depth); #endif } diff --git a/yg/text_element.hpp b/yg/text_element.hpp index f30f844b64..65c0425bc8 100644 --- a/yg/text_element.hpp +++ b/yg/text_element.hpp @@ -64,6 +64,7 @@ namespace yg gl::OverlayRenderer * r, math::Matrix const & m, bool doTransformPivotOnly, + bool doAlignPivot, FontDesc const & desc, double depth) const; strings::UniString const & logText() const;