feat(cairo): 2D 矢量绘制 —— 后端做成 feature,X11 默认关 - #312
Merged
Merged
Conversation
路径、描边、填充、文字排布,以及承载它们的表面。只做合成的合成器用不到它;
桌面**外壳**——面板、启动器、通知——是靠它画的,pango 也是经它渲染文字。
## 判据修正:决定 fork 难度的是生成器,不是行数
104k 行 C,**没有任何代码生成**。上游 meson 只出两个产物,config.h 和
cairo-features.h,两个都是 configure_file(探测答案,不是生成的代码)。
fontconfig 是它四分之一大小,却有七个生成器。
设计文档此前按行数把 cairo 标成更大的活,那是错的。
## 后端做成 feature,X11 默认关
default = [ft, fc, png]
上游把每个后端做成 get_option(),等于让发行版替所有人决定一次。索引不能这样:
合成器和 X11 应用要的是同一个包的不同构建。所以在 Wayland 程序里画个圆不会因此
拖进 libX11;要 X11 的人写 features = ["xlib"] 并且说出来。
fork CI 在**产物上**验证这件事,不是在 manifest 上:没有 cairo-xlib-*.o,任何
.o 里都没有 XOpenDisplay。
## 归档是源码,不是测试套件
cairo 的发布物带 61 MB 参考图(test/),这个包一个都不编。整包发出去是「下 47 MB
用 6 MB 源码」。test/ 和 perf/ 已裁掉,而 fork 的「upstream 与发布物一致」检查改为
比对**剩下的树**,所以构建能碰到的每个文件仍然逐一 diff。47.8 MB -> 1.8 MB。
## ⚠ 一个探测答案,别「修」它
WORDS_BIGENDIAN 和 FLOAT_WORDS_BIGENDIAN 在 config.h 里是**缺席**,不是定义成 0
——cairo 用 #ifdef 测(cairoint.h:196),0 的含义是大端。在 x86-64 上后果是:编过、
链过、报 SUCCESS、cairo_paint 照常工作,而每条**路径**拿到垃圾定点坐标:
cairo_rectangle(4,4,16,16) 的 extents 变成 -8.03e+06 … 4.37e+06,cairo_fill 改动
零个像素。实测。
测试因此同时断言像素和 path_extents:前者只会说「描边没画」,把人引向缺文件;
后者直接指出算术错在哪。
只改了 pkgs/ 与 tests/examples/。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
路径、描边、填充、文字排布,以及承载它们的表面。只做合成的合成器用不到它;桌面外壳(面板、启动器、通知)是靠它画的,pango 也经它渲染文字。
配套 fork:
mcpplibs/cairo(新建,CI 绿)。判据修正:决定 fork 难度的是生成器,不是行数
上游 meson 只出两个产物,
config.h和cairo-features.h,两个都是configure_file—— 探测答案,不是生成的代码。设计文档此前按行数把 cairo 标成更大的活,那是错的。build.mcpp只用来生成模块包装,因为导出面随 feature 变。后端做成 feature
上游把每个后端做成
get_option(),等于让发行版替所有人决定一次。索引不能这样。所以在 Wayland 程序里画个圆不会拖进 libX11;要 X11 的人写cairo = { features = ["xlib"] }。fork CI 在产物上验证这件事,不是在 manifest 上:没有
cairo-xlib-*.o,任何.o里都没有XOpenDisplay。每个 feature 的
sources逐个文件列出 —— feature 源选通按字面条目匹配,glob 会把那个后端编进每一个消费者。归档是源码,不是测试套件
cairo 的发布物带 61 MB 参考图(
test/),这个包一个都不编。整包发出去是「下 47 MB 用 6 MB 源码」。test/和perf/已裁掉,而 fork 的「upstream 与发布物一致」检查改为比对剩下的树 —— 构建能碰到的每个文件仍然逐一 diff。47.8 MB → 1.8 MB。
⚠ 一个探测答案,别「修」它
WORDS_BIGENDIAN/FLOAT_WORDS_BIGENDIAN在 config.h 里缺席,不是定义成 0 —— cairo 用#ifdef测(cairoint.h:196),0的含义是大端。x86-64 上的后果:我为此查了一小时「缺源文件」。测试因此同时断言像素和
path_extents:前者只会说「描边没画」,把人引向缺文件;后者直接指出算术错在哪。测试
只改了
pkgs/与tests/examples/。