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

Side by Side Diff: src/effects/SkBlurMaskFilter.cpp

Issue 195113002: old -- Fix for 32767 issue Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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 /* 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 #include "SkBlurMaskFilter.h" 9 #include "SkBlurMaskFilter.h"
10 #include "SkBlurMask.h" 10 #include "SkBlurMask.h"
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 const SkScalar bottomUnstretched = SkTMax(LL.fY, LR.fY) + SkIntToScalar(2 * margin.fY); 314 const SkScalar bottomUnstretched = SkTMax(LL.fY, LR.fY) + SkIntToScalar(2 * margin.fY);
315 315
316 const SkScalar totalSmallHeight = topUnstretched + bottomUnstretched + stret chSize; 316 const SkScalar totalSmallHeight = topUnstretched + bottomUnstretched + stret chSize;
317 if (totalSmallHeight >= rrect.rect().height()) { 317 if (totalSmallHeight >= rrect.rect().height()) {
318 // There is no valid piece to stretch. 318 // There is no valid piece to stretch.
319 return kUnimplemented_FilterReturn; 319 return kUnimplemented_FilterReturn;
320 } 320 }
321 321
322 SkRect smallR = SkRect::MakeWH(totalSmallWidth, totalSmallHeight); 322 SkRect smallR = SkRect::MakeWH(totalSmallWidth, totalSmallHeight);
323 323
324 if (smallR.width() * smallR.height() > clipBounds.width() * clipBounds.heigh t()) {
325 // This path creates the nine-patch and then draws it. The fallback
326 // path draws the clipped path, blurs it then blits it. If we are
327 // going to touch more pixels using this path we should probably just
328 // fall back.
329 return kUnimplemented_FilterReturn;
330 }
331
324 SkRRect smallRR; 332 SkRRect smallRR;
325 SkVector radii[4]; 333 SkVector radii[4];
326 radii[SkRRect::kUpperLeft_Corner] = UL; 334 radii[SkRRect::kUpperLeft_Corner] = UL;
327 radii[SkRRect::kUpperRight_Corner] = UR; 335 radii[SkRRect::kUpperRight_Corner] = UR;
328 radii[SkRRect::kLowerRight_Corner] = LR; 336 radii[SkRRect::kLowerRight_Corner] = LR;
329 radii[SkRRect::kLowerLeft_Corner] = LL; 337 radii[SkRRect::kLowerLeft_Corner] = LL;
330 smallRR.setRectRadii(smallR, radii); 338 smallRR.setRectRadii(smallR, radii);
331 339
332 if (!draw_rrect_into_mask(smallRR, &srcM)) { 340 if (!draw_rrect_into_mask(smallRR, &srcM)) {
333 return kFalse_FilterReturn; 341 return kFalse_FilterReturn;
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 smallR[0].set(rects[0].left(), rects[0].top(), rects[0].right() - dx, rects[ 0].bottom() - dy); 452 smallR[0].set(rects[0].left(), rects[0].top(), rects[0].right() - dx, rects[ 0].bottom() - dy);
445 if (smallR[0].width() < 2 || smallR[0].height() < 2) { 453 if (smallR[0].width() < 2 || smallR[0].height() < 2) {
446 return kUnimplemented_FilterReturn; 454 return kUnimplemented_FilterReturn;
447 } 455 }
448 if (2 == count) { 456 if (2 == count) {
449 smallR[1].set(rects[1].left(), rects[1].top(), 457 smallR[1].set(rects[1].left(), rects[1].top(),
450 rects[1].right() - dx, rects[1].bottom() - dy); 458 rects[1].right() - dx, rects[1].bottom() - dy);
451 SkASSERT(!smallR[1].isEmpty()); 459 SkASSERT(!smallR[1].isEmpty());
452 } 460 }
453 461
462 #if 0
463 // Both filterRectsToNine and filterRRectToNine share this problem
464 // (potentially trying to allocate too large a nine-patch mask).
465 // Chromium is currently seeing the filterRRectToNine crash but we have
466 // not yet seen the filterRectsToNine corrolate. Presumably we will have
467 // to enable this code some day but more testing is required (For example,
468 // since the analytic case is faster then the normal blur should we
469 // actually have a constant multiplier in the following inequality).
470 if (smallR[0].width() * smallR[0].height() >
471 clipBounds.width() * clipBounds.height()) {
472 // This path creates the nine-patch and then draws it. The fallback
473 // path draws the clipped path, blurs it then blits it. If we are
474 // going to touch more pixels using this path we should probably just
475 // fall back.
476 return kUnimplemented_FilterReturn;
477 }
478 #endif
479
454 if (count > 1 || !c_analyticBlurNinepatch) { 480 if (count > 1 || !c_analyticBlurNinepatch) {
455 if (!draw_rects_into_mask(smallR, count, &srcM)) { 481 if (!draw_rects_into_mask(smallR, count, &srcM)) {
456 return kFalse_FilterReturn; 482 return kFalse_FilterReturn;
457 } 483 }
458 484
459 SkAutoMaskFreeImage amf(srcM.fImage); 485 SkAutoMaskFreeImage amf(srcM.fImage);
460 486
461 if (!this->filterMask(&patch->fMask, srcM, matrix, &margin)) { 487 if (!this->filterMask(&patch->fMask, srcM, matrix, &margin)) {
462 return kFalse_FilterReturn; 488 return kFalse_FilterReturn;
463 } 489 }
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 } else { 641 } else {
616 str->append("None"); 642 str->append("None");
617 } 643 }
618 str->append("))"); 644 str->append("))");
619 } 645 }
620 #endif 646 #endif
621 647
622 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter) 648 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkBlurMaskFilter)
623 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl) 649 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurMaskFilterImpl)
624 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 650 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698