diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index 1bfb53e694..664e6d99c9 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -220,7 +220,7 @@ void DrapeEngine::UpdateUserMarksLayer(size_t layerId, UserMarksProvider * provi renderInfo.m_isVisible = mark->IsVisible(); renderInfo.m_pivot = mark->GetPivot(); renderInfo.m_pixelOffset = mark->GetPixelOffset(); - renderInfo.m_runCreationAnim = mark->RunCreationAnim(); + renderInfo.m_runCreationAnim = mark->HasCreationAnimation(); renderInfo.m_symbolName = mark->GetSymbolName(); marksRenderCollection->emplace_back(std::move(renderInfo)); } @@ -233,7 +233,7 @@ void DrapeEngine::UpdateUserMarksLayer(size_t layerId, UserMarksProvider * provi UserLineRenderParams renderInfo; renderInfo.m_spline = m2::SharedSpline(mark->GetPoints()); renderInfo.m_layers.reserve(mark->GetLayerCount()); - for (size_t layerIndex = 0, sz = mark->GetLayerCount(); layerIndex < sz; ++layerIndex) + for (size_t layerIndex = 0, layersCount = mark->GetLayerCount(); layerIndex < layersCount; ++layerIndex) { renderInfo.m_layers.emplace_back(mark->GetColor(layerIndex), mark->GetWidth(layerIndex), diff --git a/drape_frontend/render_group.cpp b/drape_frontend/render_group.cpp index 827de705b3..b2be10072f 100755 --- a/drape_frontend/render_group.cpp +++ b/drape_frontend/render_group.cpp @@ -217,7 +217,7 @@ UserMarkRenderGroup::~UserMarkRenderGroup() void UserMarkRenderGroup::UpdateAnimation() { BaseRenderGroup::UpdateAnimation(); - float t = 1.0; + float t = 1.0f; if (m_animation) t = static_cast(m_animation->GetOpacity()); diff --git a/drape_frontend/user_mark_generator.cpp b/drape_frontend/user_mark_generator.cpp index 176e8bca4e..2b17c456d8 100644 --- a/drape_frontend/user_mark_generator.cpp +++ b/drape_frontend/user_mark_generator.cpp @@ -162,9 +162,8 @@ void UserMarkGenerator::SetGroupVisibility(GroupID groupId, bool isVisible) void UserMarkGenerator::GenerateUserMarksGeometry(TileKey const & tileKey, ref_ptr textures) { - MarksIndex::const_iterator itTile = m_marksIndex.find(TileKey(tileKey.m_x, - tileKey.m_y, - min(tileKey.m_zoomLevel, scales::GetUpperScale()))); + auto const itTile = m_marksIndex.find(TileKey(tileKey.m_x, tileKey.m_y, std::min(tileKey.m_zoomLevel, + scales::GetUpperScale()))); if (itTile == m_marksIndex.end()) return; @@ -186,8 +185,8 @@ void UserMarkGenerator::GenerateUserMarksGeometry(TileKey const & tileKey, ref_p if (m_groupsVisibility.find(groupId) == m_groupsVisibility.end()) continue; - CacheUserMarks(tileKey, textures, *m_marks[groupId], groupPair.second->m_markIndexes, batcher); - CacheUserLines(tileKey, textures, *m_lines[groupId], groupPair.second->m_lineIndexes, batcher); + CacheUserMarks(tileKey, textures, groupPair.second->m_markIndexes, *m_marks[groupId], batcher); + CacheUserLines(tileKey, textures, groupPair.second->m_lineIndexes, *m_lines[groupId], batcher); } } m_flushFn(std::move(renderData)); diff --git a/drape_frontend/user_mark_shapes.cpp b/drape_frontend/user_mark_shapes.cpp index 58674280fe..13a5cfbb60 100644 --- a/drape_frontend/user_mark_shapes.cpp +++ b/drape_frontend/user_mark_shapes.cpp @@ -57,7 +57,7 @@ struct UserPointVertex : gpu::BaseVertex : m_position(pos) , m_normal(normal) , m_texCoord(texCoord) - , m_isAnim(isAnim ? 1.0 : -1.0) + , m_isAnim(isAnim ? 1.0f : -1.0f) {} static dp::BindingInfo GetBinding() @@ -81,7 +81,7 @@ struct UserPointVertex : gpu::BaseVertex } // namespace void CacheUserMarks(TileKey const & tileKey, ref_ptr textures, - UserMarksRenderCollection const & renderParams, MarkIndexesCollection const & indexes, + MarkIndexesCollection const & indexes, UserMarksRenderCollection & renderParams, dp::Batcher & batcher) { using UPV = UserPointVertex; @@ -92,16 +92,18 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr texture dp::TextureManager::SymbolRegion region; for (auto const markIndex : indexes) { - UserMarkRenderParams const & renderInfo = renderParams[markIndex]; + UserMarkRenderParams & renderInfo = renderParams[markIndex]; if (!renderInfo.m_isVisible) continue; textures->GetSymbolRegion(renderInfo.m_symbolName, region); m2::RectF const & texRect = region.GetTexRect(); m2::PointF const pxSize = region.GetPixelSize(); dp::Anchor const anchor = renderInfo.m_anchor; - m2::PointD const pt = MapShape::ConvertToLocal(renderInfo.m_pivot, tileKey.GetGlobalRect().Center(), kShapeCoordScalar); + m2::PointD const pt = MapShape::ConvertToLocal(renderInfo.m_pivot, tileKey.GetGlobalRect().Center(), + kShapeCoordScalar); glsl::vec3 const pos = glsl::vec3(glsl::ToVec2(pt), renderInfo.m_depth); bool const runAnim = renderInfo.m_runCreationAnim; + renderInfo.m_runCreationAnim = false; glsl::vec2 left, right, up, down; AlignHorizontal(pxSize.x * 0.5f, anchor, left, right); @@ -128,15 +130,15 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr texture } void CacheUserLines(TileKey const & tileKey, ref_ptr textures, - UserLinesRenderCollection const & renderParams, LineIndexesCollection const & indexes, + LineIndexesCollection const & indexes, UserLinesRenderCollection & renderParams, dp::Batcher & batcher) { float const vs = static_cast(df::VisualParams::Instance().GetVisualScale()); for (auto lineIndex : indexes) { - UserLineRenderParams const & renderInfo = renderParams[lineIndex]; + UserLineRenderParams & renderInfo = renderParams[lineIndex]; - std::vector const splines = m2::ClipSplineByRect(tileKey.GetGlobalRect(), renderInfo.m_spline); + auto const splines = m2::ClipSplineByRect(tileKey.GetGlobalRect(), renderInfo.m_spline); for (auto const & spline : splines) { for (auto const & layer : renderInfo.m_layers) diff --git a/drape_frontend/user_mark_shapes.hpp b/drape_frontend/user_mark_shapes.hpp index cc317de6ed..b9f22597cc 100644 --- a/drape_frontend/user_mark_shapes.hpp +++ b/drape_frontend/user_mark_shapes.hpp @@ -11,7 +11,6 @@ namespace df { - struct UserMarkRenderParams { int m_minZoom = 1; @@ -67,11 +66,10 @@ struct UserMarkRenderData using TUserMarksRenderData = std::vector; void CacheUserMarks(TileKey const & tileKey, ref_ptr textures, - UserMarksRenderCollection const & renderParams, MarkIndexesCollection const & indexes, + MarkIndexesCollection const & indexes, UserMarksRenderCollection & renderParams, dp::Batcher & batcher); void CacheUserLines(TileKey const & tileKey, ref_ptr textures, - UserLinesRenderCollection const & renderParams, LineIndexesCollection const & indexes, + LineIndexesCollection const & indexes, UserLinesRenderCollection & renderParams, dp::Batcher & batcher); - -} // namespace df +} // namespace df diff --git a/drape_frontend/user_marks_provider.hpp b/drape_frontend/user_marks_provider.hpp index e20291aaf1..d4c3957c95 100644 --- a/drape_frontend/user_marks_provider.hpp +++ b/drape_frontend/user_marks_provider.hpp @@ -21,7 +21,7 @@ public: virtual std::string GetSymbolName() const = 0; virtual dp::Anchor GetAnchor() const = 0; virtual float GetDepth() const = 0; - virtual bool RunCreationAnim() const = 0; + virtual bool HasCreationAnimation() const = 0; virtual bool IsVisible() const { return true; } }; diff --git a/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm b/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm index 156a3ffb49..9f96881300 100644 --- a/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm +++ b/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm @@ -348,7 +348,7 @@ using namespace place_page; NSAssert(category, @"Category can't be nullptr!"); { BookmarkCategory::Guard guard(*category); - auto bookmark = static_cast(guard.m_controller.GetUserMarkForEdit(bookmarkIndex)); + auto bookmark = static_cast(guard.m_controller.GetUserMark(bookmarkIndex)); f.FillBookmarkInfo(*bookmark, {bookmarkIndex, categoryIndex}, m_info); } m_sections.insert(m_sections.begin() + 1, Sections::Bookmark); diff --git a/map/bookmark.cpp b/map/bookmark.cpp index b6b3d10f6c..f3aac6251d 100644 --- a/map/bookmark.cpp +++ b/map/bookmark.cpp @@ -29,14 +29,14 @@ Bookmark::Bookmark(m2::PointD const & ptOrg, UserMarkContainer * container) : TBase(ptOrg, container) - , m_runCreationAnim(true) + , m_hasCreationAnimation(false) { } Bookmark::Bookmark(BookmarkData const & data, m2::PointD const & ptOrg, UserMarkContainer * container) : TBase(ptOrg, container) , m_data(data) - , m_runCreationAnim(true) + , m_hasCreationAnimation(false) { } @@ -65,13 +65,18 @@ UserMark::Type Bookmark::GetMarkType() const return UserMark::Type::BOOKMARK; } -bool Bookmark::RunCreationAnim() const +bool Bookmark::HasCreationAnimation() const { - bool result = m_runCreationAnim; - m_runCreationAnim = false; + bool const result = m_hasCreationAnimation; + m_hasCreationAnimation = false; return result; } +void Bookmark::SetCreationAnimationShown(bool shown) +{ + m_hasCreationAnimation = !shown; +} + string const & Bookmark::GetName() const { return m_data.GetName(); @@ -408,7 +413,6 @@ namespace { Bookmark * bm = static_cast(m_controller.CreateUserMark(m_org)); bm->SetData(BookmarkData(m_name, m_type, m_description, m_scale, m_timeStamp)); - bm->RunCreationAnim(); } else if (GEOMETRY_TYPE_LINE == m_geometryType) { diff --git a/map/bookmark.hpp b/map/bookmark.hpp index ba2ad7c232..5b0c1827cc 100644 --- a/map/bookmark.hpp +++ b/map/bookmark.hpp @@ -81,7 +81,8 @@ public: string GetSymbolName() const override; Type GetMarkType() const override; - bool RunCreationAnim() const override; + bool HasCreationAnimation() const override; + void SetCreationAnimationShown(bool shown); string const & GetName() const; void SetName(string const & name); @@ -102,7 +103,7 @@ public: private: BookmarkData m_data; - mutable bool m_runCreationAnim; + mutable bool m_hasCreationAnimation; }; class BookmarkCategory : public UserMarkContainer diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index 0395f372bf..b9ef825d63 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -99,7 +99,9 @@ size_t BookmarkManager::AddBookmark(size_t categoryIndex, m2::PointD const & ptO BookmarkCategory * pCat = m_categories[categoryIndex]; BookmarkCategory::Guard guard(*pCat); - static_cast(guard.m_controller.CreateUserMark(ptOrg))->SetData(bm); + Bookmark * bookmark = static_cast(guard.m_controller.CreateUserMark(ptOrg)); + bookmark->SetData(bm); + bookmark->SetCreationAnimationShown(false); guard.m_controller.SetIsVisible(true); pCat->SaveToKMLFile(); diff --git a/map/user_mark.cpp b/map/user_mark.cpp index 9679274b96..fce1e5b56e 100644 --- a/map/user_mark.cpp +++ b/map/user_mark.cpp @@ -32,7 +32,7 @@ float UserMark::GetDepth() const return GetContainer()->GetPointDepth(); } -bool UserMark::RunCreationAnim() const +bool UserMark::HasCreationAnimation() const { return false; } diff --git a/map/user_mark.hpp b/map/user_mark.hpp index a78f277174..49f9ec0275 100644 --- a/map/user_mark.hpp +++ b/map/user_mark.hpp @@ -40,7 +40,7 @@ public: m2::PointD GetPixelOffset() const override; dp::Anchor GetAnchor() const override; float GetDepth() const override; - bool RunCreationAnim() const override; + bool HasCreationAnimation() const override; UserMarkContainer const * GetContainer() const; ms::LatLon GetLatLon() const; diff --git a/qt/draw_widget.cpp b/qt/draw_widget.cpp index b36d72e8b5..19ee24d0bd 100644 --- a/qt/draw_widget.cpp +++ b/qt/draw_widget.cpp @@ -170,7 +170,11 @@ void DrawWidget::mousePressEvent(QMouseEvent * e) } else if (IsRightButton(e)) { - if (!m_selectionMode || IsCommandModifier(e)) + if (IsAltModifier(e)) + { + SubmitBookmark(pt); + } + else if (!m_selectionMode || IsCommandModifier(e)) { ShowInfoPopup(e, pt); } @@ -361,6 +365,16 @@ void DrawWidget::SubmitRoutingPoint(m2::PointD const & pt) routingManager.BuildRoute(0 /* timeoutSec */); } +void DrawWidget::SubmitBookmark(m2::PointD const & pt) +{ + size_t categoryIndex = 0; + auto category = m_framework.GetBookmarkManager().GetBmCategory(categoryIndex); + if (category == nullptr) + categoryIndex = m_framework.GetBookmarkManager().CreateBmCategory("Desktop_bookmarks"); + BookmarkData data("", "placemark-red"); + m_framework.GetBookmarkManager().AddBookmark(categoryIndex, m_framework.P3dtoG(pt), data); +} + void DrawWidget::FollowRoute() { auto & routingManager = m_framework.GetRoutingManager(); diff --git a/qt/draw_widget.hpp b/qt/draw_widget.hpp index 5cf8d30c8c..08509c4a79 100644 --- a/qt/draw_widget.hpp +++ b/qt/draw_widget.hpp @@ -94,6 +94,7 @@ protected: private: void SubmitFakeLocationPoint(m2::PointD const & pt); void SubmitRoutingPoint(m2::PointD const & pt); + void SubmitBookmark(m2::PointD const & pt); void ShowInfoPopup(QMouseEvent * e, m2::PointD const & pt); void ShowPlacePage(place_page::Info const & info); @@ -104,8 +105,6 @@ private: bool m_emulatingLocation; - void InitRenderPolicy(); - TCurrentCountryChanged m_currentCountryChanged; storage::TCountryId m_countryId;