17839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger/*
27839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Copyright 2013 Google Inc.
37839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger *
47839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * Use of this source code is governed by a BSD-style license that can be
57839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger * found in the LICENSE file.
67839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger */
77839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
87839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#ifndef SkFontStyle_DEFINED
97839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#define SkFontStyle_DEFINED
107839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
117839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#include "SkTypes.h"
127839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
137839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerclass SK_API SkFontStyle {
147839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerpublic:
157839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    enum Weight {
167839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kThin_Weight        = 100,
177839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kExtraLight_Weight  = 200,
187839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kLight_Weight       = 300,
197839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kNormal_Weight      = 400,
207839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kMedium_Weight      = 500,
217839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kSemiBold_Weight    = 600,
227839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kBold_Weight        = 700,
237839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kExtraBold_Weight   = 800,
247839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kBlack_Weight       = 900
257839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    };
267839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
277839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    enum Width {
287839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kUltraCondensed_Width   = 1,
297839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kExtraCondensed_Width   = 2,
307839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kCondensed_Width        = 3,
317839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kSemiCondensed_Width    = 4,
327839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kNormal_Width           = 5,
337839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kSemiExpanded_Width     = 6,
347839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kExpanded_Width         = 7,
357839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kExtraExpanded_Width    = 8,
367839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kUltaExpanded_Width     = 9
377839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    };
387839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
397839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    enum Slant {
407839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kUpright_Slant,
417839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        kItalic_Slant,
427839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    };
437839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
447839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkFontStyle();
457839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    SkFontStyle(int weight, int width, Slant);
467839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
477839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    bool operator==(const SkFontStyle& rhs) const {
487839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        return fUnion.fU32 == rhs.fUnion.fU32;
497839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    }
507839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
517839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    int weight() const { return fUnion.fR.fWeight; }
527839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    int width() const { return fUnion.fR.fWidth; }
537839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    Slant slant() const { return (Slant)fUnion.fR.fSlant; }
547839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
557839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    bool isItalic() const {
567839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        return kItalic_Slant == fUnion.fR.fSlant;
577839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    }
587839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
597839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenbergerprivate:
607839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    union {
617839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        struct {
627839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger            uint16_t fWeight;   // 100 .. 900
637839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger            uint8_t  fWidth;    // 1 .. 9
647839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger            uint8_t  fSlant;    // 0 .. 2
657839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        } fR;
667839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger        uint32_t    fU32;
677839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger    } fUnion;
687839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger};
697839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger
707839ce1af63bf12fe7b3caa866970bbbb3afb13dDerek Sollenberger#endif
71