Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: kyamagu/skia-python
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v120.0b5
Choose a base ref
...
head repository: kyamagu/skia-python
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v121.0b6
Choose a head ref
Loading
23 changes: 13 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -24,7 +24,7 @@ jobs:
skia
key: linux-aarch64-skia-${{ github.sha }}-3rd-party
- name: Pre-fetch skia deps
run: git config --global core.compression 0 && cd skia && patch -p1 -i ../patch/skia-m120-minimize-download.patch && python tools/git-sync-deps && patch -p1 -R -i ../patch/skia-m120-minimize-download.patch
run: git config --global core.compression 0 && cd skia && patch -p1 -i ../patch/skia-m121-minimize-download.patch && python tools/git-sync-deps && patch -p1 -R -i ../patch/skia-m121-minimize-download.patch
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Build skia 3rd-Party
@@ -134,8 +134,9 @@ jobs:
xvfb-run -s "-screen 0 640x480x24" python -m pytest {project}/tests
CIBW_TEST_SKIP: "*-macosx_arm64"

- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: wheel-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.cp }}
path: ./wheelhouse/*.whl

build_docs:
@@ -150,9 +151,9 @@ jobs:
with:
python-version: '3.8'

- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4
with:
name: artifact
merge-multiple: true
path: dist

- name: Build docs
@@ -173,13 +174,15 @@ jobs:
needs: [build_wheels]
runs-on: ubuntu-latest
if: github.event_name == 'release' && github.event.action == 'published'
permissions:
id-token: write
environment:
name: pypi
url: https://pypi.org/p/skia-python/
steps:
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4
with:
name: artifact
merge-multiple: true
path: dist

- uses: pypa/gh-action-pypi-publish@v1.4.2
with:
user: ${{ secrets.PYPI_USERNAME }}
password: ${{ secrets.PYPI_PASSWORD }}
- uses: pypa/gh-action-pypi-publish@release/v1
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -54,7 +54,7 @@ https://kyamagu.github.io/skia-python

- For information about changes after `m116`, and tips on migration from `m87`: [README.m116](relnotes/README.m116.md),
[README.m117](relnotes/README.m117.md), [README.m118](relnotes/README.m118.md), [README.m119](relnotes/README.m119.md),
[README.m120](relnotes/README.m120.md).
[README.m120](relnotes/README.m120.md), [README.m121](relnotes/README.m121.md).

## Contributing

236 changes: 236 additions & 0 deletions patch/skia-m121-colrv1-freetype.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@
diff --git a/modules/canvaskit/canvaskit_bindings.cpp b/modules/canvaskit/canvaskit_bindings.cpp
index 073f853..17b70e3 100644
--- a/modules/canvaskit/canvaskit_bindings.cpp
+++ b/modules/canvaskit/canvaskit_bindings.cpp
@@ -110,6 +110,8 @@
#include "include/core/SkFontMetrics.h"
#include "include/core/SkFontMgr.h"
#include "include/core/SkFontTypes.h"
+enum class FT_Color_Root_Transform_;
+typedef FT_Color_Root_Transform_ FT_Color_Root_Transform; /* freetype/ftcolor.h */
#include "src/ports/SkFontHost_FreeType_common.h"
#ifdef CK_INCLUDE_PARAGRAPH
#include "modules/skparagraph/include/Paragraph.h"
diff --git a/modules/canvaskit/skottie_bindings.cpp b/modules/canvaskit/skottie_bindings.cpp
index d345fe8..dc8bde8 100644
--- a/modules/canvaskit/skottie_bindings.cpp
+++ b/modules/canvaskit/skottie_bindings.cpp
@@ -19,6 +19,8 @@
#include "modules/sksg/include/SkSGInvalidationController.h"
#include "modules/skunicode/include/SkUnicode.h"
#include "src/base/SkUTF.h"
+enum class FT_Color_Root_Transform_;
+typedef FT_Color_Root_Transform_ FT_Color_Root_Transform; /* freetype/ftcolor.h */
#include "src/ports/SkFontHost_FreeType_common.h"
#include "tools/skui/InputState.h"
#include "tools/skui/ModifierKey.h"
diff --git a/modules/skparagraph/utils/TestFontCollection.cpp b/modules/skparagraph/utils/TestFontCollection.cpp
index 9e5374f..b796d7d 100644
--- a/modules/skparagraph/utils/TestFontCollection.cpp
+++ b/modules/skparagraph/utils/TestFontCollection.cpp
@@ -8,6 +8,8 @@
#include "tools/Resources.h"

#if defined(SK_TYPEFACE_FACTORY_FREETYPE)
+enum class FT_Color_Root_Transform_;
+typedef FT_Color_Root_Transform_ FT_Color_Root_Transform; /* freetype/ftcolor.h */
#include "src/ports/SkFontHost_FreeType_common.h"
#elif defined(SK_TYPEFACE_FACTORY_CORETEXT)
#include "src/ports/SkTypeface_mac_ct.h"
diff --git a/src/core/SkTypeface.cpp b/src/core/SkTypeface.cpp
index f2d0927..bf2666c 100644
--- a/src/core/SkTypeface.cpp
+++ b/src/core/SkTypeface.cpp
@@ -31,6 +31,8 @@
#include "src/sfnt/SkOTTable_OS_2.h"

