diff --git a/graphics/overlay_element.hpp b/graphics/overlay_element.hpp index d52cf443a5..f05ee9ae64 100644 --- a/graphics/overlay_element.hpp +++ b/graphics/overlay_element.hpp @@ -105,7 +105,7 @@ namespace graphics bool isDirtyLayout() const; void setIsDirtyLayout(bool flag) const; - bool isVisible() const; + virtual bool isVisible() const; virtual void setIsVisible(bool flag); bool isValid() const; diff --git a/map/compass_arrow.cpp b/map/compass_arrow.cpp index 0c9261b229..cfa3a0a6df 100644 --- a/map/compass_arrow.cpp +++ b/map/compass_arrow.cpp @@ -32,20 +32,20 @@ CompassArrow::CompassArrow(Params const & p) void CompassArrow::AnimateShow() { - if (!isVisible() && (m_animTask == NULL || IsHidingAnim())) + if (!isBaseVisible() && (m_animTask == NULL || IsHidingAnim())) { setIsVisible(true); CreateAnim(0.1, 1.0, 0.2, 0.0, true); } - if (isVisible() && (m_animTask == NULL || IsHidingAnim())) + if (isBaseVisible() && (m_animTask == NULL || IsHidingAnim())) CreateAnim(GetCurrentAlfa(), 1.0, 0.2, 0.0, true); } void CompassArrow::AnimateHide() { - if (isVisible() && (m_animTask == NULL || !IsHidingAnim())) - CreateAnim(1.0, 0.0, 0.3, 1.0, false); + if (isBaseVisible() && (m_animTask == NULL || !IsHidingAnim())) + CreateAnim(1.0, 0.0, 0.3, 0.3, false); } void CompassArrow::SetAngle(double angle) @@ -81,7 +81,7 @@ vector const & CompassArrow::boundRects() const void CompassArrow::draw(graphics::OverlayRenderer * r, math::Matrix const & m) const { - if (isVisible()) + if (isBaseVisible()) { checkDirtyLayout(); @@ -98,6 +98,14 @@ void CompassArrow::draw(graphics::OverlayRenderer * r, } } +bool CompassArrow::isVisible() const +{ + if (m_animTask != NULL && IsHidingAnim()) + return false; + + return isBaseVisible(); +} + void CompassArrow::AlfaAnimEnded(bool isVisible) { setIsVisible(isVisible); @@ -193,6 +201,11 @@ void CompassArrow::purge() m_displayList = NULL; } +bool CompassArrow::isBaseVisible() const +{ + return base_t::isVisible(); +} + bool CompassArrow::onTapEnded(m2::PointD const & pt) { anim::Controller * animController = m_framework->GetAnimController(); diff --git a/map/compass_arrow.hpp b/map/compass_arrow.hpp index b375bfc3bc..03a367a652 100644 --- a/map/compass_arrow.hpp +++ b/map/compass_arrow.hpp @@ -22,8 +22,8 @@ class Framework; class CompassArrow : public gui::Element { private: - typedef gui::Element base_t; + double m_angle; graphics::DisplayList * m_displayList; @@ -42,6 +42,7 @@ private: void cache(); void purge(); + bool isBaseVisible() const; public: @@ -61,6 +62,7 @@ public: vector const & boundRects() const; void draw(graphics::OverlayRenderer * r, math::Matrix const & m) const; + virtual bool isVisible() const; bool onTapEnded(m2::PointD const & pt);