Доброго времени суток, Уважаемые.
Итак, редактор постепенно совершенствуется. По прежнему не всё задуманное реализовано. А новых идей всё больше. Больше не будет понтов, типа "... в 30 строк кода". На данный момент их уже почти 300. Но не потому, что программа стала супер навороченной. А потому, что стараюсь уйти от быдло-стиля написания. После, в этой мешанине даже самому невозможно разобраться.
Что сделано? Сделаны панели выбора цвета и размера кисти. И к ним кнопочки вызова. Количество образцов цвета теперь 8. По 4 на левую и правую кнопку мышки. К каждому образцу своя кисточка. Пока лишь диаметр пятна. В планах масштабирование пятна по X и Y, расстояние между мазками. Левой кнопкой выбирается цвет для изменения, правой - активные для лев. прав. кнопок при рисовании. Не хватает числовой информации. Например, о размере кисти, о координатах курсора в поле рисования. Это тоже в планах. Ещё в планах пипетка для определения цвета, штамп для копирования, размытие - его сильно не хватает при рисовании. Различные формы пятна от кисточки, различные алгоритмы закрашивания. Основное - равномерный тон, без многократного наложения мазка в одной точке, даже при прозрачности цвета. Не хватает векторов для рисования прямых. А ещё безумно не хватает Undo.
Сделана более чёткая логика работы. Теперь цвет не сбивается, если вылетаешь из поля рисования на панель выбора цвета. Как и не сбивается размер кисточки. Но и есть ошибки. Пока не исправленные. Но и не проявляющиеся явно.
Функции
В этом языке, как и в Си, функции это подпрограммы. Очень удобно. Написал функцию, получающую параметры при вызове. Она выполнила предписанное, вернула результат. Причём предписанное предписано не жёстко, а может выбираться в зависимости от значений параметров при вызове. Или не вернула ничего, но изменила значения глобальных переменных. Или перерисовала что-то на экране. Гуру говорят, что глобальные переменные зло. Но мне пока без них никуда. Изначально моя программа была монолитной. И самой сложной частью была проверка условий, где курсор, что нажато. Когда это было 30 строк кода - всё было наглядно и понятно. Но с увеличением количества "фич" стало появляться всё больше и больше повторяющихся кусков кода. И я решил использовать функции. И тут всё сломалось. Стройная монолитная программа взорвалась на пару десятков отдельных кусков - функций. Очень хотелось поддерживать работоспособность программы постоянно. Пугала возможность допустить ошибку, и уже не разобраться, что, откуда, куда, зачем? Но постепенно всё нормализовалось. И даже более того. Оптимизировалось! Теперь одна и та же функция как изменяет цвет, так и параметры кисти. И, наверняка, она же будет применена для других панелей, если появятся. Другая универсальная функция перерисовывает положения ползунков на скроллбарах. Третья отображает 8 цветов, выбранный для изменения цвет, активные цвета для кнопок мыши. Четвёртая рисует как панель выбора цвета, так и панель выбора кисти.
В процессе тестирования стали выявляться ограничения. Разрешение создаваемых изображений 72 пикселя на дюйм. И при малейшем увеличении это сразу видно. Но ведь редактор позиционировался а-ля ПаинтБраш, а не а-ля фотошоп. Стоит отметить, что я прочитал всего 3 главы книги "Бинария". И, считаю, что обладая столь ограниченными знаниями, результат всё же неплохой.
Я не вижу смысла постить весь листинг программы. Не вижу смысла в деталях описывать весь алгоритм.
Я пишу обычно по ночам. Когда мой ненаглядный главный бета - тестер спит. Не отвлекает внимание на свои интересы. А их немало.
Вижу смысл сказать вот что:
1) Всё, буквально всё, надо комментировать! Не только, что какая функция делает, но буквально каждую строчку! Иначе следующей ночью смотришь на собственный код, как баран на новые ворота. Понимаешь, что хочешь, но не понимаешь, в каком месте, что нужно изменить, чтобы реализовать. Код работает. Но ты не понимаешь, как!
Надо бекапить. Отладил что-то в программе. Программа работает. Надо сделать копию - бэкап. Чтобы, если всё пойдёт совсем плохо, иметь возможность вернуться. Это особенно важно при внесении больших изменений. Изменении логики работы, добавлении больших функций.
2) С желаниями надо быть последовательным. Идеи, как говорилось выше, приходят табунами. Начинаешь их обдумывать - теряешь мысль, что и для чего делаешь сейчас.
3) Нужно планировать. Программа должна начинаться не с ядра, которое работает. А с задач, которые она будет решать. После эскиз интерфейса, после блок - схемы алгоритмов. Как основной программы - в общих чертах, так и подпрограмм - в деталях. Так проще разобраться, что, куда, откуда, зачем. Иначе - неизбежное переписывание до 60% кода! Когда уже реализованное кардинально изменяется под новую структуру программы, под придуманные универсальные функции.
4) Четвёртое, но на самом деле главное. Надо писать! Надо пробовать, ошибаться, разбираться, исправлять. Никогда не получится прочитать сотню книг по теме, а потом сесть, и написать программу "от и до". Но это, конечно, моё личное мнение. Мнение дилетанта. И это четвёртое не противоречит третьему. Даже имея чёткий план будущей программы, написать сразу и без ошибок не получится.
Что сказать ещё?... Очень смешанные чувства. С одной стороны растущая уверенность в собственных силах, с другой осознание, что программа растёт с геометрической прогрессией. С одной - желание и дальше совершенствовать своё "дитя". С другой осознание, что оно вряд ли когда либо превзойдёт возможностями монстра Фотошопа. А значит важен не результат, а лишь процесс. Закрепление в голове изученного. Дабы позже быть способным объяснить сыну. Помочь в изучении языка.
Осознание, что надо читать следующие главы "Бинарии". Осознание, что на данный момент написанное - мой предел. Но далеко не предел этого языка.
В заключении, рисунок, выполненный в программе. Нарисован мною. На скорую руку. Для этого поста. Пара рисунков главного бета - тестера, сделанных в процессе работы над программой. А ещё скрин-дамп его программы. Рисующей девять пасхальных яичек. Каждый раз новыми оттенками цвета. Очень простой программы. Меньше десятка строк. Но за каждую команду и число в ней он может пояснить любому!

Архив со скетчем. Вдруг кому нибудь всё таки станет интересно.

Компилировать в EXE не пробовал. Но, уверен, размер исполняемого файла будет копеечным.