Skip to content

About

LinuxPaint is a program for drawing and editing files on Linux (AppImage)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

44 Commits

Folders and files

Repository files navigation

Paint для Linux

Аналог Microsoft Paint (вид современной версии из Windows 11) на C++ и Qt 6. Нативное приложение: собирается в один исполняемый файл, без питона и рантаймов.

Сборка

Нужны компилятор с поддержкой C++17, CMake ≥ 3.16 и Qt 6 (модули Widgets и PrintSupport).

Debian / Ubuntu / Mint

sudo apt install build-essential cmake qt6-base-dev libqt6printsupport6 qt6-base-dev-tools

Fedora

sudo dnf install gcc-c++ cmake qt6-qtbase-devel

Arch / Manjaro

sudo pacman -S base-devel cmake qt6-base

openSUSE

sudo zypper install gcc-c++ cmake qt6-base-devel

Затем:

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
./build/linux-paint

Установка в систему (появится в меню приложений):

sudo cmake --install build

Сборка deb-пакета

Дополнительно нужен dpkg-dev — из него берётся расчёт зависимостей:

sudo apt install dpkg-dev

Собрать пакет из готовой сборки:

cd build && cpack -G DEB

Получится linux-paint_1.0.0_amd64.deb. Установка:

sudo apt install ./linux-paint_1.0.0_amd64.deb

После этого LinuxPaint появится в меню приложений со своим значком, а изображения можно будет открывать через «Открыть с помощью». Удаление:

sudo apt remove linux-paint

Важно: .deb связан с той версией Qt, что стояла на машине сборки. Пакет, собранный на системе с Qt 6.10, не запустится там, где Qt 6.4. Поэтому пакет собирают на том же дистрибутиве, где он будет ставиться, — либо используют AppImage.

Сборка AppImage

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

cmake --build build --target appimage

Инструменты сборки скачиваются автоматически при первом запуске. Результат — build/LinuxPaint-x86_64.AppImage, около 50 МБ. Запуск:

chmod +x LinuxPaint-x86_64.AppImage && ./LinuxPaint-x86_64.AppImage

Собирать AppImage следует на старом дистрибутиве (обычно Ubuntu 22.04): файл потянет за собой системную библиотеку C той машины, где собран, и на более старых системах уже не запустится. Обратная совместимость работает только в одну сторону.

Проще всего сделать это в контейнере, не заводя отдельную машину:

sudo docker run --rm -v $PWD:/src -w /src ubuntu:22.04 bash -c "apt update && apt install -y build-essential cmake qt6-base-dev qt6-base-dev-tools libqt6svg6 libgl1-mesa-dev libvulkan-dev libxkbcommon-dev wget file && (apt install -y qt6-svg-plugins || true) && cmake -S . -B /tmp/b -DCMAKE_BUILD_TYPE=Release && cmake --build /tmp/b --target appimage -j\$(nproc) && cp /tmp/b/LinuxPaint-x86_64.AppImage /src/"

Два пакета в этом списке нужны по неочевидным причинам.

libgl1-mesa-dev и соседи: на Ubuntu 22.04 пакет qt6-base-dev не тянет заголовки OpenGL, и без них CMake не находит Qt6Gui, а следом Widgets и PrintSupport — хотя файлы настройки этих модулей лежат на месте и сообщение об ошибке выглядит загадочно.

libqt6svg6: логотип вшит в программу текстом SVG, и превращает его в картинку отдельный модуль Qt. В AppImage он укладывается явно (см. EXTRA_QT_PLUGINS в packaging/appimage.cmake), но взять его сборщику неоткуда, если модуль не установлен в самой системе сборки.

Что умеет

Инструменты — карандаш, заливка с настраиваемым допуском (насколько близкие оттенки считать одной областью), текст, ластик (правой кнопкой работает как «цветной ластик»: заменяет только Цвет 1), пипетка, лупа.

Текст — набирается прямо на холсте, с курсором, выделением и переносом строк. Пока идёт набор, в ленте появляется группа «Текст»: шрифт, кегль, полужирный, курсив, подчёркивание и непрозрачная подложка Цветом 2. Текст остаётся редактируемым, пока не кликнуть мимо рамки.

Кисти — обычная, каллиграфические 1 и 2, аэрограф (продолжает распылять при удержании кнопки), масляная, мелок, маркер, карандаш, акварель. Каждая кисть имеет собственную фактуру, а не просто разную толщину.

Толщина и прозрачность задаются двумя вертикальными ползунками слева от холста. Прозрачность честная: штрих сначала целиком копится в отдельном слое и лишь потом ложится на холст, поэтому самоперекрытия внутри одного мазка не уплотняют цвет — полупрозрачная линия остаётся равномерной. Действует на карандаш, кисти и фигуры (контур и заливка ложатся одной фигурой).

