aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Reed <reed@google.com>2018-10-22 14:24:07 -0400
committerSkia Commit-Bot <skia-commit-bot@chromium.org>2018-10-22 18:48:19 +0000
commitfe4fc148546b656a5fa139e565f3b92deff0c764 (patch)
tree45103e5099b3127352461523cd5aa33dcb11fb16 /src
parentb7f0b9cd5c624544c8e622117a688123cafb7d31 (diff)
downloadskqp-fe4fc148546b656a5fa139e565f3b92deff0c764.tar.gz
Change SkFont to match needs of textblob
Tentative roadmap: - land this - extend TextBlobBuilder to take SkFont for its runs (eventually removing paint option) - change SkTextBlob to store SkFont instead of SkRunFont (not critical, but makes sense) After the above, (or during) also work towards: - removing callers of SkPaint set... (textsize, textscalex, typeface, etc.) - eventually physically remove those setters/getters/fields - rev as desired the SkFont API to clean up flags, hinting, etc. Bug: skia:2664 Change-Id: I0e323c58aef055e26d697911b078797453cb3626 Reviewed-on: https://skia-review.googlesource.com/c/163783 Commit-Queue: Mike Reed <reed@google.com> Auto-Submit: Mike Reed <reed@google.com> Reviewed-by: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/SkFont.cpp73
1 files changed, 33 insertions, 40 deletions
diff --git a/src/core/SkFont.cpp b/src/core/SkFont.cpp
index f9423a27e0..821c020c58 100644
--- a/src/core/SkFont.cpp
+++ b/src/core/SkFont.cpp
@@ -11,14 +11,13 @@
#include "SkTypeface.h"
#include "SkUTF.h"
-SkFont::SkFont(sk_sp<SkTypeface> face, SkScalar size, SkScalar scaleX, SkScalar skewX, MaskType mt,
+SkFont::SkFont(sk_sp<SkTypeface> face, SkScalar size, SkScalar scaleX, SkScalar skewX,
uint32_t flags)
: fTypeface(face ? std::move(face) : SkTypeface::MakeDefault())
, fSize(size)
, fScaleX(scaleX)
, fSkewX(skewX)
, fFlags(flags)
- , fMaskType(SkToU8(mt))
{
SkASSERT(size > 0);
SkASSERT(scaleX > 0);
@@ -26,33 +25,15 @@ SkFont::SkFont(sk_sp<SkTypeface> face, SkScalar size, SkScalar scaleX, SkScalar
SkASSERT(0 == (flags & ~kAllFlags));
}
-sk_sp<SkFont> SkFont::Make(sk_sp<SkTypeface> face, SkScalar size, SkScalar scaleX, SkScalar skewX,
- MaskType mt, uint32_t flags) {
- if (size <= 0 || !SkScalarIsFinite(size)) {
- return nullptr;
- }
- if (scaleX <= 0 || !SkScalarIsFinite(scaleX)) {
- return nullptr;
- }
- if (!SkScalarIsFinite(skewX)) {
- return nullptr;
- }
- flags &= kAllFlags;
- return sk_sp<SkFont>(new SkFont(std::move(face), size, scaleX, skewX, mt, flags));
-}
+SkFont::SkFont(sk_sp<SkTypeface> face, SkScalar size, uint32_t flags)
+ : SkFont(std::move(face), size, 1, 0, flags) {}
-sk_sp<SkFont> SkFont::Make(sk_sp<SkTypeface> face, SkScalar size, MaskType mt, uint32_t flags) {
- return SkFont::Make(std::move(face), size, 1, 0, mt, flags);
+SkFont SkFont::makeWithSize(SkScalar newSize) const {
+ return {this->refTypeface(), newSize, this->getScaleX(), this->getSkewX(), this->getFlags()};
}
-sk_sp<SkFont> SkFont::makeWithSize(SkScalar newSize) const {
- return SkFont::Make(sk_ref_sp(this->getTypeface()), newSize, this->getScaleX(),
- this->getSkewX(), this->getMaskType(), this->getFlags());
-}
-
-sk_sp<SkFont> SkFont::makeWithFlags(uint32_t newFlags) const {
- return SkFont::Make(sk_ref_sp(this->getTypeface()), this->getSize(), this->getScaleX(),
- this->getSkewX(), this->getMaskType(), newFlags);
+SkFont SkFont::makeWithFlags(uint32_t newFlags) const {
+ return {this->refTypeface(), this->getSize(), this->getScaleX(), this->getSkewX(), newFlags};
}
///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -116,7 +97,20 @@ SkScalar SkFont::measureText(const void* text, size_t byteLength, SkTextEncoding
#include "SkPaint.h"
-sk_sp<SkFont> SkFont::Testing_CreateFromPaint(const SkPaint& paint) {
+void SkFont::LEGACY_applyToPaint(SkPaint* paint) const {
+ paint->setEmbeddedBitmapText(SkToBool(fFlags & kEmbeddedBitmaps_Flag));
+ paint->setFakeBoldText(SkToBool(fFlags & kEmbolden_Flag));
+ paint->setAutohinted(SkToBool(fFlags & kForceAutoHinting_Flag));
+ paint->setSubpixelText(SkToBool(fFlags & kSubpixel_Flag));
+ paint->setLinearText(SkToBool(fFlags & kLinearMetrics_Flag));
+
+ unsigned hinting = (fFlags >> kHinting_FlagShift) & kHinting_FlagMask;
+ paint->setHinting((SkPaint::Hinting)hinting);
+
+ paint->setAntiAlias(SkToBool(fFlags & kDEPRECATED_Antialias_Flag));
+}
+
+SkFont SkFont::LEGACY_ExtractFromPaint(const SkPaint& paint) {
uint32_t flags = 0;
if (paint.isVerticalText()) {
flags |= kVertical_Flag;
@@ -127,24 +121,23 @@ sk_sp<SkFont> SkFont::Testing_CreateFromPaint(const SkPaint& paint) {
if (paint.isFakeBoldText()) {
flags |= kEmbolden_Flag;
}
-
- if (SkPaint::kFull_Hinting == paint.getHinting()) {
- flags |= kEnableByteCodeHints_Flag;
- }
if (paint.isAutohinted()) {
- flags |= kEnableAutoHints_Flag;
+ flags |= kForceAutoHinting_Flag;
+ }
+ if (paint.isSubpixelText()) {
+ flags |= kSubpixel_Flag;
}
- if (paint.isSubpixelText() || paint.isLinearText()) {
- // this is our default
- } else {
- flags |= kUseNonlinearMetrics_Flag;
+ if (paint.isLinearText()) {
+ flags |= kLinearMetrics_Flag;
}
- MaskType maskType = SkFont::kBW_MaskType;
if (paint.isAntiAlias()) {
- maskType = paint.isLCDRenderText() ? kLCD_MaskType : kA8_MaskType;
+ flags |= kDEPRECATED_Antialias_Flag;
}
- return Make(sk_ref_sp(paint.getTypeface()), paint.getTextSize(), paint.getTextScaleX(),
- paint.getTextSkewX(), maskType, flags);
+ unsigned hinting = (unsigned)paint.getHinting();
+ flags |= (hinting << kHinting_FlagShift);
+
+ return SkFont(sk_ref_sp(paint.getTypeface()), paint.getTextSize(), paint.getTextScaleX(),
+ paint.getTextSkewX(), flags);
}