X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fcontext.cpp;h=dba4e1b0238a88965c3759ceb2594457f1a6367d;hb=17db38a8803db1a9deebfa02a45c351f7325063e;hp=ae8a036b9aecb2ff03683cb5fb9e9469cdc089f3;hpb=e8a065f2385c219c511b57dac52786120bfa097d;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/context.cpp b/synfig-core/trunk/src/synfig/context.cpp index ae8a036..dba4e1b 100644 --- a/synfig-core/trunk/src/synfig/context.cpp +++ b/synfig-core/trunk/src/synfig/context.cpp @@ -1,8 +1,8 @@ /* === S Y N F I G ========================================================= */ -/*! \file template.cpp +/*! \file context.cpp ** \brief Template File ** -** $Id: context.cpp,v 1.4 2005/01/24 05:00:18 darco Exp $ +** $Id$ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley @@ -48,8 +48,8 @@ using namespace synfig; /* === M A C R O S ========================================================= */ -//#define SYNFIG_PROFILE_LAYERS -//#define SYNFIG_DEBUG_LAYERS +// #define SYNFIG_PROFILE_LAYERS +// #define SYNFIG_DEBUG_LAYERS /* === G L O B A L S ======================================================= */ @@ -77,8 +77,7 @@ _print_profile_report() synfig::info("Total Time: %f seconds", total_time); synfig::info("<<<< End of Profile Report"); } - -#endif +#endif // SYNFIG_PROFILE_LAYERS /* === P R O C E D U R E S ================================================= */ @@ -88,14 +87,14 @@ Color Context::get_color(const Point &pos)const { Context context(*this); - + while(!context->empty()) - { + { // If this layer is active, then go // ahead and break out of the loop if((*context)->active()) break; - + // Otherwise, we want to keep searching // till we find either an active layer, // or the end of the layer list @@ -114,24 +113,24 @@ Rect Context::get_full_bounding_rect()const { Context context(*this); - + while(!context->empty()) - { + { // If this layer is active, then go // ahead and break out of the loop if((*context)->active()) break; - + // Otherwise, we want to keep searching // till we find either an active layer, // or the end of the layer list ++context; } - if(context->empty()) - return Rect::zero(); + // If this layer isn't defined, return zero-sized rectangle + if(context->empty()) return Rect::zero(); - return (*context)->get_full_bounding_rect(*this+1); + return (*context)->get_full_bounding_rect(context+1); } @@ -157,7 +156,7 @@ Context::get_full_bounding_rect()const - + - - + at each minus we must record all the info for that which we are worried about... each layer can do work before or after the other work is done... so both values must be recorded... */ @@ -165,9 +164,9 @@ Context::get_full_bounding_rect()const bool Context::accelerated_render(Surface *surface,int quality, const RendDesc &renddesc, ProgressCallback *cb) const { - #ifdef SYNFIG_PROFILE_LAYERS +#ifdef SYNFIG_PROFILE_LAYERS String layer_name(curr_layer); - + //sum the pre-work done by layer above us... (curr_layer is layer above us...) if(depth>0) { @@ -175,10 +174,10 @@ Context::accelerated_render(Surface *surface,int quality, const RendDesc &rendde //if(run_table.count(curr_layer))run_table[curr_layer]++; // else run_table[curr_layer]=1; } - #endif +#endif // SYNFIG_PROFILE_LAYERS const Rect bbox(renddesc.get_rect()); - + Context context(*this); for(;!(context)->empty();++context) { @@ -186,19 +185,19 @@ Context::accelerated_render(Surface *surface,int quality, const RendDesc &rendde // then move on to next layer if(!(*context)->active()) continue; - + const Rect layer_bounds((*context)->get_bounding_rect()); - + // If the box area is less than zero // then move on to next layer if(layer_bounds.area()<=0.0000000000001) continue; - + // If the boxes do not intersect // then move on to next layer if(!(layer_bounds && bbox)) continue; - + // Break out of the loop--we have found a good layer break; } @@ -208,30 +207,29 @@ Context::accelerated_render(Surface *surface,int quality, const RendDesc &rendde { #ifdef SYNFIG_DEBUG_LAYERS synfig::info("Context::accelerated_render(): Hit end of list"); -#endif +#endif // SYNFIG_DEBUG_LAYERS surface->set_wh(renddesc.get_w(),renddesc.get_h()); surface->clear(); - #ifdef SYNFIG_PROFILE_LAYERS - profile_timer.reset(); - #endif +#ifdef SYNFIG_PROFILE_LAYERS + profile_timer.reset(); +#endif // SYNFIG_PROFILE_LAYERS return true; } #ifdef SYNFIG_DEBUG_LAYERS synfig::info("Context::accelerated_render(): Descending into %s",(*context)->get_name().c_str()); -#endif +#endif // SYNFIG_DEBUG_LAYERS try { RWLock::ReaderLock lock((*context)->get_rw_lock()); - - #ifdef SYNFIG_PROFILE_LAYERS - + +#ifdef SYNFIG_PROFILE_LAYERS //go down one layer :P depth++; curr_layer=(*context)->get_name(); //make sure the layer inside is referring to the correct layer outside profile_timer.reset(); // + bool ret((*context)->accelerated_render(context+1,surface,quality,renddesc, cb)); - + //post work for the previous layer time_table[curr_layer]+=profile_timer(); //- if(run_table.count(curr_layer))run_table[curr_layer]++; @@ -239,14 +237,14 @@ Context::accelerated_render(Surface *surface,int quality, const RendDesc &rendde depth--; curr_layer = layer_name; //we are now onto this layer (make sure the post gets recorded correctly... - + //print out the table it we're done... if(depth==0) _print_profile_report(),time_table.clear(),run_table.clear(); profile_timer.reset(); //+ return ret; - #else +#else // SYNFIG_PROFILE_LAYERS return (*context)->accelerated_render(context+1,surface,quality,renddesc, cb); - #endif +#endif // SYNFIG_PROFILE_LAYERS } catch(std::bad_alloc) @@ -254,15 +252,15 @@ Context::accelerated_render(Surface *surface,int quality, const RendDesc &rendde synfig::error("Context::accelerated_render(): Layer \"%s\" threw a bad_alloc exception!",(*context)->get_name().c_str()); #ifdef _DEBUG return false; -#else +#else // _DEBUG ++context; return context.accelerated_render(surface, quality, renddesc, cb); -#endif +#endif // _DEBUG } catch(...) { synfig::error("Context::accelerated_render(): Layer \"%s\" threw an exception, rethrowing...",(*context)->get_name().c_str()); - throw; + throw; } } @@ -271,12 +269,12 @@ Context::set_time(Time time)const { Context context(*this); while(!(context)->empty()) - { + { // If this layer is active, then go // ahead and break out of the loop if((*context)->active() && !(*context)->dirty_time_.is_equal(time)) break; - + // Otherwise, we want to keep searching // till we find either an active layer, // or the end of the layer list @@ -286,7 +284,7 @@ Context::set_time(Time time)const // If this layer isn't defined, just return if((context)->empty()) return; - // Set up a wrter lock + // Set up a writer lock RWLock::WriterLock lock((*context)->get_rw_lock()); //synfig::info("%s: dirty_time=%f",(*context)->get_name().c_str(),(float)(*context)->dirty_time_); @@ -295,10 +293,10 @@ Context::set_time(Time time)const { Layer::ParamList params; Layer::DynamicParamList::const_iterator iter; - + for(iter=(*context)->dynamic_param_list().begin();iter!=(*context)->dynamic_param_list().end();iter++) params[iter->first]=(*iter->second)(time); - + (*context)->set_param_list(params); (*context)->set_time(context+1,time); @@ -308,18 +306,18 @@ Context::set_time(Time time)const } void -Context::set_time(Time time,const Vector &pos)const +Context::set_time(Time time,const Vector &/*pos*/)const { set_time(time); /* Context context(*this); while(!(context)->empty()) - { + { // If this layer is active, then go // ahead and break out of the loop if((*context)->active()) break; - + // Otherwise, we want to keep searching // till we find either an active layer, // or the end of the layer list @@ -333,10 +331,10 @@ Context::set_time(Time time,const Vector &pos)const { Layer::ParamList params; Layer::DynamicParamList::const_iterator iter; - + for(iter=(*context)->dynamic_param_list().begin();iter!=(*context)->dynamic_param_list().end();iter++) params[iter->first]=(*iter->second)(time); - + (*context)->set_param_list(params); (*context)->set_time(context+1,time,pos); @@ -348,14 +346,14 @@ etl::handle Context::hit_check(const Point &pos)const { Context context(*this); - + while(!context->empty()) - { + { // If this layer is active, then go // ahead and break out of the loop if((*context)->active()) break; - + // Otherwise, we want to keep searching // till we find either an active layer, // or the end of the layer list