Comments 24
В обычном словаре «gimp» означает всего лишь «хромой». Но Urban Dictionary говорит ещё, что это также «пассивный садомазо» — из фильма «Криминальное чтиво». А также «ты что, инвалид?»
Надо же… Никогда не подозревал, что gimp это еще не аббревиатура, а полноценное слово.
Спасибо.
Надо сказать, что на фоне остальных редакторов он с одной стороны выглядит как наиболее rich (с общими абстрактными универсальными примитивами), а с другой — почти не развивается последние несколько лет. Я понимаю, что GEGL нужен для поддержки хорошего цвета (больше 8 бит на канал), но многие вещи в гимпе просто ужасны. Например, регуляция яркости и контрастности реализована очень примитивно и не очень полезно. То же касается регуляции каналов.
Проблема в том, что гимп разрабатывают полтора человека. Буквально. 3/5 коммитов за последние 4 года сделаны одним человеком. На такой огромный проект, как вы понимаете, этого явно недостаточно. Поэтому чтобы Гимп не загнулся, надо активно помогать и призывать помогать других.
Ткнулся в сырцы:

gimp_paint_core_class_init (GimpPaintCoreClass *klass)
{
  GObjectClass *object_class = G_OBJECT_CLASS (klass);

  object_class->finalize     = gimp_paint_core_finalize;
  object_class->set_property = gimp_paint_core_set_property;
  object_class->get_property = gimp_paint_core_get_property;

  klass->start               = gimp_paint_core_real_start;
  klass->pre_paint           = gimp_paint_core_real_pre_paint;
  klass->paint               = gimp_paint_core_real_paint;
  klass->post_paint          = gimp_paint_core_real_post_paint;
  klass->interpolate         = gimp_paint_core_real_interpolate;
  klass->get_paint_buffer    = gimp_paint_core_real_get_paint_buffer;
  klass->push_undo           = gimp_paint_core_real_push_undo;

  g_object_class_install_property (object_class, PROP_UNDO_DESC,
                                   g_param_spec_string ("undo-desc", NULL, NULL,
                                                        _("Paint"),
                                                        GIMP_PARAM_READWRITE |
                                                        G_PARAM_CONSTRUCT_ONLY));
}

Это си. С самодельными классами. Почему мне больно это читать?
Это си. С самодельными классами.
— да, именно так. Это Glib/Gtk стиль, так исторически сложилось. В таком стиле весь GNOME написан.
И после этого они удивляются, что трудно привлечь программистов интересной идеей? Вот такой вот код теребить?
Я конечно крестовик, но все же.., что Вас смутило в этом куске — вроде си как си. Ну классы — ну и что такого-то, я подобный код встречал не только в gimp, в сотнях проектов(не только gtk). Вам не нравится запаковка указателей в структуры? Или Вам вообще сам объектно ориентированный подход не нравится? Тогда здесь альтернатив не много — стейт машина ещё хуже, имхо.
Мне не нравится, что пишут в таком стиле и на таком языке, который этого стиля не понимает.
Что именно вам не нравится в этом стиле? То-что потом можно будет писать аля klass->start(klass, arg1, arg2). Т.е Вам не нравиться, что можно писать почти как в языках со встроенной оо. Или Вам вообще оо не нравится? — я так и не услышал.
Как минимум разумно было бы портировать проект на C++. Это не будет сложно, зато позволит просто выкинуть, буквально, тонны кода, которые будет генерироваться автоматически и без ошибок. Про безопасность работы с кодом, особенно про то, что в современном C++ в подавляющем большинстве случаев можно не опускаться на уровень сырых указателей я вообще молчу.
Если так уж необходимо использовать _только C в прикладной программе_, то всё равно никто не мешает сделать человеко-читаемую кодогенерацию на макросах, которые пусть и будут специфичны для проекта но зато будут удобны, да и готовых библиотек полно для этих целей. Просто писать такую лапшу как приведена выше в ветке вредно ибо верифицировать и читать такой код очень и очень тяжело.

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

Возможно я в чём то сильно не прав, но тогда объясните, пожалуйста, в чём. Так же я прекрасно понимаю, что значит Legacy и поддержка старого кода, что там так сложилось и т.д., но это не значит, что надо продолжать писать также как писали раньше, что ничего не надо менять в подходах и что не надо вообще никогда делать рефакторинг.
Я так слышал, что в последнее время всё больше народу переходит Krita. Как-то вокруг ней очень много движухи.

Я графику практически не редактирую, так что не могу их сранивать по проработанности и функциональности, да и в код не смотрел. Но это я к тому, что, возможно, нет смысла призывать народ пилить GIMP, когда есть Krita.
Это разные абсолютно инструменты по идеологии. Крита для художников. Кисти, нажим, наброски и т.п. GIMP для редактирования. Это разные задачи. В *nix комбайны не приветствуются.
Я, похоже, чего-то не понимаю
  1. ЕМНИП, GIMP кисти и нажимы тоже умеет
  2. Я не понимаю, что останется от графического редактора, если изъять из него функциональность кистей. Crop да resize? Вы так себе основное использование GIMP представляете? Это в общем практически всё, что мне нужно от растрового графического редактора, но Krita и GIMP одинаково хорошо выполняют эти задачи на мой вкус.
Фильтры, коррекция уровней, цвета, разбиение на каналы, всякие healing brush, математическое вычитание фона/шума… Один фоторедактор, другой заточен на создание с нуля картин и скетчей.
В 1997 году расшифровку аббревиатуры GIMP изменили на GNU Image Manipulation Program с целью соблюдения рекурсии.
Соблюдать рекурсию безусловно важно, но, стесняюсь спросить, где здесь рекурсия?
Вы правы, сам по себе GIMP нельзя назвать рекурсивным акронимом, однако внутри она всё-таки спряталась. :)
Only those users with full accounts are able to leave comments. Log in, please.