OmaPhoto 1.0.0: the Linux port of Compositor
Release / deb (push) Canceled after 0s
Release / rpm (push) Canceled after 0s
Release / arch (push) Canceled after 0s
Release / publish (push) Canceled after 0s

A layered image editor for Linux and Omarchy, ported from Compositor
(github.com/robbietilton/Compositor), whose Swift source is its
specification. It reads and writes Compositor's .comp projects.

Packages for Ubuntu, Fedora and Arch come from the release workflow;
scripts/install/ holds one install script per distribution family,
and flake.nix serves NixOS.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
雷电芽衣andClaude committed 2026-09-26 00:44:52 -04:00
commit c864304695
564 files changed
+100804

No files matched your search

+73
View File
@@ -0,0 +1,73 @@
#pragma once
#include "Document/ProjectWorkspace.h"
#include <QScrollArea>
#include <QToolButton>
#include <QWidget>
// One tab: its title, the unsaved dot, its close button.
class ProjectTabButton : public QWidget {
Q_OBJECT
public:
ProjectTabButton(ProjectWorkspace &workspace, std::shared_ptr<ProjectTab> tab, QWidget *parent = nullptr);
const std::shared_ptr<ProjectTab> tab;
// What the session and the workspace hold, shown.
void synchronize();
bool isActive() const;
protected:
void paintEvent(QPaintEvent *event) override;
void dragEnterEvent(QDragEnterEvent *event) override;
void dragMoveEvent(QDragMoveEvent *event) override;
void dragLeaveEvent(QDragLeaveEvent *event) override;
void dropEvent(QDropEvent *event) override;
private:
bool acceptsDrop(const QMimeData &data) const;
void setTargeted(bool targeted);
ProjectWorkspace &m_workspace;
QToolButton *const m_select;
QToolButton *const m_close;
bool m_targeted = false;
};
// Swift's NewProjectDropTarget: the New canvas button takes drops.
class NewCanvasButton : public QToolButton {
Q_OBJECT
public:
explicit NewCanvasButton(ProjectWorkspace &workspace, QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent *event) override;
void dragEnterEvent(QDragEnterEvent *event) override;
void dragMoveEvent(QDragMoveEvent *event) override;
void dragLeaveEvent(QDragLeaveEvent *event) override;
void dropEvent(QDropEvent *event) override;
private:
bool acceptsDrop(const QMimeData &data) const;
void setTargeted(bool targeted);
ProjectWorkspace &m_workspace;
bool m_targeted = false;
};
// The row of tabs, one a project, scrolling when long.
class ProjectTabStrip : public QScrollArea {
Q_OBJECT
public:
explicit ProjectTabStrip(ProjectWorkspace &workspace, QWidget *parent = nullptr);
QList<ProjectTabButton *> buttons() const;
protected:
bool eventFilter(QObject *watched, QEvent *event) override;
private:
void synchronize();
void showFront();
ProjectWorkspace &m_workspace;
QWidget *const m_row;
};