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());
 }