1538122d159ef845767ea430a5541248e85e43717Seigo Nonaka/* 2538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * Copyright (C) 2017 The Android Open Source Project 3538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * 4538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License"); 5538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * you may not use this file except in compliance with the License. 6538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * You may obtain a copy of the License at 7538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * 8538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * http://www.apache.org/licenses/LICENSE-2.0 9538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * 10538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * Unless required by applicable law or agreed to in writing, software 11538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS, 12538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * See the License for the specific language governing permissions and 14538122d159ef845767ea430a5541248e85e43717Seigo Nonaka * limitations under the License. 15538122d159ef845767ea430a5541248e85e43717Seigo Nonaka */ 16538122d159ef845767ea430a5541248e85e43717Seigo Nonaka 17538122d159ef845767ea430a5541248e85e43717Seigo Nonaka#ifndef MINIKIN_FONT_STYLE_H 18538122d159ef845767ea430a5541248e85e43717Seigo Nonaka#define MINIKIN_FONT_STYLE_H 19538122d159ef845767ea430a5541248e85e43717Seigo Nonaka 20538122d159ef845767ea430a5541248e85e43717Seigo Nonakanamespace minikin { 21538122d159ef845767ea430a5541248e85e43717Seigo Nonaka 22538122d159ef845767ea430a5541248e85e43717Seigo Nonaka// FontStyle represents style information. 23538122d159ef845767ea430a5541248e85e43717Seigo Nonakaclass FontStyle { 24538122d159ef845767ea430a5541248e85e43717Seigo Nonakapublic: 25538122d159ef845767ea430a5541248e85e43717Seigo Nonaka enum class Weight : uint16_t { 266c8722e217ff5238f0b849152d7936959a728103Seigo Nonaka THIN = 100, 27538122d159ef845767ea430a5541248e85e43717Seigo Nonaka EXTRA_LIGHT = 200, 286c8722e217ff5238f0b849152d7936959a728103Seigo Nonaka LIGHT = 300, 296c8722e217ff5238f0b849152d7936959a728103Seigo Nonaka NORMAL = 400, 306c8722e217ff5238f0b849152d7936959a728103Seigo Nonaka MEDIUM = 500, 316c8722e217ff5238f0b849152d7936959a728103Seigo Nonaka SEMI_BOLD = 600, 326c8722e217ff5238f0b849152d7936959a728103Seigo Nonaka BOLD = 700, 336c8722e217ff5238f0b849152d7936959a728103Seigo Nonaka EXTRA_BOLD = 800, 346c8722e217ff5238f0b849152d7936959a728103Seigo Nonaka BLACK = 900, 35538122d159ef845767ea430a5541248e85e43717Seigo Nonaka EXTRA_BLACK = 1000, 36538122d159ef845767ea430a5541248e85e43717Seigo Nonaka }; 37538122d159ef845767ea430a5541248e85e43717Seigo Nonaka 38538122d159ef845767ea430a5541248e85e43717Seigo Nonaka enum class Slant : bool { 396c8722e217ff5238f0b849152d7936959a728103Seigo Nonaka ITALIC = true, 40538122d159ef845767ea430a5541248e85e43717Seigo Nonaka UPRIGHT = false, 41538122d159ef845767ea430a5541248e85e43717Seigo Nonaka }; 42538122d159ef845767ea430a5541248e85e43717Seigo Nonaka 43538122d159ef845767ea430a5541248e85e43717Seigo Nonaka constexpr FontStyle() : FontStyle(Weight::NORMAL, Slant::UPRIGHT) {} 44538122d159ef845767ea430a5541248e85e43717Seigo Nonaka constexpr explicit FontStyle(Weight weight) : FontStyle(weight, Slant::UPRIGHT) {} 45538122d159ef845767ea430a5541248e85e43717Seigo Nonaka constexpr explicit FontStyle(Slant slant) : FontStyle(Weight::NORMAL, slant) {} 46538122d159ef845767ea430a5541248e85e43717Seigo Nonaka constexpr FontStyle(Weight weight, Slant slant) 47538122d159ef845767ea430a5541248e85e43717Seigo Nonaka : FontStyle(static_cast<uint16_t>(weight), slant) {} 48538122d159ef845767ea430a5541248e85e43717Seigo Nonaka constexpr FontStyle(uint16_t weight, Slant slant) : mWeight(weight), mSlant(slant) {} 49538122d159ef845767ea430a5541248e85e43717Seigo Nonaka 50538122d159ef845767ea430a5541248e85e43717Seigo Nonaka constexpr uint16_t weight() const { return mWeight; } 51538122d159ef845767ea430a5541248e85e43717Seigo Nonaka constexpr Slant slant() const { return mSlant; } 52538122d159ef845767ea430a5541248e85e43717Seigo Nonaka 53538122d159ef845767ea430a5541248e85e43717Seigo Nonaka constexpr bool operator==(const FontStyle& other) const { 54538122d159ef845767ea430a5541248e85e43717Seigo Nonaka return weight() == other.weight() && slant() == other.slant(); 55538122d159ef845767ea430a5541248e85e43717Seigo Nonaka } 56538122d159ef845767ea430a5541248e85e43717Seigo Nonaka 57538122d159ef845767ea430a5541248e85e43717Seigo Nonaka constexpr uint32_t identifier() const { 58538122d159ef845767ea430a5541248e85e43717Seigo Nonaka return (static_cast<uint32_t>(weight()) << 16) | static_cast<uint32_t>(slant()); 59538122d159ef845767ea430a5541248e85e43717Seigo Nonaka } 60538122d159ef845767ea430a5541248e85e43717Seigo Nonaka 61538122d159ef845767ea430a5541248e85e43717Seigo Nonakaprivate: 62538122d159ef845767ea430a5541248e85e43717Seigo Nonaka uint16_t mWeight; 63538122d159ef845767ea430a5541248e85e43717Seigo Nonaka Slant mSlant; 64538122d159ef845767ea430a5541248e85e43717Seigo Nonaka}; 65538122d159ef845767ea430a5541248e85e43717Seigo Nonaka 66538122d159ef845767ea430a5541248e85e43717Seigo Nonaka} // namespace minikin 67538122d159ef845767ea430a5541248e85e43717Seigo Nonaka 68538122d159ef845767ea430a5541248e85e43717Seigo Nonaka#endif // MINIKIN_FONT_STYLE_H 69