refactored Ruler to make it gui::Element.

This commit is contained in:
rachytski 2013-01-25 12:25:44 +03:00 committed by Alex Zolotarev
parent 8dd89a8fce
commit 2bf7adf129
4 changed files with 41 additions and 50 deletions

View file

@ -1356,14 +1356,6 @@ bool Framework::GetDistanceAndAzimut(m2::PointD const & point,
void Framework::SetRenderPolicy(RenderPolicy * renderPolicy)
{
if (renderPolicy)
{
m_informationDisplay.setVisualScale(renderPolicy->VisualScale());
m_navigator.SetMinScreenParams(static_cast<unsigned>(m_minRulerWidth * renderPolicy->VisualScale()),
m_metresMinWidth);
}
m_guiController->ResetRenderParams();
m_renderPolicy.reset();
m_renderPolicy.reset(renderPolicy);
@ -1387,10 +1379,14 @@ void Framework::SetRenderPolicy(RenderPolicy * renderPolicy)
m_renderPolicy->SetAnimController(m_animController.get());
m_navigator.SetSupportRotation(m_renderPolicy->DoSupportRotation());
m_navigator.SetMinScreenParams(static_cast<unsigned>(m_minRulerWidth * m_renderPolicy->VisualScale()),
m_metresMinWidth);
if (m_width != 0 && m_height != 0)
OnSize(m_width, m_height);
m_informationDisplay.setVisualScale(m_renderPolicy->VisualScale());
// Do full invalidate instead of any "pending" stuff.
Invalidate();

View file

@ -27,19 +27,21 @@
namespace
{
static int const FONT_SIZE = 10;
static int const FONT_SIZE = 10;
}
InformationDisplay::InformationDisplay(Framework * framework)
: m_ruler(Ruler::Params()),
m_bottomShift(0),
: m_bottomShift(0),
m_visualScale(1)
{
m_fontDesc.m_color = graphics::Color(0x44, 0x44, 0x44, 0xFF);
m_ruler.setDepth(graphics::maxDepth);
Ruler::Params rp;
rp.m_depth = graphics::maxDepth - 10;
rp.m_position = graphics::EPosAboveLeft;
m_ruler.reset(new Ruler(rp));
CountryStatusDisplay::Params p;
@ -94,12 +96,13 @@ void InformationDisplay::setController(gui::Controller *controller)
m_controller->AddElement(m_countryStatusDisplay);
m_controller->AddElement(m_compassArrow);
m_controller->AddElement(m_locationState);
m_controller->AddElement(m_ruler);
}
void InformationDisplay::setScreen(ScreenBase const & screen)
{
m_screen = screen;
m_ruler.setScreen(screen);
m_ruler->setScreen(screen);
if (m_countryStatusDisplay->isVisible())
{
@ -123,6 +126,11 @@ void InformationDisplay::setBottomShift(double bottomShift)
void InformationDisplay::setDisplayRect(m2::RectI const & rect)
{
m_displayRect = rect;
m2::PointD pt(m2::PointD(m_displayRect.maxX() - 5 * m_visualScale,
m_displayRect.maxY() - 4 * m_visualScale));
m_ruler->setPivot(pt);
}
void InformationDisplay::enableDebugPoints(bool doEnable)
@ -140,44 +148,36 @@ void InformationDisplay::drawDebugPoints(Drawer * pDrawer)
for (int i = 0; i < sizeof(m_DebugPts) / sizeof(m2::PointD); ++i)
if (m_DebugPts[i] != m2::PointD(0, 0))
{
pDrawer->screen()->drawArc(m_DebugPts[i], 0, math::pi * 2, 30, graphics::Color(0, 0, 255, 32), graphics::maxDepth);
pDrawer->screen()->fillSector(m_DebugPts[i], 0, math::pi * 2, 30, graphics::Color(0, 0, 255, 32), graphics::maxDepth);
}
pDrawer->screen()->drawArc(m_DebugPts[i], 0, math::pi * 2, 30, graphics::Color(0, 0, 255, 32), graphics::maxDepth);
pDrawer->screen()->fillSector(m_DebugPts[i], 0, math::pi * 2, 30, graphics::Color(0, 0, 255, 32), graphics::maxDepth);
}
}
void InformationDisplay::enableRuler(bool doEnable)
{
m_isRulerEnabled = doEnable;
m_ruler->setIsVisible(doEnable);
}
void InformationDisplay::setRulerParams(unsigned pxMinWidth, double metresMinWidth, double metresMaxWidth)
{
m_ruler.setMinPxWidth(pxMinWidth);
m_ruler.setMinMetersWidth(metresMinWidth);
m_ruler.setMaxMetersWidth(metresMaxWidth);
}
void InformationDisplay::drawRuler(Drawer * pDrawer)
{
graphics::FontDesc rulerFont = m_fontDesc;
m_ruler.setFontDesc(rulerFont);
m_ruler.setVisualScale(m_visualScale);
m2::PointD pivot(m2::PointD(m_displayRect.maxX() - 5 * m_visualScale,
m_displayRect.maxY() - 4 * m_visualScale));
m_ruler.setPosition(graphics::EPosAboveLeft);
m_ruler.setPivot(pivot);
m_ruler.update();
m_ruler.draw(pDrawer->screen().get(), math::Identity<double, 3>());
m_ruler->setMinPxWidth(pxMinWidth);
m_ruler->setMinMetersWidth(metresMinWidth);
m_ruler->setMaxMetersWidth(metresMaxWidth);
}
void InformationDisplay::setVisualScale(double visualScale)
{
m_visualScale = visualScale;
m_fontDesc.m_size = static_cast<uint32_t>(FONT_SIZE * visualScale);
m_fontDesc.m_size = static_cast<uint32_t>(FONT_SIZE * m_visualScale);
m_ruler->setFontDesc(m_fontDesc);
m_ruler->setVisualScale(m_visualScale);
m2::PointD pt(m2::PointD(m_displayRect.maxX() - 5 * m_visualScale,
m_displayRect.maxY() - 4 * m_visualScale));
m_ruler->setPivot(pt);
}
void InformationDisplay::enableCenter(bool doEnable)
@ -467,7 +467,7 @@ void InformationDisplay::drawBenchmarkInfo(Drawer * pDrawer)
void InformationDisplay::setupRuler()
{
m_ruler.setup();
m_ruler->setup();
}
void InformationDisplay::doDraw(Drawer *drawer)
@ -475,8 +475,6 @@ void InformationDisplay::doDraw(Drawer *drawer)
m_yOffset = 0;
if (m_isDebugPointsEnabled)
drawDebugPoints(drawer);
if (m_isRulerEnabled)
drawRuler(drawer);
if (m_isCenterEnabled)
drawCenter(drawer);
if (m_isDebugInfoEnabled)

View file

@ -50,7 +50,7 @@ private:
m2::PointD m_DebugPts[10];
bool m_isRulerEnabled;
Ruler m_ruler;
shared_ptr<Ruler> m_ruler;
bool m_isCenterEnabled;
m2::PointD m_centerPtLonLat;
@ -106,7 +106,6 @@ public:
void drawDebugPoints(Drawer * pDrawer);
void enableRuler(bool doEnable);
void drawRuler(Drawer * pDrawer);
void setRulerParams(unsigned pxMinWidth, double metresMinWidth, double metresMaxWidth);
void setupRuler();

View file

@ -1,9 +1,9 @@
#pragma once
#include "../gui/element.hpp"
#include "../geometry/screenbase.hpp"
#include "../geometry/point2d.hpp"
#include "../geometry/any_rect2d.hpp"
#include "../graphics/overlay_element.hpp"
#include "../graphics/font_desc.hpp"
namespace graphics
@ -15,7 +15,7 @@ namespace graphics
}
}
class Ruler : public graphics::OverlayElement
class Ruler : public gui::Element
{
private:
@ -44,7 +44,7 @@ private:
m2::RectD m_boundRect;
typedef OverlayElement base_t;
typedef gui::Element base_t;
mutable vector<m2::AnyRectD> m_boundRects;
@ -60,9 +60,7 @@ private:
public:
void update(); //< update internal params after some other params changed.
struct Params : public base_t::Params
{
};
typedef base_t::Params Params;
Ruler(Params const & p);
void setup();