You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.3 KiB
88 lines
2.3 KiB
//======================================================================== |
|
// |
|
// SplashClip.h |
|
// |
|
//======================================================================== |
|
|
|
#ifndef SPLASHCLIP_H |
|
#define SPLASHCLIP_H |
|
|
|
#include <aconf.h> |
|
|
|
#ifdef USE_GCC_PRAGMAS |
|
#pragma interface |
|
#endif |
|
|
|
#include "SplashTypes.h" |
|
|
|
class SplashPath; |
|
class SplashXPath; |
|
class SplashXPathScanner; |
|
|
|
//------------------------------------------------------------------------ |
|
|
|
enum SplashClipResult { |
|
splashClipAllInside, |
|
splashClipAllOutside, |
|
splashClipPartial |
|
}; |
|
|
|
//------------------------------------------------------------------------ |
|
// SplashClip |
|
//------------------------------------------------------------------------ |
|
|
|
class SplashClip { |
|
public: |
|
|
|
// Create a clip, for the given rectangle. |
|
SplashClip(SplashCoord x0, SplashCoord y0, |
|
SplashCoord x1, SplashCoord y1); |
|
|
|
// Copy a clip. |
|
SplashClip *copy() { return new SplashClip(this); } |
|
|
|
~SplashClip(); |
|
|
|
// Reset the clip to a rectangle. |
|
void resetToRect(SplashCoord x0, SplashCoord y0, |
|
SplashCoord x1, SplashCoord y1); |
|
|
|
// Intersect the clip with a rectangle. |
|
SplashError clipToRect(SplashCoord x0, SplashCoord y0, |
|
SplashCoord x1, SplashCoord y1); |
|
|
|
// Interesect the clip with <path>. |
|
SplashError clipToPath(SplashPath *path, SplashCoord flatness, |
|
GBool eo); |
|
|
|
// Returns true if (<x>,<y>) is inside the clip. |
|
GBool test(int x, int y); |
|
|
|
// Tests a rectangle against the clipping region. Returns one of: |
|
// - splashClipAllInside if the entire rectangle is inside the |
|
// clipping region, i.e., all pixels in the rectangle are |
|
// visible |
|
// - splashClipAllOutside if the entire rectangle is outside the |
|
// clipping region, i.e., all the pixels in the rectangle are |
|
// clipped |
|
// - splashClipPartial if the rectangle is part inside and part |
|
// outside the clipping region |
|
SplashClipResult testRect(int rectXMin, int rectYMin, |
|
int rectXMax, int rectYMax); |
|
|
|
// Similar to testRect, but tests a horizontal span. |
|
SplashClipResult testSpan(int spanXMin, int spanXMax, int spanY); |
|
|
|
private: |
|
|
|
SplashClip(SplashClip *clip); |
|
void grow(int nPaths); |
|
|
|
int xMin, yMin, xMax, yMax; |
|
SplashXPath **paths; |
|
Guchar *flags; |
|
SplashXPathScanner **scanners; |
|
int length, size; |
|
}; |
|
|
|
#endif
|
|
|