| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #ifndef SkBlitter_DEFINED | 10 #ifndef SkBlitter_DEFINED |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 virtual SkShader::Context* getShaderContext() const; | 69 virtual SkShader::Context* getShaderContext() const; |
| 70 | 70 |
| 71 /** | 71 /** |
| 72 * Special methods for blitters that can blit more than one row at a time. | 72 * Special methods for blitters that can blit more than one row at a time. |
| 73 * This function returns the number of rows that this blitter could optimall
y | 73 * This function returns the number of rows that this blitter could optimall
y |
| 74 * process at a time. It is still required to support blitting one scanline | 74 * process at a time. It is still required to support blitting one scanline |
| 75 * at a time. | 75 * at a time. |
| 76 */ | 76 */ |
| 77 virtual int requestRowsPreserved() const { return 1; } | 77 virtual int requestRowsPreserved() const { return 1; } |
| 78 | 78 |
| 79 /** |
| 80 * This function allocates memory for the blitter that the blitter then owns
. |
| 81 * The memory can be used by the calling function at will, but it will be |
| 82 * released when the blitter's destructor is called. This function returns |
| 83 * NULL if no persistent memory is needed by the blitter. |
| 84 */ |
| 85 virtual void* allocBlitMemory(size_t sz) { |
| 86 return fBlitMemory.reset(sz, SkAutoMalloc::kReuse_OnShrink); |
| 87 } |
| 88 |
| 79 ///@name non-virtual helpers | 89 ///@name non-virtual helpers |
| 80 void blitMaskRegion(const SkMask& mask, const SkRegion& clip); | 90 void blitMaskRegion(const SkMask& mask, const SkRegion& clip); |
| 81 void blitRectRegion(const SkIRect& rect, const SkRegion& clip); | 91 void blitRectRegion(const SkIRect& rect, const SkRegion& clip); |
| 82 void blitRegion(const SkRegion& clip); | 92 void blitRegion(const SkRegion& clip); |
| 83 ///@} | 93 ///@} |
| 84 | 94 |
| 85 /** @name Factories | 95 /** @name Factories |
| 86 Return the correct blitter to use given the specified context. | 96 Return the correct blitter to use given the specified context. |
| 87 */ | 97 */ |
| 88 static SkBlitter* Choose(const SkBitmap& device, | 98 static SkBlitter* Choose(const SkBitmap& device, |
| 89 const SkMatrix& matrix, | 99 const SkMatrix& matrix, |
| 90 const SkPaint& paint, | 100 const SkPaint& paint, |
| 91 SkTBlitterAllocator*, | 101 SkTBlitterAllocator*, |
| 92 bool drawCoverage = false); | 102 bool drawCoverage = false); |
| 93 | 103 |
| 94 static SkBlitter* ChooseSprite(const SkBitmap& device, | 104 static SkBlitter* ChooseSprite(const SkBitmap& device, |
| 95 const SkPaint&, | 105 const SkPaint&, |
| 96 const SkBitmap& src, | 106 const SkBitmap& src, |
| 97 int left, int top, | 107 int left, int top, |
| 98 SkTBlitterAllocator*); | 108 SkTBlitterAllocator*); |
| 99 ///@} | 109 ///@} |
| 100 | 110 |
| 111 protected: |
| 112 |
| 113 SkAutoMalloc fBlitMemory; |
| 114 |
| 101 private: | 115 private: |
| 102 }; | 116 }; |
| 103 | 117 |
| 104 /** This blitter silently never draws anything. | 118 /** This blitter silently never draws anything. |
| 105 */ | 119 */ |
| 106 class SkNullBlitter : public SkBlitter { | 120 class SkNullBlitter : public SkBlitter { |
| 107 public: | 121 public: |
| 108 virtual void blitH(int x, int y, int width) SK_OVERRIDE; | 122 virtual void blitH(int x, int y, int width) SK_OVERRIDE; |
| 109 virtual void blitAntiH(int x, int y, const SkAlpha[], | 123 virtual void blitAntiH(int x, int y, const SkAlpha[], |
| 110 const int16_t runs[]) SK_OVERRIDE; | 124 const int16_t runs[]) SK_OVERRIDE; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 130 virtual void blitH(int x, int y, int width) SK_OVERRIDE; | 144 virtual void blitH(int x, int y, int width) SK_OVERRIDE; |
| 131 virtual void blitAntiH(int x, int y, const SkAlpha[], | 145 virtual void blitAntiH(int x, int y, const SkAlpha[], |
| 132 const int16_t runs[]) SK_OVERRIDE; | 146 const int16_t runs[]) SK_OVERRIDE; |
| 133 virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE; | 147 virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE; |
| 134 virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE; | 148 virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE; |
| 135 virtual void blitAntiRect(int x, int y, int width, int height, | 149 virtual void blitAntiRect(int x, int y, int width, int height, |
| 136 SkAlpha leftAlpha, SkAlpha rightAlpha) SK_OVERRIDE; | 150 SkAlpha leftAlpha, SkAlpha rightAlpha) SK_OVERRIDE; |
| 137 virtual void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE; | 151 virtual void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE; |
| 138 virtual const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE; | 152 virtual const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE; |
| 139 | 153 |
| 154 virtual void* allocBlitMemory(size_t sz) SK_OVERRIDE { |
| 155 return fBlitter->allocBlitMemory(sz); |
| 156 } |
| 157 |
| 140 private: | 158 private: |
| 141 SkBlitter* fBlitter; | 159 SkBlitter* fBlitter; |
| 142 SkIRect fClipRect; | 160 SkIRect fClipRect; |
| 143 }; | 161 }; |
| 144 | 162 |
| 145 /** Wraps another (real) blitter, and ensures that the real blitter is only | 163 /** Wraps another (real) blitter, and ensures that the real blitter is only |
| 146 called with coordinates that have been clipped by the specified clipRgn. | 164 called with coordinates that have been clipped by the specified clipRgn. |
| 147 This means the caller need not perform the clipping ahead of time. | 165 This means the caller need not perform the clipping ahead of time. |
| 148 */ | 166 */ |
| 149 class SkRgnClipBlitter : public SkBlitter { | 167 class SkRgnClipBlitter : public SkBlitter { |
| 150 public: | 168 public: |
| 151 void init(SkBlitter* blitter, const SkRegion* clipRgn) { | 169 void init(SkBlitter* blitter, const SkRegion* clipRgn) { |
| 152 SkASSERT(clipRgn && !clipRgn->isEmpty()); | 170 SkASSERT(clipRgn && !clipRgn->isEmpty()); |
| 153 fBlitter = blitter; | 171 fBlitter = blitter; |
| 154 fRgn = clipRgn; | 172 fRgn = clipRgn; |
| 155 } | 173 } |
| 156 | 174 |
| 157 virtual void blitH(int x, int y, int width) SK_OVERRIDE; | 175 virtual void blitH(int x, int y, int width) SK_OVERRIDE; |
| 158 virtual void blitAntiH(int x, int y, const SkAlpha[], | 176 virtual void blitAntiH(int x, int y, const SkAlpha[], |
| 159 const int16_t runs[]) SK_OVERRIDE; | 177 const int16_t runs[]) SK_OVERRIDE; |
| 160 virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE; | 178 virtual void blitV(int x, int y, int height, SkAlpha alpha) SK_OVERRIDE; |
| 161 virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE; | 179 virtual void blitRect(int x, int y, int width, int height) SK_OVERRIDE; |
| 162 virtual void blitAntiRect(int x, int y, int width, int height, | 180 virtual void blitAntiRect(int x, int y, int width, int height, |
| 163 SkAlpha leftAlpha, SkAlpha rightAlpha) SK_OVERRIDE; | 181 SkAlpha leftAlpha, SkAlpha rightAlpha) SK_OVERRIDE; |
| 164 virtual void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE; | 182 virtual void blitMask(const SkMask&, const SkIRect& clip) SK_OVERRIDE; |
| 165 virtual const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE; | 183 virtual const SkBitmap* justAnOpaqueColor(uint32_t* value) SK_OVERRIDE; |
| 166 | 184 |
| 185 virtual void* allocBlitMemory(size_t sz) SK_OVERRIDE { |
| 186 return fBlitter->allocBlitMemory(sz); |
| 187 } |
| 188 |
| 167 private: | 189 private: |
| 168 SkBlitter* fBlitter; | 190 SkBlitter* fBlitter; |
| 169 const SkRegion* fRgn; | 191 const SkRegion* fRgn; |
| 170 }; | 192 }; |
| 171 | 193 |
| 172 /** Factory to set up the appropriate most-efficient wrapper blitter | 194 /** Factory to set up the appropriate most-efficient wrapper blitter |
| 173 to apply a clip. Returns a pointer to a member, so lifetime must | 195 to apply a clip. Returns a pointer to a member, so lifetime must |
| 174 be managed carefully. | 196 be managed carefully. |
| 175 */ | 197 */ |
| 176 class SkBlitterClipper { | 198 class SkBlitterClipper { |
| 177 public: | 199 public: |
| 178 SkBlitter* apply(SkBlitter* blitter, const SkRegion* clip, | 200 SkBlitter* apply(SkBlitter* blitter, const SkRegion* clip, |
| 179 const SkIRect* bounds = NULL); | 201 const SkIRect* bounds = NULL); |
| 180 | 202 |
| 181 private: | 203 private: |
| 182 SkNullBlitter fNullBlitter; | 204 SkNullBlitter fNullBlitter; |
| 183 SkRectClipBlitter fRectBlitter; | 205 SkRectClipBlitter fRectBlitter; |
| 184 SkRgnClipBlitter fRgnBlitter; | 206 SkRgnClipBlitter fRgnBlitter; |
| 185 }; | 207 }; |
| 186 | 208 |
| 187 #endif | 209 #endif |
| OLD | NEW |