X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fmodules%2Fmod_noise%2Fnoise.cpp;h=4257a6cf376c36a16a23930ea17486eb4ea22056;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=c2643de3243455981f88c968645700ee1a6e31ce;hpb=16b3beced25134bef064705568ecb893a6be4e79;p=synfig.git diff --git a/synfig-core/trunk/src/modules/mod_noise/noise.cpp b/synfig-core/trunk/src/modules/mod_noise/noise.cpp index c2643de..4257a6c 100644 --- a/synfig-core/trunk/src/modules/mod_noise/noise.cpp +++ b/synfig-core/trunk/src/modules/mod_noise/noise.cpp @@ -1,20 +1,22 @@ -/* === S I N F G =========================================================== */ +/* === S Y N F I G ========================================================= */ /*! \file noise.cpp -** \brief blehh +** \brief Implementation of the "Noise Gradient" layer ** -** $Id: noise.cpp,v 1.2 2005/01/13 06:48:39 darco Exp $ +** $Id$ ** ** \legal -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007 Chris Moore ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. ** \endlegal */ /* ========================================================================= */ @@ -30,31 +32,31 @@ #include "noise.h" -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include #endif /* === M A C R O S ========================================================= */ -using namespace sinfg; +using namespace synfig; using namespace std; using namespace etl; /* === G L O B A L S ======================================================= */ -SINFG_LAYER_INIT(Noise); -SINFG_LAYER_SET_NAME(Noise,"noise"); -SINFG_LAYER_SET_LOCAL_NAME(Noise,_("Noise Gradient")); -SINFG_LAYER_SET_CATEGORY(Noise,_("Gradients")); -SINFG_LAYER_SET_VERSION(Noise,"0.0"); -SINFG_LAYER_SET_CVS_ID(Noise,"$Id: noise.cpp,v 1.2 2005/01/13 06:48:39 darco Exp $"); +SYNFIG_LAYER_INIT(Noise); +SYNFIG_LAYER_SET_NAME(Noise,"noise"); +SYNFIG_LAYER_SET_LOCAL_NAME(Noise,N_("Noise Gradient")); +SYNFIG_LAYER_SET_CATEGORY(Noise,N_("Gradients")); +SYNFIG_LAYER_SET_VERSION(Noise,"0.0"); +SYNFIG_LAYER_SET_CVS_ID(Noise,"$Id$"); /* === P R O C E D U R E S ================================================= */ @@ -64,7 +66,7 @@ Noise::Noise(): size(1,1), gradient(Color::black(), Color::white()) { - smooth=2; + smooth=RandomNoise::SMOOTH_COSINE; detail=4; speed=0; do_alpha=false; @@ -78,26 +80,26 @@ Noise::Noise(): inline Color -Noise::color_func(const Point &point, float pixel_size,Context context)const +Noise::color_func(const Point &point, float pixel_size,Context /*context*/)const { Color ret(0,0,0,0); - + float x(point[0]/size[0]*(1<1)amount=1; - + if(super_sample&&pixel_size) { - amount2=random(smooth,0+(detail-i)*5,x2,y,t)+amount2*0.5; + amount2=random(smooth,0+(detail-i)*5,x2,y,ftime)+amount2*0.5; if(amount2<-1)amount2=-1;if(amount2>1)amount2=1; - amount3=random(smooth,0+(detail-i)*5,x,y2,t)+amount3*0.5; + amount3=random(smooth,0+(detail-i)*5,x,y2,ftime)+amount3*0.5; if(amount3<-1)amount3=-1;if(amount3>1)amount3=1; if(turbulent) @@ -126,22 +128,22 @@ Noise::color_func(const Point &point, float pixel_size,Context context)const x2*=0.5f; y2*=0.5f; } - + if(do_alpha) { - alpha=random(smooth,3+(detail-i)*5,x,y,t)+alpha*0.5; + alpha=random(smooth,3+(detail-i)*5,x,y,ftime)+alpha*0.5; if(alpha<-1)alpha=-1;if(alpha>1)alpha=1; } - + if(turbulent) { amount=abs(amount); alpha=abs(alpha); } - + x*=0.5f; y*=0.5f; - //t*=0.5f; + //ftime*=0.5f; } if(!turbulent) @@ -155,7 +157,7 @@ Noise::color_func(const Point &point, float pixel_size,Context context)const amount3=amount3/2.0f+0.5f; } } - + if(super_sample && pixel_size) ret=gradient(amount,max(amount3,max(amount,amount2))-min(amount3,min(amount,amount2))); else @@ -168,27 +170,27 @@ Noise::color_func(const Point &point, float pixel_size,Context context)const } inline float -Noise::calc_supersample(const sinfg::Point &x, float pw,float ph)const +Noise::calc_supersample(const synfig::Point &/*x*/, float /*pw*/,float /*ph*/)const { return 0.0f; } void -Noise::set_time(sinfg::Context context, sinfg::Time t)const +Noise::set_time(synfig::Context context, synfig::Time t)const { curr_time=t; context.set_time(t); } void -Noise::set_time(sinfg::Context context, sinfg::Time t, const sinfg::Point &point)const +Noise::set_time(synfig::Context context, synfig::Time t, const synfig::Point &point)const { curr_time=t; context.set_time(t,point); } -sinfg::Layer::Handle -Noise::hit_check(sinfg::Context context, const sinfg::Point &point)const +synfig::Layer::Handle +Noise::hit_check(synfig::Context context, const synfig::Point &point)const { if(get_blend_method()==Color::BLEND_STRAIGHT && get_amount()>=0.5) return const_cast(this); @@ -202,7 +204,7 @@ Noise::hit_check(sinfg::Context context, const sinfg::Point &point)const bool Noise::set_param(const String & param, const ValueBase &value) { - if(param=="seed" && value.same_as(int())) + if(param=="seed" && value.same_type_as(int())) { random.set_seed(value.get(int())); return true; @@ -215,8 +217,8 @@ Noise::set_param(const String & param, const ValueBase &value) IMPORT(gradient); IMPORT(turbulent); IMPORT(super_sample); - - return Layer_Composite::set_param(param,value); + + return Layer_Composite::set_param(param,value); } ValueBase @@ -230,25 +232,25 @@ Noise::get_param(const String & param)const EXPORT(detail); EXPORT(do_alpha); EXPORT(gradient); - EXPORT(turbulent) + EXPORT(turbulent) EXPORT(super_sample); - + EXPORT_NAME(); EXPORT_VERSION(); - - return Layer_Composite::get_param(param); + + return Layer_Composite::get_param(param); } Layer::Vocab Noise::get_param_vocab()const { Layer::Vocab ret(Layer_Composite::get_param_vocab()); - + ret.push_back(ParamDesc("gradient") .set_local_name(_("Gradient")) ); ret.push_back(ParamDesc("seed") - .set_local_name(_("Random Seed")) + .set_local_name(_("RandomNoise Seed")) ); ret.push_back(ParamDesc("size") .set_local_name(_("Size")) @@ -257,11 +259,11 @@ Noise::get_param_vocab()const .set_local_name(_("Interpolation")) .set_description(_("What type of interpolation to use")) .set_hint("enum") - .add_enum_value(0,"nearest",_("Nearest Neighbor")) - .add_enum_value(1,"linear",_("Linear")) - .add_enum_value(2,"cosine",_("Cosine")) - .add_enum_value(3,"spline",_("Spline")) - .add_enum_value(4,"cubic",_("Cubic")) + .add_enum_value(RandomNoise::SMOOTH_DEFAULT, "nearest", _("Nearest Neighbor")) + .add_enum_value(RandomNoise::SMOOTH_LINEAR, "linear", _("Linear")) + .add_enum_value(RandomNoise::SMOOTH_COSINE, "cosine", _("Cosine")) + .add_enum_value(RandomNoise::SMOOTH_SPLINE, "spline", _("Spline")) + .add_enum_value(RandomNoise::SMOOTH_CUBIC, "cubic", _("Cubic")) ); ret.push_back(ParamDesc("detail") .set_local_name(_("Detail")) @@ -278,7 +280,7 @@ Noise::get_param_vocab()const ret.push_back(ParamDesc("super_sample") .set_local_name(_("Super Sampling")) ); - + return ret; } @@ -310,7 +312,7 @@ Noise::accelerated_render(Context context,Surface *surface,int quality, const Re return true; } - + int x,y; Surface::pen pen(surface->begin()); @@ -322,7 +324,7 @@ Noise::accelerated_render(Context context,Surface *surface,int quality, const Re float supersampleradius((abs(pw)+abs(ph))*0.5f); if(quality>=8) supersampleradius=0; - + if(get_amount()==1.0 && get_blend_method()==Color::BLEND_STRAIGHT) { for(y=0,pos[1]=tl[1];y