Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013_1 / ООП / Введение_SWG.pdf
Скачиваний:
82
Добавлен:
23.02.2015
Размер:
3.32 Mб
Скачать

9 Дополнительные возможности библиотеки SWG

Библиотека SWG (Standard Widget Graphic) [6] разработана фирмой IBM и распространяется с ограниченной лицензией без права свободного коммерческого использования продукта. Библиотека расширяет SWT в части графических возможностей. В частности, в дополнение к рисованию графических примитивов на графическом контексте видимых компонент большинство примитивов реализованы как самостоятельные классы компонент, позволяющие размещать их в любом контексте. Это избавляет программиста от необходимости обрабатывать события перерисовки, возлагая эти задачи на саму библиотеку. Добавлены методы работы с цветом, позволяя задавать цвет примитива с использованием стандартного разложения RGB. Существенное место занимают средства анимации, позволяющие создавать «живые» сцены. Различные классы и режимы интерполяции положения движущихся объектов позволяют программистам в широких пределах управлять сценариями и реализацией создаваемого фильма.

9.1 Компоненты управления

Компоненты управления библиотеки SWG максимально совместимы с компонентами SWT и содержат ряд новых примитивов: полигоны, эллипсы, линии и др. Новый стиль для всех старых и новых компонент SWT.LIGHTWEIGHT позволяет упростить работу с компонентами, перейдя от использования базовых окон операционной системы платформы к их векторному представлению. Это позволяет ускорить работу программ и добавляет новую функциональность компонентам.

Все графические компоненты имеют свойства Background — цвет для заполнения внутренней области и Foreground — цвет для изображения внешнего контура. Можно использовать образцы (Pattern) заливок и штриховок для внутренних областей компонент, параметр прозрачности (alfa).

Прежде размеры «тяжелых» примитивов основывались на границах окон, заданных методами setSize() или setBounds(), а положение определялось методом setLocation(). Размер мог определяться выбранным менеджером компоновки. Сейчас графические примитивы содержат свое изображение внутри ограничивающей их прямоугольной области (bounding box). Это позволяет легче манипулировать компонентами и подвергать их преобразованиям (масштабирование, поворот, смещение).

Трансформации в SWG основаны на стандартах трехмерной графики VRML, используя только две координаты. Координата (0,0) соответствует

158

левому верхнему углу области и положительное направление оси Х — влево, оси Y — вниз.

9.2 Виджеты

Несколько изменений внесены в класс виджетов, связанных с облегченной (lightweight) графикой и дополнительными событиями.

Объекты класса Event имеют новые поля:

sceneTime — время наступления события в сценическом времени;

repeatIteration — счетчик повторений анимации;

fX — координата X указателя, вещественное число

fY — координатаY указателя, вещественное число Дополнительные события для поддержки анимации:

SWT.Begin — начало анимации;

SWT.End — окончание анимации;

SWT.Repeat — повторение анимации;

SWT.Pause — пауза в анимации;

SWT.Resume — восстановление анимации.

Обработчики событий AnimationEvent должны реализовывть дополнительные интерфейсы AnimationListener и AnimationAdapter, имеющие следующие методы:

begin(AnimationEvent)

end(AnimationEvent)

repeat(AnimationEvent)

pause(AnimationEvent)

resume(AnimationEvent)

Обработчики событий мышки имеют дополнительные поля события:

fX — координата X указателя, вещественное число;

fY — координатаY указателя, вещественное число.

9.3 Плоские формы

Класс AreaShape — абстрактный родительский класс для других плоских примитивов, имеющих прямоугольные области. Иерархия

159

родительских

классов

имеет

вид:

Widget/Control/GraphicControl/Graphic/AreaShape

 

 

Отличительным свойством потомков этого класса является понятие размера (Dimension) — ширина и высота примитива. Для работы с этим свойством есть методы:

setDimension(float width, float height) — установка ширины и высоты;

setDimension(float[ ] dim) — установка ширины и высоты массивом

чисел;

setDimension(Point pt) — установка ширины и высоты вектором; setWidth(float width) — установка ширины ;

setHeight(float height) — установка ширины и высоты;

getDimension() — запрос ширины и высоты как вектора из двух чисел; getWidth() — запрос ширины;

getHeight() — запрос высоты;

Класс Oblong создает прямоугольные области с или без заливки. Является потомком класса AreaShape. Пример:

Oblong oblong = new Oblong(parent, SWT.NONE); oblong.setDimension(25.0F, 36.0F);

По умолчанию экземпляры класса имеют всегда стиль SWT.LIGHTWEIGHT, который нет необходимости указывать явно.

Класс RoundedOblong создает скругленные прямоугольные области с или без заливки. Является потомком класса AreaShape. В дополнение к методам родительского класса есть инструменты для работы с закруглениями:

setArcDimension(float arcWidth, float arcHeight) — задание ширины и высоты закруглений;

setArcDimension(float[ ] dim) — задание ширины и высоты закруглений; setArcDimension(Point pt) — задание ширины и высоты закруглений; setArcWidth(float arcWidth) — задание ширины закруглений; setArcHeight(float arcHeight) — задание высоты закруглений; getArcDimension() — запрос ширины и высоты закруглений; getArcWidth() — запрос ширины закруглений;

160

