GOGL - растровый редактор

Pixilang по русски
Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

GOGL - растровый редактор

Post by Zuf » Tue Oct 21, 2008 2:35 am

Image

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

Code: Select all

// GOGL - пример простого растрового редактора для Pixi
// На создание этого примера меня натолкнули различные дискуссии на форуме пиксиланга.
// Название GOGL происходит от ника одного из создателей пиксиланга - goglus, а также
// созвучно с GEGL, новым графическим движком The Gimp. Однако, это всего лишь шутка и не стоит
// воспринимать ее слишком серьезно :)
//
// Посвящаяется всем начинающим изучать программированиие (и в особенности язык Pixilang).
//
// Эта программа преподносится, прежде всего, как пример для дальнейшего русширения или обучения.
//
// Ключевые особенности:
// - используются три вида инструментов
//   * точки (пиксели)
//   * прямые линии
//   * кисти (можно загружать внешние gif'ы)
// - Поддержка функции отмены последнего действия
// - Простой инструмен выбора текущего цвета
Дальше я уже просто не мог остановится.
GOGL прежде всего призван показать каким образом можно сделать простой растровый редактор на пикси.

Что еще не сделано, но хотелось бы:
1. До конца реализовать не доделанные функции (выбор кистей, параметры инструментов...)
2. Доделать и оптимизировать функционал undo/redo
3. Причесать, подчистить и структурировать код
4. Написать подробные комментарии к коду
5. Не работает инструмент "пипетка"
6. Написать статью/урок по "теории простых растровых редакторов" (ну это планы наполеоновские)


Примечание:
Программа уже сейчас поддерживает разные кисти.
Однако интерфейс выбора еще не реализован.
Если интересно - можно попробовать поменять в файле instruments.txt:

Code: Select all

current_brush = load_pixi("brushes/test01.gif")
current_brush_mask = load_pixi("brushes/test01_mask.gif")

// Можно сменить на 
current_brush = load_pixi("brushes/default.gif")
current_brush_mask = load_pixi("brushes/default_mask.gif")

// или на это и посмотреть что получится
current_brush = load_pixi("brushes/calygraph01.gif")
current_brush_mask = load_pixi("brushes/calygraph01_mask.gif")
Все кисти нагло стырены из гимпа :)

Чтобы выйти из инструмента выбора цвета нужно кликнуть по кнопке с цветом в меню.
Пока фоновый цвет используется только для очистки экрана.

На данный момент я не все доделал, что хотел. Однако решил всетаки выложить на форуме что есть. Я боюсь, что на этой неделе у меня не будет времени доделать програмку, а потом еще неизвестно что будет... Так что лучше что-то, чем ничего ;)

Еще отмечу, что в процессе создания редактора я ощущал острую нехватку структур и функций в языке.
И если без структур еще можно обойтись, то без функций очень тяжело. Приходится передавать параметры через глобальные переменные. Это навевает воспоминания о доисторических временах ;) Я помню, NightRadio уже поднимал этот вопрос... Можно это еще раз обсудить ;)

Собственно скачать пример можно тут: http://zufs.net/upload/pixi/gogl-2008-10-21_01-00.zip

J3d1
Posts: 175
Joined: Wed Oct 15, 2008 4:49 am
Location: г. Абакан, Хакасия
Contact:

Re: GOGL - растровый редактор

Post by J3d1 » Tue Oct 21, 2008 9:38 am

Hi Zuf! Хороший редактор.
Last edited by J3d1 on Tue Oct 21, 2008 4:43 pm, edited 1 time in total.

User avatar
NightRadio
Site Admin
Posts: 3151
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: GOGL - растровый редактор

Post by NightRadio » Tue Oct 21, 2008 9:53 am

Всем привет!
Редакторы - это здорово! :) И вообще приятно, что к языку до сих пор не угас интерес разработчиков.
На счет того, что я якобы охладел к Пикси - не совсем так. Просто сейчас такой период, когда ему нужно переходить на некий новый уровень, но из за отсутствия четкого плана дело пока стоит на месте.. то есть и старая версия не дорабатывается и новая не появляется :) Но я уверен, что из такой ситуации мы всетаки выберемся совместными усилиями.

