| /* |
| * Copyright (C) 2013 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| |
| #ifndef _ANDROID_GRAPHICS_TYPEFACE_IMPL_H_ |
| #define _ANDROID_GRAPHICS_TYPEFACE_IMPL_H_ |
| |
| #include "SkTypeface.h" |
| |
| #include <cutils/compiler.h> |
| #include <minikin/FontCollection.h> |
| #include <vector> |
| #include <memory> |
| |
| namespace android { |
| |
| // This indicates that the weight or italic information should be resolved by OS/2 table. |
| // This value must be the same as the android.graphics.Typeface$Builder.RESOLVE_BY_FONT_TABLE. |
| constexpr int RESOLVE_BY_FONT_TABLE = -1; |
| |
| struct ANDROID_API Typeface { |
| public: |
| std::shared_ptr<minikin::FontCollection> fFontCollection; |
| |
| // resolved style actually used for rendering |
| minikin::FontStyle fStyle; |
| |
| // style used for constructing and querying Typeface objects |
| SkTypeface::Style fSkiaStyle; |
| |
| static Typeface* resolveDefault(Typeface* src); |
| |
| // The following three functions create new Typeface from an existing Typeface with a different |
| // style. There is a base weight concept which is used for calculating relative style from an |
| // existing Typeface. |
| // The createRelative method creates a new Typeface with a style relative to the base Typeface. |
| // For example, if the base Typeface has a base weight of 400 and the desired style is bold, the |
| // resulting Typeface renders the text with a weight of 700. This function doesn't change the |
| // base weight, so even if you create a new Typeface from the bold Typeface specifying bold on |
| // it again, the text is still rendered with a weight of 700. |
| // You can create another base weight Typeface from an existing Typeface with |
| // createWithDifferentBaseWeight. The Typeface created with this function renders the text with |
| // a specified base weight. |
| // The createAbsolute method creates a new Typeface ignoring the base weight. |
| // Here is an example: |
| // Typeface* base = resolveDefault(nullptr); // Usually this has a weight of 400. |
| // Typeface* bold = createRelative(base, Bold); // Rendered with a weight of 700. |
| // Typeface* bold2 = createRelative(bold, Bold); // Rendered with a weight of 700. |
| // |
| // Typeface* boldBase = createWithDifferentBaseWeight(base, 700); // With a weight of 700. |
| // Typeface* boldBold = createRelative(boldBase, Bold); // Rendered with a weight of 1000. |
| // |
| // Typeface* lightBase = createWithDifferentBaseWeight(base, 300); // With a weight of 300. |
| // Typeface* lightBold = createRelative(lightBase, Bold); // Rendered with a weight of 600. |
| // |
| // Typeface* black = createAbsolute(base, 900, false); // Rendered with a weight of 900. |
| static Typeface* createWithDifferentBaseWeight(Typeface* src, int baseweight); |
| static Typeface* createRelative(Typeface* src, SkTypeface::Style desiredStyle); |
| static Typeface* createAbsolute(Typeface* base, int weight, bool italic); |
| |
| static Typeface* createFromTypefaceWithVariation(Typeface* src, |
| const std::vector<minikin::FontVariation>& variations); |
| |
| static Typeface* createFromFamilies( |
| std::vector<std::shared_ptr<minikin::FontFamily>>&& families, |
| int weight, int italic); |
| |
| static void setDefault(Typeface* face); |
| |
| // Sets roboto font as the default typeface for testing purpose. |
| static void setRobotoTypefaceForTest(); |
| private: |
| // base weight in CSS-style units, 1..1000 |
| int fBaseWeight; |
| |
| }; |
| |
| } |
| |
| #endif // _ANDROID_GRAPHICS_TYPEFACE_IMPL_H_ |