绘图 Painter转接口封装的方式

记录下思想

适用于业务逻辑相对单纯的一些画法,比如画背景(颜色,背景,边框等)

一个Draw方法中如果绘制比较复杂的话,就会导致代码混乱,而不灵活,每次需求更改就得重新画过,可重用性差.

以接口的方式可以很好的重复利用功能,不必因为需求的更改而大量变更代码

chrome的方法定义如下

// Painting ------------------------------------------------------------------

// Background
scoped_ptr background_;

// Border.

scoped_ptr border_;

// Focus border.

scoped_ptr focus_border_;
// The background object is owned by this object and may be NULL.

void set_background(Background* b) { background_.reset(b); }
const Background* background() const { return background_.get(); }
Background* background() { return background_.get(); }

// The border object is owned by this object and may be NULL.

void set_border(Border* b) { border_.reset(b); }
const Border* border() const { return border_.get(); }
Border* border() { return border_.get(); }

// The focus_border object is owned by this object and may be NULL.

void set_focus_border(FocusBorder* b) { focus_border_.reset(b); }
const FocusBorder* focus_border() const { return focus_border_.get(); }
FocusBorder* focus_border() { return focus_border_.get(); }

具体调用

void View::OnPaintBackground(gfx::Canvas* canvas) {
  if (background_.get()) {
    TRACE_EVENT2("views", "View::OnPaintBackground",
                 "width", canvas->sk_canvas()->getDevice()->width(),
                 "height", canvas->sk_canvas()->getDevice()->height());
    background_->Paint(canvas, this);
  }
}

void View::OnPaintBorder(gfx::Canvas* canvas) {
  if (border_.get()) {
    TRACE_EVENT2("views", "View::OnPaintBorder",
                 "width", canvas->sk_canvas()->getDevice()->width(),
                 "height", canvas->sk_canvas()->getDevice()->height());
    border_->Paint(*this, canvas);
  }
}

void View::OnPaintFocusBorder(gfx::Canvas* canvas) {
  if (focus_border_.get() &&
      HasFocus() && (focusable() || IsAccessibilityFocusable())) {
    TRACE_EVENT2("views", "views::OnPaintFocusBorder",
                 "width", canvas->sk_canvas()->getDevice()->width(),
                 "height", canvas->sk_canvas()->getDevice()->height());
    focus_border_->Paint(*this, canvas);
  }
}

Original: https://www.cnblogs.com/Clingingboy/p/3435270.html
Author: Clingingboy
Title: 绘图 Painter转接口封装的方式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/551435/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java反序列化_link_six

    0x01前言 经过cc链一的学习,然后jdk的版本一更新那两条链子就不能用了,然后这种反序列化的话就很不不止依赖于cc包的引入还有jdk版本,于是就出现了cc_link_six一个…

    技术杂谈 2023年6月21日
    075
  • Scanner类的基本用法

    Scanner对象 java.util.Scanner是java5的特征, 可以通过Scanner类来获取用户的输入。 基本语法: 通过Scanner类的next()与nextLi…

    技术杂谈 2023年6月21日
    096
  • Dubbo + ZooKeeper

    16 Dubbo + ZooKeeper 16.1 Dubbo下载 GigHub下载地址: https://github.com/apache/dubbo-admin/tree/m…

    技术杂谈 2023年6月21日
    098
  • 树莓派3B/3B+/4B刷机装系统烧录镜像教程

    树莓派3B/3B+/4B 刷机装系统烧录镜像教程 树莓派 背景故事 刚拿到树莓派的第一件事,应该就是要装系统了,那么应该怎么操作呢?下面就给大家介绍一下吧。 硬件准备 树莓派:3B…

    技术杂谈 2023年7月23日
    094
  • 三次握手四次挥手

    什么是三次握手? 1.进行三次握手&#x…

    技术杂谈 2023年7月23日
    084
  • git代码上传idea配置“.gitignore”文件

    **/mvnw**/mvnw.cmd**/.mvn**/target**/.gitignore.idea Original: https://www.cnblogs.com/Cod…

    技术杂谈 2023年7月24日
    090
  • MybatisPlus生成主键策略方法

    MybatisPlus生成主键策略方法 SpringBoot集成Mybatis-Plus 在yaml配置文件中添加MP配置 mybatis-plus: global-config:…

    技术杂谈 2023年7月11日
    0100
  • Postfix邮件发送小问题总结

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/kerrycode/p/15321413.htmlAut…

    技术杂谈 2023年5月31日
    094
  • Python数据分析–Numpy常用函数介绍(2)

    摘要:本篇我们将以分析历史股价为例,介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数、学习读写文件的方法,并尝试函数式编程和NumPy线性代数运算,来学习N…

    技术杂谈 2023年7月25日
    090
  • 购买2T U盘,工具检测后实际容量只有65G

    检测工具: 360U盘鉴定器 chipgenius芯片精灵 一芯主控量产工具FirstChip_MpTools_20211024 工具合集下载 使用 360U盘鉴定器,鉴定U盘实际…

    技术杂谈 2023年5月31日
    0125
  • 好了歌 西江月

    好了歌 朝代:清代 |作者:曹雪芹 世人都晓神仙好,惟有功名忘不了!古今将相在何方?荒冢一堆草没了,世人都晓神仙好,只有金银忘不了!终朝只恨聚无多,及到多时眼闭了,世人都晓神仙好,…

    技术杂谈 2023年5月31日
    089
  • lambda表达式常用00

    交集 并集 差集 List集合的过滤之lambda表达式 lambda表达式将List对象某个字段转换以逗号分隔的String类型 Original: https://www.cn…

    技术杂谈 2023年7月24日
    090
  • 一篇文章扒掉“桥梁Handler”的底裤

    Android跨进程要掌握的是Binder, 而同一进程中最重要的应该就是Handler 消息通信机制了。我这么说,大家不知道是否认同,如果认同,还希望能给一个关注哈。 什么是Ha…

    技术杂谈 2023年7月11日
    077
  • LRU算法简单实现

    LRU:最近最少使用缓存 LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访…

    技术杂谈 2023年6月21日
    0125
  • dubbo源码阅读

    http://seekheap.com/posts/dubbo/dubbo-src-01-overview-and-debug-environment.html 先占坑 Origi…

    技术杂谈 2023年6月1日
    092
  • maven常见问题汇总

    主要记录一些学习及工作时遇到过的一些问题。 1 版本问题 由于版本兼容问题配置maven折腾了一点时间。例:IDEA 2019以上版本与maven3.6.3以上版本不兼容我的笔记本…

    技术杂谈 2023年7月24日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球