1
0
Fork 0
forked from wry/wry

color-management-v1: only expose the protocol with vulkan

This commit is contained in:
Julian Orth 2025-02-26 16:24:22 +01:00
parent 248eb324a5
commit fcd2e3ab33
7 changed files with 40 additions and 2 deletions

View file

@ -56,9 +56,17 @@ impl ColorManagement {
jay_color_management::Enabled::handle(tc, id, enabled.clone(), |iv, msg| {
iv.set(msg.enabled != 0);
});
let available = Rc::new(Cell::new(false));
jay_color_management::Available::handle(tc, id, available.clone(), |iv, msg| {
iv.set(msg.available != 0);
});
tc.round_trip().await;
if enabled.get() {
println!("Enabled");
print!("Enabled");
if !available.get() {
print!(" (Unavailable)");
}
println!();
} else {
println!("Disabled");
}

View file

@ -742,6 +742,10 @@ pub trait GfxContext: Debug {
width: i32,
height: i32,
) -> Result<Rc<dyn GfxBlendBuffer>, GfxError>;
fn supports_color_management(&self) -> bool {
false
}
}
#[derive(Clone, Debug)]

View file

@ -363,6 +363,10 @@ impl GfxContext for Context {
let buffer = self.0.acquire_blend_buffer(width, height)?;
Ok(buffer)
}
fn supports_color_management(&self) -> bool {
self.0.device.descriptor_buffer.is_some()
}
}
impl Drop for Context {

View file

@ -201,7 +201,7 @@ impl Global for WpColorManagerV1Global {
}
fn exposed(&self, state: &State) -> bool {
state.color_management_enabled.get()
state.color_management_available()
}
}

View file

@ -23,6 +23,13 @@ impl JayColorManagement {
enabled: self.client.state.color_management_enabled.get() as u32,
});
}
fn send_available(&self) {
self.client.event(Available {
self_id: self.id,
available: self.client.state.color_management_available() as u32,
});
}
}
impl JayColorManagementRequestHandler for JayColorManagement {
@ -35,6 +42,7 @@ impl JayColorManagementRequestHandler for JayColorManagement {
fn get(&self, _req: Get, _slf: &Rc<Self>) -> Result<(), Self::Error> {
self.send_enabled();
self.send_available();
Ok(())
}

View file

@ -1315,6 +1315,16 @@ impl State {
pub fn tray_icon_size(&self) -> i32 {
(self.theme.sizes.title_height.get() - 2).max(0)
}
pub fn color_management_available(&self) -> bool {
if !self.color_management_enabled.get() {
return false;
}
let Some(ctx) = self.render_ctx.get() else {
return false;
};
ctx.supports_color_management()
}
}
#[derive(Debug, Error)]

View file

@ -13,3 +13,7 @@ request set_enabled {
event enabled {
enabled: u32,
}
event available {
available: u32,
}