YStudio Y++

画布(canvas)

Y++ / YStudio 开发文档 · 一点滴

选择器: canvas · 设计器组件: 画布 · 按名称: canvas#名称 或 #名称
用途: 2D 场景 / 手绘 / 像素层容器。完整 API 见文档中心「画布控件」;叠画亦可用支持库「绘制类」的 绑画布。

硬约束与叠画

  1. 控件名来自窗口 XML「名称」;属性赋值无括号(如 标题 = "确定"),方法调用必须带括号(如 刷新())。
  2. 事件写 函数 控件名.事件名(参数…),形参类型以本页事件表为准。
  3. 任意控件客户区叠画用支持库 绘制类:绘制类 g → g.绑组件(本控件名)(组件名无引号)。画布场景编辑见 画布控件。
  4. 字体对象见绘制文档中的字体类;置字体(字体类) 将字体应用到本控件。
  5. 不要虚构未列出的方法;YSS 键见下文与 YSS.md。

属性

设计器属性面板与代码侧可读可写属性(来源:组件类库)。

属性 类型 读写 说明
提示 文本 读写 鼠标悬停时的提示文字
鼠标指针 文本 读写 空=默认;可用 arrow/hand/ibeam/cross/wait/no/sizeall 等预设,或.cur/.ani 路径(如 资源/press.cur)
左边 小数 读写 相对窗体左边的位置(像素)
顶边 小数 读写 相对窗体顶边的位置(像素)
宽度 小数 读写 控件宽度(像素)
高度 小数 读写 控件高度(像素)
停靠 整数 读写 0无 1上 2下 3左 4右 5填充;菜单/工具/状态栏仍用专用吸附
可见 逻辑 读写 真=显示,假=隐藏
启用 逻辑 读写 真=可用,假=禁用
句柄 长整数 只读 组件逻辑句柄(1 起,供动画类等绑定;非 HWND);只读
抗锯齿 逻辑 读写 真=绘制抗锯齿
允许平移 逻辑 读写 真=允许中键拖动平移视图
允许缩放 逻辑 读写 真=允许 Ctrl+滚轮缩放视图
最小缩放 整数 读写 缩放下限百分比,如 25=0.25 倍
最大缩放 整数 读写 缩放上限百分比,如 800=8 倍
背景色 文本 读写 画布底色,如 #1A1A1A
显示边框 逻辑 读写 真=显示边框
边框大小 整数 读写 像素
边框颜色 文本 读写 如 #464646

方法

组件类库方法(调用必须带括号)。场景坐标与控件坐标用 控件到场景X/Y 互转。即时层绘制(置笔触/画线 等)仅在「绘制」事件中有效。下表由元数据生成(带类型签名)。