С одной стороны я хочу сделать универсальную основу для множества языков (viewtopic.php?f=1&t=1071).
С другой стороны нужен новый Пикси. Вероятно, со структурами, функциями, математикой. Упрощенный Си?

J3d1
Posts: 175
Joined: Wed Oct 15, 2008 4:49 am
Location: г. Абакан, Хакасия
Contact:

Re: GOGL - растровый редактор

Post by J3d1 » Tue Oct 21, 2008 10:17 am

Zuf, извиняюсь за флейм в твоей ветке форума.
Last edited by J3d1 on Tue Oct 21, 2008 3:33 pm, edited 1 time in total.

goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: GOGL - растровый редактор

Post by goglus » Tue Oct 21, 2008 11:52 am

чувствую себя человеком и пароходом )
рисует супер и не тормозит на моем покете

Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

Re: GOGL - растровый редактор

Post by Zuf » Tue Oct 21, 2008 11:53 am

Делать из пикси "урезанный Си" мне не кажется целесообразным.
Пиксиланг это прежде всего эксперимент и инструмент для экспериментирования.
Язык Си уже есть и он вполне полноценен и самодостаточен. И не так уж сложен, вопреки общественному мнению ;)
На данном этапе пиксиланг это что-то вроде "макро ассемблера". В языке существует набор команд и очень ограниченный набор конструкций для управления ходом выполнения программы (простой цикл и простое условие). Есть некоторые сложности с обработкой результатов работы встроенных команд (например нельзя сравнить строки, тяжело обрабатывать символы...). Отсутствуют числа с плавающей запятой, что сильно затрудняет работу с математикой.
Т.е. в принципе стало ясно, что пикси, как язык, должен переходить на следующий этап развития. Вероятно, этот этап - процедурное программирование. Си является процедурным языком, и если говорить о пикси как о "урезанном Си" имя в виду парадигму процедурного программирования то я не против. Только надо учесть разницу между целями, "духом" Си и пикси. Си - язык системного программирования. Пикси - инструмент для графических (мультимедийных) экспериментов. Все это я говорю к тому, что нужно представить себе концепцию дальнейшего развития и применения пикси и ей следовать.
Пользовательские програмки на пикси не очень удобно писать. Хотим ли мы, чтобы на пикси было удобно писать пользовательские приложения? Или пикси должен остаться в сегменте демок и игрушек? Думаю это первый вопрос, на который необходимо ответить, чтобы определиться с дальнейшим развитием языка.

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

P.P.S. А что касается dll, то у меня тут линукс и никаких dll не наблюдается. Я бы хотел наоборот, чтобы пикси можно было использовать как билиотеку в том же Си...

User avatar
NightRadio
Site Admin
Posts: 3151
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: GOGL - растровый редактор

Post by NightRadio » Tue Oct 21, 2008 3:43 pm

Я за то, чтобы как и прежде делать Пикси нацеленным на демки, игрушки и какие-то несложные мультимедийные приложения (типа трекеров, рисовалок и т.д.). Действительно, если захватить еще и область "обычных" приложений, всяческие АРМ, системные тулзы, базы данных, то пикси просто перестанет быть пикси - смешаем оригинальный язык с сами знаете чем :)
С плавающей точкой согласен.
Но вот функции и структуры меня несколько беспокоят.. Оно, может, и нужно, но не приблизит ли нас слишком тесно к Си?

Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

Re: GOGL - растровый редактор

Post by Zuf » Tue Oct 21, 2008 5:13 pm

Если не функции и структуры, то хотя бы нужен стек ;)
Говоря про приложения я и не имел в виду базы данных и прочее. Я как раз про трекеры и рисовалки. Сколько нибудь сложную рисовалку тяжело делать без функций и структур. Даже в моем простом примере код получился местами черезчур перенасыщен временными переменными и переменными "псевдо-параметрами".
Я тоже разделяю опасения NightRadio о приближении к Си. Наверное стоит посмотреть на другие языки, бейсик, паскаль, достать какую нибудь ветхую древность (в смысле устаревший процедурный язык программирования), посмотреть какие идеи реализовывались там. Надо будет покопаться на досуге. Думаю наша основная проблема, в том что мы мыслим категориями Си, да и сам пикси на Си написан. Видимо это накладывает свой отпечаток ;)

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: GOGL - растровый редактор

