diff options
author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-10-24 12:19:46 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-10-24 12:19:46 +0000 |
commit | 045e62d715f5ee9b03deb5af3c750f8318096179 (patch) | |
tree | e16aed890a3a96aff73f66b13de3b079cd638df3 /include/core | |
parent | 5a0920c22c0dfc62109efdda08ed7e150806e2ff (diff) |
enable soft clipping (yikes)
git-svn-id: http://skia.googlecode.com/svn/trunk@2515 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include/core')
-rw-r--r-- | include/core/SkDraw.h | 4 | ||||
-rw-r--r-- | include/core/SkMaskFilter.h | 21 | ||||
-rw-r--r-- | include/core/SkScan.h | 84 |
3 files changed, 62 insertions, 47 deletions
diff --git a/include/core/SkDraw.h b/include/core/SkDraw.h index eb8724711c..2ea0740590 100644 --- a/include/core/SkDraw.h +++ b/include/core/SkDraw.h @@ -23,6 +23,7 @@ class SkClipStack; class SkDevice; class SkPath; class SkRegion; +class SkRasterClip; struct SkDrawProcs; class SkDraw { @@ -105,7 +106,8 @@ private: public: const SkBitmap* fBitmap; // required const SkMatrix* fMatrix; // required - const SkRegion* fClip; // required + const SkRegion* fClip; // DEPRECATED + const SkRasterClip* fRC; // required const SkClipStack* fClipStack; // optional SkDevice* fDevice; // optional diff --git a/include/core/SkMaskFilter.h b/include/core/SkMaskFilter.h index fe0c69fd67..1f1d57070e 100644 --- a/include/core/SkMaskFilter.h +++ b/include/core/SkMaskFilter.h @@ -17,7 +17,7 @@ class SkBlitter; class SkBounder; class SkMatrix; class SkPath; -class SkRegion; +class SkRasterClip; /** \class SkMaskFilter @@ -55,14 +55,6 @@ public: virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, SkIPoint* margin); - /** Helper method that, given a path in device space, will rasterize it into a kA8_Format mask - and then call filterMask(). If this returns true, the specified blitter will be called - to render that mask. Returns false if filterMask() returned false. - This method is not exported to java. - */ - bool filterPath(const SkPath& devPath, const SkMatrix& devMatrix, - const SkRegion& devClip, SkBounder*, SkBlitter* blitter); - virtual void flatten(SkFlattenableWriteBuffer& ) {} enum BlurType { @@ -90,6 +82,17 @@ public: protected: // empty for now, but lets get our subclass to remember to init us for the future SkMaskFilter(SkFlattenableReadBuffer&) {} + +private: + friend class SkDraw; + + /** Helper method that, given a path in device space, will rasterize it into a kA8_Format mask + and then call filterMask(). If this returns true, the specified blitter will be called + to render that mask. Returns false if filterMask() returned false. + This method is not exported to java. + */ + bool filterPath(const SkPath& devPath, const SkMatrix& devMatrix, + const SkRasterClip&, SkBounder*, SkBlitter* blitter); }; #endif diff --git a/include/core/SkScan.h b/include/core/SkScan.h index e5ea92d2d6..7b4cdc1071 100644 --- a/include/core/SkScan.h +++ b/include/core/SkScan.h @@ -24,63 +24,73 @@ typedef SkIRect SkXRect; class SkScan { public: - static void FillIRect(const SkIRect&, const SkRegion* clip, SkBlitter*); - static void FillXRect(const SkXRect&, const SkRegion* clip, SkBlitter*); + static void FillPath(const SkPath&, const SkIRect&, SkBlitter*); + + /////////////////////////////////////////////////////////////////////////// + // rasterclip + static void FillIRect(const SkIRect&, const SkRasterClip&, SkBlitter*); + static void FillXRect(const SkXRect&, const SkRasterClip&, SkBlitter*); #ifdef SK_SCALAR_IS_FIXED - static void FillRect(const SkRect& rect, const SkRegion* clip, + static void FillRect(const SkRect& rect, const SkRasterClip& clip, SkBlitter* blitter) { SkScan::FillXRect(*(const SkXRect*)&rect, clip, blitter); } -#else - static void FillRect(const SkRect&, const SkRegion* clip, SkBlitter*); -#endif - static void FillPath(const SkPath&, const SkRegion& clip, SkBlitter*); - - static void FillTriangle(const SkPoint pts[], const SkRegion*, SkBlitter*); - static void FillTriangle(const SkPoint& a, const SkPoint& b, - const SkPoint& c, const SkRegion* clip, + static void AntiFillRect(const SkRect& rect, const SkRasterClip& clip, SkBlitter* blitter) { - SkPoint pts[3]; - pts[0] = a; - pts[1] = b; - pts[2] = c; - FillTriangle(pts, clip, blitter); + SkScan::AntiFillXRect(*(const SkXRect*)&rect, clip, blitter); } - - static void HairLine(const SkPoint&, const SkPoint&, const SkRegion*, +#else + static void FillRect(const SkRect&, const SkRasterClip&, SkBlitter*); + static void AntiFillRect(const SkRect&, const SkRasterClip&, SkBlitter*); +#endif + static void AntiFillXRect(const SkXRect&, const SkRasterClip&, SkBlitter*); + static void FillPath(const SkPath&, const SkRasterClip&, SkBlitter*); + static void AntiFillPath(const SkPath&, const SkRasterClip&, SkBlitter*); + static void FrameRect(const SkRect&, const SkPoint& strokeSize, + const SkRasterClip&, SkBlitter*); + static void AntiFrameRect(const SkRect&, const SkPoint& strokeSize, + const SkRasterClip&, SkBlitter*); + static void FillTriangle(const SkPoint pts[], const SkRasterClip&, SkBlitter*); + static void HairLine(const SkPoint&, const SkPoint&, const SkRasterClip&, SkBlitter*); - static void HairRect(const SkRect&, const SkRegion* clip, SkBlitter*); - static void HairPath(const SkPath&, const SkRegion* clip, SkBlitter*); + static void AntiHairLine(const SkPoint&, const SkPoint&, const SkRasterClip&, + SkBlitter*); + static void HairRect(const SkRect&, const SkRasterClip&, SkBlitter*); + static void AntiHairRect(const SkRect&, const SkRasterClip&, SkBlitter*); + static void HairPath(const SkPath&, const SkRasterClip&, SkBlitter*); + static void AntiHairPath(const SkPath&, const SkRasterClip&, SkBlitter*); - static void AntiFillXRect(const SkXRect&, const SkRegion* clip, SkBlitter*); +private: + friend class SkAAClip; + friend class SkRegion; + + static void FillIRect(const SkIRect&, const SkRegion* clip, SkBlitter*); + static void FillXRect(const SkXRect&, const SkRegion* clip, SkBlitter*); #ifdef SK_SCALAR_IS_FIXED - static void AntiFillRect(const SkRect& rect, const SkRegion* clip, + static void FillRect(const SkRect& rect, const SkRegion* clip, SkBlitter* blitter) { + SkScan::FillXRect(*(const SkXRect*)&rect, clip, blitter); + } + static void AntiFillRect(const SkRect& rect, const SkRegion* clip, + SkBlitter* blitter) { SkScan::AntiFillXRect(*(const SkXRect*)&rect, clip, blitter); } #else + static void FillRect(const SkRect&, const SkRegion* clip, SkBlitter*); static void AntiFillRect(const SkRect&, const SkRegion* clip, SkBlitter*); #endif - + static void FillPath(const SkPath&, const SkRegion& clip, SkBlitter*); static void AntiFillPath(const SkPath&, const SkRegion& clip, SkBlitter*, bool forceRLE = false); - - static void AntiHairLine(const SkPoint&, const SkPoint&, const SkRegion*, - SkBlitter*); - static void AntiHairRect(const SkRect&, const SkRegion* clip, SkBlitter*); - static void AntiHairPath(const SkPath&, const SkRegion* clip, SkBlitter*); - - // draws with a miter-join - static void FrameRect(const SkRect&, const SkPoint& strokeSize, - const SkRegion*, SkBlitter*); + static void FillTriangle(const SkPoint pts[], const SkRegion*, SkBlitter*); + static void AntiFrameRect(const SkRect&, const SkPoint& strokeSize, const SkRegion*, SkBlitter*); - - // rasterclip - static void FillIRect(const SkIRect&, const SkRasterClip&, SkBlitter*); - static void FillPath(const SkPath&, const SkRasterClip&, SkBlitter*); - static void AntiFillPath(const SkPath&, const SkRasterClip&, SkBlitter*); + static void HairLineRgn(const SkPoint&, const SkPoint&, const SkRegion*, + SkBlitter*); + static void AntiHairLineRgn(const SkPoint&, const SkPoint&, const SkRegion*, + SkBlitter*); }; /** Assign an SkXRect from a SkIRect, by promoting the src rect's coordinates |