Mask* MaskByColorCommand::generateMask(const Sprite* sprite, const Image* image, int xpos, int ypos) { int color, tolerance; color = color_utils::color_for_image(m_buttonColor->getColor(), sprite->pixelFormat()); tolerance = m_sliderTolerance->getValue(); base::UniquePtr<Mask> mask(new Mask()); mask->byColor(image, color, tolerance); mask->offsetOrigin(xpos, ypos); return mask.release(); }
void OptionsCommand::onExecute(Context* context) { // Load the window widget UniquePtr<Window> window(app::load_widget<Window>("options.xml", "options")); Widget* check_smooth = app::find_widget<Widget>(window, "smooth"); Widget* move_click2 = app::find_widget<Widget>(window, "move_click2"); Widget* draw_click2 = app::find_widget<Widget>(window, "draw_click2"); Widget* cursor_color_box = app::find_widget<Widget>(window, "cursor_color_box"); Widget* grid_color_box = app::find_widget<Widget>(window, "grid_color_box"); Widget* pixel_grid_color_box = app::find_widget<Widget>(window, "pixel_grid_color_box"); m_checked_bg = app::find_widget<ComboBox>(window, "checked_bg_size"); m_checked_bg_zoom = app::find_widget<Widget>(window, "checked_bg_zoom"); Widget* checked_bg_color1_box = app::find_widget<Widget>(window, "checked_bg_color1_box"); Widget* checked_bg_color2_box = app::find_widget<Widget>(window, "checked_bg_color2_box"); Button* checked_bg_reset = app::find_widget<Button>(window, "checked_bg_reset"); Widget* undo_size_limit = app::find_widget<Widget>(window, "undo_size_limit"); Widget* undo_goto_modified = app::find_widget<Widget>(window, "undo_goto_modified"); Widget* button_ok = app::find_widget<Widget>(window, "button_ok"); // Cursor color ColorButton* cursor_color = new ColorButton(Editor::get_cursor_color(), IMAGE_RGB); cursor_color->setId("cursor_color"); cursor_color_box->addChild(cursor_color); // Get global settings for documents IDocumentSettings* docSettings = context->getSettings()->getDocumentSettings(NULL); // Grid color ColorButton* grid_color = new ColorButton(docSettings->getGridColor(), IMAGE_RGB); grid_color->setId("grid_color"); grid_color_box->addChild(grid_color); // Pixel grid color ColorButton* pixel_grid_color = new ColorButton(docSettings->getPixelGridColor(), IMAGE_RGB); pixel_grid_color->setId("pixel_grid_color"); pixel_grid_color_box->addChild(pixel_grid_color); // Others if (get_config_bool("Options", "MoveClick2", false)) move_click2->setSelected(true); if (get_config_bool("Options", "DrawClick2", false)) draw_click2->setSelected(true); if (get_config_bool("Options", "MoveSmooth", true)) check_smooth->setSelected(true); // Checked background size m_checked_bg->addItem("16x16"); m_checked_bg->addItem("8x8"); m_checked_bg->addItem("4x4"); m_checked_bg->addItem("2x2"); m_checked_bg->setSelectedItem((int)RenderEngine::getCheckedBgType()); // Zoom checked background if (RenderEngine::getCheckedBgZoom()) m_checked_bg_zoom->setSelected(true); // Checked background colors m_checked_bg_color1 = new ColorButton(RenderEngine::getCheckedBgColor1(), IMAGE_RGB); m_checked_bg_color2 = new ColorButton(RenderEngine::getCheckedBgColor2(), IMAGE_RGB); checked_bg_color1_box->addChild(m_checked_bg_color1); checked_bg_color2_box->addChild(m_checked_bg_color2); // Reset button checked_bg_reset->Click.connect(Bind<void>(&OptionsCommand::onResetCheckedBg, this)); // Undo limit undo_size_limit->setTextf("%d", get_config_int("Options", "UndoSizeLimit", 8)); // Goto modified frame/layer on undo/redo if (get_config_bool("Options", "UndoGotoModified", true)) undo_goto_modified->setSelected(true); // Show the window and wait the user to close it window->openWindowInForeground(); if (window->getKiller() == button_ok) { int undo_size_limit_value; Editor::set_cursor_color(cursor_color->getColor()); docSettings->setGridColor(grid_color->getColor()); docSettings->setPixelGridColor(pixel_grid_color->getColor()); set_config_bool("Options", "MoveSmooth", check_smooth->isSelected()); set_config_bool("Options", "MoveClick2", move_click2->isSelected()); set_config_bool("Options", "DrawClick2", draw_click2->isSelected()); RenderEngine::setCheckedBgType((RenderEngine::CheckedBgType)m_checked_bg->getSelectedItem()); RenderEngine::setCheckedBgZoom(m_checked_bg_zoom->isSelected()); RenderEngine::setCheckedBgColor1(m_checked_bg_color1->getColor()); RenderEngine::setCheckedBgColor2(m_checked_bg_color2->getColor()); undo_size_limit_value = undo_size_limit->getTextInt(); undo_size_limit_value = MID(1, undo_size_limit_value, 9999); set_config_int("Options", "UndoSizeLimit", undo_size_limit_value); set_config_bool("Options", "UndoGotoModified", undo_goto_modified->isSelected()); // Save configuration flush_config_file(); } }
void MaskByColorCommand::onExecute(Context* context) { const ContextReader reader(context); const Sprite* sprite = reader.sprite(); Box* box1, *box2, *box3, *box4; Widget* label_color; Widget* label_tolerance; Button* button_ok; Button* button_cancel; if (!App::instance()->isGui() || !sprite) return; int xpos, ypos; const Image* image = reader.image(&xpos, &ypos); if (!image) return; base::UniquePtr<Window> window(new Window(Window::WithTitleBar, "Mask by Color")); box1 = new Box(JI_VERTICAL); box2 = new Box(JI_HORIZONTAL); box3 = new Box(JI_HORIZONTAL); box4 = new Box(JI_HORIZONTAL | JI_HOMOGENEOUS); label_color = new Label("Color:"); m_buttonColor = new ColorButton (get_config_color("MaskColor", "Color", ColorBar::instance()->getFgColor()), sprite->pixelFormat()); label_tolerance = new Label("Tolerance:"); m_sliderTolerance = new Slider(0, 255, get_config_int("MaskColor", "Tolerance", 0)); m_checkPreview = new CheckBox("&Preview"); button_ok = new Button("&OK"); button_cancel = new Button("&Cancel"); if (get_config_bool("MaskColor", "Preview", true)) m_checkPreview->setSelected(true); button_ok->Click.connect(Bind<void>(&Window::closeWindow, window.get(), button_ok)); button_cancel->Click.connect(Bind<void>(&Window::closeWindow, window.get(), button_cancel)); m_buttonColor->Change.connect(Bind<void>(&MaskByColorCommand::maskPreview, this, Ref(reader))); m_sliderTolerance->Change.connect(Bind<void>(&MaskByColorCommand::maskPreview, this, Ref(reader))); m_checkPreview->Click.connect(Bind<void>(&MaskByColorCommand::maskPreview, this, Ref(reader))); button_ok->setFocusMagnet(true); m_buttonColor->setExpansive(true); m_sliderTolerance->setExpansive(true); box2->setExpansive(true); window->addChild(box1); box1->addChild(box2); box1->addChild(box3); box1->addChild(m_checkPreview); box1->addChild(box4); box2->addChild(label_color); box2->addChild(m_buttonColor); box3->addChild(label_tolerance); box3->addChild(m_sliderTolerance); box4->addChild(button_ok); box4->addChild(button_cancel); // Default position window->remapWindow(); window->centerWindow(); // Mask first preview maskPreview(reader); // Load window configuration load_window_pos(window, "MaskColor"); // Open the window window->openWindowInForeground(); bool apply = (window->getKiller() == button_ok); ContextWriter writer(reader); Document* document(writer.document()); if (apply) { Transaction transaction(writer.context(), "Mask by Color", DoesntModifyDocument); base::UniquePtr<Mask> mask(generateMask(sprite, image, xpos, ypos)); transaction.execute(new cmd::SetMask(document, mask)); transaction.commit(); set_config_color("MaskColor", "Color", m_buttonColor->getColor()); set_config_int("MaskColor", "Tolerance", m_sliderTolerance->getValue()); set_config_bool("MaskColor", "Preview", m_checkPreview->isSelected()); } // Update boundaries and editors. document->generateMaskBoundaries(); update_screen_for_document(document); // Save window configuration. save_window_pos(window, "MaskColor"); }