Draw2D学习
Draw2D is a lightweight system.轻量级系统,指这个绘图系统全部建立在一个重量级的控件上。对于Draw2D他是建立在SWT的Canvas上的。
Draw2D的几个部分
1.figures
主要功能:
1。给一个figure注册和去注册监听器。这个figure会通知在这个figure中的鼠标时间给监听器。
2。结构化的事件。比如figure层次的结构化变化,figure的移动和大小调整。
3。当光标从figure上移过时,光标的改变和显示。
4。在figure的层次中操作figure的位置,包括添加移除访问子节点,或者访问他们的父节点。
5。存取:figure的layout manager;figure的size和location;还有tooltips。
6。设置获得焦点。
7。设置figure的透明度和可视性。
8。进行坐标变换,figure的交叠和碰撞检测。
9。绘制。
10。确认。
figure有很多subclass,提供了很多附加的功能。比如
1。shape,它包含了非矩形的figure,可以知道如何填充,并提供了对边界的宽和类型的配置,并提供了异或的绘制方法。比如有椭圆,几何线,多边形,矩形,圆角矩形和三角形。
2。widget,draw2d包含的figure允许你创建轻量级(lightweight)的部件(widget),从而在你的draw2d应用程序中需要输入控制时提供支持。这包含大量的按钮,选择框和文本图形,标签。
3。layer and pane,这些使用来作为子类的容器,他们提供了缩放,滚动和讲figure放置在不同layer上的能力。
图形上下文(the graphics context)
当一个figuer需要被绘制的时候轻量系统会调用fiuger的一个paint方法。每一个figure都会得到一个graphical context,他是Graphics的一个实例。作为参数传给paint方法。这个绘图上下文支持图形操作包括绘制,填充图形绘制它的文字。它也提供了图形的状态,这些可以影响图形操作。这些状态包括当前字体,背景前景颜色等等。
2.LightweightSystem
LightweightSystem时draw2d的核心。它提供了SWT Canvas控件和在其上建立的draw2d系统之间的映射。包含三个方面:
1。the root figure.这个是LightweightSystem$RootFigure类的一个实例。这个是用户的root figure的父类。它继承了一些基于SWT Canvas的图形环境,比如字体,前景背景颜色。
2。the event dispatcher:SWTEventDispatcher类将SWT事件传给Draw2D的root figure中相应的部件。
3。the update manager.它负责绘制并更新Draw2dfigure。当一个绘制请求从下层的SWTcanvas传来时,LightWeightSystem将会调用updatemanager中的performUpdate方法。update manager将会维护一个非法的或者需要重画的figure的worklist。upate manager会设法尽量连续的它的work list,这样可以尽量的提高效率。默认的update manager:DaferredUpdateManager允许通过再Display上的用户线程来使工作队列异步的更新。
对于一个figure的生存周期中,绘制(painting)和确认(validating)是主要的处理过程。draw2d会要求一个figure,调用绘制方法来递归的绘制自己。paint()方法会调用多个绘制方法:
1。paintFigure():figure递归的绘制自己
2。paintclientarea(): figure递归的绘制子图
3。paintborder():figure绘制边界。
当一个figure的size或者location需要重新计算时,将会调用确认。
1。validate():要求figure的layout manager去重新布局它的子图
2。revalidate():调用invalidate;添加一个图形和它的祖先去更新update manager的invalid list。