/* Flow Box * * Gtk::FlowBox allows flexible and responsive grids which reflow * as needed and support sorting and filtering. * * The children of a FlowBox are regular widgets */ #include class Example_FlowBox : public Gtk::Window { public: Example_FlowBox(); ~Example_FlowBox() override; protected: //Signal handlers: bool on_drawing_area_draw(const Cairo::RefPtr& cr, int swatch_i); // Containers Gtk::ScrolledWindow m_scrolled_window; Gtk::FlowBox m_flow_box; private: void fill_color_names(); Gtk::Button* create_color_swatch(int swatch_i); std::vector m_color_names; }; //Called by DemoWindow; Gtk::Window* do_flowbox() { return new Example_FlowBox(); } Example_FlowBox::Example_FlowBox() { // Window properties set_title("FlowBox Example"); set_default_size(600, 400); set_border_width(6); // Scrolled window m_scrolled_window.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); // Flow box m_flow_box.set_max_children_per_line(30); m_flow_box.set_selection_mode(Gtk::SELECTION_NONE); m_flow_box.set_homogeneous(); // Color swatches fill_color_names(); for(std::size_t i = 0; i != m_color_names.size(); ++i) { Gtk::Button* color_swatch = create_color_swatch(i); m_flow_box.add(*color_swatch); } // Layout m_scrolled_window.add(m_flow_box); add(m_scrolled_window); show_all_children(); } Example_FlowBox::~Example_FlowBox() { } Gtk::Button* Example_FlowBox::create_color_swatch(int swatch_i) { Gtk::DrawingArea* drawing_area = Gtk::make_managed(); Gtk::Button* color_swatch = Gtk::make_managed(); drawing_area->set_size_request(24, 24); color_swatch->add(*drawing_area); drawing_area->signal_draw().connect(sigc::bind(sigc::mem_fun(*this, &Example_FlowBox::on_drawing_area_draw), swatch_i)); return color_swatch; } bool Example_FlowBox::on_drawing_area_draw(const Cairo::RefPtr& cr, int swatch_i) { Gdk::RGBA rgba(m_color_names[swatch_i]); Gdk::Cairo::set_source_rgba(cr, rgba); cr->paint(); return true; } void Example_FlowBox::fill_color_names() { m_color_names.push_back("AliceBlue"); m_color_names.push_back("AntiqueWhite"); m_color_names.push_back("AntiqueWhite1"); m_color_names.push_back("AntiqueWhite2"); m_color_names.push_back("AntiqueWhite3"); m_color_names.push_back("AntiqueWhite4"); m_color_names.push_back("aqua"); m_color_names.push_back("aquamarine"); m_color_names.push_back("aquamarine1"); m_color_names.push_back("aquamarine2"); m_color_names.push_back("aquamarine3"); m_color_names.push_back("aquamarine4"); m_color_names.push_back("azure"); m_color_names.push_back("azure1"); m_color_names.push_back("azure2"); m_color_names.push_back("azure3"); m_color_names.push_back("azure4"); m_color_names.push_back("beige"); m_color_names.push_back("bisque"); m_color_names.push_back("bisque1"); m_color_names.push_back("bisque2"); m_color_names.push_back("bisque3"); m_color_names.push_back("bisque4"); m_color_names.push_back("black"); m_color_names.push_back("BlanchedAlmond"); m_color_names.push_back("blue"); m_color_names.push_back("blue1"); m_color_names.push_back("blue2"); m_color_names.push_back("blue3"); m_color_names.push_back("blue4"); m_color_names.push_back("BlueViolet"); m_color_names.push_back("brown"); m_color_names.push_back("brown1"); m_color_names.push_back("brown2"); m_color_names.push_back("brown3"); m_color_names.push_back("brown4"); m_color_names.push_back("burlywood"); m_color_names.push_back("burlywood1"); m_color_names.push_back("burlywood2"); m_color_names.push_back("burlywood3"); m_color_names.push_back("burlywood4"); m_color_names.push_back("CadetBlue"); m_color_names.push_back("CadetBlue1"); m_color_names.push_back("CadetBlue2"); m_color_names.push_back("CadetBlue3"); m_color_names.push_back("CadetBlue4"); m_color_names.push_back("chartreuse"); m_color_names.push_back("chartreuse1"); m_color_names.push_back("chartreuse2"); m_color_names.push_back("chartreuse3"); m_color_names.push_back("chartreuse4"); m_color_names.push_back("chocolate"); m_color_names.push_back("chocolate1"); m_color_names.push_back("chocolate2"); m_color_names.push_back("chocolate3"); m_color_names.push_back("chocolate4"); m_color_names.push_back("coral"); m_color_names.push_back("coral1"); m_color_names.push_back("coral2"); m_color_names.push_back("coral3"); m_color_names.push_back("coral4"); m_color_names.push_back("CornflowerBlue"); m_color_names.push_back("cornsilk"); m_color_names.push_back("cornsilk1"); m_color_names.push_back("cornsilk2"); m_color_names.push_back("cornsilk3"); m_color_names.push_back("cornsilk4"); m_color_names.push_back("crimson"); m_color_names.push_back("cyan"); m_color_names.push_back("cyan1"); m_color_names.push_back("cyan2"); m_color_names.push_back("cyan3"); m_color_names.push_back("cyan4"); m_color_names.push_back("DarkBlue"); m_color_names.push_back("DarkCyan"); m_color_names.push_back("DarkGoldenrod"); m_color_names.push_back("DarkGoldenrod1"); m_color_names.push_back("DarkGoldenrod2"); m_color_names.push_back("DarkGoldenrod3"); m_color_names.push_back("DarkGoldenrod4"); m_color_names.push_back("DarkGray"); m_color_names.push_back("DarkGreen"); m_color_names.push_back("DarkGrey"); m_color_names.push_back("DarkKhaki"); m_color_names.push_back("DarkMagenta"); m_color_names.push_back("DarkOliveGreen"); m_color_names.push_back("DarkOliveGreen1"); m_color_names.push_back("DarkOliveGreen2"); m_color_names.push_back("DarkOliveGreen3"); m_color_names.push_back("DarkOliveGreen4"); m_color_names.push_back("DarkOrange"); m_color_names.push_back("DarkOrange1"); m_color_names.push_back("DarkOrange2"); m_color_names.push_back("DarkOrange3"); m_color_names.push_back("DarkOrange4"); m_color_names.push_back("DarkOrchid"); m_color_names.push_back("DarkOrchid1"); m_color_names.push_back("DarkOrchid2"); m_color_names.push_back("DarkOrchid3"); m_color_names.push_back("DarkOrchid4"); m_color_names.push_back("DarkRed"); m_color_names.push_back("DarkSalmon"); m_color_names.push_back("DarkSeaGreen"); m_color_names.push_back("DarkSeaGreen1"); }