tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ui.rs (3184B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
      4 
      5 //! Generic values for UI properties.
      6 
      7 use crate::derives::*;
      8 use crate::values::specified::ui::CursorKind;
      9 use std::fmt::{self, Write};
     10 use style_traits::{CssWriter, ToCss};
     11 
     12 /// A generic value for the `cursor` property.
     13 ///
     14 /// https://drafts.csswg.org/css-ui/#cursor
     15 #[derive(
     16    Clone,
     17    Debug,
     18    MallocSizeOf,
     19    PartialEq,
     20    SpecifiedValueInfo,
     21    ToComputedValue,
     22    ToResolvedValue,
     23    ToShmem,
     24    ToTyped,
     25 )]
     26 #[repr(C)]
     27 pub struct GenericCursor<Image> {
     28    /// The parsed images for the cursor.
     29    pub images: crate::OwnedSlice<Image>,
     30    /// The kind of the cursor [default | help | ...].
     31    pub keyword: CursorKind,
     32 }
     33 
     34 pub use self::GenericCursor as Cursor;
     35 
     36 impl<Image> Cursor<Image> {
     37    /// Set `cursor` to `auto`
     38    #[inline]
     39    pub fn auto() -> Self {
     40        Self {
     41            images: Default::default(),
     42            keyword: CursorKind::Auto,
     43        }
     44    }
     45 }
     46 
     47 impl<Image: ToCss> ToCss for Cursor<Image> {
     48    fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
     49    where
     50        W: Write,
     51    {
     52        for image in &*self.images {
     53            image.to_css(dest)?;
     54            dest.write_str(", ")?;
     55        }
     56        self.keyword.to_css(dest)
     57    }
     58 }
     59 
     60 /// A generic value for item of `image cursors`.
     61 #[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToResolvedValue, ToShmem)]
     62 #[repr(C)]
     63 pub struct GenericCursorImage<Image, Number> {
     64    /// The url to parse images from.
     65    pub image: Image,
     66    /// Whether the image has a hotspot or not.
     67    pub has_hotspot: bool,
     68    /// The x coordinate.
     69    pub hotspot_x: Number,
     70    /// The y coordinate.
     71    pub hotspot_y: Number,
     72 }
     73 
     74 pub use self::GenericCursorImage as CursorImage;
     75 
     76 impl<Image: ToCss, Number: ToCss> ToCss for CursorImage<Image, Number> {
     77    fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
     78    where
     79        W: Write,
     80    {
     81        self.image.to_css(dest)?;
     82        if self.has_hotspot {
     83            dest.write_char(' ')?;
     84            self.hotspot_x.to_css(dest)?;
     85            dest.write_char(' ')?;
     86            self.hotspot_y.to_css(dest)?;
     87        }
     88        Ok(())
     89    }
     90 }
     91 
     92 /// A generic value for `scrollbar-color` property.
     93 ///
     94 /// https://drafts.csswg.org/css-scrollbars-1/#scrollbar-color
     95 #[derive(
     96    Animate,
     97    Clone,
     98    ComputeSquaredDistance,
     99    Copy,
    100    Debug,
    101    MallocSizeOf,
    102    PartialEq,
    103    SpecifiedValueInfo,
    104    ToAnimatedValue,
    105    ToAnimatedZero,
    106    ToComputedValue,
    107    ToCss,
    108    ToResolvedValue,
    109    ToShmem,
    110    ToTyped,
    111 )]
    112 #[repr(C, u8)]
    113 pub enum GenericScrollbarColor<Color> {
    114    /// `auto`
    115    Auto,
    116    /// `<color>{2}`
    117    Colors {
    118        /// First `<color>`, for color of the scrollbar thumb.
    119        thumb: Color,
    120        /// Second `<color>`, for color of the scrollbar track.
    121        track: Color,
    122    },
    123 }
    124 
    125 pub use self::GenericScrollbarColor as ScrollbarColor;
    126 
    127 impl<Color> Default for ScrollbarColor<Color> {
    128    #[inline]
    129    fn default() -> Self {
    130        ScrollbarColor::Auto
    131    }
    132 }