Chromium Code Reviews| Index: src/core/SkPaint.cpp |
| diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp |
| index 88bde227044a76b702a7a6be0f010b48b0b33928..a90346e57dfcd9e4240c49e2a388f3ecf5cfd372 100644 |
| --- a/src/core/SkPaint.cpp |
| +++ b/src/core/SkPaint.cpp |
| @@ -1538,6 +1538,14 @@ static SkScalar sk_relax(SkScalar x) { |
| return n / 1024.0f; |
| } |
| +static SkPixelGeometry get_default_pixel_geometry() { |
| + return SkSurfaceProps(SkSurfaceProps::kLegacyFontHost_InitType).pixelGeometry(); |
| +} |
| + |
| +SkDeviceProperties::SkDeviceProperties(SkDeviceProperties::InitType) |
|
bungeman-skia
2014/09/19 18:29:51
This is only used by SkBaseDevice, why is it here?
reed1
2014/09/19 19:16:34
will remove
|
| + : fPixelGeometry(get_default_pixel_geometry()) |
| +{} |
| + |
| void SkScalerContext::MakeRec(const SkPaint& paint, |
| const SkDeviceProperties* deviceProperties, |
| const SkMatrix* deviceMatrix, |
| @@ -1607,19 +1615,33 @@ void SkScalerContext::MakeRec(const SkPaint& paint, |
| rec->fMaskFormat = SkToU8(computeMaskFormat(paint)); |
| - SkDeviceProperties::Geometry geometry = deviceProperties |
| - ? deviceProperties->fGeometry |
| - : SkDeviceProperties::Geometry::MakeDefault(); |
| if (SkMask::kLCD16_Format == rec->fMaskFormat || SkMask::kLCD32_Format == rec->fMaskFormat) { |
| - if (!geometry.isOrientationKnown() || !geometry.isLayoutKnown() || tooBigForLCD(*rec)) { |
| - // eeek, can't support LCD |
| + if (tooBigForLCD(*rec)) { |
| rec->fMaskFormat = SkMask::kA8_Format; |
| + flags |= SkScalerContext::kGenA8FromLCD_Flag; |
| } else { |
| - if (SkDeviceProperties::Geometry::kVertical_Orientation == geometry.getOrientation()) { |
| - flags |= SkScalerContext::kLCD_Vertical_Flag; |
| - } |
| - if (SkDeviceProperties::Geometry::kBGR_Layout == geometry.getLayout()) { |
| - flags |= SkScalerContext::kLCD_BGROrder_Flag; |
| + SkPixelGeometry geometry = deviceProperties |
| + ? deviceProperties->fPixelGeometry |
|
bungeman-skia
2014/09/19 18:29:51
nit: this '?' and ':' should line up with the '='
reed1
2014/09/19 19:16:34
Done.
|
| + : get_default_pixel_geometry(); |
| + switch (geometry) { |
| + case kUnknown_SkPixelGeometry: |
| + // eeek, can't support LCD |
| + rec->fMaskFormat = SkMask::kA8_Format; |
| + flags |= SkScalerContext::kGenA8FromLCD_Flag; |
| + break; |
| + case kRGB_H_SkPixelGeometry: |
| + // our default, do nothing. |
| + break; |
| + case kBGR_H_SkPixelGeometry: |
| + flags |= SkScalerContext::kLCD_BGROrder_Flag; |
| + break; |
| + case kRGB_V_SkPixelGeometry: |
| + flags |= SkScalerContext::kLCD_Vertical_Flag; |
| + break; |
| + case kBGR_V_SkPixelGeometry: |
| + flags |= SkScalerContext::kLCD_Vertical_Flag; |
| + flags |= SkScalerContext::kLCD_BGROrder_Flag; |
| + break; |
| } |
| } |
| } |
| @@ -1650,13 +1672,13 @@ void SkScalerContext::MakeRec(const SkPaint& paint, |
| rec->setDeviceGamma(SK_GAMMA_EXPONENT); |
| rec->setPaintGamma(SK_GAMMA_EXPONENT); |
| } else { |
| - rec->setDeviceGamma(deviceProperties->fGamma); |
| + rec->setDeviceGamma(deviceProperties->getGamma()); |
| //For now always set the paint gamma equal to the device gamma. |
| //The math in SkMaskGamma can handle them being different, |
| //but it requires superluminous masks when |
| //Ex : deviceGamma(x) < paintGamma(x) and x is sufficiently large. |
| - rec->setPaintGamma(deviceProperties->fGamma); |
| + rec->setPaintGamma(deviceProperties->getGamma()); |
| } |
| #ifdef SK_GAMMA_CONTRAST |