#ifdef SK_TYPEFACE_FACTORY_FREETYPE
+enum class FT_Color_Root_Transform_;
+typedef FT_Color_Root_Transform_ FT_Color_Root_Transform; /* freetype/ftcolor.h */
#include "src/ports/SkFontHost_FreeType_common.h"
#endif

diff --git a/src/ports/SkFontConfigTypeface.h b/src/ports/SkFontConfigTypeface.h
index 7955049..8551cf7 100644
--- a/src/ports/SkFontConfigTypeface.h
+++ b/src/ports/SkFontConfigTypeface.h
@@ -12,6 +12,8 @@
#include "include/core/SkStream.h"
#include "include/ports/SkFontConfigInterface.h"
#include "src/core/SkFontDescriptor.h"
+enum class FT_Color_Root_Transform_;
+typedef FT_Color_Root_Transform_ FT_Color_Root_Transform; /* freetype/ftcolor.h */
#include "src/ports/SkFontHost_FreeType_common.h"

class SkFontDescriptor;
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index 1122283..9b196ca 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -31,7 +31,6 @@
#include "src/core/SkMask.h"
#include "src/core/SkMaskGamma.h"
#include "src/core/SkScalerContext.h"
-#include "src/ports/SkFontHost_FreeType_common.h"
#include "src/sfnt/SkOTUtils.h"
#include "src/sfnt/SkSFNTHeader.h"
#include "src/sfnt/SkTTCFHeader.h"
@@ -49,6 +48,7 @@
#ifdef FT_COLOR_H // 2.10.0
# include <freetype/ftcolor.h>
#endif
+#include "src/ports/SkFontHost_FreeType_common.h"
#include <freetype/freetype.h>
#include <freetype/ftlcdfil.h>
#include <freetype/ftmodapi.h>
diff --git a/src/ports/SkFontHost_FreeType_common.cpp b/src/ports/SkFontHost_FreeType_common.cpp
index 1505cd0..7873a9e 100644
--- a/src/ports/SkFontHost_FreeType_common.cpp
+++ b/src/ports/SkFontHost_FreeType_common.cpp
@@ -6,7 +6,6 @@
* found in the LICENSE file.
*/

-#include "src/ports/SkFontHost_FreeType_common.h"

#include "include/core/SkBitmap.h"
#include "include/core/SkCanvas.h"
@@ -32,6 +31,7 @@
#ifdef FT_COLOR_H
# include <freetype/ftcolor.h>
#endif
+#include "src/ports/SkFontHost_FreeType_common.h"
#include <freetype/ftimage.h>
#include <freetype/ftoutln.h>
#include <freetype/ftsizes.h>
@@ -1577,6 +1577,41 @@ bool SkScalerContext_FreeType_Base::drawCOLRv1Glyph(FT_Face face,
SkASSERTF(haveLayers, "Could not get COLRv1 layers from '%s'.", face->family_name);
return haveLayers;
}
+/*
+ * This content is mostly just
+ * SkTypeface_FreeType::FaceRec::setupPalette()
+ + + SkScalerContext_FreeType_Base::drawCOLRv1Glyph()
+ +*/
+bool SkScalerContext_FreeType_Base::skia_colrv1_start_glyph(SkCanvas* canvas,
+ FT_Face face,
+ uint16_t glyphId,
+ FT_UShort palette_index,
+ FT_Color_Root_Transform rootTransform
+ ) {
+ uint32_t fForegroundColor{SK_ColorBLACK};
+ FT_Palette_Data paletteData;
+ FT_Palette_Data_Get(face, &paletteData);
+
+ FT_Color* ftPalette = nullptr;
+ FT_Palette_Select(face, palette_index, &ftPalette);
+ std::unique_ptr<SkColor[]> ptr_palette(new SkColor[paletteData.num_palette_entries]);
+ for (int i = 0; i < paletteData.num_palette_entries; ++i) {
+ ptr_palette[i] = SkColorSetARGB(ftPalette[i].alpha,
+ ftPalette[i].red,
+ ftPalette[i].green,
+ ftPalette[i].blue);
+ }
+ SkSpan<SkColor> palette(ptr_palette.get(), paletteData.num_palette_entries);
+
+ VisitedSet activePaints;
+ bool haveLayers = colrv1_start_glyph(canvas, palette,
+ fForegroundColor, // FT_Palette_Get_Foreground_Color?
+ face, glyphId,
+ FT_COLOR_INCLUDE_ROOT_TRANSFORM,
+ &activePaints);
+ SkASSERTF(haveLayers, "Could not get COLRv1 layers from '%s'.", face->family_name);
+ return haveLayers;
+}
#endif // TT_SUPPORT_COLRV1