getArcHeight() — запрос высоты закруглений.

Абстрактный класс EllipticalShape является потомком класса AreaShape. Служит родителем для эллипсов, дуг и секторов. В дополнение к методам родительского класса есть инструменты для работы с радиусами закруглений:

setRadii(float rX, float rY) — задание радиусов по осям X, Y; setRadii(float[ ] dim) — задание радиусов по осям X, Y; setRadius(Point pt) — задание радиусов по осям X, Y; setRadiusX(float rX) — задание радиусов по X; setRadiusY(float rY) — задание радиусов по Y;

getRadii() — запрос массива радиусов по осям X, Y; getRadiusX() — запрос радиуса по X;

getRadiusY() — запрос радиуса по Y.

Класс Ellipse позволяет создавать эллипсы. Является потомком класса

EllipticalShape. Пример:

Ellipse ellipse = new Ellipse(parent, SWT.NONE); ellipe.setDimension(25.0F, 36.0F);

Класс ArcShape позволяет создавать дуги. Является потомком класса EllipticalShape. Пример:

Arc arc = new Arc(parent, SWT.NONE); arc.setRadii(50.0F, 40.0F); arc.setStartAngle(90.0F); arc.setArcAngle(60.0F);

Класс Pie позволяет создавать секторы. Является потомком класса

EllipticalShape. Пример:

Pie pie = new Arc(parent, SWT.NONE); pie.setRadii(50.0F, 40.0F); pie.setStartAngle(90.0F); pie.setArcAngle(60.0F);

9.4 Линии, точки и ломанные

Эта группа классов являются потомками класса Graphic.

161

Класс Line рисует экземпляры отрезков прямых между двумя заданными точками. Пример.

Line line = new Line(parent, SWT.NONE); line.setPoints(10.0F, 6.0F, 50.0F, 75.0F);

Дополнительные методы позволяют работать с координатами концов отрезка.

setPoints(float xS, float yS, float xE, float yE) — задание координат концов отрезка;

setPoints(float[ ] pts) — задание координат концов отрезка; setPoints(Point start, Point end) — задание координат концов отрезка; getPoints() — задпрос массива из четырех координат концов отрезка; setStart(float x, float y) — задание координат начала отрезка; setStart(Point start) — задание координат начала отрезка;

setEnd(float x, float y) — задание координат конца отрезка; setEnd(Point end) — задание координат конца отрезка; setStartX(float x) — задание координаты X начала отрезка; setStartY(float y) — задание координаты Y начала отрезка; setEndX(float x) — задание координаты X конца отрезка; setEndY(float y) — задание координаты Y конца отрезка; getStartX()— запрос координаты X начала отрезка; getStartY() — запрос координаты Y начала отрезка; getEndX() — запрос координаты X конца отрезка; getEndY() — запрос координаты Y конца отрезка.

Класс MultiPointShape — абстрактный класс для создания потомков полигонов и полилиний, потомок класса Graphic. Все экземпляры потомков этого класса имеют наборы точек для задания геометрии. Для работы с наборами точек определены методы:

getMinimumPointCount() — запрос минимального числа точек примитива;

getPointCount() — запрос числа точек примитива;

setPoints(float[ ] pts) — задание массива координат точек примитива; setPoints(Point[ ] pts) — задание массива точек примитива;

162

getPoints() — запрос массива координат точек примитива;

setPoints(float[ ] pts, int index) — задание массива координат точек примитива, начиная с указанной. Массив может только заменять ранее заданные координаты, а не добавлять;

setPoint(float x, float y, int index) — задание координат указанной точки; setPoint(Point pt, int index) — задание координат указанной точки; setPointX(float x, int index) — задание координаты X указанной точки; setPointY(float y, int index) — задание координаты Y указанной точки; getPointX(int index) — запрос координаты X указанной точки; getPointY(int index) — запрос координаты Y указанной точки.

Класс Polygon создает замкнутые ломанные фигуры, содержащие произвольное число вершин не менее трех. Пример.

float[ ] polyStar = {50,0, 80,90, 5,30, 95,30, 20,90};

float[ ] polyHexa = {20,10, 80,10, 100,50, 80,90, 20,90, 0,50};

Polygon star = new Polygon(parent, SWT.NONE); star.setPoints(polyStar); star.setBackgroundColor(darkCyan);

Polygon hexagon = new Polygon(parent, SWT.NONE); hexagon.setPoints(polyHexa); hexagon.setBackgroundColor(cyan); hexagon.setForegroundColor(red); hexagon.setLineWidth(4);

Класс Polygon создает замкнутые ломанные фигуры, содержащие произвольное число вершин не менее двух. Пример.

float[ ] polyStar = {50,0, 80,90, 5,30, 95,30, 20,90};

float[ ] polyHexa = {20,10, 80,10, 100,50, 80,90, 20,90, 0,50};

Polyline star = new Polyline(parent, SWT.NONE); star.setPoints(polyStar); star.setForegroundColor(cyan); star.setLineWidth(4);

Polyline hexagon = new Polyline(parent, SWT.NONE); hexagon.setPoints(polyHexa); hexagon.setForegroundColor(magenta); hexagon.setLineStyle(SWT.LINE_DASH); hexagon.setLineWidth(4);

163

Соседние файлы в папке ООП