1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
// Copyright 2018 The Servo Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms. use sys; /// Direction of text flow during layout. /// /// This maps to the [`hb_direction_t`] from /// [`harfbuzz-sys`]. It can be converted to /// or from `hb_direction_t` using the [`From`] /// and [`Into`] traits: /// /// ``` /// # use harfbuzz::{Direction, sys}; /// assert_eq!(Direction::from(sys::HB_DIRECTION_LTR), Direction::LTR); /// assert_eq!(sys::hb_direction_t::from(Direction::BTT), sys::HB_DIRECTION_BTT); /// /// let hb_dir: sys::hb_direction_t = Direction::LTR.into(); /// assert_eq!(hb_dir, sys::HB_DIRECTION_LTR); /// /// let dir: Direction = sys::HB_DIRECTION_TTB.into(); /// assert_eq!(dir, Direction::TTB); /// ``` /// /// [`hb_direction_t`]: ../harfbuzz_sys/type.hb_direction_t.html /// [`harfbuzz-sys`]: ../harfbuzz_sys/index.html /// [`From`]: https://doc.rust-lang.org/std/convert/trait.From.html /// [`Into`]: https://doc.rust-lang.org/std/convert/trait.Into.html #[derive(Copy, Clone, Debug, PartialEq, PartialOrd)] pub enum Direction { /// Initial, unset direction. /// /// This corresponds to [`HB_DIRECTION_INVALID`]. /// /// [`HB_DIRECTION_INVALID`]: ../harfbuzz_sys/constant.HB_DIRECTION_INVALID.html Invalid, /// Text is set horizontally from left to right. /// /// This corresponds to [`HB_DIRECTION_LTR`]. /// /// [`HB_DIRECTION_LTR`]: ../harfbuzz_sys/constant.HB_DIRECTION_LTR.html LTR, /// Text is set horizontally from right to left. /// /// This corresponds to [`HB_DIRECTION_RTL`]. /// /// [`HB_DIRECTION_RTL`]: ../harfbuzz_sys/constant.HB_DIRECTION_RTL.html RTL, /// Text is set vertically from top to bottom. /// /// This corresponds to [`HB_DIRECTION_TTB`]. /// /// [`HB_DIRECTION_TTB`]: ../harfbuzz_sys/constant.HB_DIRECTION_TTB.html TTB, /// Text is set vertically from bottom to top. /// /// This corresponds to [`HB_DIRECTION_BTT`]. /// /// [`HB_DIRECTION_BTT`]: ../harfbuzz_sys/constant.HB_DIRECTION_BTT.html BTT, } impl From<sys::hb_direction_t> for Direction { fn from(s: sys::hb_direction_t) -> Self { match s { sys::HB_DIRECTION_INVALID => Direction::Invalid, sys::HB_DIRECTION_LTR => Direction::LTR, sys::HB_DIRECTION_RTL => Direction::RTL, sys::HB_DIRECTION_TTB => Direction::TTB, sys::HB_DIRECTION_BTT => Direction::BTT, _ => Direction::Invalid, } } } impl From<Direction> for sys::hb_direction_t { fn from(s: Direction) -> Self { match s { Direction::Invalid => sys::HB_DIRECTION_INVALID, Direction::LTR => sys::HB_DIRECTION_LTR, Direction::RTL => sys::HB_DIRECTION_RTL, Direction::TTB => sys::HB_DIRECTION_TTB, Direction::BTT => sys::HB_DIRECTION_BTT, } } }