Files
OmaPhoto/src/Document/Crop.h
T
雷电芽衣andClaude c864304695
Release / deb (push) Canceled after 0s
Release / rpm (push) Canceled after 0s
Release / arch (push) Canceled after 0s
Release / publish (push) Canceled after 0s
OmaPhoto 1.0.0: the Linux port of Compositor
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>
2026-09-26 00:44:52 -04:00

37 lines
1.1 KiB
C++

#pragma once
#include "Document/LayerTransform.h"
#include <QRectF>
#include <optional>
#include <vector>
// Swift's CropGeometry: frames on whole pixels, within Swift's bounds.
namespace CropGeometry {
QRectF snapped(const QRectF &rect);
bool valid(const QRectF &rect);
// From `start` to `end`, or out from `start` when symmetric.
QRectF create(QPointF start, QPointF end, std::optional<double> ratio, bool symmetric = false);
}
// Swift's CropDrag: a frame being made, moved or resized.
struct CropDrag {
enum class Kind { create, move, resize };
struct Mode {
Kind kind;
int index = 0;
};
QPointF start;
QRectF original;
Mode mode;
// Symmetric (Alt) keeps the frame's middle still.
QRectF updated(QPointF point, std::optional<double> ratio, bool symmetric = false) const;
};
// Swift's CropSnap: dragged edges drawn to nearby edges.
struct CropSnap {
std::vector<double> xs;
std::vector<double> ys;
// In document pixels.
double tolerance;
QRectF apply(QRectF rect, const CropDrag &drag, QPointF point, std::optional<double> ratio, bool symmetric = false) const;
};