skia_safe/core/
blender.rsuse crate::{prelude::*, BlendMode, NativeFlattenable};
use skia_bindings::{self as sb, SkBlender, SkFlattenable, SkRefCntBase};
use std::fmt;
pub type Blender = RCHandle<SkBlender>;
unsafe_send_sync!(Blender);
require_base_type!(SkBlender, SkFlattenable);
impl NativeRefCountedBase for SkBlender {
type Base = SkRefCntBase;
}
impl NativeBase<SkFlattenable> for SkBlender {}
impl Blender {
pub fn mode(mode: BlendMode) -> Blender {
Blender::from_ptr(unsafe { sb::C_SkBlender_Mode(mode) }).unwrap()
}
}
impl fmt::Debug for Blender {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Blender").finish()
}
}
impl NativeFlattenable for SkBlender {
fn native_flattenable(&self) -> &SkFlattenable {
unsafe { &*(self as *const SkBlender as *const SkFlattenable) }
}
fn native_deserialize(data: &[u8]) -> *mut Self {
unsafe { sb::C_SkBlender_Deserialize(data.as_ptr() as _, data.len()) }
}
}
impl From<BlendMode> for Blender {
fn from(mode: BlendMode) -> Self {
Blender::mode(mode)
}
}