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

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

Issue 617353003: fix prev change to tooBigForLCD, and add test (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 2 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 | « gm/lcdtext.cpp ('k') | 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 * 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 "SkPaint.h" 8 #include "SkPaint.h"
9 #include "SkAnnotation.h" 9 #include "SkAnnotation.h"
10 #include "SkAutoKern.h" 10 #include "SkAutoKern.h"
(...skipping 1463 matching lines...) Expand 10 before | Expand all | Expand 10 after
1474 #define assert_byte(x) SkASSERT(0 == ((x) >> 8)) 1474 #define assert_byte(x) SkASSERT(0 == ((x) >> 8))
1475 1475
1476 // Beyond this size, LCD doesn't appreciably improve quality, but it always 1476 // Beyond this size, LCD doesn't appreciably improve quality, but it always
1477 // cost more RAM and draws slower, so we set a cap. 1477 // cost more RAM and draws slower, so we set a cap.
1478 #ifndef SK_MAX_SIZE_FOR_LCDTEXT 1478 #ifndef SK_MAX_SIZE_FOR_LCDTEXT
1479 #define SK_MAX_SIZE_FOR_LCDTEXT 48 1479 #define SK_MAX_SIZE_FOR_LCDTEXT 48
1480 #endif 1480 #endif
1481 1481
1482 const SkScalar gMaxSize2ForLCDText = SK_MAX_SIZE_FOR_LCDTEXT * SK_MAX_SIZE_FOR_L CDTEXT; 1482 const SkScalar gMaxSize2ForLCDText = SK_MAX_SIZE_FOR_LCDTEXT * SK_MAX_SIZE_FOR_L CDTEXT;
1483 1483
1484 static bool tooBigForLCD(const SkScalerContext::Rec& rec, bool checkPost2x2) { 1484 static bool too_big_for_lcd(const SkScalerContext::Rec& rec, bool checkPost2x2) {
1485 SkScalar size = rec.fTextSize;
1486 if (checkPost2x2) { 1485 if (checkPost2x2) {
1487 SkScalar area = rec.fPost2x2[0][0] * rec.fPost2x2[1][1] - 1486 SkScalar area = rec.fPost2x2[0][0] * rec.fPost2x2[1][1] -
1488 rec.fPost2x2[1][0] * rec.fPost2x2[0][1]; 1487 rec.fPost2x2[1][0] * rec.fPost2x2[0][1];
1489 size *= SkScalarAbs(area); 1488 area *= rec.fTextSize * rec.fTextSize;
1489 return area > gMaxSize2ForLCDText;
1490 } else {
1491 return rec.fTextSize > SK_MAX_SIZE_FOR_LCDTEXT;
1490 } 1492 }
1491 return size > gMaxSize2ForLCDText;
1492 } 1493 }
1493 1494
1494 /* 1495 /*
1495 * Return the scalar with only limited fractional precision. Used to consolidat e matrices 1496 * Return the scalar with only limited fractional precision. Used to consolidat e matrices
1496 * that vary only slightly when we create our key into the font cache, since th e font scaler 1497 * that vary only slightly when we create our key into the font cache, since th e font scaler
1497 * typically returns the same looking resuts for tiny changes in the matrix. 1498 * typically returns the same looking resuts for tiny changes in the matrix.
1498 */ 1499 */
1499 static SkScalar sk_relax(SkScalar x) { 1500 static SkScalar sk_relax(SkScalar x) {
1500 int n = sk_float_round2int(x * 1024); 1501 int n = sk_float_round2int(x * 1024);
1501 return n / 1024.0f; 1502 return n / 1024.0f;
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 } 1578 }
1578 } else { 1579 } else {
1579 rec->fFrameWidth = 0; 1580 rec->fFrameWidth = 0;
1580 rec->fMiterLimit = 0; 1581 rec->fMiterLimit = 0;
1581 rec->fStrokeJoin = 0; 1582 rec->fStrokeJoin = 0;
1582 } 1583 }
1583 1584
1584 rec->fMaskFormat = SkToU8(computeMaskFormat(paint)); 1585 rec->fMaskFormat = SkToU8(computeMaskFormat(paint));
1585 1586
1586 if (SkMask::kLCD16_Format == rec->fMaskFormat || SkMask::kLCD32_Format == re c->fMaskFormat) { 1587 if (SkMask::kLCD16_Format == rec->fMaskFormat || SkMask::kLCD32_Format == re c->fMaskFormat) {
1587 if (tooBigForLCD(*rec, checkPost2x2)) { 1588 if (too_big_for_lcd(*rec, checkPost2x2)) {
1588 rec->fMaskFormat = SkMask::kA8_Format; 1589 rec->fMaskFormat = SkMask::kA8_Format;
1589 flags |= SkScalerContext::kGenA8FromLCD_Flag; 1590 flags |= SkScalerContext::kGenA8FromLCD_Flag;
1590 } else { 1591 } else {
1591 SkPixelGeometry geometry = deviceProperties 1592 SkPixelGeometry geometry = deviceProperties
1592 ? deviceProperties->fPixelGeometry 1593 ? deviceProperties->fPixelGeometry
1593 : SkSurfacePropsDefaultPixelGeometry(); 1594 : SkSurfacePropsDefaultPixelGeometry();
1594 switch (geometry) { 1595 switch (geometry) {
1595 case kUnknown_SkPixelGeometry: 1596 case kUnknown_SkPixelGeometry:
1596 // eeek, can't support LCD 1597 // eeek, can't support LCD
1597 rec->fMaskFormat = SkMask::kA8_Format; 1598 rec->fMaskFormat = SkMask::kA8_Format;
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after
2575 return 0 == this->getAlpha(); 2576 return 0 == this->getAlpha();
2576 case SkXfermode::kDst_Mode: 2577 case SkXfermode::kDst_Mode:
2577 return true; 2578 return true;
2578 default: 2579 default:
2579 break; 2580 break;
2580 } 2581 }
2581 } 2582 }
2582 return false; 2583 return false;
2583 } 2584 }
2584 2585
OLDNEW
« no previous file with comments | « gm/lcdtext.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698