Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(708)

Side by Side Diff: src/core/SkDraw.cpp

Issue 1003813003: some utils for rect and matrix (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/gpu/GrCoordTransform.h ('k') | src/core/SkRRect.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkDraw.h" 8 #include "SkDraw.h"
9 #include "SkBlitter.h" 9 #include "SkBlitter.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
(...skipping 2163 matching lines...) Expand 10 before | Expand all | Expand 10 after
2174 #include "SkBlitter.h" 2174 #include "SkBlitter.h"
2175 2175
2176 static bool compute_bounds(const SkPath& devPath, const SkIRect* clipBounds, 2176 static bool compute_bounds(const SkPath& devPath, const SkIRect* clipBounds,
2177 const SkMaskFilter* filter, const SkMatrix* filterMat rix, 2177 const SkMaskFilter* filter, const SkMatrix* filterMat rix,
2178 SkIRect* bounds) { 2178 SkIRect* bounds) {
2179 if (devPath.isEmpty()) { 2179 if (devPath.isEmpty()) {
2180 return false; 2180 return false;
2181 } 2181 }
2182 2182
2183 // init our bounds from the path 2183 // init our bounds from the path
2184 { 2184 *bounds = devPath.getBounds().makeOutset(SK_ScalarHalf, SK_ScalarHalf).round Out();
2185 SkRect pathBounds = devPath.getBounds();
2186 pathBounds.inset(-SK_ScalarHalf, -SK_ScalarHalf);
2187 pathBounds.roundOut(bounds);
2188 }
2189 2185
2190 SkIPoint margin = SkIPoint::Make(0, 0); 2186 SkIPoint margin = SkIPoint::Make(0, 0);
2191 if (filter) { 2187 if (filter) {
2192 SkASSERT(filterMatrix); 2188 SkASSERT(filterMatrix);
2193 2189
2194 SkMask srcM, dstM; 2190 SkMask srcM, dstM;
2195 2191
2196 srcM.fBounds = *bounds; 2192 srcM.fBounds = *bounds;
2197 srcM.fFormat = SkMask::kA8_Format; 2193 srcM.fFormat = SkMask::kA8_Format;
2198 srcM.fImage = NULL; 2194 srcM.fImage = NULL;
2199 if (!filter->filterMask(&dstM, srcM, *filterMatrix, &margin)) { 2195 if (!filter->filterMask(&dstM, srcM, *filterMatrix, &margin)) {
2200 return false; 2196 return false;
2201 } 2197 }
2202 } 2198 }
2203 2199
2204 // (possibly) trim the bounds to reflect the clip 2200 // (possibly) trim the bounds to reflect the clip
2205 // (plus whatever slop the filter needs) 2201 // (plus whatever slop the filter needs)
2206 if (clipBounds) { 2202 if (clipBounds) {
2207 SkIRect tmp = *clipBounds;
2208 // Ugh. Guard against gigantic margins from wacky filters. Without this 2203 // Ugh. Guard against gigantic margins from wacky filters. Without this
2209 // check we can request arbitrary amounts of slop beyond our visible 2204 // check we can request arbitrary amounts of slop beyond our visible
2210 // clip, and bring down the renderer (at least on finite RAM machines 2205 // clip, and bring down the renderer (at least on finite RAM machines
2211 // like handsets, etc.). Need to balance this invented value between 2206 // like handsets, etc.). Need to balance this invented value between
2212 // quality of large filters like blurs, and the corresponding memory 2207 // quality of large filters like blurs, and the corresponding memory
2213 // requests. 2208 // requests.
2214 static const int MAX_MARGIN = 128; 2209 static const int MAX_MARGIN = 128;
2215 tmp.inset(-SkMin32(margin.fX, MAX_MARGIN), 2210 if (!bounds->intersect(clipBounds->makeOutset(SkMin32(margin.fX, MAX_MAR GIN),
2216 -SkMin32(margin.fY, MAX_MARGIN)); 2211 SkMin32(margin.fY, MAX_MAR GIN)))) {
2217 if (!bounds->intersect(tmp)) {
2218 return false; 2212 return false;
2219 } 2213 }
2220 } 2214 }
2221 2215
2222 return true; 2216 return true;
2223 } 2217 }
2224 2218
2225 static void draw_into_mask(const SkMask& mask, const SkPath& devPath, 2219 static void draw_into_mask(const SkMask& mask, const SkPath& devPath,
2226 SkPaint::Style style) { 2220 SkPaint::Style style) {
2227 SkBitmap bm; 2221 SkBitmap bm;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2266 mask->fImage = SkMask::AllocImage(size); 2260 mask->fImage = SkMask::AllocImage(size);
2267 memset(mask->fImage, 0, mask->computeImageSize()); 2261 memset(mask->fImage, 0, mask->computeImageSize());
2268 } 2262 }
2269 2263
2270 if (SkMask::kJustComputeBounds_CreateMode != mode) { 2264 if (SkMask::kJustComputeBounds_CreateMode != mode) {
2271 draw_into_mask(*mask, devPath, style); 2265 draw_into_mask(*mask, devPath, style);
2272 } 2266 }
2273 2267
2274 return true; 2268 return true;
2275 } 2269 }
OLDNEW
« no previous file with comments | « include/gpu/GrCoordTransform.h ('k') | src/core/SkRRect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698