1 /* Flow Box 2 * 3 * Gtk::FlowBox allows flexible and responsive grids which reflow 4 * as needed and support sorting and filtering. 5 * 6 * The children of a FlowBox are regular widgets 7 */ 8 9 #include <gtkmm.h> 10 11 class Example_FlowBox : public Gtk::Window 12 { 13 public: 14 Example_FlowBox(); 15 ~Example_FlowBox() override; 16 17 protected: 18 //Signal handlers: 19 bool on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr, int swatch_i); 20 21 // Containers 22 Gtk::ScrolledWindow m_scrolled_window; 23 Gtk::FlowBox m_flow_box; 24 25 private: 26 void fill_color_names(); 27 Gtk::Button* create_color_swatch(int swatch_i); 28 29 std::vector<Glib::ustring> m_color_names; 30 }; 31 32 //Called by DemoWindow; do_flowbox()33Gtk::Window* do_flowbox() 34 { 35 return new Example_FlowBox(); 36 } 37 Example_FlowBox()38Example_FlowBox::Example_FlowBox() 39 { 40 // Window properties 41 set_title("FlowBox Example"); 42 set_default_size(600, 400); 43 set_border_width(6); 44 45 // Scrolled window 46 m_scrolled_window.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); 47 48 // Flow box 49 m_flow_box.set_max_children_per_line(30); 50 m_flow_box.set_selection_mode(Gtk::SELECTION_NONE); 51 m_flow_box.set_homogeneous(); 52 53 // Color swatches 54 fill_color_names(); 55 for(std::size_t i = 0; i != m_color_names.size(); ++i) 56 { 57 Gtk::Button* color_swatch = create_color_swatch(i); 58 m_flow_box.add(*color_swatch); 59 } 60 61 // Layout 62 m_scrolled_window.add(m_flow_box); 63 add(m_scrolled_window); 64 65 show_all_children(); 66 } 67 ~Example_FlowBox()68Example_FlowBox::~Example_FlowBox() 69 { 70 } 71 create_color_swatch(int swatch_i)72Gtk::Button* Example_FlowBox::create_color_swatch(int swatch_i) 73 { 74 Gtk::DrawingArea* drawing_area = Gtk::make_managed<Gtk::DrawingArea>(); 75 Gtk::Button* color_swatch = Gtk::make_managed<Gtk::Button>(); 76 77 drawing_area->set_size_request(24, 24); 78 79 color_swatch->add(*drawing_area); 80 drawing_area->signal_draw().connect(sigc::bind(sigc::mem_fun(*this, &Example_FlowBox::on_drawing_area_draw), swatch_i)); 81 82 return color_swatch; 83 } 84 on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context> & cr,int swatch_i)85bool Example_FlowBox::on_drawing_area_draw(const Cairo::RefPtr<Cairo::Context>& cr, int swatch_i) 86 { 87 Gdk::RGBA rgba(m_color_names[swatch_i]); 88 Gdk::Cairo::set_source_rgba(cr, rgba); 89 cr->paint(); 90 91 return true; 92 } 93 fill_color_names()94void Example_FlowBox::fill_color_names() 95 { 96 m_color_names.push_back("AliceBlue"); 97 m_color_names.push_back("AntiqueWhite"); 98 m_color_names.push_back("AntiqueWhite1"); 99 m_color_names.push_back("AntiqueWhite2"); 100 m_color_names.push_back("AntiqueWhite3"); 101 m_color_names.push_back("AntiqueWhite4"); 102 m_color_names.push_back("aqua"); 103 m_color_names.push_back("aquamarine"); 104 m_color_names.push_back("aquamarine1"); 105 m_color_names.push_back("aquamarine2"); 106 m_color_names.push_back("aquamarine3"); 107 m_color_names.push_back("aquamarine4"); 108 m_color_names.push_back("azure"); 109 m_color_names.push_back("azure1"); 110 m_color_names.push_back("azure2"); 111 m_color_names.push_back("azure3"); 112 m_color_names.push_back("azure4"); 113 m_color_names.push_back("beige"); 114 m_color_names.push_back("bisque"); 115 m_color_names.push_back("bisque1"); 116 m_color_names.push_back("bisque2"); 117 m_color_names.push_back("bisque3"); 118 m_color_names.push_back("bisque4"); 119 m_color_names.push_back("black"); 120 m_color_names.push_back("BlanchedAlmond"); 121 m_color_names.push_back("blue"); 122 m_color_names.push_back("blue1"); 123 m_color_names.push_back("blue2"); 124 m_color_names.push_back("blue3"); 125 m_color_names.push_back("blue4"); 126 m_color_names.push_back("BlueViolet"); 127 m_color_names.push_back("brown"); 128 m_color_names.push_back("brown1"); 129 m_color_names.push_back("brown2"); 130 m_color_names.push_back("brown3"); 131 m_color_names.push_back("brown4"); 132 m_color_names.push_back("burlywood"); 133 m_color_names.push_back("burlywood1"); 134 m_color_names.push_back("burlywood2"); 135 m_color_names.push_back("burlywood3"); 136 m_color_names.push_back("burlywood4"); 137 m_color_names.push_back("CadetBlue"); 138 m_color_names.push_back("CadetBlue1"); 139 m_color_names.push_back("CadetBlue2"); 140 m_color_names.push_back("CadetBlue3"); 141 m_color_names.push_back("CadetBlue4"); 142 m_color_names.push_back("chartreuse"); 143 m_color_names.push_back("chartreuse1"); 144 m_color_names.push_back("chartreuse2"); 145 m_color_names.push_back("chartreuse3"); 146 m_color_names.push_back("chartreuse4"); 147 m_color_names.push_back("chocolate"); 148 m_color_names.push_back("chocolate1"); 149 m_color_names.push_back("chocolate2"); 150 m_color_names.push_back("chocolate3"); 151 m_color_names.push_back("chocolate4"); 152 m_color_names.push_back("coral"); 153 m_color_names.push_back("coral1"); 154 m_color_names.push_back("coral2"); 155 m_color_names.push_back("coral3"); 156 m_color_names.push_back("coral4"); 157 m_color_names.push_back("CornflowerBlue"); 158 m_color_names.push_back("cornsilk"); 159 m_color_names.push_back("cornsilk1"); 160 m_color_names.push_back("cornsilk2"); 161 m_color_names.push_back("cornsilk3"); 162 m_color_names.push_back("cornsilk4"); 163 m_color_names.push_back("crimson"); 164 m_color_names.push_back("cyan"); 165 m_color_names.push_back("cyan1"); 166 m_color_names.push_back("cyan2"); 167 m_color_names.push_back("cyan3"); 168 m_color_names.push_back("cyan4"); 169 m_color_names.push_back("DarkBlue"); 170 m_color_names.push_back("DarkCyan"); 171 m_color_names.push_back("DarkGoldenrod"); 172 m_color_names.push_back("DarkGoldenrod1"); 173 m_color_names.push_back("DarkGoldenrod2"); 174 m_color_names.push_back("DarkGoldenrod3"); 175 m_color_names.push_back("DarkGoldenrod4"); 176 m_color_names.push_back("DarkGray"); 177 m_color_names.push_back("DarkGreen"); 178 m_color_names.push_back("DarkGrey"); 179 m_color_names.push_back("DarkKhaki"); 180 m_color_names.push_back("DarkMagenta"); 181 m_color_names.push_back("DarkOliveGreen"); 182 m_color_names.push_back("DarkOliveGreen1"); 183 m_color_names.push_back("DarkOliveGreen2"); 184 m_color_names.push_back("DarkOliveGreen3"); 185 m_color_names.push_back("DarkOliveGreen4"); 186 m_color_names.push_back("DarkOrange"); 187 m_color_names.push_back("DarkOrange1"); 188 m_color_names.push_back("DarkOrange2"); 189 m_color_names.push_back("DarkOrange3"); 190 m_color_names.push_back("DarkOrange4"); 191 m_color_names.push_back("DarkOrchid"); 192 m_color_names.push_back("DarkOrchid1"); 193 m_color_names.push_back("DarkOrchid2"); 194 m_color_names.push_back("DarkOrchid3"); 195 m_color_names.push_back("DarkOrchid4"); 196 m_color_names.push_back("DarkRed"); 197 m_color_names.push_back("DarkSalmon"); 198 m_color_names.push_back("DarkSeaGreen"); 199 m_color_names.push_back("DarkSeaGreen1"); 200 } 201