方法 签名 返回 说明
置边框 无 置边框([逻辑 显示边框=真], [整数 边框大小=1], [文本 边框颜色], [整数 描边样式]) 无 描边 0实…4双点划
置圆角 无 置圆角([整数 半径=4]) 无 0=直角
移动 无 移动(小数 左边, 小数 顶边, [小数 宽度], [小数 高度]) 无 可选同时改宽高
置焦点 无 置焦点() 无
刷新 无 刷新() 无
显示 / 隐藏 无 显示() / 无 隐藏() 无 等同 可见 = 真/假
置字体 逻辑 置字体(字体类 字体) 逻辑 见 painter.md
清空 无 清空() 无 清空场景中全部图元(含组合)。像素层与视图平移缩放不受影响;需要清像…
添加直线 整数 添加直线(小数 x1, 小数 y1, 小数 x2, 小数 y2) 整数 在场景中添加直线,返回图形ID。参数为场景坐标的两端点。
添加矩形 整数 添加矩形(小数 x, 小数 y, 小数 宽, 小数 高) 整数 在场景中添加矩形,返回图形ID。参数为场景坐标左上角与宽高。
添加椭圆 整数 添加椭圆(小数 x, 小数 y, 小数 宽, 小数 高) 整数 在场景中添加椭圆(外接矩形),返回图形ID。参数为场景坐标。
添加多边形 整数 添加多边形(文本 点列) 整数 添加多边形,返回图形ID。点列为「x,y;x,y;…」文本(分号分隔…
添加文本 整数 添加文本(小数 x, 小数 y, 文本 内容) 整数 在场景中添加文本图元,返回图形ID。内容可用置文本修改;坐标为场景坐标。
添加图片 整数 添加图片(小数 x, 小数 y, 小数 宽, 小数 高, 文本 路径) 整数 在场景中添加图片图元,返回图形ID。路径可为本地文件或工程资源路径;…
开始路径 整数 开始路径(小数 x, 小数 y) 整数 开始一条场景路径并返回图形ID。参数为场景坐标。随后用线到/曲线到追…
线到 逻辑 线到(小数 x, 小数 y) 逻辑 向当前未结束的路径追加直线段,参数为场景坐标。通常在鼠标移动(按下)…
曲线到 逻辑 曲线到(小数 c1x, 小数 c1y, 小数 c2x, 小数 c2y, 小数 x, 小数 y) 逻辑 向当前路径追加三次贝塞尔曲线段。参数为控制点与终点,均为场景坐标。
关闭路径 逻辑 关闭路径() 逻辑 闭合当前子路径(连接回起点)。通常在结束路径前可选调用。
结束路径 整数 结束路径() 整数 结束当前路径构造并返回该路径的图形ID。抬起鼠标时应调用,以便路径参…
删除 逻辑 删除(整数 图形ID) 逻辑 按图形ID删除场景中的图元。成功返回真。若该图元在选区中会同步取消选中。
取数量 整数 取数量() 整数 返回场景中当前图元数量(含组合节点)。
是否存在 逻辑 是否存在(整数 图形ID) 逻辑 判断指定图形ID是否仍存在于场景中。删除后返回假。
置填充色 无 置填充色(整数 图形ID, 文本 颜色) 无 设置图元填充色。颜色为 #AARRGGBB 或 #RRGGBB 文本。
置描边色 无 置描边色(整数 图形ID, 文本 颜色) 无 设置图元描边色。颜色为 #AARRGGBB 或 #RRGGBB 文本。
置线宽 无 置线宽(整数 图形ID, 小数 线宽) 无 设置图元描边线宽(场景单位)。
置位置 无 置位置(整数 图形ID, 小数 x, 小数 y) 无 设置图形在场景中的位置(场景坐标,不是控件坐标)。等同于把图元左上参…
置尺寸 无 置尺寸(整数 图形ID, 小数 宽, 小数 高) 无 设置图元外接宽高(场景单位)。矩形/椭圆/图片/文本等盒状图元常用;…
置旋转 无 置旋转(整数 图形ID, 小数 角度) 无 设置图元旋转角度,单位为度,绕图元自身变换原点旋转。
置缩放 无 置缩放(整数 图形ID, 小数 sx, 小数 sy) 无 设置图元水平/垂直缩放系数。1 为原始大小;负值可配合翻转类需求。
置可见 无 置可见(整数 图形ID, 逻辑 可见) 无 设置图元是否可见。不可见图元不绘制,通常也不参与命中。
置锁定 无 置锁定(整数 图形ID, 逻辑 锁定) 无 锁定后图元不参与鼠标命中与内置拖动手柄编辑,仍可绘制。适合背景装饰。
置Z序 无 置Z序(整数 图形ID, 整数 z) 无 设置绘制与命中优先级:Z 越大越靠上。也可用置顶/置底/上移一层/下…
置标签 无 置标签(整数 图形ID, 文本 标签) 无 为图元挂一段业务用文本标签(不显示在画面上),便于按业务含义查找或分类。
置文本 逻辑 置文本(整数 图形ID, 文本 内容) 逻辑 修改文本图元显示内容。仅对「添加文本」得到的图形ID有效;成功返回真。
取文本 文本 取文本(整数 图形ID) 文本 返回文本图元当前内容;非文本图元或无效 ID 返回空文本。
取填充色 文本 取填充色(整数 图形ID) 文本 返回图元填充色文本(#AARRGGBB / #RRGGBB);无效 …
取描边色 文本 取描边色(整数 图形ID) 文本 返回图元描边色文本;无效 ID 返回空文本。
取线宽 小数 取线宽(整数 图形ID) 小数 返回图元描边线宽(场景单位)。
取位置X 小数 取位置X(整数 图形ID) 小数 返回图元场景坐标 X(世界原点,含父组合变换)。
取位置Y 小数 取位置Y(整数 图形ID) 小数 返回图元场景坐标 Y。
取宽度 小数 取宽度(整数 图形ID) 小数 返回图元外接宽度(场景单位)。与控件属性「宽度」不同,本方法须传图形…
取高度 小数 取高度(整数 图形ID) 小数 返回图元外接高度(场景单位)。与控件属性「高度」不同,本方法须传图形…
取旋转 小数 取旋转(整数 图形ID) 小数 返回图元旋转角度(度)。
取缩放X 小数 取缩放X(整数 图形ID) 小数 返回图元水平缩放系数。
取缩放Y 小数 取缩放Y(整数 图形ID) 小数 返回图元垂直缩放系数。
取可见 逻辑 取可见(整数 图形ID) 逻辑 返回图元是否可见。与控件属性「可见」不同,本方法须传图形ID。
取锁定 逻辑 取锁定(整数 图形ID) 逻辑 返回图元是否锁定(锁定后不参与命中与内置编辑)。
取Z序 整数 取Z序(整数 图形ID) 整数 返回图元 Z 序(越大越靠上)。
取标签 文本 取标签(整数 图形ID) 文本 返回图元业务标签文本。
取命中 整数 取命中(小数 x, 小数 y) 整数 按控件坐标做命中测试,返回最上层可命中图元的图形ID;0 表示未命中…
控件到场景X 小数 控件到场景X(小数 控件x, 小数 控件y) 小数 把画布控件坐标 X 转为场景坐标 X(已含当前视图平移与缩放)。添加…
控件到场景Y 小数 控件到场景Y(小数 控件x, 小数 控件y) 小数 把画布控件坐标 Y 转为场景坐标 Y。
场景到控件X 小数 场景到控件X(小数 场景x, 小数 场景y) 小数 把场景坐标 X 转为画布控件坐标 X。HUD、对照鼠标位置时常用。
场景到控件Y 小数 场景到控件Y(小数 场景x, 小数 场景y) 小数 把场景坐标 Y 转为画布控件坐标 Y。
置视图 无 置视图(小数 平移X, 小数 平移Y, 小数 缩放) 无 设置视图平移 X/Y 与缩放倍率。缩放 1 为 100%。会触发「视…
复位视图 无 复位视图() 无 将视图平移归零、缩放恢复为 1,相当于回到初始观察位置。
取平移X 小数 取平移X() 小数 返回当前视图平移 X(场景单位)。
取平移Y 小数 取平移Y() 小数 返回当前视图平移 Y(场景单位)。
取视图缩放 小数 取视图缩放() 小数 返回当前视图缩放倍率(1=100%)。
置笔触 无 置笔触(文本 颜色, 小数 线宽) 无 仅在「绘制」事件中有效:设置本帧即时层的描边颜色与线宽。即时层帧末清…
置填充 无 置填充(文本 颜色) 无 仅在「绘制」事件中有效:设置本帧即时层填充色。
画线 无 画线(小数 x1, 小数 y1, 小数 x2, 小数 y2) 无 仅在「绘制」事件中有效:在即时层画线段,坐标为场景坐标。适合准星、临…
画矩形 无 画矩形(小数 x, 小数 y, 小数 宽, 小数 高) 无 仅在「绘制」事件中有效:即时层矩形,场景坐标。
画椭圆 无 画椭圆(小数 x, 小数 y, 小数 宽, 小数 高) 无 仅在「绘制」事件中有效:即时层椭圆,场景坐标。
画文本 无 画文本(小数 x, 小数 y, 文本 内容) 无 仅在「绘制」事件中有效:即时层文本,场景坐标。按钮单击等事件里调用不…
导出PNG 逻辑 导出PNG(文本 路径) 逻辑 把当前视图下画布控件矩形内的画面导出为 PNG 文件(含像素层、场景…
到字节集 字节集 到字节集() 字节集 与导出PNG相同的画面内容,但返回 PNG 字节集,便于上传或再从字…
从字节集载入 逻辑 从字节集载入(字节集 数据) 逻辑 用图片字节集替换像素缓冲(尺寸随图片变化)。成功返回真。用于把照片等…
锁定像素 逻辑 锁定像素() 逻辑 确保像素缓冲存在(默认尺寸与控件显示像素一致),之后可取像素/置像素…
解锁像素 逻辑 解锁像素() 逻辑 结束像素编辑并刷新画面。锁定像素批量改点后应调用本方法。
清空像素 逻辑 清空像素() 逻辑 丢弃整幅像素缓冲,画面不再显示像素层内容。
取像素宽 整数 取像素宽() 整数 像素缓冲宽度(设备像素);未锁定时为 0。
取像素高 整数 取像素高() 整数 像素缓冲高度(设备像素);未锁定时为 0。
取像素 文本 取像素(小数 x, 小数 y) 文本 按控件坐标读取像素颜色,返回形如 #AARRGGBB 的文本。坐标相…
置像素 逻辑 置像素(小数 x, 小数 y, 文本 颜色) 逻辑 按控件坐标写入像素颜色(#AARRGGBB 或 #RRGGBB)。若…
选中 无 选中(整数 图形ID, [逻辑 追加=假]) 无 选中指定图形ID。追加=假(默认)时先清空选区;追加=真时并入选区。…
取消选中 无 取消选中(整数 图形ID) 无 从当前选区移除指定图形ID;不删除场景中的图元本身。
清空选中 无 清空选中() 无 清空当前选区,不删除场景图元。
是否选中 逻辑 是否选中(整数 图形ID) 逻辑 判断指定图形ID是否在当前选区中。
取选中数 整数 取选中数() 整数 返回当前选中图形数量。可配合取选中(索引)遍历。
取选中 整数 取选中(整数 索引) 整数 按从 0 起的索引取当前选中图形ID;越界返回 0。可配合取选中数量…
取选中列表 文本 取选中列表() 文本 返回当前选中图形ID列表,逗号分隔文本,如 “1,2,3”。
置编辑模式 无 置编辑模式(整数 模式) 无 0=关闭内置拖动与手柄(适合专心手绘脚本);1=选择+拖动(默认,含…
取编辑模式 整数 取编辑模式() 整数 返回当前编辑模式(0=手绘优先,1=选择拖动)。
组合 整数 组合() 整数 把当前选中的多个图元打成一组,返回组图形ID;不足两个或失败返回 0…
取消组合 逻辑 取消组合([整数 组ID=0]) 逻辑 拆开组合。组ID=0(默认)时拆当前选中的组;也可传入指定组ID。成…
取父级 整数 取父级(整数 图形ID) 整数 返回图元所属父组合的图形ID;不属于任何组则返回 0。
是否组合 逻辑 是否组合(整数 图形ID) 逻辑 判断指定图形ID是否为组合节点(组)。
移动选中 无 移动选中(小数 dx, 小数 dy) 无 按场景坐标平移当前选中根项(若父级已在选区中则子项不重复移动)。开启…
置吸附 无 置吸附(逻辑 开启) 无 是否在拖动时吸附到其它图形的边、中线或网格(默认开启)。精确程序位移…
取吸附 逻辑 取吸附() 逻辑 返回是否开启拖动吸附。
置吸附容差 无 置吸附容差(小数 像素) 无 设置拖动吸附的判定距离(屏幕像素,默认 8)。数值越大越容易吸住边或…
取吸附容差 小数 取吸附容差() 小数 返回当前吸附容差(屏幕像素)。越大越容易吸住。
置网格 无 置网格(小数 大小) 无 设置网格吸附间距(场景单位)。0 表示关闭网格吸附,仍可吸附其它图形。
取网格 小数 取网格() 小数 返回当前网格吸附间距;0 表示关闭网格吸附。
对齐左 无 对齐左() 无 多选对齐:把各选中项左边缘对齐到当前选区最左侧。至少需要 2 个选中…
对齐右 无 对齐右() 无 多选对齐:各选中项右边缘对齐到选区最右侧。至少 2 个选中根项。
对齐顶 无 对齐顶() 无 多选对齐:各选中项顶边缘对齐到选区最上侧。至少 2 个选中根项。
对齐底 无 对齐底() 无 多选对齐:各选中项底边缘对齐到选区最下侧。至少 2 个选中根项。
水平居中 无 水平居中() 无 多选对齐:各选中项水平中心对齐到选区水平中心。至少 2 个选中根项。
垂直居中 无 垂直居中() 无 多选对齐:各选中项垂直中心对齐到选区垂直中心。至少 2 个选中根项。
水平分布 无 水平分布() 无 多选分布:保持最左与最右项位置,中间项水平间距均分。至少 3 个选中…
垂直分布 无 垂直分布() 无 在首尾固定前提下,均分选中项垂直间距(至少 3 个)。
删除选中 整数 删除选中() 整数 删除当前选中图形(组会连同组内后代一起删除)。返回删除的根项数量。画…
克隆选中 整数 克隆选中() 整数 复制当前选中并粘贴到偏移约 12 场景单位处,自动选中副本。返回新根…
复制选中 整数 复制选中() 整数 把选中复制到画布内部剪贴板(含组合关系),返回复制项数。配合粘贴使用…
剪切选中 整数 剪切选中() 整数 复制选中到剪贴板后删除原图形。快捷键 Ctrl+X。
粘贴 整数 粘贴() 整数 从画布剪贴板粘贴,默认偏移约 12 场景单位,并选中新根项。返回新根…
置顶 无 置顶() 无 把选中根项移到最上层(最大 Z),使其盖住其它图形。
置底 无 置底() 无 把选中根项移到最下层(最小 Z),使其被其它图形盖住。
上移一层 无 上移一层() 无 将选中根项上移一层(Z 增大一档),盖住更靠近底层的图元。
下移一层 无 下移一层() 无 将选中根项下移一层(Z 减小一档)。
全选 无 全选() 无 选中场景中全部可见且未锁定的图形。画布有焦点时可用 Ctrl+A。
反选 无 反选() 无 反转选区:当前未选中的可见未锁定项变为选中,原选中取消。
框选 整数 框选(小数 x1, 小数 y1, 小数 x2, 小数 y2, [逻辑 追加=假]) 整数 用控件坐标矩形框选与之相交的图形,返回新选中数量。追加=真时保留原选…
水平翻转 无 水平翻转() 无 以当前选区中心为轴,水平翻转选中根项。
垂直翻转 无 垂直翻转() 无 以当前选区中心为轴,垂直翻转选中根项。
取图形列表 文本 取图形列表() 文本 返回场景中全部图形ID,以逗号分隔文本,如 “1,2,3”。可用寻找…
导出场景 文本 导出场景() 文本 把当前场景序列化为文本(含图元、样式、组合、路径点等),可用文件读写…
导入场景 整数 导入场景(文本 数据, [逻辑 清空=真]) 整数 从导出场景得到的文本恢复场景。清空=真(默认)时先清空再导入;清空=…
整数 id = 画布1.添加矩形(10, 10, 80, 60)
画布1.置填充色(id, "#3388FF")

事件

在代码中写 函数 控件名.事件名(...) 处理。

事件 参数 说明
单击 整数 X, 整数 Y 鼠标左键单击控件。
双击 整数 X, 整数 Y 鼠标左键双击控件。
右键单击 整数 X, 整数 Y 鼠标右键单击控件。
鼠标按下 整数 X, 整数 Y, 逻辑 按下 鼠标键在控件上按下。按下=真表示当前仍按住。
鼠标抬起 整数 X, 整数 Y, 逻辑 按下 鼠标键在控件上放开。
鼠标移动 整数 X, 整数 Y, 逻辑 按下 鼠标在控件上移动。按下表示左键是否按住。
鼠标进入 整数 X, 整数 Y 鼠标指针进入控件区域。
鼠标离开 整数 X, 整数 Y 鼠标指针离开控件区域。
鼠标左键单击 整数 X, 整数 Y 鼠标左键单击(与「单击」同时触发)。
鼠标左键双击 整数 X, 整数 Y 鼠标左键双击(与「双击」同时触发)。
鼠标中间单击 整数 X, 整数 Y 鼠标中键单击控件。
鼠标齿轮滚动 整数 X, 整数 Y, 逻辑 向上 在控件上滚动鼠标滚轮。向上=真表示向上滚。
鼠标右键单击 整数 X, 整数 Y 鼠标右键单击(与「右键单击」同时触发)。
鼠标右键双击 整数 X, 整数 Y 鼠标右键双击控件。
图形单击 整数 图形ID 鼠标单击命中场景图形时触发。参数:整数 图形ID。可用于选中反馈、打开属性面板等。
图形双击 整数 图形ID 鼠标双击命中场景图形时触发。参数:整数 图形ID。可用于进入编辑或打开详情。
视图改变 无 画布视图平移或缩放改变后触发(中键拖动、Ctrl+滚轮或置视图/复位视图后)。
选中改变 无 场景图形选中集合发生变化时触发(点选、框选、全选、程序选中/清空选中等)。可在处理函数内用 取选中数 / 取选中列表 读取当前选区。
函数 画布1.单击 (整数 X, 整数 Y) {
    // …
}

YSS 样式

以下为样式表(.yss)键与示例;写样式前请先读窗体 XML 取控件 名称 与 typeId,见 window-xml.md。

样式概览

YSS 只控制画布底板与边框;图元颜色、笔触、场景内容用代码 API(见 canvas.md)。

伪状态与映射

伪状态: 无专用伪态。:hover / :focus 等规则块不会改变画布交互外观。

属性说明(逐键)

本控件支持 YSS 通用属性速查 中的外壳子集(无文字、无图标)。下表按「底板 → 描边 → 其它」展开。

底板与透明度

属性 作用 取值 / 范围 说明与注意
background-color / background 画布底板色 #RRGGBB / #AARRGGBB 设计器默认 #1A1A1A;运行时为 WebView/自绘底,不给场景图元上色。
transparent-background 不铺底板 true / false true 时只画边框(若开启)与内容层。
opacity 整槽不透明度 0–100 写入控件字段;运行时场景/图元 alpha 不受此键控制,勿当作图元透明度。

描边

属性 作用 取值 / 范围 说明与注意
show-border 是否画边框 true / false 为 false 时忽略线宽与颜色。
border-color 边框色 颜色,如 #464646 设计器预览网格线独立于边框。
border-width 边框宽 像素,如 1–20
border-radius 圆角 像素,如 0–64 只圆角外壳矩形,不裁剪内部绘制。
border-style 线型 同按钮 solid / dashed / dotted 等 画布 schema 保留该键;常用实线即可。

非 YSS(设计器 / 代码)

下列能力没有对应 YSS 键(设计器/代码属性另见本页「属性」表):

设计器属性 说明
抗锯齿 逻辑;对应内部 wordWrap 槽
允许平移 / 允许缩放 逻辑
最小缩放 / 最大缩放 整数百分比(25=0.25 倍)
背景色 / 显示边框 / 边框大小 / 边框颜色 与 YSS 同源,可二选一

使用示例

深色画板

canvas {
    background-color: #1A1A1A;
    border-color: #464646;
    border-width: 1;
    border-radius: 0;
    show-border: true;
}

透明底图表区

canvas#图表 {
    background-color: #101010;
    transparent-background: false;
    show-border: false;
}

圆角监控面板

canvas#监控 {
    background-color: #0F1419;
    border-color: #2A3F5F;
    border-width: 1;
    border-radius: 8;
    show-border: true;
}

完整示例

canvas {
    background-color: #1A1A1A;
    border-color: #464646;
    border-width: 1;
    border-radius: 0;
    show-border: true;
}

canvas#图表 {
    background-color: #101010;
    border-color: #3C3C3C;
    border-width: 1;
    show-border: true;
}

canvas#叠加层 {
    transparent-background: true;
    show-border: false;
}