[Libreoffice-commits] core.git: 2 commits - sd/source vcl/headless

Caolán McNamara caolanm at redhat.com
Mon Nov 30 02:35:06 PST 2015


 sd/source/ui/func/fupoor.cxx |    6 +--
 vcl/headless/svpgdi.cxx      |   66 +++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 67 insertions(+), 5 deletions(-)

New commits:
commit 7dcbc5708aec6672ddc3ba6ed000421f56e651ac
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Nov 30 10:33:58 2015 +0000

    silence mouse release warning
    
    Change-Id: Ie3c6da36f1c462080f78e8713e9e5dcd228fbacf

diff --git a/sd/source/ui/func/fupoor.cxx b/sd/source/ui/func/fupoor.cxx
index fb896ce..34b35ab 100644
--- a/sd/source/ui/func/fupoor.cxx
+++ b/sd/source/ui/func/fupoor.cxx
@@ -116,15 +116,15 @@ void FuPoor::Deactivate()
     aDragTimer.Stop();
     aScrollTimer.Stop();
     aDelayToScrollTimer.Stop ();
-        bScrollable  =
-        bDelayActive = false;
+    bScrollable = bDelayActive = false;
 
     if (pDialog)
     {
         pDialog->Hide();
     }
 
-    if (mpWindow) mpWindow->ReleaseMouse ();
+    if (mpWindow && mpWindow->IsMouseCaptured())
+        mpWindow->ReleaseMouse();
 }
 
 void FuPoor::SetWindow(::sd::Window* pWin)
commit a80dea3e77c2a8465cdd309c5f740fb8102dd826
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Nov 30 10:22:46 2015 +0000

    gtk3: implement SAL_INVERT_50 rectangle case
    
    missing stipple effect around slides in layout panel
    
    Change-Id: I8a55c6bda1e742e105ba22e4566658099ea16f46

diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index 6ad1458..2d98b26 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -1172,9 +1172,69 @@ SalColor SvpSalGraphics::getPixel( long nX, long nY )
     return aColor.toInt32();
 }
 
-void SvpSalGraphics::invert( long nX, long nY, long nWidth, long nHeight, SalInvert /*nFlags*/ )
+namespace
 {
-    // FIXME: handle SAL_INVERT_50 and SAL_INVERT_TRACKFRAME
+    cairo_pattern_t * create_stipple()
+    {
+        static unsigned char data[16] = { 0xFF, 0xFF, 0x00, 0x00,
+                                          0xFF, 0xFF, 0x00, 0x00,
+                                          0x00, 0x00, 0xFF, 0xFF,
+                                          0x00, 0x00, 0xFF, 0xFF };
+        cairo_surface_t* surface = cairo_image_surface_create_for_data(data, CAIRO_FORMAT_A8, 4, 4, 4);
+        cairo_pattern_t* pattern = cairo_pattern_create_for_surface(surface);
+        cairo_surface_destroy(surface);
+        cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
+        cairo_pattern_set_filter(pattern, CAIRO_FILTER_NEAREST);
+        return pattern;
+    }
+}
+
+void SvpSalGraphics::invert( long nX, long nY, long nWidth, long nHeight, SalInvert nFlags )
+{
+    // FIXME: handle SAL_INVERT_TRACKFRAME
+    if ( nFlags & SAL_INVERT_TRACKFRAME )
+    {
+        SAL_WARN("vcl.gdi", "SvpSalGraphics::invert, unhandled SAL_INVERT_TRACKFRAME");
+    }
+    else if ( nFlags & SAL_INVERT_50 )
+    {
+        if (cairo_t* cr = getCairoContext())
+        {
+            assert(m_aDevice->isTopDown());
+
+            clipRegion(cr);
+
+            cairo_pattern_t *pattern = create_stipple();
+
+            cairo_rectangle_int_t extents;
+            basebmp::IBitmapDeviceDamageTrackerSharedPtr xDamageTracker(m_aDevice->getDamageTracker());
+
+            cairo_rectangle(cr, nX, nY, nWidth, nHeight);
+
+            if (xDamageTracker)
+                extents = getFillDamage(cr);
+
+            cairo_clip(cr);
+
+            cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
+            cairo_set_operator(cr, CAIRO_OPERATOR_DIFFERENCE);
+            cairo_mask(cr, pattern);
+            cairo_pattern_destroy(pattern);
+
+            cairo_surface_flush(cairo_get_target(cr));
+            cairo_destroy(cr); // unref
+
+            return;
+        }
+        else
+            SAL_WARN("vcl.gdi", "SvpSalGraphics::invert unhandled XOR (?)");
+    }
+    else
+    {
+        SAL_WARN("vcl.gdi", "SvpSalGraphics::invert, unhandled SAL_INVERT_TRACKFRAME");
+    }
+
+
     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 );
@@ -1187,6 +1247,8 @@ void SvpSalGraphics::invert( long nX, long nY, long nWidth, long nHeight, SalInv
 
 void SvpSalGraphics::invert( sal_uInt32 nPoints, const SalPoint* pPtAry, SalInvert /*nFlags*/ )
 {
+    SAL_WARN("vcl.gdi", "SvpSalGraphics::invert, unhandled points case");
+
     // FIXME: handle SAL_INVERT_50 and SAL_INVERT_TRACKFRAME
     basegfx::B2DPolygon aPoly;
     aPoly.append( basegfx::B2DPoint( pPtAry->mnX, pPtAry->mnY ), nPoints );


More information about the Libreoffice-commits mailing list