| OLD | NEW |
| 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 1520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1531 /* | 1531 /* |
| 1532 * Return the scalar with only limited fractional precision. Used to consolidat
e matrices | 1532 * Return the scalar with only limited fractional precision. Used to consolidat
e matrices |
| 1533 * that vary only slightly when we create our key into the font cache, since th
e font scaler | 1533 * that vary only slightly when we create our key into the font cache, since th
e font scaler |
| 1534 * typically returns the same looking resuts for tiny changes in the matrix. | 1534 * typically returns the same looking resuts for tiny changes in the matrix. |
| 1535 */ | 1535 */ |
| 1536 static SkScalar sk_relax(SkScalar x) { | 1536 static SkScalar sk_relax(SkScalar x) { |
| 1537 int n = sk_float_round2int(x * 1024); | 1537 int n = sk_float_round2int(x * 1024); |
| 1538 return n / 1024.0f; | 1538 return n / 1024.0f; |
| 1539 } | 1539 } |
| 1540 | 1540 |
| 1541 static SkPixelGeometry get_default_pixel_geometry() { |
| 1542 return SkSurfaceProps(SkSurfaceProps::kLegacyFontHost_InitType).pixelGeometr
y(); |
| 1543 } |
| 1544 |
| 1545 SkDeviceProperties::SkDeviceProperties(SkDeviceProperties::InitType) |
| 1546 : fPixelGeometry(get_default_pixel_geometry()) |
| 1547 {} |
| 1548 |
| 1541 void SkScalerContext::MakeRec(const SkPaint& paint, | 1549 void SkScalerContext::MakeRec(const SkPaint& paint, |
| 1542 const SkDeviceProperties* deviceProperties, | 1550 const SkDeviceProperties* deviceProperties, |
| 1543 const SkMatrix* deviceMatrix, | 1551 const SkMatrix* deviceMatrix, |
| 1544 Rec* rec) { | 1552 Rec* rec) { |
| 1545 SkASSERT(deviceMatrix == NULL || !deviceMatrix->hasPerspective()); | 1553 SkASSERT(deviceMatrix == NULL || !deviceMatrix->hasPerspective()); |
| 1546 | 1554 |
| 1547 SkTypeface* typeface = paint.getTypeface(); | 1555 SkTypeface* typeface = paint.getTypeface(); |
| 1548 if (NULL == typeface) { | 1556 if (NULL == typeface) { |
| 1549 typeface = SkTypeface::GetDefaultTypeface(); | 1557 typeface = SkTypeface::GetDefaultTypeface(); |
| 1550 } | 1558 } |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1600 flags |= SkScalerContext::kFrameAndFill_Flag; | 1608 flags |= SkScalerContext::kFrameAndFill_Flag; |
| 1601 } | 1609 } |
| 1602 } else { | 1610 } else { |
| 1603 rec->fFrameWidth = 0; | 1611 rec->fFrameWidth = 0; |
| 1604 rec->fMiterLimit = 0; | 1612 rec->fMiterLimit = 0; |
| 1605 rec->fStrokeJoin = 0; | 1613 rec->fStrokeJoin = 0; |
| 1606 } | 1614 } |
| 1607 | 1615 |
| 1608 rec->fMaskFormat = SkToU8(computeMaskFormat(paint)); | 1616 rec->fMaskFormat = SkToU8(computeMaskFormat(paint)); |
| 1609 | 1617 |
| 1610 SkDeviceProperties::Geometry geometry = deviceProperties | |
| 1611 ? deviceProperties->fGeometry | |
| 1612 : SkDeviceProperties::Geometry::MakeDe
fault(); | |
| 1613 if (SkMask::kLCD16_Format == rec->fMaskFormat || SkMask::kLCD32_Format == re
c->fMaskFormat) { | 1618 if (SkMask::kLCD16_Format == rec->fMaskFormat || SkMask::kLCD32_Format == re
c->fMaskFormat) { |
| 1614 if (!geometry.isOrientationKnown() || !geometry.isLayoutKnown() || tooBi
gForLCD(*rec)) { | 1619 if (tooBigForLCD(*rec)) { |
| 1615 // eeek, can't support LCD | |
| 1616 rec->fMaskFormat = SkMask::kA8_Format; | 1620 rec->fMaskFormat = SkMask::kA8_Format; |
| 1621 flags |= SkScalerContext::kGenA8FromLCD_Flag; |
| 1617 } else { | 1622 } else { |
| 1618 if (SkDeviceProperties::Geometry::kVertical_Orientation == geometry.
getOrientation()) { | 1623 SkPixelGeometry geometry = deviceProperties |
| 1619 flags |= SkScalerContext::kLCD_Vertical_Flag; | 1624 ? deviceProperties->fPixelGeometry |
| 1620 } | 1625 : get_default_pixel_geometry(); |
| 1621 if (SkDeviceProperties::Geometry::kBGR_Layout == geometry.getLayout(
)) { | 1626 switch (geometry) { |
| 1622 flags |= SkScalerContext::kLCD_BGROrder_Flag; | 1627 case kUnknown_SkPixelGeometry: |
| 1628 // eeek, can't support LCD |
| 1629 rec->fMaskFormat = SkMask::kA8_Format; |
| 1630 flags |= SkScalerContext::kGenA8FromLCD_Flag; |
| 1631 break; |
| 1632 case kRGB_H_SkPixelGeometry: |
| 1633 // our default, do nothing. |
| 1634 break; |
| 1635 case kBGR_H_SkPixelGeometry: |
| 1636 flags |= SkScalerContext::kLCD_BGROrder_Flag; |
| 1637 break; |
| 1638 case kRGB_V_SkPixelGeometry: |
| 1639 flags |= SkScalerContext::kLCD_Vertical_Flag; |
| 1640 break; |
| 1641 case kBGR_V_SkPixelGeometry: |
| 1642 flags |= SkScalerContext::kLCD_Vertical_Flag; |
| 1643 flags |= SkScalerContext::kLCD_BGROrder_Flag; |
| 1644 break; |
| 1623 } | 1645 } |
| 1624 } | 1646 } |
| 1625 } | 1647 } |
| 1626 | 1648 |
| 1627 if (paint.isEmbeddedBitmapText()) { | 1649 if (paint.isEmbeddedBitmapText()) { |
| 1628 flags |= SkScalerContext::kEmbeddedBitmapText_Flag; | 1650 flags |= SkScalerContext::kEmbeddedBitmapText_Flag; |
| 1629 } | 1651 } |
| 1630 if (paint.isSubpixelText()) { | 1652 if (paint.isSubpixelText()) { |
| 1631 flags |= SkScalerContext::kSubpixelPositioning_Flag; | 1653 flags |= SkScalerContext::kSubpixelPositioning_Flag; |
| 1632 } | 1654 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1643 | 1665 |
| 1644 // these modify fFlags, so do them after assigning fFlags | 1666 // these modify fFlags, so do them after assigning fFlags |
| 1645 rec->setHinting(computeHinting(paint)); | 1667 rec->setHinting(computeHinting(paint)); |
| 1646 | 1668 |
| 1647 rec->setLuminanceColor(computeLuminanceColor(paint)); | 1669 rec->setLuminanceColor(computeLuminanceColor(paint)); |
| 1648 | 1670 |
| 1649 if (NULL == deviceProperties) { | 1671 if (NULL == deviceProperties) { |
| 1650 rec->setDeviceGamma(SK_GAMMA_EXPONENT); | 1672 rec->setDeviceGamma(SK_GAMMA_EXPONENT); |
| 1651 rec->setPaintGamma(SK_GAMMA_EXPONENT); | 1673 rec->setPaintGamma(SK_GAMMA_EXPONENT); |
| 1652 } else { | 1674 } else { |
| 1653 rec->setDeviceGamma(deviceProperties->fGamma); | 1675 rec->setDeviceGamma(deviceProperties->getGamma()); |
| 1654 | 1676 |
| 1655 //For now always set the paint gamma equal to the device gamma. | 1677 //For now always set the paint gamma equal to the device gamma. |
| 1656 //The math in SkMaskGamma can handle them being different, | 1678 //The math in SkMaskGamma can handle them being different, |
| 1657 //but it requires superluminous masks when | 1679 //but it requires superluminous masks when |
| 1658 //Ex : deviceGamma(x) < paintGamma(x) and x is sufficiently large. | 1680 //Ex : deviceGamma(x) < paintGamma(x) and x is sufficiently large. |
| 1659 rec->setPaintGamma(deviceProperties->fGamma); | 1681 rec->setPaintGamma(deviceProperties->getGamma()); |
| 1660 } | 1682 } |
| 1661 | 1683 |
| 1662 #ifdef SK_GAMMA_CONTRAST | 1684 #ifdef SK_GAMMA_CONTRAST |
| 1663 rec->setContrast(SK_GAMMA_CONTRAST); | 1685 rec->setContrast(SK_GAMMA_CONTRAST); |
| 1664 #else | 1686 #else |
| 1665 /** | 1687 /** |
| 1666 * A value of 0.5 for SK_GAMMA_CONTRAST appears to be a good compromise. | 1688 * A value of 0.5 for SK_GAMMA_CONTRAST appears to be a good compromise. |
| 1667 * With lower values small text appears washed out (though correctly so). | 1689 * With lower values small text appears washed out (though correctly so). |
| 1668 * With higher values lcd fringing is worse and the smoothing effect of | 1690 * With higher values lcd fringing is worse and the smoothing effect of |
| 1669 * partial coverage is diminished. | 1691 * partial coverage is diminished. |
| (...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2674 F_UNREF(Looper, readDrawLooper); | 2696 F_UNREF(Looper, readDrawLooper); |
| 2675 F_UNREF(ImageFilter, readImageFilter); | 2697 F_UNREF(ImageFilter, readImageFilter); |
| 2676 F(Typeface, readTypeface); | 2698 F(Typeface, readTypeface); |
| 2677 #undef F | 2699 #undef F |
| 2678 #undef F_UNREF | 2700 #undef F_UNREF |
| 2679 if (dirty & kAnnotation_DirtyBit) { | 2701 if (dirty & kAnnotation_DirtyBit) { |
| 2680 paint->setAnnotation(SkAnnotation::Create(buffer))->unref(); | 2702 paint->setAnnotation(SkAnnotation::Create(buffer))->unref(); |
| 2681 } | 2703 } |
| 2682 SkASSERT(dirty == paint->fDirtyBits); | 2704 SkASSERT(dirty == paint->fDirtyBits); |
| 2683 } | 2705 } |
| OLD | NEW |