| 1 | // font-kit/src/hinting.rs |
| 2 | // |
| 3 | // Copyright © 2018 The Pathfinder Project Developers. |
| 4 | // |
| 5 | // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or |
| 6 | // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license |
| 7 | // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your |
| 8 | // option. This file may not be copied, modified, or distributed |
| 9 | // except according to those terms. |
| 10 | |
| 11 | //! Specifies how hinting (grid fitting) is to be performed (or not performed) for a glyph. |
| 12 | //! |
| 13 | //! This affects both outlines and rasterization. |
| 14 | |
| 15 | /// Specifies how hinting (grid fitting) is to be performed (or not performed) for a glyph. |
| 16 | /// |
| 17 | /// This affects both outlines and rasterization. |
| 18 | #[derive (Clone, Copy, Debug, PartialEq)] |
| 19 | pub enum HintingOptions { |
| 20 | /// No hinting is performed unless absolutely necessary to assemble the glyph. |
| 21 | /// |
| 22 | /// This corresponds to what macOS and FreeType in its "no hinting" mode do. |
| 23 | None, |
| 24 | |
| 25 | /// Hinting is performed only in the vertical direction. The specified point size is used for |
| 26 | /// grid fitting. |
| 27 | /// |
| 28 | /// This corresponds to what DirectWrite and FreeType in its light hinting mode do. |
| 29 | Vertical(f32), |
| 30 | |
| 31 | /// Hinting is performed only in the vertical direction, and further tweaks are applied to make |
| 32 | /// subpixel antialiasing look better. The specified point size is used for grid fitting. |
| 33 | /// |
| 34 | /// This matches DirectWrite, GDI in its ClearType mode, and FreeType in its LCD hinting mode. |
| 35 | VerticalSubpixel(f32), |
| 36 | |
| 37 | /// Hinting is performed in both horizontal and vertical directions. The specified point size |
| 38 | /// is used for grid fitting. |
| 39 | /// |
| 40 | /// This corresponds to what GDI in non-ClearType modes and FreeType in its normal hinting mode |
| 41 | /// do. |
| 42 | Full(f32), |
| 43 | } |
| 44 | |
| 45 | impl HintingOptions { |
| 46 | /// Returns the point size that will be used for grid fitting, if any. |
| 47 | #[inline ] |
| 48 | pub fn grid_fitting_size(&self) -> Option<f32> { |
| 49 | match *self { |
| 50 | HintingOptions::None => None, |
| 51 | HintingOptions::Vertical(size: f32) |
| 52 | | HintingOptions::VerticalSubpixel(size: f32) |
| 53 | | HintingOptions::Full(size: f32) => Some(size), |
| 54 | } |
| 55 | } |
| 56 | } |
| 57 | |