mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-03 07:04:34 +00:00
wasm preview ui: Implement highlight from editor
This commit is contained in:
parent
7d4a73b76c
commit
4310969b2a
3 changed files with 41 additions and 24 deletions
|
@ -170,3 +170,20 @@ pub fn set_preview_factory(
|
||||||
});
|
});
|
||||||
ui.set_preview_area(factory);
|
ui.set_preview_area(factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Highlight the element pointed at the offset in the path.
|
||||||
|
/// When path is None, remove the highlight.
|
||||||
|
pub fn highlight(path: Option<PathBuf>, offset: u32) {
|
||||||
|
let highlight = path.clone().map(|x| (x, offset));
|
||||||
|
let mut cache = CONTENT_CACHE.get_or_init(Default::default).lock().unwrap();
|
||||||
|
|
||||||
|
if cache.highlight == highlight {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
cache.highlight = highlight;
|
||||||
|
|
||||||
|
if cache.highlight.as_ref().map_or(true, |(path, _)| cache.dependency.contains(path)) {
|
||||||
|
let path = path.unwrap_or_default();
|
||||||
|
update_highlight(path, offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -348,28 +348,15 @@ pub fn notify_diagnostics(diagnostics: &[slint_interpreter::Diagnostic]) -> Opti
|
||||||
|
|
||||||
/// Highlight the element pointed at the offset in the path.
|
/// Highlight the element pointed at the offset in the path.
|
||||||
/// When path is None, remove the highlight.
|
/// When path is None, remove the highlight.
|
||||||
pub fn highlight(path: Option<PathBuf>, offset: u32) {
|
pub fn update_highlight(path: PathBuf, offset: u32) {
|
||||||
let highlight = path.map(|x| (x, offset));
|
let path = path.to_path_buf();
|
||||||
let mut cache = super::CONTENT_CACHE.get_or_init(Default::default).lock().unwrap();
|
|
||||||
|
|
||||||
if cache.highlight == highlight {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
cache.highlight = highlight;
|
|
||||||
|
|
||||||
if cache.highlight.as_ref().map_or(true, |(path, _)| cache.dependency.contains(path)) {
|
|
||||||
run_in_ui_thread(move || async move {
|
run_in_ui_thread(move || async move {
|
||||||
PREVIEW_STATE.with(|preview_state| {
|
PREVIEW_STATE.with(|preview_state| {
|
||||||
let preview_state = preview_state.borrow();
|
let preview_state = preview_state.borrow();
|
||||||
let handle = preview_state.handle.borrow();
|
let handle = preview_state.handle.borrow();
|
||||||
if let (Some(cache), Some(handle)) = (super::CONTENT_CACHE.get(), &*handle) {
|
if let Some(handle) = &*handle {
|
||||||
if let Some((path, offset)) = cache.lock().unwrap().highlight.clone() {
|
|
||||||
handle.highlight(path, offset);
|
handle.highlight(path, offset);
|
||||||
} else {
|
|
||||||
handle.highlight(PathBuf::default(), 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
|
@ -503,7 +503,7 @@ impl PreviewConnector {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
M::HighlightFromEditor { path, offset } => {
|
M::HighlightFromEditor { path, offset } => {
|
||||||
log(&format!("highlight {path:?}:{offset}"));
|
super::highlight(path.map(|s| PathBuf::from(s)), offset);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -646,3 +646,16 @@ pub fn update_preview_area(compiled: slint_interpreter::ComponentDefinition) {
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn update_highlight(path: PathBuf, offset: u32) {
|
||||||
|
slint::invoke_from_event_loop(move || {
|
||||||
|
PREVIEW_STATE.with(|preview_state| {
|
||||||
|
let preview_state = preview_state.borrow();
|
||||||
|
let handle = preview_state.handle.borrow();
|
||||||
|
if let Some(handle) = &*handle {
|
||||||
|
handle.highlight(path, offset);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue