mirror of
https://github.com/italicsjenga/vello.git
synced 2025-01-29 04:26:36 +11:00
62 lines
1.8 KiB
Rust
62 lines
1.8 KiB
Rust
// Copyright 2022 The piet-gpu authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
// Also licensed under MIT license, at your choice.
|
|
|
|
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default, Debug)]
|
|
pub struct Color {
|
|
pub r: u8,
|
|
pub g: u8,
|
|
pub b: u8,
|
|
pub a: u8,
|
|
}
|
|
|
|
impl Color {
|
|
pub const fn rgb8(r: u8, g: u8, b: u8) -> Self {
|
|
Self { r, g, b, a: 255 }
|
|
}
|
|
|
|
pub const fn rgba8(r: u8, g: u8, b: u8, a: u8) -> Self {
|
|
Self { r, g, b, a }
|
|
}
|
|
|
|
pub fn rgb<C: Into<f64>>(r: C, g: C, b: C) -> Self {
|
|
Self::rgb8(
|
|
(r.into() / 255.0) as u8,
|
|
(g.into() / 255.0) as u8,
|
|
(b.into() / 255.0) as u8,
|
|
)
|
|
}
|
|
|
|
pub fn rgba<C: Into<f64>>(r: C, g: C, b: C, a: C) -> Self {
|
|
Self::rgba8(
|
|
(r.into() / 255.0) as u8,
|
|
(g.into() / 255.0) as u8,
|
|
(b.into() / 255.0) as u8,
|
|
(a.into() / 255.0) as u8,
|
|
)
|
|
}
|
|
|
|
pub fn pack(self) -> u32 {
|
|
(self.b as u32) << 24 | (self.g as u32) << 16 | (self.r as u32) << 8 | self.a as u32
|
|
}
|
|
|
|
pub fn to_premul_u32(self) -> u32 {
|
|
let a = self.a as f64 / 255.0;
|
|
let r = (self.r as f64 * a) as u32;
|
|
let g = (self.g as f64 * a) as u32;
|
|
let b = (self.b as f64 * a) as u32;
|
|
r | (g << 8) | (b << 16) | ((self.a as u32) << 24)
|
|
}
|
|
}
|