#ifdef FT_COLOR_H
diff --git a/src/ports/SkFontHost_FreeType_common.h b/src/ports/SkFontHost_FreeType_common.h
index 6cba604..92e56af 100644
--- a/src/ports/SkFontHost_FreeType_common.h
+++ b/src/ports/SkFontHost_FreeType_common.h
@@ -29,6 +29,7 @@ typedef struct FT_FaceRec_* FT_Face;
typedef struct FT_StreamRec_* FT_Stream;
typedef signed long FT_Pos;
typedef struct FT_BBox_ FT_BBox;
+typedef unsigned short FT_UShort; /* freetype/fttypes.h */


#ifdef SK_DEBUG
@@ -41,7 +42,15 @@ const char* SkTraceFtrGetError(int);
#endif


-class SkScalerContext_FreeType_Base : public SkScalerContext {
+class SK_SPI SkScalerContext_FreeType_Base : public SkScalerContext {
+public:
+ static bool computeColrV1GlyphBoundingBox(FT_Face, SkGlyphID, SkRect* bounds);
+ static bool skia_colrv1_start_glyph(SkCanvas* canvas,
+ FT_Face face,
+ uint16_t glyphId,
+ FT_UShort palette_index,
+ FT_Color_Root_Transform rootTransform
+ );
protected:
// See http://freetype.sourceforge.net/freetype2/docs/reference/ft2-bitmap_handling.html#FT_Bitmap_Embolden
// This value was chosen by eyeballing the result in Firefox and trying to match it.
@@ -68,7 +77,6 @@ protected:
* configure size, matrix and load glyphs as needed after using this function to restore the
* state of FT_Face.
*/
- static bool computeColrV1GlyphBoundingBox(FT_Face, SkGlyphID, SkRect* bounds);

struct ScalerContextBits {
static const constexpr uint32_t COLRv0 = 1;
diff --git a/src/ports/SkFontMgr_android.cpp b/src/ports/SkFontMgr_android.cpp
index 8a93a2e..d3743ba 100644
--- a/src/ports/SkFontMgr_android.cpp
+++ b/src/ports/SkFontMgr_android.cpp
@@ -23,6 +23,8 @@
#include "src/core/SkFontDescriptor.h"
#include "src/core/SkOSFile.h"
#include "src/core/SkTypefaceCache.h"
+enum class FT_Color_Root_Transform_;
+typedef FT_Color_Root_Transform_ FT_Color_Root_Transform; /* freetype/ftcolor.h */
#include "src/ports/SkFontHost_FreeType_common.h"
#include "src/ports/SkFontMgr_android_parser.h"

diff --git a/src/ports/SkFontMgr_custom.cpp b/src/ports/SkFontMgr_custom.cpp
index a0c6693..536f1c2 100644
--- a/src/ports/SkFontMgr_custom.cpp
+++ b/src/ports/SkFontMgr_custom.cpp
@@ -16,6 +16,8 @@
#include "include/private/base/SkTArray.h"
#include "include/private/base/SkTemplates.h"
#include "src/core/SkFontDescriptor.h"
+enum class FT_Color_Root_Transform_;
+typedef FT_Color_Root_Transform_ FT_Color_Root_Transform; /* freetype/ftcolor.h */
#include "src/ports/SkFontHost_FreeType_common.h"
#include "src/ports/SkFontMgr_custom.h"

diff --git a/src/ports/SkFontMgr_custom.h b/src/ports/SkFontMgr_custom.h
index 0de4d1d..b9298dd 100644
--- a/src/ports/SkFontMgr_custom.h
+++ b/src/ports/SkFontMgr_custom.h
@@ -14,6 +14,8 @@
#include "include/core/SkString.h"
#include "include/core/SkTypes.h"
#include "include/private/base/SkTArray.h"
+enum class FT_Color_Root_Transform_;
+typedef FT_Color_Root_Transform_ FT_Color_Root_Transform; /* freetype/ftcolor.h */
#include "src/ports/SkFontHost_FreeType_common.h"

class SkData;
diff --git a/src/ports/SkFontMgr_fontconfig.cpp b/src/ports/SkFontMgr_fontconfig.cpp
index 12b1e95..6d386d9 100644
--- a/src/ports/SkFontMgr_fontconfig.cpp
+++ b/src/ports/SkFontMgr_fontconfig.cpp
@@ -28,6 +28,8 @@
#include "src/core/SkOSFile.h"
#include "src/core/SkScalerContext.h"
#include "src/core/SkTypefaceCache.h"
+enum class FT_Color_Root_Transform_;
+typedef FT_Color_Root_Transform_ FT_Color_Root_Transform; /* freetype/ftcolor.h */
#include "src/ports/SkFontHost_FreeType_common.h"

#include <fontconfig/fontconfig.h>
Loading