[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - include/vcl vcl/source
Tomaž Vajngerl (via logerrit)
logerrit at kemper.freedesktop.org
Thu Apr 11 14:21:53 UTC 2019
include/vcl/svimpbox.hxx | 2 +-
include/vcl/viewdataentry.hxx | 7 +++++++
vcl/source/treelist/svimpbox.cxx | 25 +++++++++++--------------
vcl/source/treelist/treelistbox.cxx | 12 ++++++++++--
vcl/source/treelist/viewdataentry.cxx | 2 ++
5 files changed, 31 insertions(+), 17 deletions(-)
New commits:
commit c96949f171b98c3dc4bf954dbf10b1720725ab8f
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Wed Apr 10 16:18:15 2019 +0900
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Apr 11 16:21:26 2019 +0200
tdf#82009 TreeList move painting of drag target into Paint func.
When we drag a entry in TreeListBox, we execute a PaintDDCursor
which paints a "cursor" of a possible drag target (for example
to show where the entry will be moved to if we want to change the
order). The problem with this fuction is that it paints a line
directlly at that location, and that it uses invert raster
operation to draw a line. So to hide the line it just needs to
draw again. On MacOS this invertion causes a problem and draws
the whole area black, which is the cause of this bug.
So instead of inverting the drawing of the drag target cursor
has now been moved into the main Paint method, where it redraws
the whole entry, and if present, also the drag target cursor.
This means that all we need to do is Invalidate the entry,
which then just gets redrawn in a normal Paint pass.
One exception is still MacOS, which doesn't invalidate the entry,
but redraws the entry directly. DnD is MacOS is a bit different
as it is not async (if I understand correctly) so the invalidate
has no effect.
Change-Id: I8542f47940a3b90114ea4bbbac57fd303ca3434b
Reviewed-on: https://gerrit.libreoffice.org/70521
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
(cherry picked from commit 14abbc6e86ba234996dfed477a54030adeac2a52)
Reviewed-on: https://gerrit.libreoffice.org/70526
Reviewed-by: Andras Timar <andras.timar at collabora.com>
diff --git a/include/vcl/svimpbox.hxx b/include/vcl/svimpbox.hxx
index 88c068874165..e26594969250 100644
--- a/include/vcl/svimpbox.hxx
+++ b/include/vcl/svimpbox.hxx
@@ -291,7 +291,7 @@ public:
void MakeVisible( SvTreeListEntry* pEntry, bool bMoveToTop = false );
void ScrollToAbsPos( long nPos );
- void PaintDDCursor( SvTreeListEntry* );
+ void PaintDDCursor(SvTreeListEntry* pEntry, bool bShow);
// Images
inline Image& implGetImageLocation( const ImageType _eType );
diff --git a/include/vcl/viewdataentry.hxx b/include/vcl/viewdataentry.hxx
index 1277b75edf29..8bf5c6a30b8a 100644
--- a/include/vcl/viewdataentry.hxx
+++ b/include/vcl/viewdataentry.hxx
@@ -51,6 +51,8 @@ class VCL_DLLPUBLIC SvViewDataEntry
bool mbExpanded:1;
bool mbFocused:1;
bool mbSelectable:1;
+ bool mbDragTarget:1;
+
tools::Rectangle maPaintRectangle;
public:
@@ -63,11 +65,16 @@ public:
bool IsExpanded() const { return mbExpanded;}
bool HasFocus() const { return mbFocused;}
bool IsSelectable() const { return mbSelectable;}
+ bool IsDragTarget() const { return mbDragTarget;}
void SetFocus( bool bFocus );
void SetSelected( bool bSelected );
void SetHighlighted( bool bHighlighted );
void SetExpanded( bool bExpanded );
void SetSelectable( bool bSelectable );
+ void SetDragTarget( bool bDragTarget )
+ {
+ mbDragTarget = bDragTarget;
+ }
void Init(size_t nSize);
diff --git a/vcl/source/treelist/svimpbox.cxx b/vcl/source/treelist/svimpbox.cxx
index a39b18744878..6ba41bbf0823 100644
--- a/vcl/source/treelist/svimpbox.cxx
+++ b/vcl/source/treelist/svimpbox.cxx
@@ -2872,23 +2872,20 @@ IMPL_LINK_NOARG(SvImpLBox, BeginDragHdl, Timer *, void)
pView->StartDrag( 0, aAsyncBeginDragPos );
}
-void SvImpLBox::PaintDDCursor( SvTreeListEntry* pInsertionPos )
+void SvImpLBox::PaintDDCursor(SvTreeListEntry* pEntry, bool bShow)
{
- long nY;
- if( pInsertionPos )
+ if (pEntry)
{
- nY = GetEntryLine( pInsertionPos );
- nY += pView->GetEntryHeight();
+
+ SvViewDataEntry* pViewData = pView->GetViewData(pEntry);
+ pViewData->SetDragTarget(bShow);
+#ifdef MACOSX
+ // in MacOS we need to draw directly (as we are synchronuous) or no invalidation happens
+ pView->PaintEntry1(*pEntry, GetEntryLine(pEntry), *pView);
+#else
+ InvalidateEntry(pEntry);
+#endif
}
- else
- nY = 1;
- RasterOp eOldOp = pView->GetRasterOp();
- pView->SetRasterOp( RasterOp::Invert );
- Color aOldLineColor = pView->GetLineColor();
- pView->SetLineColor( COL_BLACK );
- pView->DrawLine( Point( 0, nY ), Point( aOutputSize.Width(), nY ) );
- pView->SetLineColor( aOldLineColor );
- pView->SetRasterOp( eOldOp );
}
void SvImpLBox::Command( const CommandEvent& rCEvt )
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index 0ece3b5eb793..a276f3002922 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -687,7 +687,7 @@ void SvTreeListBox::ImplShowTargetEmphasis( SvTreeListEntry* pEntry, bool bShow)
return;
if ( !bShow && !(nImpFlags & SvTreeListBoxFlags::TARGEMPH_VIS) )
return;
- pImpl->PaintDDCursor( pEntry );
+ pImpl->PaintDDCursor( pEntry, bShow);
if( bShow )
nImpFlags |= SvTreeListBoxFlags::TARGEMPH_VIS;
else
@@ -2629,7 +2629,6 @@ void SvTreeListBox::InvalidateEntry(SvTreeListEntry* pEntry)
void SvTreeListBox::PaintEntry1(SvTreeListEntry& rEntry, long nLine, vcl::RenderContext& rRenderContext)
{
-
tools::Rectangle aRect; // multi purpose
bool bHorSBar = pImpl->HasHorScrollBar();
@@ -2825,6 +2824,15 @@ void SvTreeListBox::PaintEntry1(SvTreeListEntry& rEntry, long nLine, vcl::Render
nCurTab++;
}
+ if (pViewDataEntry->IsDragTarget())
+ {
+ rRenderContext.Push();
+ rRenderContext.SetLineColor(rSettings.GetDeactiveColor());
+ rRenderContext.SetFillColor(rSettings.GetDeactiveColor());
+ rRenderContext.DrawRect(tools::Rectangle(Point(0, nLine + nTempEntryHeight - 2), Size(nWidth, 2)));
+ rRenderContext.Pop();
+ }
+
if (bCurFontIsSel || rEntry.GetTextColor())
{
rRenderContext.SetTextColor(aBackupTextColor);
diff --git a/vcl/source/treelist/viewdataentry.cxx b/vcl/source/treelist/viewdataentry.cxx
index b6eb6d79562c..855108d3e5e9 100644
--- a/vcl/source/treelist/viewdataentry.cxx
+++ b/vcl/source/treelist/viewdataentry.cxx
@@ -26,6 +26,7 @@ SvViewDataEntry::SvViewDataEntry() :
mbExpanded(false),
mbFocused(false),
mbSelectable(true),
+ mbDragTarget(false),
maPaintRectangle()
{
}
@@ -37,6 +38,7 @@ SvViewDataEntry::SvViewDataEntry( const SvViewDataEntry& rData ) :
mbExpanded(rData.mbExpanded),
mbFocused(false),
mbSelectable(rData.mbSelectable),
+ mbDragTarget(false),
maPaintRectangle(rData.maPaintRectangle)
{
}
More information about the Libreoffice-commits
mailing list