1 // Aseprite 2 // Copyright (C) 2001-2018 David Capello 3 // 4 // This program is distributed under the terms of 5 // the End-User License Agreement for Aseprite. 6 7 #ifndef APP_DOC_RANGE_H_INCLUDED 8 #define APP_DOC_RANGE_H_INCLUDED 9 #pragma once 10 11 #include "doc/frame.h" 12 #include "doc/selected_frames.h" 13 #include "doc/selected_layers.h" 14 15 #include <iosfwd> 16 17 namespace doc { 18 class Cel; 19 class Sprite; 20 } 21 22 namespace app { 23 using namespace doc; 24 25 class DocRange { 26 public: 27 enum Type { kNone = 0, 28 kCels = 1, 29 kFrames = 2, 30 kLayers = 4 }; 31 32 DocRange(); 33 DocRange(Cel* cel); 34 type()35 Type type() const { return m_type; } enabled()36 bool enabled() const { return m_type != kNone; } layers()37 layer_t layers() const { return int(m_selectedLayers.size()); } frames()38 frame_t frames() const { return int(m_selectedFrames.size()); } selectedLayers()39 const SelectedLayers& selectedLayers() const { return m_selectedLayers; } selectedFrames()40 const SelectedFrames& selectedFrames() const { return m_selectedFrames; } 41 42 void displace(layer_t layerDelta, frame_t frameDelta); 43 44 bool contains(const Layer* layer) const; contains(const frame_t frame)45 bool contains(const frame_t frame) const { 46 return m_selectedFrames.contains(frame); 47 } 48 bool contains(const Layer* layer, 49 const frame_t frame) const; 50 51 void clearRange(); 52 void startRange(Layer* fromLayer, frame_t fromFrame, Type type); 53 void endRange(Layer* toLayer, frame_t toFrame); 54 55 void selectLayer(Layer* layer); 56 void selectLayers(const SelectedLayers& selLayers); 57 firstFrame()58 frame_t firstFrame() const { return m_selectedFrames.firstFrame(); } lastFrame()59 frame_t lastFrame() const { return m_selectedFrames.lastFrame(); } 60 61 bool operator==(const DocRange& o) const { 62 return (m_type == o.m_type && 63 m_selectedLayers == o.m_selectedLayers && 64 m_selectedFrames == o.m_selectedFrames); 65 } 66 67 bool convertToCels(const Sprite* sprite); 68 69 bool write(std::ostream& os) const; 70 bool read(std::istream& is); 71 72 private: 73 void selectLayerRange(Layer* fromLayer, Layer* toLayer); 74 void selectFrameRange(frame_t fromFrame, frame_t toFrame); 75 76 Type m_type; // Last used type of the range 77 int m_flags; // All used types in startRange() 78 SelectedLayers m_selectedLayers; 79 SelectedFrames m_selectedFrames; 80 Layer* m_selectingFromLayer; 81 frame_t m_selectingFromFrame; 82 }; 83 84 } // namespace app 85 86 #endif 87