From 393cd94d36a0aa97fd5ff96b435b3bdcff941121 Mon Sep 17 00:00:00 2001 From: rachytski Date: Wed, 13 Feb 2013 14:36:16 +0300 Subject: [PATCH] fixed some bugs with gui::Balloon rendering. added "arrow" and "plus" images logic into BookmarkBalloon. --- android/jni/com/mapswithme/maps/Framework.cpp | 44 +++++++----- android/jni/com/mapswithme/maps/Framework.hpp | 11 +-- data/resources-hdpi/plus.png | Bin 0 -> 232 bytes data/resources-hdpi/right-arrow.png | Bin 0 -> 506 bytes data/resources-ldpi/plus.png | Bin 0 -> 163 bytes data/resources-ldpi/right-arrow.png | Bin 0 -> 247 bytes data/resources-mdpi/arrow.png | Bin 1724 -> 0 bytes data/resources-mdpi/plus.png | Bin 0 -> 207 bytes data/resources-mdpi/right-arrow.png | Bin 0 -> 292 bytes data/resources-xhdpi/arrow.png | Bin 3450 -> 0 bytes data/resources-xhdpi/plus.png | Bin 0 -> 272 bytes data/resources-xhdpi/right-arrow.png | Bin 0 -> 709 bytes graphics/image.cpp | 6 +- gui/balloon.cpp | 57 +++++++++------ gui/balloon.hpp | 1 + gui/image_view.cpp | 6 ++ gui/image_view.hpp | 1 + map/bookmark_balloon.cpp | 67 +++++++++--------- map/bookmark_balloon.hpp | 40 +++++++---- map/information_display.cpp | 2 +- 20 files changed, 133 insertions(+), 102 deletions(-) create mode 100644 data/resources-hdpi/plus.png create mode 100644 data/resources-hdpi/right-arrow.png create mode 100644 data/resources-ldpi/plus.png create mode 100644 data/resources-ldpi/right-arrow.png delete mode 100644 data/resources-mdpi/arrow.png create mode 100644 data/resources-mdpi/plus.png create mode 100644 data/resources-mdpi/right-arrow.png delete mode 100644 data/resources-xhdpi/arrow.png create mode 100644 data/resources-xhdpi/plus.png create mode 100644 data/resources-xhdpi/right-arrow.png diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index 3427515121..7fe8a1e8dc 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -576,7 +576,7 @@ namespace android if (ValidateBookmarkAndCategory(bac)) { Bookmark b = *(m_work.GetBmCategory(bac.first)->GetBookmark(bac.second)); - ActivatePopup(b.GetOrg(), b.GetName()); + ActivatePopup(b.GetOrg(), b.GetName(), "right-arrow.png"); return true; } else @@ -647,17 +647,18 @@ namespace android bmkname = cstream.str(); } - ActivatePopup(bmkPosition, bmkname); + ActivatePopup(bmkPosition, bmkname, "plus.png"); m_work.DrawPlacemark(bmkPosition); m_work.Invalidate(); } - void Framework::ActivatePopup(m2::PointD const & bmkPosition, string const & name) + void Framework::ActivatePopup(m2::PointD const & bmkPosition, string const & name, string const & imageName) { - gui::BookmarkBalloon * b = GetBookmarkBalloon(); + BookmarkBalloon * b = GetBookmarkBalloon(); m_work.DisablePlacemark(); - b->setBookmarkPivot(bmkPosition); + b->setImage(graphics::Image::Info(imageName.c_str(), m_work.GetRenderPolicy()->Density())); + b->setGlbPivot(bmkPosition); b->setBookmarkName(name); b->setIsVisible(true); m_work.Invalidate(); @@ -665,7 +666,7 @@ namespace android void Framework::DeactivatePopup() { - gui::BookmarkBalloon * b = GetBookmarkBalloon(); + BookmarkBalloon * b = GetBookmarkBalloon(); b->setIsVisible(false); m_work.DisablePlacemark(); m_work.Invalidate(); @@ -673,9 +674,9 @@ namespace android void Framework::OnBalloonClick(gui::Element * e) { - gui::BookmarkBalloon * balloon = GetBookmarkBalloon(); + BookmarkBalloon * balloon = GetBookmarkBalloon(); - BookmarkAndCategory bac = m_work.GetBookmark(m_work.GtoP(balloon->getBookmarkPivot())); + BookmarkAndCategory bac = m_work.GetBookmark(m_work.GtoP(balloon->glbPivot())); if (ValidateBookmarkAndCategory(bac)) { m_balloonClickListener(bac); @@ -685,14 +686,14 @@ namespace android BookmarkCategory * cat; if (m_work.GetBmCategoriesCount() == 0) { - m_work.AddBookmark(m_work.GetStringsBundle().GetString("my_places"), Bookmark(balloon->getBookmarkPivot(), balloon->getBookmarkName(), "placemark-red")); + m_work.AddBookmark(m_work.GetStringsBundle().GetString("my_places"), Bookmark(balloon->glbPivot(), balloon->bookmarkName(), "placemark-red")); cat = m_work.GetBmCategory(m_work.GetBmCategoriesCount()-1); } else { cat = m_work.GetBmCategory(m_work.GetBmCategoriesCount()-1); - LOG(LDEBUG,("Paladin", (balloon->getBookmarkPivot(), balloon->getBookmarkName(), "placemark-red"))); - m_work.AddBookmark(cat->GetName(), Bookmark(balloon->getBookmarkPivot(), balloon->getBookmarkName(), "placemark-red")); + Bookmark bm(balloon->glbPivot(), balloon->bookmarkName(), "placemark-red"); + m_work.AddBookmark(cat->GetName(), bm); } cat->SaveToKMLFile(); int catSize = cat->GetBookmarksCount() - 1; @@ -714,28 +715,35 @@ namespace android m_balloonClickListener.clear(); } + BookmarkBalloon * Framework::GetBookmarkBalloon() + { + if (!m_bmBaloon) + CreateBookmarkBalloon(); + return m_bmBaloon.get(); + } + void Framework::CreateBookmarkBalloon() { CHECK(m_work.GetGuiController(), ()); CHECK(m_work.GetRenderPolicy(), ()); - gui::Balloon::Params bp; + BookmarkBalloon::Params bp; bp.m_position = graphics::EPosAbove; - bp.m_depth = graphics::maxDepth; + bp.m_depth = graphics::maxDepth - 3; bp.m_pivot = m2::PointD(0, 0); bp.m_imageMarginBottom = 10; - bp.m_imageMarginLeft = 10; + bp.m_imageMarginLeft = 0; bp.m_imageMarginRight = 10; - bp.m_imageMarginTop = 10; + bp.m_imageMarginTop = 7; bp.m_textMarginBottom = 10; bp.m_textMarginLeft = 10; bp.m_textMarginRight = 10; - bp.m_textMarginTop = 10; - bp.m_image = graphics::Image::Info("arrow.png", m_work.GetRenderPolicy()->Density()); + bp.m_textMarginTop = 7; bp.m_text = "Bookmark"; + bp.m_framework = &m_work; - m_bmBaloon.reset(new gui::BookmarkBalloon(bp, &m_work)); + m_bmBaloon.reset(new BookmarkBalloon(bp)); m_bmBaloon->setIsVisible(false); m_bmBaloon->setOnClickListener(bind(&Framework::OnBalloonClick, this, _1)); m_work.GetGuiController()->AddElement(m_bmBaloon); diff --git a/android/jni/com/mapswithme/maps/Framework.hpp b/android/jni/com/mapswithme/maps/Framework.hpp index 34e328588c..2272488230 100644 --- a/android/jni/com/mapswithme/maps/Framework.hpp +++ b/android/jni/com/mapswithme/maps/Framework.hpp @@ -65,7 +65,7 @@ namespace android bool HandleOnSmthClick(double x, double y); bool AdditionalHandlingForLongClick(double x, double y); - void ActivatePopup(m2::PointD const & bmkPosition, string const & name); + void ActivatePopup(m2::PointD const & bmkPosition, string const & name, string const & imageName); void ActivatePopupWithAddressInfo(m2::PointD const & bmkPosition, ::Framework::AddressInfo const & adInfo); void ToCamelCase(string & c); @@ -75,16 +75,11 @@ namespace android return (bac.first > -1 && bac.second > -1); } - shared_ptr m_bmBaloon; + shared_ptr m_bmBaloon; void OnBalloonClick(gui::Element * e); void CreateBookmarkBalloon(); - inline gui::BookmarkBalloon * GetBookmarkBalloon() - { - if (!m_bmBaloon) - CreateBookmarkBalloon(); - return m_bmBaloon.get(); - } + BookmarkBalloon * GetBookmarkBalloon(); public: Framework(); diff --git a/data/resources-hdpi/plus.png b/data/resources-hdpi/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..fa93b8a85b92338b57502a9bfe61e4ed4d26151e GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GU7jwEAr-gY+_2?pP!M5w(9@Q8DdM}mYwz79XJu|l3H@ID zL(V4V$-(Er0nR-ee-&N1dYl=k?ZN&A!_+%&vOp#T+;BhfW2(kp-!jeHQ@l^@+;FUb z^}*Tt=>;YWPih$Lz0v5s?ZQlU-~GA=9teQ+gMm$z^i@U>tKoLCXaYk`l+=DBRfAg~ N5l>e?mvv4FO#l%`Q7`}i literal 0 HcmV?d00001 diff --git a/data/resources-hdpi/right-arrow.png b/data/resources-hdpi/right-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..e6d034aac3a3277c259de801a53b5456ebccf846 GIT binary patch literal 506 zcmV(DH^tq)V|Qk9@qFJ;NshLZ@K6C2PyrQC0Tpl&-EaZRt_3^?qr?!LzyMTW7K)Mt zN-$g1nyx4s#b0gjvyoD5TC<(C^rrJ!M2U{Nx>O#$d>;* zw&Q$;Yk`2>2#HNe0%%&Y zVHSFZMfk9Cy{2n-N*U&EVHIjtZUhb+?hy$b;wUyED$`yg_Yyx&H{VJLn>}1{rUgjo>`Ysn7Q}hiOmVjBK>R^SFo0BX%O@d zY}A*W<@|DT#T6Ew9sC@rCOqMN%N7N4vxOVU_AZeU<$aO@RmbhzO54rm~Qr>mdK II;Vst0K5ehyp~>Fnn~HEjH<(i#*Vg44$rjF6*2UngEFEQl^{;s+N7(iYn#X8xe`q_?-D|b9wE9r1JO@0#yf{5c12yF-P_{`A zD7=K%a|FrH;gCO?ToZ#-hlcZfX=&+6lvLB&y$I+2a6kZ;31~J>uLNeh09L06I1X{h zOuNy6-2M>U81X`?K?56%TFz)RR+W^LTy1M>n`1^7iX|}}BB89TEaMtBolckg>uonQ zciO`fd?@kQy#VBAB|t%DJhWV2g#5J$kb*=SK2mk{&!t1f76Z85?psMoNtM{;U}_iD z5_8NF6FWLO-ptO~6|A6}L&;xN+kF>iFev7X*b+1n6|N+f!r`YVRLd z3x~EQgK69cR)+w-K;-)@TIQ^4jFP|Z?!EnNY%w6wGw zd}tNBQmb0aqK$l7#fnMoL^Nd!q6-PI=n=t#cWIs%p!(fmF!j44B;QeB0E=@;<U{>(f=ld>kXEk2tT_D<6-ncV;0d`)qU*v5UyvdvZ;tOTqtQ|LJagvEpgMXf#B{4d zYisNH%*@PW@p?V1&xnuA^c15}ZLe%gf$zUsCcQEco0Qt)s1;p2N74@W^z_&nj~Go% z;mn6pU!j4cRgXkw58O0auYvc_Z`Gs?r(=`ScjJpj`TgwKvzKXaRmhZ-%7Uyp4UvN} zx?p5vupD9d)6GyVa z=kxjZ@892qMmvh#7P2>%B1KJ9T}7(b4h#$gu%7Z%R_-jS-I2ymV;UTs_RDudMC9MG zB&7^>=-D**^tCL&^+J7p{izEVF7)Bh48lqdg9wuHG%FN#ahMqwZ8n>|qM~BUp7M-% zO7IgHMCMTXpcq-lk@_n!TYYyl7j~Dd0jt&OsH>~{wxy-z1`bm(ILFeWPgM*?vM8)(lPcX(jtq+;xwDh_U`WPyG>0^ ze+~@|O|$!)WgrzhRnmqYRC7@lS;H(ngCU*u>D9qr<%%ArPCFyBuySJ&_$Oj%_3`OLa412eV!$JB;GHq1F6JsEhdorhWs1j`b@N3(QhUm0m{XRaKT! ztiK9w6~8VThIpohI0nT~Bo(;=K?#j3{mQKN-w9Nig;yO4R7pnqFaJ*e3NQeJD0M~h S%6^pq0000X0 diff --git a/data/resources-mdpi/plus.png b/data/resources-mdpi/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..307566cee3f6fb0b344aba0dc3e0092c85dbaa22 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gg`O^sAr-fh{`~)Mf7pRZt&NdwF`vXGJ`ILP{{yN_xZGq7 zUNr==PvDLCAY#}1{rUgj{;&g+S{ozVVm^t|0~1OazlxTy#N7J~{jmIw=_VrHp}NHuFdG70h)^8+kzz zu^tNxl3iLEGgTe~DWM4fCtGMj literal 0 HcmV?d00001 diff --git a/data/resources-xhdpi/arrow.png b/data/resources-xhdpi/arrow.png deleted file mode 100644 index dfd720ee3969cc1b7934b386b06ed7148a7abfc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3450 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 diff --git a/data/resources-xhdpi/plus.png b/data/resources-xhdpi/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..731c3e3824e595d52c80a280b17e5b986c88927d GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XHhH=@hE&{obL$}I5d{I(3lc#WrahQ8#VaUiTg%%MzIpeW zI=wkQ+nq^t2#{N(uq^15fF&nT8w5C9=rKP#d%ITX(+q}(P`V!@TqZL0>{p#oHZ3Qz$mKn17(6`%rCfC>mT zD!@n3>{>v=K{a>{yaSiOA8-SFiOUSQ3%1SRDK3IlP#zZnk3k8u97sZ090c40d(87I zU=b8c7mxz2;0Ket1tw`K<@5?t?kz`H871 zmZi>sT+D;#mUn(*jz`fmAQzu37ovSoEqMk|3|a<%1p1`UfF839Vz~!2nRB0ur{^{J zs0yHU{nk<@zW^^KAA{5^{Q#<%+=4k8eW?Pd7T5%JmRf*XW@)K6L8=B9ErU;*n_)VL zAC8KE2}>zV{eae>O5vyo7_yw{|GaGT^dQI|cfAKZ@Um^Ov+*Bvg0-Muz~u~}uJEKK zHxS0)T?(i*n;v)8k9r}s#9b|cN^{mx^XpoYo4H|stV<_m=_V8i1- ziui2q|EaL2W7vDZxG81x(r); if (m_resourceName != ri->m_resourceName) - m_resourceName < ri->m_resourceName; + return m_resourceName < ri->m_resourceName; return false; } diff --git a/gui/balloon.cpp b/gui/balloon.cpp index d0e291d802..d1b5e14c45 100644 --- a/gui/balloon.cpp +++ b/gui/balloon.cpp @@ -43,22 +43,22 @@ namespace gui tp.m_text = m_text; tp.m_position = graphics::EPosRight; tp.m_pivot = m2::PointD(0, 0); - tp.m_depth = depth(); + tp.m_depth = depth() + 1; m_textView.reset(new TextView(tp)); - m_textView->setFont(Element::EActive, graphics::FontDesc(20, graphics::Color(0, 0, 0, 255), true)); + m_textView->setFont(Element::EActive, graphics::FontDesc(20, graphics::Color(255, 255, 255, 255))); ImageView::Params ip; ip.m_pivot = m2::PointD(0, 0); ip.m_position = graphics::EPosRight; - ip.m_depth = depth(); + ip.m_depth = depth() + 1; ip.m_image = m_image; m_imageView.reset(new ImageView(ip)); - m_arrowHeight = 20; + m_arrowHeight = 10; m_arrowAngle = ang::DegreeToRad(90); m_arrowWidth = 2 * tan(m_arrowAngle / 2) * m_arrowHeight; } @@ -88,13 +88,13 @@ namespace gui graphics::EPosition pos = position(); if (pos == graphics::EPosAbove) - r.setMaxY(r.maxY() + m_arrowHeight); + r.setMaxY(r.maxY() + m_arrowHeight * k); else if (pos == graphics::EPosUnder) - r.setMinY(r.minY() - m_arrowHeight); + r.setMinY(r.minY() - m_arrowHeight * k); else if (pos == graphics::EPosRight) - r.setMinX(r.minX() - m_arrowHeight); + r.setMinX(r.minX() - m_arrowHeight * k); else if (pos == graphics::EPosLeft) - r.setMaxX(r.maxX() + m_arrowHeight); + r.setMaxX(r.maxX() + m_arrowHeight * k); m_boundRects[0] = m2::AnyRectD(r); @@ -122,6 +122,8 @@ namespace gui double imt = m_imageMarginTop * k; double imb = m_imageMarginBottom * k; + double arrowHeight = m_arrowHeight * k; + double w = tml + tr.SizeX() + tmr + iml + ir.SizeX() + imr; @@ -134,29 +136,29 @@ namespace gui if (pos == graphics::EPosAbove) { m_textView->setPivot(m2::PointD(pv.x - w / 2 + tml, - pv.y - h / 2 - m_arrowHeight)); + pv.y - h / 2 - arrowHeight)); m_imageView->setPivot(m2::PointD(pv.x + w / 2 - imr - ir.SizeX(), - pv.y - h / 2 - m_arrowHeight)); + pv.y - h / 2 - arrowHeight)); } else if (pos == graphics::EPosUnder) { m_textView->setPivot(m2::PointD(pv.x - w / 2 + tml, - pv.y + h / 2 + m_arrowHeight)); + pv.y + h / 2 + arrowHeight)); m_imageView->setPivot(m2::PointD(pv.x + w / 2 - imr - ir.SizeX(), - pv.y + h / 2 + m_arrowHeight)); + pv.y + h / 2 + arrowHeight)); } else if (pos == graphics::EPosLeft) { - m_textView->setPivot(m2::PointD(pv.x - w - m_arrowHeight + tml, + m_textView->setPivot(m2::PointD(pv.x - w - arrowHeight + tml, pv.y)); - m_imageView->setPivot(m2::PointD(pv.x - m_arrowHeight - imr - ir.SizeX(), + m_imageView->setPivot(m2::PointD(pv.x - arrowHeight - imr - ir.SizeX(), pv.y)); } else if (pos == graphics::EPosRight) { - m_textView->setPivot(m2::PointD(pv.x + m_arrowHeight + tml, + m_textView->setPivot(m2::PointD(pv.x + arrowHeight + tml, pv.y)); - m_imageView->setPivot(m2::PointD(pv.x + m_arrowHeight + tml + tr.SizeX() + tmr + imr, + m_imageView->setPivot(m2::PointD(pv.x + arrowHeight + tml + tr.SizeX() + tmr + imr, pv.y)); } @@ -182,17 +184,19 @@ namespace gui m2::RectD const & r = roughBoundRect(); + double k = visualScale(); + double bw = r.SizeX(); double bh = r.SizeY(); - double aw = m_arrowWidth; - double ah = m_arrowHeight; + double aw = m_arrowWidth * k; + double ah = m_arrowHeight * k; graphics::EPosition pos = position(); graphics::Path p; if (pos & graphics::EPosAbove) { - bh -= m_arrowHeight; + bh -= ah; p.reset(m2::PointF(-aw / 2, -ah)); p.lineRel(m2::PointF(-bw / 2 + aw / 2, 0)); @@ -205,7 +209,7 @@ namespace gui } else if (pos & graphics::EPosUnder) { - bh -= m_arrowHeight; + bh -= ah; p.reset(m2::PointF(aw / 2, ah)); p.lineRel(m2::PointF(bw / 2 - aw / 2, 0)); @@ -248,9 +252,9 @@ namespace gui { checkDirtyLayout(); -// r->drawRectangle(roughBoundRect(), graphics::Color(0, 0, 255, 128), depth()); -// r->drawRectangle(m_textView->roughBoundRect(), graphics::Color(0, 255, 255, 128), depth()); -// r->drawRectangle(m_imageView->roughBoundRect(), graphics::Color(0, 255, 0, 128), depth()); +// r->drawRectangle(roughBoundRect(), graphics::Color(0, 0, 255, 128), depth() + 1); +// r->drawRectangle(m_textView->roughBoundRect(), graphics::Color(0, 255, 255, 128), depth() + 1); +// r->drawRectangle(m_imageView->roughBoundRect(), graphics::Color(0, 255, 0, 128), depth() + 1); math::Matrix drawM = math::Shift( math::Identity(), @@ -303,4 +307,11 @@ namespace gui setIsDirtyLayout(true); invalidate(); } + + void Balloon::setImage(graphics::Image::Info const & info) + { + m_imageView->setImage(info); + setIsDirtyLayout(true); + invalidate(); + } } diff --git a/gui/balloon.hpp b/gui/balloon.hpp index 16e0c8adf4..8f8283b3f0 100644 --- a/gui/balloon.hpp +++ b/gui/balloon.hpp @@ -85,6 +85,7 @@ namespace gui void setOnClickListener(TOnClickListener const & fn); void setText(string const & s); + void setImage(graphics::Image::Info const & info); bool onTapStarted(m2::PointD const & pt); bool onTapMoved(m2::PointD const & pt); diff --git a/gui/image_view.cpp b/gui/image_view.cpp index 4fc1ade780..802ea03aa8 100644 --- a/gui/image_view.cpp +++ b/gui/image_view.cpp @@ -84,4 +84,10 @@ namespace gui r->drawDisplayList(m_displayList.get(), drawM * m); } } + void ImageView::setImage(graphics::Image::Info const & info) + { + m_image = info; + setIsDirtyLayout(true); + invalidate(); + } } diff --git a/gui/image_view.hpp b/gui/image_view.hpp index 607e9ed364..936d1093d9 100644 --- a/gui/image_view.hpp +++ b/gui/image_view.hpp @@ -42,5 +42,6 @@ namespace gui vector const & boundRects() const; void draw(graphics::OverlayRenderer * r, math::Matrix const & m) const; + void setImage(graphics::Image::Info const & info); }; } diff --git a/map/bookmark_balloon.cpp b/map/bookmark_balloon.cpp index 06efde8fec..e8a55a3003 100644 --- a/map/bookmark_balloon.cpp +++ b/map/bookmark_balloon.cpp @@ -3,43 +3,40 @@ #define POPUP_PADDING 23 -namespace gui +BookmarkBalloon::BookmarkBalloon(Params const & p) + : Balloon(p), + m_framework(p.m_framework) { - BookmarkBalloon::BookmarkBalloon(Params const & p, Framework const * framework) - : Balloon(p), - m_framework(framework) - { - } +} - void BookmarkBalloon::update() +void BookmarkBalloon::update() +{ + Balloon::update(); + if (isVisible()) { - Balloon::update(); - if (isVisible()) - { - m2::PointD newPivot(m_framework->GtoP(m_bookmarkPivot)); - newPivot.y -= POPUP_PADDING * visualScale(); - setPivot(newPivot); - } - } - - void BookmarkBalloon::setBookmarkPivot(m2::PointD const & pivot) - { - m_bookmarkPivot = pivot; - } - - m2::PointD const BookmarkBalloon::getBookmarkPivot() - { - return m_bookmarkPivot; - } - - void BookmarkBalloon::setBookmarkName(std::string const & name) - { - m_bookmarkName = name; - setText(name);//.substr(0, 13)); - } - - std::string const BookmarkBalloon::getBookmarkName() - { - return m_bookmarkName; + m2::PointD newPivot(m_framework->GtoP(m_glbPivot)); + newPivot.y -= POPUP_PADDING * visualScale(); + setPivot(newPivot); } } + +void BookmarkBalloon::setGlbPivot(m2::PointD const & pivot) +{ + m_glbPivot = pivot; +} + +m2::PointD const BookmarkBalloon::glbPivot() +{ + return m_glbPivot; +} + +void BookmarkBalloon::setBookmarkName(string const & name) +{ + m_bookmarkName = name; + setText(name);//.substr(0, 13)); +} + +string const & BookmarkBalloon::bookmarkName() +{ + return m_bookmarkName; +} diff --git a/map/bookmark_balloon.hpp b/map/bookmark_balloon.hpp index 0c34333be6..b93fb631e0 100644 --- a/map/bookmark_balloon.hpp +++ b/map/bookmark_balloon.hpp @@ -1,25 +1,35 @@ #pragma once #include "../gui/balloon.hpp" +#include "../std/string.hpp" class Framework; -namespace gui +/// Balloon, which displays information about bookmark +class BookmarkBalloon : public gui::Balloon { - class BookmarkBalloon : public Balloon +private: + + m2::PointD m_glbPivot; + Framework const * m_framework; + string m_bookmarkName; + + void update(); + +public: + + typedef gui::Balloon base_t; + + struct Params : public base_t::Params { - private: - void update(); - m2::PointD m_bookmarkPivot; Framework const * m_framework; - std::string m_bookmarkName; - - public: - BookmarkBalloon(Params const & p, Framework const * framework); - - void setBookmarkPivot(m2::PointD const & pivot); - m2::PointD const getBookmarkPivot(); - void setBookmarkName(std::string const & name); - std::string const getBookmarkName(); }; -} + + BookmarkBalloon(Params const & p); + + void setGlbPivot(m2::PointD const & pivot); + m2::PointD const glbPivot(); + + void setBookmarkName(string const & name); + string const & bookmarkName(); +}; diff --git a/map/information_display.cpp b/map/information_display.cpp index 6ca449d820..445652353d 100644 --- a/map/information_display.cpp +++ b/map/information_display.cpp @@ -284,7 +284,7 @@ void InformationDisplay::drawMemoryWarning(Drawer * drawer) void InformationDisplay::drawPlacemark(Drawer * pDrawer, string const & symbol, m2::PointD const & pt) { - pDrawer->drawSymbol(pt, symbol, graphics::EPosAbove, graphics::maxDepth); + pDrawer->drawSymbol(pt, symbol, graphics::EPosAbove, graphics::maxDepth - 4); } /*