projects
/
synfig.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Woops, remove the testing en_AU from ALL_LINGUAS
[synfig.git]
/
synfig-core
/
trunk
/
src
/
synfig
/
layer_shape.cpp
diff --git
a/synfig-core/trunk/src/synfig/layer_shape.cpp
b/synfig-core/trunk/src/synfig/layer_shape.cpp
index
2dd949e
..
2d8af12
100644
(file)
--- a/
synfig-core/trunk/src/synfig/layer_shape.cpp
+++ b/
synfig-core/trunk/src/synfig/layer_shape.cpp
@@
-6,6
+6,7
@@
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 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
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
@@
-59,8
+60,8
@@
using namespace etl;
SYNFIG_LAYER_INIT(Layer_Shape);
SYNFIG_LAYER_SET_NAME(Layer_Shape,"shape");
SYNFIG_LAYER_INIT(Layer_Shape);
SYNFIG_LAYER_SET_NAME(Layer_Shape,"shape");
-SYNFIG_LAYER_SET_LOCAL_NAME(Layer_Shape,_("Shape"));
-SYNFIG_LAYER_SET_CATEGORY(Layer_Shape,_("Internal"));
+SYNFIG_LAYER_SET_LOCAL_NAME(Layer_Shape,
N
_("Shape"));
+SYNFIG_LAYER_SET_CATEGORY(Layer_Shape,
N
_("Internal"));
SYNFIG_LAYER_SET_VERSION(Layer_Shape,"0.1");
SYNFIG_LAYER_SET_CVS_ID(Layer_Shape,"$Id$");
SYNFIG_LAYER_SET_VERSION(Layer_Shape,"0.1");
SYNFIG_LAYER_SET_CVS_ID(Layer_Shape,"$Id$");
@@
-233,7
+234,7
@@
struct MonoSegment
int intersect(Real x,Real y) const
{
int intersect(Real x,Real y) const
{
- if((y < aabb.miny) || (y > aabb.maxy) || (x < aabb.minx)) return 0;
+ if((y < aabb.miny
+EPSILON
) || (y > aabb.maxy) || (x < aabb.minx)) return 0;
if(x > aabb.maxx) return ydir;
//int i = 0;
if(x > aabb.maxx) return ydir;
//int i = 0;
@@
-316,7
+317,7
@@
struct CurveArray
degrees.push_back(2);
}
degrees.push_back(2);
}
- static int intersect_conic(Real x, Real y, Point *p, int
level
= 0)
+ static int intersect_conic(Real x, Real y, Point *p, int
/*level*/
= 0)
{
Real ymin,ymax,xmin,xmax;
int intersects = 0;
{
Real ymin,ymax,xmin,xmax;
int intersects = 0;
@@
-471,7
+472,7
@@
struct CurveArray
}
}
}
}
- static int intersect_cubic(Real x, Real y, Point *p, int
level
= 0)
+ static int intersect_cubic(Real x, Real y, Point *p, int
/*level*/
= 0)
{
const Real INVALIDROOT = -FLT_MAX;
Real ymin,ymax,xmin,xmax;
{
const Real INVALIDROOT = -FLT_MAX;
Real ymin,ymax,xmin,xmax;
@@
-712,7
+713,7
@@
struct Layer_Shape::Intersector
{
Rect aabb;
{
Rect aabb;
- //! true iff aabb hasn't been initiali
s
ed yet
+ //! true iff aabb hasn't been initiali
z
ed yet
bool initaabb;
int flags;
bool initaabb;
int flags;
@@
-1327,7
+1328,7
@@
void Layer_Shape::PolySpan::line_to(Real x, Real y)
//generate data for the ending clipped info
if(y > window.maxy)
{
//generate data for the ending clipped info
if(y > window.maxy)
{
- //intial line to intersection (and degenerate)
+ //in
i
tial line to intersection (and degenerate)
n[2] = x + (window.maxy - y) * dx / dy;
//intersect coords
n[2] = x + (window.maxy - y) * dx / dy;
//intersect coords
@@
-1351,7
+1352,7
@@
void Layer_Shape::PolySpan::line_to(Real x, Real y)
//generate data for the ending clipped info
if(y < window.miny)
{
//generate data for the ending clipped info
if(y < window.miny)
{
- //intial line to intersection (and degenerate)
+ //in
i
tial line to intersection (and degenerate)
n[2] = x + (window.miny - y) * dx / dy;
//intersect coords
n[2] = x + (window.miny - y) * dx / dy;
//intersect coords
@@
-1401,7
+1402,7
@@
void Layer_Shape::PolySpan::line_to(Real x, Real y)
//generate data for the ending clipped info
if(x > window.maxx)
{
//generate data for the ending clipped info
if(x > window.maxx)
{
- //intial line to intersection (and degenerate)
+ //in
i
tial line to intersection (and degenerate)
n[2] = y + (window.maxx - x) * dy / dx;
n[0] = window.maxx;
n[2] = y + (window.maxx - x) * dy / dx;
n[0] = window.maxx;
@@
-1430,7
+1431,7
@@
void Layer_Shape::PolySpan::line_to(Real x, Real y)
//generate data for the ending clipped info
if(x < window.minx)
{
//generate data for the ending clipped info
if(x < window.minx)
{
- //intial line to intersection (and degenerate)
+ //in
i
tial line to intersection (and degenerate)
n[2] = y + (window.minx - x) * dy / dx;
n[0] = window.minx;
n[2] = y + (window.minx - x) * dy / dx;
n[0] = window.minx;
@@
-1547,7
+1548,7
@@
void Layer_Shape::PolySpan::conic_to(Real x1, Real y1, Real x, Real y)
{
if(num >= MAX_SUBDIVISION_SIZE)
{
{
if(num >= MAX_SUBDIVISION_SIZE)
{
- warning("Curve subdivision somehow ran out of space while tesselating!");
+ warning("Curve subdivision somehow ran out of space while tessel
l
ating!");
//do something...
assert(0);
//do something...
assert(0);
@@
-1620,7
+1621,7
@@
void Layer_Shape::PolySpan::cubic_to(Real x1, Real y1, Real x2, Real y2, Real x,
{
if(num >= MAX_SUBDIVISION_SIZE)
{
{
if(num >= MAX_SUBDIVISION_SIZE)
{
- warning("Curve subdivision somehow ran out of space while tesselating!");
+ warning("Curve subdivision somehow ran out of space while tessel
l
ating!");
//do something...
assert(0);
//do something...
assert(0);
@@
-1698,7
+1699,7
@@
void Layer_Shape::PolySpan::draw_scanline(int y, Real x1, Real fy1, Real x2, Rea
//case all in same pixel
if(ix1 == ix2) //impossible for degenerate case (covered by the previous cases)
{
//case all in same pixel
if(ix1 == ix2) //impossible for degenerate case (covered by the previous cases)
{
- current.addcover(dy,(fx1 + fx2)*dy/2); //horizontal trap
a
zoid area
+ current.addcover(dy,(fx1 + fx2)*dy/2); //horizontal trap
e
zoid area
return;
}
return;
}
@@
-1712,7
+1713,7
@@
void Layer_Shape::PolySpan::draw_scanline(int y, Real x1, Real fy1, Real x2, Rea
mult = (1 - fx1)*dydx; //next y intersection diff value (at 1)
//first pixel
mult = (1 - fx1)*dydx; //next y intersection diff value (at 1)
//first pixel
- current.addcover(mult,(1 + fx1)*mult/2); // fx1,fy1,1,fy@1 - starting trap
a
zoidal area
+ current.addcover(mult,(1 + fx1)*mult/2); // fx1,fy1,1,fy@1 - starting trap
e
zoidal area
//move to the next pixel
fy1 += mult;
//move to the next pixel
fy1 += mult;
@@
-1748,7
+1749,7
@@
void Layer_Shape::PolySpan::draw_scanline(int y, Real x1, Real fy1, Real x2, Rea
mult = fx1*dydx; //next y intersection diff value
//first pixel
mult = fx1*dydx; //next y intersection diff value
//first pixel
- current.addcover(mult,fx1*mult/2); // fx1,fy1,0,fy@0 - starting trap
a
zoidal area
+ current.addcover(mult,fx1*mult/2); // fx1,fy1,0,fy@0 - starting trap
e
zoidal area
//move to next pixel
fy1 += mult;
//move to next pixel
fy1 += mult;
@@
-1876,7
+1877,7
@@
void Layer_Shape::PolySpan::draw_line(Real x1, Real y1, Real x2, Real y2)
mult = (1 - fy1) * dxdy;
mult = (1 - fy1) * dxdy;
- //x interset scanline
+ //x interse
c
t scanline
x_from = x1 + mult;
draw_scanline(iy1,x1,fy1,x_from,1);
x_from = x1 + mult;
draw_scanline(iy1,x1,fy1,x_from,1);
@@
-1906,7
+1907,7
@@
void Layer_Shape::PolySpan::draw_line(Real x1, Real y1, Real x2, Real y2)
mult = fy1 * dxdy;
mult = fy1 * dxdy;
- //x interset scanline
+ //x interse
c
t scanline
x_from = x1 + mult;
draw_scanline(iy1,x1,fy1,x_from,0);
x_from = x1 + mult;
draw_scanline(iy1,x1,fy1,x_from,0);
@@
-2614,7
+2615,7
@@
Layer_Shape::accelerated_render(Context context,Surface *surface,int quality, co
}
bool
}
bool
-Layer_Shape::render_shape(Surface *surface,bool useblend,int
quality
,
+Layer_Shape::render_shape(Surface *surface,bool useblend,int
/*quality*/
,
const RendDesc &renddesc, ProgressCallback *cb)const
{
int tmp(0);
const RendDesc &renddesc, ProgressCallback *cb)const
{
int tmp(0);
@@
-2639,7
+2640,11
@@
Layer_Shape::render_shape(Surface *surface,bool useblend,int quality,
PolySpan span;
PolySpan span;
- //optimization for tesselating only inside tiles
+ // if the pixels are zero sized then we're too zoomed out to see anything
+ if (pw == 0 || ph == 0)
+ return true;
+
+ //optimization for tessellating only inside tiles
span.window.minx = 0;
span.window.miny = 0;
span.window.maxx = w;
span.window.minx = 0;
span.window.miny = 0;
span.window.maxx = w;
@@
-2854,8
+2859,8
@@
Layer_Shape::render_shape(Surface *surface,bool useblend,int quality,
}
bool
}
bool
-Layer_Shape::render_shape(surface<float> *surface,int
quality
,
- const RendDesc &renddesc, ProgressCallback *
cb
)const
+Layer_Shape::render_shape(surface<float> *surface,int
/*quality*/
,
+ const RendDesc &renddesc, ProgressCallback *
/*cb*/
)const
{
// If our amount is set to zero, no need to render anything
if(!get_amount())
{
// If our amount is set to zero, no need to render anything
if(!get_amount())
@@
-2875,7
+2880,7
@@
Layer_Shape::render_shape(surface<float> *surface,int quality,
PolySpan span;
PolySpan span;
- //optimization for tesselating only inside tiles
+ //optimization for tessel
l
ating only inside tiles
span.window.minx = 0;
span.window.miny = 0;
span.window.maxx = w;
span.window.minx = 0;
span.window.miny = 0;
span.window.maxx = w;