Skip to content

Commit

Permalink
removed global my_layer_bitmap,insideSwitch and reference_layer
Browse files Browse the repository at this point in the history
  • Loading branch information
ankit-kumar-dwivedi committed Aug 31, 2019
1 parent ae40dba commit 16a7cf8
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 52 deletions.
4 changes: 2 additions & 2 deletions synfig-studio/src/gui/app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3539,11 +3539,11 @@ void App::open_img_in_external(const std::string &uri)

}
unordered_map<std::string, int> configmap({ { "threshold", 8 },{ "accuracy", 9 },{ "despeckling", 5 },{ "maxthickness", 200 }});
void App::open_vectorizerpopup(const etl::handle<synfig::Layer_Bitmap> my_layer_bitmap, const etl::handle<synfig::Layer> reference_layer, bool insideSwitch)
void App::open_vectorizerpopup(const etl::handle<synfig::Layer_Bitmap> my_layer_bitmap, const etl::handle<synfig::Layer> reference_layer)
{
String desc = my_layer_bitmap->get_description();
synfig::info("Opening Vectorizerpopup for :"+desc);
App::vectorizerpopup = new studio::VectorizerSettings(*App::main_window,my_layer_bitmap,selected_instance,configmap,reference_layer,insideSwitch);
App::vectorizerpopup = new studio::VectorizerSettings(*App::main_window,my_layer_bitmap,selected_instance,configmap,reference_layer);
App::vectorizerpopup->show();

}
Expand Down
2 changes: 1 addition & 1 deletion synfig-studio/src/gui/app.h
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,7 @@ class App : public Gtk::Main, private IconController
static void open_uri(const std::string &uri);
static void open_img_in_external(const std::string &uri);
static void open_vectorizerpopup(const etl::handle<synfig::Layer_Bitmap> my_layer_bitmap,
const etl::handle<synfig::Layer> reference_layer, bool insideSwitch);
const etl::handle<synfig::Layer> reference_layer);



Expand Down
9 changes: 3 additions & 6 deletions synfig-studio/src/gui/dialogs/vectorizersettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,10 @@ using namespace studio;
/* === M E T H O D S ======================================================= */

VectorizerSettings::VectorizerSettings(Gtk::Window& parent,etl::handle<synfig::Layer_Bitmap> my_layer_bitmap,
etl::handle<studio::Instance> selected_instance,std::unordered_map <std::string,int>& configmap, etl::handle<synfig::Layer> reference_layer, bool insideSwitch):
etl::handle<studio::Instance> selected_instance,std::unordered_map <std::string,int>& configmap, etl::handle<synfig::Layer> reference_layer):
Gtk::Dialog(_("Convert-to-Vector Settings"),parent),
layer_bitmap_(my_layer_bitmap),
reference_layer_(reference_layer),
inside_Switch(insideSwitch),
instance(selected_instance),
adjustment_threshold(Gtk::Adjustment::create(configmap["threshold"],1,10)),
entry_threshold(adjustment_threshold,1,0),
Expand Down Expand Up @@ -311,14 +310,12 @@ VectorizerSettings::on_convert_pressed()

// in case the "convert to vector" was clicked for layer inside a switch
// and pass canvas accordingly
if(inside_Switch)

if(etl::handle<synfig::Layer_PasteCanvas> paste = etl::handle<Layer_PasteCanvas>::cast_dynamic(reference_layer_))
{
if(etl::handle<synfig::Layer_PasteCanvas> paste = etl::handle<Layer_PasteCanvas>::cast_dynamic(reference_layer_))
{
std::cout<<"image inside group layer clicked\n";
canvas = layer_bitmap_->get_canvas()->parent();
action->set_param("reference_layer",reference_layer_);
}
}
else
{
Expand Down
4 changes: 2 additions & 2 deletions synfig-studio/src/gui/dialogs/vectorizersettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,9 @@ class VectorizerSettings : public Gtk::Dialog

public:

bool isOutline,inside_Switch;
bool isOutline;
VectorizerSettings(Gtk::Window& parent, etl::handle<synfig::Layer_Bitmap> my_layer_bitmap,
etl::handle<Instance> selected_instance,std::unordered_map <std::string,int>& configmap,etl::handle<synfig::Layer> reference_layer, bool insideSwitch);
etl::handle<Instance> selected_instance,std::unordered_map <std::string,int>& configmap,etl::handle<synfig::Layer> reference_layer);
~VectorizerSettings();
void set_progress(float value);

Expand Down
136 changes: 95 additions & 41 deletions synfig-studio/src/gui/instance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@

#include <synfig/savecanvas.h>
#include <synfig/canvasfilenaming.h>
#include <synfig/layers/layer_pastecanvas.h>
#include <synfig/layers/layer_bitmap.h>
#include <synfig/valuenode_registry.h>
#include <synfig/valuenodes/valuenode_composite.h>
Expand Down Expand Up @@ -89,9 +88,6 @@ using namespace sigc;
/* === G L O B A L S ======================================================= */

int studio::Instance::instance_count_=0;
etl::handle<Layer_Bitmap> my_layer_bitmap;
bool insideSwitch = false;
etl::handle<Layer> reference_layer;

/* === P R O C E D U R E S ================================================= */

Expand Down Expand Up @@ -127,6 +123,25 @@ bool Instance::is_img(synfig::String ext) const
return is_in;
}

synfig::Layer::Handle
Instance::layer_inside_switch(synfig::Layer_PasteCanvas::Handle &paste) const
{
int count =0;
synfig::Layer::Handle child_layer;
synfig::Canvas::Handle canvas = paste->get_sub_canvas();
if(canvas)
{
for(IndependentContext i = canvas->get_independent_context(); *i; i++)
{
child_layer = (*i);
count++;
if(count>1) break;
}
}
return child_layer;
}


int
Instance::get_visible_canvases()const
{
Expand Down Expand Up @@ -1644,30 +1659,31 @@ Instance::gather_uri(std::set<synfig::String> &x, const synfig::Layer::Handle &l
int count =0; //will be used to count layers in the group

synfig::Layer::Handle layerfinal,child_layer;
insideSwitch = false;
//insideSwitch = false;

//check if the layer is group layer
//check if the layer is switch layer
if (etl::handle<Layer_PasteCanvas> paste = etl::handle<Layer_PasteCanvas>::cast_dynamic(layer))
{
reference_layer = layer;
synfig::Canvas::Handle canvas = paste->get_sub_canvas();
if(canvas)
{
insideSwitch = true;
for(IndependentContext i = canvas->get_independent_context(); *i; i++)
{
child_layer = (*i);
count++;
if(count>1) break;
}
}
child_layer = layer_inside_switch(paste);
// reference_layer = layer;
// synfig::Canvas::Handle canvas = paste->get_sub_canvas();
// if(canvas)
// {
// insideSwitch = true;
// for(IndependentContext i = canvas->get_independent_context(); *i; i++)
// {
// child_layer = (*i);
// count++;
// if(count>1) break;
// }
// }
}

FileSystem::Handle file_system = layer->get_canvas()->get_file_system();
if (!file_system) return;

//if yes then the layer inside group should be processed not the group!
if(count==1)
if(etl::handle<Layer_Bitmap> test = etl::handle<Layer_Bitmap>::cast_dynamic(child_layer))
{
layerfinal = child_layer;
}
Expand All @@ -1676,11 +1692,6 @@ Instance::gather_uri(std::set<synfig::String> &x, const synfig::Layer::Handle &l
layerfinal = layer;
}

if (etl::handle<Layer_Bitmap> bitmap = etl::handle<Layer_Bitmap>::cast_dynamic(child_layer))
{
my_layer_bitmap = bitmap;
}

ParamVocab vocab = layerfinal->get_param_vocab();
for(ParamVocab::const_iterator i = vocab.begin(); i != vocab.end(); ++i)
{
Expand Down Expand Up @@ -1777,12 +1788,6 @@ Instance::add_special_layer_actions_to_menu(Gtk::Menu *menu, const synfigapp::Se
sigc::bind(sigc::ptr_fun(&App::open_img_in_external), i->second) );
item->show();
menu->append(*item);
Gtk::MenuItem *item2 = manage(new Gtk::ImageMenuItem(Gtk::Stock::CONVERT));
item2->set_label( (String(_("Convert to Vector"))).c_str() );
item2->signal_activate().connect(
sigc::bind(sigc::ptr_fun(&App::open_vectorizerpopup), my_layer_bitmap,reference_layer,insideSwitch) );
item2->show();
menu->append(*item2);
}
else
{
Expand All @@ -1794,6 +1799,33 @@ Instance::add_special_layer_actions_to_menu(Gtk::Menu *menu, const synfigapp::Se
menu->append(*item);
}
}
if(layers.size()==1)
{
if(etl::handle<Layer_Bitmap> my_layer_bitmap = etl::handle<Layer_Bitmap>::cast_dynamic(layers.front()))
{
std::cout<<"layer bitmap only\n";
Gtk::MenuItem *item2 = manage(new Gtk::ImageMenuItem(Gtk::Stock::CONVERT));
item2->set_label( (String(_("Convert to Vector"))).c_str() );
item2->signal_activate().connect(
sigc::bind(sigc::ptr_fun(&App::open_vectorizerpopup), my_layer_bitmap,layers.front()) );
item2->show();
menu->append(*item2);
}
else if(etl::handle<Layer_PasteCanvas> reference_layer = etl::handle<Layer_PasteCanvas>::cast_dynamic(layers.front()))
{
//the layer selected is a switch group
if(etl::handle<Layer_Bitmap> my_layer_bitmap = etl::handle<Layer_Bitmap>::cast_dynamic(layer_inside_switch(reference_layer)))
{
std::cout<<"layer bitmap + reference\n";
Gtk::MenuItem *item2 = manage(new Gtk::ImageMenuItem(Gtk::Stock::CONVERT));
item2->set_label( (String(_("Convert to Vector menu"))).c_str() );
item2->signal_activate().connect(
sigc::bind(sigc::ptr_fun(&App::open_vectorizerpopup), my_layer_bitmap,layers.front()) );
item2->show();
menu->append(*item2);
}
}
}
}

// called whenever we right click any layer under layers panel
Expand All @@ -1807,27 +1839,17 @@ Instance::add_special_layer_actions_to_group(const Glib::RefPtr<Gtk::ActionGroup
for(std::map<String, String>::const_iterator i = uris.begin(); i != uris.end(); ++i, ++index)
{
String action_name = etl::strprintf("special-action-open-file-%d", index);
String action_name2 = etl::strprintf("special-action-convert-file-%d", index);
//if the import layer is type image
if(is_img(filename_extension(i->second)))
{
String local_name = String(_("Edit image in external tool..."));
String local_name2 = String(_("Convert to Vector"));
action_group->add(
Gtk::Action::create(
action_name,
Gtk::Stock::OPEN,
local_name, local_name ),
sigc::bind(sigc::ptr_fun(&App::open_img_in_external), i->second) );
action_group->add(
Gtk::Action::create(
action_name2,
Gtk::Stock::CONVERT,
local_name2, local_name2 ),
sigc::bind(sigc::ptr_fun(&App::open_vectorizerpopup), my_layer_bitmap,reference_layer,insideSwitch) );

sigc::bind(sigc::ptr_fun(&App::open_img_in_external), i->second) );
ui_info += strprintf("<menuitem action='%s' />", action_name.c_str());
ui_info += strprintf("<menuitem action='%s' />", action_name2.c_str());
}
else
{
Expand All @@ -1841,4 +1863,36 @@ Instance::add_special_layer_actions_to_group(const Glib::RefPtr<Gtk::ActionGroup
ui_info += strprintf("<menuitem action='%s' />", action_name.c_str());
}
}
if(layers.size()==1)
{
String local_name2 = String(_("Convert to Vector"));
String action_name2 = etl::strprintf("special-action-open-file-vectorizer-%d",index);
if(etl::handle<Layer_PasteCanvas> reference_layer = etl::handle<Layer_PasteCanvas>::cast_dynamic(layers.front()))
{
//the layer selected is a switch group
if(etl::handle<Layer_Bitmap> my_layer_bitmap = etl::handle<Layer_Bitmap>::cast_dynamic(layer_inside_switch(reference_layer)))
{
action_group->add(
Gtk::Action::create(
action_name2,
Gtk::Stock::CONVERT,
local_name2, local_name2 ),
sigc::bind(sigc::ptr_fun(&App::open_vectorizerpopup), my_layer_bitmap,layers.front()) );
ui_info += strprintf("<menuitem action='%s' />", action_name2.c_str());

}
}
if(etl::handle<Layer_Bitmap> my_layer_bitmap = etl::handle<Layer_Bitmap>::cast_dynamic(layers.front()))
{
action_group->add(
Gtk::Action::create(
action_name2,
Gtk::Stock::CONVERT,
local_name2, local_name2 ),
sigc::bind(sigc::ptr_fun(&App::open_vectorizerpopup), my_layer_bitmap,layers.front()) );
ui_info += strprintf("<menuitem action='%s' />", action_name2.c_str());


}
}
}
3 changes: 3 additions & 0 deletions synfig-studio/src/gui/instance.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include <sigc++/sigc++.h>
#include <synfigapp/value_desc.h>
#include "trees/historytreestore.h"
#include <synfig/layers/layer_pastecanvas.h>
#include <synfig/canvas.h>

/* === M A C R O S ========================================================= */
Expand Down Expand Up @@ -149,6 +150,8 @@ class Instance : public synfigapp::Instance

bool is_img(synfig::String ext) const;

synfig::Layer::Handle layer_inside_switch(synfig::Layer_PasteCanvas::Handle &paste) const;

bool get_undo_status()const { return undo_status_; }

bool get_redo_status()const { return redo_status_; }
Expand Down

0 comments on commit 16a7cf8

Please sign in to comment.