Post by Al_Rado » Tue Oct 21, 2008 6:09 pm

Функции, структуры, стэк... Что это :shock:
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

ivan-mi
Posts: 4
Joined: Sat Dec 08, 2007 6:47 pm

Re: GOGL - растровый редактор

Post by ivan-mi » Tue Oct 21, 2008 6:13 pm

Лично мне очень не хватает функций. Неудобно при создании большого проекта(я делаю арканоид на пикси 8) ) - приходится держать в голове имена всех переменных, а для подпрограмм(можно было бы в них использовать локальные) придумывать уникальные имена.

Guest

Re: GOGL - растровый редактор

Post by Guest » Tue Oct 21, 2008 6:23 pm

Тоесть для переменных в подпрограммах

Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

Re: GOGL - растровый редактор

Post by Zuf » Tue Oct 21, 2008 7:19 pm

Al_Rado wrote:Функции, структуры, стэк... Что это :shock:
А это закономерное развитие пикси :)

Структура это объединение переменных в едином пространстве. (Кстати тут встает вопрос о типах данных).
Функция это подпрограмма, которая может принимать аргументы и возвращать значения.

func(a,b,c)
{
tmp = a + c * c
return tmp
}

Стек это такой способ хранения данных.
Похоже на массив. Только используется немного другой принцип доступа.
Стек обычно сравнивают со стопкой бумаги. Мы кладем в стопку лист, сверху этой стопки. И берем мы из стопки тоже лист, который лежит сверху. Т.е. допустим мы кладем в стопку листы с номерами 1, 2, 3. И берем в обратном порядке - 3, 2 , 1.
Стек нужен для передачи параметров функциям.

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: GOGL - растровый редактор

Post by Al_Rado » Wed Oct 22, 2008 11:49 am

Zuf спасибо за ликбез, однако я все равно не вижу в этом необходимости... Ну меньше переменных можно сделать... А смысл? Стиль программирования будет более "правильным", так у нас язык не для "истинных программистов", а для кодеров-дизайнеров :D
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

Zuf
Posts: 110
Joined: Fri Dec 21, 2007 7:30 pm
Location: Msc
Contact:

Re: GOGL - растровый редактор

Post by Zuf » Wed Oct 22, 2008 12:11 pm

Al_Rado wrote:Zuf спасибо за ликбез, однако я все равно не вижу в этом необходимости... Ну меньше переменных можно сделать... А смысл? Стиль программирования будет более "правильным", так у нас язык не для "истинных программистов", а для кодеров-дизайнеров :D
Код становится меньше и проще. Идеи можно лаконичней выражать. Есть некая критическая масса кода, после которой становится практически невозможно поддерживать имеющуюся кодовую базу (в пикси пока нет таких программ, но тот де аниматор первый кандидат на это). Ну это если кратко.

User avatar
NightRadio
Site Admin
Posts: 3151
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: GOGL - растровый редактор

Post by NightRadio » Wed Oct 22, 2008 12:15 pm

По поводу структур. Это безусловно удобный элемент. Но в его классическом представлении он нам не походит :) Структура - это тип данных. Соответственно, они потянут за собой веревочку типов и другого Си-шного барахла :) Согласен с тем, что не нужно только на Си равняться, но это довольно непросто сделать, т.к. Си ближе всего к чистому ассемблеру, а в Пикси при всей его высокоуровневости явно прослеживается некий ассемблерный дух :)
Сейчас Пикси - что-то вроде расширенной версии классического Бейсика. А в классическом бейсике нет структур и функций с параметрами.. и строки там номерами нумеруются )) А ведь сколько на таком бейсике всего было написано!
Хотя от функций и локальных переменных я пока не отказываюсь... В том или ином виде они, вероятно, нужны в новом Pixilang.

Post Reply