Следующий модуль с окошком - пара классов MainForm+MainForm2:
Ревизия окна MainForm
Это окно - то самое, в котором рисуют картинки. В него стекается обработка вызовов все пунктов меню, оно же отрисовывает окна с сообщениями (msgbox-ы), оно же обеспечивает работу множества функций, требующих многократного ввода различной информации (например, чтобы указать эффекту входные параметры, прозрачный цвет, силу эффекта, выбрать один из двух вариантов эффекта и т.д.), вызывая по очереди те или иные окошки.
Виды окошек и частей окошек, которые оно рисует:
1) по ДжойВправо открывает меню команд, в котором команда "Широкий экран" (или по нажатию Звездочки и в открывшемся меню эффектов еще раз нажатию Звездочки) меняет три вида раскладки экрана: обычный, сокращенный и полноэкранный (картинка на черном фоне).
В последней бета-версии они выглядели так (тестим на новой пустой картинке 32х32 пикселя) - посмотрим как они натягивались на андроид и как выглядели на среднем сименсе (чтоб увидеть как задумывалась отрисовка изначально):
Обычный - в заголовке текущий масштаб, справа вверху текущая цветность, внизу размер картинки, текущие координаты курсора, текущие передний и задний цвета (пц/зц), текущий инструмент, текущий тип линий (сплошная или пунктир):
Сокращенный - в заголовке текущие координаты курсора и текущий масштаб, справа вверху текущие передний и задний цвета (пц/зц):
Полноэкранный - только картинка на черном фоне и курсор поверх нее:
2) В 8-битном режиме рисования новая картинка бывает трех видов - 256-цветный BMP, 2-цветный BMP, 2-цветный BMX.
BMX это сименсовская черно-белая 4-кадровая BMP-анимация, в которой 4 кадра рисуются друг под другом в единую BMP-картинку. Сименс, видя BMX, режет его на 4 части по вертикали и показывает их по очереди. Сименсы могли даже вставить такую BMX в смску и так можно было переслать нарисованную анимацию кому-то.
В 2-цветном BMP режиме наверху справа рисуется чернобелый значок вместо разноцветного спектра:
В 2-цветном BMX режиме наверху справа рисуется фотопленка (а ля анимация), а справа пишется в каком из 4 кадров по вертикали находится курсор. А еще по краям рисунка появляются метки - по 4 слева и справа, показывают последний пиксель каждого из 4 кадров по вертикали. А еще какие-то средние по горизонтали, видимо, показывают где начинается вторая половина рисунка по горизонтали (мб это для центровки на глаз при рисовании пикселей, уже не помню):
Обычная BMX-анимация, влезающая в одну смску, была BMP-картинкой 16х64 пикселя (4 кадра по 16х16 пикселей). Но первые сименсы, на которых паинткад рисовал эти анимации, были с экраном 101х80 точек. Часть от 80 точек съедалась заголовком окна, часть снизу строкой "координаты/цвета/инструмент/тип линий" и 16х64 не влезала без прокрутки на экран. А 32х32 влезала. Поэтому в паинткаде появилось рисование BMX-анимации в виде картинки 32х32 с последующим экспортом в 16х64 (правая половина рисунка 32х32 пикселя сносилась вниз под левую часть, и 32х32 превращался в 16х64).
Поэтому если создать 32х32 пикселя картинку в ч/б режиме, то ДжойВлево работает не как обмен ПЦ/ЗЦ (там всего два цвета - черный и белый, их менять смысла нет, т.к. левый софт вместо палитры просто переключает черный и белый цвета), в как меню работы с черно-белыми картинками размером 16х64.
Если выбрать в этом меню команду "Разбить" - то рисунок отображался в виде отдельных 4 частей и можно было прорисовать каждый кадр по отдельности:
3) В меню команд по ДжойВправо есть пункт "Блокировка"
Если его выбрать, то экран и клавиатура блокируется и ждет долгого удерживания решетки для разблокировки (если нужно телефон спратать в карман не боясь нажать на нем что-то):
4) Еще в MainForm есть режим "Полоса прогресса" - показывает окошко и в нем бежит полоска. Используется, например, при вставке рисунка из буфера на рисунок. НО он так написан, что из метода отрисовки пытается вызвать другую отрисовку, спотыкается (еще старая отрисовка не кончилась, новая не начинается при этом) и в андроиде просто ничего не показывается. Часть этих использований полосы прогресса уехали еще давно в модуль Rend с разными методами обработки картинок. Но те кто остались - ничего вообще не показывают. Видимо раньше какой-то сименс позволял вызывать перерисовку из перерисовки и окно рисовалось) В андроиде это явно не прокатывает. Надо в ходе ревизии MainForm укатить все эти обработки в Rend окончательно, тогда они станут показывать полосу прогресса, а не черный экран, ну и плюс к тому MainForm станет легче по размеру.
Масштабируем MainForm
Часть масштабирований уже была проделана. Но до конца еще далеко. В самой последней версии окно MainForm выглядит так:
Масштабируем "обычный" режим раскладки экрана
1) окно сделано полностью на весь экран, нет больше выпуклых краев, только серая панель
2) масштаб при старте устанавливался в х1. Поэтому на больших экранах курсора не видно конечно же. Выставим его равным 1 виртуальному пикселю. Весь интерфейс с линиями толщиной 1 виртуальный пиксель и рисунок в таких же виртуальных пикселях пусть будет по умолчанию. Ведь виртуальный пиксель - это тот самый минимальный размер, который видно на текущем экране, иначе чего бы масштабировать весь интерфейс под него)
3) левый верхний угол области рисования рисуется:
-
по горизонтали по координате x=4 (2 пикселя на бывший выпусклый край, 1 пиксель на зазор, 1 пиксель на фиолетовую рамку вокруг картинки). Новый x должен быть равен 2 виртуальным пикселям (1 виртуальный пиксель на зазор, 1 виртуальный пиксель на толстую фиолетовую рамку вокруг рисунка)
-
по вертикали по координате y=высота текста+5. Из 5 пикселей 2 на бывшую выпуклость сверху заголовка окна, 2 на зазор снизу окна, 1 на фиолетовую рамку, А высота текста - ровно заголовок. После убирания выпуклостей и натягивания окна на весь экран 2+2=4 пикселя столпились под заголовком, потом 1 пиксель - фиолетовая рамка, потом начинается рисунок. Новый y сделаем равный высоте текста+2 виртуальных пикселя - 1 на зазор, 1 на фиолетовую рамку.
4) длина области рисования рисуется при большой картинке (когда скроллы появляются):
-
по горизонтали равная по максимуму такому количеству пикселей рисуемой картинки: (ширина экрана - 8)/масштаб. Масштаб ДжойВправо-Лупа который. Чтобы отцентрировать ее на экране - раз 4 пикселя слева, то и 4 пикселя справа в лучшем случае (или больше).
Новая длина по горизонтали будет такая: (ширина экрана - 6 виртуальных пикселей)/масштаб, где 6 виртуальных это:
- зазор 1 виртуальный пиксель + рамка слева от области рисования 1 виртуальный пиксель
- и справа от области рисования рамка 1 виртуальный пиксель + скроллбар 2 виртуальных пикселя + зазор 1 виртуальный пиксель
-
по вертикали равная по максимуму такому количеству пикселей рисуемой картинки: (высота экрана - высота текста - 12 - максимум из высоты текста и значка инструмента)/масштаб. Сверху над областью рисования оставалась высота текста+5 пикселей, значит внизу 7 пикселей+максимум из высоты текста и значка инструмента.
Новая длина по вертикали будет такая: (высота экрана - (высота текста + 2 виртуальных пикселя) - (максимум из высоты текста и значка инструмента + 5 виртуальных пикселей))/масштаб, где :
- (высота текста + 2 виртуальных пикселя) это высота верхушки над областью рисования,
- (максимум из высоты текста и значка инструмента + 5 виртуальных пикселей) это высота нижней области под областью рисования, разложим в нижней области 1 виртуальный пиксель на фиолетовую рамку, 2 виртуальных пикселя на скроллбар, 1 виртуальный пиксель на зазор, потом (максимум из высоты текста и значка инструмента), а потом внизу еще зазор до конца экрана размером 1 виртуальный пиксель.
5) элементы в нижней части окна при обычном режиме растащим на 1 виртуальный пиксель. С правой в левую сторону:
- справа 1 виртуальный пиксель зазор
- потом 3 виртуальных пикселя - тип линий (полоска типа линий 1 виртуальный пиксель в окантовке шириной 1+1=2 виртуальных пикселя)
- потом 1 виртуальный пиксель зазор
- потом icw обычных пикселей значок инструмента (пунктир зеленый/красный, обозначающий нахождение курсора в выделенной области рисуется прямо поверх значка, наружу не торчит, сделаем его линию толщиной 1 виртуальный пиксель), кратный 16 пикселям, т.к. масштабируется
- потом 1 виртуальный пиксель зазор
- потом icw обычных пикселей прямоугольники ПЦ/ЗЦ цветов (окантовка рисуется внутри прямоугольников, наружу не торчит, линия окантовки толщиной 1 виртуальный пиксель)
- потом 1 виртуальный пиксель зазор
- потом еще 1 виртуальный пиксель - зазор под тень шрифта координат, которые будут печататься левее
- потом оставшаяся часть окна - по правому краю текущие координаты курсора, по левому краю размер рисунка (выводится если позволяет размер окна)
- потом 1 виртуальный пиксель - последний зазор между левым краем экрана и размером рисунка
6) значок режима в коричневой окантовке на фоне синего заголовка перерисуем. Уберем окантовку.
Получаем в первом "обычном" режиме раскладки экрана (на большом экране масштаб установился автоматически на размер виртуального пикселя, на маленьком тоже установился, но т.к. на сименсе маленький экран и виртуальный пиксель равен одному реальному - то тут все как раньше, масштаб х1):
Т.к. на этом большом экране устанавливается масштаб x9, равный виртуальному пикселю, то поле рисования чуть сжимается, чтобы уместить целое количество пикселей рисунка размером 9х9 пикселей экрана. На масштабе х1 оно не сжимается и точно показывает установленные зазоры - везде 1 виртуальный пиксель:
Также масштабируем под размер виртуального пикселя:
- крест на кисти, показывающий что она отключена:
- квадрат вокруг значка инструмента, показывающий где сейчас курсор - в выделении или вне его (если что-то выделено):
- индикатор текущего "типа линий" - сплошная или пунктир:
Значок черно-белого режима:
Значок режима BMX-анимации:
Масштабируем "сокращенный" режим раскладки экрана
Посмотрим на него еще раз из прошлой беты 1:
Режим простой, но рисуется кривовато) Плюс надо учесть что теперь полноэкранный режим окна, выпуклостей в 2 пикселя по бокам нет, сразу рабочая область.
По горизонтали сделаем при максимальном размере рисунка:
- 1 виртуальный пиксель зазор;
- 1 виртуальный пиксель окантовка;
- рисунок;
- 1 виртуальный пиксель окантовка;
- 2 виртуальных пикселя скроллбар;
- 1 виртуальный пиксель зазор
По вертикали сделаем при максимальном размере рисунка:
- сверху заголовок окна;
- 1 виртуальный пиксель зазор;
- 1 виртуальный пиксель окантовка рисунка;
- рисунок;
- 1 виртуальный пиксель окантовка рисунка;
- 2 виртуальных пикселя скроллбар;
- 1 виртуальный пиксель зазор
Заголовок поправим:
Два цвета ПЦ и ЗЦ в длину - слишком жирно. Если экран узкий, то могут не влезть значок, текст "9999; 9999 xN". А еще и непонятно - почему в обычной раскладке клавиатуры цвета ПЦ/ЗЦ друг над другом, а в сокращенном - слева направо, мозг сломается где какой цвет. Поставим цвета друг над другом как в обычном режиме снизу такие же были. С окантовкой 1 виртуальный пиксель, с перемычкой между ними 1 виртуальный пиксель при нечетном количестве пикселей по высоте в заголовке или 2 виртуальных пикселя при четном количестве.
Получаем:
Заодно, как в обычной раскладке, проверим на масштабе х1 что зазоры равны 1 виртуальному пикселю:
Масштабируем "полноэкранный" режим раскладки экрана
Вот он какой был:
На черном фоне рисуется изображение и окантовка. И больше ничего. Остается только увеличить окантовку до 1 виртуального пикселя.
Получаем:
Масштабируем отрисовку дополнительных элементов в 8-битном режиме при создании BMX-анимации
Вот что было:
Надпись "Кадр: N" висит прямо посреди экрана. Если сделать большую картинку, то надпись на сером фоне ложится поверх картинки. Уберем надпись вниз. В режиме BMX-анимации будем отображать номер кадра вместо размера рисунка в левом нижнем углу экрана. И если размер рисунка может быть длинный по количеству символов (типа "9999х9999") - поэтому он скрывается если экран узкий (как на скриншоте выше), то надпись "Кадр: 4" всегда короткая, ее скрывать не будем.
После анализа исходников 20-летней давности стало ясно что это за метки:
- метки по вертикали находятся в конце каждого кадра (на последней строке пикселей). Предназначены для визуального разделения рисунка BMX-анимации на 4 кадра. Надо их сделать вписанными в окантовку толщиной 1 виртуальный пиксель. При этом второй их размер (высота) должна быть равна текущему масштабу. Алгоритм отрисовки был какой-то кривой, пришлось его подправить. И поставим метки посередине между пикселями. Последние метки удалим (в самом низу), и так понятно где кончается последний кадр) И нарисуем полупрозрачные линии (цветами, отличными от обычных меток и выделения - рыжим 255,128,0 и сине-голубым 0,128,255)
- метки по горизонтали показываются только при размере рисунка 32х32 и показывают где начинается вторая половина рисунка по горизонтали. Сделаем их по аналогии с вертикальными метками - пусть стоят посередине между половинами рисунка и показывают где кончилась первая половина рисунка (также как вертикальные показывают где кончился кадр) и началась вторая. Полупрозрачные вертикальные линии рисовать не будем, они будут показывать в режиме "Разбить" ниже, когда пользователь явно намерен рисовать 4 кадра на рисунке 32х32. Деление рисунка пополам было нужно для ориентировании при рисовании 4 кадров 16х16 пикселей в одном рисунке 32х32 пикселя в порядке:
1 3
2 4
И по кнопке ДжойВлево можно командой "Экспорт" экспортировать такой рисунок 32х32 в 16х64 BMX-анимацию (на самом деле BMX это обычный черно-белый BMP-файл). Эта команда превращает рисунок в такой:
1
2
3
4
отрывая правую половину рисунка и подкладывая ее вниз. В общем, это все было из-за мелких экранов 101х80 первых сименсов, на которых 16х64 было нельзя рисовать без прокрутки рисунка по экрану (а прокрутка - это отсутствие обзора всех 4 нарисованных кадров одновременно, что было неудобно).
Есть и обратная функция - в 8-битном режиме можно открыть BM 16/64 - и он будет загружен как
1
2
3
4
Потом сложится в
1 3
2 4
И появится в главном окне как рисунок 32х32 пикселя (чтоб его дорисовать и снова экспортировать в 16x64 через меню по ДжойВлево).
В общем, после масштабирования меток, добавления полупрозрачных линий-границ между кадрами и перемещения надписи "Кадр: N" вниз получаем:
При рисунке 32х32 с отображением горизонтальных и вертикальных меток и горизонтальных полупрозрачных линий - метки между кадрами при масштабе x1 невозможно нарисовать между пикселями (на полпикселя сдвинуть), поэтому они съезжают в начало кадра. Но если масштаб выбрать побольше (например, x2) - то они уже центрируются между пикселями:
При рисунке другого размера, например, 16х64 с отображением только вертикальных меток на краях рисунка и полупрозрачных линий на рисунке:
Масштабируем отрисовку разбитого на 4 части рисунка 32х32 пикселя в 8-битном режиме при создании BMX-анимации
При рисовании BMX-анимации и при размере рисунка 32х32 пикселя жмем ДжойВлево и выбираем "Разбить" - рисунок превращается в 4 мини-рисунка, каждый из которых - отдельный кадр анимации. Выглядело это раньше так:
Надпись "Кадр: N" уже сдвинули в левый нижний угол окна.
Этот режим совсем не был рассчитан на курсор 5х5 пикселей и когда курсор подъезжает в середине рисунка к границе между кадрами - края курсора рисовались поверх этих границ, стирая их.
Просмотр кода показал что этот режим вообще не умеет прокручивать картинку влево-вверх при больших масштабах. Да и рисует он ее без ограничений по области просмотра. Как будто был предназначен для мелких экранов и мелких масштабов и не исправлялся на большие масштабы. Типа включаешь x1 масштаб и на экранчике 101х80 точек рисуешь в нем без всяких прокруток. А на большом масштабе он вылезает и сквозь полосы прокрутки и сквозь нижнюю панель со значками:
Не будем рисовать 4 отдельных части рисунка. Его цель была показать где кончается одна часть и начинается другая. Уберем это разбиение и вместо этого просто разделим кадры ровно посередине полупрозрачными горизонтальной и вертикальной линиями-метками как в предыдущем режиме. Получаем на большом экране, на мелком в масштабе х1 (линии и метки съезжают в начало кадров), на мелком в масштабе х2 (метки ровно по центру между кадрами):
Проблема открытия чернобелых BMP/BMX-файлов на Android
Откроем один из сименсовских BMX-файлов на сименсе:
Он корректно загружается в паинткад:
Хотел потестить на андроиде подобное. Теперь откроем этот же файл под Android (предпросмотр работает прекрасно, т.к. при этом картинка открывается средствами телефона, а не паинткадовскими методами):
А вот при загрузке этого файла в паинткад - открывается пустой рисунок, но не выдает ошибок:
Открытие других стандартных сименсовских рисунков выдает даже мусор, сдвинутый растр и т.д. Видимо, есть проблема в алгоритме открытия BMP файлов (в его черно-белой части), причем проблема проявляется только на андроиде.
Нарисуем мозаикой в шахматном порядке кучу пикселей на рисунке 32х32:
Сохраняются они нормально, корректный рисунок лежит в чернобелом BMP-файле, андроид его видит отлично. Но при открытии загружается это:
Загрузилось только полрисунка. В BMP картинка сохраняется снизу-вверх, слева-направо, поэтому снизу то что загрузилось сначала - оно снизу. А сверху что-то оставшееся от последней удачной загрузки.
Нарисуем картинку поосмысленнее чтобы понять какая часть загрузилась:
Сохраняем и открываем ее:
Снизу то, что должно быть сверху. Сначала слева-внизу первые 16 пикселей - вообще лишние, но потом буквы a и b, их там вообще быть не должно)
После проверки оказалось что функция seek перехода на определенный байт в файле при чтении, используемая всего в паре мест в программе, неправильно работала. В итоге чтение перескакивало дважды заголовок BMP-файла и читало растр из середины. На сименсе такой проблемы не было потому что там паинткад использует SiemensFS, у нее seek это просто вызов seek из внутреннего сименсовского ява-класса.
Теперь seek-и в JSR-75 поправлены, часть лишних вызовов вообще удалена, и файл зачитался правильно:
Масштабируем сетку
Сетка при ее включении в подменю "Настройки" главного меню - до сих пор рисуется черно-белыми пунктирными линиями толщиной 1 физический пиксель:
Сделаем ее толщиной "размер масштабированного пикселя"/4, но пусть толщина не превышает виртуальный пиксель по размерам на большом масштабе. И пусть линия сетки состоит из полупрозрачных черных пунктирных и белых пунктирных линий с шахматным порядком пикселей. И пусть стоит между пикселями картинки по центру (насколько это возможно, например, линию толщиной 3 физических пикселя пополам поделить не получится, поэтому будет рисоваться 1 физический пиксель с одной стороны границы между масштабированными пикселями картинки и 2 физических пикселя с другой стороны.
Смотрим что получается. Теперь на чернобелом градиенте видно что в черной части видны белые пунктирные линии, а в белой части видны черные пунктирные линии. Здесь при масштабе x9 толщина линий сетки равна 9/4=2, значит рисуется одна черная и одна белая пунктирные линии, сквозь которые видно рисунок:
При масштабировании толщина линии упирается в размер виртуального пикселя и равна ему:
На чернобелом градиенте даже при цвете картинки 127,127,127 (среднее между черным и белым) сетка цепляется за глаз и ее более-менее можно увидеть:
Масштабируем экран блокировки
Должно быть примерно так (и то не так - год-то срезается в правом верхнем углу):
Поделим дату+время пополам и отобразим в две строки. Серый фон можно как-нибудь закрасить, например, шахматными клетками. Цвета клеток плавно менять в зависимости от текущего времени каждую секунду (при перерисовке экрана блокировки). И клетки пусть движутся в такт изменению времени. Сделаем их 60 виртуальных пикселей в ширину и будем двигать каждую секунду на 1 виртуальный пиксель по диагонали, тогда через минуту (60 секунд) они встанут в ту же позицию что и были при нуле секунд и все начнется сначала.
Цвет текста (особенно, алую "Блокировку") можно поменять тоже на цвета, зависящие от текущего времени. Чтобы текст был всегда виден на фоне шахматных клеток - нарисуем текст цветом, обратным цвету клеток 255-r, 255-g, 255-b.
И сгруппируем и переставим строки чтобы они не размазывались по всему экрану.
Получаем слегка анимированную заставку для блокировки вместо статичного переключения времени)
На эмуляторе Siemens время не учитывает временную зону GMT+3, поэтому там время на три часа раньше. Т.к. размер квадратов завязан на виртуальные пиксели, то на любом экране любого телефона будет где-то 9-12 таких клеток на экране (в раскладке 3х3 для примерно квадратных экранов или 3х4 для вытянутых), что не должно быть сильно напряжней одной клетки на весь экран (закраска фона серым) в старой версии экрана "Блокировки". Секунды отвечают за синий, минуты за зеленый, а часы за красный, поэтому в течение часа будут и сине-зеленые клетки, и красные (когда секунды и минуты ближе к нулевой отметке):
Масштабируем экран с прогрессом
В окне MainForm оставались три функции - Вставить, Сдвиг и Обратить, которые должны показывать прогресс (все остальные давно уехали в модули Rend, Gate и там показывали свой прогресс применения эффектов, открытия файлов и т.п.). Но они вызывались в процессе отрисовки MainForm, когда из какого-нибудь окна настроек эффекта шел возврат в MainForm, то в начале первой отрисовки paint проверялось зачем мы пришли в MainForm, и если причина - вызов чего-нибудь, то тут же улетали из MainForm на вызов этого чего-нибудь. И, например, при вставке - вызывалась процедура вставки, которая хотела рисовать прогресс вставки на экране и пыталась это делать вызовом перерисовки.
В Siemens с MIDP1 отображение прогресса работало - в процессе отрисовки можно было вызвать другую отрисовку - и оно слушалось, само вызывало новую процедуру paint изнутри недорисованной недовыполненной предыдущей. В Siemens с MIDP2 это уже не работало, все процедуры были вынесены в отдельные рисуемые классы (чтоб облегчить MainForm, а заодно чтоб прогресс рисовался).
И вот теперь для этих трех функций вместо вызова изнутри - просто поставим бесконечно тикающий таймер на 100 мс и флажок окончания отрисовки в конце paint. Таймер будет проверять - и если отрисовка окончена и флажок стоит, то отменять себя и вызывать процедуру вставки или обращения цветов, которая уже будет свободно вызывать новые отрисовки и рисовать окно с прогрессом вставки/обращения цветов.
Элементы окна оттащим на нужное количество виртуальных пикселей. И добавим отображение таймера - он показывает сколько секунд осталось до конца процесса.
Кстати, окошко прогресса для "Вставить" в 24-битном режиме обычно и не пытается появиться, т.к. там вставка - простая мгновенная программная вставка картинки на картинку одной командой за доли секунды, а вот в 8-битном режиме - это попиксельный перенос индексов цветов с буфера на рисунок + отрисовка картинки для отображения нового рисунка с наложенным буфером, и вот там это окошко заметно.
Получилось так:
Раз так хорошо получилось - скопируем этот интерфейс с прогрессом и в ранее масштабированный модуль Gate. Пусть тоже показывает таймер при открытии/сохранении файлов:
Отлов багов и добавление улучшений
В процессе тестирования функций открывания черно-белых BMP/BMX файлов поправлено/добавлено следующее:
1) При открытии чернобелого BMP/BMX рисунка как 16x64 с превращением в 32x32 пикселя использовался вспомогательный массив, который не стирался. И при повторном открытии этим же методом все рисунки накладывались в этом буфере друг на друга. А в случае если очередной рисунок имеет в палитре не белый и черный цвета, а наоборот - черный и белый, то буфер еще и инвертировался, получался предыдущий инвертированный рисунок с новым неинвертированным, наложенные друг на друга. Теперь это все исправлено)
2) При открытии черно-белых BMP/BMX файлов устанавливался тип рисунка "2-цветный ч/б BMP". Теперь если открываем BMX - ставится тип "2-цветный ч/б BMX", рисунок сразу делится на кадры и сразу можно рисовать, видя границы кадров как 4 штуки друг под другом.
3) При открытии чернобелого BMP/BMX рисунка как 16x64 с превращением в 32x32 пикселя автоматически включается режим "Разбить" чтобы (в сумме с предыдущим исправлением под цифрой 2) сразу рисовать BMX-анимации, видя границы кадров как крестовину посреди рисунка, а не 4 кадра друг под другом как в обычном BMX рисунке.
4) При открытии/сохранении BMP в 8-битном режиме когда-то был добавлен режим, загружающий BMP в буфер и сохраняющий из буфера в файл. Режимы были добавлены оригинально - просто в цикл вставлено сравнение "если OpenCB, то кладем цвет в буфер, а иначе - на рисунок", и оно вызывается для каждого пикселя. Раздублировал цикл на два, один из которых кладет цвет в буфер, а второй кладет цвет на рисунок, и сравнение ""если OpenCB" теперь только одно вместо миллиона. Может быстрей станут открываться/сохраняться BMP-файлы в 8-битном режиме.
Масштабируем экран предпросмотра
Этот экран появляется когда жмем в главном окне кнопку предпросмотра (обычно это кнопка "Положить трубку" на вирт.клавиатуре или "Взять трубку" на физических телефонных клавиатурах).
В последней версии управление в нем было такое:
1) Звездочка - показать прямоугольный массив из 5x5 текущих рисунков чтобы проверить хорошо ли текущий рисунок ложится как текстура и стыкуется сам с собой
2) Левый софт - переключатель "показать буфер" / "показать рисунок"
3) Кнопка "5" или "Джойстик" - переключатель "показать компаратор" / "убрать компаратор"
4) Кнопки навигации джойстика и кнопки "1"-"9" кроме "5" - перемещать показываемую картинку по экрану
5) Нажать пальцем на область с рисунком - спрятать/показать виртуальную клавиатуру (чтоб она не мешала расматривать, например, рисунок размером с экран)
6) Кнопка вызова Предпросмотра или Решетка - выключить предпросмотр
Т.к. в других окошках по звездочке вызывается масштабирование, то на экране предпросмотра перетащим показ 5x5 рисунков на кнопку "0". А по звездочке сделаем масштабирование.
Масштабирование работает в обе стороны - кратно увеличивает или кратно уменьшает размер текущего рисунка, или буфера (если нажали левый софт), или компаратора (если нажали 5 или Джойстик). На увеличение работает так:
1) загружаем, например, сименсовский стандартный самолет 32x32 пикселя
2) обычный предпросмотр без масштабирования выглядел вот так
3) жмем звездочку - включается масштабирование, самолет натягивается кратно до максимального на данном экране размера:
4) если без масштабирования нажать 0 - включится просмотр текстуры размером 5x5 самолетов:
На сименсе пять штук картинок 32x32 равны 160x160 пикселей и не влезают в экран 132x176
5) а если масштабирование включить - то покажутся 5x5 масштабированных до экрана самолетов (до размеров экрана подтягивается весь массив 5x5):
На сименсе массив 5x5 превратился из 160x160 в 80x80, сжавшись в 2 раза чтоб влезть в маленький экран, поэтому часть пикселей исчезла и самолеты превратились во что-то другое)