From 7e3e531807a97f1f05d8cd2dd022b5fb788d60f7 Mon Sep 17 00:00:00 2001 From: linghuam <1551827898@qq.com> Date: Fri, 27 Dec 2019 17:44:52 +0800 Subject: [PATCH] w3c-canvas text style --- .../w3c-canvas翻译/assets/baselines.png | Bin 0 -> 30257 bytes b00-阅读笔记/w3c-canvas翻译/w3c-canvas.md | 85 +++++++++++++++++- 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 b00-阅读笔记/w3c-canvas翻译/assets/baselines.png diff --git a/b00-阅读笔记/w3c-canvas翻译/assets/baselines.png b/b00-阅读笔记/w3c-canvas翻译/assets/baselines.png new file mode 100644 index 0000000000000000000000000000000000000000..7b7f3ea086f525e3f2ae93fbd296d78f34d78444 GIT binary patch literal 30257 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 T+0s>is=WAT8Q~J>mmmKJOh>T^ literal 0 HcmV?d00001 diff --git a/b00-阅读笔记/w3c-canvas翻译/w3c-canvas.md b/b00-阅读笔记/w3c-canvas翻译/w3c-canvas.md index 5081e36..4573ba8 100644 --- a/b00-阅读笔记/w3c-canvas翻译/w3c-canvas.md +++ b/b00-阅读笔记/w3c-canvas翻译/w3c-canvas.md @@ -290,10 +290,93 @@ function setLineDash(a) { 1. 令`path`为要跟踪的路径的副本。 2. 干掉路径中所有`长度为零`的线段。 3. 从路径中删除任何不包含线的子路径(即只有一个点的子路径)。 -4. +4. Replace each point in each subpath of path other than the first point and the last point of each subpath by a join that joins the line leading to that point to the line leading out of that point, such that the subpaths all consist of two points (a starting point with a line leading out of it, and an ending point with a line leading into it), one or more lines (connecting the points and the joins), and zero or more joins (each connecting one line to another), connected together such that each subpath is a series of one or more lines with a join between each one and a point on each end. +5. 向连接该子路径的最后一点和第一个点的路径中的每个闭合子路径添加一条直线闭合线;将最后一点更改为联接(从先前的最后一条线到新添加的闭合线),并将第一个点更改为联接(从新添加的闭合线到第一条线)。 +6. 如果 **dash list** 为空,请跳至标有“转换”的步骤。 +7. 设`pattern width`为`dash list`列表中所有条目的串联,以坐标空间单位表示。 +8. 对于路径中的每个子路径,运行以下子步骤。这些子步骤会改变路径中的子路径。 + 1. 设子路径宽度为子路径所有线的长度,以坐标空间单位为单位。 + 2. 设`offset`为样式`lineDashOffset`的值,以坐标空间单位为单位。 + 3. 当偏移量`offset`大于`pattern width`时,将其按`pattern width`减小。 + 4. 将`L`定义为沿子路径中所有线定义的线性坐标线,这样子路径中第一条线的开始被定义为坐标0,子路径中最后一条线的结束被定义为坐标子路径宽度。 + 5. 设置`position = 0 - offset`。 + 6. 设置`index = 0`。 + 7. 让当前状态`current state`为关闭(其他状态为打开且为零打开)。 + 8. **Dash on**:使段长度`segment length`为样式划线列表`styles dash list`的第`index`个条目的值。 + 9. 按段长度`segment length`递增位置`position`。 + 10. 如果位置`position`大于子路径宽度`subpath width`,然后结束此子路径的这些子步骤,并为下一个子路径再次启动它们;如果没有更多子路径,然后跳到标有“转换”的步骤。 + 11. 如果段长度`segment length`不为零,则打开当前状态`current state`。 + 12. `index++`。 + 13. **Dash off**:使段长度`segment length`为样式划线列表`styles dash list`的第`index`个条目的值。 + 14. 令`start`为`L`上的偏移位置`position`。 + 15. 按段长度`segment length`递增位置`position`。 + 16. 如果位置`position`小于零,则跳至标记为后切的步骤。 + 17. 如果`start`小于零,则将`start`设为零。 + 18. 如果`position`大于子路径宽度`subpath width`,则使`end`为`L`上的偏移子路径宽度`subpath width`。否则,使`end`为`L`上的偏移位置`position`。 + 19. 根据需要运行以下子步骤之一: + * **如果段长度`segment length`为零且当前状态`current state`为关闭`off`** + 什么也不做,只要继续下一步即可。 + * **如果当前状态`current state`为关闭`off`** + Cut the line on which end finds itself short at end and place a point there, cutting its containing subpath in two; remove all line segments, joins, points, and subpaths that are between start and end; and finally place a single point at start with no lines connecting to it. + The point has a directionality for the purposes of drawing line caps (see below). The directionality is the direction that the original line had at that point (i.e. when L was defined above). + * **除此以外** + Cut the line on which start finds itself into two at start and place a point there, cutting the subpath that it was in in two, and similarly cut the line on which end finds itself short at end and place a point there, cutting the subpath that it was in in two, and then remove all line segments, joins, points, and subpaths that are between start and end. + If start and end are the same point, then this results in just the line being cut in two and two points being inserted there, with nothing being removed, unless a join also happens to be at that point, in which case the join must be removed. + 20. 剪切后`Post-cut:`:如果位置`position`大于子路径宽度`subpath width`,则跳至标有“转换”的步骤。 + 21. 如果线段长度`segment length`大于零,则使“在虚线处定位”`positioned-at-on-dash`为假。 + 22. `index++`。如果它等于样式`dash list`列表中的条目数,则使`index`为`0`。 + 23. 跳到第`8`步,`Dash on`。 +9. 转换`Convert`:这是将路径转换为代表其笔划`stroke`的新路径的步骤。 +创建一条描述区域边缘的新路径,区域将被覆盖,如果一条直线的长度等于`lineWidth`,且沿路径中的每个路径扫过,同时保持一定角度,以使直线与扫掠路径正交,将每个点替换为满足样式`lineCap`属性所必需的端盖,如前所述并在下面进行详细说明,并用满足样式`lineJoin`类型所需的联接替换每个联接,定义如下。 + + **Caps**:每个点都有一个垂直于从其中出来的线的方向的平坦边缘。根据样式`lineCap`的值对它们进行扩充。“`butt`”值表示未添加任何额外的线宽。“`round`”值意味着必须将直径等于样式`lineWidth`宽度的半圆附加放置在从每个点出来的线上。“`square`”值表示矩形,其长度为样式`lineWidth`宽度,宽度为样式`lineWidth`的一半,垂直于从点出线的方向垂直于边缘放置,必须在每个点添加。 + + 没有线的点必须背对背放置两个顶盖,就好像两个点实际上是沿点的方向性(如上定义)通过一条无限短的直线相互连接。 + + **Joins**:除了连接发生的点外,每个联接都有两个额外的要点,一个针对每条线:发现两个角距连接点的线宽的一半;一个垂直于每条线,每条线都离另一条线最远。 + + 必须在所有联接处添加一个实心三角形,将这两个相对的角用一条直线连接,并将三角形的第三点作为联接点。 `lineJoin`属性控制是否呈现任何其他内容。 上述三个值的含义如下: + + “`bevel`”值表示这是在联接时渲染的所有内容。 + “`round`”值表示必须添加一个连接圆弧的两个圆角,该圆弧邻接(但不重叠)上述 三角形,并且直径等于线宽和连接点的原点 在加入。 + “`miter`”值表示必须在连接处添加第二个填充的三角形(如果可以给出斜接长度) ,其中一条线是上述两个角之间的线,邻接第一个三角形,另外两个是连续的 只要在 不超过斜接长度的情况下相交即可,只要两条连接线的外边缘的长度相等即可。 + + 斜接长度是从连接发生点到连接外部线边缘的交点的距离。 斜接极限比是斜接长度与 线宽一半的最大允许比率。 如果斜接长度会导致超出斜接限制比率(由样式 `miterLimit`属性设置),则不得添加第二个三角形。 + + 无论路径在路径中的方向如何,新创建的路径中的子路径都必须顺时针缠绕。 + +10. 返回新创建的路径。 ## 文本样式 +> NOTE + +> context.[font](#font) [ = value ] +返回当前字体设置。 +可以设置更改字体。语法与 CSS [font](https://developer.mozilla.org/zh-CN/docs/Web/CSS/font) 属性的语法相同。无法解析为 CSS 字体值的值将被忽略。 +相对关键字和长度值是相对于 canvas 元素的字体计算的。 +默认值`10px sans-serif`。 + +> context.[textAlign](#textAlign) [ = value ] +返回当前的文本对齐设置。 +可以设置,更改对齐方式。可能的值为“`start`”,“`end`”,“`left`”,“`right`”和“`center`”。其他值将被忽略。默认值为“`start`”。 + +> context.[textBaseline](#textBaseline) [ = value ] +返回当前基线对齐设置。 +可以设置,以更改基线对齐方式。可能的值 "`top`", "`hanging`", "`middle`", "`alphabetic`", "`ideographic`", or "`bottom`",。其他值将被忽略。默认为“`alphabetic`”。 + +设置`font`时,必须以与CSS的'font'属性相同的方式解析字体(但不支持与属性无关的样式表语法,例如'inherit'),并且必须将生成的字体分配给上下文, '`line-height`'组件被强制为'`normal`','`font-size`'组件被转换为CSS像素,并且系统字体被计算为显式值。 如果新值在语法上不正确(包括使用与属性无关的样式表语法,如“inherit”或“initial”),则必须忽略它,而无需分配新的字体值。 + +使用字体时,必须在字体样式源节点`font style source node's`的样式表的上下文中解释字体名称;因此,一旦加载,使用`@font-face`嵌入的,对该元素可见的任何字体都必须可用。 + +用户代理只能使用矢量字体;如果用户代理使用位图字体,则转换可能会使字体看起来非常难看。 + +获取时,`font`属性必须返回上下文当前字体的序列化形式(不包含“line-height”组件)。 + +`textBaseline`属性的允许关键字对应于字体中的对齐点: + +![](./assets/baselines.png) + ## 建立路径 ## 变换