Чтение онлайн

на главную - закладки

Жанры

Шрифт:

Таблица 6.6. Графические константы, которые определяют атрибуты шрифтов

Константа атрибута — Описание

static int FACE MONOSPACE — Значение атрибута гарнитуры

static int FACE_PROPORTIONAL — Значение атрибута гарнитуры

static int FACE SYSTEM — Значение атрибута гарнитуры

static int STYLE BOLD — Значение атрибута стиля

static int STYLE ITALIC

Значение атрибута стиля

static int STYLE PLAIN — Значение атрибута стиля

static int STYLE UNDERLINED — Значение атрибута стиля

static int SIZE SMALL — Значение атрибута размера

static int SIZE MEDIUM — Значение атрибута размера

static int SIZE LARGE — Значение атрибута размера

Вы должны были заметить, что спецификация MIDP не требует от реализаций предоставления всех этих размеров, стилей и гарнитур. Выводимый шрифт, которым реализация может управлять, будет как можно ближе соответствовать требуемому шрифту.

В отличие от AWT и Swing, вам не придется иметь огромный набор шрифтов и несметное число размеров шрифтов. Более того, поскольку класс Font объявлен final и не имеет конструкторов public, вы не можете организовать его подклассы для определения новых шрифтов. Создатели MIDP решили ограничить число доступных шрифтов с учетом ограничений устройства.

Вам необходимо получить ссылку на текущий объект Font для того, чтобы переслать его в метод Graphics.setFont. Вы можете получить объект Font, только вызвав один из двух методов static:

Font.getFont(int face, int style, int size)

Font.get Default Font

Указанный шрифт будет использоваться во всех последующих операциях по рисованию до тех пор, пока вы вновь его не измените. В листинге 6.6 шрифт был изменен до создания различных текстовых строк или символов для достижения желаемого эффекта.

Отсечение областей для рисования

Когда ваше приложение вызывает метод Display.setCurrent, он запрашивает реализацию об отображении вашего Displayable. Для объектов Canvas реализация делает ваш компонент текущим отображаемым и вызывает метод вашего класса paint (Graphics g). Реализация генерирует внутреннее событие рисования, которое пересылается в текущий отображаемый элемент. В этом кроется причина того, что метод paint указан в таблице 6.1 как часть обработки событий API, определяемой Canvas.

Во время отображения некоторая группа пикселей дисплея может быть недействительной или поврежденной. Недействительный или поврежденный пиксель — это тот, который видим в результате предыдущей операции рисования, но не должен быть визуализирован в качестве части текущей операции рисования. Дисплей может быть поврежден другим MID-летом или даже «внешним» приложением — например, приложением по передаче сообщений, которое обновляет дисплей для отображения получения сообщения SMS вашим мобильным

телефоном.

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

Вы, несомненно, уже обратили внимание на наличие метода paintClipRect (Graphics g) в листинге 6.3. В листинге 6.7 повторяется этот метод. Это первый код, вызываемый методом paint (Graphics g) каждого приложения. Его цель состоит в удалении всех пикселей, которые были нарисованы предыдущей операцией рисования.

Листинг 6.7. Вы должны стереть все недействительные пиксели, прежде чем рисовать свой компонент. Используйте отсекаемый прямоугольник графического объекта вашего компонента, чтобы определить прямоугольную область, которая содержит все поврежденные пиксели

protected void paintClipRect(Graphics g)

int clipX = g.getClipX ; int clipY = g.getClipY;

int clipH = g.getClipHeight; int clipW = g.getClipWidth;

int color = g.getColor;

g. setColor(WHITE);

g. fillRect(clipX, clipY, clipW, clipH);

g. setColor(color);

}

Проблема этого метода заключается в том, что он использует отсекаемый прямоугольник объекта Graphics. Отсекаемый прямоугольник является прямоугольной областью, которая содержит все недействительные пиксели экрана. Отсекаемый прямоугольник определяется его отклонением (х, у) от начала координат объекта Graphics, а также его шириной и высотой.

