/* === S Y N F I G ========================================================= */
-/*! \file renddesc.h_
+/*! \file synfig/renddesc.cpp
** \brief RendDesc
**
-** $Id: renddesc.cpp,v 1.1.1.1 2005/01/04 01:23:14 darco Exp $
+** $Id$
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 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
/* === M A C R O S ========================================================= */
+#undef FLAGS
+#define FLAGS(x,y) (((x)&(y))==(y))
+
/* === G L O B A L S ======================================================= */
/* === M E T H O D S ======================================================= */
RendDesc &
RendDesc::set_w(int x)
{
- if(FLAGS(flags,LINK_PX_ASPECT))
+ if(FLAGS(flags,LINK_PX_ASPECT)) // never set
{
h_=h_*x/w_;
w_=x;
}
- else if(FLAGS(flags,LINK_PX_AREA))
+ else if(FLAGS(flags,LINK_PX_AREA)) // never set
{
//! \writeme
w_=x;
}
- else if(FLAGS(flags,PX_ASPECT))
+ else if(FLAGS(flags,PX_ASPECT)) // "Pixel Aspect"
{
Vector d=br_-tl_;
float old_span=get_span();
// If we should preserve image width
- if( FLAGS(flags,IM_W)
- || (FLAGS(flags,IM_ZOOMIN) && d[1]>d[1]/x*w_)
- || (FLAGS(flags,IM_ZOOMOUT) && d[1]<d[1]/x*w_))
+ if( FLAGS(flags,IM_W) // "Image Width"
+ || (FLAGS(flags,IM_ZOOMIN) && d[1]>d[1]/x*w_) // never set
+ || (FLAGS(flags,IM_ZOOMOUT) && d[1]<d[1]/x*w_)) // never set
{
br_[1]-=focus[1];
br_[1]=br_[1]/x*w_;
w_=x;
- if(FLAGS(flags,IM_SPAN))
+ if(FLAGS(flags,IM_SPAN)) // "Image Span"
set_span(old_span);
}
- else if(FLAGS(flags,PX_AREA))
+ else if(FLAGS(flags,PX_AREA)) // never set
{
//! \writeme
w_=x;
RendDesc &
RendDesc::set_h(int y)
{
- if(FLAGS(flags,LINK_PX_ASPECT))
+ if(FLAGS(flags,LINK_PX_ASPECT)) // never set
{
w_=w_*y/h_;
h_=y;
}
- else if(FLAGS(flags,LINK_PX_AREA))
+ else if(FLAGS(flags,LINK_PX_AREA)) // never set
{
//! \writeme
h_=y;
}
- else if(FLAGS(flags,PX_ASPECT))
+ else if(FLAGS(flags,PX_ASPECT)) // "Pixel Aspect"
{
Vector d=br_-tl_;
float old_span=get_span();
// If we should preserve image width
- if( FLAGS(flags,IM_W)
- || (FLAGS(flags,IM_ZOOMIN) && d[0]>d[0]/y*h_)
- || (FLAGS(flags,IM_ZOOMOUT) && d[0]<d[0]/y*h_))
+ if( FLAGS(flags,IM_W) // "Image Width"
+ || (FLAGS(flags,IM_ZOOMIN) && d[0]>d[0]/y*h_) // never set
+ || (FLAGS(flags,IM_ZOOMOUT) && d[0]<d[0]/y*h_)) // never set
{
br_[0]-=focus[0];
br_[0]=br_[0]/y*h_;
h_=y;
- if(FLAGS(flags,IM_SPAN))
+ if(FLAGS(flags,IM_SPAN)) // "Image Span"
set_span(old_span);
}
- else if(FLAGS(flags,PX_AREA))
+ else if(FLAGS(flags,PX_AREA)) // never set
{
//! \writeme
h_=y;
int
RendDesc::get_frame_start()const
{
- return time_begin*frame_rate;
+ return round_to_int(time_begin*frame_rate);
}
RendDesc &
int
RendDesc::get_frame_end()const
{
- return time_end*frame_rate;
+ return round_to_int(time_end*frame_rate);
}
RendDesc &
RendDesc &
RendDesc::set_interlaced(bool x)
-{ interlaced=x; return *this; }
+{ interlaced=x; return *this; }
//! Return the status of the clamp flag
const bool &
//! Set the clamp flag
RendDesc &
RendDesc::set_clamp(bool x)
-{ clamp=x; return *this; }
+{ clamp=x; return *this; }
//! Set constraint flags
RendDesc &
RendDesc::get_antialias()const
{ return a; }
-//! Set the antilaias amount
+//! Set the antialias amount
RendDesc &
RendDesc::set_antialias(const int &x)
{ a=x; return *this; }
{
Vector::value_type ratio=x/get_span();
- if(!FLAGS(flags,IM_W|IM_H) || FLAGS(flags,IM_ASPECT))
+ //! \todo this looks wrong. I suspect the intention was to check
+ // "(not IM_W) AND (not IM_H)", ie "not(IM_W OR IM_H)" but
+ // this check does "not(IM_W AND IM_H)"
+ if(!FLAGS(flags,IM_W|IM_H) || FLAGS(flags,IM_ASPECT)) // (not "Image Width") or (not "Image Height") or "Image Aspect"
{
br_-=focus;
br_=br_*ratio;
tl_=tl_*ratio;
tl_+=focus;
}
- else if(FLAGS(flags,IM_W))
+ else if(FLAGS(flags,IM_W)) // "Image Width"
{
//! \writeme or fix me
br_-=focus;
tl_-=focus;
tl_=tl_*ratio;
tl_+=focus;
- }else // IM_H
+ }else // IM_H // "Image Height"
{
//! \writeme or fix me
br_-=focus;
/*
const Gamma &
RendDesc::get_gamma()const
-{ return gamma; }
+{ return gamma; }
RendDesc &
RendDesc::set_gamma(const Gamma &x)
RendDesc &
RendDesc::set_tl(const Point &x)
{
- if(FLAGS(flags,PX_ASPECT))
+ if(FLAGS(flags,PX_ASPECT)) // "Pixel Aspect"
{
Vector new_size(x-br_);
new_size[0]=abs(new_size[0]);
new_size[1]=abs(new_size[1]);
-
+
Vector old_size(tl_-br_);
old_size[0]=abs(old_size[0]);
old_size[1]=abs(old_size[1]);
-
+
if(new_size[0]!=old_size[0])
w_=round_to_int(new_size[0]*w_/old_size[0]);
-
+
if(new_size[1]!=old_size[1])
h_=round_to_int(new_size[1]*h_/old_size[1]);
}
-
+
tl_=x; return *this;
}
RendDesc &
RendDesc::set_br(const Point &x)
{
- if(FLAGS(flags,PX_ASPECT))
+ if(FLAGS(flags,PX_ASPECT)) // "Pixel Aspect"
{
Vector new_size(x-tl_);
new_size[0]=abs(new_size[0]);
new_size[1]=abs(new_size[1]);
-
+
Vector old_size(tl_-br_);
old_size[0]=abs(old_size[0]);
old_size[1]=abs(old_size[1]);
-
+
if(new_size[0]!=old_size[0])
w_=round_to_int(new_size[0]*w_/old_size[0]);
-
+
if(new_size[1]!=old_size[1])
h_=round_to_int(new_size[1]*h_/old_size[1]);
}
{ tl_=__tl; br_=__br; return *this; }
RendDesc &
-RendDesc::set_viewport(Real a,Real b,Real c,Real d)
+RendDesc::set_viewport(Vector::value_type a, Vector::value_type b, Vector::value_type c, Vector::value_type d)
{ tl_=Point(a,b); br_=Point(c,d); return *this; }
Real
{
const Real pw(get_pw());
const Real ph(get_ph());
-
+
tl_[0]+=pw*x;
tl_[1]+=ph*y;
w_=w;
h_=h;
-
+
return *this;
}