Blockly 三套渲染器选型指南:geras、zelos、thrasos 到底该怎么选
【免费下载链接】blocklyThe web-based visual programming editor.项目地址: https://gitcode.com/gh_mirrors/bloc/blockly
很多刚接触 Blockly 的同学,第一次inject出来一套方块,颜色对不上、边角太锐利,想换个"更现代"的观感,却不知道从哪里下手。其实这套外观风格由**渲染器(renderer)**决定,而不是主题(theme)。当前代码库里内置了三个可选渲染器:geras(默认)、zelos、thrasos,在 core/render_management.ts 里统一管理绘制流程,具体绘制逻辑分别落在 core/renderers/geras/、core/renderers/zelos/ 和 core/renderers/thrasos/ 三个目录。这篇文章帮你把"选哪个、怎么配、别踩哪些坑"一次说清。
先说结论:一张表定风格
如果你的目标只是"让编辑器看起来更顺眼",先按下表直接拍板,再往下读细节:
| 你的场景 | 建议渲染器 | 一句话理由 |
|---|---|---|
| 需要和旧项目、旧截图、旧教程对齐 | geras | 默认值,稳定、资料最多 |
| 面向新产品的现代化界面 | zelos | 圆角、配色更鲜活、视觉语言最新 |
| 想要现代感但更克制、贴近传统比例 | thrasos | 在两者之间取中间路线 |
一句话判断:除非你在维护老项目或需要和既有物料对齐,否则新界面建议优先选zelos;追求"现代但收敛"则选thrasos。下面解释为什么是这三个名字、以及它们和"主题"到底什么关系。
三个名字背后到底是什么
三个名字都来自希腊语,只是气质不同,方便你在沟通时快速对齐:
- geras:默认渲染器,延续早期 Blockly 的方块造型,边角更硬朗,是最早、最稳定的那套。
- zelos:偏现代、活泼的一套,边角圆润、颜色更饱满,是当下新界面的常见选择。
- thrasos:源码注释里把它描述为"对 legacy geras 的更现代解读"(the ancient Greek spirit of boldness),定位介于两者之间,适合想要现代感又不想太跳脱的团队。
关键点:渲染器只决定"怎么把方块画出来"(边角、连接线、字段排版等),颜色方案属于另一层——主题。代码库目前内置Classic与Zelos两套主题,定义在 core/theme/themes.ts。常见误区就是"我把方块调得花花绿绿却不生效"——那往往是你改了主题却没意识到渲染器才是控制形状的开关。经验上geras常配Classic,zelos常配Zelos,thrasos两者都能搭。
在哪里指定渲染器
指定渲染器只有一个入口:inject时的renderer字段。它不写就回退到geras,这一点可以直接在 core/options.ts 里看到:
// core/options.ts const renderer = options['renderer'] || 'geras';所以"切换渲染器"本质上就是改一个配置字符串,示例如下(与仓库里 tests/playground.html 的写法一致):
Blockly.inject('blocklyDiv', { renderer: 'zelos', // 想换回默认就删掉这行,或写 'geras' });工作区初始化时,会在 core/workspace_svg.ts 里根据这个名字实例化对应的渲染器,并把它和当前主题一起传进去。三个渲染器也都各自在所属目录的renderer.ts中调用了blockRendering.register(...)完成注册,机制统一收口在 core/renderers/common/block_rendering.ts。也就是说:名字对得上注册表,就能用;写错名字,取不到渲染器会直接报错。
用 rendererOverrides 微调,而不是整包替换
多数时候你不需要换渲染器,只需要改一两个视觉常数。inject提供了rendererOverrides,可以把个别渲染常数覆盖掉,而无需自己新注册一整套渲染器。适合"几乎用 zelos,但想把某处圆角再收一点"这类细调。
什么时候才值得自己register一个新渲染器?只有当你需要成套改边角、连接线、字段排版等多处逻辑时,才参考 core/renderers/zelos/ 里ConstantProvider/Drawer/Renderer的结构去派生。对绝大多数业务,rendererOverrides+ 现成主题已经够用,能微调就别重写,维护成本差别很大。
容易踩的三个坑
- 把"换颜色"当成"换渲染器":颜色由主题管,形状由渲染器管。改了
renderer颜色却不变,通常是没动主题;反过来改了主题边角却不生效,就是渲染器没对齐。 - 写了名字却没生效:确认
renderer拼写正确,且对应模块已被引入/注册(三者都通过blockRendering.register注册,名字必须精确匹配)。 - 以为 thrasos 是 zelos 的"高级版":三者是平级的风格路线,没有版本先后,
thrasos更强调"现代但贴近传统比例",别拿它当过渡版本用。
🔍 遇到"看起来不对",先问一句:是形状/比例问题(找渲染器),还是配色问题(找主题),能省掉大半排查时间。
上线前检查清单
👇 切换渲染器或主题后,按顺序过一遍再交付:
- 确认
inject里renderer值正确,且没有和theme互相矛盾(形状来自渲染器,颜色来自主题)。 - 需要细调视觉常数时,用
rendererOverrides覆盖,而不是新写一整套渲染器。 - 在真实容器尺寸下检查:方块边角、连接线、字段文字是否都在预期位置。
- 回归一遍复制/粘贴、折叠、缩放等交互,确认新样式下没有错位。
- 若项目要长期演进,记录你选的渲染器 + 主题组合,避免后续同事误以为是 bug。
选定zelos+Zelos主题或geras+Classic主题,通常就是最省心的默认组合;只有当你的产品有明确的"现代但收敛"诉求时,再引入thrasos做差异化。
【免费下载链接】blocklyThe web-based visual programming editor.项目地址: https://gitcode.com/gh_mirrors/bloc/blockly
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考