WIP
This commit is contained in:
@@ -12,9 +12,10 @@ use crate::{
|
||||
},
|
||||
text_layout::TextLayoutCache,
|
||||
util::post_inc,
|
||||
AnyView, AnyViewHandle, AppContext, Element, ElementBox, Entity, ModelContext, ModelHandle,
|
||||
MouseRegion, MouseRegionId, ParentId, ReadView, RenderParams, SceneBuilder, UpdateModel, View,
|
||||
ViewContext, ViewHandle, WindowInvalidation,
|
||||
AnyView, AnyViewHandle, AnyWeakViewHandle, AppContext, Element, ElementBox, Entity,
|
||||
ModelContext, ModelHandle, MouseRegion, MouseRegionId, ParentId, ReadView, RenderParams,
|
||||
SceneBuilder, UpdateModel, UpgradeViewHandle, View, ViewContext, ViewHandle, WeakViewHandle,
|
||||
WindowInvalidation,
|
||||
};
|
||||
use anyhow::bail;
|
||||
use collections::{HashMap, HashSet};
|
||||
@@ -121,10 +122,10 @@ impl DerefMut for WindowContext<'_, '_> {
|
||||
}
|
||||
|
||||
impl UpdateModel for WindowContext<'_, '_> {
|
||||
fn update_model<M: Entity, R>(
|
||||
fn update_model<T: Entity, R>(
|
||||
&mut self,
|
||||
handle: &ModelHandle<M>,
|
||||
update: &mut dyn FnMut(&mut M, &mut ModelContext<M>) -> R,
|
||||
handle: &ModelHandle<T>,
|
||||
update: &mut dyn FnMut(&mut T, &mut ModelContext<T>) -> R,
|
||||
) -> R {
|
||||
self.app_context.update_model(handle, update)
|
||||
}
|
||||
@@ -136,6 +137,16 @@ impl ReadView for WindowContext<'_, '_> {
|
||||
}
|
||||
}
|
||||
|
||||
impl UpgradeViewHandle for WindowContext<'_, '_> {
|
||||
fn upgrade_view_handle<T: View>(&self, handle: &WeakViewHandle<T>) -> Option<ViewHandle<T>> {
|
||||
self.app_context.upgrade_view_handle(handle)
|
||||
}
|
||||
|
||||
fn upgrade_any_view_handle(&self, handle: &AnyWeakViewHandle) -> Option<AnyViewHandle> {
|
||||
self.app_context.upgrade_any_view_handle(handle)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a: 'b, 'b> WindowContext<'a, 'b> {
|
||||
pub fn new(app_context: &'a mut AppContext, window: &'b mut Window, window_id: usize) -> Self {
|
||||
Self {
|
||||
|
||||
@@ -29,7 +29,7 @@ pub mod json;
|
||||
pub mod keymap_matcher;
|
||||
pub mod platform;
|
||||
pub use gpui_macros::test;
|
||||
pub use window::{Axis, SizeConstraint, Vector2FExt};
|
||||
pub use window::{Axis, SizeConstraint, Vector2FExt, WindowContext};
|
||||
|
||||
pub use anyhow;
|
||||
pub use serde_json;
|
||||
|
||||
@@ -11,7 +11,11 @@ use collections::HashMap;
|
||||
use pathfinder_geometry::rect::RectF;
|
||||
use smallvec::SmallVec;
|
||||
|
||||
use crate::{platform::MouseButton, window::WindowContext, ReadView, View, ViewContext};
|
||||
use crate::{
|
||||
platform::MouseButton, window::WindowContext, AnyModelHandle, AnyViewHandle,
|
||||
AnyWeakModelHandle, AnyWeakViewHandle, Entity, ModelHandle, ReadView, UpgradeModelHandle,
|
||||
UpgradeViewHandle, View, ViewContext, ViewHandle, WeakModelHandle, WeakViewHandle,
|
||||
};
|
||||
|
||||
use super::{
|
||||
mouse_event::{
|
||||
@@ -240,6 +244,33 @@ impl<V: View> ReadView for EventContext<'_, '_, '_, '_, V> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<V: View> UpgradeModelHandle for EventContext<'_, '_, '_, '_, V> {
|
||||
fn upgrade_model_handle<T: Entity>(
|
||||
&self,
|
||||
handle: &WeakModelHandle<T>,
|
||||
) -> Option<ModelHandle<T>> {
|
||||
self.view_context.upgrade_model_handle(handle)
|
||||
}
|
||||
|
||||
fn model_handle_is_upgradable<T: Entity>(&self, handle: &WeakModelHandle<T>) -> bool {
|
||||
self.view_context.model_handle_is_upgradable(handle)
|
||||
}
|
||||
|
||||
fn upgrade_any_model_handle(&self, handle: &AnyWeakModelHandle) -> Option<AnyModelHandle> {
|
||||
self.view_context.upgrade_any_model_handle(handle)
|
||||
}
|
||||
}
|
||||
|
||||
impl<V: View> UpgradeViewHandle for EventContext<'_, '_, '_, '_, V> {
|
||||
fn upgrade_view_handle<T: View>(&self, handle: &WeakViewHandle<T>) -> Option<ViewHandle<T>> {
|
||||
self.view_context.upgrade_view_handle(handle)
|
||||
}
|
||||
|
||||
fn upgrade_any_view_handle(&self, handle: &AnyWeakViewHandle) -> Option<AnyViewHandle> {
|
||||
self.view_context.upgrade_any_view_handle(handle)
|
||||
}
|
||||
}
|
||||
|
||||
pub type HandlerCallback = Rc<dyn Fn(MouseEvent, &mut dyn Any, &mut WindowContext, usize) -> bool>;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, Hash)]
|
||||
|
||||
Reference in New Issue
Block a user