在PPAPI插件中使用Skia画图介绍了怎样在PPAPI中使用Skia,文末说回头要供给一个简单的涂鸦板插件,此次我来兑现答理了。
foruok原创,存眷微信订阅号“措施视界”可联系foruok。
演示样例非常easy,先看看效果:
涂鸦插件成果说明成果列表:
使用鼠标左键绘制线条
勾销、断根成果
撑持CTRL+Z组合键勾销,撑持ESC断根
项目说明项目与在PPAPI插件中使用Skia画图这个文章里的几乎不异,仅仅只是多了几个文件。VS2013中的项目视图例如以下:
做一点点说明吧。
ppapi_doodle.cpp这个文件实现了PPAPI插件的入口。它获取浏览器側接口并生存在一个类型为GlobalPPBInterface(PPBInterface.h)的全局变量中。它完毕与浏览器的交互,而且将事件派发到某个实例。
与之前对比。更洁净了,我把其他成果都移走了。
PluginInstance.h(.cpp)这是我抽象出来的代表插件实例的类。
PluginInstance这个类主要做了以下几件事:
界说了与PPAPI交互的接口
抽象了鼠标和键盘事件。界说了可供派生类重写的接口
融合了Skia,,简单疏散了画图操纵。供给给派生类自我绘制的接口
PluginInstance能够实例化。但就是画个白色配景,其他什么事儿也不干。所以,我此外实现了DoodleInstance类来实现涂鸦成果。
DoodleInstance.h(.cpp)DoodleInstance担任了PluginInstance,重写了下列要领:
void paint(const PP_Rect *rect);
PP_Bool mouseEvent(const MouseEvent &evMouse);
PP_Bool keyboardEvent(const KeyboardEvent &evKeyboard);
假设要实现其他的插件,重写上面几个函数也是必需的。
此外我还操作Skia里的SkPath来生存“从鼠标左键按下到释放”这“一笔”画出的全部对象。配套一个SkPaint,能够定制线条颜色、粗细、线型(没实现哈哈)。这两者被我放在了一个ElementGroup类里,DoodleInstance的m_paths是一个调集,傍边的每一个元素都代表了一个“一笔画”。paint函数里会把这些“一笔画”给绘制出来。
Button.h(.cpp)不雅观看文前那张Gif动画,里面有两个button,它们相应的实现就在这两个文件中了,类名是ImageButton。详细看代码了,比較直接。
从资源文件中载入图片我给ppapi_doodle项目插手了两个png格局的图片,给前面提到的button用。
DLL中图片资源怎样转化为SkBitmap,在utils.cpp中实现,载入DLL中的图片资源生成Skia中的SkBitmap东西这篇文章里说过了。