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| { jay_color_management::Enabled::handle(tc, id, enabled.clone(), |iv, msg| {
iv.set(msg.enabled != 0); 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; tc.round_trip().await;
if enabled.get() { if enabled.get() {
println!("Enabled"); print!("Enabled");
if !available.get() {
print!(" (Unavailable)");
}
println!();
} else { } else {
println!("Disabled"); println!("Disabled");
} }

View file

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

View file

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

View file

@ -201,7 +201,7 @@ impl Global for WpColorManagerV1Global {
} }
fn exposed(&self, state: &State) -> bool { 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, 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 { impl JayColorManagementRequestHandler for JayColorManagement {
@ -35,6 +42,7 @@ impl JayColorManagementRequestHandler for JayColorManagement {
fn get(&self, _req: Get, _slf: &Rc<Self>) -> Result<(), Self::Error> { fn get(&self, _req: Get, _slf: &Rc<Self>) -> Result<(), Self::Error> {
self.send_enabled(); self.send_enabled();
self.send_available();
Ok(()) Ok(())
} }

View file

@ -1315,6 +1315,16 @@ impl State {
pub fn tray_icon_size(&self) -> i32 { pub fn tray_icon_size(&self) -> i32 {
(self.theme.sizes.title_height.get() - 2).max(0) (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)] #[derive(Debug, Error)]

View file

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