@embedpdf/核心注释
纯粹的注释核心:手势、几何、命中测试和场景
纯函数。 没有DOM,没有引擎,没有框架,没有时钟. 注释
插件 (e)@embedpdf/plugin-annotation(中文(简体) )
运行它与发动机.
合同
update(model: Model, message: Message): UpdateResult;
interface UpdateResult {
session: Session; // selection, hover, the gesture in progress, tool settings
change: ChangeSet; // { put: records the message changed or created, drop: ids it deleted }
effects: Effect[]; // the engine work to do: create, patch, flags, text, delete, …
}
type Model = Session & AnnotationView; // AnnotationView = { byId, order }
一个信息与它运行的模式一致;下一会,记录它
改变和工作 做出来。 核心从不存储记录:
记录 model.byId 是插件所显示的( 引擎的记录用
这段会议正等待上演
消息改变了他们。 插件将效果转换为一个更改
引擎,它显示 直到引擎回答.
后果值得了解:
- 更改不返回记录的信件
EMPTY_CHANGE指针移动 在拖动时仅更改会话(手势)draft因此费用 一个比较. - 核心创建的记录需要会话所持有的第一个对象编号
(单位:千美元)
Session.objectNumbers校对:soup 框并标出unconfirmed直到引擎写下来 插件 手动消息运行前可能需要的编号 (单位:千美元)newRecordsAtMost; 核心拒绝制作无法命名的记录. A 类 替换文本切出 回答它的护身符的号码, 所以两者都是 写成一个变化。 当记录离开视图时,插件会发送forget。 。 。 . - 改变后如何记录是一条规则
src/appearance.ts, (中文(简体) ), 对于手势,侧边栏编辑和代码编辑相同:一个动作会保留光栅 并移动它,任何其他可见的变化 绘制活,邮票和形式 部件总是显示它们的光栅(邮票按自己的比例,如 发动机适合它contain) (中文(简体) ). 它问引擎自己的判断 (单位:千美元)appearanceChangeOf),因此,视图保持了一种外观,确切位置是: 引擎确实如此。 发动机的再生光栅是否改变 是发动机的 回答,从来没有核心.
处理每条消息的地方
src/update/ 每个工作都有一个单元. update/index.ts 这是
条目和消息开关.
| 模块 | 信件 |
|---|---|
edit.ts | editPointer 下并移动: 选择、 移动、 调整大小、 旋转、 标题、 领导者 |
edit-commit.ts | editPointer 上: 手势的结果变为记录的几何 |
marquee.ts | marqueePointer: 橡胶带选择 |
draw.ts | createPointer, (中文(简体) ), finishInkDraft, (中文(简体) ), finishCreationDraft |
draw-callout.ts | 免费文本点名手势 |
draw-distance.ts | 距离测量手势 |
text-markup.ts | createMarkup, (中文(简体) ), createCaret, (中文(简体) ), createReplaceText标记预览 |
selection-edits.ts | setFields, (中文(简体) ), setFlags, (中文(简体) ), rotateSelection, (中文(简体) ), resetRotation, (中文(简体) ), delete |
text.ts | setText, (中文(简体) ), setRichText |
session.ts | 初始会话,工具默认值, forget |
changes.ts | 每一个改变记录的过渡股份 |
page-bound.ts | 在他们开始的页面中保持手势 |
原文为:view.ts, (中文(简体) ), hit.ts, (中文(简体) ), scene.ts, (中文(简体) ), geometry.ts,)采取同样的
Model 永远不要改变它.
创造的手势会怎样
一个创建工具回答了一个问题:如果手势现在结束,那会是什么
存在吗? placement.ts 答案为: gesturePlacement 给拖放的盒子
一旦手势被拖动, 则会单击默认
(单位:千美元)resolveClickPlacement:它的大小,以及哪个部分在点击上着陆. 每个
形状家庭回答什么(ShapeFamily.placed,通过 placedShape(单位:千美元)
框,一个圆形,一个文本框,一个与工具结尾相接的行,一个圆形收音机
按钮。 犯罪(draw.ts),绘制中view.ts)和
工具的幽灵( 插件的) tools/ghost.ts发出同样的呼吁
unmadeItem 画一个尚未制作的注释,因为所制作的注释将作画.
测试
test/support.ts 以插件的方式驱动核心 : modelWith(records)
建立一个模型,以及 step(model, message) 应用消息的结果(其
和记录中的更改).