1 // Aseprite Document Library 2 // Copyright (c) 2001-2017 David Capello 3 // 4 // This file is released under the terms of the MIT license. 5 // Read LICENSE.txt for more information. 6 7 #ifndef DOC_PALETTE_PICKS_H_INCLUDED 8 #define DOC_PALETTE_PICKS_H_INCLUDED 9 #pragma once 10 11 #include <algorithm> 12 #include <vector> 13 14 namespace doc { 15 16 class PalettePicks { 17 public: 18 typedef std::vector<bool> list_type; 19 typedef list_type::iterator iterator; 20 typedef list_type::const_iterator const_iterator; 21 typedef list_type::reference reference; 22 typedef list_type::const_reference const_reference; 23 PalettePicks()24 PalettePicks() { } PalettePicks(int n)25 PalettePicks(int n) : m_items(n, false) { } 26 size()27 int size() const { return int(m_items.size()); } picks()28 int picks() const { return (int)std::count(m_items.begin(), m_items.end(), true); } 29 begin()30 iterator begin() { return m_items.begin(); } end()31 iterator end() { return m_items.end(); } 32 begin()33 const_iterator begin() const { return m_items.begin(); } end()34 const_iterator end() const { return m_items.end(); } 35 36 const_reference operator[](int idx) const { return m_items[idx]; } 37 reference operator[](int idx) { return m_items[idx]; } 38 resize(int n)39 void resize(int n) { 40 m_items.resize(n, false); 41 } 42 clear()43 void clear() { 44 std::fill(m_items.begin(), m_items.end(), false); 45 } 46 all()47 void all() { 48 std::fill(m_items.begin(), m_items.end(), true); 49 } 50 51 // If there is just one selected color (or none), we select them all. pickAllIfNeeded()52 void pickAllIfNeeded() { 53 if (picks() < 2) 54 all(); 55 } 56 firstPick()57 int firstPick() const { 58 for (int i=0; i<size(); ++i) 59 if (m_items[i]) 60 return i; 61 return -1; 62 } 63 lastPick()64 int lastPick() const { 65 for (int i=size()-1; i>=0; --i) 66 if (m_items[i]) 67 return i; 68 return -1; 69 } 70 71 private: 72 list_type m_items; 73 }; 74 75 } // namespace doc 76 77 #endif 78