[Libreoffice-commits] core.git: Branch 'private/llunak/skia' - 12 commits - bin/update_pch compilerplugins/Makefile-clang.mk external/skia vcl/inc vcl/qa vcl/skia
Luboš Luňák (via logerrit)
logerrit at kemper.freedesktop.org
Wed Oct 2 15:17:13 UTC 2019
bin/update_pch | 6
compilerplugins/Makefile-clang.mk | 3
external/skia/Library_skia.mk | 154 +++++++++++++++--------
external/skia/UnpackedTarball_skia.mk | 3
external/skia/configs/SkUserConfig.h | 191 -----------------------------
external/skia/fix-ddi.patch | 9 +
external/skia/fix-pch.patch | 46 ++++++
external/skia/inc/pch/precompiled_skia.hxx | 31 ----
vcl/inc/skia/gdiimpl.hxx | 19 ++
vcl/inc/skia/x11/gdiimpl.hxx | 17 +-
vcl/qa/cppunit/BitmapTest.cxx | 5
vcl/qa/cppunit/canvasbitmaptest.cxx | 5
vcl/qa/cppunit/gen/gen.cxx | 4
vcl/qa/cppunit/svm/svmtest.cxx | 75 ++---------
vcl/skia/gdiimpl.cxx | 181 +++++++++++++++++++++++++--
vcl/skia/salbmp.cxx | 107 ++++++++++------
vcl/skia/x11/gdiimpl.cxx | 64 ++++++++-
17 files changed, 508 insertions(+), 412 deletions(-)
New commits:
commit f12a617da1963728260ab2b082c825450435bb87
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Wed Oct 2 17:15:07 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Wed Oct 2 17:15:07 2019 +0200
make the X11/Skia backend finally capable of drawing on screen
Change-Id: I5c847c1036c671137ee27053691189093b1dafae
diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx
index aad4ea3e8454..c72c5979464d 100644
--- a/vcl/inc/skia/gdiimpl.hxx
+++ b/vcl/inc/skia/gdiimpl.hxx
@@ -27,6 +27,8 @@
#include <SkSurface.h>
+class SkiaFlushIdle;
+
class VCL_DLLPUBLIC SkiaSalGraphicsImpl : public SalGraphicsImpl
{
public:
@@ -37,8 +39,6 @@ public:
virtual void DeInit() override;
- virtual void freeResources() override;
-
const vcl::Region& getClipRegion() const;
virtual bool setClipRegion(const vcl::Region&) override;
@@ -183,6 +183,12 @@ public:
virtual bool drawGradient(const tools::PolyPolygon& rPolygon,
const Gradient& rGradient) override;
+ // To be called after any drawing.
+ void scheduleFlush();
+
+ // Internal, called by SkiaFlushIdle.
+ virtual void performFlush() = 0;
+
#ifdef DBG_UTIL
void dump(const char* file) const;
void dump(const SkBitmap& bitmap, const char* file) const;
@@ -191,7 +197,9 @@ public:
protected:
void setProvider(SalGeometryProvider* provider) { mProvider = provider; }
-private:
+ bool isOffscreen() const { return mProvider == nullptr || mProvider->IsOffScreen(); }
+
+protected:
// get the width of the device
int GetWidth() const { return mProvider ? mProvider->GetWidth() : 1; }
// get the height of the device
@@ -215,6 +223,7 @@ private:
vcl::Region mClipRegion;
Color mLineColor;
Color mFillColor;
+ std::unique_ptr<SkiaFlushIdle> mFlush;
};
#endif
diff --git a/vcl/inc/skia/x11/gdiimpl.hxx b/vcl/inc/skia/x11/gdiimpl.hxx
index 670c1117d32d..fcc0ecb116d8 100644
--- a/vcl/inc/skia/x11/gdiimpl.hxx
+++ b/vcl/inc/skia/x11/gdiimpl.hxx
@@ -19,14 +19,14 @@
class VCL_PLUGIN_PUBLIC X11SkiaSalGraphicsImpl : public SkiaSalGraphicsImpl, public X11GraphicsImpl
{
private:
- X11SalGraphics& mrX11Parent;
+ X11SalGraphics& mParent;
public:
X11SkiaSalGraphicsImpl(X11SalGraphics& rParent);
virtual ~X11SkiaSalGraphicsImpl() override;
-public:
virtual void Init() override;
+ virtual void freeResources() override;
// implementation of X11GraphicsImpl
void FillPixmapFromScreen(X11Pixmap* pPixmap, int nX, int nY) override;
@@ -34,6 +34,13 @@ public:
bool RenderAndCacheNativeControl(X11Pixmap* pPixmap, X11Pixmap* pMask, int nX, int nY,
ControlCacheKey& aControlCacheKey) override;
bool TryRenderCachedNativeControl(ControlCacheKey& rControlCacheKey, int nX, int nY) override;
+
+protected:
+ virtual void performFlush() override;
+
+private:
+ GC getGC();
+ GC mCopyGc;
};
#endif // INCLUDED_VCL_INC_SKIA_X11_GDIIMPL_HXX
diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx
index da8a917f50b5..4a42ea503985 100644
--- a/vcl/skia/gdiimpl.cxx
+++ b/vcl/skia/gdiimpl.cxx
@@ -21,6 +21,8 @@
#include <salgdi.hxx>
#include <skia/salbmp.hxx>
+#include <vcl/idle.hxx>
+#include <vcl/svapp.hxx>
#include <SkCanvas.h>
#include <SkPath.h>
@@ -30,11 +32,34 @@
#include <fstream>
#endif
+// Class that triggers flushing the backing buffer when idle.
+class SkiaFlushIdle : public Idle
+{
+ SkiaSalGraphicsImpl* graphics;
+
+public:
+ explicit SkiaFlushIdle(SkiaSalGraphicsImpl* graphics)
+ : Idle("skia idle swap")
+ , graphics(graphics)
+ {
+ // We don't want to be swapping before we've painted.
+ SetPriority(TaskPriority::POST_PAINT);
+ }
+
+ virtual void Invoke() override
+ {
+ graphics->performFlush();
+ Stop();
+ SetPriority(TaskPriority::HIGHEST);
+ }
+};
+
SkiaSalGraphicsImpl::SkiaSalGraphicsImpl(SalGraphics& rParent, SalGeometryProvider* pProvider)
: mParent(rParent)
, mProvider(pProvider)
, mLineColor(SALCOLOR_NONE)
, mFillColor(SALCOLOR_NONE)
+ , mFlush(new SkiaFlushIdle(this))
{
}
@@ -46,12 +71,13 @@ void SkiaSalGraphicsImpl::Init()
mSurface = SkSurface::MakeRasterN32Premul(GetWidth(), GetHeight());
mSurface->getCanvas()->save(); // see SetClipRegion()
mClipRegion = vcl::Region(tools::Rectangle(0, 0, GetWidth(), GetHeight()));
+
+ // We don't want to be swapping before we've painted.
+ mFlush->SetPriority(TaskPriority::POST_PAINT);
}
void SkiaSalGraphicsImpl::DeInit() { mSurface.reset(); }
-void SkiaSalGraphicsImpl::freeResources() {}
-
static SkIRect toSkIRect(const tools::Rectangle& rectangle)
{
return SkIRect::MakeXYWH(rectangle.Left(), rectangle.Top(), rectangle.GetWidth(),
@@ -129,6 +155,7 @@ void SkiaSalGraphicsImpl::drawPixel(long nX, long nY)
return;
SkCanvas* canvas = mSurface->getCanvas();
canvas->drawPoint(nX, nY, SkPaint());
+ scheduleFlush();
}
void SkiaSalGraphicsImpl::drawPixel(long nX, long nY, Color nColor)
@@ -141,6 +168,7 @@ void SkiaSalGraphicsImpl::drawPixel(long nX, long nY, Color nColor)
// Apparently drawPixel() is actually expected to set the pixel and not draw it.
paint.setBlendMode(SkBlendMode::kSrc); // set as is, including alpha
canvas->drawPoint(nX, nY, paint);
+ scheduleFlush();
}
void SkiaSalGraphicsImpl::drawLine(long nX1, long nY1, long nX2, long nY2)
@@ -151,6 +179,7 @@ void SkiaSalGraphicsImpl::drawLine(long nX1, long nY1, long nX2, long nY2)
SkPaint paint;
paint.setColor(toSkColor(mLineColor));
canvas->drawLine(nX1, nY1, nX2, nY2, paint);
+ scheduleFlush();
}
void SkiaSalGraphicsImpl::drawRect(long nX, long nY, long nWidth, long nHeight)
@@ -169,6 +198,7 @@ void SkiaSalGraphicsImpl::drawRect(long nX, long nY, long nWidth, long nHeight)
paint.setStyle(SkPaint::kStroke_Style);
canvas->drawIRect(SkIRect::MakeXYWH(nX, nY, nWidth - 1, nHeight - 1), paint);
}
+ scheduleFlush();
}
void SkiaSalGraphicsImpl::drawPolyLine(sal_uInt32 nPoints, const SalPoint* pPtAry)
@@ -183,6 +213,7 @@ void SkiaSalGraphicsImpl::drawPolyLine(sal_uInt32 nPoints, const SalPoint* pPtAr
paint.setColor(toSkColor(mLineColor));
mSurface->getCanvas()->drawPoints(SkCanvas::kLines_PointMode, nPoints, pointVector.data(),
paint);
+ scheduleFlush();
}
void SkiaSalGraphicsImpl::drawPolygon(sal_uInt32 nPoints, const SalPoint* pPtAry)
@@ -208,6 +239,7 @@ void SkiaSalGraphicsImpl::drawPolygon(sal_uInt32 nPoints, const SalPoint* pPtAry
paint.setStyle(SkPaint::kStroke_Style);
mSurface->getCanvas()->drawPath(path, paint);
}
+ scheduleFlush();
}
void SkiaSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pPoints,
@@ -242,6 +274,7 @@ void SkiaSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pP
paint.setStyle(SkPaint::kStroke_Style);
mSurface->getCanvas()->drawPath(path, paint);
}
+ scheduleFlush();
}
bool SkiaSalGraphicsImpl::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectToDevice,
@@ -306,6 +339,7 @@ void SkiaSalGraphicsImpl::copyArea(long nDestX, long nDestY, long nSrcX, long nS
= mSurface->makeImageSnapshot(SkIRect::MakeXYWH(nSrcX, nSrcY, nSrcWidth, nSrcHeight));
// TODO makeNonTextureImage() ?
mSurface->getCanvas()->drawImage(image, nDestX, nDestY);
+ scheduleFlush();
}
void SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics)
@@ -326,6 +360,7 @@ void SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcG
rPosAry.mnDestWidth,
rPosAry.mnDestHeight),
nullptr);
+ scheduleFlush();
}
bool SkiaSalGraphicsImpl::blendBitmap(const SalTwoRect&, const SalBitmap& rBitmap)
@@ -356,6 +391,7 @@ void SkiaSalGraphicsImpl::drawBitmap(const SalTwoRect& rPosAry, const SalBitmap&
SkRect::MakeXYWH(rPosAry.mnDestX, rPosAry.mnDestY, rPosAry.mnDestWidth,
rPosAry.mnDestHeight),
nullptr);
+ scheduleFlush();
}
void SkiaSalGraphicsImpl::drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap,
@@ -385,6 +421,7 @@ void SkiaSalGraphicsImpl::drawMask(const SalTwoRect& rPosAry, const SalBitmap& r
SkRect::MakeXYWH(rPosAry.mnDestX, rPosAry.mnDestY, rPosAry.mnDestWidth,
rPosAry.mnDestHeight),
nullptr);
+ scheduleFlush();
}
std::shared_ptr<SalBitmap> SkiaSalGraphicsImpl::getBitmap(long nX, long nY, long nWidth,
@@ -459,6 +496,7 @@ bool SkiaSalGraphicsImpl::drawAlphaBitmap(const SalTwoRect& rPosAry, const SalBi
SkRect::MakeXYWH(rPosAry.mnDestX, rPosAry.mnDestY, rPosAry.mnDestWidth,
rPosAry.mnDestHeight),
nullptr);
+ scheduleFlush();
return true;
}
@@ -495,6 +533,16 @@ bool SkiaSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolygon,
return false;
}
+void SkiaSalGraphicsImpl::scheduleFlush()
+{
+ if (isOffscreen())
+ return;
+ if (!Application::IsInExecute())
+ performFlush(); // otherwise nothing would trigger idle rendering
+ else if (!mFlush->IsActive())
+ mFlush->Start();
+}
+
#ifdef DBG_UTIL
void SkiaSalGraphicsImpl::dump(const char* file) const
{
diff --git a/vcl/skia/x11/gdiimpl.cxx b/vcl/skia/x11/gdiimpl.cxx
index 22608754f5d9..3891de5b059e 100644
--- a/vcl/skia/x11/gdiimpl.cxx
+++ b/vcl/skia/x11/gdiimpl.cxx
@@ -5,13 +5,23 @@
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Some of this code is based on Skia source code, covered by the following
+ * license notice (see readlicense_oo for the full license):
+ *
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
*/
#include <skia/x11/gdiimpl.hxx>
X11SkiaSalGraphicsImpl::X11SkiaSalGraphicsImpl(X11SalGraphics& rParent)
: SkiaSalGraphicsImpl(rParent, rParent.GetGeometryProvider())
- , mrX11Parent(rParent)
+ , mParent(rParent)
+ , mCopyGc(None)
{
}
@@ -20,10 +30,60 @@ X11SkiaSalGraphicsImpl::~X11SkiaSalGraphicsImpl() {}
void X11SkiaSalGraphicsImpl::Init()
{
// The m_pFrame and m_pVDev pointers are updated late in X11
- setProvider(mrX11Parent.GetGeometryProvider());
+ setProvider(mParent.GetGeometryProvider());
SkiaSalGraphicsImpl::Init();
}
+GC X11SkiaSalGraphicsImpl::getGC()
+{
+ if (mCopyGc == None)
+ {
+ XGCValues values;
+ values.graphics_exposures = False;
+ values.subwindow_mode = ClipByChildren;
+ mCopyGc = XCreateGC(mParent.GetXDisplay(), mParent.GetDrawable(),
+ GCGraphicsExposures | GCSubwindowMode, &values);
+ }
+ return mCopyGc;
+}
+
+void X11SkiaSalGraphicsImpl::freeResources()
+{
+ if (mCopyGc != None)
+ {
+ XFreeGC(mParent.GetXDisplay(), mCopyGc);
+ mCopyGc = None;
+ }
+}
+
+void X11SkiaSalGraphicsImpl::performFlush()
+{
+ Display* dpy = mParent.GetXDisplay();
+ Drawable drawable = mParent.GetDrawable();
+ GC gc = getGC();
+ SkPixmap pm;
+ if (!mSurface->peekPixels(&pm))
+ abort();
+ int bitsPerPixel = pm.info().bytesPerPixel() * 8;
+ XImage image;
+ memset(&image, 0, sizeof(image));
+ image.width = pm.width();
+ image.height = pm.height();
+ image.format = ZPixmap;
+ image.data = (char*)pm.addr();
+ image.byte_order = LSBFirst;
+ image.bitmap_unit = bitsPerPixel;
+ image.bitmap_bit_order = LSBFirst;
+ image.bitmap_pad = bitsPerPixel;
+ image.depth = 24;
+ image.bytes_per_line = pm.rowBytes() - pm.width() * pm.info().bytesPerPixel();
+ image.bits_per_pixel = bitsPerPixel;
+ if (!XInitImage(&image))
+ abort();
+ // TODO XPutImage() is somewhat inefficient, XShmPutImage() should be preferred.
+ XPutImage(dpy, drawable, gc, &image, 0, 0, 0, 0, pm.width(), pm.height());
+}
+
void X11SkiaSalGraphicsImpl::FillPixmapFromScreen(X11Pixmap* pPixmap, int nX, int nY)
{
(void)pPixmap;
commit fb2d7a6026f746cc37b34e272426664a3b939fa3
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Wed Oct 2 14:26:52 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Wed Oct 2 15:02:09 2019 +0200
WIP avoid checking Bitmap checksums in a test
TODO: The data is somewhat random, because on all the data in a scanline
is necessarily filled in, but checksumming counts it all. But then,
this should work, as even copying a bitmap should generally just copy
all the data, so why is this broken?
Change-Id: Ie9efa01b191c817543bb79278125e6ddd5b0d83e
diff --git a/vcl/qa/cppunit/svm/svmtest.cxx b/vcl/qa/cppunit/svm/svmtest.cxx
index 00541e7f2b8f..a3ec68f11def 100644
--- a/vcl/qa/cppunit/svm/svmtest.cxx
+++ b/vcl/qa/cppunit/svm/svmtest.cxx
@@ -885,27 +885,13 @@ void SvmTest::checkBitmaps(const GDIMetaFile& rMetaFile)
{
xmlDocPtr pDoc = dumpMeta(rMetaFile);
- OUString crc1 = "b8dee5da";
- OUString crc2 = "281fc589";
- OUString crc3 = "5e01ddcc";
-#if HAVE_FEATURE_OPENGL
- if (OpenGLHelper::isVCLOpenGLEnabled())
- {
- // OpenGL uses a different scaling algorithm and also a different RGB order.
- crc1 = "5e01ddcc";
- crc2 = "281fc589";
- crc3 = "b8dee5da";
- }
-#endif
-
- assertXPathAttrs(pDoc, "/metafile/bmp[1]", {{"x", "1"}, {"y", "2"}, {"crc", crc1}});
+ assertXPathAttrs(pDoc, "/metafile/bmp[1]", {{"x", "1"}, {"y", "2"}});
assertXPathAttrs(pDoc, "/metafile/bmpscale[1]", {
- {"x", "1"}, {"y", "2"}, {"width", "3"}, {"height", "4"}, {"crc", crc2}
+ {"x", "1"}, {"y", "2"}, {"width", "3"}, {"height", "4"}
});
assertXPathAttrs(pDoc, "/metafile/bmpscalepart[1]", {
{"destx", "1"}, {"desty", "2"}, {"destwidth", "3"}, {"destheight", "4"},
- {"srcx", "2"}, {"srcy", "1"}, {"srcwidth", "4"}, {"srcheight", "3"},
- {"crc", crc3}
+ {"srcx", "2"}, {"srcy", "1"}, {"srcwidth", "4"}, {"srcheight", "3"}
});
}
@@ -934,76 +920,43 @@ void SvmTest::testBitmaps()
pVirtualDev->DrawBitmap(Point(1, 2), Size(3, 4), aBitmap2);
pVirtualDev->DrawBitmap(Point(1, 2), Size(3, 4), Point(2, 1), Size(4, 3), aBitmap3);
- checkBitmaps(writeAndRead(aGDIMetaFile, "bitmaps.svm"));
+ GDIMetaFile aReloadedGDIMetaFile = writeAndRead(aGDIMetaFile, "bitmaps.svm");
+ checkBitmaps(aReloadedGDIMetaFile);
+ checkRendering(pVirtualDev, aReloadedGDIMetaFile);
}
void SvmTest::checkBitmapExs(const GDIMetaFile& rMetaFile)
{
xmlDocPtr pDoc = dumpMeta(rMetaFile);
- std::vector<OUString> aExpectedCRC;
-
-#if HAVE_FEATURE_OPENGL
- if (OpenGLHelper::isVCLOpenGLEnabled())
- {
- aExpectedCRC.insert(aExpectedCRC.end(),
- {
- "08feb5d3",
- "281fc589",
- "b8dee5da",
- "4df0e464",
- "7d3a8da3",
- "1426653b",
- "4fd547df",
- "71efc447",
- });
- }
- else
-#endif
- {
- aExpectedCRC.insert(aExpectedCRC.end(),
- {
- "d8377d4f",
- "281fc589",
- "5e01ddcc",
- "4df0e464",
- "34434a50",
- "d1736327",
- "b37875c2",
- "a85d44b8",
- });
- }
-
assertXPathAttrs(pDoc, "/metafile/bmpex[1]", {
- {"x", "1"}, {"y", "1"}, {"crc", aExpectedCRC[0]}, {"transparenttype", "bitmap"}
+ {"x", "1"}, {"y", "1"}, {"transparenttype", "bitmap"}
});
assertXPathAttrs(pDoc, "/metafile/bmpexscale[1]", {
{"x", "5"}, {"y", "0"}, {"width", "2"}, {"height", "3"},
- {"crc", aExpectedCRC[1]}, {"transparenttype", "bitmap"}
+ {"transparenttype", "bitmap"}
});
assertXPathAttrs(pDoc, "/metafile/bmpexscalepart[1]", {
{"destx", "7"}, {"desty", "1"}, {"destwidth", "2"}, {"destheight", "2"},
{"srcx", "0"}, {"srcy", "0"}, {"srcwidth", "3"}, {"srcheight", "4"},
- {"crc", aExpectedCRC[2]}, {"transparenttype", "bitmap"}
+ {"transparenttype", "bitmap"}
});
-#ifndef MACOSX
assertXPathAttrs(pDoc, "/metafile/bmpex[2]", {
- {"x", "6"}, {"y", "6"}, {"crc", aExpectedCRC[3]}, {"transparenttype", "bitmap"}
+ {"x", "6"}, {"y", "6"}, {"transparenttype", "bitmap"}
});
assertXPathAttrs(pDoc, "/metafile/bmpex[3]", {
- {"x", "0"}, {"y", "6"}, {"crc", aExpectedCRC[4]}, {"transparenttype", "bitmap"}
+ {"x", "0"}, {"y", "6"}, {"transparenttype", "bitmap"}
});
assertXPathAttrs(pDoc, "/metafile/bmpex[4]", {
- {"x", "2"}, {"y", "6"}, {"crc", aExpectedCRC[5]}, {"transparenttype", "bitmap"}
+ {"x", "2"}, {"y", "6"}, {"transparenttype", "bitmap"}
});
assertXPathAttrs(pDoc, "/metafile/bmpex[5]", {
- {"x", "0"}, {"y", "8"}, {"crc", aExpectedCRC[6]}, {"transparenttype", "bitmap"}
+ {"x", "0"}, {"y", "8"}, {"transparenttype", "bitmap"}
});
assertXPathAttrs(pDoc, "/metafile/bmpex[6]", {
- {"x", "2"}, {"y", "8"}, {"crc", aExpectedCRC[7]}, {"transparenttype", "bitmap"}
+ {"x", "2"}, {"y", "8"}, {"transparenttype", "bitmap"}
});
-#endif
}
void SvmTest::testBitmapExs()
commit f2aaea720cd5500f553768c50c3d0464625d6082
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Wed Oct 2 14:25:02 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Wed Oct 2 15:02:04 2019 +0200
correct SkPaint usage when painting
Handle SALCOLOR_NONE properly. Also avoid reusing a global SkPaint,
creating a new one is as cheap as making a copy, and this way it's
less error-prone.
Change-Id: I12659cdc58b02f5105029b2b89d1b0c147c7a471
diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx
index 6cc61431bcce..aad4ea3e8454 100644
--- a/vcl/inc/skia/gdiimpl.hxx
+++ b/vcl/inc/skia/gdiimpl.hxx
@@ -25,7 +25,6 @@
#include <salgdiimpl.hxx>
#include <salgeom.hxx>
-#include <SkPaint.h>
#include <SkSurface.h>
class VCL_DLLPUBLIC SkiaSalGraphicsImpl : public SalGraphicsImpl
@@ -213,7 +212,6 @@ private:
SalGeometryProvider* mProvider;
// The Skia surface that is target of all the rendering.
sk_sp<SkSurface> mSurface;
- SkPaint mPaint; // The current paint object (contains paint setup, such as color to use).
vcl::Region mClipRegion;
Color mLineColor;
Color mFillColor;
diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx
index 90cb2bd04f1c..da8a917f50b5 100644
--- a/vcl/skia/gdiimpl.cxx
+++ b/vcl/skia/gdiimpl.cxx
@@ -87,6 +87,7 @@ bool SkiaSalGraphicsImpl::setClipRegion(const vcl::Region& region)
// So handle that by always having the full clip region saved on the stack
// and always go back to that. SkCanvas::restore() only affects the clip
// and the matrix.
+ assert(canvas->getSaveCount() == 2); // = there is just one save()
canvas->restore();
canvas->save();
canvas->clipRegion(toSkRegion(region));
@@ -124,14 +125,18 @@ void SkiaSalGraphicsImpl::SetROPFillColor(SalROPColor nROPColor) { (void)nROPCol
void SkiaSalGraphicsImpl::drawPixel(long nX, long nY)
{
+ if (mLineColor == SALCOLOR_NONE)
+ return;
SkCanvas* canvas = mSurface->getCanvas();
- canvas->drawPoint(nX, nY, mPaint);
+ canvas->drawPoint(nX, nY, SkPaint());
}
void SkiaSalGraphicsImpl::drawPixel(long nX, long nY, Color nColor)
{
+ if (nColor == SALCOLOR_NONE)
+ return;
SkCanvas* canvas = mSurface->getCanvas();
- SkPaint paint(mPaint);
+ SkPaint paint;
paint.setColor(toSkColor(nColor));
// Apparently drawPixel() is actually expected to set the pixel and not draw it.
paint.setBlendMode(SkBlendMode::kSrc); // set as is, including alpha
@@ -140,15 +145,18 @@ void SkiaSalGraphicsImpl::drawPixel(long nX, long nY, Color nColor)
void SkiaSalGraphicsImpl::drawLine(long nX1, long nY1, long nX2, long nY2)
{
+ if (mLineColor == SALCOLOR_NONE)
+ return;
SkCanvas* canvas = mSurface->getCanvas();
- canvas->drawLine(nX1, nY1, nX2, nY2, mPaint);
+ SkPaint paint;
+ paint.setColor(toSkColor(mLineColor));
+ canvas->drawLine(nX1, nY1, nX2, nY2, paint);
}
void SkiaSalGraphicsImpl::drawRect(long nX, long nY, long nWidth, long nHeight)
{
SkCanvas* canvas = mSurface->getCanvas();
- SkPaint paint(mPaint);
- paint.setStrokeWidth(0); // smallest possible
+ SkPaint paint;
if (mFillColor != SALCOLOR_NONE)
{
paint.setColor(toSkColor(mFillColor));
@@ -165,29 +173,47 @@ void SkiaSalGraphicsImpl::drawRect(long nX, long nY, long nWidth, long nHeight)
void SkiaSalGraphicsImpl::drawPolyLine(sal_uInt32 nPoints, const SalPoint* pPtAry)
{
+ if (mLineColor == SALCOLOR_NONE)
+ return;
std::vector<SkPoint> pointVector;
pointVector.reserve(nPoints);
for (sal_uInt32 i = 0; i < nPoints; ++i)
pointVector.emplace_back(SkPoint::Make(pPtAry[i].mnX, pPtAry[i].mnY));
+ SkPaint paint;
+ paint.setColor(toSkColor(mLineColor));
mSurface->getCanvas()->drawPoints(SkCanvas::kLines_PointMode, nPoints, pointVector.data(),
- mPaint);
+ paint);
}
void SkiaSalGraphicsImpl::drawPolygon(sal_uInt32 nPoints, const SalPoint* pPtAry)
{
+ if (mLineColor == SALCOLOR_NONE && mFillColor == SALCOLOR_NONE)
+ return;
std::vector<SkPoint> pointVector;
pointVector.reserve(nPoints);
for (sal_uInt32 i = 0; i < nPoints; ++i)
pointVector.emplace_back(SkPoint::Make(pPtAry[i].mnX, pPtAry[i].mnY));
SkPath path;
- path.addPoly(pointVector.data(), nPoints, true);
- mSurface->getCanvas()->drawPath(path, mPaint);
+ path.addPoly(pointVector.data(), nPoints, false);
+ SkPaint paint;
+ if (mFillColor != SALCOLOR_NONE)
+ {
+ paint.setColor(toSkColor(mFillColor));
+ paint.setStyle(SkPaint::kFill_Style);
+ mSurface->getCanvas()->drawPath(path, paint);
+ }
+ if (mLineColor != SALCOLOR_NONE)
+ {
+ paint.setColor(toSkColor(mLineColor));
+ paint.setStyle(SkPaint::kStroke_Style);
+ mSurface->getCanvas()->drawPath(path, paint);
+ }
}
void SkiaSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pPoints,
PCONSTSALPOINT* pPtAry)
{
- if (SALCOLOR_NONE == mFillColor && SALCOLOR_NONE == mLineColor)
+ if (mLineColor == SALCOLOR_NONE && mFillColor == SALCOLOR_NONE)
return;
std::vector<SkPoint> pointVector;
SkPath path;
@@ -203,12 +229,26 @@ void SkiaSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pP
path.addPoly(pointVector.data(), points, true);
}
}
- mSurface->getCanvas()->drawPath(path, mPaint);
+ SkPaint paint;
+ if (mFillColor != SALCOLOR_NONE)
+ {
+ paint.setColor(toSkColor(mFillColor));
+ paint.setStyle(SkPaint::kFill_Style);
+ mSurface->getCanvas()->drawPath(path, paint);
+ }
+ if (mLineColor != SALCOLOR_NONE)
+ {
+ paint.setColor(toSkColor(mLineColor));
+ paint.setStyle(SkPaint::kStroke_Style);
+ mSurface->getCanvas()->drawPath(path, paint);
+ }
}
bool SkiaSalGraphicsImpl::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectToDevice,
const basegfx::B2DPolyPolygon&, double fTransparency)
{
+ if (mLineColor == SALCOLOR_NONE && mFillColor == SALCOLOR_NONE)
+ return true;
(void)rObjectToDevice;
(void)fTransparency;
return false;
commit 35e12fc828f4e7e573511f974f2fbf9928dea363
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Wed Oct 2 14:12:42 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Wed Oct 2 14:12:42 2019 +0200
flush SkSurface's SkCanvas before getting data from it
It seems this is necessary, otherwise there may be pending
operations.
Change-Id: I93650bbd622d8ab8b6535a950afd2b6ac6a87db7
diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx
index b2341c90632c..90cb2bd04f1c 100644
--- a/vcl/skia/gdiimpl.cxx
+++ b/vcl/skia/gdiimpl.cxx
@@ -350,12 +350,14 @@ void SkiaSalGraphicsImpl::drawMask(const SalTwoRect& rPosAry, const SalBitmap& r
std::shared_ptr<SalBitmap> SkiaSalGraphicsImpl::getBitmap(long nX, long nY, long nWidth,
long nHeight)
{
+ mSurface->getCanvas()->flush();
sk_sp<SkImage> image = mSurface->makeImageSnapshot(SkIRect::MakeXYWH(nX, nY, nWidth, nHeight));
return std::make_shared<SkiaSalBitmap>(*image);
}
Color SkiaSalGraphicsImpl::getPixel(long nX, long nY)
{
+ mSurface->getCanvas()->flush();
// TODO this is presumably slow, and possibly won't work with GPU surfaces
SkBitmap bitmap;
if (!bitmap.tryAllocN32Pixels(GetWidth(), GetHeight()))
@@ -456,6 +458,7 @@ bool SkiaSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolygon,
#ifdef DBG_UTIL
void SkiaSalGraphicsImpl::dump(const char* file) const
{
+ mSurface->getCanvas()->flush();
sk_sp<SkImage> image = mSurface->makeImageSnapshot();
sk_sp<SkData> data = image->encodeToData();
std::ofstream ostream(file, std::ios::binary);
commit 5a35aee8efa7b9443f864b617348ec57f53d952a
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Wed Oct 2 14:11:25 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Wed Oct 2 14:11:25 2019 +0200
implement Skia setClipRegion()
Change-Id: I9e525936bba50b565704ee1b60d7464a7397dc80
diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx
index ba764cbdd0b9..b2341c90632c 100644
--- a/vcl/skia/gdiimpl.cxx
+++ b/vcl/skia/gdiimpl.cxx
@@ -24,6 +24,7 @@
#include <SkCanvas.h>
#include <SkPath.h>
+#include <SkRegion.h>
#ifdef DBG_UTIL
#include <fstream>
@@ -43,26 +44,66 @@ void SkiaSalGraphicsImpl::Init()
{
// TODO
mSurface = SkSurface::MakeRasterN32Premul(GetWidth(), GetHeight());
+ mSurface->getCanvas()->save(); // see SetClipRegion()
+ mClipRegion = vcl::Region(tools::Rectangle(0, 0, GetWidth(), GetHeight()));
}
void SkiaSalGraphicsImpl::DeInit() { mSurface.reset(); }
void SkiaSalGraphicsImpl::freeResources() {}
-const vcl::Region& SkiaSalGraphicsImpl::getClipRegion() const { return mClipRegion; }
+static SkIRect toSkIRect(const tools::Rectangle& rectangle)
+{
+ return SkIRect::MakeXYWH(rectangle.Left(), rectangle.Top(), rectangle.GetWidth(),
+ rectangle.GetHeight());
+}
+
+static SkRegion toSkRegion(const vcl::Region& region)
+{
+ if (region.IsEmpty())
+ return SkRegion();
+ if (region.IsRectangle())
+ return SkRegion(toSkIRect(region.GetBoundRect()));
+ if (!region.HasPolyPolygonOrB2DPolyPolygon())
+ {
+ SkRegion skRegion;
+ RectangleVector rectangles;
+ region.GetRegionRectangles(rectangles);
+ for (const tools::Rectangle& rect : rectangles)
+ skRegion.op(toSkIRect(rect), SkRegion::kUnion_Op);
+ return skRegion;
+ }
+ abort();
+}
bool SkiaSalGraphicsImpl::setClipRegion(const vcl::Region& region)
{
+ if (mClipRegion == region)
+ return true;
mClipRegion = region;
+ SkCanvas* canvas = mSurface->getCanvas();
+ // SkCanvas::clipRegion() can only further reduce the clip region,
+ // but we need to set the given region, which may extend it.
+ // So handle that by always having the full clip region saved on the stack
+ // and always go back to that. SkCanvas::restore() only affects the clip
+ // and the matrix.
+ canvas->restore();
+ canvas->save();
+ canvas->clipRegion(toSkRegion(region));
return true;
}
+void SkiaSalGraphicsImpl::ResetClipRegion()
+{
+ setClipRegion(vcl::Region(tools::Rectangle(0, 0, GetWidth(), GetHeight())));
+}
+
+const vcl::Region& SkiaSalGraphicsImpl::getClipRegion() const { return mClipRegion; }
+
sal_uInt16 SkiaSalGraphicsImpl::GetBitCount() const { return 32; }
long SkiaSalGraphicsImpl::GetGraphicsWidth() const { return GetWidth(); }
-void SkiaSalGraphicsImpl::ResetClipRegion() { mClipRegion.SetEmpty(); }
-
void SkiaSalGraphicsImpl::SetLineColor() { mLineColor = SALCOLOR_NONE; }
void SkiaSalGraphicsImpl::SetLineColor(Color nColor) { mLineColor = nColor; }
commit cb217e60ec27138d0ea711465e4071b7b4a8fcc8
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Wed Oct 2 14:09:13 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Wed Oct 2 14:09:13 2019 +0200
adjust a confusing test
GetPrefSize() at this point is Size(0,0), so the test was testing
topleft corner. And getPixel() takes Y,X , so even then it wasn't
testing the center.
Change-Id: Ie2e489a693fae2b7ea41075ebe6fa3ef405545d5
diff --git a/vcl/qa/cppunit/gen/gen.cxx b/vcl/qa/cppunit/gen/gen.cxx
index 6dfd3da71079..dfcfaa997b80 100644
--- a/vcl/qa/cppunit/gen/gen.cxx
+++ b/vcl/qa/cppunit/gen/gen.cxx
@@ -68,8 +68,8 @@ CPPUNIT_TEST_FIXTURE(GenTest, testTdf121120)
{
Bitmap aBitmap = load("tdf121120.png");
Bitmap::ScopedReadAccess pAccess(aBitmap);
- const Size& rSize = aBitmap.GetPrefSize();
- Color aColor(pAccess->GetPixel(rSize.getWidth() / 2, rSize.getHeight() / 2));
+ const Size& rSize = aBitmap.GetSizePixel();
+ Color aColor(pAccess->GetPixel(rSize.getHeight() / 2, rSize.getWidth() / 2));
// Without the accompanying fix in place, this test would have failed with 'Expected: 255;
// Actual : 1'. I.e. center of the preview (which has the background color) was ~black, not
// white.
commit edfd09bc2975e7d372dac3269d93f93aead8c371
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Tue Oct 1 17:40:50 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Tue Oct 1 17:40:50 2019 +0200
better handling of bit depths in skia code
Change-Id: Ifb3103cc3494bc55a562d4b6a16b59a044782416
diff --git a/external/skia/Library_skia.mk b/external/skia/Library_skia.mk
index 60eb173f9628..6fde1684de44 100644
--- a/external/skia/Library_skia.mk
+++ b/external/skia/Library_skia.mk
@@ -68,7 +68,6 @@ $(eval $(call gb_Library_use_system_win32_libs,skia,\
else
$(eval $(call gb_Library_add_defs,skia,\
-DSK_BUILD_FOR_UNIX \
- -DSK_R32_SHIFT=16 \
))
# TODO
diff --git a/vcl/qa/cppunit/BitmapTest.cxx b/vcl/qa/cppunit/BitmapTest.cxx
index d3ed8c621b99..c920cf463c13 100644
--- a/vcl/qa/cppunit/BitmapTest.cxx
+++ b/vcl/qa/cppunit/BitmapTest.cxx
@@ -403,11 +403,6 @@ void BitmapTest::testConvert()
CPPUNIT_ASSERT_EQUAL(sal_uInt32(30), pReadAccess->GetScanlineSize());
else
#endif
-#if HAVE_FEATURE_SKIA
- if (SkiaHelper::isVCLSkiaEnabled())
- CPPUNIT_ASSERT_EQUAL(sal_uInt32(40), pReadAccess->GetScanlineSize());
- else
-#endif
CPPUNIT_ASSERT_EQUAL(sal_uInt32(32), pReadAccess->GetScanlineSize());
#else
#if defined(_WIN32)
diff --git a/vcl/skia/salbmp.cxx b/vcl/skia/salbmp.cxx
index 5fce7d7073c7..332a5972bab2 100644
--- a/vcl/skia/salbmp.cxx
+++ b/vcl/skia/salbmp.cxx
@@ -37,23 +37,6 @@ SkiaSalBitmap::SkiaSalBitmap() {}
SkiaSalBitmap::~SkiaSalBitmap() {}
-static SkColorType getSkColorType(int bitCount)
-{
- switch (bitCount)
- {
- case 8:
- return kGray_8_SkColorType; // see GetAlphaSkBitmap()
- case 16:
- return kRGB_565_SkColorType;
- case 24:
- return kRGB_888x_SkColorType;
- case 32:
- return kN32_SkColorType;
- default:
- abort();
- }
-}
-
static bool isValidBitCount(sal_uInt16 nBitCount)
{
return (nBitCount == 1) || (nBitCount == 4) || (nBitCount == 8) || (nBitCount == 16)
@@ -76,18 +59,37 @@ bool SkiaSalBitmap::Create(const Size& rSize, sal_uInt16 nBitCount, const Bitmap
Destroy();
if (!isValidBitCount(nBitCount))
return false;
- // Skia does not support paletted images, so convert only types Skia supports.
- if (nBitCount > 8 || (nBitCount == 8 && (!rPal || rPal.IsGreyPalette())))
+ // Skia only supports 8bit gray, 16bit and 32bit formats (e.g. 24bpp is actually stored as 32bpp).
+ // But some of our code accessing the bitmap assumes that when it asked for 24bpp, the format
+ // really will be 24bpp (e.g. the png loader).
+ // TODO what is the performance impact of handling 24bpp ourselves instead of in Skia?
+ SkColorType colorType = kUnknown_SkColorType;
+ switch (nBitCount)
{
- if (!mBitmap.tryAllocPixels(SkImageInfo::Make(
- rSize.Width(), rSize.Height(), getSkColorType(nBitCount), kPremul_SkAlphaType)))
+ case 8:
+ if (rPal.IsGreyPalette()) // see GetAlphaSkBitmap()
+ colorType = kGray_8_SkColorType;
+ break;
+ case 16:
+ colorType = kRGB_565_SkColorType;
+ break;
+ case 32:
+ colorType = kN32_SkColorType;
+ break;
+ default:
+ break;
+ }
+ if (colorType != kUnknown_SkColorType)
+ {
+ if (!mBitmap.tryAllocPixels(
+ SkImageInfo::Make(rSize.Width(), rSize.Height(), colorType, kPremul_SkAlphaType)))
{
return false;
}
}
else
{
- // Paletted images are stored in a buffer and converted as necessary.
+ // Image formats not supported by Skia are stored in a buffer and converted as necessary.
int bitScanlineWidth;
if (o3tl::checked_multiply<int>(rSize.Width(), nBitCount, bitScanlineWidth))
{
@@ -203,8 +205,6 @@ BitmapBuffer* SkiaSalBitmap::AcquireBuffer(BitmapAccessMode nMode)
buffer->mnFormat = ScanlineFormat::N4BitMsnPal;
break;
case 8:
- // TODO or always N8BitPal?
- // buffer->mnFormat = !mPalette ? ScanlineFormat::N8BitTcMask : ScanlineFormat::N8BitPal;
buffer->mnFormat = ScanlineFormat::N8BitPal;
break;
case 16:
@@ -220,8 +220,17 @@ BitmapBuffer* SkiaSalBitmap::AcquireBuffer(BitmapAccessMode nMode)
break;
}
case 24:
- buffer->mnFormat = ScanlineFormat::N24BitTcRgb;
+ {
+// Make the RGB/BGR format match the default Skia 32bpp format, to allow
+// easy conversion later.
+// Use a macro to hide an unreachable code warning.
+#define GET_FORMAT \
+ (kN32_SkColorType == kBGRA_8888_SkColorType ? ScanlineFormat::N24BitTcBgr \
+ : ScanlineFormat::N24BitTcRgb)
+ buffer->mnFormat = GET_FORMAT;
+#undef GET_FORMAT
break;
+ }
case 32:
// TODO are these correct?
buffer->mnFormat = mBitmap.colorType() == kRGBA_8888_SkColorType
@@ -280,15 +289,43 @@ const SkBitmap& SkiaSalBitmap::GetSkBitmap() const
{
if (mBuffer && mBitmap.drawsNothing())
{
- std::unique_ptr<sal_uInt8[]> data = convertDataBitCount(
- mBuffer.get(), mSize.Width(), mSize.Height(), mBitCount, mScanlineSize, mPalette,
- kN32_SkColorType == kBGRA_8888_SkColorType ? BitConvert::BGRA
- : BitConvert::RGBA); // TODO
- if (!const_cast<SkBitmap&>(mBitmap).installPixels(
- SkImageInfo::MakeS32(mSize.Width(), mSize.Height(), kOpaque_SkAlphaType),
- data.release(), mSize.Width() * 4,
- [](void* addr, void*) { delete[] static_cast<sal_uInt8*>(addr); }, nullptr))
- abort();
+ if (mBitCount == 24)
+ {
+ // Convert 24bpp RGB/BGR to 32bpp RGBA/BGRA.
+ std::unique_ptr<sal_uInt8[]> data(new sal_uInt8[mSize.Height() * mSize.Width() * 4]);
+ sal_uInt8* dest = data.get();
+ for (int y = 0; y < mSize.Height(); ++y)
+ {
+ const sal_uInt8* src = mBuffer.get() + mScanlineSize * y;
+ for (int x = 0; x < mSize.Width(); ++x)
+ {
+ *dest++ = *src++;
+ *dest++ = *src++;
+ *dest++ = *src++;
+ *dest++ = 0xff;
+ }
+ }
+ if (!const_cast<SkBitmap&>(mBitmap).installPixels(
+ SkImageInfo::MakeS32(mSize.Width(), mSize.Height(), kOpaque_SkAlphaType),
+ data.release(), mSize.Width() * 4,
+ [](void* addr, void*) { delete[] static_cast<sal_uInt8*>(addr); }, nullptr))
+ abort();
+ }
+ else
+ {
+// Use a macro to hide an unreachable code warning.
+#define GET_FORMAT \
+ (kN32_SkColorType == kBGRA_8888_SkColorType ? BitConvert::BGRA : BitConvert::RGBA)
+ std::unique_ptr<sal_uInt8[]> data
+ = convertDataBitCount(mBuffer.get(), mSize.Width(), mSize.Height(), mBitCount,
+ mScanlineSize, mPalette, GET_FORMAT);
+#undef GET_FORMAT
+ if (!const_cast<SkBitmap&>(mBitmap).installPixels(
+ SkImageInfo::MakeS32(mSize.Width(), mSize.Height(), kOpaque_SkAlphaType),
+ data.release(), mSize.Width() * 4,
+ [](void* addr, void*) { delete[] static_cast<sal_uInt8*>(addr); }, nullptr))
+ abort();
+ }
}
return mBitmap;
}
commit 0d65084083fabbcac3c8c3ebe22caf199afcb227
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Tue Oct 1 17:38:35 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Tue Oct 1 17:38:35 2019 +0200
fix skia bitmap copying
Change-Id: I6eef23a0feaf577e1007ef197fc2fbaf138994b0
diff --git a/vcl/skia/salbmp.cxx b/vcl/skia/salbmp.cxx
index 9eba386e6b95..5fce7d7073c7 100644
--- a/vcl/skia/salbmp.cxx
+++ b/vcl/skia/salbmp.cxx
@@ -134,7 +134,7 @@ bool SkiaSalBitmap::Create(const SalBitmap& rSalBmp, sal_uInt16 nNewBitCount)
mPalette = src.mPalette;
mBitCount = src.mBitCount;
mSize = src.mSize;
- if (mBuffer != nullptr)
+ if (src.mBuffer != nullptr)
{
sal_uInt32 allocate = src.mScanlineSize * src.mSize.Height();
#ifdef DBG_UTIL
commit 400a217234c8223fa6bf28e01b79dca38fb6bc93
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Tue Oct 1 17:37:14 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Tue Oct 1 17:37:14 2019 +0200
implement skia copyBits()
Change-Id: I6706de1daaac60ce493b60af129e7a8e92c73bed
diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx
index 190fa19d32ad..6cc61431bcce 100644
--- a/vcl/inc/skia/gdiimpl.hxx
+++ b/vcl/inc/skia/gdiimpl.hxx
@@ -114,6 +114,8 @@ public:
virtual void copyArea(long nDestX, long nDestY, long nSrcX, long nSrcY, long nSrcWidth,
long nSrcHeight, bool bWindowInvalidate) override;
+ virtual void copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics) override;
+
virtual bool blendBitmap(const SalTwoRect&, const SalBitmap& rBitmap) override;
virtual bool blendAlphaBitmap(const SalTwoRect&, const SalBitmap& rSrcBitmap,
diff --git a/vcl/inc/skia/x11/gdiimpl.hxx b/vcl/inc/skia/x11/gdiimpl.hxx
index 1c6be63c0eca..670c1117d32d 100644
--- a/vcl/inc/skia/x11/gdiimpl.hxx
+++ b/vcl/inc/skia/x11/gdiimpl.hxx
@@ -26,15 +26,11 @@ public:
virtual ~X11SkiaSalGraphicsImpl() override;
public:
- // implementation of X11GraphicsImpl
-
- virtual void copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics) override;
-
virtual void Init() override;
+ // implementation of X11GraphicsImpl
void FillPixmapFromScreen(X11Pixmap* pPixmap, int nX, int nY) override;
bool RenderPixmapToScreen(X11Pixmap* pPixmap, X11Pixmap* pMask, int nX, int nY) override;
-
bool RenderAndCacheNativeControl(X11Pixmap* pPixmap, X11Pixmap* pMask, int nX, int nY,
ControlCacheKey& aControlCacheKey) override;
bool TryRenderCachedNativeControl(ControlCacheKey& rControlCacheKey, int nX, int nY) override;
diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx
index 7141eab1cba5..ba764cbdd0b9 100644
--- a/vcl/skia/gdiimpl.cxx
+++ b/vcl/skia/gdiimpl.cxx
@@ -19,6 +19,7 @@
#include <skia/gdiimpl.hxx>
+#include <salgdi.hxx>
#include <skia/salbmp.hxx>
#include <SkCanvas.h>
@@ -226,6 +227,26 @@ void SkiaSalGraphicsImpl::copyArea(long nDestX, long nDestY, long nSrcX, long nS
mSurface->getCanvas()->drawImage(image, nDestX, nDestY);
}
+void SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics)
+{
+ SkiaSalGraphicsImpl* src;
+ if (pSrcGraphics)
+ {
+ assert(dynamic_cast<SkiaSalGraphicsImpl*>(pSrcGraphics->GetImpl()));
+ src = static_cast<SkiaSalGraphicsImpl*>(pSrcGraphics->GetImpl());
+ }
+ else
+ src = this;
+ sk_sp<SkImage> image = src->mSurface->makeImageSnapshot(
+ SkIRect::MakeXYWH(rPosAry.mnSrcX, rPosAry.mnSrcY, rPosAry.mnSrcWidth, rPosAry.mnSrcHeight));
+ // TODO makeNonTextureImage() ?
+ mSurface->getCanvas()->drawImageRect(image,
+ SkRect::MakeXYWH(rPosAry.mnDestX, rPosAry.mnDestY,
+ rPosAry.mnDestWidth,
+ rPosAry.mnDestHeight),
+ nullptr);
+}
+
bool SkiaSalGraphicsImpl::blendBitmap(const SalTwoRect&, const SalBitmap& rBitmap)
{
(void)rBitmap;
diff --git a/vcl/skia/x11/gdiimpl.cxx b/vcl/skia/x11/gdiimpl.cxx
index aaa5b65f169a..22608754f5d9 100644
--- a/vcl/skia/x11/gdiimpl.cxx
+++ b/vcl/skia/x11/gdiimpl.cxx
@@ -24,12 +24,6 @@ void X11SkiaSalGraphicsImpl::Init()
SkiaSalGraphicsImpl::Init();
}
-void X11SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics)
-{
- (void)rPosAry;
- (void)pSrcGraphics;
-}
-
void X11SkiaSalGraphicsImpl::FillPixmapFromScreen(X11Pixmap* pPixmap, int nX, int nY)
{
(void)pPixmap;
commit cdd4714b322caf6df9c864eb89d12261037bf83a
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Mon Sep 30 17:11:32 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Mon Sep 30 17:11:32 2019 +0200
fix test for CanvasBitmap not handling N32BitTcMask bpp properly
Change-Id: Ic331d33e0f0feca1fde4425fdb4106b1a769194d
diff --git a/vcl/qa/cppunit/canvasbitmaptest.cxx b/vcl/qa/cppunit/canvasbitmaptest.cxx
index a51facbee8a8..5d9c826c3797 100644
--- a/vcl/qa/cppunit/canvasbitmaptest.cxx
+++ b/vcl/qa/cppunit/canvasbitmaptest.cxx
@@ -84,10 +84,13 @@ void checkCanvasBitmap( const rtl::Reference<VclCanvasBitmap>& xBmp,
BitmapEx aContainedBmpEx( xBmp->getBitmapEx() );
Bitmap aContainedBmp( aContainedBmpEx.GetBitmap() );
int nDepth = nOriginalDepth;
+ int extraBpp = 0;
{
Bitmap::ScopedReadAccess pAcc( aContainedBmp );
nDepth = pAcc->GetBitCount();
+ if( pAcc->GetScanlineFormat() == ScanlineFormat::N32BitTcMask )
+ extraBpp = 8; // the format has 8 unused bits
}
CPPUNIT_ASSERT_EQUAL_MESSAGE( "Original bitmap size not (200,200)",
@@ -106,7 +109,7 @@ void checkCanvasBitmap( const rtl::Reference<VclCanvasBitmap>& xBmp,
uno::Sequence<sal_Int8> aPixelData = xBmp->getData(aLayout, geometry::IntegerRectangle2D(0,0,1,1));
const sal_Int32 nExpectedBitsPerPixel(
- aContainedBmpEx.IsTransparent() ? std::max(8,nDepth)+8 : nDepth);
+ (aContainedBmpEx.IsTransparent() ? std::max(8,nDepth)+8 : nDepth) + extraBpp);
CPPUNIT_ASSERT_EQUAL_MESSAGE( "# scanlines not 1",
static_cast<sal_Int32>(1), aLayout.ScanLines);
CPPUNIT_ASSERT_EQUAL_MESSAGE( "# scanline bytes mismatch",
commit 944c178571b3a8a83f4e6229f85c5bb07b584e1e
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Mon Sep 30 13:29:52 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Mon Sep 30 13:29:52 2019 +0200
WIP link to libclang-cpp
Change-Id: I44e014d35100f6135d71ffa247c5e4e3d554fce0
diff --git a/compilerplugins/Makefile-clang.mk b/compilerplugins/Makefile-clang.mk
index d2c07fd06dba..8c1d3719b426 100644
--- a/compilerplugins/Makefile-clang.mk
+++ b/compilerplugins/Makefile-clang.mk
@@ -204,8 +204,7 @@ $(CLANGINDIR)/sharedvisitor/sharedvisitor.cxx: $(CLANGOUTDIR)/sharedvisitor/gene
$(shell grep -l "LO_CLANG_SHARED_PLUGINS" $(CLANGINDIR)/*.cxx) \
> $(CLANGINDIR)/sharedvisitor/sharedvisitor.cxx
-CLANGTOOLLIBS = -lclangTooling -lclangDriver -lclangFrontend -lclangParse -lclangSema -lclangEdit -lclangAnalysis \
- -lclangAST -lclangLex -lclangSerialization -lclangBasic $(shell $(LLVMCONFIG) --ldflags --libs --system-libs)
+CLANGTOOLLIBS = -lclang-cpp $(shell $(LLVMCONFIG) --ldflags --libs --system-libs)
# Path to the clang system headers (no idea if there's a better way to get it).
CLANGTOOLDEFS = -DCLANGSYSINCLUDE=$(shell $(LLVMCONFIG) --libdir)/clang/$(shell $(LLVMCONFIG) --version | sed 's/svn//')/include
ifneq ($(filter-out MACOSX WNT,$(OS)),)
commit 7f8e9ad94d3c1b2eb64acf3f8d14f8fc3ad46fe0
Author: Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Thu Sep 26 11:38:38 2019 +0200
Commit: Luboš Luňák <l.lunak at collabora.com>
CommitDate: Thu Sep 26 16:06:26 2019 +0200
make skia also build on Windows
Change-Id: I21ee875f9e16ef42b5f1cc78b090f782ed57f525
diff --git a/bin/update_pch b/bin/update_pch
index 5464896d499b..af3e16de9640 100755
--- a/bin/update_pch
+++ b/bin/update_pch
@@ -437,6 +437,12 @@ def filter_ignore(line, module):
ignore_list += [
'skcms_internal.h',
'zlib.h', # causes crc32 conflict
+ 'dirent.h', # unix-specific
+ 'pthread.h',
+ 'unistd.h',
+ 'ft2build.h',
+ 'fontconfig/fontconfig.h',
+ 'GL/glx.h'
]
for i in ignore_list:
diff --git a/external/skia/Library_skia.mk b/external/skia/Library_skia.mk
index c06ced56bad4..60eb173f9628 100644
--- a/external/skia/Library_skia.mk
+++ b/external/skia/Library_skia.mk
@@ -15,42 +15,74 @@ $(eval $(call gb_Library_use_unpacked,skia,skia))
$(eval $(call gb_Library_set_precompiled_header,skia,$(SRCDIR)/external/skia/inc/pch/precompiled_skia))
+# TODO
$(eval $(call gb_Library_add_defs,skia,\
- -DSK_GAMMA_SRGB \
- -DSK_GAMMA_APPLY_TO_A8 \
- -DSK_ALLOW_STATIC_GLOBAL_INITIALIZERS=1 \
- -DSK_SCALAR_IS_FLOAT \
- -DSK_CAN_USE_FLOAT \
- -DSK_BUILD_FOR_UNIX \
- -DSK_USE_POSIX_THREADS \
- -DSK_RELEASE \
- -DNDEBUG \
+ -DSK_SUPPORT_GPU=1 \
+ -DSKIA_DLL \
+ -DSKIA_IMPLEMENTATION=1 \
+ -DSK_GL=1 \
+ -DSK_VULKAN=1 \
-DSKIA_DLL \
-DSK_HAS_JPEG_LIBRARY=1 \
-DSK_HAS_PNG_LIBRARY=1 \
+ -DSK_GAMMA_APPLY_TO_A8 \
))
+ifneq (,$(gb_ENABLE_DBGUTIL))
$(eval $(call gb_Library_add_defs,skia,\
-DSK_DEBUG \
- -USK_RELEASE \
- -UNDEBUG \
+ -DSK_ENABLE_DUMP_GPU \
+))
+else
+$(eval $(call gb_Library_add_defs,skia,\
+ -DSK_RELEASE \
+ -DNDEBUG \
))
+endif
+ifeq ($(OS),WNT)
# TODO
$(eval $(call gb_Library_add_defs,skia,\
- -DSK_USER_CONFIG_HEADER="<$(SRCDIR)/external/skia/configs/SkUserConfig.h>" \
+ -DSK_BUILD_FOR_WIN \
+ -DSK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSSE3 \
))
-# TODO
+$(eval $(call gb_Library_add_cxxflags,skia, \
+ -arch:SSE2 \
+))
+ifneq ($(gb_ENABLE_PCH),)
+$(eval $(call gb_Library_add_cxxflags,skia, \
+ -FIsrc/utils/win/SkDWriteNTDDI_VERSION.h \
+))
+endif
+
+$(eval $(call gb_Library_use_system_win32_libs,skia,\
+ fontsub \
+ ole32 \
+ oleaut32 \
+ user32 \
+ usp10 \
+ opengl32 \
+ gdi32 \
+))
+else
$(eval $(call gb_Library_add_defs,skia,\
- -DSK_SUPPORT_GPU=1 \
- -DSK_GL=1 \
- -DSK_VULKAN=1 \
+ -DSK_BUILD_FOR_UNIX \
+ -DSK_R32_SHIFT=16 \
+))
+
+# TODO
+$(eval $(call gb_Library_add_cxxflags,skia, \
+ -mssse3 \
))
$(eval $(call gb_Library_use_externals,skia,\
freetype \
fontconfig \
+))
+endif
+
+$(eval $(call gb_Library_use_externals,skia,\
zlib \
libjpeg \
libpng \
@@ -68,15 +100,12 @@ $(eval $(call gb_Library_use_libraries,skia,\
sal \
))
-$(eval $(call gb_Library_add_cxxflags,skia, \
- -mssse3 \
-))
-
$(eval $(call gb_Library_set_include,skia,\
$$(INCLUDE) \
-I$(call gb_UnpackedTarball_get_dir,skia) \
-I$(call gb_UnpackedTarball_get_dir,skia)/include/third_party/skcms/ \
-I$(call gb_UnpackedTarball_get_dir,skia)/third_party/vulkanmemoryallocator/ \
+ -I$(call gb_UnpackedTarball_get_dir,skia)/include/third_party/vulkan/ \
))
$(eval $(call gb_Library_add_exception_objects,skia,\
@@ -343,7 +372,6 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\
UnpackedTarball/skia/src/effects/SkTrimPathEffect \
UnpackedTarball/skia/src/effects/Sk1DPathEffect \
UnpackedTarball/skia/src/effects/Sk2DPathEffect \
- UnpackedTarball/skia/src/fonts/SkFontMgr_indirect \
UnpackedTarball/skia/src/fonts/SkRemotableFontMgr \
UnpackedTarball/skia/src/image/SkImage \
UnpackedTarball/skia/src/image/SkImage_Lazy \
@@ -491,26 +519,6 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\
))
$(eval $(call gb_Library_add_generated_exception_objects,skia,\
- UnpackedTarball/skia/src/opts/SkOpts_avx \
- UnpackedTarball/skia/src/opts/SkOpts_crc32 \
- UnpackedTarball/skia/src/opts/SkOpts_hsw \
- UnpackedTarball/skia/src/opts/SkOpts_sse41 \
- UnpackedTarball/skia/src/opts/SkOpts_sse42 \
- UnpackedTarball/skia/src/opts/SkOpts_ssse3 \
- UnpackedTarball/skia/src/ports/SkDebug_stdio \
- UnpackedTarball/skia/src/ports/SkGlobalInitialization_default \
- UnpackedTarball/skia/src/ports/SkFontHost_FreeType_common \
- UnpackedTarball/skia/src/ports/SkFontHost_FreeType \
- UnpackedTarball/skia/src/ports/SkFontMgr_fontconfig \
- UnpackedTarball/skia/src/ports/SkFontMgr_fontconfig_factory \
- UnpackedTarball/skia/src/ports/SkImageGenerator_none \
- UnpackedTarball/skia/src/ports/SkOSFile_posix \
- UnpackedTarball/skia/src/ports/SkOSFile_stdio \
- UnpackedTarball/skia/src/ports/SkOSLibrary_posix \
- UnpackedTarball/skia/src/ports/SkTLS_pthread \
-))
-
-$(eval $(call gb_Library_add_generated_exception_objects,skia,\
UnpackedTarball/skia/src/core/SkGpuBlurUtils \
UnpackedTarball/skia/src/gpu/ccpr/GrCCAtlas \
UnpackedTarball/skia/src/gpu/ccpr/GrCCClipPath \
@@ -769,7 +777,6 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\
UnpackedTarball/skia/src/image/SkImage_Gpu \
UnpackedTarball/skia/src/image/SkImage_GpuYUVA \
UnpackedTarball/skia/src/image/SkSurface_Gpu \
- UnpackedTarball/skia/src/gpu/gl/glx/GrGLMakeNativeInterface_glx \
UnpackedTarball/skia/src/gpu/vk/GrVkAMDMemoryAllocator \
UnpackedTarball/skia/src/gpu/vk/GrVkBuffer \
UnpackedTarball/skia/src/gpu/vk/GrVkBufferView \
@@ -813,6 +820,58 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\
UnpackedTarball/skia/src/gpu/vk/GrVkVertexBuffer \
))
+$(eval $(call gb_Library_add_generated_exception_objects,skia,\
+ UnpackedTarball/skia/src/opts/SkOpts_avx \
+ UnpackedTarball/skia/src/opts/SkOpts_crc32 \
+ UnpackedTarball/skia/src/opts/SkOpts_hsw \
+ UnpackedTarball/skia/src/opts/SkOpts_sse41 \
+ UnpackedTarball/skia/src/opts/SkOpts_sse42 \
+ UnpackedTarball/skia/src/opts/SkOpts_ssse3 \
+ UnpackedTarball/skia/src/ports/SkGlobalInitialization_default \
+ UnpackedTarball/skia/src/ports/SkImageGenerator_none \
+ UnpackedTarball/skia/src/ports/SkOSFile_stdio \
+))
+
+ifeq ($(OS),WNT)
+$(eval $(call gb_Library_add_generated_exception_objects,skia,\
+ UnpackedTarball/skia/src/gpu/gl/win/GrGLMakeNativeInterface_win \
+ UnpackedTarball/skia/src/ports/SkDebug_win \
+ UnpackedTarball/skia/src/ports/SkFontHost_win \
+ UnpackedTarball/skia/src/fonts/SkFontMgr_indirect \
+ UnpackedTarball/skia/src/ports/SkFontMgr_win_dw \
+ UnpackedTarball/skia/src/ports/SkFontMgr_win_dw_factory \
+ UnpackedTarball/skia/src/ports/SkOSFile_win \
+ UnpackedTarball/skia/src/ports/SkOSLibrary_win \
+ UnpackedTarball/skia/src/ports/SkScalerContext_win_dw \
+ UnpackedTarball/skia/src/ports/SkTLS_win \
+ UnpackedTarball/skia/src/ports/SkTypeface_win_dw \
+ UnpackedTarball/skia/src/utils/win/SkAutoCoInitialize \
+ UnpackedTarball/skia/src/utils/win/SkDWrite \
+ UnpackedTarball/skia/src/utils/win/SkDWriteFontFileStream \
+ UnpackedTarball/skia/src/utils/win/SkDWriteGeometrySink \
+ UnpackedTarball/skia/src/utils/win/SkHRESULT \
+ UnpackedTarball/skia/src/utils/win/SkIStream \
+ UnpackedTarball/skia/src/utils/win/SkWGL_win \
+))
+else
+$(eval $(call gb_Library_add_generated_exception_objects,skia,\
+ UnpackedTarball/skia/src/gpu/gl/glx/GrGLMakeNativeInterface_glx \
+ UnpackedTarball/skia/src/ports/SkDebug_stdio \
+ UnpackedTarball/skia/src/ports/SkFontConfigInterface \
+ UnpackedTarball/skia/src/ports/SkFontConfigInterface_direct \
+ UnpackedTarball/skia/src/ports/SkFontConfigInterface_direct_factory \
+ UnpackedTarball/skia/src/ports/SkFontHost_FreeType_common \
+ UnpackedTarball/skia/src/ports/SkFontHost_FreeType \
+ UnpackedTarball/skia/src/ports/SkFontMgr_FontConfigInterface \
+ UnpackedTarball/skia/src/ports/SkFontMgr_fontconfig \
+ UnpackedTarball/skia/src/ports/SkFontMgr_fontconfig_factory \
+ UnpackedTarball/skia/src/ports/SkOSFile_posix \
+ UnpackedTarball/skia/src/ports/SkOSLibrary_posix \
+ UnpackedTarball/skia/src/ports/SkTLS_pthread \
+))
+endif
+
+
# UnpackedTarball/skia/src/android/SkAndroidFrameworkUtils \
# UnpackedTarball/skia/src/android/SkAnimatedImage \
# UnpackedTarball/skia/src/android/SkBitmapRegionCodec \
@@ -829,16 +888,13 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\
# UnpackedTarball/skia/src/gpu/gl/glfw/GrGLMakeNativeInterface_glfw \
# UnpackedTarball/skia/src/gpu/gl/iOS/GrGLMakeNativeInterface_iOS \
# UnpackedTarball/skia/src/gpu/gl/mac/GrGLMakeNativeInterface_mac \
-# UnpackedTarball/skia/src/gpu/gl/win/GrGLMakeNativeInterface_win \
# UnpackedTarball/skia/src/ports/SkDebug_android \
-# UnpackedTarball/skia/src/ports/SkDebug_win \
# UnpackedTarball/skia/src/ports/SkDiscardableMemory_none \
# UnpackedTarball/skia/src/ports/SkFontConfigInterface \
# UnpackedTarball/skia/src/ports/SkFontConfigInterface_direct \
# UnpackedTarball/skia/src/ports/SkFontConfigInterface_direct_factory \
# UnpackedTarball/skia/src/ports/SkFontHost_mac \
-# UnpackedTarball/skia/src/ports/SkFontHost_win \
# UnpackedTarball/skia/src/ports/SkFontMgr_android \
# UnpackedTarball/skia/src/ports/SkFontMgr_android_factory \
# UnpackedTarball/skia/src/ports/SkFontMgr_android_parser \
@@ -853,22 +909,15 @@ $(eval $(call gb_Library_add_generated_exception_objects,skia,\
# UnpackedTarball/skia/src/ports/SkFontMgr_FontConfigInterface \
# UnpackedTarball/skia/src/ports/SkFontMgr_FontConfigInterface_factory \
# UnpackedTarball/skia/src/ports/SkFontMgr_fuchsia \
-# UnpackedTarball/skia/src/ports/SkFontMgr_win_dw \
-# UnpackedTarball/skia/src/ports/SkFontMgr_win_dw_factory \
# UnpackedTarball/skia/src/ports/SkImageEncoder_CG \
# UnpackedTarball/skia/src/ports/SkImageEncoder_WIC \
# UnpackedTarball/skia/src/ports/SkImageGeneratorCG \
-# UnpackedTarball/skia/src/ports/SkImageGenerator_skia \
# UnpackedTarball/skia/src/ports/SkImageGeneratorWIC \
+# UnpackedTarball/skia/src/ports/SkImageGenerator_skia \
# UnpackedTarball/skia/src/ports/SkMemory_malloc \
# UnpackedTarball/skia/src/ports/SkMemory_mozalloc \
-# UnpackedTarball/skia/src/ports/SkOSFile_win \
-# UnpackedTarball/skia/src/ports/SkOSLibrary_win \
# UnpackedTarball/skia/src/ports/SkRemotableFontMgr_win_dw \
-# UnpackedTarball/skia/src/ports/SkScalerContext_win_dw \
# UnpackedTarball/skia/src/ports/SkTLS_none \
-# UnpackedTarball/skia/src/ports/SkTLS_win \
-# UnpackedTarball/skia/src/ports/SkTypeface_win_dw \
# UnpackedTarball/skia/src/utils/mac/SkCreateCGImageRef \
# UnpackedTarball/skia/src/utils/mac/SkStream_mac \
diff --git a/external/skia/UnpackedTarball_skia.mk b/external/skia/UnpackedTarball_skia.mk
index 2221e5a00ebb..7ae3bf4427fc 100644
--- a/external/skia/UnpackedTarball_skia.mk
+++ b/external/skia/UnpackedTarball_skia.mk
@@ -11,7 +11,8 @@ $(eval $(call gb_UnpackedTarball_UnpackedTarball,skia))
$(eval $(call gb_UnpackedTarball_set_tarball,skia,$(SKIA_TARBALL)))
-skia_patches := lerp.patch
+# TODO
+skia_patches := lerp.patch fix-pch.patch fix-ddi.patch
$(eval $(call gb_UnpackedTarball_set_patchlevel,skia,1))
diff --git a/external/skia/configs/SkUserConfig.h b/external/skia/configs/SkUserConfig.h
deleted file mode 100644
index 19372a4621ba..000000000000
--- a/external/skia/configs/SkUserConfig.h
+++ /dev/null
@@ -1,191 +0,0 @@
-
-/*
- * Copyright 2006 The Android Open Source Project
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkUserConfig_DEFINED
-#define SkUserConfig_DEFINED
-
-/* SkTypes.h, the root of the public header files, does the following trick:
-
- #include "SkPreConfig.h"
- #include "SkUserConfig.h"
- #include "SkPostConfig.h"
-
- SkPreConfig.h runs first, and it is responsible for initializing certain
- skia defines.
-
- SkPostConfig.h runs last, and its job is to just check that the final
- defines are consistent (i.e. that we don't have mutually conflicting
- defines).
-
- SkUserConfig.h (this file) runs in the middle. It gets to change or augment
- the list of flags initially set in preconfig, and then postconfig checks
- that everything still makes sense.
-
- Below are optional defines that add, subtract, or change default behavior
- in Skia. Your port can locally edit this file to enable/disable flags as
- you choose, or these can be delared on your command line (i.e. -Dfoo).
-
- By default, this include file will always default to having all of the flags
- commented out, so including it will have no effect.
-*/
-
-///////////////////////////////////////////////////////////////////////////////
-
-/* Scalars (the fractional value type in skia) can be implemented either as
- floats or 16.16 integers (fixed). Exactly one of these two symbols must be
- defined.
-*/
-#define SK_SCALAR_IS_FLOAT
-//#define SK_SCALAR_IS_FIXED
-
-/* For some performance-critical scalar operations, skia will optionally work
- around the standard float operators if it knows that the CPU does not have
- native support for floats. If your environment uses software floating point,
- define this flag.
- */
-//#define SK_SOFTWARE_FLOAT
-
-/* Skia has lots of debug-only code. Often this is just null checks or other
- parameter checking, but sometimes it can be quite intrusive (e.g. check that
- each 32bit pixel is in premultiplied form). This code can be very useful
- during development, but will slow things down in a shipping product.
-
- By default, these mutually exclusive flags are defined in SkPreConfig.h,
- based on the presence or absence of NDEBUG, but that decision can be changed
- here.
- */
-//#define SK_DEBUG
-//#define SK_RELEASE
-
-/* Skia has certain debug-only code that is extremely intensive even for debug
- builds. This code is useful for diagnosing specific issues, but is not
- generally applicable, therefore it must be explicitly enabled to avoid
- the performance impact. By default these flags are undefined, but can be
- enabled by uncommenting them below.
- */
-//#define SK_DEBUG_GLYPH_CACHE
-//#define SK_DEBUG_PATH
-
-/* To assist debugging, Skia provides an instance counting utility in
- include/core/SkInstCount.h. This flag turns on and off that utility to
- allow instance count tracking in either debug or release builds. By
- default it is enabled in debug but disabled in release.
- */
-//#define SK_ENABLE_INST_COUNT 1
-
-/* If, in debugging mode, Skia needs to stop (presumably to invoke a debugger)
- it will call SK_CRASH(). If this is not defined it, it is defined in
- SkPostConfig.h to write to an illegal address
- */
-//#define SK_CRASH() *(int *)(uintptr_t)0 = 0
-
-/* preconfig will have attempted to determine the endianness of the system,
- but you can change these mutually exclusive flags here.
- */
-//#define SK_CPU_BENDIAN
-//#define SK_CPU_LENDIAN
-
-/* Most compilers use the same bit endianness for bit flags in a byte as the
- system byte endianness, and this is the default. If for some reason this
- needs to be overridden, specify which of the mutually exclusive flags to
- use. For example, some atom processors in certain configurations have big
- endian byte order but little endian bit orders.
-*/
-//#define SK_UINT8_BITFIELD_BENDIAN
-//#define SK_UINT8_BITFIELD_LENDIAN
-
-/* Some compilers don't support long long for 64bit integers. If yours does
- not, define this to the appropriate type.
- */
-//#define SkLONGLONG int64_t
-
-/* To write debug messages to a console, skia will call SkDebugf(...) following
- printf conventions (e.g. const char* format, ...). If you want to redirect
- this to something other than printf, define yours here
- */
-//#define SkDebugf(...) MyFunction(__VA_ARGS__)
-
-/*
- * To specify a different default font cache limit, define this. If this is
- * undefined, skia will use a built-in value.
- */
-//#define SK_DEFAULT_FONT_CACHE_LIMIT (1024 * 1024)
-
-/* If defined, use CoreText instead of ATSUI on OS X.
-*/
-//#define SK_USE_MAC_CORE_TEXT
-
-/* If zlib is available and you want to support the flate compression
- algorithm (used in PDF generation), define SK_ZLIB_INCLUDE to be the
- include path. Alternatively, define SK_SYSTEM_ZLIB to use the system zlib
- library specified as "#include <zlib.h>".
- */
-//#define SK_ZLIB_INCLUDE <zlib.h>
-#define SK_SYSTEM_ZLIB
-
-/* Define this to allow PDF scalars above 32k. The PDF/A spec doesn't allow
- them, but modern PDF interpreters should handle them just fine.
- */
-#define SK_ALLOW_LARGE_PDF_SCALARS
-
-/* Define this to provide font subsetter in PDF generation.
- */
-//#define SK_SFNTLY_SUBSETTER "sfntly/subsetter/font_subsetter.h"
-
-/* Define this to remove dimension checks on bitmaps. Not all blits will be
- correct yet, so this is mostly for debugging the implementation.
- */
-#define SK_ALLOW_OVER_32K_BITMAPS
-
-/**
- * To revert to int-only srcrect behavior in drawBitmapRect(ToRect),
- * define this symbol.
- */
-//#define SK_SUPPORT_INT_SRCRECT_DRAWBITMAPRECT
-
-/* Define this to set the upper limit for text to support LCD. Values that
- are very large increase the cost in the font cache and draw slower, without
- improving readability. If this is undefined, Skia will use its default
- value (e.g. 48)
- */
-//#define SK_MAX_SIZE_FOR_LCDTEXT 48
-
-/* If SK_DEBUG is defined, then you can optionally define SK_SUPPORT_UNITTEST
- which will run additional self-tests at startup. These can take a long time,
- so this flag is optional.
- */
-#ifdef SK_DEBUG
-//#define SK_SUPPORT_UNITTEST
-#endif
-
-/* If your system embeds skia and has complex event logging, define this
- symbol to name a file that maps the following macros to your system's
- equivalents:
- SK_TRACE_EVENT0(event)
- SK_TRACE_EVENT1(event, name1, value1)
- SK_TRACE_EVENT2(event, name1, value1, name2, value2)
- src/utils/SkDebugTrace.h has a trivial implementation that writes to
- the debug output stream. If SK_USER_TRACE_INCLUDE_FILE is not defined,
- SkTrace.h will define the above three macros to do nothing.
-*/
-//#undef SK_USER_TRACE_INCLUDE_FILE
-
-/* Change the kN32_SkColorType ordering to BGRA to work in X windows.
- */
-//#define SK_R32_SHIFT 16
-
-/* Determines whether to build code that supports the GPU backend. Some classes
- that are not GPU-specific, such as SkShader subclasses, have optional code
- that is used allows them to interact with the GPU backend. If you'd like to
- omit this code set SK_SUPPORT_GPU to 0. This also allows you to omit the gpu
- directories from your include search path when you're not building the GPU
- backend. Defaults to 1 (build the GPU code).
- */
-//#define SK_SUPPORT_GPU 1
-
-#endif
diff --git a/external/skia/fix-ddi.patch b/external/skia/fix-ddi.patch
new file mode 100644
index 000000000000..f827c1d69553
--- /dev/null
+++ b/external/skia/fix-ddi.patch
@@ -0,0 +1,9 @@
+--- skia/src/utils/win/SkDWriteNTDDI_VERSION.h.sav 2019-08-15 21:59:46.000000000 +0200
++++ skia/src/utils/win/SkDWriteNTDDI_VERSION.h 2019-09-26 15:30:36.395622200 +0200
+@@ -28,4 +28,6 @@
+ # endif
+ #endif
+
++#define NTDDI_VERSION 0x0A000002 // NTDDI_WIN10_RS1
++
+ #endif
diff --git a/external/skia/fix-pch.patch b/external/skia/fix-pch.patch
new file mode 100644
index 000000000000..9078a8a12e51
--- /dev/null
+++ b/external/skia/fix-pch.patch
@@ -0,0 +1,46 @@
+--- skia/src/utils/Sk3D.cpp.sav 2019-08-15 21:59:46.324369467 +0200
++++ skia/src/utils/Sk3D.cpp 2019-09-26 13:13:34.153647165 +0200
+@@ -38,6 +38,9 @@ void Sk3LookAt(SkMatrix44* dst, const Sk
+ dst->invert(dst);
+ }
+
++#undef far
++#undef near
++
+ bool Sk3Perspective(SkMatrix44* dst, float near, float far, float angle) {
+ SkASSERT(far > near);
+
+--- skia/src/gpu/vk/GrVkSemaphore.cpp.sav 2019-08-15 21:59:46.292369407 +0200
++++ skia/src/gpu/vk/GrVkSemaphore.cpp 2019-09-26 13:12:56.041647516 +0200
+@@ -10,6 +10,7 @@
+ #include "include/gpu/GrBackendSemaphore.h"
+ #include "src/gpu/vk/GrVkGpu.h"
+ #include "src/gpu/vk/GrVkUtil.h"
++#include "tools/gpu/vk/GrVulkanDefines.h"
+
+ #ifdef VK_USE_PLATFORM_WIN32_KHR
+ // windows wants to define this as CreateSemaphoreA or CreateSemaphoreW
+--- skia/third_party/skcms/skcms.cc.sav 2019-09-26 13:03:33.997652697 +0200
++++ skia/third_party/skcms/skcms.cc 2019-09-26 13:13:19.185647303 +0200
+@@ -1817,7 +1817,9 @@ typedef enum {
+ Op_store_hhhh,
+ Op_store_fff,
+ Op_store_ffff,
+-} Op;
++} Op_skcms;
++
++#define Op Op_skcms
+
+ #if defined(__clang__)
+ template <int N, typename T> using Vec = T __attribute__((ext_vector_type(N)));
+--- skia/src/utils/win/SkDWriteGeometrySink.h.sav 2019-08-15 22:00:07.552409373 +0200
++++ skia/src/utils/win/SkDWriteGeometrySink.h 2019-09-26 13:54:17.725624642 +0200
+@@ -12,6 +12,8 @@
+
+ class SkPath;
+
++#define CONST const
++
+ #include <dwrite.h>
+ #include <d2d1.h>
+
diff --git a/external/skia/inc/pch/precompiled_skia.hxx b/external/skia/inc/pch/precompiled_skia.hxx
index b5a2a52b01e9..5f40d7a38273 100644
--- a/external/skia/inc/pch/precompiled_skia.hxx
+++ b/external/skia/inc/pch/precompiled_skia.hxx
@@ -13,7 +13,7 @@
manual changes will be rewritten by the next run of update_pch.sh (which presumably
also fixes all possible problems, so it's usually better to use it).
- Generated on 2019-09-19 15:53:06 using:
+ Generated on 2019-09-26 11:31:14 using:
./bin/update_pch external/skia skia --cutoff=1 --exclude:system --include:module --include:local
If after updating build fails, use the following command to locate conflicting headers:
@@ -35,10 +35,8 @@
#include <cstring>
#include <ctype.h>
#include <deque>
-#include <dirent.h>
#include <errno.h>
#include <float.h>
-#include <ft2build.h>
#include <functional>
#include <initializer_list>
#include <inttypes.h>
@@ -49,7 +47,6 @@
#include <memory>
#include <new>
#include <png.h>
-#include <pthread.h>
#include <queue>
#include <set>
#include <skcms.h>
@@ -63,7 +60,6 @@
#include <thread>
#include <tuple>
#include <type_traits>
-#include <unistd.h>
#include <unordered_map>
#include <unordered_set>
#include <utility>
@@ -74,8 +70,6 @@
#include <sal/log.hxx>
#endif // PCH_LEVEL >= 2
#if PCH_LEVEL >= 3
-#include <GL/glx.h>
-#include <fontconfig/fontconfig.h>
#include <include/c/sk_canvas.h>
#include <include/c/sk_colorspace.h>
#include <include/c/sk_data.h>
@@ -233,10 +227,7 @@
#include <include/gpu/mock/GrMockTypes.h>
#include <include/gpu/vk/GrVkBackendContext.h>
#include <include/gpu/vk/GrVkExtensions.h>
-#include <include/gpu/vk/GrVkMemoryAllocator.h>
#include <include/gpu/vk/GrVkTypes.h>
-#include <include/pathops/SkPathOps.h>
-#include <include/ports/SkFontMgr_fontconfig.h>
#include <include/ports/SkFontMgr_indirect.h>
#include <include/ports/SkRemotableFontMgr.h>
#include <include/private/GrContext_Base.h>
@@ -292,9 +283,6 @@
#include <include/utils/SkRandom.h>
#include <include/utils/SkShadowUtils.h>
#include <include/utils/SkTextUtils.h>
-#include <src/Transform_inl.h>
-#include <src/c/sk_c_from_to.h>
-#include <src/c/sk_types_priv.h>
#include <src/codec/SkAndroidCodecAdapter.h>
#include <src/codec/SkBmpBaseCodec.h>
#include <src/codec/SkBmpCodec.h>
@@ -339,7 +327,6 @@
#include <src/core/SkBitmapProcState.h>
#include <src/core/SkBitmapProvider.h>
#include <src/core/SkBlendModePriv.h>
-#include <src/core/SkBlitBWMaskTemplate.h>
#include <src/core/SkBlitRow.h>
#include <src/core/SkBlitter.h>
#include <src/core/SkBlurMask.h>
@@ -359,7 +346,6 @@
#include <src/core/SkCoverageModePriv.h>
#include <src/core/SkCpu.h>
#include <src/core/SkCubicClipper.h>
-#include <src/core/SkCubicSolver.h>
#include <src/core/SkDescriptor.h>
#include <src/core/SkDevice.h>
#include <src/core/SkDiscardableMemory.h>
@@ -608,7 +594,6 @@
#include <src/gpu/GrTextureRenderTargetProxy.h>
#include <src/gpu/GrTracing.h>
#include <src/gpu/GrUserStencilSettings.h>
-#include <src/gpu/GrUtil.h>
#include <src/gpu/GrVertexWriter.h>
#include <src/gpu/GrWindowRectangles.h>
#include <src/gpu/GrXferProcessor.h>
@@ -769,7 +754,6 @@
#include <src/gpu/text/GrTextBlobCache.h>
#include <src/gpu/text/GrTextContext.h>
#include <src/gpu/text/GrTextTarget.h>
-#include <src/gpu/vk/GrVkAMDMemoryAllocator.h>
#include <src/gpu/vk/GrVkBuffer.h>
#include <src/gpu/vk/GrVkBufferView.h>
#include <src/gpu/vk/GrVkCaps.h>
@@ -819,14 +803,6 @@
#include <src/images/SkImageEncoderPriv.h>
#include <src/images/SkJPEGWriteUtility.h>
#include <src/lazy/SkDiscardableMemoryPool.h>
-#include <src/opts/SkBitmapProcState_opts.h>
-#include <src/opts/SkBlitMask_opts.h>
-#include <src/opts/SkBlitRow_opts.h>
-#include <src/opts/SkChecksum_opts.h>
-#include <src/opts/SkRasterPipeline_opts.h>
-#include <src/opts/SkSwizzler_opts.h>
-#include <src/opts/SkUtils_opts.h>
-#include <src/opts/SkXfermode_opts.h>
#include <src/pathops/SkAddIntersections.h>
#include <src/pathops/SkIntersectionHelper.h>
#include <src/pathops/SkIntersections.h>
@@ -882,7 +858,6 @@
#include <src/sfnt/SkOTTable_head.h>
#include <src/sfnt/SkOTTable_name.h>
#include <src/sfnt/SkOTUtils.h>
-#include <src/sfnt/SkSFNTHeader.h>
#include <src/shaders/SkBitmapProcShader.h>
#include <src/shaders/SkColorFilterShader.h>
#include <src/shaders/SkColorShader.h>
@@ -907,7 +882,6 @@
#include <src/sksl/SkSLByteCode.h>
#include <src/sksl/SkSLByteCodeGenerator.h>
#include <src/sksl/SkSLCFGGenerator.h>
-#include <src/sksl/SkSLCPP.h>
#include <src/sksl/SkSLCPPCodeGenerator.h>
#include <src/sksl/SkSLCPPUniformCTypes.h>
#include <src/sksl/SkSLCompiler.h>
@@ -989,9 +963,6 @@
#include <src/utils/SkShadowTessellator.h>
#include <src/utils/SkShaperJSONWriter.h>
#include <src/utils/SkUTF.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <sys/types.h>
#include <third_party/gif/SkGifImageReader.h>
#include <vulkan/vulkan_core.h>
#endif // PCH_LEVEL >= 3
More information about the Libreoffice-commits
mailing list