Вы можете получить отсекаемый прямоугольник, вызвав следующие методы Graphics:

int getClipHeight

int getClipWidth

int getClipX

int getClipY

При вызове метода paint (Graphics g) отсекаемый прямоугольник всегда представляет область, которая содержит все поврежденные пиксели дисплея. В случаях, подобных примерам, приведенным в этой главе, где вы заменяете отображение экрана новым, отсекаемый прямоугольник представляет всю область дисплея устройства.

Самый легкий способ «стереть» недействительные пиксели — это перерисовать каждый пиксель в отсекаемом прямоугольнике с помощью цвета фона экрана, таким образом гарантировав, что вы стерли все поврежденные пиксели. Затем вы выполняете операции по рисованию, которые определяются вашим Canvas, с помощью другого цвета.

Обратите внимание, что в листинге 6.7 метод получает и сохраняет текущий цвет дисплея, который представляет цвет ручки, используемый для всех операций рисования. По умолчанию цвет обычно черный в большинстве реализаций. Код затем устанавливает текущий цвет на белый (который обычно является цветом фона) и заполняет отсекаемый прямоугольник белыми пикселями, эффективно «стирая» все поврежденные пиксели. В конце код восстанавливает первоначальный цвет объекта Graphics. Последующие операции по рисованию визуализируют пиксели некоторого цвета, отличающегося от белого, на белом фоне.

Поделиться:
Популярные книги

Зулкибар (Книги 5-7)

Добрынина Марина Владимировна
2. Зулкибар
Фантастика:
фэнтези
юмористическая фантастика
9.00
рейтинг книги
Зулкибар (Книги 5-7)

Иммунитет Вселенной (Путь Знахаря)

Утолин Константин Владимирович
Фантастика:
научная фантастика
5.00
рейтинг книги
Иммунитет Вселенной (Путь Знахаря)

Ты - наша

Зайцева Мария
1. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Ты - наша

Шпион в Юрском периоде

Прашкевич Геннадий
Фантастика:
научная фантастика
5.00
рейтинг книги
Шпион в Юрском периоде

Перекресток времен. Дилогия

Захаров Андрей Николаевич
Фантастика:
альтернативная история
7.91
рейтинг книги
Перекресток времен. Дилогия

"Зарубежная фантастика 2024-3". Цикл Люди льда". Компиляция. Книги 1-24

Сандему Маргит
Зарубежная фантастика 2024
Фантастика:
фэнтези
героическая фантастика
5.00
рейтинг книги
Зарубежная фантастика 2024-3. Цикл Люди льда. Компиляция. Книги 1-24

Незримый гений

Kay Blue Eyes
Любовные романы:
исторические любовные романы
7.00
рейтинг книги
Незримый гений

Иллюзия вины

Найт Ник
Иллюзия вины
Детективы:
триллеры
прочие детективы
боевики
6.00
рейтинг книги
Иллюзия вины

Митридат

Полупуднев Виталий Максимович
3. У Понта Эвксинского
Проза:
историческая проза
7.33
рейтинг книги
Митридат

Искусство невозможного (в 3-х томах)

Березовский Борис Абрамович
Документальная литература:
биографии и мемуары
публицистика
5.00
рейтинг книги
Искусство невозможного (в 3-х томах)

Некромант . Трилогия

Петерсон Андрей Викторович
Перстень некромансера
Фантастика:
фэнтези
7.64
рейтинг книги
Некромант . Трилогия

Точка Бифуркации VII

Смит Дейлор
7. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации VII

Дюна

Херберт Фрэнк
Фантастика:
эпическая фантастика
8.12
рейтинг книги
Дюна

Да, господин Премьер-министр. Из дневника достопочтенного Джеймса Хэкера

Линн Джонатан
Юмор:
юмористическая проза
6.25
рейтинг книги
Да, господин Премьер-министр. Из дневника достопочтенного Джеймса Хэкера