1096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger/*
2096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Copyright 2013 Google Inc.
3096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger *
4096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
5096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * found in the LICENSE file.
6096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger */
7096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
8096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#ifndef SkTypefacePriv_DEFINED
9096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#define SkTypefacePriv_DEFINED
10096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
11096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#include "SkTypeface.h"
12096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
13096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger/**
14096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger *  Return a ref'd typeface, which must later be unref'd
15096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger *
16096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger *  If the parameter is non-null, it will be ref'd and returned, otherwise
17096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger *  it will be the default typeface.
18096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger */
19096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerstatic inline SkTypeface* ref_or_default(SkTypeface* face) {
20096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    return face ? SkRef(face) : SkTypeface::RefDefault();
21096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}
22096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
23096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger/**
24096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger *  Always resolves to a non-null typeface, either the value passed to its
25096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger *  constructor, or the default typeface if null was passed.
26096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger */
27096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerclass SkAutoResolveDefaultTypeface : public SkAutoTUnref<SkTypeface> {
28096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerpublic:
29096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkAutoResolveDefaultTypeface() : INHERITED(SkTypeface::RefDefault()) {}
30096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
31096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkAutoResolveDefaultTypeface(SkTypeface* face)
32096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger        : INHERITED(ref_or_default(face)) {}
33096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
34096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerprivate:
35096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    typedef SkAutoTUnref<SkTypeface> INHERITED;
36096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger};
37096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
38096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#endif
39