move fontmgr into include/ports for now



git-svn-id: http://skia.googlecode.com/svn/trunk/include@8370 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/ports/SkFontMgr.h b/ports/SkFontMgr.h
new file mode 100644
index 0000000..b3d3813
--- /dev/null
+++ b/ports/SkFontMgr.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkFontMgr_DEFINED
+#define SkFontMgr_DEFINED
+
+#include "SkRefCnt.h"
+#include "SkFontStyle.h"
+
+class SkData;
+class SkStream;
+class SkString;
+
+class SkFontStyleSet : public SkRefCnt {
+public:
+    int count() const;
+    void getStyle(int index, SkFontStyle*) const;
+    SkTypeface* createTypeface(int index) const;
+};
+
+class SkFontFamilySet : public SkRefCnt {
+public:
+    int count() const;
+    void getName(int index, SkString* familyName) const;
+    SkFontStyleSet* refStyleSet(int index) const;
+};
+
+class SkFontMgr : public SkRefCnt {
+public:
+    /**
+     *  Return a fontfamily set, which can iterate all of the font families
+     *  available to this fontmgr. The caller is responsible for calling unref()
+     *  on the returned object. Will never return NULL.
+     */
+    SkFontFamilySet* createFamilySet();
+
+    /**
+     *  Find the closest matching typeface to the specified familyName and style
+     *  and return a ref to it. The caller must call unref() on the returned
+     *  object. Will never return NULL, as it will return the default font if
+     *  no matching font is found.
+     */
+    SkTypeface* matchFamilyStyle(const char familyName[], const SkFontStyle&);
+
+    /**
+     *  Create a typeface for the specified data and TTC index (pass 0 for none)
+     *  or NULL if the data is not recognized. The caller must call unref() on
+     *  the returned object if it is not null.
+     */
+    SkTypeface* createFromData(SkData*, int ttcIndex = 0);
+
+    /**
+     *  Create a typeface for the specified stream and TTC index
+     *  (pass 0 for none) or NULL if the stream is not recognized. The caller
+     *  must call unref() on the returned object if it is not null.
+     */
+    SkTypeface* createFromStream(SkStream*, int ttcIndex = 0);
+
+    /**
+     *  Create a typeface for the specified fileName and TTC index
+     *  (pass 0 for none) or NULL if the file is not found, or its contents are
+     *  not recognized. The caller must call unref() on the returned object
+     *  if it is not null.
+     */
+    SkTypeface* createFromFile(const char path[], int ttcIndex = 0);
+
+private:
+    typedef SkRefCnt INHERITED;
+};
+
+#endif
diff --git a/ports/SkFontStyle.h b/ports/SkFontStyle.h
new file mode 100644
index 0000000..f145a6e
--- /dev/null
+++ b/ports/SkFontStyle.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkFontMgr_DEFINED
+#define SkFontMgr_DEFINED
+
+#include "SkTypes.h"
+
+class SkFontStyle {
+public:
+    enum Weight {
+        kThin_Weight        = 100,
+        kExtraLight_Weight  = 200,
+        kLight_Weight       = 300,
+        kNormal_Weight      = 400,
+        kMedium_Weight      = 500,
+        kSemiBold_Weight    = 600,
+        kBold_Weight        = 700,
+        kExtraBold_Weight   = 800,
+        kBlack_Weight       = 900
+    };
+
+    enum Width {
+        kUltraCondensed_Width   = 1,
+        kExtraCondensed_Width   = 2,
+        kCondensed_Width        = 3,
+        kSemiCondensed_Width    = 4,
+        kNormal_Width           = 5,
+        kSemiExpanded_Width     = 6,
+        kExpanded_Width         = 7,
+        kExtraExpanded_Width    = 8,
+        kUltaExpanded_Width     = 9
+    };
+
+    enum Slant {
+        kUpright_Slant,
+        kItalic_Slant,
+    };
+
+    SkFontStyle();
+    SkFontStyle(int weight, int width, Slant);
+
+    bool operator==(const SkFontStyle& rhs) const {
+        return fUnion.fU32 == rhs.fUnion.fU32;
+    }
+
+    int weight() const { return fUnion.fR.fWeight; }
+    int width() const { return fUnion.fR.fWidth; }
+
+    bool isItalic() const {
+        return kItalic_Slant == fUnion.fR.fSlant;
+    }
+
+private:
+    union {
+        struct {
+            uint16_t fWeight;   // 100 .. 900
+            uint8_t  fWidth;    // 1 .. 9
+            uint8_t  fSlant;    // 0 .. 2
+        } fR;
+        uint32_t    fU32;
+    } fUnion;
+};
+
+#endif