diff options
Diffstat (limited to 'src/ui/dialog/tracedialog2.cpp')
| -rw-r--r-- | src/ui/dialog/tracedialog2.cpp | 357 |
1 files changed, 0 insertions, 357 deletions
diff --git a/src/ui/dialog/tracedialog2.cpp b/src/ui/dialog/tracedialog2.cpp deleted file mode 100644 index be214e867..000000000 --- a/src/ui/dialog/tracedialog2.cpp +++ /dev/null @@ -1,357 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/** - * @file - * Bitmap tracing settings dialog - second implementation. - */ -/* Authors: - * Marc Jeanmougin <marc.jeanmougin@telecom-paristech.fr> - * - * Copyright (C) 2019 Authors - * - * Released under GNU GPL v2+, read the file 'COPYING' for more information. - */ - -#include "tracedialog.h" - -#include <gtkmm.h> -#include <gtkmm/comboboxtext.h> -#include <gtkmm/notebook.h> -#include <gtkmm/radiobutton.h> -#include <gtkmm/spinbutton.h> -#include <gtkmm/stack.h> - - -#include <glibmm/i18n.h> - -#include "desktop-tracker.h" -#include "desktop.h" -#include "selection.h" - -#include "inkscape.h" -#include "io/resource.h" -#include "io/sys.h" -#include "trace/autotrace/inkscape-autotrace.h" -#include "trace/potrace/inkscape-potrace.h" -#include "trace/depixelize/inkscape-depixelize.h" - - - -namespace Inkscape { -namespace UI { -namespace Dialog { - -class TraceDialogImpl2 : public TraceDialog { - public: - TraceDialogImpl2(); - ~TraceDialogImpl2() override; - - private: - Inkscape::Trace::Tracer tracer; - void traceProcess(bool do_i_trace); - void abort(); - - void previewCallback(); - void traceCallback(); - void onSelectionModified(guint flags); - void onSetDefaults(); - - void setDesktop(SPDesktop *desktop) override; - void setTargetDesktop(SPDesktop *desktop); - - SPDesktop *desktop; - DesktopTracker deskTrack; - sigc::connection desktopChangeConn; - sigc::connection selectChangedConn; - sigc::connection selectModifiedConn; - - Glib::RefPtr<Gtk::Builder> builder; - - Glib::RefPtr<Gtk::Adjustment> MS_scans, PA_curves, PA_islands, PA_sparse1, PA_sparse2, SS_AT_ET_T, SS_AT_FI_T, SS_BC_T, SS_CQ_T, - SS_ED_T, optimize, smooth, speckles; - Gtk::ComboBoxText *CBT_SS, *CBT_MS; - Gtk::CheckButton *CB_invert, *CB_MS_smooth, *CB_MS_stack, *CB_MS_rb, *CB_speckles, *CB_smooth, *CB_optimize, - /* *CB_live,*/ *CB_SIOX; - Gtk::RadioButton *RB_PA_voronoi; - Gtk::Button *B_RESET, *B_STOP, *B_OK, *B_Update; - Gtk::Box *mainBox; - Gtk::Stack *choice_scan; - Gtk::Notebook *choice_tab; - Gtk::Image *previewImage; -}; - -void TraceDialogImpl2::setDesktop(SPDesktop *desktop) -{ - Panel::setDesktop(desktop); - deskTrack.setBase(desktop); -} - -void TraceDialogImpl2::setTargetDesktop(SPDesktop *desktop) -{ - if (this->desktop != desktop) { - if (this->desktop) { - selectChangedConn.disconnect(); - selectModifiedConn.disconnect(); - } - this->desktop = desktop; - if (desktop && desktop->selection) { - selectModifiedConn = desktop->selection->connectModified( - sigc::hide<0>(sigc::mem_fun(*this, &TraceDialogImpl2::onSelectionModified))); - } - } -} - -void TraceDialogImpl2::traceProcess(bool do_i_trace) -{ - SPDesktop *desktop = SP_ACTIVE_DESKTOP; - if (desktop) - desktop->setWaitingCursor(); - - if (CB_SIOX->get_active()) - tracer.enableSiox(true); - else - tracer.enableSiox(false); - - Glib::ustring type = - choice_scan->get_visible_child_name() == "SingleScan" ? CBT_SS->get_active_text() : CBT_MS->get_active_text(); - - Inkscape::Trace::Potrace::TraceType potraceType; - // Inkscape::Trace::Autotrace::TraceType autotraceType; - - bool use_autotrace = false; - Inkscape::Trace::Autotrace::AutotraceTracingEngine ate; // TODO - - if (type == _("Brightness cutoff")) - potraceType = Inkscape::Trace::Potrace::TRACE_BRIGHTNESS; - else if (type == _("Edge detection")) - potraceType = Inkscape::Trace::Potrace::TRACE_CANNY; - else if (type == _("Color quantization")) - potraceType = Inkscape::Trace::Potrace::TRACE_QUANT; - else if (type == _("Autotrace")) - { - // autotraceType = Inkscape::Trace::Autotrace::TRACE_CENTERLINE - use_autotrace = true; - ate.opts->color_count = 2; - } - else if (type == _("Centerline tracing (autotrace)")) - { - // autotraceType = Inkscape::Trace::Autotrace::TRACE_CENTERLINE - use_autotrace = true; - ate.opts->color_count = 2; - ate.opts->centerline = true; - ate.opts->preserve_width = true; - } - else if (type == _("Brightness steps")) - potraceType = Inkscape::Trace::Potrace::TRACE_BRIGHTNESS_MULTI; - else if (type == _("Colors")) - potraceType = Inkscape::Trace::Potrace::TRACE_QUANT_COLOR; - else if (type == _("Grays")) - potraceType = Inkscape::Trace::Potrace::TRACE_QUANT_MONO; - else if (type == _("Autotrace (slower)")) - { - // autotraceType = Inkscape::Trace::Autotrace::TRACE_CENTERLINE - use_autotrace = true; - ate.opts->color_count = (int)MS_scans->get_value() + 1; - } - else - { - g_warning("Should not happen!"); - } - ate.opts->filter_iterations = (int) SS_AT_FI_T->get_value(); - ate.opts->error_threshold = SS_AT_ET_T->get_value(); - - Inkscape::Trace::Potrace::PotraceTracingEngine pte( - potraceType, CB_invert->get_active(), (int)SS_CQ_T->get_value(), SS_BC_T->get_value(), - 0., // Brightness floor - SS_ED_T->get_value(), (int)MS_scans->get_value(), CB_MS_stack->get_active(), CB_MS_smooth->get_active(), - CB_MS_rb->get_active()); - pte.potraceParams->opticurve = CB_optimize->get_active(); - pte.potraceParams->opttolerance = optimize->get_value(); - pte.potraceParams->alphamax = CB_smooth->get_active() ? smooth->get_value() : 0; - pte.potraceParams->turdsize = CB_speckles->get_active() ? (int)speckles->get_value() : 0; - - - - //Inkscape::Trace::Autotrace::AutotraceTracingEngine ate; // TODO - Inkscape::Trace::Depixelize::DepixelizeTracingEngine dte(RB_PA_voronoi->get_active() ? Inkscape::Trace::Depixelize::TraceType::TRACE_VORONOI : Inkscape::Trace::Depixelize::TraceType::TRACE_BSPLINES, PA_curves->get_value(), (int) PA_islands->get_value(), (int) PA_sparse1->get_value(), PA_sparse2->get_value() ); - - - Glib::RefPtr<Gdk::Pixbuf> pixbuf = tracer.getSelectedImage(); - if (pixbuf) { - Glib::RefPtr<Gdk::Pixbuf> preview = use_autotrace ? ate.preview(pixbuf) : pte.preview(pixbuf); - if (preview) { - int width = preview->get_width(); - int height = preview->get_height(); - const Gtk::Allocation &vboxAlloc = previewImage->get_allocation(); - double scaleFX = vboxAlloc.get_width() / (double)width; - double scaleFY = vboxAlloc.get_height() / (double)height; - double scaleFactor = scaleFX > scaleFY ? scaleFY : scaleFX; - int newWidth = (int)(((double)width) * scaleFactor); - int newHeight = (int)(((double)height) * scaleFactor); - Glib::RefPtr<Gdk::Pixbuf> scaledPreview = preview->scale_simple(newWidth, newHeight, Gdk::INTERP_NEAREST); - // g_object_unref(preview); - previewImage->set(scaledPreview); - } - } - if (do_i_trace){ - if (use_autotrace){ - tracer.trace(&ate); - printf("at\n"); - } else if (choice_tab->get_current_page() == 0){ - tracer.trace(&pte); - printf("pt\n"); - } else if (choice_tab->get_current_page() == 1){ - tracer.trace(&dte); - printf("dt\n"); - } - } - - if (desktop) - desktop->clearWaitingCursor(); -} - -void TraceDialogImpl2::abort() -{ - SPDesktop *desktop = SP_ACTIVE_DESKTOP; - if (desktop) - desktop->clearWaitingCursor(); - tracer.abort(); -} - -void TraceDialogImpl2::onSelectionModified(guint flags) -{ - if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_PARENT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG)) { - previewCallback(); - } -} - -void TraceDialogImpl2::onSetDefaults() -{ - MS_scans->set_value(8); - PA_curves->set_value(1); - PA_islands->set_value(5); - PA_sparse1->set_value(4); - PA_sparse2->set_value(1); - SS_AT_FI_T->set_value(4); - SS_AT_ET_T->set_value(2); - SS_BC_T->set_value(0.45); - SS_CQ_T->set_value(64); - SS_ED_T->set_value(.65); - optimize->set_value(0.2); - smooth->set_value(1); - speckles->set_value(2); - CB_invert->set_active(false); - CB_MS_smooth->set_active(true); - CB_MS_stack->set_active(true); - CB_MS_rb->set_active(false); - CB_speckles->set_active(true); - CB_smooth->set_active(true); - CB_optimize->set_active(true); - //CB_live->set_active(false); - CB_SIOX->set_active(false); -} - -void TraceDialogImpl2::previewCallback() { traceProcess(false); } -void TraceDialogImpl2::traceCallback() { traceProcess(true); } - - -TraceDialogImpl2::TraceDialogImpl2() - : TraceDialog() -{ - const std::string req_widgets[] = { "MS_scans", "PA_curves", "PA_islands", "PA_sparse1", "PA_sparse2", - "SS_AT_FI_T", "SS_AT_ET_T", "SS_BC_T", "SS_CQ_T", "SS_ED_T", - "optimize", "smooth", "speckles", "CB_invert", "CB_MS_smooth", - "CB_MS_stack", "CB_MS_rb", "CB_speckles", "CB_smooth", "CB_optimize", - /*"CB_live",*/ "CB_SIOX", "CBT_SS", "CBT_MS", "B_RESET", - "B_STOP", "B_OK", "mainBox", "choice_tab", "choice_scan", - "previewImage" }; - Glib::ustring gladefile = get_filename(Inkscape::IO::Resource::UIS, "dialog-trace.glade"); - try { - builder = Gtk::Builder::create_from_file(gladefile); - } catch (const Glib::Error &ex) { - g_warning("Glade file loading failed for filter effect dialog"); - return; - } - Glib::RefPtr<Glib::Object> test; - for (std::string w : req_widgets) { - test = builder->get_object(w); - if (!test) { - g_warning("Required widget %s does not exist", w.c_str()); - return; - } - } - -#define GET_O(name) \ - tmp = builder->get_object(#name); \ - name = Glib::RefPtr<Gtk::Adjustment>::cast_dynamic(tmp); - - Glib::RefPtr<Glib::Object> tmp; - -#define GET_W(name) builder->get_widget(#name, name); - GET_O(MS_scans) - GET_O(PA_curves) - GET_O(PA_islands) - GET_O(PA_sparse1) - GET_O(PA_sparse2) - GET_O(SS_AT_FI_T) - GET_O(SS_AT_ET_T) - GET_O(SS_BC_T) - GET_O(SS_CQ_T) - GET_O(SS_ED_T) - GET_O(optimize) - GET_O(smooth) - GET_O(speckles) - - GET_W(CB_invert) - GET_W(CB_MS_smooth) - GET_W(CB_MS_stack) - GET_W(CB_MS_rb) - GET_W(CB_speckles) - GET_W(CB_smooth) - GET_W(CB_optimize) - //GET_W(CB_live) - GET_W(CB_SIOX) - GET_W(RB_PA_voronoi) - GET_W(CBT_SS) - GET_W(CBT_MS) - GET_W(B_RESET) - GET_W(B_STOP) - GET_W(B_OK) - GET_W(B_Update) - GET_W(mainBox) - GET_W(choice_tab) - GET_W(choice_scan) - GET_W(previewImage) -#undef GET_W -#undef GET_O - _getContents()->add(*mainBox); - // show_all_children(); - desktopChangeConn = deskTrack.connectDesktopChanged(sigc::mem_fun(*this, &TraceDialogImpl2::setTargetDesktop)); - deskTrack.connect(GTK_WIDGET(gobj())); - - B_Update->signal_clicked().connect(sigc::mem_fun(*this, &TraceDialogImpl2::previewCallback)); - B_OK->signal_clicked().connect(sigc::mem_fun(*this, &TraceDialogImpl2::traceCallback)); - B_STOP->signal_clicked().connect(sigc::mem_fun(*this, &TraceDialogImpl2::abort)); - B_RESET->signal_clicked().connect(sigc::mem_fun(*this, &TraceDialogImpl2::onSetDefaults)); -} - - -TraceDialogImpl2::~TraceDialogImpl2() -{ - selectChangedConn.disconnect(); - selectModifiedConn.disconnect(); - desktopChangeConn.disconnect(); -} - - - -TraceDialog &TraceDialog::getInstance() -{ - TraceDialog *dialog = new TraceDialogImpl2(); - return *dialog; -} - - - -} // namespace Dialog -} // namespace UI -} // namespace Inkscape |
