// Swift's SelectionEdits extension: fills, clears, moves and inverts. public: // The outline the canvas draws. std::optional displayedSelection() const; enum class FillSource { foreground, background }; bool canEditPixels() const; void fillSelection(FillSource source, std::function done = {}); void clearSelectedPixels(std::function done = {}); void deleteKeyPressed(); // Swift's PixelMove: Ctrl-drag and Ctrl-arrow move selected pixels. bool beginPixelMove(bool duplicate = false); void movePixels(QSizeF offset); void finishPixelMove(std::function done = {}); void cancelPixelMove(); void nudgePixels(double dx, double dy, std::function done = {}); void deleteLayerOrMask(); bool canInvert() const; // Off the UI thread; `done` follows the step or refusal. void invertPixels(std::function done = {}); private: void finishInvert(); void applyPixelEdit(const ImageLayer &layer, const QString &name, const std::function &paint, std::function done);