Make the toggle overlays button functional (#484)

* Make the toggle overlays button functional

* Move state from the OverlaysMessageHandler to DocumentMessageHandler

* Code review fixes
This commit is contained in:
Keavon Chambers
2022-01-16 09:40:47 -08:00
parent 10205ef599
commit 94ecbf7112
7 changed files with 35 additions and 17 deletions

View File

@@ -91,6 +91,9 @@ pub enum DocumentMessage {
SetOpacityForSelectedLayers {
opacity: f64,
},
SetOverlaysVisibility {
visible: bool,
},
SetSelectedLayers {
replacement_selected_layers: Vec<Vec<LayerId>>,
},

View File

@@ -41,6 +41,7 @@ pub struct DocumentMessageHandler {
artboard_message_handler: ArtboardMessageHandler,
#[serde(skip)]
transform_layer_handler: TransformLayerMessageHandler,
pub overlays_visible: bool,
pub snapping_enabled: bool,
pub view_mode: ViewMode,
pub version: String,
@@ -61,6 +62,7 @@ impl Default for DocumentMessageHandler {
artboard_message_handler: ArtboardMessageHandler::default(),
transform_layer_handler: TransformLayerMessageHandler::default(),
snapping_enabled: true,
overlays_visible: true,
view_mode: ViewMode::default(),
version: GRAPHITE_DOCUMENT_VERSION.to_string(),
}
@@ -703,11 +705,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessorMessageHandler> for Docum
responses.push_back(ToolMessage::DocumentIsDirty.into());
}
Overlays(message) => {
self.overlays_message_handler.process_action(
message,
(Self::layer_metadata_mut_no_borrow_self(&mut self.layer_metadata, &[]), &self.graphene_document, ipp),
responses,
);
self.overlays_message_handler.process_action(message, self.overlays_visible, responses);
// responses.push_back(OverlaysMessage::RenderOverlays.into());
}
Redo => {
@@ -909,6 +907,10 @@ impl MessageHandler<DocumentMessage, &InputPreprocessorMessageHandler> for Docum
responses.push_back(DocumentOperation::SetLayerOpacity { path, opacity }.into());
}
}
SetOverlaysVisibility { visible } => {
self.overlays_visible = visible;
responses.push_back(OverlaysMessage::Rerender.into());
}
SetSelectedLayers { replacement_selected_layers } => {
let selected = self.layer_metadata.iter_mut().filter(|(_, layer_metadata)| layer_metadata.selected);
selected.for_each(|(path, layer_metadata)| {

View File

@@ -10,6 +10,7 @@ use serde::{Deserialize, Serialize};
pub enum OverlaysMessage {
ClearAllOverlays,
DispatchOperation(Box<DocumentOperation>),
Rerender,
}
impl From<DocumentOperation> for OverlaysMessage {

View File

@@ -1,8 +1,5 @@
use super::layer_panel::LayerMetadata;
use crate::input::InputPreprocessorMessageHandler;
use crate::message_prelude::*;
use graphene::document::Document;
use graphene::document::Document as GrapheneDocument;
use graphene::layers::style::ViewMode;
@@ -11,12 +8,11 @@ pub struct OverlaysMessageHandler {
pub overlays_graphene_document: GrapheneDocument,
}
impl MessageHandler<OverlaysMessage, (&mut LayerMetadata, &Document, &InputPreprocessorMessageHandler)> for OverlaysMessageHandler {
impl MessageHandler<OverlaysMessage, bool> for OverlaysMessageHandler {
#[remain::check]
fn process_action(&mut self, message: OverlaysMessage, _data: (&mut LayerMetadata, &Document, &InputPreprocessorMessageHandler), responses: &mut VecDeque<Message>) {
fn process_action(&mut self, message: OverlaysMessage, overlays_visible: bool, responses: &mut VecDeque<Message>) {
use OverlaysMessage::*;
// let (layer_metadata, document, ipp) = data;
#[remain::sorted]
match message {
ClearAllOverlays => todo!(),
@@ -24,12 +20,17 @@ impl MessageHandler<OverlaysMessage, (&mut LayerMetadata, &Document, &InputPrepr
Ok(_) => (),
Err(e) => log::error!("OverlaysError: {:?}", e),
},
Rerender => (),
}
// Render overlays
responses.push_back(
FrontendMessage::UpdateDocumentOverlays {
svg: self.overlays_graphene_document.render_root(ViewMode::Normal),
svg: if overlays_visible {
self.overlays_graphene_document.render_root(ViewMode::Normal)
} else {
String::from("")
},
}
.into(),
);