X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fmodules%2Fmod_geometry%2Frectangle.cpp;h=374af9c1a7a98c2d1a90067fd35a197bf0a27f6c;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=87b59bbbb1986d82fb53be07d16b05c864d57e21;hpb=9c0eddafc44e411cd9e4363ab68e07fa279541cd;p=synfig.git diff --git a/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp b/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp index 87b59bb..374af9c 100644 --- a/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp +++ b/synfig-core/trunk/src/modules/mod_geometry/rectangle.cpp @@ -1,12 +1,12 @@ /* === S Y N F I G ========================================================= */ /*! \file rectangle.cpp -** \brief Template Header +** \brief Implementation of the "Rectangle" layer ** ** $Id$ ** ** \legal ** Copyright (c) 2002 Robert B. Quattlebaum Jr. -** Copyright (c) 2007 Chris Moore +** Copyright (c) 2007, 2008 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -55,8 +55,8 @@ using namespace synfig; SYNFIG_LAYER_INIT(Rectangle); SYNFIG_LAYER_SET_NAME(Rectangle,"rectangle"); -SYNFIG_LAYER_SET_LOCAL_NAME(Rectangle,_("Rectangle")); -SYNFIG_LAYER_SET_CATEGORY(Rectangle,_("Geometry")); +SYNFIG_LAYER_SET_LOCAL_NAME(Rectangle,N_("Rectangle")); +SYNFIG_LAYER_SET_CATEGORY(Rectangle,N_("Geometry")); SYNFIG_LAYER_SET_VERSION(Rectangle,"0.2"); SYNFIG_LAYER_SET_CVS_ID(Rectangle,"$Id$"); @@ -87,7 +87,9 @@ Rectangle::Rectangle(): bool Rectangle::set_param(const String & param, const ValueBase &value) { - IMPORT(color); + IMPORT_PLUS(color, { if (color.get_a() == 0) { if (converted_blend_) { + set_blend_method(Color::BLEND_ALPHA_OVER); + color.set_a(1); } else transparent_color_ = true; } }); IMPORT(point1); IMPORT(point2); IMPORT(expand); @@ -272,27 +274,26 @@ Rectangle::get_color(Context context, const Point &pos)const if( pos[0]min[0] && pos[1]min[1] ) { + // inside the expanded rectangle if(invert) - return context.get_color(pos); - else - { - if(is_solid_color()) - return color; - else - return Color::blend(color,context.get_color(pos),get_amount(),get_blend_method()); + return Color::blend(Color::alpha(),context.get_color(pos),get_amount(),get_blend_method()); - } - } + if(is_solid_color()) + return color; - if(invert) + return Color::blend(color,context.get_color(pos),get_amount(),get_blend_method()); + } + else { + // outside the expanded rectangle + if(!invert) + return Color::blend(Color::alpha(),context.get_color(pos),get_amount(),get_blend_method()); + if(is_solid_color()) return color; - else - return Color::blend(color,context.get_color(pos),get_amount(),get_blend_method()); - } - return context.get_color(pos); + return Color::blend(color,context.get_color(pos),get_amount(),get_blend_method()); + } } bool @@ -490,7 +491,7 @@ Rectangle::accelerated_render(Context context,Surface *surface,int quality, cons right = std::min(w,right); */ - // optimisation - if the whole tile is covered by this rectangle, + // optimization - if the whole tile is covered by this rectangle, // and the rectangle is a solid color, we don't need to render // what's behind us if (is_solid_color() && top == 0 && left == 0 && bottom == h && right == w)