add alignment and lcd to SkFont (for now)
... both of these should be removed eventually. See related bugs to 2664
Bug: skia:2664
Change-Id: I49cd78380d84e5383a2a2742fa4dda98cf3d0194
Reviewed-on: https://skia-review.googlesource.com/c/164689
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Reed <reed@google.com>
diff --git a/include/core/SkFont.h b/include/core/SkFont.h
index 8a1219b..19b2a58 100644
--- a/include/core/SkFont.h
+++ b/include/core/SkFont.h
@@ -9,10 +9,9 @@
#define SkFont_DEFINED
#include "SkScalar.h"
-#include "SkRefCnt.h"
+#include "SkTypeface.h"
class SkPaint;
-class SkTypeface;
enum SkTextEncoding {
kUTF8_SkTextEncoding,
@@ -44,10 +43,12 @@
kHinting_FlagMask = 3, // 2 bits
kDEPRECATED_Antialias_Flag = 1 << 7, // want to rely on paint for this
+ kDEPRECATED_LCDRender_Flag = 1 << 8, // and this
};
SkFont(sk_sp<SkTypeface>, SkScalar size, uint32_t flags);
- SkFont(sk_sp<SkTypeface>, SkScalar size, SkScalar scaleX, SkScalar skewX, uint32_t flags);
+ SkFont(sk_sp<SkTypeface>, SkScalar size, SkScalar scaleX, SkScalar skewX, uint32_t flags,
+ int align = 0);
/**
* Return a font with the same attributes of this font, but with the specified size.
@@ -87,13 +88,14 @@
static SkFont LEGACY_ExtractFromPaint(const SkPaint&);
private:
- static constexpr unsigned kAllFlags = 0xFF;
+ static constexpr unsigned kAllFlags = 0x01FF;
sk_sp<SkTypeface> fTypeface;
SkScalar fSize;
SkScalar fScaleX;
SkScalar fSkewX;
- uint32_t fFlags;
+ uint16_t fFlags;
+ uint8_t fAlign; // try to remove this
};
#endif
diff --git a/src/core/SkFont.cpp b/src/core/SkFont.cpp
index b00dd1f..7f43d55 100644
--- a/src/core/SkFont.cpp
+++ b/src/core/SkFont.cpp
@@ -12,17 +12,15 @@
#include "SkUTF.h"
SkFont::SkFont(sk_sp<SkTypeface> face, SkScalar size, SkScalar scaleX, SkScalar skewX,
- uint32_t flags)
+ uint32_t flags, int align)
: fTypeface(face ? std::move(face) : SkTypeface::MakeDefault())
- , fSize(size)
+ , fSize(SkTMax<SkScalar>(0, size))
, fScaleX(scaleX)
, fSkewX(skewX)
- , fFlags(flags)
+ , fFlags(flags & kAllFlags)
+ , fAlign(SkToU8(align))
{
- SkASSERT(size > 0);
- SkASSERT(scaleX > 0);
- SkASSERT(SkScalarIsFinite(skewX));
- SkASSERT(0 == (flags & ~kAllFlags));
+ SkASSERT(align >= 0 && align <= 2);
}
SkFont::SkFont(sk_sp<SkTypeface> face, SkScalar size, uint32_t flags)
@@ -98,6 +96,11 @@
#include "SkPaint.h"
void SkFont::LEGACY_applyToPaint(SkPaint* paint) const {
+ paint->setTypeface(fTypeface);
+ paint->setTextSize(fSize);
+ paint->setTextScaleX(fScaleX);
+ paint->setTextSkewX(fSkewX);
+
paint->setEmbeddedBitmapText(SkToBool(fFlags & kEmbeddedBitmaps_Flag));
paint->setFakeBoldText(SkToBool(fFlags & kEmbolden_Flag));
paint->setAutohinted(SkToBool(fFlags & kForceAutoHinting_Flag));
@@ -108,6 +111,9 @@
paint->setHinting((SkPaint::Hinting)hinting);
paint->setAntiAlias(SkToBool(fFlags & kDEPRECATED_Antialias_Flag));
+ paint->setLCDRenderText(SkToBool(fFlags & kDEPRECATED_LCDRender_Flag));
+
+ paint->setTextAlign((SkPaint::Align)fAlign);
}
SkFont SkFont::LEGACY_ExtractFromPaint(const SkPaint& paint) {
@@ -131,10 +137,13 @@
if (paint.isAntiAlias()) {
flags |= kDEPRECATED_Antialias_Flag;
}
+ if (paint.isLCDRenderText()) {
+ flags |= kDEPRECATED_LCDRender_Flag;
+ }
unsigned hinting = (unsigned)paint.getHinting();
flags |= (hinting << kHinting_FlagShift);
return SkFont(sk_ref_sp(paint.getTypeface()), paint.getTextSize(), paint.getTextScaleX(),
- paint.getTextSkewX(), flags);
+ paint.getTextSkewX(), flags, (int)paint.getTextAlign());
}