@nasser-sw/fabric 7.0.1-beta1 → 7.0.1-beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +504 -102
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.min.mjs +1 -1
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +504 -102
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +504 -102
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +504 -102
- package/dist/index.node.mjs.map +1 -1
- package/dist/package.json.min.mjs +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/shapes/Polyline.d.ts +7 -0
- package/dist/src/shapes/Polyline.d.ts.map +1 -1
- package/dist/src/shapes/Polyline.min.mjs +1 -1
- package/dist/src/shapes/Polyline.min.mjs.map +1 -1
- package/dist/src/shapes/Polyline.mjs +48 -16
- package/dist/src/shapes/Polyline.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist/src/shapes/Text/Text.min.mjs +1 -1
- package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.mjs +64 -12
- package/dist/src/shapes/Text/Text.mjs.map +1 -1
- package/dist/src/shapes/Textbox.d.ts.map +1 -1
- package/dist/src/shapes/Textbox.min.mjs +1 -1
- package/dist/src/shapes/Textbox.min.mjs.map +1 -1
- package/dist/src/shapes/Textbox.mjs +2 -52
- package/dist/src/shapes/Textbox.mjs.map +1 -1
- package/dist/src/shapes/Triangle.d.ts +27 -2
- package/dist/src/shapes/Triangle.d.ts.map +1 -1
- package/dist/src/shapes/Triangle.min.mjs +1 -1
- package/dist/src/shapes/Triangle.min.mjs.map +1 -1
- package/dist/src/shapes/Triangle.mjs +72 -12
- package/dist/src/shapes/Triangle.mjs.map +1 -1
- package/dist/src/text/overlayEditor.d.ts.map +1 -1
- package/dist/src/text/overlayEditor.min.mjs +1 -1
- package/dist/src/text/overlayEditor.min.mjs.map +1 -1
- package/dist/src/text/overlayEditor.mjs +143 -9
- package/dist/src/text/overlayEditor.mjs.map +1 -1
- package/dist/src/util/misc/cornerRadius.d.ts +70 -0
- package/dist/src/util/misc/cornerRadius.d.ts.map +1 -0
- package/dist/src/util/misc/cornerRadius.min.mjs +2 -0
- package/dist/src/util/misc/cornerRadius.min.mjs.map +1 -0
- package/dist/src/util/misc/cornerRadius.mjs +181 -0
- package/dist/src/util/misc/cornerRadius.mjs.map +1 -0
- package/dist-extensions/src/shapes/Polyline.d.ts +7 -0
- package/dist-extensions/src/shapes/Polyline.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Triangle.d.ts +27 -2
- package/dist-extensions/src/shapes/Triangle.d.ts.map +1 -1
- package/dist-extensions/src/text/overlayEditor.d.ts.map +1 -1
- package/dist-extensions/src/util/misc/cornerRadius.d.ts +70 -0
- package/dist-extensions/src/util/misc/cornerRadius.d.ts.map +1 -0
- package/fabric-test-editor.html +1048 -0
- package/package.json +164 -164
- package/src/shapes/Polyline.ts +70 -29
- package/src/shapes/Text/Text.ts +79 -14
- package/src/shapes/Textbox.ts +1 -1
- package/src/shapes/Triangle.spec.ts +76 -0
- package/src/shapes/Triangle.ts +85 -15
- package/src/text/overlayEditor.ts +152 -12
- package/src/util/misc/cornerRadius.spec.ts +141 -0
- package/src/util/misc/cornerRadius.ts +269 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var a="7.0.
|
|
1
|
+
var a="7.0.1-beta2";export{a as version};
|
|
2
2
|
//# sourceMappingURL=package.json.min.mjs.map
|
package/dist/package.json.mjs
CHANGED
|
@@ -9,6 +9,7 @@ import type { CSSRules } from '../parser/typedefs';
|
|
|
9
9
|
export declare const polylineDefaultValues: Partial<TClassProperties<Polyline>>;
|
|
10
10
|
export interface SerializedPolylineProps extends SerializedObjectProps {
|
|
11
11
|
points: XY[];
|
|
12
|
+
cornerRadius: number;
|
|
12
13
|
}
|
|
13
14
|
export declare class Polyline<Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>, SProps extends SerializedPolylineProps = SerializedPolylineProps, EventSpec extends ObjectEvents = ObjectEvents> extends FabricObject<Props, SProps, EventSpec> {
|
|
14
15
|
/**
|
|
@@ -26,6 +27,12 @@ export declare class Polyline<Props extends TOptions<FabricObjectProps> = Partia
|
|
|
26
27
|
* @default false
|
|
27
28
|
*/
|
|
28
29
|
exactBoundingBox: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Corner radius for rounded corners
|
|
32
|
+
* @type Number
|
|
33
|
+
* @default 0
|
|
34
|
+
*/
|
|
35
|
+
cornerRadius: number;
|
|
29
36
|
private initialized;
|
|
30
37
|
static ownDefaults: Partial<TClassProperties<Polyline<Partial<FabricObjectProps>, SerializedPolylineProps, ObjectEvents>>>;
|
|
31
38
|
static type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../src/shapes/Polyline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAGtF,OAAO,EAAE,YAAY,EAAmB,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAUrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../src/shapes/Polyline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{config as
|
|
1
|
+
import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{config as s}from"../config.min.mjs";import{SHARED_ATTRIBUTES as i}from"../parser/attributes.min.mjs";import{parseAttributes as e}from"../parser/parseAttributes.min.mjs";import{parsePointsAttribute as o}from"../parser/parsePointsAttribute.min.mjs";import{Point as n}from"../Point.min.mjs";import{classRegistry as r}from"../ClassRegistry.min.mjs";import{makeBoundingBoxFromPoints as h}from"../util/misc/boundingBoxFromPoints.min.mjs";import{calcDimensionsMatrix as m,transformPoint as a}from"../util/misc/matrix.min.mjs";import{projectStrokeOnPoints as p}from"../util/misc/projectStroke/index.min.mjs";import{degreesToRadians as c}from"../util/misc/radiansDegreesConversion.min.mjs";import{toFixed as l}from"../util/misc/toFixed.min.mjs";import{FabricObject as f}from"./Object/FabricObject.min.mjs";import{SKEW_X as u,SKEW_Y as d,LEFT as g,TOP as k,CENTER as w,SCALE_X as O,SCALE_Y as x}from"../constants.min.mjs";import{applyCornerRadiusToPolygon as y,generateRoundedPolygonPath as j,renderRoundedPolygon as B}from"../util/misc/cornerRadius.min.mjs";import{cacheProperties as _}from"./Object/defaultValues.min.mjs";const D={exactBoundingBox:!1,cornerRadius:0};class b extends f{static getDefaults(){return{...super.getDefaults(),...b.ownDefaults}}constructor(){let s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),t(this,"strokeDiff",void 0),Object.assign(this,b.ownDefaults),this.setOptions(i),this.points=s;const{left:e,top:o}=i;this.initialized=!0,this.setBoundingBox(!0),"number"==typeof e&&this.set(g,e),"number"==typeof o&&this.set(k,o)}isOpen(){return!0}_projectStrokeOnPoints(t){return p(this.points,t,this.isOpen())}_calcDimensions(t){t={scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:this.strokeMiterLimit,strokeUniform:this.strokeUniform,strokeWidth:this.strokeWidth,...t||{}};const s=this.exactBoundingBox?this._projectStrokeOnPoints(t).map(t=>t.projectedPoint):this.points;if(0===s.length)return{left:0,top:0,width:0,height:0,pathOffset:new n,strokeOffset:new n,strokeDiff:new n};const i=h(s),e=m({...t,scaleX:1,scaleY:1}),o=h(this.points.map(t=>a(t,e,!0))),r=new n(this.scaleX,this.scaleY);let p=i.left+i.width/2,l=i.top+i.height/2;return this.exactBoundingBox&&(p-=l*Math.tan(c(this.skewX)),l-=p*Math.tan(c(this.skewY))),{...i,pathOffset:new n(p,l),strokeOffset:new n(o.left,o.top).subtract(new n(i.left,i.top)).multiply(r),strokeDiff:new n(i.width,i.height).subtract(new n(o.width,o.height)).multiply(r)}}_findCenterFromElement(){const t=h(this.points);return new n(t.left+t.width/2,t.top+t.height/2)}setDimensions(){this.setBoundingBox()}setBoundingBox(t){const{left:s,top:i,width:e,height:o,pathOffset:r,strokeOffset:h,strokeDiff:m}=this._calcDimensions();this.set({width:e,height:o,pathOffset:r,strokeOffset:h,strokeDiff:m}),t&&this.setPositionByOrigin(new n(s+e/2,i+o/2),w,w)}isStrokeAccountedForInDimensions(){return this.exactBoundingBox}_getNonTransformedDimensions(){return this.exactBoundingBox?new n(this.width,this.height):super._getNonTransformedDimensions()}_getTransformedDimensions(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this.exactBoundingBox){let r;if(Object.keys(t).some(t=>this.strokeUniform||this.constructor.layoutProperties.includes(t))){var s,i;const{width:e,height:o}=this._calcDimensions(t);r=new n(null!==(s=t.width)&&void 0!==s?s:e,null!==(i=t.height)&&void 0!==i?i:o)}else{var e,o;r=new n(null!==(e=t.width)&&void 0!==e?e:this.width,null!==(o=t.height)&&void 0!==o?o:this.height)}return r.multiply(new n(t.scaleX||this.scaleX,t.scaleY||this.scaleY))}return super._getTransformedDimensions(t)}_set(t,s){const i=this.initialized&&this[t]!==s,e=super._set(t,s);return this.exactBoundingBox&&i&&((t===O||t===x)&&this.strokeUniform&&this.constructor.layoutProperties.includes("strokeUniform")||this.constructor.layoutProperties.includes(t))&&this.setDimensions(),e}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{...super.toObject(["cornerRadius",...t]),points:this.points.map(t=>{let{x:s,y:i}=t;return{x:s,y:i}})}}_toSVG(){if(this.cornerRadius>0&&this.points.length>=3){const t=this.pathOffset.x,s=this.pathOffset.y,i=this.points.map(i=>({x:i.x-t,y:i.y-s})),e=y(i,this.cornerRadius);return["<path ","COMMON_PARTS",`d="${j(e,!this.isOpen())}" />\n`]}{const t=[],i=this.pathOffset.x,e=this.pathOffset.y,o=s.NUM_FRACTION_DIGITS;for(let s=0,n=this.points.length;s<n;s++)t.push(l(this.points[s].x-i,o),",",l(this.points[s].y-e,o)," ");return[`<${this.constructor.type.toLowerCase()} `,"COMMON_PARTS",`points="${t.join("")}" />\n`]}}_render(t){const s=this.points.length,i=this.pathOffset.x,e=this.pathOffset.y;if(s&&!isNaN(this.points[s-1].y)){if(this.cornerRadius>0&&s>=3){const s=this.points.map(t=>({x:t.x-i,y:t.y-e})),o=y(s,this.cornerRadius);B(t,o,!this.isOpen())}else{t.beginPath(),t.moveTo(this.points[0].x-i,this.points[0].y-e);for(let o=0;o<s;o++){const s=this.points[o];t.lineTo(s.x-i,s.y-e)}!this.isOpen()&&t.closePath()}this._renderPaintInOrder(t)}}complexity(){return this.points.length}static async fromElement(t,s,i){const n=o(t.getAttribute("points")),{left:r,top:h,...m}=e(t,this.ATTRIBUTE_NAMES,i);return new this(n,{...m,...s})}static fromObject(t){return this._fromObject(t,{extraParam:"points"})}}t(b,"ownDefaults",D),t(b,"type","Polyline"),t(b,"layoutProperties",[u,d,"strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeWidth","strokeUniform","points"]),t(b,"cacheProperties",[..._,"points","cornerRadius"]),t(b,"ATTRIBUTE_NAMES",[...i]),r.setClass(b),r.setSVGClass(b);export{b as Polyline,D as polylineDefaultValues};
|
|
2
2
|
//# sourceMappingURL=Polyline.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polyline.min.mjs","sources":["../../../src/shapes/Polyline.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n}\n\nexport class Polyline<\n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Points array\n * @type Array\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n declare private initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial<TProjectStrokeOnPointsOptions>) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const points = [],\n diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n for (let i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),\n ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),\n ' ',\n );\n }\n return [\n `<${\n (this.constructor as typeof Polyline).type.toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points.join('')}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @param {Object} object Object to create an instance from\n * @returns {Promise<Polyline>}\n */\n static fromObject<T extends TOptions<SerializedPolylineProps>>(object: T) {\n return this._fromObject<Polyline>(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n"],"names":["polylineDefaultValues","exactBoundingBox","Polyline","FabricObject","getDefaults","super","ownDefaults","constructor","points","arguments","length","undefined","options","_defineProperty","this","Object","assign","setOptions","left","top","initialized","setBoundingBox","set","LEFT","TOP","isOpen","_projectStrokeOnPoints","projectStrokeOnPoints","_calcDimensions","scaleX","scaleY","skewX","skewY","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeUniform","strokeWidth","map","projection","projectedPoint","width","height","pathOffset","Point","strokeOffset","strokeDiff","bbox","makeBoundingBoxFromPoints","matrix","calcDimensionsMatrix","bboxNoStroke","p","transformPoint","scale","offsetX","offsetY","Math","tan","degreesToRadians","subtract","multiply","_findCenterFromElement","setDimensions","adjustPosition","setPositionByOrigin","CENTER","isStrokeAccountedForInDimensions","_getNonTransformedDimensions","_getTransformedDimensions","size","keys","some","key","layoutProperties","includes","_options$width","_options$height","_options$width2","_options$height2","_set","value","changed","output","SCALE_X","SCALE_Y","toObject","propertiesToInclude","_ref","x","y","_toSVG","diffX","diffY","NUM_FRACTION_DIGITS","config","i","len","push","toFixed","type","toLowerCase","join","_render","ctx","isNaN","beginPath","moveTo","point","lineTo","closePath","_renderPaintInOrder","complexity","fromElement","element","cssRules","parsePointsAttribute","getAttribute","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","object","_fromObject","extraParam","SKEW_X","SKEW_Y","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Polyline.min.mjs","sources":["../../../src/shapes/Polyline.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\nimport {\n applyCornerRadiusToPolygon,\n renderRoundedPolygon,\n generateRoundedPolygonPath,\n} from '../util/misc/cornerRadius';\n\nexport const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n cornerRadius: 0,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n cornerRadius: number;\n}\n\nexport class Polyline<\n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Points array\n * @type Array\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n /**\n * Corner radius for rounded corners\n * @type Number\n * @default 0\n */\n declare cornerRadius: number;\n\n declare private initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points', 'cornerRadius'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial<TProjectStrokeOnPointsOptions>) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(['cornerRadius', ...propertiesToInclude]),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n if (this.cornerRadius > 0 && this.points.length >= 3) {\n // Generate rounded polygon/polyline as path\n const diffX = this.pathOffset.x;\n const diffY = this.pathOffset.y;\n const adjustedPoints = this.points.map(point => ({\n x: point.x - diffX,\n y: point.y - diffY,\n }));\n const roundedCorners = applyCornerRadiusToPolygon(adjustedPoints, this.cornerRadius);\n const pathData = generateRoundedPolygonPath(roundedCorners, !this.isOpen());\n return ['<path ', 'COMMON_PARTS', `d=\"${pathData}\" />\\n`];\n } else {\n // Original sharp corners implementation\n const points = [];\n const diffX = this.pathOffset.x;\n const diffY = this.pathOffset.y;\n const NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n for (let i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),\n ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),\n ' ',\n );\n }\n return [\n `<${\n (this.constructor as typeof Polyline).type.toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points.join('')}\" />\\n`,\n ];\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n\n if (this.cornerRadius > 0 && len >= 3) {\n // Render with rounded corners\n const adjustedPoints = this.points.map(point => ({\n x: point.x - x,\n y: point.y - y,\n }));\n const roundedCorners = applyCornerRadiusToPolygon(adjustedPoints, this.cornerRadius);\n renderRoundedPolygon(ctx, roundedCorners, !this.isOpen());\n } else {\n // Original sharp corners implementation\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n }\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @param {Object} object Object to create an instance from\n * @returns {Promise<Polyline>}\n */\n static fromObject<T extends TOptions<SerializedPolylineProps>>(object: T) {\n return this._fromObject<Polyline>(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n"],"names":["polylineDefaultValues","exactBoundingBox","cornerRadius","Polyline","FabricObject","getDefaults","super","ownDefaults","constructor","points","arguments","length","undefined","options","_defineProperty","this","Object","assign","setOptions","left","top","initialized","setBoundingBox","set","LEFT","TOP","isOpen","_projectStrokeOnPoints","projectStrokeOnPoints","_calcDimensions","scaleX","scaleY","skewX","skewY","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeUniform","strokeWidth","map","projection","projectedPoint","width","height","pathOffset","Point","strokeOffset","strokeDiff","bbox","makeBoundingBoxFromPoints","matrix","calcDimensionsMatrix","bboxNoStroke","p","transformPoint","scale","offsetX","offsetY","Math","tan","degreesToRadians","subtract","multiply","_findCenterFromElement","setDimensions","adjustPosition","setPositionByOrigin","CENTER","isStrokeAccountedForInDimensions","_getNonTransformedDimensions","_getTransformedDimensions","size","keys","some","key","layoutProperties","includes","_options$width","_options$height","_options$width2","_options$height2","_set","value","changed","output","SCALE_X","SCALE_Y","toObject","propertiesToInclude","_ref","x","y","_toSVG","diffX","diffY","adjustedPoints","point","roundedCorners","applyCornerRadiusToPolygon","generateRoundedPolygonPath","NUM_FRACTION_DIGITS","config","i","len","push","toFixed","type","toLowerCase","join","_render","ctx","isNaN","renderRoundedPolygon","beginPath","moveTo","lineTo","closePath","_renderPaintInOrder","complexity","fromElement","element","cssRules","parsePointsAttribute","getAttribute","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","object","_fromObject","extraParam","SKEW_X","SKEW_Y","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
@@ -12,13 +12,15 @@ import { degreesToRadians } from '../util/misc/radiansDegreesConversion.mjs';
|
|
|
12
12
|
import { toFixed } from '../util/misc/toFixed.mjs';
|
|
13
13
|
import { FabricObject } from './Object/FabricObject.mjs';
|
|
14
14
|
import { SKEW_X, SKEW_Y, LEFT, TOP, CENTER, SCALE_X, SCALE_Y } from '../constants.mjs';
|
|
15
|
+
import { applyCornerRadiusToPolygon, generateRoundedPolygonPath, renderRoundedPolygon } from '../util/misc/cornerRadius.mjs';
|
|
15
16
|
import { cacheProperties } from './Object/defaultValues.mjs';
|
|
16
17
|
|
|
17
18
|
const polylineDefaultValues = {
|
|
18
19
|
/**
|
|
19
20
|
* @deprecated transient option soon to be removed in favor of a different design
|
|
20
21
|
*/
|
|
21
|
-
exactBoundingBox: false
|
|
22
|
+
exactBoundingBox: false,
|
|
23
|
+
cornerRadius: 0
|
|
22
24
|
};
|
|
23
25
|
class Polyline extends FabricObject {
|
|
24
26
|
static getDefaults() {
|
|
@@ -232,7 +234,7 @@ class Polyline extends FabricObject {
|
|
|
232
234
|
toObject() {
|
|
233
235
|
let propertiesToInclude = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
234
236
|
return {
|
|
235
|
-
...super.toObject(propertiesToInclude),
|
|
237
|
+
...super.toObject(['cornerRadius', ...propertiesToInclude]),
|
|
236
238
|
points: this.points.map(_ref => {
|
|
237
239
|
let {
|
|
238
240
|
x,
|
|
@@ -252,14 +254,28 @@ class Polyline extends FabricObject {
|
|
|
252
254
|
* of the instance
|
|
253
255
|
*/
|
|
254
256
|
_toSVG() {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
257
|
+
if (this.cornerRadius > 0 && this.points.length >= 3) {
|
|
258
|
+
// Generate rounded polygon/polyline as path
|
|
259
|
+
const diffX = this.pathOffset.x;
|
|
260
|
+
const diffY = this.pathOffset.y;
|
|
261
|
+
const adjustedPoints = this.points.map(point => ({
|
|
262
|
+
x: point.x - diffX,
|
|
263
|
+
y: point.y - diffY
|
|
264
|
+
}));
|
|
265
|
+
const roundedCorners = applyCornerRadiusToPolygon(adjustedPoints, this.cornerRadius);
|
|
266
|
+
const pathData = generateRoundedPolygonPath(roundedCorners, !this.isOpen());
|
|
267
|
+
return ['<path ', 'COMMON_PARTS', `d="${pathData}" />\n`];
|
|
268
|
+
} else {
|
|
269
|
+
// Original sharp corners implementation
|
|
270
|
+
const points = [];
|
|
271
|
+
const diffX = this.pathOffset.x;
|
|
272
|
+
const diffY = this.pathOffset.y;
|
|
273
|
+
const NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;
|
|
274
|
+
for (let i = 0, len = this.points.length; i < len; i++) {
|
|
275
|
+
points.push(toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS), ',', toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS), ' ');
|
|
276
|
+
}
|
|
277
|
+
return [`<${this.constructor.type.toLowerCase()} `, 'COMMON_PARTS', `points="${points.join('')}" />\n`];
|
|
261
278
|
}
|
|
262
|
-
return [`<${this.constructor.type.toLowerCase()} `, 'COMMON_PARTS', `points="${points.join('')}" />\n`];
|
|
263
279
|
}
|
|
264
280
|
|
|
265
281
|
/**
|
|
@@ -275,13 +291,24 @@ class Polyline extends FabricObject {
|
|
|
275
291
|
// NaN comes from parseFloat of a empty string in parser
|
|
276
292
|
return;
|
|
277
293
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
294
|
+
if (this.cornerRadius > 0 && len >= 3) {
|
|
295
|
+
// Render with rounded corners
|
|
296
|
+
const adjustedPoints = this.points.map(point => ({
|
|
297
|
+
x: point.x - x,
|
|
298
|
+
y: point.y - y
|
|
299
|
+
}));
|
|
300
|
+
const roundedCorners = applyCornerRadiusToPolygon(adjustedPoints, this.cornerRadius);
|
|
301
|
+
renderRoundedPolygon(ctx, roundedCorners, !this.isOpen());
|
|
302
|
+
} else {
|
|
303
|
+
// Original sharp corners implementation
|
|
304
|
+
ctx.beginPath();
|
|
305
|
+
ctx.moveTo(this.points[0].x - x, this.points[0].y - y);
|
|
306
|
+
for (let i = 0; i < len; i++) {
|
|
307
|
+
const point = this.points[i];
|
|
308
|
+
ctx.lineTo(point.x - x, point.y - y);
|
|
309
|
+
}
|
|
310
|
+
!this.isOpen() && ctx.closePath();
|
|
283
311
|
}
|
|
284
|
-
!this.isOpen() && ctx.closePath();
|
|
285
312
|
this._renderPaintInOrder(ctx);
|
|
286
313
|
}
|
|
287
314
|
|
|
@@ -346,10 +373,15 @@ class Polyline extends FabricObject {
|
|
|
346
373
|
* @type Boolean
|
|
347
374
|
* @default false
|
|
348
375
|
*/
|
|
376
|
+
/**
|
|
377
|
+
* Corner radius for rounded corners
|
|
378
|
+
* @type Number
|
|
379
|
+
* @default 0
|
|
380
|
+
*/
|
|
349
381
|
_defineProperty(Polyline, "ownDefaults", polylineDefaultValues);
|
|
350
382
|
_defineProperty(Polyline, "type", 'Polyline');
|
|
351
383
|
_defineProperty(Polyline, "layoutProperties", [SKEW_X, SKEW_Y, 'strokeLineCap', 'strokeLineJoin', 'strokeMiterLimit', 'strokeWidth', 'strokeUniform', 'points']);
|
|
352
|
-
_defineProperty(Polyline, "cacheProperties", [...cacheProperties, 'points']);
|
|
384
|
+
_defineProperty(Polyline, "cacheProperties", [...cacheProperties, 'points', 'cornerRadius']);
|
|
353
385
|
_defineProperty(Polyline, "ATTRIBUTE_NAMES", [...SHARED_ATTRIBUTES]);
|
|
354
386
|
classRegistry.setClass(Polyline);
|
|
355
387
|
classRegistry.setSVGClass(Polyline);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polyline.mjs","sources":["../../../src/shapes/Polyline.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n}\n\nexport class Polyline<\n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Points array\n * @type Array\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n declare private initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial<TProjectStrokeOnPointsOptions>) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const points = [],\n diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n for (let i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),\n ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),\n ' ',\n );\n }\n return [\n `<${\n (this.constructor as typeof Polyline).type.toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points.join('')}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @param {Object} object Object to create an instance from\n * @returns {Promise<Polyline>}\n */\n static fromObject<T extends TOptions<SerializedPolylineProps>>(object: T) {\n return this._fromObject<Polyline>(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n"],"names":["polylineDefaultValues","exactBoundingBox","Polyline","FabricObject","getDefaults","ownDefaults","constructor","points","arguments","length","undefined","options","_defineProperty","Object","assign","setOptions","left","top","initialized","setBoundingBox","set","LEFT","TOP","isOpen","_projectStrokeOnPoints","projectStrokeOnPoints","_calcDimensions","scaleX","scaleY","skewX","skewY","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeUniform","strokeWidth","map","projection","projectedPoint","width","height","pathOffset","Point","strokeOffset","strokeDiff","bbox","makeBoundingBoxFromPoints","matrix","calcDimensionsMatrix","bboxNoStroke","p","transformPoint","scale","offsetX","offsetY","Math","tan","degreesToRadians","subtract","multiply","_findCenterFromElement","setDimensions","adjustPosition","setPositionByOrigin","CENTER","isStrokeAccountedForInDimensions","_getNonTransformedDimensions","_getTransformedDimensions","size","keys","some","key","layoutProperties","includes","_options$width","_options$height","_options$width2","_options$height2","_set","value","changed","output","SCALE_X","SCALE_Y","toObject","propertiesToInclude","_ref","x","y","_toSVG","diffX","diffY","NUM_FRACTION_DIGITS","config","i","len","push","toFixed","type","toLowerCase","join","_render","ctx","isNaN","beginPath","moveTo","point","lineTo","closePath","_renderPaintInOrder","complexity","fromElement","element","cssRules","parsePointsAttribute","getAttribute","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","object","_fromObject","extraParam","SKEW_X","SKEW_Y","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Polyline.mjs","sources":["../../../src/shapes/Polyline.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\nimport {\n applyCornerRadiusToPolygon,\n renderRoundedPolygon,\n generateRoundedPolygonPath,\n} from '../util/misc/cornerRadius';\n\nexport const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n cornerRadius: 0,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n cornerRadius: number;\n}\n\nexport class Polyline<\n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Points array\n * @type Array\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n /**\n * Corner radius for rounded corners\n * @type Number\n * @default 0\n */\n declare cornerRadius: number;\n\n declare private initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points', 'cornerRadius'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial<TProjectStrokeOnPointsOptions>) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(['cornerRadius', ...propertiesToInclude]),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n if (this.cornerRadius > 0 && this.points.length >= 3) {\n // Generate rounded polygon/polyline as path\n const diffX = this.pathOffset.x;\n const diffY = this.pathOffset.y;\n const adjustedPoints = this.points.map(point => ({\n x: point.x - diffX,\n y: point.y - diffY,\n }));\n const roundedCorners = applyCornerRadiusToPolygon(adjustedPoints, this.cornerRadius);\n const pathData = generateRoundedPolygonPath(roundedCorners, !this.isOpen());\n return ['<path ', 'COMMON_PARTS', `d=\"${pathData}\" />\\n`];\n } else {\n // Original sharp corners implementation\n const points = [];\n const diffX = this.pathOffset.x;\n const diffY = this.pathOffset.y;\n const NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n for (let i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),\n ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),\n ' ',\n );\n }\n return [\n `<${\n (this.constructor as typeof Polyline).type.toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points.join('')}\" />\\n`,\n ];\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n\n if (this.cornerRadius > 0 && len >= 3) {\n // Render with rounded corners\n const adjustedPoints = this.points.map(point => ({\n x: point.x - x,\n y: point.y - y,\n }));\n const roundedCorners = applyCornerRadiusToPolygon(adjustedPoints, this.cornerRadius);\n renderRoundedPolygon(ctx, roundedCorners, !this.isOpen());\n } else {\n // Original sharp corners implementation\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n }\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @param {Object} object Object to create an instance from\n * @returns {Promise<Polyline>}\n */\n static fromObject<T extends TOptions<SerializedPolylineProps>>(object: T) {\n return this._fromObject<Polyline>(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n"],"names":["polylineDefaultValues","exactBoundingBox","cornerRadius","Polyline","FabricObject","getDefaults","ownDefaults","constructor","points","arguments","length","undefined","options","_defineProperty","Object","assign","setOptions","left","top","initialized","setBoundingBox","set","LEFT","TOP","isOpen","_projectStrokeOnPoints","projectStrokeOnPoints","_calcDimensions","scaleX","scaleY","skewX","skewY","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeUniform","strokeWidth","map","projection","projectedPoint","width","height","pathOffset","Point","strokeOffset","strokeDiff","bbox","makeBoundingBoxFromPoints","matrix","calcDimensionsMatrix","bboxNoStroke","p","transformPoint","scale","offsetX","offsetY","Math","tan","degreesToRadians","subtract","multiply","_findCenterFromElement","setDimensions","adjustPosition","setPositionByOrigin","CENTER","isStrokeAccountedForInDimensions","_getNonTransformedDimensions","_getTransformedDimensions","size","keys","some","key","layoutProperties","includes","_options$width","_options$height","_options$width2","_options$height2","_set","value","changed","output","SCALE_X","SCALE_Y","toObject","propertiesToInclude","_ref","x","y","_toSVG","diffX","diffY","adjustedPoints","point","roundedCorners","applyCornerRadiusToPolygon","pathData","generateRoundedPolygonPath","NUM_FRACTION_DIGITS","config","i","len","push","toFixed","type","toLowerCase","join","_render","ctx","isNaN","renderRoundedPolygon","beginPath","moveTo","lineTo","closePath","_renderPaintInOrder","complexity","fromElement","element","cssRules","parsePointsAttribute","getAttribute","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","object","_fromObject","extraParam","SKEW_X","SKEW_Y","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../../../src/shapes/Text/Text.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../../../src/shapes/Text/Text.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t}from"../../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{cache as e}from"../../cache.min.mjs";import{RIGHT as i,CENTER as s,STROKE as n,BOTTOM as h,TOP as r,FILL as o,LEFT as l,DEFAULT_SVG_FONT_SIZE as a}from"../../constants.min.mjs";import{StyledText as d}from"./StyledText.min.mjs";import{SHARED_ATTRIBUTES as c}from"../../parser/attributes.min.mjs";import{parseAttributes as f}from"../../parser/parseAttributes.min.mjs";import{classRegistry as g}from"../../ClassRegistry.min.mjs";import{graphemeSplit as p}from"../../util/lang_string.min.mjs";import{createCanvasElementFor as u}from"../../util/misc/dom.min.mjs";import{layoutText as m}from"../../text/layout.min.mjs";import{hasStyleChanged as _,stylesToArray as x,stylesFromArray as y}from"../../util/misc/textStyles.min.mjs";import{getPathSegmentsInfo as S,getPointOnPath as T}from"../../util/path/index.min.mjs";import"../Object/FabricObject.min.mjs";import{TextSVGExportMixin as L}from"./TextSVGExportMixin.min.mjs";import{applyMixins as w}from"../../util/applyMixins.min.mjs";import{textLayoutProperties as O,additionalProps as C,textDefaultValues as k,JUSTIFY as v,JUSTIFY_CENTER as W,JUSTIFY_RIGHT as A,JUSTIFY_LEFT as H,TEXT_DECORATION_THICKNESS as D}from"./constants.min.mjs";import{isFiller as P}from"../../util/typeAssertions.min.mjs";import{getBrowserLines as b,clearBrowserLines as j}from"../../text/browserLines.min.mjs";import{cacheProperties as F}from"../Object/defaultValues.min.mjs";let z;class B extends d{static getDefaults(){return{...super.getDefaults(),...B.ownDefaults}}constructor(e,i){super(),t(this,"__charBounds",[]),Object.assign(this,B.ownDefaults),this.setOptions(i),this.styles||(this.styles={}),this.text=e,this.initialized=!0,this.path&&this.setPathInfo(),this.initDimensions(),this.setCoords()}setPathInfo(){const t=this.path;t&&(t.segmentsInfo=S(t.path))}_splitText(){const t=b(this);if(t&&this.useOverlayEditing)return this._splitTextFromBrowserLines(t);const e=this._splitTextIntoLines(this.text);return this.textLines=e.lines,this._textLines=e.graphemeLines,this._unwrappedTextLines=e._unwrappedLines,this._text=e.graphemeText,e}_splitTextFromBrowserLines(t){const e=[],i=[],s=[];let n=[];for(const h of t){e.push(h.text);const r=this.graphemeSplit(h.text);i.push(r),s.push(r),n=n.concat(r),h!==t[t.length-1]&&n.push("\n")}const h={lines:e,graphemeLines:i,graphemeText:n,_unwrappedLines:s};return this.textLines=h.lines,this._textLines=h.graphemeLines,this._unwrappedTextLines=h._unwrappedLines,this._text=h.graphemeText,h}initDimensions(){if(this.enableAdvancedLayout&&!this.path)return this.initDimensionsAdvanced();this._splitText(),this._clearCache(),this.dirty=!0,this.path?(this.width=this.path.width,this.height=this.path.height):(this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight()),this.textAlign.includes(v)&&this.enlargeSpaces()}enlargeSpaces(){let t,e,i,s,n,h,r;for(let o=0,l=this._textLines.length;o<l;o++)if((this.textAlign===v||o!==l-1&&!this.isEndOfWrapping(o))&&(s=0,n=this._textLines[o],e=this.getLineWidth(o),e<this.width&&(r=this.textLines[o].match(this._reSpacesAndTabs)))){i=r.length,t=(this.width-e)/i;for(let e=0;e<=n.length;e++)h=this.__charBounds[o][e],this._reSpaceAndTab.test(n[e])?(h.width+=t,h.kernedWidth+=t,h.left+=s,s+=t):h.left+=s}}_layoutTextAdvanced(){const t=this._getAdvancedLayoutOptions();return m(t)}_getAdvancedLayoutOptions(){return{text:this.text,width:this.width,height:this.height,wrap:this.wrap||"word",align:this._mapTextAlignToAlign(this.textAlign),ellipsis:this.ellipsis||!1,fontSize:this.fontSize,lineHeight:this.lineHeight,letterSpacing:this.letterSpacing||0,charSpacing:this.charSpacing,direction:"inherit"===this.direction?"ltr":this.direction,fontFamily:this.fontFamily,fontStyle:this.fontStyle,fontWeight:this.fontWeight,verticalAlign:this.verticalAlign||"top"}}_mapTextAlignToAlign(t){switch(t){case"center":case s:return"center";case"right":case i:return"right";case"justify":case v:case H:case A:case W:return"justify";default:return"left"}}initDimensionsAdvanced(){if(!this.enableAdvancedLayout)return this.initDimensions();const t=this._layoutTextAdvanced();this.width=t.totalWidth||this.MIN_TEXT_WIDTH,this.height=t.totalHeight,this._convertLayoutToLegacyFormat(t),this.dirty=!0}_convertLayoutToLegacyFormat(t){this._textLines=t.lines.map(t=>t.graphemes),this.textLines=t.lines.map(t=>t.text),this.__charBounds=t.lines.map(t=>t.bounds.map(t=>({left:t.left,top:t.y,width:t.width,height:t.height,kernedWidth:t.kernedWidth,deltaY:t.deltaY||0}))),t.lines.length>0&&(this._unwrappedTextLines=t.lines.map(t=>t.graphemes))}isEndOfWrapping(t){return t===this._textLines.length-1}missingNewlineOffset(t){return 1}get2DCursorLocation(t,e){const i=e?this._unwrappedTextLines:this._textLines;let s;for(s=0;s<i.length;s++){if(t<=i[s].length)return{lineIndex:s,charIndex:t};t-=i[s].length+this.missingNewlineOffset(s,e)}return{lineIndex:s-1,charIndex:i[s-1].length<t?i[s-1].length:t}}toString(){return`#<Text (${this.complexity()}): { "text": "${this.text}", "fontFamily": "${this.fontFamily}" }>`}_getCacheCanvasDimensions(){const t=super._getCacheCanvasDimensions(),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t}_render(t){const e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")}_renderText(t){this.__overlayEditor||(this.paintFirst===n?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t)))}_setTextStyles(t,e,i){if(t.textBaseline="alphabetic",this.path)switch(this.pathAlign){case s:t.textBaseline="middle";break;case"ascender":t.textBaseline=r;break;case"descender":t.textBaseline=h}t.font=this._getFontDeclaration(e,i)}calcTextWidth(){let t=this.getLineWidth(0);for(let e=1,i=this._textLines.length;e<i;e++){const i=this.getLineWidth(e);i>t&&(t=i)}return t}_renderTextLine(t,e,i,s,n,h){this._renderChars(t,e,i,s,n,h)}_renderTextLinesBackground(t){if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))return;const e=t.fillStyle,i=this._getLeftOffset();let s=this._getTopOffset();for(let e=0,n=this._textLines.length;e<n;e++){const n=this.getHeightOfLine(e);if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",e)){s+=n;continue}const h=this._textLines[e].length,r=this._getLineLeftOffset(e);let o,l,a=0,d=0,c=this.getValueOfPropertyAt(e,0,"textBackgroundColor");for(let f=0;f<h;f++){const h=this.__charBounds[e][f];l=this.getValueOfPropertyAt(e,f,"textBackgroundColor"),this.path?(t.save(),t.translate(h.renderLeft,h.renderTop),t.rotate(h.angle),t.fillStyle=l,l&&t.fillRect(-h.width/2,-n/this.lineHeight*(1-this._fontSizeFraction),h.width,n/this.lineHeight),t.restore()):l!==c?(o=i+r+d,"rtl"===this.direction&&(o=this.width-o-a),t.fillStyle=c,c&&t.fillRect(o,s,a,n/this.lineHeight),d=h.left,a=h.width,c=l):a+=h.kernedWidth}l&&!this.path&&(o=i+r+d,"rtl"===this.direction&&(o=this.width-o-a),t.fillStyle=l,t.fillRect(o,s,a,n/this.lineHeight)),s+=n}t.fillStyle=e,this._removeShadow(t)}_measureChar(t,i,s,n){const h=e.getFontCache(i),r=this._getFontDeclaration(i),o=s+t,l=s&&r===this._getFontDeclaration(n),a=i.fontSize/this.CACHE_FONT_SIZE;let d,c,f,g;if(s&&void 0!==h[s]&&(f=h[s]),void 0!==h[t]&&(g=d=h[t]),l&&void 0!==h[o]&&(c=h[o],g=c-f),void 0===d||void 0===f||void 0===c){const e=function(){if(!z){const t=u({width:0,height:0});z=t.getContext("2d")}return z}();this._setTextStyles(e,i,!0),void 0===d&&(g=d=e.measureText(t).width,h[t]=d),void 0===f&&l&&s&&(f=e.measureText(s).width,h[s]=f),l&&void 0===c&&(c=e.measureText(o).width,h[o]=c,g=c-f)}return{width:d*a,kernedWidth:g*a}}getHeightOfChar(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")}measureLine(t){const e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e}_measureLine(t){let e,n,h=0;const r=this.pathSide===i,o=this.path,a=this._textLines[t],d=a.length,c=new Array(d);this.__charBounds[t]=c;for(let i=0;i<d;i++){const s=a[i];n=this._getGraphemeBox(s,t,i,e),c[i]=n,h+=n.kernedWidth,e=s}if(c[d]={left:n?n.left+n.width:0,width:0,kernedWidth:0,height:this.fontSize,deltaY:0},o&&o.segmentsInfo){let t=0;const e=o.segmentsInfo[o.segmentsInfo.length-1].length;switch(this.textAlign){case l:t=r?e-h:0;break;case s:t=(e-h)/2;break;case i:t=r?0:e-h}t+=this.pathStartOffset*(r?-1:1);for(let i=r?d-1:0;r?i>=0:i<d;r?i--:i++)n=c[i],t>e?t%=e:t<0&&(t+=e),this._setGraphemeOnPath(t,n),t+=n.kernedWidth}return{width:h,numOfSpaces:0}}_setGraphemeOnPath(t,e){const s=t+e.kernedWidth/2,n=this.path,h=T(n.path,s,n.segmentsInfo);e.renderLeft=h.x-n.pathOffset.x,e.renderTop=h.y-n.pathOffset.y,e.angle=h.angle+(this.pathSide===i?Math.PI:0)}_getGraphemeBox(t,e,i,s,n){const h=this.getCompleteStyleDeclaration(e,i),r=s?this.getCompleteStyleDeclaration(e,i-1):{},o=this._measureChar(t,h,s,r);let l,a=o.kernedWidth,d=o.width;0!==this.charSpacing&&(l=this._getWidthOfCharSpacing(),d+=l,a+=l);const c={width:d,left:0,height:h.fontSize,kernedWidth:a,deltaY:h.deltaY};if(i>0&&!n){const t=this.__charBounds[e][i-1];c.left=t.left+t.width+o.kernedWidth-o.width}return c}getHeightOfLine(t){if(this.__lineHeights[t])return this.__lineHeights[t];let e=this.getHeightOfChar(t,0);for(let i=1,s=this._textLines[t].length;i<s;i++)e=Math.max(this.getHeightOfChar(t,i),e);return this.__lineHeights[t]=e*this.lineHeight*this._fontSizeMult}calcTextHeight(){let t,e=0;for(let i=0,s=this._textLines.length;i<s;i++)t=this.getHeightOfLine(i),e+=i===s-1?t/this.lineHeight:t;return e}_getLeftOffset(){return"ltr"===this.direction?-this.width/2:this.width/2}_getTopOffset(){return-this.height/2}_renderTextCommon(t,e){t.save();let i=0;const s=this._getLeftOffset(),n=this._getTopOffset();for(let h=0,r=this._textLines.length;h<r;h++){const r=this.getHeightOfLine(h),o=r/this.lineHeight,l=this._getLineLeftOffset(h);this._renderTextLine(e,t,this._textLines[h],s+l,n+i+o,h),i+=r}t.restore()}_renderTextFill(t){(this.fill||this.styleHas(o))&&this._renderTextCommon(t,"fillText")}_renderTextStroke(t){(this.stroke&&0!==this.strokeWidth||!this.isEmptyStyles())&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray),t.beginPath(),this._renderTextCommon(t,"strokeText"),t.closePath(),t.restore())}_renderChars(t,e,s,n,h,r){const o=this.getHeightOfLine(r),a=this.textAlign.includes(v),d=this.path,c=!a&&0===this.charSpacing&&this.isEmptyStyles(r)&&!d,f="ltr"===this.direction,g="ltr"===this.direction?1:-1,p=e.direction;let u,m,x,y,S,T="",L=0;if(e.save(),p!==this.direction&&(e.canvas.setAttribute("dir",f?"ltr":"rtl"),e.direction=f?"ltr":"rtl",e.textAlign=f?l:i),h-=o*this._fontSizeFraction/this.lineHeight,c)return this._renderChar(t,e,r,0,s.join(""),n,h),void e.restore();for(let i=0,o=s.length-1;i<=o;i++)y=i===o||this.charSpacing||d,T+=s[i],x=this.__charBounds[r][i],0===L?(n+=g*(x.kernedWidth-x.width),L+=x.width):L+=x.kernedWidth,a&&!y&&this._reSpaceAndTab.test(s[i])&&(y=!0),y||(u=u||this.getCompleteStyleDeclaration(r,i),m=this.getCompleteStyleDeclaration(r,i+1),y=_(u,m,!1)),y&&(d?(e.save(),e.translate(x.renderLeft,x.renderTop),e.rotate(x.angle),this._renderChar(t,e,r,i,T,-L/2,0),e.restore()):(S=n,this._renderChar(t,e,r,i,T,S,h)),T="",u=m,n+=g*L,L=0);e.restore()}_applyPatternGradientTransformText(t){const e=this.width+this.strokeWidth,i=this.height+this.strokeWidth,s=u({width:e,height:i}),n=s.getContext("2d");return s.width=e,s.height=i,n.beginPath(),n.moveTo(0,0),n.lineTo(e,0),n.lineTo(e,i),n.lineTo(0,i),n.closePath(),n.translate(e/2,i/2),n.fillStyle=t.toLive(n),this._applyPatternGradientTransform(n,t),n.fill(),n.createPattern(s,"no-repeat")}handleFiller(t,e,i){let s,n;return P(i)?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?(s=-this.width/2,n=-this.height/2,t.translate(s,n),t[e]=this._applyPatternGradientTransformText(i),{offsetX:s,offsetY:n}):(t[e]=i.toLive(t),this._applyPatternGradientTransform(t,i)):(t[e]=i,{offsetX:0,offsetY:0})}_setStrokeStyles(t,e){let{stroke:i,strokeWidth:s}=e;return t.lineWidth=s,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",i)}_setFillStyles(t,e){let{fill:i}=e;return this.handleFiller(t,"fillStyle",i)}_renderChar(t,e,i,s,n,h,r){const o=this._getStyleDeclaration(i,s),l=this.getCompleteStyleDeclaration(i,s),a="fillText"===t&&l.fill,d="strokeText"===t&&l.stroke&&l.strokeWidth;if(d||a){if(e.save(),e.font=this._getFontDeclaration(l),o.textBackgroundColor&&this._removeShadow(e),o.deltaY&&(r+=o.deltaY),a){const t=this._setFillStyles(e,l);e.fillText(n,h-t.offsetX,r-t.offsetY)}if(d){const t=this._setStrokeStyles(e,l);e.strokeText(n,h-t.offsetX,r-t.offsetY)}e.restore()}}setSuperscript(t,e){this._setScript(t,e,this.superscript)}setSubscript(t,e){this._setScript(t,e,this.subscript)}_setScript(t,e,i){const s=this.get2DCursorLocation(t,!0),n=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"fontSize"),h=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"deltaY"),r={fontSize:n*i.size,deltaY:h+n*i.baseline};this.setSelectionStyles(r,t,e)}_getLineLeftOffset(t){const e=this.getLineWidth(t),n=this.width-e,h=this.textAlign,r=this.direction,o=this.isEndOfWrapping(t);let a=0;return h===v||h===W&&!o||h===A&&!o||h===H&&!o?0:(h===s&&(a=n/2),h===i&&(a=n),h===W&&(a=n/2),h===A&&(a=n),"rtl"===r&&(h===i||h===v||h===A?a=0:h===l||h===H?a=-n:h!==s&&h!==W||(a=-n/2)),a)}_clearCache(){this._forceClearCache=!1,this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]}getLineWidth(t){if(void 0!==this.__lineWidths[t])return this.__lineWidths[t];const{width:e}=this.measureLine(t);return this.__lineWidths[t]=e,e}_getWidthOfCharSpacing(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0}getValueOfPropertyAt(t,e,i){var s;return null!==(s=this._getStyleDeclaration(t,e)[i])&&void 0!==s?s:this[i]}_renderTextDecoration(t,e){if(!this[e]&&!this.styleHas(e))return;let i=this._getTopOffset();const s=this._getLeftOffset(),n=this.path,h=this._getWidthOfCharSpacing(),r="linethrough"===e?.5:"overline"===e?1:0,l=this.offsets[e];for(let a=0,d=this._textLines.length;a<d;a++){const d=this.getHeightOfLine(a);if(!this[e]&&!this.styleHas(e,a)){i+=d;continue}const c=this._textLines[a],f=d/this.lineHeight,g=this._getLineLeftOffset(a);let p=0,u=0,m=this.getValueOfPropertyAt(a,0,e),_=this.getValueOfPropertyAt(a,0,o),x=this.getValueOfPropertyAt(a,0,D),y=m,S=_,T=x;const L=i+f*(1-this._fontSizeFraction);let w=this.getHeightOfChar(a,0),O=this.getValueOfPropertyAt(a,0,"deltaY");for(let i=0,h=c.length;i<h;i++){const h=this.__charBounds[a][i];y=this.getValueOfPropertyAt(a,i,e),S=this.getValueOfPropertyAt(a,i,o),T=this.getValueOfPropertyAt(a,i,D);const d=this.getHeightOfChar(a,i),c=this.getValueOfPropertyAt(a,i,"deltaY");if(n&&y&&S){const e=this.fontSize*T/1e3;t.save(),t.fillStyle=_,t.translate(h.renderLeft,h.renderTop),t.rotate(h.angle),t.fillRect(-h.kernedWidth/2,l*d+c-r*e,h.kernedWidth,e),t.restore()}else if((y!==m||S!==_||d!==w||T!==x||c!==O)&&u>0){const e=this.fontSize*x/1e3;let i=s+g+p;"rtl"===this.direction&&(i=this.width-i-u),m&&_&&x&&(t.fillStyle=_,t.fillRect(i,L+l*w+O-r*e,u,e)),p=h.left,u=h.width,m=y,x=T,_=S,w=d,O=c}else u+=h.kernedWidth}let C=s+g+p;"rtl"===this.direction&&(C=this.width-C-u),t.fillStyle=S;const k=this.fontSize*T/1e3;y&&S&&T&&t.fillRect(C,L+l*w+O-r*k,u-h,k),i+=d}this._removeShadow(t)}_getFontDeclaration(){let{fontFamily:t=this.fontFamily,fontStyle:e=this.fontStyle,fontWeight:i=this.fontWeight,fontSize:s=this.fontSize}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;const h=t.includes("'")||t.includes('"')||t.includes(",")||B.genericFonts.includes(t.toLowerCase())?t:`"${t}"`;return[e,i,`${n?this.CACHE_FONT_SIZE:s}px`,h].join(" ")}render(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._forceClearCache&&this.initDimensions(),super.render(t)))}graphemeSplit(t){return p(t)}_splitTextIntoLines(t){const e=t.split(this._reNewline),i=new Array(e.length),s=["\n"];let n=[];for(let t=0;t<e.length;t++)i[t]=this.graphemeSplit(e[t]),n=n.concat(i[t],s);return n.pop(),{_unwrappedLines:i,lines:e,graphemeText:n,graphemeLines:i}}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{...super.toObject([...C,...t]),styles:x(this.styles,this.text),...this.path?{path:this.path.toObject()}:{}}}set(t,e){const{textLayoutProperties:i}=this.constructor;super.set(t,e);let s=!1,n=!1;if("object"==typeof t)for(const e in t)"path"===e&&this.setPathInfo(),s=s||i.includes(e),n=n||"path"===e;else s=i.includes(t),n="path"===t;return n&&this.setPathInfo(),s&&this.initialized&&(j(this),this.initDimensions(),this.setCoords()),this}complexity(){return 1}static async fromElement(t,e,n){const h=f(t,B.ATTRIBUTE_NAMES,n),{textAnchor:r=l,textDecoration:o="",dx:d=0,dy:c=0,top:g=0,left:p=0,fontSize:u=a,strokeWidth:m=1,..._}={...e,...h},x=new this((t.textContent||"").replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," "),{left:p+d,top:g+c,underline:o.includes("underline"),overline:o.includes("overline"),linethrough:o.includes("line-through"),strokeWidth:0,fontSize:u,..._}),y=x.getScaledHeight()/x.height,S=((x.height+x.strokeWidth)*x.lineHeight-x.height)*y,T=x.getScaledHeight()+S;let L=0;return r===s&&(L=x.getScaledWidth()/2),r===i&&(L=x.getScaledWidth()),x.set({left:x.left-L,top:x.top-(T-x.fontSize*(.07+x._fontSizeFraction))/x.lineHeight,strokeWidth:m}),x}static fromObject(t){return this._fromObject({...t,styles:y(t.styles||{},t.text)},{extraParam:"text"})}}t(B,"textLayoutProperties",O),t(B,"cacheProperties",[...F,...C]),t(B,"ownDefaults",k),t(B,"type","Text"),t(B,"genericFonts",["serif","sans-serif","monospace","cursive","fantasy","system-ui","ui-serif","ui-sans-serif","ui-monospace","ui-rounded","math","emoji","fangsong"]),t(B,"ATTRIBUTE_NAMES",c.concat("x","y","dx","dy","font-family","font-style","font-weight","font-size","letter-spacing","text-decoration","text-anchor")),w(B,[L]),g.setClass(B),g.setSVGClass(B);export{B as FabricText};
|
|
1
|
+
import{defineProperty as t}from"../../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{cache as e}from"../../cache.min.mjs";import{RIGHT as i,CENTER as s,STROKE as n,BOTTOM as h,TOP as r,FILL as o,LEFT as l,DEFAULT_SVG_FONT_SIZE as a}from"../../constants.min.mjs";import{StyledText as d}from"./StyledText.min.mjs";import{SHARED_ATTRIBUTES as c}from"../../parser/attributes.min.mjs";import{parseAttributes as f}from"../../parser/parseAttributes.min.mjs";import{classRegistry as g}from"../../ClassRegistry.min.mjs";import{graphemeSplit as p}from"../../util/lang_string.min.mjs";import{createCanvasElementFor as _}from"../../util/misc/dom.min.mjs";import{layoutText as u}from"../../text/layout.min.mjs";import{hasStyleChanged as m,stylesToArray as x,stylesFromArray as S}from"../../util/misc/textStyles.min.mjs";import{getPathSegmentsInfo as y,getPointOnPath as T}from"../../util/path/index.min.mjs";import"../Object/FabricObject.min.mjs";import{TextSVGExportMixin as L}from"./TextSVGExportMixin.min.mjs";import{applyMixins as w}from"../../util/applyMixins.min.mjs";import{textLayoutProperties as O,additionalProps as C,textDefaultValues as k,JUSTIFY as v,JUSTIFY_CENTER as W,JUSTIFY_RIGHT as A,JUSTIFY_LEFT as H,TEXT_DECORATION_THICKNESS as D}from"./constants.min.mjs";import{isFiller as b}from"../../util/typeAssertions.min.mjs";import{getBrowserLines as P,clearBrowserLines as j}from"../../text/browserLines.min.mjs";import{cacheProperties as F}from"../Object/defaultValues.min.mjs";let B;class z extends d{static getDefaults(){return{...super.getDefaults(),...z.ownDefaults}}constructor(e,i){super(),t(this,"__charBounds",[]),Object.assign(this,z.ownDefaults),this.setOptions(i),this.styles||(this.styles={}),this.text=e,this.initialized=!0,this.path&&this.setPathInfo(),this.initDimensions(),this.setCoords()}setPathInfo(){const t=this.path;t&&(t.segmentsInfo=y(t.path))}_splitText(){const t=P(this);if(t&&this.useOverlayEditing)return this._splitTextFromBrowserLines(t);const e=this._splitTextIntoLines(this.text);return this.textLines=e.lines,this._textLines=e.graphemeLines,this._unwrappedTextLines=e._unwrappedLines,this._text=e.graphemeText,e}_splitTextFromBrowserLines(t){const e=[],i=[],s=[];let n=[];for(const h of t){e.push(h.text);const r=this.graphemeSplit(h.text);i.push(r),s.push(r),n=n.concat(r),h!==t[t.length-1]&&n.push("\n")}const h={lines:e,graphemeLines:i,graphemeText:n,_unwrappedLines:s};return this.textLines=h.lines,this._textLines=h.graphemeLines,this._unwrappedTextLines=h._unwrappedLines,this._text=h.graphemeText,h}initDimensions(){if(this.enableAdvancedLayout&&!this.path)return this.initDimensionsAdvanced();this._splitText(),this._clearCache(),this.dirty=!0,this.path?(this.width=this.path.width,this.height=this.path.height):(this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight()),this.textAlign.includes(v)&&this.enlargeSpaces()}enlargeSpaces(){let t,e,i,s,n,h,r;const o="rtl"===this.direction;for(let l=0,a=this._textLines.length;l<a;l++)if((this.textAlign===v||l!==a-1&&!this.isEndOfWrapping(l))&&(s=0,n=this._textLines[l],e=this.getLineWidth(l),e<this.width&&(r=this.textLines[l].match(this._reSpacesAndTabs))))if(i=r.length,t=(this.width-e)/i,o){for(let t=0;t<n.length;t++)this._reSpaceAndTab.test(n[t]);let e=0;for(let s=0;s<=n.length;s++)if(h=this.__charBounds[l][s],h){this._reSpaceAndTab.test(n[s])&&(h.width+=t,h.kernedWidth+=t,e++);const r=(i-e)*t;h.left+=r}}else for(let e=0;e<=n.length;e++)h=this.__charBounds[l][e],h&&(this._reSpaceAndTab.test(n[e])?(h.width+=t,h.kernedWidth+=t,h.left+=s,s+=t):h.left+=s)}_layoutTextAdvanced(){const t=this._getAdvancedLayoutOptions();return u(t)}_getAdvancedLayoutOptions(){return{text:this.text,width:this.width,height:this.height,wrap:this.wrap||"word",align:this._mapTextAlignToAlign(this.textAlign),ellipsis:this.ellipsis||!1,fontSize:this.fontSize,lineHeight:this.lineHeight,letterSpacing:this.letterSpacing||0,charSpacing:this.charSpacing,direction:"inherit"===this.direction?"ltr":this.direction,fontFamily:this.fontFamily,fontStyle:this.fontStyle,fontWeight:this.fontWeight,verticalAlign:this.verticalAlign||"top"}}_mapTextAlignToAlign(t){switch(t){case"center":case s:return"center";case"right":case i:return"right";case"justify":case v:case H:case A:case W:return"justify";default:return"left"}}initDimensionsAdvanced(){if(!this.enableAdvancedLayout)return this.initDimensions();const t=this._layoutTextAdvanced();this.width=t.totalWidth||this.MIN_TEXT_WIDTH,this.height=t.totalHeight,this._convertLayoutToLegacyFormat(t),this.dirty=!0}_convertLayoutToLegacyFormat(t){this._textLines=t.lines.map(t=>t.graphemes),this.textLines=t.lines.map(t=>t.text),this.__charBounds=t.lines.map(t=>t.bounds.map(t=>({left:t.left,top:t.y,width:t.width,height:t.height,kernedWidth:t.kernedWidth,deltaY:t.deltaY||0}))),t.lines.length>0&&(this._unwrappedTextLines=t.lines.map(t=>t.graphemes))}isEndOfWrapping(t){return t===this._textLines.length-1}missingNewlineOffset(t){return 1}get2DCursorLocation(t,e){const i=e?this._unwrappedTextLines:this._textLines;let s;for(s=0;s<i.length;s++){if(t<=i[s].length)return{lineIndex:s,charIndex:t};t-=i[s].length+this.missingNewlineOffset(s,e)}return{lineIndex:s-1,charIndex:i[s-1].length<t?i[s-1].length:t}}toString(){return`#<Text (${this.complexity()}): { "text": "${this.text}", "fontFamily": "${this.fontFamily}" }>`}_getCacheCanvasDimensions(){const t=super._getCacheCanvasDimensions(),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t}_render(t){const e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")}_renderText(t){this.__overlayEditor||(this.paintFirst===n?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t)))}_setTextStyles(t,e,i){if(t.textBaseline="alphabetic",this.path)switch(this.pathAlign){case s:t.textBaseline="middle";break;case"ascender":t.textBaseline=r;break;case"descender":t.textBaseline=h}t.font=this._getFontDeclaration(e,i)}calcTextWidth(){let t=this.getLineWidth(0);for(let e=1,i=this._textLines.length;e<i;e++){const i=this.getLineWidth(e);i>t&&(t=i)}return t}_renderTextLine(t,e,i,s,n,h){this._renderChars(t,e,i,s,n,h)}_renderTextLinesBackground(t){if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))return;const e=t.fillStyle,i=this._getLeftOffset();let s=this._getTopOffset();for(let e=0,n=this._textLines.length;e<n;e++){const n=this.getHeightOfLine(e);if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",e)){s+=n;continue}const h=this._textLines[e].length,r=this._getLineLeftOffset(e);let o,l,a=0,d=0,c=this.getValueOfPropertyAt(e,0,"textBackgroundColor");for(let f=0;f<h;f++){const h=this.__charBounds[e][f];l=this.getValueOfPropertyAt(e,f,"textBackgroundColor"),this.path?(t.save(),t.translate(h.renderLeft,h.renderTop),t.rotate(h.angle),t.fillStyle=l,l&&t.fillRect(-h.width/2,-n/this.lineHeight*(1-this._fontSizeFraction),h.width,n/this.lineHeight),t.restore()):l!==c?(o=i+r+d,"rtl"===this.direction&&(o=this.width-o-a),t.fillStyle=c,c&&t.fillRect(o,s,a,n/this.lineHeight),d=h.left,a=h.width,c=l):a+=h.kernedWidth}l&&!this.path&&(o=i+r+d,"rtl"===this.direction&&(o=this.width-o-a),t.fillStyle=l,t.fillRect(o,s,a,n/this.lineHeight)),s+=n}t.fillStyle=e,this._removeShadow(t)}_measureChar(t,i,s,n){const h=e.getFontCache(i),r=this._getFontDeclaration(i),o=s+t,l=s&&r===this._getFontDeclaration(n),a=i.fontSize/this.CACHE_FONT_SIZE;let d,c,f,g;if(s&&void 0!==h[s]&&(f=h[s]),void 0!==h[t]&&(g=d=h[t]),l&&void 0!==h[o]&&(c=h[o],g=c-f),void 0===d||void 0===f||void 0===c){const e=function(){if(!B){const t=_({width:0,height:0});B=t.getContext("2d")}return B}();this._setTextStyles(e,i,!0),void 0===d&&(g=d=e.measureText(t).width,h[t]=d),void 0===f&&l&&s&&(f=e.measureText(s).width,h[s]=f),l&&void 0===c&&(c=e.measureText(o).width,h[o]=c,g=c-f)}return{width:d*a,kernedWidth:g*a}}getHeightOfChar(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")}measureLine(t){const e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e}_measureLine(t){let e,n,h=0;const r=this.pathSide===i,o=this.path,a=this._textLines[t],d=a.length,c=new Array(d);this.__charBounds[t]=c;for(let i=0;i<d;i++){const s=a[i];n=this._getGraphemeBox(s,t,i,e),c[i]=n,h+=n.kernedWidth,e=s}if(c[d]={left:n?n.left+n.width:0,width:0,kernedWidth:0,height:this.fontSize,deltaY:0},o&&o.segmentsInfo){let t=0;const e=o.segmentsInfo[o.segmentsInfo.length-1].length;switch(this.textAlign){case l:t=r?e-h:0;break;case s:t=(e-h)/2;break;case i:t=r?0:e-h}t+=this.pathStartOffset*(r?-1:1);for(let i=r?d-1:0;r?i>=0:i<d;r?i--:i++)n=c[i],t>e?t%=e:t<0&&(t+=e),this._setGraphemeOnPath(t,n),t+=n.kernedWidth}return{width:h,numOfSpaces:0}}_setGraphemeOnPath(t,e){const s=t+e.kernedWidth/2,n=this.path,h=T(n.path,s,n.segmentsInfo);e.renderLeft=h.x-n.pathOffset.x,e.renderTop=h.y-n.pathOffset.y,e.angle=h.angle+(this.pathSide===i?Math.PI:0)}_getGraphemeBox(t,e,i,s,n){const h=this.getCompleteStyleDeclaration(e,i),r=s?this.getCompleteStyleDeclaration(e,i-1):{},o=this._measureChar(t,h,s,r);let l,a=o.kernedWidth,d=o.width;0!==this.charSpacing&&(l=this._getWidthOfCharSpacing(),d+=l,a+=l);const c={width:d,left:0,height:h.fontSize,kernedWidth:a,deltaY:h.deltaY};if(i>0&&!n){const t=this.__charBounds[e][i-1];c.left=t.left+t.width+o.kernedWidth-o.width}return c}getHeightOfLine(t){if(this.__lineHeights[t])return this.__lineHeights[t];let e=this.getHeightOfChar(t,0);for(let i=1,s=this._textLines[t].length;i<s;i++)e=Math.max(this.getHeightOfChar(t,i),e);return this.__lineHeights[t]=e*this.lineHeight*this._fontSizeMult}calcTextHeight(){let t,e=0;for(let i=0,s=this._textLines.length;i<s;i++)t=this.getHeightOfLine(i),e+=i===s-1?t/this.lineHeight:t;return e}_getLeftOffset(){return"ltr"===this.direction?-this.width/2:this.width/2}_getTopOffset(){return-this.height/2}_renderTextCommon(t,e){t.save();let i=0;const s=this._getLeftOffset(),n=this._getTopOffset();for(let h=0,r=this._textLines.length;h<r;h++){const r=this.getHeightOfLine(h),o=r/this.lineHeight,l=this._getLineLeftOffset(h);this._renderTextLine(e,t,this._textLines[h],s+l,n+i+o,h),i+=r}t.restore()}_renderTextFill(t){(this.fill||this.styleHas(o))&&this._renderTextCommon(t,"fillText")}_renderTextStroke(t){(this.stroke&&0!==this.strokeWidth||!this.isEmptyStyles())&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray),t.beginPath(),this._renderTextCommon(t,"strokeText"),t.closePath(),t.restore())}_renderChars(t,e,s,n,h,r){const o=this.getHeightOfLine(r),a=this.textAlign.includes(v),d=this.path,c=!a&&0===this.charSpacing&&this.isEmptyStyles(r)&&!d,f="ltr"===this.direction,g="ltr"===this.direction?1:-1,p=e.direction;let _,u,x,S,y,T="",L=0;if(e.save(),p!==this.direction&&(e.canvas.setAttribute("dir",f?"ltr":"rtl"),e.direction=f?"ltr":"rtl",e.textAlign=a||f?l:i),h-=o*this._fontSizeFraction/this.lineHeight,c)return this._renderChar(t,e,r,0,s.join(""),n,h),void e.restore();for(let i=0,o=s.length-1;i<=o;i++)S=i===o||this.charSpacing||d,T+=s[i],x=this.__charBounds[r][i],0===L?(n+=g*(x.kernedWidth-x.width),L+=x.width):L+=x.kernedWidth,a&&!S&&this._reSpaceAndTab.test(s[i])&&(S=!0),S||(_=_||this.getCompleteStyleDeclaration(r,i),u=this.getCompleteStyleDeclaration(r,i+1),S=m(_,u,!1)),S&&(d?(e.save(),e.translate(x.renderLeft,x.renderTop),e.rotate(x.angle),this._renderChar(t,e,r,i,T,-L/2,0),e.restore()):(y=n,this._renderChar(t,e,r,i,T,y,h)),T="",_=u,n+=g*L,L=0);e.restore()}_applyPatternGradientTransformText(t){const e=this.width+this.strokeWidth,i=this.height+this.strokeWidth,s=_({width:e,height:i}),n=s.getContext("2d");return s.width=e,s.height=i,n.beginPath(),n.moveTo(0,0),n.lineTo(e,0),n.lineTo(e,i),n.lineTo(0,i),n.closePath(),n.translate(e/2,i/2),n.fillStyle=t.toLive(n),this._applyPatternGradientTransform(n,t),n.fill(),n.createPattern(s,"no-repeat")}handleFiller(t,e,i){let s,n;return b(i)?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?(s=-this.width/2,n=-this.height/2,t.translate(s,n),t[e]=this._applyPatternGradientTransformText(i),{offsetX:s,offsetY:n}):(t[e]=i.toLive(t),this._applyPatternGradientTransform(t,i)):(t[e]=i,{offsetX:0,offsetY:0})}_setStrokeStyles(t,e){let{stroke:i,strokeWidth:s}=e;return t.lineWidth=s,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",i)}_setFillStyles(t,e){let{fill:i}=e;return this.handleFiller(t,"fillStyle",i)}_renderChar(t,e,i,s,n,h,r){const o=this._getStyleDeclaration(i,s),l=this.getCompleteStyleDeclaration(i,s),a="fillText"===t&&l.fill,d="strokeText"===t&&l.stroke&&l.strokeWidth;if(d||a){if(e.save(),e.font=this._getFontDeclaration(l),o.textBackgroundColor&&this._removeShadow(e),o.deltaY&&(r+=o.deltaY),a){const t=this._setFillStyles(e,l);e.fillText(n,h-t.offsetX,r-t.offsetY)}if(d){const t=this._setStrokeStyles(e,l);e.strokeText(n,h-t.offsetX,r-t.offsetY)}e.restore()}}setSuperscript(t,e){this._setScript(t,e,this.superscript)}setSubscript(t,e){this._setScript(t,e,this.subscript)}_setScript(t,e,i){const s=this.get2DCursorLocation(t,!0),n=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"fontSize"),h=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"deltaY"),r={fontSize:n*i.size,deltaY:h+n*i.baseline};this.setSelectionStyles(r,t,e)}_getLineLeftOffset(t){const e=this.getLineWidth(t),n=this.width-e,h=this.textAlign,r=this.direction,o=this.isEndOfWrapping(t);let a=0;return h===v||h===W&&!o||h===A&&!o||h===H&&!o?0:(h===s&&(a=n/2),h===i&&(a=n),h===W&&(a=n/2),h===A&&(a=n),"rtl"===r&&(h===i||h===v||h===A?a=0:h===l||h===H?a=-n:h!==s&&h!==W||(a=-n/2)),a)}_clearCache(){this._forceClearCache=!1,this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]}getLineWidth(t){if(void 0!==this.__lineWidths[t])return this.__lineWidths[t];const{width:e}=this.measureLine(t);return this.__lineWidths[t]=e,e}_getWidthOfCharSpacing(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0}getValueOfPropertyAt(t,e,i){var s;return null!==(s=this._getStyleDeclaration(t,e)[i])&&void 0!==s?s:this[i]}_renderTextDecoration(t,e){if(!this[e]&&!this.styleHas(e))return;let i=this._getTopOffset();const s=this._getLeftOffset(),n=this.path,h=this._getWidthOfCharSpacing(),r="linethrough"===e?.5:"overline"===e?1:0,l=this.offsets[e];for(let a=0,d=this._textLines.length;a<d;a++){const d=this.getHeightOfLine(a);if(!this[e]&&!this.styleHas(e,a)){i+=d;continue}const c=this._textLines[a],f=d/this.lineHeight,g=this._getLineLeftOffset(a);let p=0,_=0,u=this.getValueOfPropertyAt(a,0,e),m=this.getValueOfPropertyAt(a,0,o),x=this.getValueOfPropertyAt(a,0,D),S=u,y=m,T=x;const L=i+f*(1-this._fontSizeFraction);let w=this.getHeightOfChar(a,0),O=this.getValueOfPropertyAt(a,0,"deltaY");for(let i=0,h=c.length;i<h;i++){const h=this.__charBounds[a][i];S=this.getValueOfPropertyAt(a,i,e),y=this.getValueOfPropertyAt(a,i,o),T=this.getValueOfPropertyAt(a,i,D);const d=this.getHeightOfChar(a,i),c=this.getValueOfPropertyAt(a,i,"deltaY");if(n&&S&&y){const e=this.fontSize*T/1e3;t.save(),t.fillStyle=m,t.translate(h.renderLeft,h.renderTop),t.rotate(h.angle),t.fillRect(-h.kernedWidth/2,l*d+c-r*e,h.kernedWidth,e),t.restore()}else if((S!==u||y!==m||d!==w||T!==x||c!==O)&&_>0){const e=this.fontSize*x/1e3;let i=s+g+p;"rtl"===this.direction&&(i=this.width-i-_),u&&m&&x&&(t.fillStyle=m,t.fillRect(i,L+l*w+O-r*e,_,e)),p=h.left,_=h.width,u=S,x=T,m=y,w=d,O=c}else _+=h.kernedWidth}let C=s+g+p;"rtl"===this.direction&&(C=this.width-C-_),t.fillStyle=y;const k=this.fontSize*T/1e3;S&&y&&T&&t.fillRect(C,L+l*w+O-r*k,_-h,k),i+=d}this._removeShadow(t)}_getFontDeclaration(){let{fontFamily:t=this.fontFamily,fontStyle:e=this.fontStyle,fontWeight:i=this.fontWeight,fontSize:s=this.fontSize}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;const h=t.includes("'")||t.includes('"')||t.includes(",")||z.genericFonts.includes(t.toLowerCase())?t:`"${t}"`;return[e,i,`${n?this.CACHE_FONT_SIZE:s}px`,h].join(" ")}render(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._forceClearCache&&this.initDimensions(),super.render(t)))}graphemeSplit(t){return p(t)}_splitTextIntoLines(t){const e=t.split(this._reNewline),i=new Array(e.length),s=["\n"];let n=[];for(let t=0;t<e.length;t++)i[t]=this.graphemeSplit(e[t]),n=n.concat(i[t],s);return n.pop(),{_unwrappedLines:i,lines:e,graphemeText:n,graphemeLines:i}}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{...super.toObject([...C,...t]),styles:x(this.styles,this.text),...this.path?{path:this.path.toObject()}:{}}}set(t,e){const{textLayoutProperties:i}=this.constructor;super.set(t,e);let s=!1,n=!1;if("object"==typeof t)for(const e in t)"path"===e&&this.setPathInfo(),s=s||i.includes(e),n=n||"path"===e;else s=i.includes(t),n="path"===t;return n&&this.setPathInfo(),s&&this.initialized&&(j(this),this.initDimensions(),this.setCoords()),this}complexity(){return 1}static async fromElement(t,e,n){const h=f(t,z.ATTRIBUTE_NAMES,n),{textAnchor:r=l,textDecoration:o="",dx:d=0,dy:c=0,top:g=0,left:p=0,fontSize:_=a,strokeWidth:u=1,...m}={...e,...h},x=new this((t.textContent||"").replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," "),{left:p+d,top:g+c,underline:o.includes("underline"),overline:o.includes("overline"),linethrough:o.includes("line-through"),strokeWidth:0,fontSize:_,...m}),S=x.getScaledHeight()/x.height,y=((x.height+x.strokeWidth)*x.lineHeight-x.height)*S,T=x.getScaledHeight()+y;let L=0;return r===s&&(L=x.getScaledWidth()/2),r===i&&(L=x.getScaledWidth()),x.set({left:x.left-L,top:x.top-(T-x.fontSize*(.07+x._fontSizeFraction))/x.lineHeight,strokeWidth:u}),x}static fromObject(t){return this._fromObject({...t,styles:S(t.styles||{},t.text)},{extraParam:"text"})}}t(z,"textLayoutProperties",O),t(z,"cacheProperties",[...F,...C]),t(z,"ownDefaults",k),t(z,"type","Text"),t(z,"genericFonts",["serif","sans-serif","monospace","cursive","fantasy","system-ui","ui-serif","ui-sans-serif","ui-monospace","ui-rounded","math","emoji","fangsong"]),t(z,"ATTRIBUTE_NAMES",c.concat("x","y","dx","dy","font-family","font-style","font-weight","font-size","letter-spacing","text-decoration","text-anchor")),w(z,[L]),g.setClass(z),g.setSVGClass(z);export{z as FabricText};
|
|
2
2
|
//# sourceMappingURL=Text.min.mjs.map
|