// Diopser: a phase rotation plugin // Copyright (C) 2021-2022 Robbert van der Helm // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . use nih_plug::prelude::{Editor, GuiContext}; use nih_plug_iced::widgets::ParamMessage; use nih_plug_iced::{create_iced_editor, Command, Element, IcedEditor, IcedState}; use std::pin::Pin; use std::sync::Arc; use crate::DiopserParams; // Makes sense to also define this here, makes it a bit easier to keep track of pub fn default_state() -> Arc { IcedState::from_size(600, 400) } pub fn create( params: Pin>, editor_state: Arc, ) -> Option> { create_iced_editor::(editor_state, params) } struct DiopserEditor { params: Pin>, context: Arc, } #[derive(Debug, Clone, Copy)] enum EditorMessage { ParamUpdate(ParamMessage), } impl IcedEditor for DiopserEditor { type Executor = nih_plug_iced::executor::Default; type Message = EditorMessage; type InitializationFlags = Pin>; fn new( params: Self::InitializationFlags, context: Arc, ) -> (Self, Command) { let editor = DiopserEditor { params, context }; (editor, Command::none()) } fn context(&self) -> &dyn GuiContext { self.context.as_ref() } fn update( &mut self, _window: &mut nih_plug_iced::WindowQueue, message: Self::Message, ) -> Command { match message { EditorMessage::ParamUpdate(message) => self.handle_param_message(message), } Command::none() } fn view(&mut self) -> Element<'_, Self::Message> { nih_plug_iced::Text::new("Hello, world!").into() } }