Подвисание главного окна рисования при вызове функции "Выделение и буфер" (кнопка "#") - "Обратить всё"
Этот "эффект" в 8-битном режиме просто инвертирует все цвета в палитре (если она была UNI, то станет не UNI). Это, во-первых, быстро. А, во-вторых, можно открыть любой 256-цветный GIF или BMP, у которого будет неизвестно какая палитра - и гарантированно инвертировать такую картинку целиком, не приводя палитру к UNI и не рассчитывая обращенные цвета для каждого пикселя)
А потом в 8-битном режиме паинткад перерисовывает рисунок с этой новой обращенной палитрой. Буфер обмена должен тоже перерисовать, но опять это пропущено в коде. Исправим это, добавив еще и перерисовку буфера обмена.
А в 24-битном режиме попиксельно инвертирует весь рисунок, причем даже без индикатора.
Добавим для 24-битного режима нормальный индикатор, бегущий от 0 до 100% в процессе "обращения".
А для 8-битном добавим индикаторы, стоящие на 100% с подписями "В рисунок..." и "В буфер...".
Получилось в 24-битном режиме:

И получилось в 8-битном режиме:


Подвисание функции пачечного превращения BMP-файлов в GIFы в меню "Обработка" - "BMPs->GIFs"
В самом конце конвертации в конце финально перерисовывается рисунок и буфер. И делается это в основном потоке прямо в главном окне рисования.
Выносим это в отдельный поток и снабжаем статичным индикатором, показывающим 100% пока перерисовывает рисунок/буфер. Получаем вот такое:
1) Вызываем функцию пачечной конвертации bmp в gif:

2) Выбираем один из файлов и смотрим сколько исходных BMP паинткад нашел для конвертации:

3) Потом идет поочередное открытие BMP и пересохранение их в GIF. А вот потом финальная перерисовка рисунка:

4) И если был буфер - то и перерисовка буфера:

5) И в конце сообщение об успешной конвертации:

Всё. Теперь в главном окне рисования никто из модулей никогда не устанавливает флажок перерисовки рисунка в основном потоке при рисовании окна на экране. Удаляем этот флажок.
Подвисание клавиатуры в модулях Gate и Rend при обработках и загрузке/сохранении файлов
В этих модулях никогда не было управления с клавиатуры, потому что единственная цель модулей - довести полоску прогресса до 100% и вернуться в главное окно рисования.
В Rend уже было сделано в прошлом посте управление, т.к. на эффект "Цвета из буфера" был поставлен перехват левого софта с функцией "Прервать".
Теперь и в Gate тоже управление поставлено. Можно прямо во время обработки или загрузки/сохранения файлов нажатием на большую синюю клавишу вирт.клавиатуры переключать ее типы цифровая клавиатура/джойстик.
Подвисание эффектов Контраст, Яркость, Цвет, Цветность, Гамма в конце если в буфере обмена что-то есть
Если палитра не UNI, то эти эффекты воздействуют на палитру, а не на пиксели. А потом перерисовывают рисунок (и это отображается на экран), а вот потом могут встать замертво на долгое время - это если был буфер обмена, то они перерисовывают его (т.к. палитра сменилась).
Поставим окошко с надписью "В буфер..." и статичным индикатором 100% чтобы было видно почему все так подвисло.
Получилось:





Подвисание при создании нового файла в 8-битном режиме (особенно если уже лежал какой-то рисунок в буфере обмена)
В 8-битном режиме обнуляется весь массив рисунка попиксельно. А если был буфер обмена - то он перерисовывается еще.
Поэтому для 8-битного режима в главном окне рисования на это время выведем "Подготовку" со статичным 100% индикатором:

Как только окно пропадает и появляется главное окно рисования - точно можно двигать курсор и рисовать.
Для 24-бит просто зарисовывается рисунок большим прямоугольником фонового цвета. И буфер не перерисовывается, поэтому в 24-битах сразу быстро вызываем в основном потоке эту подготовку, не показывая никаких окошек и тут же мгновенно можно рисовать в главном окне рисования.
Подвисание при работе инструментов
Инструменты рисуют всякие линии, круги и т.п. на отдельном двухцветном рисунке. А потом нарисованное переносится в текущий рисунок/массив рисунка уже пикселями цвета ПЦ, с учетом выбранной прозрачности и т.д. Этот перенос может занять длительное время если текущий рисунок большой (и двухцветный рисунок, с которого переносятся нарисованные примитивы тоже большой).
Вынесем эти переносы тоже в отдельный поток. Но не будем показывать никаких окон чтобы при рисовании не мигало перед глазами то главное окно, то окно с подписью "В рисунок...". Вместо этого на время, пока паинткад занят этим переносом, подменим значок главного окна на значок песочных часов.
Убираем подвисание инструментов
Текст после ввода текста и выбора текста расположения на рисунке подвисал.
Т.к. здесь возвращаемся из другого окна, то нарисуем заголовок окна с песочными часами вместо значка, а остальной экран замажем пустым окном. Получается:

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

При рисовании пальцем на рисунке чтобы не вызывались множественные потоки - будем блокировать вызов нового потока пока не закончится старый. Вообще поставим при "часах" в заголовке главного окна рисования полную блокировку нажатия кнопок, удержания кнопок, отпускания кнопок, нажатий стилуса, перемещений стилуса. А по отпусканию стилуса и "часах" будем только сбрасывать "полилинию" в первый шаг. Чтобы можно было рисовать новые полилинии всегда после отпускания пальца и последующего нажатия в другом месте рисунка, а старую полилинию прервать, даже если в момент отпускания пальца паинткад был занят и были "часы" в значке главного окна рисования.
Убираем лишнее окно при отмене последнего действия
Хоть отмена и может иногда перерисовывать и буфер, и тогда перерисовка рисунка и буфера занимают длительное время, и хорошо бы их, как было сделано в прошлом посте, наблюдать в отдельном окошке в виде шагов "В рисунок..." и "В буфер...". НО отмена последнего действия часто позволяет сравнить рисунок До и После какого-нибудь эффекта, и хорошо бы лишними окошками не отвлекать никого чтоб сравнивать было проще.
Поэтому уберем отмену последнего действия тоже под "часы" вместо окошка - часы будут висеть в заголовке пока идет отмена.

































































































