16930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com/*
26930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com * Copyright 2013 Google Inc.
36930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com *
46930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com * Use of this source code is governed by a BSD-style license that can be
56930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com * found in the LICENSE file.
66930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com */
76930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com
86930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com#include "SkFontConfigInterface.h"
94bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman#include "SkFontDescriptor.h"
106930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com#include "SkFontHost_FreeType_common.h"
114bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman#include "SkRefCnt.h"
12e027a6ed9b9e2a96be846ddefb2b06e350858eedreed@google.com#include "SkStream.h"
136930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com
146930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.comclass SkFontDescriptor;
156930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com
160265707c191a31dfde08dd1cd7011c1fe5b8e643bungemanclass SkTypeface_FCI : public SkTypeface_FreeType {
174bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman    sk_sp<SkFontConfigInterface> fFCI;
186930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com    SkFontConfigInterface::FontIdentity fIdentity;
196930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com    SkString fFamilyName;
204bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman    std::unique_ptr<SkFontData> fFontData;
216930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com
226930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.compublic:
231ae0e01accbca4b96a10b8a8c21917dd7bf27dc3bungeman    static SkTypeface_FCI* Create(sk_sp<SkFontConfigInterface> fci,
240265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman                                  const SkFontConfigInterface::FontIdentity& fi,
2525272300c308335f2d87c2a70e249965b268bcb0Ben Wagner                                  SkString familyName,
260265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman                                  const SkFontStyle& style)
270265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman    {
2825272300c308335f2d87c2a70e249965b268bcb0Ben Wagner        return new SkTypeface_FCI(std::move(fci), fi, std::move(familyName), style);
29c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org    }
306930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com
314bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman    static SkTypeface_FCI* Create(std::unique_ptr<SkFontData> data,
3225272300c308335f2d87c2a70e249965b268bcb0Ben Wagner                                  SkString familyName, SkFontStyle style, bool isFixedPitch)
330265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman    {
3425272300c308335f2d87c2a70e249965b268bcb0Ben Wagner        return new SkTypeface_FCI(std::move(data), std::move(familyName), style, isFixedPitch);
356930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com    }
366930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com
376930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com    const SkFontConfigInterface::FontIdentity& getIdentity() const {
386930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com        return fIdentity;
396930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com    }
406930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com
416930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.comprotected:
421ae0e01accbca4b96a10b8a8c21917dd7bf27dc3bungeman    SkTypeface_FCI(sk_sp<SkFontConfigInterface> fci,
430265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman                   const SkFontConfigInterface::FontIdentity& fi,
4425272300c308335f2d87c2a70e249965b268bcb0Ben Wagner                   SkString familyName,
450265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman                   const SkFontStyle& style)
46e3aea10428d1597838fd563c92340beaf969a9b4bungeman            : INHERITED(style, false)
471ae0e01accbca4b96a10b8a8c21917dd7bf27dc3bungeman            , fFCI(std::move(fci))
48c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org            , fIdentity(fi)
4925272300c308335f2d87c2a70e249965b268bcb0Ben Wagner            , fFamilyName(std::move(familyName))
504bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman            , fFontData(nullptr) {}
51c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org
5225272300c308335f2d87c2a70e249965b268bcb0Ben Wagner    SkTypeface_FCI(std::unique_ptr<SkFontData> data,
5325272300c308335f2d87c2a70e249965b268bcb0Ben Wagner                   SkString familyName, SkFontStyle style, bool isFixedPitch)
544bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman            : INHERITED(style, isFixedPitch)
5525272300c308335f2d87c2a70e249965b268bcb0Ben Wagner            , fFamilyName(std::move(familyName))
564bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman            , fFontData(std::move(data))
570265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman    {
584bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman        SkASSERT(fFontData);
594bb029cd9f7c00ac146df1f4c66d1ac5c078b78bbungeman        fIdentity.fTTCIndex = fFontData->getIndex();
60c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org    }
61c4df655b37aea7097d3007b299de582ba517ef16commit-bot@chromium.org
620265707c191a31dfde08dd1cd7011c1fe5b8e643bungeman    void onGetFamilyName(SkString* familyName) const override { *familyName = fFamilyName; }
6336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onGetFontDescriptor(SkFontDescriptor*, bool*) const override;
6436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkStreamAsset* onOpenStream(int* ttcIndex) const override;
65f93d71122e4fcfcdc674a0163455990b13855f2fbungeman    std::unique_ptr<SkFontData> onMakeFontData() const override;
666930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com
676930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.comprivate:
686930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com    typedef SkTypeface_FreeType INHERITED;
696930b57221ea7010dcab516559fa6bc5a0fb3807djsollen@google.com};
70