《从零开始, 开发一个 Web Office 套件》系列博客目录

这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office 套件, 包括: 文档, 表格, 幻灯片... 等等.

对应的Github repo 地址: https://github.com/zhaokang555/canvas-text-editor

2. 富文本编辑器(MVP)

2.15 Mouse hover over text

2.15.1 再议 Bounding box

首先,让我们来回顾一下CanvasTextEditorChar的包围盒:

如上图,CanvasTextEditorChar的包围盒是由:left, boundingBoxTop, width, height定义的。另外,其top仅指的是textBaseLine的纵坐标,跟包围盒没有直接的关系。

我们期望的结果是:当鼠标hover在包围盒上时,产生相应变化。

所以,不能直接让CanvasTextEditorChar直接继承ResponsiveToMouseHover,因为二者的top含义完全不同。而是要让CanvasTextEditorChar的包围盒继承它。

2.15.2 实现

修改CanvasTextEditorChar

  • 让其持有一个boundingBox对象:

    • 添加属性:boundingBox: ResponsiveToMouseHover
    • constructor中为boundingBox初始化

  • 当修改Char的位置信息时,要同时更新boundingBox的位置信息

  • render中调用boundingBox.render()

同时,修改CursorType:

添加普通文字对应的鼠标样式:

然后修改CanvasTextEditorParagraphCanvasTextEditor中对应的destructor:

2.15.3 效果

为了看得更清楚,我们可以加上一些辅助线。修改ResponsiveToMouseHover.render():

然后再看下效果:

(未完待续)

最新文章

  1. Alpha阶段总结
  2. neo4j关闭和开启密码访问权限
  3. text/plain && text/html
  4. YY前端课程2
  5. freeCodeCamp:Seek and Destroy
  6. hiho一下 第六十四周 Right-click Context Menu
  7. ios cell常用属性
  8. Asp.Net判断字符是否为汉字的方法大全
  9. EXTJS4.2 控件之Grid 行点击事件
  10. MVC @Html.DropDownListFor 默认值
  11. Create RCU
  12. CSS实现DIV三角形
  13. HDU3473--Minimum Sum(静态区间第k大)
  14. 终于懂了:FWinControls子控件的显示是由Windows来管理,而不是由Delphi来管理(显示透明会导致计算无效区域的方式有所不同——透明的话应减少剪裁区域,所以要进行仔细计算)
  15. Cocos2d-xvision3.0加载失败,和,Vs2012环境搭建
  16. spring异常处理
  17. tomcat 修改为自己项目界面
  18. MongoDB副本集模式安装
  19. 八,ESP8266 文件保存数据
  20. [SDOI2013] 直径

热门文章

  1. Jetpack—LiveData组件的缺陷以及应对策略 转至元数据结尾
  2. 【JavaWeb】CVE-2016-4437 Shiro反序列化漏洞分析及代码审计
  3. Python向mysql数据库插入数据
  4. 【记录一个问题】ndk下使用c++11的condition_variable问题较多
  5. 在3G移动通信网络信令流程里获取用户电话号的一种方法(中国电信cdma2000)
  6. golang中接口对象的转型
  7. java抽象类案例
  8. ps -ef aux区别
  9. BUGKU-Misc 成果狗成果狗
  10. 感恩陪伴 HelloGitHub 定制的红包封面