- Go backend (server/)
- Frontend (web/, server/static/)
- Database and deployment files
- Scripts and docs
Co-Authored-By: 狸花猫/Claude-Qwen3.6-Plus 🐾
87 lines
3.4 KiB
JavaScript
87 lines
3.4 KiB
JavaScript
"use strict";
|
|
/**
|
|
* @fileoverview 矩形
|
|
* @author dxq613@gmail.com
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var tslib_1 = require("tslib");
|
|
var base_1 = require("./base");
|
|
var parse_1 = require("../util/parse");
|
|
var util_1 = require("../util/util");
|
|
var rect_1 = require("../util/in-stroke/rect");
|
|
var rect_radius_1 = require("../util/in-stroke/rect-radius");
|
|
var point_in_path_1 = require("../util/in-path/point-in-path");
|
|
var Rect = /** @class */ (function (_super) {
|
|
tslib_1.__extends(Rect, _super);
|
|
function Rect() {
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
}
|
|
Rect.prototype.getDefaultAttrs = function () {
|
|
var attrs = _super.prototype.getDefaultAttrs.call(this);
|
|
return tslib_1.__assign(tslib_1.__assign({}, attrs), { x: 0, y: 0, width: 0, height: 0, radius: 0 });
|
|
};
|
|
Rect.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {
|
|
var attrs = this.attr();
|
|
var minX = attrs.x;
|
|
var minY = attrs.y;
|
|
var width = attrs.width;
|
|
var height = attrs.height;
|
|
var radius = attrs.radius;
|
|
// 无圆角时的策略
|
|
if (!radius) {
|
|
var halfWidth = lineWidth / 2;
|
|
// 同时填充和带有边框
|
|
if (isFill && isStroke) {
|
|
return util_1.inBox(minX - halfWidth, minY - halfWidth, width + halfWidth, height + halfWidth, x, y);
|
|
}
|
|
// 仅填充
|
|
if (isFill) {
|
|
return util_1.inBox(minX, minY, width, height, x, y);
|
|
}
|
|
if (isStroke) {
|
|
return rect_1.default(minX, minY, width, height, lineWidth, x, y);
|
|
}
|
|
}
|
|
else {
|
|
var isHit = false;
|
|
if (isStroke) {
|
|
isHit = rect_radius_1.default(minX, minY, width, height, radius, lineWidth, x, y);
|
|
}
|
|
// 仅填充时带有圆角的矩形直接通过图形拾取
|
|
// 以后可以改成纯数学的近似拾取,将圆弧切割成多边形
|
|
if (!isHit && isFill) {
|
|
isHit = point_in_path_1.default(this, x, y);
|
|
}
|
|
return isHit;
|
|
}
|
|
};
|
|
Rect.prototype.createPath = function (context) {
|
|
var attrs = this.attr();
|
|
var x = attrs.x;
|
|
var y = attrs.y;
|
|
var width = attrs.width;
|
|
var height = attrs.height;
|
|
var radius = attrs.radius;
|
|
context.beginPath();
|
|
if (radius === 0) {
|
|
// 改成原生的rect方法
|
|
context.rect(x, y, width, height);
|
|
}
|
|
else {
|
|
var _a = parse_1.parseRadius(radius), r1 = _a[0], r2 = _a[1], r3 = _a[2], r4 = _a[3];
|
|
context.moveTo(x + r1, y);
|
|
context.lineTo(x + width - r2, y);
|
|
r2 !== 0 && context.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);
|
|
context.lineTo(x + width, y + height - r3);
|
|
r3 !== 0 && context.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);
|
|
context.lineTo(x + r4, y + height);
|
|
r4 !== 0 && context.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);
|
|
context.lineTo(x, y + r1);
|
|
r1 !== 0 && context.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);
|
|
context.closePath();
|
|
}
|
|
};
|
|
return Rect;
|
|
}(base_1.default));
|
|
exports.default = Rect;
|
|
//# sourceMappingURL=rect.js.map
|