sw/source/uibase/docvw/edtwin.cxx | 3 + vcl/headless/svpgdi.cxx | 76 ++++++++++++++++++++------------------ vcl/unx/gtk3/gtk3gtkinst.cxx | 17 +++++--- 3 files changed, 53 insertions(+), 43 deletions(-)
New commits: commit 8dea939d65cd3cdd744d21a9f60444a97e45962b Author: Caolán McNamara <caol...@redhat.com> Date: Fri Dec 4 15:15:06 2015 +0000 implement SAL_INVERT_TRACKFRAME invert via cairo this gives the same (terrible?) pattern as quartz for dragging toolbars around Change-Id: I439826c41f9d4d13d6e0b13859b6fb34899b6494 diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index ad8888a..e610ad4 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -1195,34 +1195,47 @@ namespace void SvpSalGraphics::invert( long nX, long nY, long nWidth, long nHeight, SalInvert nFlags ) { - // FIXME: handle SAL_INVERT_TRACKFRAME - if ( nFlags & SAL_INVERT_TRACKFRAME ) + if (m_aDrawMode != basebmp::DrawMode::XOR) { - SAL_WARN("vcl.gdi", "SvpSalGraphics::invert, unhandled SAL_INVERT_TRACKFRAME"); - } - else - { - if (m_aDrawMode == basebmp::DrawMode::XOR) - SAL_WARN("vcl.gdi", "SvpSalGraphics::invert unhandled XOR (?)"); + cairo_t* cr = getCairoContext(); + assert(cr && m_aDevice->isTopDown()); + + clipRegion(cr); + + cairo_rectangle_int_t extents = {0, 0, 0, 0}; + basebmp::IBitmapDeviceDamageTrackerSharedPtr xDamageTracker(m_aDevice->getDamageTracker()); + + cairo_rectangle(cr, nX, nY, nWidth, nHeight); + + cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); + + if (cairo_version() >= CAIRO_VERSION_ENCODE(1, 10, 0)) + { + cairo_set_operator(cr, CAIRO_OPERATOR_DIFFERENCE); + } else { - cairo_t* cr = getCairoContext(); - assert(cr && m_aDevice->isTopDown()); - - clipRegion(cr); + SAL_WARN("vcl.gdi", "SvpSalGraphics::invert, archaic cairo"); + } - cairo_rectangle_int_t extents = {0, 0, 0, 0}; - basebmp::IBitmapDeviceDamageTrackerSharedPtr xDamageTracker(m_aDevice->getDamageTracker()); + if (nFlags & SAL_INVERT_TRACKFRAME) + { + cairo_set_line_width(cr, 2.0); + const double dashLengths[2] = { 4.0, 4.0 }; + cairo_set_dash(cr, dashLengths, 2, 0); - cairo_rectangle(cr, nX, nY, nWidth, nHeight); + if (xDamageTracker) + extents = getStrokeDamage(cr); + cairo_stroke(cr); + } + else + { if (xDamageTracker) extents = getFillDamage(cr); cairo_clip(cr); - cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); - if (nFlags & SAL_INVERT_50) { cairo_pattern_t *pattern = create_stipple(); @@ -1231,31 +1244,24 @@ void SvpSalGraphics::invert( long nX, long nY, long nWidth, long nHeight, SalInv } else { - if (cairo_version() >= CAIRO_VERSION_ENCODE(1, 10, 0)) - { - cairo_set_operator(cr, CAIRO_OPERATOR_DIFFERENCE); - } - else - { - SAL_WARN("vcl.gdi", "SvpSalGraphics::invert, archaic cairo"); - cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); - } cairo_paint(cr); } + } - cairo_surface_flush(cairo_get_target(cr)); - cairo_destroy(cr); // unref - - if (xDamageTracker) - { - xDamageTracker->damaged(basegfx::B2IBox(extents.x, extents.y, extents.x + extents.width, - extents.y + extents.height)); - } + cairo_surface_flush(cairo_get_target(cr)); + cairo_destroy(cr); // unref - return; + if (xDamageTracker) + { + xDamageTracker->damaged(basegfx::B2IBox(extents.x, extents.y, extents.x + extents.width, + extents.y + extents.height)); } + + return; } + SAL_WARN("vcl.gdi", "SvpSalGraphics::invert unhandled XOR (?)"); + basegfx::B2DPolygon aRect = basegfx::tools::createPolygonFromRect( basegfx::B2DRectangle( nX, nY, nX+nWidth, nY+nHeight ) ); basegfx::B2DPolyPolygon aPolyPoly( aRect ); basegfx::B2IBox aDestRange( nX, nY, nX + nWidth, nY + nHeight ); commit cfc119c4322e36283ffc4bebfb0757e8e0039a5a Author: Caolán McNamara <caol...@redhat.com> Date: Fri Dec 4 14:11:35 2015 +0000 silence vcl release mouse warning Change-Id: I12eb894d88c7b96f92e3d080ac3cf24ff2e025ec diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx index 277934b..8c9b13f 100644 --- a/sw/source/uibase/docvw/edtwin.cxx +++ b/sw/source/uibase/docvw/edtwin.cxx @@ -4391,7 +4391,8 @@ void SwEditWin::MouseButtonUp(const MouseEvent& rMEvt) m_rView.GetDrawFuncPtr()->BreakCreate(); // abort drawing g_bNoInterrupt = false; - ReleaseMouse(); + if (IsMouseCaptured()) + ReleaseMouse(); return; } bool bPopMode = false; commit 66fedc0966ad0c732cada974ea910d7a98beca15 Author: Caolán McNamara <caol...@redhat.com> Date: Fri Dec 4 14:11:24 2015 +0000 gtk3: avoid empty target clipboard warning Change-Id: Ic6b46eb2c81398f0ab2e7539e5cdb27a508c8893 diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 9f15db0..e9210d0 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -572,13 +572,16 @@ void VclGtkClipboard::setContents( aGtkTargets.push_back(makeGtkTargetEntry(aFlavor)); } - //if there was a previous gtk_clipboard_set_with_data call then - //ClipboardClearFunc will be called now - GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection); - //use with_owner with m_pOwner so we can distinguish in handle_owner_change - //if we have gained or lost ownership of the clipboard - gtk_clipboard_set_with_owner(clipboard, aGtkTargets.data(), aGtkTargets.size(), - ClipboardGetFunc, ClipboardClearFunc, G_OBJECT(m_pOwner)); + if (!aGtkTargets.empty()) + { + //if there was a previous gtk_clipboard_set_with_data call then + //ClipboardClearFunc will be called now + GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection); + //use with_owner with m_pOwner so we can distinguish in handle_owner_change + //if we have gained or lost ownership of the clipboard + gtk_clipboard_set_with_owner(clipboard, aGtkTargets.data(), aGtkTargets.size(), + ClipboardGetFunc, ClipboardClearFunc, G_OBJECT(m_pOwner)); + } m_aGtkTargets = aGtkTargets; }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits