2
2
/*! \file canvasinterface.cpp
3
3
** \brief Template File
5
** $Id: canvasinterface.cpp 1923 2008-03-26 20:04:43Z dooglus $
8
8
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
9
9
** Copyright (c) 2007, 2008 Chris Moore
10
** Copyright (c) 2009 Carlos A. Sosa Navarro
11
12
** This package is free software; you can redistribute it and/or
12
13
** modify it under the terms of the GNU General Public License as
52
53
#include "instance.h"
54
55
#include "actions/layeradd.h"
56
#include "actions/layerremove.h"
55
57
#include "actions/valuedescconvert.h"
56
58
#include "actions/valuenodeadd.h"
57
59
#include "actions/editmodeset.h"
214
216
layer->set_canvas(canvas);
216
218
// Apply some defaults
217
if(layer->set_param("fg",synfigapp::Main::get_foreground_color()))
218
layer->set_param("bg",synfigapp::Main::get_background_color());
219
if(layer->set_param("fg",synfigapp::Main::get_outline_color()))
220
layer->set_param("bg",synfigapp::Main::get_fill_color());
221
else if (name == "outline")
222
layer->set_param("color",synfigapp::Main::get_outline_color());
220
layer->set_param("color",synfigapp::Main::get_foreground_color());
224
layer->set_param("color",synfigapp::Main::get_fill_color());
222
226
layer->set_param("width",synfigapp::Main::get_bline_width().units(get_canvas()->rend_desc()));
223
227
layer->set_param("gradient",synfigapp::Main::get_gradient());
563
CanvasInterface::import(const synfig::String &filename, bool /*copy*/)
567
CanvasInterface::import(const synfig::String &filename, synfig::String &errors, synfig::String &warnings, bool resize_image)
565
569
Action::PassiveGrouper group(get_instance().get(),_("Import Image"));
576
580
if (ext.size()) ext = ext.substr(1); // skip initial '.'
577
581
std::transform(ext.begin(),ext.end(),ext.begin(),&::tolower);
583
if(ext=="svg"){//I don't like it, but worse is nothing
584
Layer::Handle _new_layer(add_layer_to("PasteCanvas",get_canvas()));
585
Layer::Handle _aux_layer(add_layer_to("svg_layer",get_canvas()));
587
_aux_layer->set_param("filename",ValueBase(filename));
588
_new_layer->set_param("canvas",ValueBase(_aux_layer->get_param("canvas")));
590
Action::Handle action(Action::LayerRemove::create());
594
action->set_param("canvas",get_canvas());
595
action->set_param("canvas_interface",etl::loose_handle<CanvasInterface>(this));
596
action->set_param("layer",_aux_layer);
597
if(!action->is_ready()){
598
get_ui_interface()->error(_("Action Not Ready"));
601
if(!get_instance()->perform_action(action)){
602
get_ui_interface()->error(_("Action Failed."));
606
signal_layer_new_description()(_new_layer,filename);
579
610
// If this is a SIF file, then we need to do things slightly differently
580
611
if(ext=="sif" || ext=="sifz")try
583
Canvas::Handle outside_canvas(synfig::open_canvas(filename));
613
Canvas::Handle outside_canvas(synfig::open_canvas(filename, errors, warnings));
584
614
if(!outside_canvas)
585
throw String(_("Unable to open this composition"));
615
throw String(_("Unable to open this composition")) + ":\n\n" + errors;
587
617
Layer::Handle layer(add_layer_to("PasteCanvas",get_canvas()));
589
619
throw String(_("Unable to create \"Paste Canvas\" layer"));
590
620
if(!layer->set_param("canvas",ValueBase(outside_canvas)))
622
get_canvas()->register_external_canvas(filename, outside_canvas);
593
624
//layer->set_description(basename(filename));
594
625
signal_layer_new_description()(layer,filename);
623
654
h=layer->get_param("_height").get(int());
626
Vector size=ValueBase(get_canvas()->rend_desc().get_br()-get_canvas()->rend_desc().get_tl());
657
Vector x, size=ValueBase(get_canvas()->rend_desc().get_br()-get_canvas()->rend_desc().get_tl());
659
// vector from top left of canvas to bottom right
632
if((size[0]<0) ^ (size[1]<0))
662
if(abs(size[0])<abs(size[1])) // if canvas is tall and thin
664
x[0]=size[0]; // use full width
665
x[1]=size[0]/w*h; // and scale for height
666
if((size[0]<0) ^ (size[1]<0))
669
else // else canvas is short and fat (or maybe square)
671
x[1]=size[1]; // use full height
672
x[0]=size[1]/h*w; // and scale for width
673
if((size[0]<0) ^ (size[1]<0))
639
if((size[0]<0) ^ (size[1]<0))
681
if((size[0]<0)) x[0]=-x[0];
682
if((size[1]<0)) x[1]=-x[1];
642
685
if(!layer->set_param("tl",ValueBase(-x/2)))
644
687
if(!layer->set_param("br",ValueBase(x/2)))