19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.AssetManager;
2046926698996d3857a650ed535024a88dbeaff1e1Romain Guyimport android.util.SparseArray;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
22a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guyimport java.io.File;
23a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Typeface class specifies the typeface and intrinsic style of a font.
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is used in the paint, along with optionally Paint settings like
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * textSize, textSkewX, textScaleX to specify
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * how text appears when drawn (and measured).
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Typeface {
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** The default NORMAL typeface object */
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Typeface DEFAULT;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The default BOLD typeface object. Note: this may be not actually be
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * bold, depending on what fonts are installed. Call getStyle() to know
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * for sure.
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Typeface DEFAULT_BOLD;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** The NORMAL style of the default sans serif typeface. */
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Typeface SANS_SERIF;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** The NORMAL style of the default serif typeface. */
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Typeface SERIF;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** The NORMAL style of the default monospace typeface. */
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Typeface MONOSPACE;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4746926698996d3857a650ed535024a88dbeaff1e1Romain Guy    static Typeface[] sDefaults;
4846926698996d3857a650ed535024a88dbeaff1e1Romain Guy    private static final SparseArray<SparseArray<Typeface>> sTypefaceCache =
4946926698996d3857a650ed535024a88dbeaff1e1Romain Guy            new SparseArray<SparseArray<Typeface>>(3);
5046926698996d3857a650ed535024a88dbeaff1e1Romain Guy
5146926698996d3857a650ed535024a88dbeaff1e1Romain Guy    int native_instance;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // Style
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int NORMAL = 0;
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BOLD = 1;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ITALIC = 2;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int BOLD_ITALIC = 3;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5946926698996d3857a650ed535024a88dbeaff1e1Romain Guy    private int mStyle = 0;
6046926698996d3857a650ed535024a88dbeaff1e1Romain Guy
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Returns the typeface's intrinsic style attributes */
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getStyle() {
6346926698996d3857a650ed535024a88dbeaff1e1Romain Guy        return mStyle;
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Returns true if getStyle() has the BOLD bit set. */
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final boolean isBold() {
6846926698996d3857a650ed535024a88dbeaff1e1Romain Guy        return (mStyle & BOLD) != 0;
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Returns true if getStyle() has the ITALIC bit set. */
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final boolean isItalic() {
7346926698996d3857a650ed535024a88dbeaff1e1Romain Guy        return (mStyle & ITALIC) != 0;
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a typeface object given a family name, and option style information.
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * If null is passed for the name, then the "default" font will be chosen.
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The resulting typeface object can be queried (getStyle()) to discover what
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * its "real" style characteristics are.
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param familyName May be null. The name of the font family.
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param style  The style (normal, bold, italic) of the typeface.
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               e.g. NORMAL, BOLD, ITALIC, BOLD_ITALIC
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The best matching typeface.
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static Typeface create(String familyName, int style) {
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new Typeface(nativeCreate(familyName, style));
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a typeface object that best matches the specified existing
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * typeface and the specified Style. Use this call if you want to pick a new
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * style from the same family of an existing typeface object. If family is
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * null, this selects from the default font's family.
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param family May be null. The name of the existing type face.
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param style  The style (normal, bold, italic) of the typeface.
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *               e.g. NORMAL, BOLD, ITALIC, BOLD_ITALIC
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The best matching typeface.
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static Typeface create(Typeface family, int style) {
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int ni = 0;
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (family != null) {
10546926698996d3857a650ed535024a88dbeaff1e1Romain Guy            // Return early if we're asked for the same face/style
10646926698996d3857a650ed535024a88dbeaff1e1Romain Guy            if (family.mStyle == style) {
10746926698996d3857a650ed535024a88dbeaff1e1Romain Guy                return family;
10846926698996d3857a650ed535024a88dbeaff1e1Romain Guy            }
10946926698996d3857a650ed535024a88dbeaff1e1Romain Guy
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ni = family.native_instance;
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11246926698996d3857a650ed535024a88dbeaff1e1Romain Guy
11346926698996d3857a650ed535024a88dbeaff1e1Romain Guy        Typeface typeface;
11446926698996d3857a650ed535024a88dbeaff1e1Romain Guy        SparseArray<Typeface> styles = sTypefaceCache.get(ni);
11546926698996d3857a650ed535024a88dbeaff1e1Romain Guy
11646926698996d3857a650ed535024a88dbeaff1e1Romain Guy        if (styles != null) {
11746926698996d3857a650ed535024a88dbeaff1e1Romain Guy            typeface = styles.get(style);
11846926698996d3857a650ed535024a88dbeaff1e1Romain Guy            if (typeface != null) {
11946926698996d3857a650ed535024a88dbeaff1e1Romain Guy                return typeface;
12046926698996d3857a650ed535024a88dbeaff1e1Romain Guy            }
12146926698996d3857a650ed535024a88dbeaff1e1Romain Guy        }
12246926698996d3857a650ed535024a88dbeaff1e1Romain Guy
12346926698996d3857a650ed535024a88dbeaff1e1Romain Guy        typeface = new Typeface(nativeCreateFromTypeface(ni, style));
12446926698996d3857a650ed535024a88dbeaff1e1Romain Guy        if (styles == null) {
12546926698996d3857a650ed535024a88dbeaff1e1Romain Guy            styles = new SparseArray<Typeface>(4);
12646926698996d3857a650ed535024a88dbeaff1e1Romain Guy            sTypefaceCache.put(ni, styles);
12746926698996d3857a650ed535024a88dbeaff1e1Romain Guy        }
12846926698996d3857a650ed535024a88dbeaff1e1Romain Guy        styles.put(style, typeface);
12946926698996d3857a650ed535024a88dbeaff1e1Romain Guy
13046926698996d3857a650ed535024a88dbeaff1e1Romain Guy        return typeface;
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns one of the default typeface objects, based on the specified style
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the default typeface that corresponds to the style
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static Typeface defaultFromStyle(int style) {
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return sDefaults[style];
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Create a new typeface from the specified font data.
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mgr The application's asset manager
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param path  The file name of the font data in the assets directory
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The new typeface.
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static Typeface createFromAsset(AssetManager mgr, String path) {
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new Typeface(nativeCreateFromAsset(mgr, path));
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
151a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy
152a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy    /**
153a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy     * Create a new typeface from the specified font file.
154a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy     *
155a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy     * @param path The path to the font data.
156a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy     * @return The new typeface.
157a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy     */
158a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy    public static Typeface createFromFile(File path) {
159a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy        return new Typeface(nativeCreateFromFile(path.getAbsolutePath()));
160a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy    }
161a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy
162a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy    /**
163a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy     * Create a new typeface from the specified font file.
164a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy     *
165a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy     * @param path The full path to the font data.
166a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy     * @return The new typeface.
167a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy     */
168a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy    public static Typeface createFromFile(String path) {
169a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy        return new Typeface(nativeCreateFromFile(path));
170a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy    }
171a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // don't allow clients to call this directly
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Typeface(int ni) {
17446926698996d3857a650ed535024a88dbeaff1e1Romain Guy        if (ni == 0) {
17531a69fdbe1edd8d686043e8ca7d278289f65808eMike Reed            throw new RuntimeException("native typeface cannot be made");
17631a69fdbe1edd8d686043e8ca7d278289f65808eMike Reed        }
17746926698996d3857a650ed535024a88dbeaff1e1Romain Guy
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        native_instance = ni;
17946926698996d3857a650ed535024a88dbeaff1e1Romain Guy        mStyle = nativeGetStyle(ni);
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static {
18346926698996d3857a650ed535024a88dbeaff1e1Romain Guy        DEFAULT         = create((String) null, 0);
18446926698996d3857a650ed535024a88dbeaff1e1Romain Guy        DEFAULT_BOLD    = create((String) null, Typeface.BOLD);
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SANS_SERIF      = create("sans-serif", 0);
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SERIF           = create("serif", 0);
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MONOSPACE       = create("monospace", 0);
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sDefaults = new Typeface[] {
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            DEFAULT,
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            DEFAULT_BOLD,
19246926698996d3857a650ed535024a88dbeaff1e1Romain Guy            create((String) null, Typeface.ITALIC),
19346926698996d3857a650ed535024a88dbeaff1e1Romain Guy            create((String) null, Typeface.BOLD_ITALIC),
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void finalize() throws Throwable {
19846926698996d3857a650ed535024a88dbeaff1e1Romain Guy        try {
19946926698996d3857a650ed535024a88dbeaff1e1Romain Guy            nativeUnref(native_instance);
20046926698996d3857a650ed535024a88dbeaff1e1Romain Guy        } finally {
20146926698996d3857a650ed535024a88dbeaff1e1Romain Guy            super.finalize();
20246926698996d3857a650ed535024a88dbeaff1e1Romain Guy        }
20346926698996d3857a650ed535024a88dbeaff1e1Romain Guy    }
20446926698996d3857a650ed535024a88dbeaff1e1Romain Guy
20546926698996d3857a650ed535024a88dbeaff1e1Romain Guy    @Override
20646926698996d3857a650ed535024a88dbeaff1e1Romain Guy    public boolean equals(Object o) {
20746926698996d3857a650ed535024a88dbeaff1e1Romain Guy        if (this == o) return true;
20846926698996d3857a650ed535024a88dbeaff1e1Romain Guy        if (o == null || getClass() != o.getClass()) return false;
20946926698996d3857a650ed535024a88dbeaff1e1Romain Guy
21046926698996d3857a650ed535024a88dbeaff1e1Romain Guy        Typeface typeface = (Typeface) o;
21146926698996d3857a650ed535024a88dbeaff1e1Romain Guy
21246926698996d3857a650ed535024a88dbeaff1e1Romain Guy        return mStyle == typeface.mStyle && native_instance == typeface.native_instance;
21346926698996d3857a650ed535024a88dbeaff1e1Romain Guy    }
21446926698996d3857a650ed535024a88dbeaff1e1Romain Guy
21546926698996d3857a650ed535024a88dbeaff1e1Romain Guy    @Override
21646926698996d3857a650ed535024a88dbeaff1e1Romain Guy    public int hashCode() {
21746926698996d3857a650ed535024a88dbeaff1e1Romain Guy        int result = native_instance;
21846926698996d3857a650ed535024a88dbeaff1e1Romain Guy        result = 31 * result + mStyle;
21946926698996d3857a650ed535024a88dbeaff1e1Romain Guy        return result;
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static native int  nativeCreate(String familyName, int style);
223a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy    private static native int  nativeCreateFromTypeface(int native_instance, int style);
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static native void nativeUnref(int native_instance);
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static native int  nativeGetStyle(int native_instance);
226a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy    private static native int  nativeCreateFromAsset(AssetManager mgr, String path);
227a87a132ebf1c2dd733cf52feff6e44525257c961Romain Guy    private static native int nativeCreateFromFile(String path);
228dbade9d6a075b1d5b8ebe10ee8961a5de296c93bMike Reed
229dbade9d6a075b1d5b8ebe10ee8961a5de296c93bMike Reed    /**
230dbade9d6a075b1d5b8ebe10ee8961a5de296c93bMike Reed     * Set the global gamma coefficients for black and white text. This call is
231dbade9d6a075b1d5b8ebe10ee8961a5de296c93bMike Reed     * usually a no-op in shipping products, and only exists for testing during
232dbade9d6a075b1d5b8ebe10ee8961a5de296c93bMike Reed     * development.
233dbade9d6a075b1d5b8ebe10ee8961a5de296c93bMike Reed     *
234dbade9d6a075b1d5b8ebe10ee8961a5de296c93bMike Reed     * @param blackGamma gamma coefficient for black text
235dbade9d6a075b1d5b8ebe10ee8961a5de296c93bMike Reed     * @param whiteGamma gamma coefficient for white text
236bbed0d68c815446400193bdc8b16fbf73e1ee664Mike Reed     *
237bbed0d68c815446400193bdc8b16fbf73e1ee664Mike Reed     * @hide - this is just for calibrating devices, not for normal apps
238dbade9d6a075b1d5b8ebe10ee8961a5de296c93bMike Reed     */
239dbade9d6a075b1d5b8ebe10ee8961a5de296c93bMike Reed    public static native void setGammaForText(float blackGamma, float whiteGamma);
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
241