void StateBrush_Context::refresh_tool_options() { brush_buttons.clear(); App::dialog_tool_options->clear(); App::dialog_tool_options->set_local_name(_("Brush Tool")); App::dialog_tool_options->set_name("brush"); // create the brush options container Gtk::Grid *brush_option_grid= Gtk::manage(new Gtk::Grid()); brush_option_grid->set_orientation(Gtk::ORIENTATION_VERTICAL); // add options brush_option_grid->add(eraser_checkbox); // create brushes scrollable palette Gtk::ToolItemGroup *tool_item_group = manage(new class Gtk::ToolItemGroup()); gtk_tool_item_group_set_label(tool_item_group->gobj(), NULL); Gtk::ToolPalette *palette = manage(new Gtk::ToolPalette()); palette->add(*tool_item_group); palette->set_expand(*tool_item_group); palette->set_exclusive(*tool_item_group, true); palette->set_icon_size(Gtk::IconSize(BRUSH_ICON_SIZE)); // let the palette propagate the scroll events palette->add_events(Gdk::SCROLL_MASK); Gtk::ScrolledWindow *brushes_scroll = manage(new Gtk::ScrolledWindow()); brushes_scroll->set_hexpand(true); brushes_scroll->set_vexpand(true); brushes_scroll->add(*palette); // load brushes files definition // scan directories std::set<String> files; for(std::set<String>::const_iterator i = App::brushes_path.begin(); i != App::brushes_path.end(); ++i) scan_directory(*i, 1, files); // run through brush definition and assign a button Gtk::ToggleToolButton *first_button = NULL; for(std::set<String>::const_iterator i = files.begin(); i != files.end(); ++i) { if (!brush_buttons.count(*i) && filename_extension(*i) == ".myb") { const String &brush_file = *i; const String icon_file = filename_sans_extension(brush_file) + "_prev.png"; if (files.count(icon_file)) { // create a single brush button Gtk::ToggleToolButton *brush_button = brush_buttons[*i] = (new class Gtk::ToggleToolButton()); Glib::RefPtr<Gdk::Pixbuf> pixbuf, pixbuf_scaled; pixbuf = Gdk::Pixbuf::create_from_file(icon_file); pixbuf_scaled = pixbuf->scale_simple(BRUSH_ICON_SIZE, BRUSH_ICON_SIZE, Gdk::INTERP_BILINEAR); brush_button->set_icon_widget(*Gtk::manage(new Gtk::Image(pixbuf_scaled))); brush_button->set_halign(Gtk::ALIGN_CENTER); // connect the button click event and brush file definition brush_button->signal_clicked().connect( sigc::bind(sigc::mem_fun(*this, &StateBrush_Context::select_brush), brush_button, brush_file) ); // add the button to the palette tool_item_group->insert(*brush_button); // keep the first brush if (first_button == NULL) first_button = brush_button; } } } brush_option_grid->add(*brushes_scroll); brush_option_grid->show_all(); App::dialog_tool_options->add(*brush_option_grid); // select first brush if (first_button != NULL) { first_button->set_active(true); selected_brush_button = first_button; } }
Dock_Toolbox::Dock_Toolbox(): Dockable("toolbox",_("Toolbox"),Gtk::StockID("synfig-about")) { set_use_scrolled(false); set_size_request(-1,-1); tool_item_group = manage(new class Gtk::ToolItemGroup()); gtk_tool_item_group_set_label(tool_item_group->gobj(), NULL); Gtk::ToolPalette *palette = manage(new Gtk::ToolPalette()); palette->add(*tool_item_group); palette->set_expand(*tool_item_group); palette->set_exclusive(*tool_item_group, true); palette->set_icon_size(Gtk::IconSize::from_name("synfig-small_icon_16x16")); // let the palette propagate the scroll events palette->add_events(Gdk::SCROLL_MASK); palette->show(); Gtk::ScrolledWindow *scrolled_window = manage(new Gtk::ScrolledWindow()); scrolled_window->add(*palette); scrolled_window->set_border_width(2); scrolled_window->show(); separator = manage(new class Gtk::HSeparator()); Widget_Defaults* widget_defaults(manage(new Widget_Defaults())); // pack tools and default widgets //tool_box = manage(new class Gtk::VBox(false, 2)); //tool_box->pack_start(*scrolled_window, Gtk::PACK_EXPAND_WIDGET|Gtk::PACK_SHRINK, 3); //tool_box->pack_start(*separator, Gtk::PACK_SHRINK, 3); //tool_box->pack_start(*widget_defaults, Gtk::PACK_EXPAND_WIDGET|Gtk::PACK_SHRINK, 3); //tool_box->set_border_width(2); //tool_box->show_all(); //add(*tool_box); Gtk::VPaned *tool_box_paned = manage(new class Gtk::VPaned()); tool_box_paned->pack1(*scrolled_window, Gtk::PACK_EXPAND_WIDGET|Gtk::PACK_SHRINK, 3); tool_box_paned->pack2(*widget_defaults, Gtk::PACK_EXPAND_WIDGET|Gtk::PACK_SHRINK, 3); tool_box_paned->set_position(200); tool_box_paned->show_all(); add(*tool_box_paned); App::signal_instance_selected().connect( sigc::hide( sigc::mem_fun(*this,&studio::Dock_Toolbox::update_tools) ) ); std::vector<Gtk::TargetEntry> listTargets; listTargets.push_back( Gtk::TargetEntry("text/plain") ); listTargets.push_back( Gtk::TargetEntry("image") ); // listTargets.push_back( Gtk::TargetEntry("image/x-sif") ); drag_dest_set(listTargets); signal_drag_data_received().connect( sigc::mem_fun(*this, &studio::Dock_Toolbox::on_drop_drag_data_received) ); changing_state_=false; App::signal_present_all().connect(sigc::mem_fun0(*this,&Dock_Toolbox::present)); }