[Libreoffice-commits] core.git: 3 commits - comphelper/source desktop/qa desktop/source dictionaries include/comphelper include/LibreOfficeKit sc/source vcl/headless
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Thu Nov 8 13:41:34 UTC 2018
comphelper/source/misc/lok.cxx | 13 +++++++++
desktop/qa/desktop_lib/test_desktop_lib.cxx | 9 +++---
desktop/source/lib/init.cxx | 39 +++++++++++++++++++++++++---
dictionaries | 2 -
include/LibreOfficeKit/LibreOfficeKit.h | 9 ++++++
include/LibreOfficeKit/LibreOfficeKit.hxx | 13 +++++++--
include/comphelper/lok.hxx | 4 ++
sc/source/ui/unoobj/docuno.cxx | 10 +++----
sc/source/ui/view/gridwin4.cxx | 32 ++++++++++++++++------
sc/source/ui/view/tabview.cxx | 8 ++---
vcl/headless/svpvd.cxx | 15 ++++++++--
11 files changed, 122 insertions(+), 32 deletions(-)
New commits:
commit 4cee8ccc2caff17b5cbecc5ae895dcc9fd974c2e
Author: Marco Cecchetti <marco.cecchetti at collabora.com>
AuthorDate: Sat Oct 27 17:15:35 2018 +0000
Commit: Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Nov 8 14:39:14 2018 +0100
lok: calc: fix needed when position caching is disabled
In case it would be needed to disable position caching we can't
retrieve the nTotalPixels value from the LOKHeight/WidthHelper.
The new code works in both cases.
Change-Id: I65562dd4458eee40c5db958067fc91af6b3eb79e
Reviewed-on: https://gerrit.libreoffice.org/63039
Tested-by: Jenkins
Reviewed-by: Jan Holesovsky <kendy at collabora.com>
diff --git a/dictionaries b/dictionaries
index 86921a78c42f..6c85a19c887b 160000
--- a/dictionaries
+++ b/dictionaries
@@ -1 +1 @@
-Subproject commit 86921a78c42f4fd499d86a226e34ab97e8b85ed5
+Subproject commit 6c85a19c887b6147ec7d3a600b51cb2a44284fa2
diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx
index 8f7f7e37c836..3444a7e36fdc 100644
--- a/sc/source/ui/view/tabview.cxx
+++ b/sc/source/ui/view/tabview.cxx
@@ -2479,8 +2479,10 @@ OUString ScTabView::getRowColumnHeaders(const tools::Rectangle& rRectangle)
SCTAB nTab = aViewData.GetTabNo();
SCROW nStartRow = -1;
SCROW nEndRow = -1;
+ long nStartHeightPx = 0;
SCCOL nStartCol = -1;
SCCOL nEndCol = -1;
+ long nStartWidthPx = 0;
tools::Rectangle aOldVisArea(
mnLOKStartHeaderCol + 1, mnLOKStartHeaderRow + 1,
@@ -2493,7 +2495,6 @@ OUString ScTabView::getRowColumnHeaders(const tools::Rectangle& rRectangle)
if (rRectangle.Top() < rRectangle.Bottom())
{
SAL_INFO("sc.lok.header", "Row Header: compute start/end rows.");
- long nStartHeightPx = 0;
long nEndHeightPx = 0;
long nRectTopPx = rRectangle.Top() / TWIPS_PER_PIXEL;
long nRectBottomPx = rRectangle.Bottom() / TWIPS_PER_PIXEL;
@@ -2582,7 +2583,7 @@ OUString ScTabView::getRowColumnHeaders(const tools::Rectangle& rRectangle)
aBuffer.append("\"rows\": [\n");
- long nTotalPixels = aViewData.GetLOKHeightHelper().getPosition(nStartRow);
+ long nTotalPixels = nStartHeightPx;
SAL_INFO("sc.lok.header", "Row Header: [create string data for rows]: start row: "
<< nStartRow << " start height: " << nTotalPixels);
@@ -2637,7 +2638,6 @@ OUString ScTabView::getRowColumnHeaders(const tools::Rectangle& rRectangle)
if (rRectangle.Left() < rRectangle.Right())
{
SAL_INFO("sc.lok.header", "Column Header: compute start/end columns.");
- long nStartWidthPx = 0;
long nEndWidthPx = 0;
long nRectLeftPx = rRectangle.Left() / TWIPS_PER_PIXEL;
long nRectRightPx = rRectangle.Right() / TWIPS_PER_PIXEL;
@@ -2723,7 +2723,7 @@ OUString ScTabView::getRowColumnHeaders(const tools::Rectangle& rRectangle)
aBuffer.append("\"columns\": [\n");
- nTotalPixels = aViewData.GetLOKWidthHelper().getPosition(nStartCol);
+ nTotalPixels = nStartWidthPx;
SAL_INFO("sc.lok.header", "Col Header: [create string data for cols]: start col: "
<< nStartRow << " start width: " << nTotalPixels);
commit b0fb5acd045d116943645277a220abec5e8b6063
Author: Jan Holesovsky <kendy at collabora.com>
AuthorDate: Fri Oct 26 15:21:06 2018 +0200
Commit: Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Nov 8 14:38:49 2018 +0100
lokdialog: Implement hi-dpi support for the routed dialogs.
Change-Id: I770c605a049b7ac9c26c2773414eef8b6fc093a2
Reviewed-on: https://gerrit.libreoffice.org/63032
Tested-by: Jenkins
Reviewed-by: Jan Holesovsky <kendy at collabora.com>
diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx
index 389d84a0cc31..728af9163222 100644
--- a/desktop/qa/desktop_lib/test_desktop_lib.cxx
+++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx
@@ -2431,12 +2431,13 @@ void DesktopLOKTest::testABI()
CPPUNIT_ASSERT_EQUAL(documentClassOffset(39), offsetof(struct _LibreOfficeKitDocumentClass, setViewLanguage));
CPPUNIT_ASSERT_EQUAL(documentClassOffset(40), offsetof(struct _LibreOfficeKitDocumentClass, postWindowExtTextInputEvent));
CPPUNIT_ASSERT_EQUAL(documentClassOffset(41), offsetof(struct _LibreOfficeKitDocumentClass, getPartInfo));
- CPPUNIT_ASSERT_EQUAL(documentClassOffset(42), offsetof(struct _LibreOfficeKitDocumentClass, insertCertificate));
- CPPUNIT_ASSERT_EQUAL(documentClassOffset(43), offsetof(struct _LibreOfficeKitDocumentClass, addCertificate));
- CPPUNIT_ASSERT_EQUAL(documentClassOffset(44), offsetof(struct _LibreOfficeKitDocumentClass, getSignatureState));
+ CPPUNIT_ASSERT_EQUAL(documentClassOffset(42), offsetof(struct _LibreOfficeKitDocumentClass, paintWindowDPI));
+ CPPUNIT_ASSERT_EQUAL(documentClassOffset(43), offsetof(struct _LibreOfficeKitDocumentClass, insertCertificate));
+ CPPUNIT_ASSERT_EQUAL(documentClassOffset(44), offsetof(struct _LibreOfficeKitDocumentClass, addCertificate));
+ CPPUNIT_ASSERT_EQUAL(documentClassOffset(45), offsetof(struct _LibreOfficeKitDocumentClass, getSignatureState));
// Extending is fine, update this, and add new assert for the offsetof the
// new method
- CPPUNIT_ASSERT_EQUAL(documentClassOffset(45), sizeof(struct _LibreOfficeKitDocumentClass));
+ CPPUNIT_ASSERT_EQUAL(documentClassOffset(46), sizeof(struct _LibreOfficeKitDocumentClass));
}
CPPUNIT_TEST_SUITE_REGISTRATION(DesktopLOKTest);
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 7ea6316f9e26..450cd0f1ad78 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -686,6 +686,11 @@ static void doc_paintWindow(LibreOfficeKitDocument* pThis, unsigned nLOKWindowId
const int nX, const int nY,
const int nWidth, const int nHeight);
+static void doc_paintWindowDPI(LibreOfficeKitDocument* pThis, unsigned nLOKWindowId, unsigned char* pBuffer,
+ const int nX, const int nY,
+ const int nWidth, const int nHeight,
+ const double fDPIScale);
+
static void doc_postWindow(LibreOfficeKitDocument* pThis, unsigned nLOKWindowId, int nAction);
static char* doc_getPartInfo(LibreOfficeKitDocument* pThis, int nPart);
@@ -756,6 +761,7 @@ LibLODocument_Impl::LibLODocument_Impl(const uno::Reference <css::lang::XCompone
m_pDocumentClass->getPartHash = doc_getPartHash;
m_pDocumentClass->paintWindow = doc_paintWindow;
+ m_pDocumentClass->paintWindowDPI = doc_paintWindowDPI;
m_pDocumentClass->postWindow = doc_postWindow;
m_pDocumentClass->setViewLanguage = doc_setViewLanguage;
@@ -3587,11 +3593,20 @@ unsigned char* doc_renderFont(SAL_UNUSED_PARAMETER LibreOfficeKitDocument* /*pTh
return nullptr;
}
-static void doc_paintWindow(LibreOfficeKitDocument* /*pThis*/, unsigned nLOKWindowId,
+static void doc_paintWindow(LibreOfficeKitDocument* pThis, unsigned nLOKWindowId,
unsigned char* pBuffer,
const int nX, const int nY,
const int nWidth, const int nHeight)
{
+ doc_paintWindowDPI(pThis, nLOKWindowId, pBuffer, nX, nY, nWidth, nHeight, 1.0);
+}
+
+static void doc_paintWindowDPI(LibreOfficeKitDocument* /*pThis*/, unsigned nLOKWindowId,
+ unsigned char* pBuffer,
+ const int nX, const int nY,
+ const int nWidth, const int nHeight,
+ const double fDPIScale)
+{
SolarMutexGuard aGuard;
if (gImpl)
gImpl->maLastExceptionMsg.clear();
@@ -3603,6 +3618,11 @@ static void doc_paintWindow(LibreOfficeKitDocument* /*pThis*/, unsigned nLOKWind
return;
}
+ // Setup cairo to draw with the changed DPI scale (and return back to 1.0
+ // when the painting finishes)
+ comphelper::ScopeGuard dpiScaleGuard([]() { comphelper::LibreOfficeKit::setDPIScale(1.0); });
+ comphelper::LibreOfficeKit::setDPIScale(fDPIScale);
+
#if defined(IOS)
CGContextRef cgc = CGBitmapContextCreate(pBuffer, nWidth, nHeight, 8, nWidth*4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipFirst | kCGImageByteOrder32Little);
@@ -3636,7 +3656,7 @@ static void doc_paintWindow(LibreOfficeKitDocument* /*pThis*/, unsigned nLOKWind
pDevice->SetOutputSizePixelScaleOffsetAndBuffer(Size(nWidth, nHeight), Fraction(1.0), Point(), pBuffer);
MapMode aMapMode(pDevice->GetMapMode());
- aMapMode.SetOrigin(Point(-nX, -nY));
+ aMapMode.SetOrigin(Point(-(nX / fDPIScale), -(nY / fDPIScale)));
pDevice->SetMapMode(aMapMode);
comphelper::LibreOfficeKit::setDialogPainting(true);
diff --git a/include/LibreOfficeKit/LibreOfficeKit.h b/include/LibreOfficeKit/LibreOfficeKit.h
index e052765ac794..27d968c4a6b7 100644
--- a/include/LibreOfficeKit/LibreOfficeKit.h
+++ b/include/LibreOfficeKit/LibreOfficeKit.h
@@ -309,6 +309,15 @@ struct _LibreOfficeKitDocumentClass
/// @see lok::Document::getPartInfo().
char* (*getPartInfo) (LibreOfficeKitDocument* pThis, int nPart);
+ /// Paints window with given id to the buffer with the give DPI scale
+ /// (every pixel is dpiscale-times larger).
+ /// @see lok::Document::paintWindow().
+ void (*paintWindowDPI) (LibreOfficeKitDocument* pThis, unsigned nWindowId,
+ unsigned char* pBuffer,
+ const int x, const int y,
+ const int width, const int height,
+ const double dpiscale);
+
#ifdef IOS
/// @see lok::Document::paintTileToCGContext().
void (*paintTileToCGContext) (LibreOfficeKitDocument* pThis,
diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx
index c238d507c183..4a0ec6784b7b 100644
--- a/include/LibreOfficeKit/LibreOfficeKit.hxx
+++ b/include/LibreOfficeKit/LibreOfficeKit.hxx
@@ -164,16 +164,23 @@ public:
* @param y y-coordinate from where the dialog should start painting
* @param width The width of the dialog image to be painted
* @param height The height of the dialog image to be painted
+ * @param dpiscale The dpi scale value used by the client. Please note
+ * that the x, y, width, height are supposed to be the
+ * values with dpiscale applied (ie. dialog covering
+ * 100x100 "normal" pixels with dpiscale '2' will have
+ * 200x200 width x height), so that it is easy to compute
+ * the buffer sizes etc.
*/
void paintWindow(unsigned nWindowId,
unsigned char* pBuffer,
const int x,
const int y,
const int width,
- const int height)
+ const int height,
+ const double dpiscale = 1.0)
{
- return mpDoc->pClass->paintWindow(mpDoc, nWindowId, pBuffer,
- x, y, width, height);
+ return mpDoc->pClass->paintWindowDPI(mpDoc, nWindowId, pBuffer,
+ x, y, width, height, dpiscale);
}
/**
commit 498dceb43f870bf9e380f1f87e99c6ccadf1963c
Author: Jan Holesovsky <kendy at collabora.com>
AuthorDate: Tue Oct 23 17:20:38 2018 +0200
Commit: Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Nov 8 14:38:27 2018 +0100
sc lok: Implement hi-dpi and zoom for spreadsheets.
A bit different approach than trying to paint different zoom levels at
the samet time, because it is terribly hard to achieve with Calc -
things misalign, because Calc tries to fit the lines into the pixels
etc.
Instead, always paint the spreadsheet at 100%, but use cairo to scale the
actual painting.
Change-Id: I228a9dd41bf29862bdd188825d12e61e1c86cccc
Reviewed-on: https://gerrit.libreoffice.org/63031
Tested-by: Jenkins
Reviewed-by: Jan Holesovsky <kendy at collabora.com>
diff --git a/comphelper/source/misc/lok.cxx b/comphelper/source/misc/lok.cxx
index 0641e01660ab..2f6a2c151370 100644
--- a/comphelper/source/misc/lok.cxx
+++ b/comphelper/source/misc/lok.cxx
@@ -37,6 +37,9 @@ static bool g_bLocalRendering(false);
static LanguageTag g_aLanguageTag("en-US", true);
+/// Scaling of the cairo canvas painting for hi-dpi or zooming in Calc.
+static double g_fDPIScale(1.0);
+
void setActive(bool bActive)
{
g_bActive = bActive;
@@ -77,6 +80,16 @@ bool isDialogPainting()
return g_bDialogPainting;
}
+void setDPIScale(double fDPIScale)
+{
+ g_fDPIScale = fDPIScale;
+}
+
+double getDPIScale()
+{
+ return g_fDPIScale;
+}
+
void setTiledAnnotations(bool bTiledAnnotations)
{
g_bTiledAnnotations = bTiledAnnotations;
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 202bf279f153..7ea6316f9e26 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -2126,7 +2126,20 @@ static void doc_paintTile(LibreOfficeKitDocument* pThis,
return;
}
-#if defined(UNX) && !defined(MACOSX)
+#if defined(UNX) && !defined(MACOSX) && !defined(ENABLE_HEADLESS)
+
+ // Painting of zoomed or hi-dpi spreadsheets is special, we actually draw
+ // everything at 100%, and only set cairo's scale factor accordingly, so
+ // that everything is painted bigger or smaller. This is different to
+ // what Calc's internal scaling would do - because that one is trying to
+ // fit the lines between cells to integer multiples of pixels.
+ comphelper::ScopeGuard dpiScaleGuard([]() { comphelper::LibreOfficeKit::setDPIScale(1.0); });
+ if (doc_getDocumentType(pThis) == LOK_DOCTYPE_SPREADSHEET)
+ {
+ double fDPIScaleX = (nCanvasWidth * 3840.0) / (256.0 * nTileWidth);
+ assert(fabs(fDPIScaleX - ((nCanvasHeight * 3840.0) / (256.0 * nTileHeight))) < 0.0001);
+ comphelper::LibreOfficeKit::setDPIScale(fDPIScaleX);
+ }
#if defined(IOS)
CGContextRef cgc = CGBitmapContextCreate(pBuffer, nCanvasWidth, nCanvasHeight, 8, nCanvasWidth*4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipFirst | kCGImageByteOrder32Little);
diff --git a/include/comphelper/lok.hxx b/include/comphelper/lok.hxx
index 7fb4d5a04800..a2b7eb02bef3 100644
--- a/include/comphelper/lok.hxx
+++ b/include/comphelper/lok.hxx
@@ -59,6 +59,10 @@ COMPHELPER_DLLPUBLIC void setTiledPainting(bool bTiledPainting);
COMPHELPER_DLLPUBLIC bool isDialogPainting();
/// Set if we are painting the dialog.
COMPHELPER_DLLPUBLIC void setDialogPainting(bool bDialogPainting);
+/// Set the DPI scale for rendering for hi-dpi displays. Used also for zoom in Calc.
+COMPHELPER_DLLPUBLIC void setDPIScale(double fDPIScale);
+/// Get the DPI scale for rendering for hi-dpi displays. Used also for zoom in Calc.
+COMPHELPER_DLLPUBLIC double getDPIScale();
/// Set if we want no annotations rendering
COMPHELPER_DLLPUBLIC void setTiledAnnotations(bool bTiledAnnotations);
/// Check if annotations rendering is turned off
diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx
index ef5aca3f7950..255e1a4ef3f4 100644
--- a/sc/source/ui/unoobj/docuno.cxx
+++ b/sc/source/ui/unoobj/docuno.cxx
@@ -992,12 +992,12 @@ bool ScModelObj::isMimeTypeSupported()
return EditEngine::HasValidData(aDataHelper.GetTransferable());
}
-void ScModelObj::setClientZoom(int nTilePixelWidth_, int nTilePixelHeight_, int nTileTwipWidth_, int nTileTwipHeight_)
+void ScModelObj::setClientZoom(int /*nTilePixelWidth_*/, int /*nTilePixelHeight_*/, int /*nTileTwipWidth_*/, int /*nTileTwipHeight_*/)
{
- mnTilePixelWidth = nTilePixelWidth_;
- mnTilePixelHeight = nTilePixelHeight_;
- mnTileTwipWidth = nTileTwipWidth_;
- mnTileTwipHeight = nTileTwipHeight_;
+ mnTilePixelWidth = 256;
+ mnTilePixelHeight = 256;
+ mnTileTwipWidth = mnTilePixelWidth * TWIPS_PER_PIXEL;
+ mnTileTwipHeight = mnTilePixelHeight * TWIPS_PER_PIXEL;
}
OUString ScModelObj::getRowColumnHeaders(const tools::Rectangle& rRectangle)
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index e74c18125a45..542a4c6283c6 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -32,6 +32,7 @@
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
#include <comphelper/lok.hxx>
+#include <comphelper/scopeguard.hxx>
#include <sfx2/lokhelper.hxx>
#include <svx/svdview.hxx>
@@ -1109,17 +1110,30 @@ void ScGridWindow::PaintTile( VirtualDevice& rDevice,
// coords only, and avoid all the SetMapMode()'s.
// Similarly to Writer, we should set the mapmode once on the rDevice, and
// not care about any zoom settings.
-
- Fraction aFracX(long(nOutputWidth * TWIPS_PER_PIXEL), nTileWidth);
- Fraction aFracY(long(nOutputHeight * TWIPS_PER_PIXEL), nTileHeight);
-
- // page break zoom, and aLogicMode in ScViewData
+ //
+ // But until that happens, we actually draw everything at 100%, and only
+ // set cairo's scale factor accordingly, so that everything is painted
+ // bigger or smaller. This is different to what Calc's internal scaling
+ // would do - because that one is trying to fit the lines between cells to
+ // integer multiples of pixels.
+ //
+ // See also desktop/source/lib/init.cxx for details, where we have to set
+ // the stuff accorndingly for the VirtualDevice creation.
+
+ // page break zoom, and aLogicMode in ScViewData - hardcode that to what
+ // we mean as 100% (256px tiles meaning 3840 twips)
+ Fraction aFracX(long(256 * TWIPS_PER_PIXEL), 3840);
+ Fraction aFracY(long(256 * TWIPS_PER_PIXEL), 3840);
pViewData->SetZoom(aFracX, aFracY, true);
- const double fTilePosXPixel = static_cast<double>(nTilePosX) * nOutputWidth / nTileWidth;
- const double fTilePosYPixel = static_cast<double>(nTilePosY) * nOutputHeight / nTileHeight;
- const double fTileBottomPixel = static_cast<double>(nTilePosY + nTileHeight) * nOutputHeight / nTileHeight;
- const double fTileRightPixel = static_cast<double>(nTilePosX + nTileWidth) * nOutputWidth / nTileWidth;
+ // Cairo scales for us, we have to compensate for that, otherwise we are
+ // painting too far away
+ const double fDPIScale = comphelper::LibreOfficeKit::getDPIScale();
+
+ const double fTilePosXPixel = static_cast<double>(nTilePosX) * nOutputWidth / (nTileWidth * fDPIScale);
+ const double fTilePosYPixel = static_cast<double>(nTilePosY) * nOutputHeight / (nTileHeight * fDPIScale);
+ const double fTileBottomPixel = static_cast<double>(nTilePosY + nTileHeight) * nOutputHeight / (nTileHeight * fDPIScale);
+ const double fTileRightPixel = static_cast<double>(nTilePosX + nTileWidth) * nOutputWidth / (nTileWidth * fDPIScale);
SCTAB nTab = pViewData->GetTabNo();
ScDocument* pDoc = pViewData->GetDocument();
diff --git a/vcl/headless/svpvd.cxx b/vcl/headless/svpvd.cxx
index 4172fc383744..875f22a5d7fc 100644
--- a/vcl/headless/svpvd.cxx
+++ b/vcl/headless/svpvd.cxx
@@ -25,6 +25,7 @@
#include <headless/svpgdi.hxx>
#include <basegfx/vector/b2ivector.hxx>
+#include <comphelper/lok.hxx>
#include <cairo.h>
@@ -90,9 +91,17 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY,
{
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0)
double fXScale, fYScale;
- cairo_surface_get_device_scale(m_pRefSurface, &fXScale, &fYScale);
- nNewDX *= fXScale;
- nNewDY *= fYScale;
+ if (comphelper::LibreOfficeKit::isActive())
+ {
+ // Force scaling of the painting
+ fXScale = fYScale = comphelper::LibreOfficeKit::getDPIScale();
+ }
+ else
+ {
+ cairo_surface_get_device_scale(m_pRefSurface, &fXScale, &fYScale);
+ nNewDX *= fXScale;
+ nNewDY *= fYScale;
+ }
#endif
m_pSurface = cairo_image_surface_create_for_data(pBuffer, CAIRO_FORMAT_ARGB32,
More information about the Libreoffice-commits
mailing list