Фигуры — линия, кривая Безье с двумя изгибами, овал, прямоугольник, скруглённый прямоугольник, многоугольник, треугольники, ромб, пяти- и шестиугольник, четыре стрелки, звёзды на 4/5/6 лучей, три выноски (включая облако), сердце, молния. После отпускания мыши фигура остаётся редактируемой: её можно двигать и тянуть за восемь маркеров, пока она не зафиксирована (Enter, клик мимо или смена инструмента). Контур и заливка независимо переключаются между сплошным цветом и фактурами мелка, маркера, масла, карандаша и акварели.

Выделение — прямоугольное и произвольное, перемещение, масштабирование за маркеры, вырезание, копирование, вставка (в том числе из файла), удаление, обрезка по выделению, обратить выделение, прозрачное выделение (Цвет 2 становится прозрачным), повороты и отражения только выделенной области.

Слои — панель справа (кнопка «Слои» в ленте или Ctrl+L): добавление, дублирование, удаление, перемещение по стопке, объединение с нижним и включение видимости. Инструменты рисуют в активный слой, на экран и в файл идёт склейка видимых. Прозрачные места показываются шахматкой. Слои живут только в текущем сеансе: обычные растровые форматы их не хранят, при сохранении картинка сводится в одно изображение.

Изображение — изменение размера в процентах или пикселях с сохранением пропорций, наклон по обеим осям, повороты на 90/180/270°, отражения, обращение цветов, свойства холста в пикселях, сантиметрах или дюймах. Размер холста меняется и мышью — за маркеры на правом и нижнем краях листа.

Файлы — PNG, JPEG, BMP, GIF, TIFF, WebP и всё остальное, что поддерживает сборка Qt. Есть печать, список последних файлов, открытие перетаскиванием.

Вид — масштаб от 12,5 % до 3200 % (ползунок в строке состояния, Ctrl+колесо удерживает точку под курсором), линейки, попиксельная сетка на крупном масштабе, полноэкранный режим, светлая и тёмная темы.

Горячие клавиши

Клавиши Действие
Ctrl+N / Ctrl+O / Ctrl+S Создать / открыть / сохранить
Ctrl+Shift+S / Ctrl+P Сохранить как / печать
Ctrl+Z / Ctrl+Y Отменить / вернуть
Ctrl+X / Ctrl+C / Ctrl+V Вырезать / копировать / вставить
Ctrl+A / Ctrl+Shift+A Выделить всё / обратить выделение
Ctrl+Shift+X / Ctrl+W Обрезать / изменить размер и наклон
Ctrl+Shift+I / Ctrl+Shift+N Обратить цвета / очистить холст
Ctrl++ / Ctrl+- / Ctrl+0 / Ctrl+9 Масштаб: больше, меньше, 100 %, по окну
Ctrl+R / Ctrl+G / F11 Линейки / сетка / во весь экран
P B F T E K M S Карандаш, кисть, заливка, текст, ластик, пипетка, лупа, выделение
Esc / Enter Отменить / зафиксировать построение
Стрелки Сдвинуть выделение на пиксель (с Ctrl — на 10)

Во всех инструментах левая кнопка мыши рисует Цветом 1, правая — Цветом 2. Shift держит линию под углом, кратным 45°, а прочие фигуры делает правильными (круг, квадрат).

Устройство

Файл Назначение
src/Document.* Изображение, история отмен, операции над холстом, заливка
src/Canvas.* Виджет холста: масштаб, выделение, ввод мышью
src/tools/Tool.* Базовый инструмент и общая механика штрихов и фактур
src/tools/PaintTools.* Карандаш, кисти, ластик, заливка, пипетка, лупа
src/tools/ShapeTool.* Фигуры и их редактирование маркерами
src/tools/SelectTool.* Прямоугольное и произвольное выделение
src/tools/TextTool.* Ввод текста поверх холста
src/Ribbon.*, src/ColorArea.* Лента, галереи, палитра
src/Icons.* Значки, рисуемые кодом (бинарных ресурсов в проекте нет)
src/Theme.* Светлое и тёмное оформление
src/MainWindow.* Сборка окна, меню, действия, линейки, строка состояния

Лицензия

GNU General Public License, версия 3 или новее — полный текст в файле LICENSE. Брать код можно кому угодно и на что угодно, но с двумя условиями.

Исходники производной работы должны быть открыты под той же лицензией. Это суть GPL: программа остаётся свободной у всех, кто её продолжит.

Изменённые сборки должны быть помечены как изменённые и не выдаваться за официальные. Это дополнительное условие по разделу 7(c) лицензии; имена InoMotion и LinuxPaint и логотип проекта на изменённые версии не распространяются. Форкать можно свободно — просто дай форку своё имя.

Значки взяты из набора Fluent UI System Icons корпорации Microsoft под лицензией MIT. Её текст и остальные сторонние составляющие — в файле NOTICE.

About

LinuxPaint is a program for drawing and editing files on Linux (AppImage)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages