FontFamily.java revision d573794d83a049fe59e289944f0cd77406dd776a
11a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien/*
21a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien * Copyright (C) 2014 The Android Open Source Project
31a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien *
41a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien * Licensed under the Apache License, Version 2.0 (the "License");
51a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien * you may not use this file except in compliance with the License.
61a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien * You may obtain a copy of the License at
71a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien *
81a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien *      http://www.apache.org/licenses/LICENSE-2.0
91a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien *
101a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien * Unless required by applicable law or agreed to in writing, software
111a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien * distributed under the License is distributed on an "AS IS" BASIS,
121a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien * See the License for the specific language governing permissions and
141a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien * limitations under the License.
151a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien */
161a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien
171a73f732f91e97c9c66b808c245ddda36a10e987Raph Levienpackage android.graphics;
181a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien
19d573794d83a049fe59e289944f0cd77406dd776aRaph Levienimport android.content.res.AssetManager;
20d573794d83a049fe59e289944f0cd77406dd776aRaph Levien
211a73f732f91e97c9c66b808c245ddda36a10e987Raph Levienimport java.io.File;
221a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien
231a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien/**
241a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien * A family of typefaces with different styles.
251a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien *
261a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien * @hide
271a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien */
281a73f732f91e97c9c66b808c245ddda36a10e987Raph Levienpublic class FontFamily {
299a5b61ccc83303ceeec2059f58c1977af9faa9e3Raph Levien    /**
309a5b61ccc83303ceeec2059f58c1977af9faa9e3Raph Levien     * @hide
319a5b61ccc83303ceeec2059f58c1977af9faa9e3Raph Levien     */
321a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien    public long mNativePtr;
339a5b61ccc83303ceeec2059f58c1977af9faa9e3Raph Levien
341a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien    public FontFamily() {
35f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien        mNativePtr = nCreateFamily(null, 0);
369a5b61ccc83303ceeec2059f58c1977af9faa9e3Raph Levien        if (mNativePtr == 0) {
37f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien            throw new IllegalStateException("error creating native FontFamily");
38f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien        }
39f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien    }
40f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien
41f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien    public FontFamily(String lang, String variant) {
42f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien        int varEnum = 0;
43f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien        if ("compact".equals(variant)) {
44f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien            varEnum = 1;
45f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien        } else if ("elegant".equals(variant)) {
46f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien            varEnum = 2;
47f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien        }
48f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien        mNativePtr = nCreateFamily(lang, varEnum);
49f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien        if (mNativePtr == 0) {
50f9e3d311275c37fe5f2562993687a1627780a6d0Raph Levien            throw new IllegalStateException("error creating native FontFamily");
519a5b61ccc83303ceeec2059f58c1977af9faa9e3Raph Levien        }
521a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien    }
5315cf4757dc0099301662f8a26da561434cc07cfaRaph Levien
5415cf4757dc0099301662f8a26da561434cc07cfaRaph Levien    @Override
5515cf4757dc0099301662f8a26da561434cc07cfaRaph Levien    protected void finalize() throws Throwable {
5615cf4757dc0099301662f8a26da561434cc07cfaRaph Levien        try {
5715cf4757dc0099301662f8a26da561434cc07cfaRaph Levien            nUnrefFamily(mNativePtr);
5815cf4757dc0099301662f8a26da561434cc07cfaRaph Levien        } finally {
5915cf4757dc0099301662f8a26da561434cc07cfaRaph Levien            super.finalize();
6015cf4757dc0099301662f8a26da561434cc07cfaRaph Levien        }
6115cf4757dc0099301662f8a26da561434cc07cfaRaph Levien    }
621a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien
63d573794d83a049fe59e289944f0cd77406dd776aRaph Levien    public boolean addFont(String path) {
64d573794d83a049fe59e289944f0cd77406dd776aRaph Levien        return nAddFont(mNativePtr, path);
65d573794d83a049fe59e289944f0cd77406dd776aRaph Levien    }
66d573794d83a049fe59e289944f0cd77406dd776aRaph Levien
67d573794d83a049fe59e289944f0cd77406dd776aRaph Levien    public boolean addFontFromAsset(AssetManager mgr, String path) {
68d573794d83a049fe59e289944f0cd77406dd776aRaph Levien        return nAddFontFromAsset(mNativePtr, mgr, path);
691a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien    }
701a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien
71d573794d83a049fe59e289944f0cd77406dd776aRaph Levien    private static native long nCreateFamily(String lang, int variant);
72d573794d83a049fe59e289944f0cd77406dd776aRaph Levien    private static native void nUnrefFamily(long nativePtr);
73d573794d83a049fe59e289944f0cd77406dd776aRaph Levien    private static native boolean nAddFont(long nativeFamily, String path);
74d573794d83a049fe59e289944f0cd77406dd776aRaph Levien    private static native boolean nAddFontFromAsset(long nativeFamily, AssetManager mgr,
75d573794d83a049fe59e289944f0cd77406dd776aRaph Levien            String path);
761a73f732f91e97c9c66b808c245ddda36a10e987Raph Levien}
77