Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
#![allow(unsafe_code)]
//! Different kind of helpers to interact with Gecko values.
use crate::color::{AbsoluteColor, ColorSpace};
/// Convert a color value to `nscolor`.
pub fn convert_absolute_color_to_nscolor(color: &AbsoluteColor) -> u32 {
let srgb = color.to_color_space(ColorSpace::Srgb);
u32::from_le_bytes([
(srgb.components.0 * 255.0).round() as u8,
(srgb.components.1 * 255.0).round() as u8,
(srgb.components.2 * 255.0).round() as u8,
(srgb.alpha * 255.0).round() as u8,
])
}
/// Convert a given `nscolor` to a Servo AbsoluteColor value.
pub fn convert_nscolor_to_absolute_color(color: u32) -> AbsoluteColor {
let [r, g, b, a] = color.to_le_bytes();
AbsoluteColor::srgb_legacy(r, g, b, a as f32 / 255.0)
}
#[test]
fn convert_ns_color_to_absolute_color_should_be_in_legacy_syntax() {
use crate::color::ColorFlags;
let result = convert_nscolor_to_absolute_color(0x336699CC);
assert!(result.flags.contains(ColorFlags::IS_LEGACY_SRGB));
assert!(result.is_legacy_syntax());
}