博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebKit之Canvas源码分析2
阅读量:4025 次
发布时间:2019-05-24

本文共 2251 字,大约阅读时间需要 7 分钟。

===============================================================

## '2d'对应的Canvas的上下文对象class CanvasRenderingContext2D : public CanvasRenderingContext, public CanvasPathMethods {{>>strokeStyle ,fillStyle>>lineWidth,lineCap,lineJoin>>miterLimit,LineDash,LineDashOffset>>shadowOffsetX,shadowOffsetY,shdowBlue,shadowColor>>globalAlpha,globalCompositeOperation>>save()、restore()>>scale()、rotate()、translate()、transform()>>strokeColor、FillColor>>beginPath()>>file()、stroke()、clip()、fillRect()、setShadow()>>drawImage()>>setAlaph()>>createLinearGradient()createRadialGradient()、createPattern()>>createImageData()、putImageData()>>font()、textAligh()、fillText()textBaseLine()、strokeText()>>lineCap()}

## 观察者是所谓的一套通知的接口而已(HTMLCanvasElement会触发以下的接口,外部关注则重载)class CanvasObserver {public:    virtual ~CanvasObserver() { }    virtual void canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect) = 0;    virtual void canvasResized(HTMLCanvasElement*) = 0;    virtual void canvasDestroyed(HTMLCanvasElement*) = 0;};## 真正的观察者便重载该接口即可(HTMLCanvasElement通知CSSCavasValue变化)class CanvasObserverProxy : public CanvasObserver {public:	CanvasObserverProxy(CSSCanvasValue* ownerValue) : m_ownerValue(ownerValue) { }	virtual ~CanvasObserverProxy() { }	virtual void canvasChanged(HTMLCanvasElement* canvas, const FloatRect& changedRect)	{		m_ownerValue->canvasChanged(canvas, changedRect);	}	virtual void canvasResized(HTMLCanvasElement* canvas)	{		m_ownerValue->canvasResized(canvas);	}        virtual void canvasDestroyed(HTMLCanvasElement* canvas)        {            m_ownerValue->canvasDestroyed(canvas);        }private:        CSSCanvasValue* m_ownerValue;}## 监听的CSSCanvasValue的操作class CSSCanvasValue : public CSSImageGeneratorValue {## 通知CSSValue的受众RenderObjectvoid CSSCanvasValue::canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect){    IntRect imageChangeRect = enclosingIntRect(changedRect);    HashCountedSet
::const_iterator end = clients().end(); for (HashCountedSet
::const_iterator curr = clients().begin(); curr != end; ++curr) const_cast
(curr->key)->imageChanged(static_cast
(this), &imageChangeRect);}## 关于样式图片的一个继承和调度的关系StyleImage=>StyleGeneratedImage=>CSSImageGeneratorValue=>CSSCanvasValue

你可能感兴趣的文章
在Idea中使用Eclipse编译器
查看>>
idea讲web项目部署到tomcat,热部署
查看>>
优化IDEA启动速度,快了好多。后面有什么优化点,会继续往里面添加
查看>>
JMeter 保持sessionId
查看>>
IDEA Properties中文unicode转码问题
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
Maven跳过单元测试的两种方式
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>
微信小程序开发全线记录
查看>>
Centos import torchvision 出现 No module named ‘_lzma‘
查看>>
网页设计里的浮动 属性
查看>>