include/sfx2/thumbnailviewitem.hxx | 9 ----- sfx2/source/control/recentdocsviewitem.cxx | 52 +++++++++++++++++++++++++---- sfx2/source/control/recentdocsviewitem.hxx | 9 ++++- sfx2/source/control/thumbnailview.cxx | 18 ++++++---- sfx2/source/control/thumbnailviewitem.cxx | 39 --------------------- 5 files changed, 65 insertions(+), 62 deletions(-)
New commits: commit aeaa6c301a055ce915cab31083f26e43a20086f1 Author: Andreas Heinisch <andreas.heini...@yahoo.de> AuthorDate: Wed Sep 6 17:03:26 2023 +0200 Commit: Adolfo Jayme Barrientos <fit...@ubuntu.com> CommitDate: Tue Sep 12 06:00:56 2023 +0200 tdf#156959 - Remove pinned icons from thumbnail view item Remove pinned icons from thumbnail view item and pushed it down to the recent documents view item. This avoids that the pinned icon will be shown in a simple thumbnail view, e.g., in the thumbnail view of the side pane in base. In addition, fixed an error with the number of elements in the thumbnail view in the start center when items are pinned, i.e., removed a spurious new line. Change-Id: I76026bfa9239f709aa60ff12efabe28cb09f0d76 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156625 Tested-by: Jenkins Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de> Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156641 Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/include/sfx2/thumbnailviewitem.hxx b/include/sfx2/thumbnailviewitem.hxx index e34985c799d3..5dcdde2b6cd2 100644 --- a/include/sfx2/thumbnailviewitem.hxx +++ b/include/sfx2/thumbnailviewitem.hxx @@ -72,16 +72,11 @@ public: bool mbBorder; bool mbSelected; bool mbHover; - bool mbPinned; BitmapEx maPreview1; OUString maTitle; OUString maHelpText; css::uno::Reference< css::accessibility::XAccessible > mxAcc; - bool mbPinnedDocumentHighlighted; - BitmapEx maPinnedDocumentBitmap; - BitmapEx maPinnedDocumentBitmapHiglighted; - ThumbnailViewItem(ThumbnailView& rView, sal_uInt16 nId); virtual ~ThumbnailViewItem (); @@ -98,10 +93,6 @@ public: void setHighlight (bool state); - bool isPinned () const { return mbPinned; } - - void setPinned (bool state); - /** Updates own highlight status based on the aPoint position. Returns rectangle that needs to be invalidated. diff --git a/sfx2/source/control/recentdocsviewitem.cxx b/sfx2/source/control/recentdocsviewitem.cxx index 57a670b37c53..2070a4efe46e 100644 --- a/sfx2/source/control/recentdocsviewitem.cxx +++ b/sfx2/source/control/recentdocsviewitem.cxx @@ -128,10 +128,13 @@ RecentDocsViewItem::RecentDocsViewItem(sfx2::RecentDocsView &rView, const OUStri mrParentView(rView), maURL(rURL), m_isReadOnly(isReadOnly), - m_isPinned(isPinned), m_bRemoveIconHighlighted(false), m_aRemoveRecentBitmap(BMP_RECENTDOC_REMOVE), - m_aRemoveRecentBitmapHighlighted(BMP_RECENTDOC_REMOVE_HIGHLIGHTED) + m_aRemoveRecentBitmapHighlighted(BMP_RECENTDOC_REMOVE_HIGHLIGHTED), + m_bPinned(isPinned), + m_bPinnedIconHighlighted(false), + m_aPinnedDocumentBitmap(BMP_PIN_DOC), + m_aPinnedDocumentBitmapHiglighted(BMP_PIN_DOC_HIGHLIGHTED) { OUString aTitle(rTitle); INetURLObject aURLObj(rURL); @@ -231,7 +234,6 @@ RecentDocsViewItem::RecentDocsViewItem(sfx2::RecentDocsView &rView, const OUStri maTitle = aTitle; maPreview1 = aThumbnail; - mbPinned = m_isPinned; } ::tools::Rectangle RecentDocsViewItem::updateHighlight(bool bVisible, const Point& rPoint) @@ -253,6 +255,21 @@ RecentDocsViewItem::RecentDocsViewItem(sfx2::RecentDocsView &rView, const OUStri m_bRemoveIconHighlighted = false; } + if (bVisible && getPinnedIconArea().Contains(rPoint)) + { + if (!m_bPinnedIconHighlighted) + aRect.Union(getPinnedIconArea()); + + m_bPinnedIconHighlighted = true; + } + else + { + if (m_bPinnedIconHighlighted) + aRect.Union(getPinnedIconArea()); + + m_bPinnedIconHighlighted = false; + } + return aRect; } @@ -266,6 +283,11 @@ RecentDocsViewItem::RecentDocsViewItem(sfx2::RecentDocsView &rView, const OUStri aSize); } +::tools::Rectangle RecentDocsViewItem::getPinnedIconArea() const +{ + return ::tools::Rectangle(maPinPos, m_aPinnedDocumentBitmap.GetSizePixel()); +} + OUString RecentDocsViewItem::getHelpText() const { return m_sHelpText; @@ -275,10 +297,10 @@ void RecentDocsViewItem::Paint(drawinglayer::processor2d::BaseProcessor2D *pProc { ThumbnailViewItem::Paint(pProcessor, pAttrs); - // paint the remove icon when hovered + // paint the remove/pinned icon when hovered if (isHighlighted()) { - drawinglayer::primitive2d::Primitive2DContainer aSeq(1); + drawinglayer::primitive2d::Primitive2DContainer aSeq(2); Point aIconPos(getRemoveIconArea().TopLeft()); @@ -286,6 +308,23 @@ void RecentDocsViewItem::Paint(drawinglayer::processor2d::BaseProcessor2D *pProc m_bRemoveIconHighlighted ? m_aRemoveRecentBitmapHighlighted : m_aRemoveRecentBitmap, B2DPoint(aIconPos.X(), aIconPos.Y()))); + // tdf#38742 - draw pinned icon + const Point aPinnedIconPos(getPinnedIconArea().TopLeft()); + aSeq[1] = drawinglayer::primitive2d::Primitive2DReference(new DiscreteBitmapPrimitive2D( + m_aPinnedDocumentBitmap, B2DPoint(aPinnedIconPos.X(), aPinnedIconPos.Y()))); + + pProcessor->process(aSeq); + } + // tdf#38742 - draw pinned icon if item is pinned + else if (m_bPinned) + { + drawinglayer::primitive2d::Primitive2DContainer aSeq(1); + + const Point aPinnedIconPos(getPinnedIconArea().TopLeft()); + aSeq[0] = drawinglayer::primitive2d::Primitive2DReference(new DiscreteBitmapPrimitive2D( + m_bPinnedIconHighlighted ? m_aPinnedDocumentBitmapHiglighted : m_aPinnedDocumentBitmap, + B2DPoint(aPinnedIconPos.X(), aPinnedIconPos.Y()))); + pProcessor->process(aSeq); } } @@ -301,8 +340,7 @@ void RecentDocsViewItem::MouseButtonUp(const MouseEvent& rMEvt) return; } - const ::tools::Rectangle aPinPosRectangle(maPinPos, maPinnedDocumentBitmap.GetSizePixel()); - if (aPinPosRectangle.Contains(rMEvt.GetPosPixel())) + if (getPinnedIconArea().Contains(rMEvt.GetPosPixel())) { SvtHistoryOptions::TogglePinItem(EHistoryType::PickList, maURL); mrParent.Reload(); diff --git a/sfx2/source/control/recentdocsviewitem.hxx b/sfx2/source/control/recentdocsviewitem.hxx index 0fe399a1fe3b..9fd1b760b08f 100644 --- a/sfx2/source/control/recentdocsviewitem.hxx +++ b/sfx2/source/control/recentdocsviewitem.hxx @@ -43,16 +43,18 @@ public: /// Called when the user clicks a document - it will open it. void OpenDocument(); + bool isPinned () const { return m_bPinned; } + private: sfx2::RecentDocsView& mrParentView; /// Return area where is the icon to remove document from the recent documents. tools::Rectangle getRemoveIconArea() const; + tools::Rectangle getPinnedIconArea() const; OUString maURL; bool m_isReadOnly = false; - bool m_isPinned = false; OUString m_sHelpText; @@ -62,6 +64,11 @@ private: BitmapEx m_aRemoveRecentBitmap; BitmapEx m_aRemoveRecentBitmapHighlighted; + + bool m_bPinned; + bool m_bPinnedIconHighlighted; + BitmapEx m_aPinnedDocumentBitmap; + BitmapEx m_aPinnedDocumentBitmapHiglighted; }; #endif // INCLUDED_SFX2_RECENTDOCSVIEWITEM_HXX diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx index ca839162f0a2..a5c823f729b1 100644 --- a/sfx2/source/control/thumbnailview.cxx +++ b/sfx2/source/control/thumbnailview.cxx @@ -40,6 +40,7 @@ #include <com/sun/star/embed/XStorage.hpp> #include <memory> +#include "recentdocsviewitem.hxx" using namespace basegfx; using namespace basegfx::utils; @@ -418,16 +419,19 @@ void ThumbnailView::CalculateItemPositions(bool bScrollBarUsed) ThumbnailViewItem *const pItem = mFilteredItemList[i]; // tdf#38742 - show pinned items in a separate line - if (bPinnedItems && !pItem->isPinned()) + if (auto const pRecentDocsItem = dynamic_cast<RecentDocsViewItem*>(pItem)) { - bPinnedItems = false; - // Start a new line only if the entire line is not filled - if ((nCurCount + 1) % mnCols && nCurCount > nFirstItem) + if (bPinnedItems && !pRecentDocsItem->isPinned()) { - x = nStartX; - y += mnItemHeight + nVItemSpace; + bPinnedItems = false; + // Start a new line only if the entire line is not filled + if (nCurCount % mnCols && nCurCount > nFirstItem) + { + x = nStartX; + y += mnItemHeight + nVItemSpace; + } + nCurCount = 0; } - nCurCount = 0; } if ((nCurCount >= nFirstItem) && (nCurCount < nLastItem)) diff --git a/sfx2/source/control/thumbnailviewitem.cxx b/sfx2/source/control/thumbnailviewitem.cxx index 077a9b3c6bcc..43d9bb6727b4 100644 --- a/sfx2/source/control/thumbnailviewitem.cxx +++ b/sfx2/source/control/thumbnailviewitem.cxx @@ -56,10 +56,6 @@ ThumbnailViewItem::ThumbnailViewItem(ThumbnailView& rView, sal_uInt16 nId) , mbBorder(true) , mbSelected(false) , mbHover(false) - , mbPinned(false) - , mbPinnedDocumentHighlighted(false) - , maPinnedDocumentBitmap(BMP_PIN_DOC) - , maPinnedDocumentBitmapHiglighted(BMP_PIN_DOC_HIGHLIGHTED) { } @@ -86,11 +82,6 @@ void ThumbnailViewItem::setHighlight (bool state) mbHover = state; } -void ThumbnailViewItem::setPinned (bool state) -{ - mbPinned = state; -} - ::tools::Rectangle ThumbnailViewItem::updateHighlight(bool bVisible, const Point& rPoint) { bool bNeedsPaint = false; @@ -108,20 +99,6 @@ void ThumbnailViewItem::setPinned (bool state) setHighlight(false); } - const ::tools::Rectangle aPinPosRectangle(maPinPos, maPinnedDocumentBitmap.GetSizePixel()); - if (bVisible && aPinPosRectangle.Contains(rPoint)) - { - if (!mbPinnedDocumentHighlighted) - bNeedsPaint = true; - mbPinnedDocumentHighlighted = true; - } - else - { - if (mbPinnedDocumentHighlighted) - bNeedsPaint = true; - mbPinnedDocumentHighlighted = false; - } - if (bNeedsPaint) return getDrawArea(); @@ -173,7 +150,7 @@ void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProc const ThumbnailItemAttributes *pAttrs) { BColor aFillColor = pAttrs->aFillColor; - drawinglayer::primitive2d::Primitive2DContainer aSeq(5); + drawinglayer::primitive2d::Primitive2DContainer aSeq(4); double fTransparence = 0.0; // Draw background @@ -207,20 +184,6 @@ void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProc false) )); - // tdf#38742 - draw pinned icon - if (mbPinned) - { - const BitmapEx& aBitmapEx - = mbHover ? maPinnedDocumentBitmapHiglighted : maPinnedDocumentBitmap; - aSeq[nPrimitive++] = drawinglayer::primitive2d::Primitive2DReference( - new DiscreteBitmapPrimitive2D(aBitmapEx, B2DPoint(maPinPos.X(), maPinPos.Y()))); - } - else if (mbHover) - aSeq[nPrimitive++] - = drawinglayer::primitive2d::Primitive2DReference(new DiscreteBitmapPrimitive2D( - maPinnedDocumentBitmap, B2DPoint(maPinPos.X(), maPinPos.Y()))); - - if (mbBorder) { // draw thumbnail borders