mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 06:11:16 +00:00
Remove ComponentVtable::input_event
And the custom handling of the mouse grabber
This commit is contained in:
parent
845627c6b4
commit
8a64f10e84
69 changed files with 213 additions and 469 deletions
|
@ -178,44 +178,6 @@ using cbindgen_private::KeyEventResult;
|
|||
using cbindgen_private::MouseEvent;
|
||||
using cbindgen_private::sixtyfps_visit_item_tree;
|
||||
namespace private_api {
|
||||
template<typename GetDynamic>
|
||||
inline InputEventResult process_input_event(const ComponentRc &component_rc, int64_t &mouse_grabber,
|
||||
MouseEvent mouse_event, Slice<ItemTreeNode> tree,
|
||||
GetDynamic get_dynamic, const ComponentWindow *window)
|
||||
{
|
||||
if (mouse_grabber != -1) {
|
||||
auto item_index = mouse_grabber & 0xffffffff;
|
||||
auto rep_index = mouse_grabber >> 32;
|
||||
auto offset =
|
||||
cbindgen_private::sixtyfps_item_offset(component_rc.borrow(), tree, item_index);
|
||||
mouse_event.pos = { mouse_event.pos.x - offset.x, mouse_event.pos.y - offset.y };
|
||||
const auto &item_node = tree.ptr[item_index];
|
||||
InputEventResult result = InputEventResult::EventIgnored;
|
||||
cbindgen_private::ItemRc item_rc{component_rc, uintptr_t(item_index)};
|
||||
switch (item_node.tag) {
|
||||
case ItemTreeNode::Tag::Item:
|
||||
result = item_node.item.item.vtable->input_event(
|
||||
{
|
||||
item_node.item.item.vtable,
|
||||
reinterpret_cast<char *>(component_rc.borrow().instance)
|
||||
+ item_node.item.item.offset,
|
||||
},
|
||||
mouse_event, window, &item_rc);
|
||||
break;
|
||||
case ItemTreeNode::Tag::DynamicTree: {
|
||||
ComponentRef comp = get_dynamic(item_node.dynamic_tree.index, rep_index);
|
||||
result = comp.vtable->input_event(comp, mouse_event, window);
|
||||
} break;
|
||||
}
|
||||
if (result != InputEventResult::GrabMouse) {
|
||||
mouse_grabber = -1;
|
||||
}
|
||||
return result;
|
||||
} else {
|
||||
return cbindgen_private::sixtyfps_process_ungrabbed_mouse_event(&component_rc, mouse_event,
|
||||
window, &mouse_grabber);
|
||||
}
|
||||
}
|
||||
|
||||
void dealloc(const ComponentVTable *, uint8_t *ptr, vtable::Layout layout)
|
||||
{
|
||||
|
|
|
@ -17,11 +17,11 @@ inline void mock_elapsed_time(int64_t time_in_ms)
|
|||
cbindgen_private::sixtyfps_mock_elapsed_time(time_in_ms);
|
||||
}
|
||||
template<typename Component>
|
||||
inline void send_mouse_click(const Component &component, float x, float y)
|
||||
inline void send_mouse_click(const ComponentHandle<Component> *component, float x, float y)
|
||||
{
|
||||
cbindgen_private::sixtyfps_send_mouse_click(
|
||||
{ &Component::component_type, const_cast<Component *>(&component) }, x, y,
|
||||
&component.window);
|
||||
reinterpret_cast<const vtable::VRc<private_api::ComponentVTable>*>(component),
|
||||
x, y, &(*component)->window);
|
||||
}
|
||||
|
||||
template<typename Component>
|
||||
|
|
|
@ -440,8 +440,9 @@ declare_types! {
|
|||
let lock = cx.lock();
|
||||
let comp = this.borrow(&lock).0.clone();
|
||||
let component = comp.ok_or(()).or_else(|()| cx.throw_error("Invalid type"))?;
|
||||
let win = component.window();
|
||||
run_scoped(&mut cx,this.downcast().unwrap(), || {
|
||||
sixtyfps_corelib::tests::sixtyfps_send_mouse_click(component.borrow(), x, y, &component.window());
|
||||
sixtyfps_corelib::tests::sixtyfps_send_mouse_click(&vtable::VRc::into_dyn(component), x, y, &win);
|
||||
Ok(())
|
||||
})?;
|
||||
Ok(JsUndefined::new().as_value(&mut cx))
|
||||
|
|
|
@ -181,9 +181,9 @@ pub mod re_exports {
|
|||
PathArcTo, PathData, PathElement, PathEvent, PathLineTo, Point, Rect, Size,
|
||||
};
|
||||
pub use sixtyfps_corelib::input::{
|
||||
process_ungrabbed_mouse_event, FocusEvent, InputEventResult, KeyCode, KeyEvent,
|
||||
KeyEventResult, KeyboardModifiers, MouseEvent, ALT_MODIFIER, CONTROL_MODIFIER,
|
||||
COPY_PASTE_MODIFIER, LOGO_MODIFIER, NO_MODIFIER, SHIFT_MODIFIER,
|
||||
FocusEvent, InputEventResult, KeyCode, KeyEvent, KeyEventResult, KeyboardModifiers,
|
||||
MouseEvent, ALT_MODIFIER, CONTROL_MODIFIER, COPY_PASTE_MODIFIER, LOGO_MODIFIER,
|
||||
NO_MODIFIER, SHIFT_MODIFIER,
|
||||
};
|
||||
pub use sixtyfps_corelib::item_tree::{
|
||||
item_offset, visit_item_tree, ItemTreeNode, ItemVisitorRefMut, ItemVisitorVTable,
|
||||
|
@ -308,17 +308,17 @@ pub mod testing {
|
|||
pub use sixtyfps_corelib::tests::sixtyfps_mock_elapsed_time as mock_elapsed_time;
|
||||
/// Simulate a mouse click
|
||||
pub fn send_mouse_click<
|
||||
X: vtable::HasStaticVTable<sixtyfps_corelib::component::ComponentVTable> + HasWindow,
|
||||
X: vtable::HasStaticVTable<sixtyfps_corelib::component::ComponentVTable> + HasWindow + 'static,
|
||||
>(
|
||||
component: core::pin::Pin<&X>,
|
||||
component: &crate::ComponentHandle<X>,
|
||||
x: f32,
|
||||
y: f32,
|
||||
) {
|
||||
sixtyfps_corelib::tests::sixtyfps_send_mouse_click(
|
||||
vtable::VRef::new_pin(component),
|
||||
&vtable::VRc::into_dyn(component.inner.clone()),
|
||||
x,
|
||||
y,
|
||||
component.component_window(),
|
||||
component.inner.component_window(),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -1091,34 +1091,6 @@ fn generate_component(
|
|||
}),
|
||||
));
|
||||
|
||||
component_struct.members.push((
|
||||
Access::Private,
|
||||
Declaration::Var(Var {
|
||||
ty: "int64_t".into(),
|
||||
name: "mouse_grabber".into(),
|
||||
init: Some("-1".into()),
|
||||
}),
|
||||
));
|
||||
component_struct.members.push((
|
||||
Access::Private,
|
||||
Declaration::Function(Function {
|
||||
name: "input_event".into(),
|
||||
signature:
|
||||
"(sixtyfps::private_api::ComponentRef component, sixtyfps::MouseEvent mouse_event, const sixtyfps::private_api::ComponentWindow *window) -> sixtyfps::InputEventResult"
|
||||
.into(),
|
||||
is_static: true,
|
||||
statements: Some(vec {".into(),
|
||||
" (void)self;".into(),
|
||||
format!(" switch(dyn_index) {{ {} }};", repeated_input_branch.join("")),
|
||||
" return sixtyfps::private_api::ComponentRef{nullptr, nullptr};\n}, window);".into(),
|
||||
]),
|
||||
..Default::default()
|
||||
}),
|
||||
));
|
||||
|
||||
let (apply_layout, layout_info) = compute_layout(component, &mut repeater_layout_code);
|
||||
|
||||
component_struct.members.push((
|
||||
|
@ -1196,7 +1168,7 @@ fn generate_component(
|
|||
ty: "const sixtyfps::private_api::ComponentVTable".to_owned(),
|
||||
name: format!("{}::component_type", component_id),
|
||||
init: Some(format!(
|
||||
"{{ visit_children, get_item_ref, layouting_info, apply_layout, input_event, sixtyfps::private_api::drop_in_place<{}>, sixtyfps::private_api::dealloc }}",
|
||||
"{{ visit_children, get_item_ref, layouting_info, apply_layout, sixtyfps::private_api::drop_in_place<{}>, sixtyfps::private_api::dealloc }}",
|
||||
component_id)
|
||||
),
|
||||
}));
|
||||
|
|
|
@ -682,37 +682,6 @@ fn generate_component(
|
|||
}
|
||||
}
|
||||
|
||||
fn input_event(self: ::core::pin::Pin<&Self>, mouse_event : sixtyfps::re_exports::MouseEvent, window: &sixtyfps::re_exports::ComponentWindow) -> sixtyfps::re_exports::InputEventResult {
|
||||
use sixtyfps::re_exports::*;
|
||||
let mouse_grabber = self.mouse_grabber.get();
|
||||
let self_rc = VRc::into_dyn(self.as_ref().self_weak.get().unwrap().upgrade().unwrap());
|
||||
#[allow(unused)]
|
||||
let (status, new_grab) = if let Some((item_index, rep_index)) = mouse_grabber.aborted_indexes() {
|
||||
let tree = Self::item_tree();
|
||||
let offset = item_offset(self, tree, item_index);
|
||||
let mut event = mouse_event.clone();
|
||||
event.pos -= offset.to_vector();
|
||||
let res = match tree[item_index] {
|
||||
ItemTreeNode::Item { item, .. } => {
|
||||
item.apply_pin(self).as_ref().input_event(event, window, &ItemRc::new(self_rc, item_index))
|
||||
}
|
||||
ItemTreeNode::DynamicTree { index } => {
|
||||
match index {
|
||||
#(#repeated_input_branch)*
|
||||
_ => panic!("invalid index {}", index),
|
||||
}
|
||||
}
|
||||
};
|
||||
match res {
|
||||
InputEventResult::GrabMouse => (res, mouse_grabber),
|
||||
_ => (res, VisitChildrenResult::CONTINUE),
|
||||
}
|
||||
} else {
|
||||
process_ungrabbed_mouse_event(&self_rc, mouse_event, window)
|
||||
};
|
||||
self.mouse_grabber.set(new_grab);
|
||||
status
|
||||
}
|
||||
|
||||
#layouts
|
||||
|
||||
|
@ -769,7 +738,6 @@ fn generate_component(
|
|||
#(#repeated_element_names : sixtyfps::re_exports::Repeater<#repeated_element_components>,)*
|
||||
#(#self_weak : sixtyfps::re_exports::OnceCell<sixtyfps::re_exports::VWeak<sixtyfps::re_exports::ComponentVTable, #component_id>>,)*
|
||||
#(parent : sixtyfps::re_exports::VWeak<sixtyfps::re_exports::ComponentVTable, #parent_component_type>,)*
|
||||
mouse_grabber: ::core::cell::Cell<sixtyfps::re_exports::VisitChildrenResult>,
|
||||
#(#global_name : ::core::pin::Pin<::std::rc::Rc<#global_type>>,)*
|
||||
#window_field
|
||||
}
|
||||
|
@ -789,7 +757,6 @@ fn generate_component(
|
|||
#(#repeated_element_names : ::core::default::Default::default(),)*
|
||||
#(#self_weak : ::core::default::Default::default(),)*
|
||||
#(parent : parent as sixtyfps::re_exports::VWeak::<sixtyfps::re_exports::ComponentVTable, #parent_component_type>,)*
|
||||
mouse_grabber: ::core::cell::Cell::new(sixtyfps::re_exports::VisitChildrenResult::CONTINUE),
|
||||
#(#global_name : #global_type::new(),)*
|
||||
#window_field_init
|
||||
};
|
||||
|
|
|
@ -13,7 +13,6 @@ LICENSE END */
|
|||
|
||||
use crate::eventloop::ComponentWindow;
|
||||
use crate::graphics::Rect;
|
||||
use crate::input::{InputEventResult, MouseEvent};
|
||||
use crate::item_tree::{ItemVisitorVTable, TraversalOrder, VisitChildrenResult};
|
||||
use crate::items::ItemVTable;
|
||||
use crate::layout::LayoutInfo;
|
||||
|
@ -45,13 +44,6 @@ pub struct ComponentVTable {
|
|||
/// Apply the layout to all the items in the component, and set the geometry of the root to the given rect
|
||||
pub apply_layout: extern "C" fn(core::pin::Pin<VRef<ComponentVTable>>, Rect),
|
||||
|
||||
/// input event
|
||||
pub input_event: extern "C" fn(
|
||||
core::pin::Pin<VRef<ComponentVTable>>,
|
||||
MouseEvent,
|
||||
&ComponentWindow,
|
||||
) -> InputEventResult,
|
||||
|
||||
/// in-place destructor (for VRc)
|
||||
pub drop_in_place: unsafe fn(VRefMut<ComponentVTable>) -> vtable::Layout,
|
||||
/// dealloc function (for VRc)
|
||||
|
|
|
@ -13,7 +13,7 @@ LICENSE END */
|
|||
|
||||
use crate::component::ComponentRc;
|
||||
use crate::graphics::Point;
|
||||
use crate::item_tree::{ItemVisitorResult, VisitChildrenResult};
|
||||
use crate::item_tree::ItemVisitorResult;
|
||||
use crate::items::{ItemRc, ItemRef, ItemWeak};
|
||||
use euclid::default::Vector2D;
|
||||
use sixtyfps_corelib_macros::*;
|
||||
|
@ -464,66 +464,6 @@ pub enum FocusEvent {
|
|||
WindowLostFocus,
|
||||
}
|
||||
|
||||
/// Feed the given mouse event into the tree of items that component holds. The
|
||||
/// event will be delivered to items in front first.
|
||||
///
|
||||
/// The returned tuple is identical with the tuple the ItemVTable's input_event returns,
|
||||
/// indicating the acceptance or potential mouse grabbing as well as how to proceed
|
||||
/// in the event of recursive item tree traversal.
|
||||
///
|
||||
/// Arguments:
|
||||
/// * `component`: The component to deliver the event to.
|
||||
/// * `event`: The mouse event to deliver.
|
||||
pub fn process_ungrabbed_mouse_event(
|
||||
component: &ComponentRc,
|
||||
event: MouseEvent,
|
||||
window: &crate::eventloop::ComponentWindow,
|
||||
) -> (InputEventResult, VisitChildrenResult) {
|
||||
let offset = Vector2D::new(0., 0.);
|
||||
|
||||
let mut result = InputEventResult::EventIgnored;
|
||||
let item_index = crate::item_tree::visit_items(
|
||||
component,
|
||||
crate::item_tree::TraversalOrder::FrontToBack,
|
||||
|comp_rc, item, item_index, offset| -> ItemVisitorResult<Vector2D<f32>> {
|
||||
let geom = item.as_ref().geometry();
|
||||
let geom = geom.translate(*offset);
|
||||
|
||||
if geom.contains(event.pos) {
|
||||
let mut event2 = event.clone();
|
||||
event2.pos -= geom.origin.to_vector();
|
||||
match item.as_ref().input_event(
|
||||
event2,
|
||||
window,
|
||||
&crate::items::ItemRc::new(comp_rc.clone(), item_index),
|
||||
) {
|
||||
InputEventResult::EventAccepted => {
|
||||
result = InputEventResult::EventAccepted;
|
||||
return ItemVisitorResult::Abort;
|
||||
}
|
||||
InputEventResult::EventIgnored => (),
|
||||
InputEventResult::GrabMouse => {
|
||||
result = InputEventResult::GrabMouse;
|
||||
return ItemVisitorResult::Abort;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
ItemVisitorResult::Continue(geom.origin.to_vector())
|
||||
},
|
||||
offset,
|
||||
);
|
||||
|
||||
(
|
||||
result,
|
||||
if result == InputEventResult::GrabMouse {
|
||||
item_index
|
||||
} else {
|
||||
VisitChildrenResult::CONTINUE
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
/// Process the `mouse_event` on the `component`, the `mouse_grabber_stack` is the prebious stack
|
||||
/// of mouse grabber.
|
||||
/// Returns a new mouse grabber stack.
|
||||
|
@ -593,30 +533,3 @@ pub fn process_mouse_input(
|
|||
|
||||
result
|
||||
}
|
||||
|
||||
pub(crate) mod ffi {
|
||||
use super::*;
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn sixtyfps_process_ungrabbed_mouse_event(
|
||||
component: &ComponentRc,
|
||||
event: MouseEvent,
|
||||
window: &crate::eventloop::ComponentWindow,
|
||||
new_mouse_grabber: &mut crate::item_tree::VisitChildrenResult,
|
||||
) -> InputEventResult {
|
||||
let (res, grab) = process_ungrabbed_mouse_event(component, event, window);
|
||||
*new_mouse_grabber = grab;
|
||||
res
|
||||
}
|
||||
/*
|
||||
#[no_mangle]
|
||||
pub extern "C" fn sixtyfps_process_grabbed_mouse_event(
|
||||
component: ComponentRefPin,
|
||||
item: core::pin::Pin<ItemRef>,
|
||||
offset: Point,
|
||||
event: MouseEvent,
|
||||
old_grab: VisitChildrenResult,
|
||||
) -> (InputEventResult, crate::item_tree::VisitChildrenResult) {
|
||||
process_grabbed_mouse_event(component, item, offset, event, old_grab)
|
||||
}*/
|
||||
}
|
||||
|
|
|
@ -84,6 +84,5 @@ pub fn use_modules() -> usize {
|
|||
+ properties::ffi::sixtyfps_property_init as usize
|
||||
+ string::ffi::sixtyfps_shared_string_bytes as usize
|
||||
+ eventloop::ffi::sixtyfps_component_window_drop as usize
|
||||
+ input::ffi::sixtyfps_process_ungrabbed_mouse_event as usize
|
||||
+ component::ffi::sixtyfps_component_init_items as usize
|
||||
}
|
||||
|
|
|
@ -555,17 +555,6 @@ impl<C: RepeatedComponent> Repeater<C> {
|
|||
crate::item_tree::VisitChildrenResult::CONTINUE
|
||||
}
|
||||
|
||||
/// Forward an input event to a particular item
|
||||
pub fn input_event(
|
||||
&self,
|
||||
idx: usize,
|
||||
event: crate::input::MouseEvent,
|
||||
window: &crate::eventloop::ComponentWindow,
|
||||
) -> crate::input::InputEventResult {
|
||||
let c = self.inner.borrow().borrow().components[idx].1.clone();
|
||||
c.map_or(Default::default(), |c| c.as_pin_ref().input_event(event, window))
|
||||
}
|
||||
|
||||
/// Return the amount of item currently in the component
|
||||
pub fn len(&self) -> usize {
|
||||
self.inner.borrow().borrow().components.len()
|
||||
|
|
|
@ -28,17 +28,36 @@ pub extern "C" fn sixtyfps_mock_elapsed_time(time_in_ms: u64) {
|
|||
/// Simulate a click on a position within the component.
|
||||
#[no_mangle]
|
||||
pub extern "C" fn sixtyfps_send_mouse_click(
|
||||
component: core::pin::Pin<crate::component::ComponentRef>,
|
||||
component: &crate::component::ComponentRc,
|
||||
x: f32,
|
||||
y: f32,
|
||||
window: &crate::eventloop::ComponentWindow,
|
||||
) {
|
||||
component.as_ref().apply_layout(window.0.get_geometry());
|
||||
let mut mouse_grabber = Vec::new();
|
||||
vtable::VRc::borrow_pin(component).as_ref().apply_layout(window.0.get_geometry());
|
||||
|
||||
let pos = euclid::point2(x, y);
|
||||
component.as_ref().input_event(MouseEvent { pos, what: MouseEventType::MouseMoved }, window);
|
||||
component.as_ref().input_event(MouseEvent { pos, what: MouseEventType::MousePressed }, window);
|
||||
|
||||
mouse_grabber = crate::input::process_mouse_input(
|
||||
component.clone(),
|
||||
MouseEvent { pos, what: MouseEventType::MouseMoved },
|
||||
window,
|
||||
mouse_grabber,
|
||||
);
|
||||
mouse_grabber = crate::input::process_mouse_input(
|
||||
component.clone(),
|
||||
MouseEvent { pos, what: MouseEventType::MousePressed },
|
||||
window,
|
||||
mouse_grabber,
|
||||
);
|
||||
sixtyfps_mock_elapsed_time(50);
|
||||
component.as_ref().input_event(MouseEvent { pos, what: MouseEventType::MouseReleased }, window);
|
||||
mouse_grabber = crate::input::process_mouse_input(
|
||||
component.clone(),
|
||||
MouseEvent { pos, what: MouseEventType::MouseReleased },
|
||||
window,
|
||||
mouse_grabber,
|
||||
);
|
||||
drop(mouse_grabber);
|
||||
}
|
||||
|
||||
/// Simulate a change in keyboard modifiers pressed.
|
||||
|
|
|
@ -21,7 +21,6 @@ use sixtyfps_compilerlib::*;
|
|||
use sixtyfps_corelib::component::{Component, ComponentRefPin, ComponentVTable};
|
||||
use sixtyfps_corelib::eventloop::ComponentWindow;
|
||||
use sixtyfps_corelib::graphics::{Rect, Resource};
|
||||
use sixtyfps_corelib::input::{InputEventResult, MouseEvent};
|
||||
use sixtyfps_corelib::item_tree::{
|
||||
ItemTreeNode, ItemVisitorRefMut, ItemVisitorVTable, TraversalOrder, VisitChildrenResult,
|
||||
};
|
||||
|
@ -203,14 +202,6 @@ impl Component for ErasedComponentBox {
|
|||
self.borrow().as_ref().visit_children_item(index, order, visitor)
|
||||
}
|
||||
|
||||
fn input_event(
|
||||
self: Pin<&Self>,
|
||||
mouse_event: sixtyfps_corelib::input::MouseEvent,
|
||||
window: &ComponentWindow,
|
||||
) -> sixtyfps_corelib::input::InputEventResult {
|
||||
self.borrow().as_ref().input_event(mouse_event, window)
|
||||
}
|
||||
|
||||
fn layout_info(self: Pin<&Self>) -> sixtyfps_corelib::layout::LayoutInfo {
|
||||
self.borrow().as_ref().layout_info()
|
||||
}
|
||||
|
@ -228,7 +219,6 @@ impl Component for ErasedComponentBox {
|
|||
sixtyfps_corelib::ComponentVTable_static!(static COMPONENT_BOX_VT for ErasedComponentBox);
|
||||
|
||||
pub(crate) struct ComponentExtraData {
|
||||
mouse_grabber: core::cell::Cell<VisitChildrenResult>,
|
||||
pub(crate) globals: HashMap<String, Pin<Rc<dyn crate::global_component::GlobalComponent>>>,
|
||||
pub(crate) self_weak:
|
||||
once_cell::unsync::OnceCell<vtable::VWeak<ComponentVTable, ErasedComponentBox>>,
|
||||
|
@ -236,11 +226,7 @@ pub(crate) struct ComponentExtraData {
|
|||
|
||||
impl Default for ComponentExtraData {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
mouse_grabber: core::cell::Cell::new(VisitChildrenResult::CONTINUE),
|
||||
globals: HashMap::new(),
|
||||
self_weak: Default::default(),
|
||||
}
|
||||
Self { globals: HashMap::new(), self_weak: Default::default() }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -687,7 +673,6 @@ fn generate_component<'id>(
|
|||
visit_children_item,
|
||||
layout_info,
|
||||
apply_layout,
|
||||
input_event,
|
||||
get_item_ref,
|
||||
drop_in_place,
|
||||
dealloc,
|
||||
|
@ -1441,53 +1426,6 @@ pub fn get_repeater_by_name<'a, 'id>(
|
|||
(rep_in_comp.offset.apply_pin(instance_ref.instance), rep_in_comp.component_to_repeat.clone())
|
||||
}
|
||||
|
||||
extern "C" fn input_event(
|
||||
component: ComponentRefPin,
|
||||
mouse_event: sixtyfps_corelib::input::MouseEvent,
|
||||
window: &sixtyfps_corelib::eventloop::ComponentWindow,
|
||||
) -> sixtyfps_corelib::input::InputEventResult {
|
||||
// This is fine since we can only be called with a component that with our vtable which is a ComponentDescription
|
||||
let component_type = unsafe { get_component_type(component) };
|
||||
let instance = unsafe { Pin::new_unchecked(&*component.as_ptr().cast::<Instance>()) };
|
||||
let extra_data = component_type.extra_data_offset.apply(&*instance);
|
||||
generativity::make_guard!(guard);
|
||||
let instance_ref = unsafe { InstanceRef::from_pin_ref(component, guard) };
|
||||
let comp_rc = instance_ref.self_weak().get().unwrap().upgrade().unwrap();
|
||||
|
||||
let mouse_grabber = extra_data.mouse_grabber.get();
|
||||
let (status, new_grab) = if let Some((item_index, rep_index)) = mouse_grabber.aborted_indexes()
|
||||
{
|
||||
let tree = &component_type.item_tree;
|
||||
let offset = sixtyfps_corelib::item_tree::item_offset(instance, tree, item_index);
|
||||
let mut event = mouse_event.clone();
|
||||
event.pos -= offset.to_vector();
|
||||
let res = match tree[item_index] {
|
||||
ItemTreeNode::Item { item, .. } => item.apply_pin(instance).as_ref().input_event(
|
||||
event,
|
||||
window,
|
||||
&sixtyfps_corelib::items::ItemRc::new(vtable::VRc::into_dyn(comp_rc), item_index),
|
||||
),
|
||||
ItemTreeNode::DynamicTree { index } => {
|
||||
generativity::make_guard!(guard);
|
||||
let rep_in_comp = component_type.repeater[index].unerase(guard);
|
||||
rep_in_comp.offset.apply_pin(instance).input_event(rep_index, event, window)
|
||||
}
|
||||
};
|
||||
match res {
|
||||
sixtyfps_corelib::input::InputEventResult::GrabMouse => (res, mouse_grabber),
|
||||
_ => (res, VisitChildrenResult::CONTINUE),
|
||||
}
|
||||
} else {
|
||||
sixtyfps_corelib::input::process_ungrabbed_mouse_event(
|
||||
&vtable::VRc::into_dyn(comp_rc),
|
||||
mouse_event,
|
||||
window,
|
||||
)
|
||||
};
|
||||
extra_data.mouse_grabber.set(new_grab);
|
||||
status
|
||||
}
|
||||
|
||||
extern "C" fn layout_info(component: ComponentRefPin) -> LayoutInfo {
|
||||
generativity::make_guard!(guard);
|
||||
// This is fine since we can only be called with a component that with our vtable which is a ComponentDescription
|
||||
|
@ -1553,14 +1491,6 @@ unsafe extern "C" fn dealloc(_vtable: &ComponentVTable, ptr: *mut u8, layout: vt
|
|||
std::alloc::dealloc(ptr, layout.try_into().unwrap());
|
||||
}
|
||||
|
||||
/// Get the component description from a ComponentRef
|
||||
///
|
||||
/// Safety: the component must have been created by the interpreter
|
||||
pub unsafe fn get_component_type<'a>(component: ComponentRefPin<'a>) -> &'a ComponentDescription {
|
||||
&*(Pin::into_inner_unchecked(component).get_vtable() as *const ComponentVTable
|
||||
as *const ComponentDescription)
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
pub struct InstanceRef<'a, 'id> {
|
||||
pub instance: Pin<&'a Instance<'id>>,
|
||||
|
|
|
@ -27,8 +27,8 @@ TestCase := Rectangle {
|
|||
|
||||
/*
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_prop_a(), 1);
|
||||
assert_eq!(instance.get_prop_b(), 2);
|
||||
```
|
||||
|
|
|
@ -63,8 +63,8 @@ TestCase := Rectangle {
|
|||
/*
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_text1(), sixtyfps::SharedString::from("Hello"));
|
||||
assert_eq!(instance.get_text2(), sixtyfps::SharedString::from("Blah"));
|
||||
assert_eq!(instance.get_ti1_text(), sixtyfps::SharedString::from("Hello"));
|
||||
|
|
|
@ -29,8 +29,8 @@ TestCase := Rectangle {
|
|||
/*
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_sub_width1(), 80.);
|
||||
assert_eq!(instance.get_sub_width2(), 80.);
|
||||
instance.set_sub_width1(99.);
|
||||
|
|
|
@ -42,8 +42,8 @@ assert(instance.get_rect1_pos_ok());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 200.)));
|
||||
assert!(instance.get_rect1_pos_ok());
|
||||
|
|
|
@ -50,8 +50,8 @@ assert(instance.get_rect1_pos_ok());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 200.)));
|
||||
assert!(instance.get_rect1_pos_ok());
|
||||
|
|
|
@ -31,8 +31,8 @@ assert_eq(instance.get_s1(), "123");
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
instance.set_condition(true);
|
||||
assert_eq!(instance.get_s1(), "abc");
|
||||
assert_eq!(instance.get_s2(), "123");
|
||||
|
|
|
@ -29,8 +29,8 @@ assert_eq(instance.get_test_value2(), 3);
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
instance.set_condition(true);
|
||||
assert_eq!(instance.get_test_value(), 1);
|
||||
assert_eq!(instance.get_test_value2(), 2);
|
||||
|
|
|
@ -55,8 +55,8 @@ assert_eq(instance.get_result(), 5+33-1);
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
instance.emit_action();
|
||||
assert_eq!(instance.get_result(), 3);
|
||||
instance.set_value(5);
|
||||
|
|
|
@ -33,37 +33,37 @@ auto handle = TestCase::create();
|
|||
const TestCase &instance = *handle;
|
||||
|
||||
// does not click on anything
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq(instance.get_touch1(), 0);
|
||||
assert_eq(instance.get_touch2(), 0);
|
||||
|
||||
// click on second one
|
||||
sixtyfps::testing::send_mouse_click(instance, 101., 101.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 101., 101.);
|
||||
assert_eq(instance.get_touch1(), 0);
|
||||
assert_eq(instance.get_touch2(), 1);
|
||||
|
||||
// click on first one only
|
||||
sixtyfps::testing::send_mouse_click(instance, 108., 108.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 108., 108.);
|
||||
assert_eq(instance.get_touch1(), 1);
|
||||
assert_eq(instance.get_touch2(), 1);
|
||||
```
|
||||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
// does not click on anything
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq!(instance.get_touch1(), 0);
|
||||
assert_eq!(instance.get_touch2(), 0);
|
||||
|
||||
// click on second one
|
||||
sixtyfps::testing::send_mouse_click(instance, 101., 101.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 101., 101.);
|
||||
assert_eq!(instance.get_touch1(), 0);
|
||||
assert_eq!(instance.get_touch2(), 1);
|
||||
|
||||
// click on first one only
|
||||
sixtyfps::testing::send_mouse_click(instance, 108., 108.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 108., 108.);
|
||||
assert_eq!(instance.get_touch1(), 1);
|
||||
assert_eq!(instance.get_touch2(), 1);
|
||||
```
|
||||
|
|
|
@ -37,8 +37,8 @@ assert_eq(instance.get_a(), (((42 + 8) * 10) / 2) - 3);
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_t1(), 4 + 3 * 2 + 2 - 50 - 2);
|
||||
assert_eq!(instance.get_t2(), 500 / 2 * 30 - 1);
|
||||
instance.set_a(42);
|
||||
|
|
|
@ -68,8 +68,8 @@ assert_eq(instance.get_t6(), true);
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
|
||||
assert_eq!(instance.get_t1(), true);
|
||||
assert_eq!(instance.get_t2(), false);
|
||||
|
|
|
@ -22,8 +22,8 @@ assert_eq(instance.get_t2(), true);
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_t1(), 98.5);
|
||||
assert_eq!(instance.get_t2(), true);
|
||||
```
|
||||
|
|
|
@ -23,8 +23,8 @@ assert_eq(instance.get_t3(),3);
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_t1(), 0);
|
||||
assert_eq!(instance.get_t2(), 8.0);
|
||||
assert_eq!(instance.get_t3(), 3);
|
||||
|
|
|
@ -36,8 +36,8 @@ assert_eq(instance.get_s4(), sixtyfps::SharedString("ayoxxx"));
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_s1(), sixtyfps::SharedString::from("hello1212"));
|
||||
assert_eq!(instance.get_s2(), sixtyfps::SharedString::from("10hello5.1"));
|
||||
instance.set_a(42);
|
||||
|
|
|
@ -30,12 +30,12 @@ TestCase := Rectangle {
|
|||
|
||||
/*
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert!(!instance.get_input1_focused());
|
||||
assert!(!instance.get_input2_focused());
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 150., 100.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 150., 100.);
|
||||
assert!(instance.get_input1_focused());
|
||||
assert!(!instance.get_input2_focused());
|
||||
|
||||
|
@ -43,7 +43,7 @@ sixtyfps::testing::send_keyboard_string_sequence(instance, "Only for field 1");
|
|||
assert_eq!(instance.get_input1_text(), "Only for field 1");
|
||||
assert_eq!(instance.get_input2_text(), "");
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 150., 300.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 150., 300.);
|
||||
assert!(!instance.get_input1_focused());
|
||||
assert!(instance.get_input2_focused());
|
||||
|
||||
|
@ -58,7 +58,7 @@ const TestCase &instance = *handle;
|
|||
assert(!instance.get_input1_focused());
|
||||
assert(!instance.get_input2_focused());
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 150., 100.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 150., 100.);
|
||||
assert(instance.get_input1_focused());
|
||||
assert(!instance.get_input2_focused());
|
||||
|
||||
|
@ -66,7 +66,7 @@ sixtyfps::testing::send_keyboard_string_sequence(instance, "Only for field 1");
|
|||
assert_eq(instance.get_input1_text(), "Only for field 1");
|
||||
assert_eq(instance.get_input2_text(), "");
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 150., 300.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 150., 300.);
|
||||
assert(!instance.get_input1_focused());
|
||||
assert(instance.get_input2_focused());
|
||||
|
||||
|
|
|
@ -36,8 +36,8 @@ TestCase := Rectangle {
|
|||
|
||||
/*
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert!(!instance.get_input1_focused());
|
||||
assert!(!instance.get_input2_focused());
|
||||
|
||||
|
|
|
@ -31,8 +31,8 @@ TestCase := Rectangle {
|
|||
|
||||
/*
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert!(instance.get_input1_focused());
|
||||
assert!(!instance.get_input2_focused());
|
||||
|
||||
|
@ -40,11 +40,11 @@ sixtyfps::testing::send_keyboard_string_sequence(instance, "Only for field 1");
|
|||
assert_eq!(instance.get_input1_text(), "Only for field 1");
|
||||
assert_eq!(instance.get_input2_text(), "");
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 150., 100.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 150., 100.);
|
||||
assert!(instance.get_input1_focused());
|
||||
assert!(!instance.get_input2_focused());
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 150., 300.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 150., 300.);
|
||||
assert!(!instance.get_input1_focused());
|
||||
assert!(instance.get_input2_focused());
|
||||
```
|
||||
|
@ -59,11 +59,11 @@ sixtyfps::testing::send_keyboard_string_sequence(instance, "Only for field 1");
|
|||
assert_eq(instance.get_input1_text(), "Only for field 1");
|
||||
assert_eq(instance.get_input2_text(), "");
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 150., 100.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 150., 100.);
|
||||
assert(instance.get_input1_focused());
|
||||
assert(!instance.get_input2_focused());
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 150., 300.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 150., 300.);
|
||||
assert(!instance.get_input1_focused());
|
||||
assert(instance.get_input2_focused());
|
||||
```
|
||||
|
|
|
@ -30,8 +30,8 @@ TestCase := Rectangle {
|
|||
|
||||
/*
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert!(!instance.get_input1_focused());
|
||||
assert!(instance.get_input2_focused());
|
||||
```
|
||||
|
|
|
@ -32,8 +32,8 @@ TestCase := Rectangle {
|
|||
|
||||
/*
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert!(!instance.get_input1_focused());
|
||||
assert!(instance.get_input2_focused());
|
||||
```
|
||||
|
|
|
@ -24,8 +24,8 @@ assert_eq(instance.get_p2(), 44);
|
|||
```
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_p1(), 42);
|
||||
assert_eq!(instance.get_p2(), 44);
|
||||
```
|
||||
|
|
|
@ -27,8 +27,8 @@ assert_eq(instance.get_exp().e.a, 2001);
|
|||
```
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_p1(), 2003);
|
||||
assert_eq!(instance.get_exp().e.a, 2001);
|
||||
```
|
||||
|
|
|
@ -19,8 +19,8 @@ assert_eq(instance.get_some_prop(), 42);
|
|||
```
|
||||
|
||||
```rust
|
||||
let instance = MainWindow::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = MainWindow::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_some_prop(), 42);
|
||||
```
|
||||
|
||||
|
|
|
@ -87,8 +87,8 @@ assert(instance.get_c1());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 300.)));
|
||||
assert!(instance.get_v1());
|
||||
|
|
|
@ -51,8 +51,8 @@ assert_eq(instance.get_layout_width(), 300);
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 300.)));
|
||||
assert!(instance.get_rect1_pos_ok());
|
||||
|
|
|
@ -62,8 +62,8 @@ assert(instance.get_rect3_pos_ok());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 300.)));
|
||||
assert!(instance.get_rect1_pos_ok());
|
||||
|
|
|
@ -65,8 +65,8 @@ assert(instance.get_rect2_pos_ok());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 300.)));
|
||||
assert!(instance.get_rect1_pos_ok());
|
||||
|
|
|
@ -40,29 +40,29 @@ TestCase := Rectangle {
|
|||
```cpp
|
||||
auto handle = TestCase::create();
|
||||
const TestCase &instance = *handle;
|
||||
sixtyfps::testing::send_mouse_click(instance, -1., -1.); // FIXME: Force creation of repeater components before computing the layout
|
||||
sixtyfps::testing::send_mouse_click(&handle, -1., -1.); // FIXME: Force creation of repeater components before computing the layout
|
||||
TestCase::apply_layout({&TestCase::component_type, const_cast<TestCase*>(&instance) }, sixtyfps::Rect{0, 0, 300, 300});
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 190., 190.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 190., 190.);
|
||||
assert_eq(instance.get_value(), 1+1);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 290.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 290.);
|
||||
assert_eq(instance.get_value(), 1+1+2);
|
||||
```
|
||||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
sixtyfps::testing::send_mouse_click(instance, -1., -1.); // FIXME: Force creation of repeater components before computing the layout
|
||||
sixtyfps::testing::send_mouse_click(&handle, -1., -1.); // FIXME: Force creation of repeater components before computing the layout
|
||||
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 300.)));
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 190., 190.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 190., 190.);
|
||||
assert_eq!(instance.get_value(), 1+1);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 290.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 290.);
|
||||
assert_eq!(instance.get_value(), 1+1+2);
|
||||
|
||||
```
|
||||
|
|
|
@ -43,28 +43,28 @@ export TestCase := Rectangle {
|
|||
auto handle = TestCase::create();
|
||||
const TestCase &instance = *handle;
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq(instance.get_value(), -10);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 25., 25.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 25., 25.);
|
||||
assert_eq(instance.get_value(), 8);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 45., 15.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 45., 15.);
|
||||
assert_eq(instance.get_value(), 9);
|
||||
```
|
||||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq!(instance.get_value(), -10);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 25., 25.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 25., 25.);
|
||||
assert_eq!(instance.get_value(), 8);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 45., 15.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 45., 15.);
|
||||
assert_eq!(instance.get_value(), 9);
|
||||
|
||||
```
|
||||
|
|
|
@ -80,8 +80,8 @@ assert(instance.get_pink_rect_ok());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 300.)));
|
||||
assert!(instance.get_blue_rect_ok());
|
||||
|
|
|
@ -142,8 +142,8 @@ assert(instance.get_rect_black2_ok());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 300.)));
|
||||
assert!(instance.get_rect_blue_ok());
|
||||
|
|
|
@ -56,8 +56,8 @@ assert(instance.get_rect6_pos_ok());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 300.)));
|
||||
assert!(instance.get_rect1_pos_ok());
|
||||
|
|
|
@ -64,8 +64,8 @@ assert(instance.get_rect4_pos_ok());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 300.)));
|
||||
assert!(instance.get_rect1_pos_ok());
|
||||
|
|
|
@ -51,8 +51,8 @@ assert(instance.get_rect2_pos_ok());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 300.)));
|
||||
assert!(instance.get_rect1_pos_ok());
|
||||
|
|
|
@ -95,8 +95,8 @@ assert(instance.get_test5());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
use sixtyfps::re_exports::Component;
|
||||
instance.apply_layout(sixtyfps::re_exports::Rect::new(Default::default(), sixtyfps::re_exports::Size::new(300., 300.)));
|
||||
assert!(instance.get_test1());
|
||||
|
|
|
@ -43,8 +43,8 @@ assert_eq(instance.get_p2(), 3);
|
|||
```
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_p1(), 51);
|
||||
assert_eq!(instance.get_p2(), 3);
|
||||
```
|
||||
|
|
|
@ -29,8 +29,8 @@ assert_eq(instance.get_p2(), 5930);
|
|||
```
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_p1(), 5770);
|
||||
assert_eq!(instance.get_p2(), 5930);
|
||||
```
|
||||
|
|
|
@ -95,28 +95,28 @@ export TestCase := Rectangle {
|
|||
auto handle = TestCase::create();
|
||||
const TestCase &instance = *handle;
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq(instance.get_value(), 10);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 15.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 15.);
|
||||
assert_eq(instance.get_value(), 13);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 15.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 15.);
|
||||
assert_eq(instance.get_value(), 13+42);
|
||||
```
|
||||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq!(instance.get_value(), 10);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 15.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 15.);
|
||||
assert_eq!(instance.get_value(), 13);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 15.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 15.);
|
||||
assert_eq!(instance.get_value(), 13+42);
|
||||
|
||||
```
|
||||
|
|
|
@ -41,32 +41,32 @@ auto handle = TestCase::create();
|
|||
const TestCase &instance = *handle;
|
||||
|
||||
// condition is false
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq(instance.get_top_level(), 42);
|
||||
|
||||
instance.set_cond1(true);
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq(instance.get_top_level(), 92);
|
||||
|
||||
instance.set_cond1(false);
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq(instance.get_top_level(), 92);
|
||||
```
|
||||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq!(instance.get_top_level(), 42);
|
||||
|
||||
instance.set_cond1(true);
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq!(instance.get_top_level(), 92);
|
||||
|
||||
instance.set_cond1(false);
|
||||
sixtyfps::testing::send_mouse_click(instance, 5., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 5., 5.);
|
||||
assert_eq!(instance.get_top_level(), 92);
|
||||
```
|
||||
|
||||
|
|
|
@ -50,15 +50,15 @@ TestCase := Rectangle {
|
|||
|
||||
/*
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
|
||||
// there should be nothing there
|
||||
sixtyfps::testing::send_mouse_click(instance, 25., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 25., 5.);
|
||||
assert_eq!(instance.get_clicked_score(), 0);
|
||||
assert_eq!(instance.get_clicked_internal_state(), 0);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 5.);
|
||||
assert_eq!(instance.get_clicked_score(), 789000);
|
||||
assert_eq!(instance.get_clicked_internal_state(), 1);
|
||||
|
||||
|
@ -72,32 +72,32 @@ let another_model = std::rc::Rc::new(sixtyfps::VecModel::<ModelData>::from(
|
|||
|
||||
instance.set_model(sixtyfps::ModelHandle::new(another_model.clone()));
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 25., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 25., 5.);
|
||||
assert_eq!(instance.get_clicked_score(), 333000);
|
||||
assert_eq!(instance.get_clicked_internal_state(), 1);
|
||||
assert_eq!(instance.get_clicked_index(), 2);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 5.);
|
||||
assert_eq!(instance.get_clicked_score(), 222000);
|
||||
assert_eq!(instance.get_clicked_name(), sixtyfps::SharedString::from("cruel"));
|
||||
assert_eq!(instance.get_clicked_internal_state(), 1);
|
||||
|
||||
another_model.push(("a4".into(), "!".into(), 444.));
|
||||
sixtyfps::testing::send_mouse_click(instance, 35., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 35., 5.);
|
||||
assert_eq!(instance.get_clicked_score(), 444000);
|
||||
assert_eq!(instance.get_clicked_name(), sixtyfps::SharedString::from("!"));
|
||||
assert_eq!(instance.get_clicked_internal_state(), 1);
|
||||
|
||||
use sixtyfps::Model;
|
||||
another_model.set_row_data(1, ("a2".into(), "idyllic".into(), 555.));
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 5.);
|
||||
assert_eq!(instance.get_clicked_score(), 555000);
|
||||
assert_eq!(instance.get_clicked_name(), sixtyfps::SharedString::from("idyllic"));
|
||||
assert_eq!(instance.get_clicked_internal_state(), 2);
|
||||
assert_eq!(instance.get_clicked_index(), 1);
|
||||
|
||||
another_model.remove(1);
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 5.);
|
||||
assert_eq!(instance.get_clicked_score(), 333000);
|
||||
assert_eq!(instance.get_clicked_name(), sixtyfps::SharedString::from("world"));
|
||||
assert_eq!(instance.get_clicked_internal_state(), 2);
|
||||
|
@ -110,11 +110,11 @@ auto handle = TestCase::create();
|
|||
const TestCase &instance = *handle;
|
||||
|
||||
// there should be nothing there
|
||||
sixtyfps::testing::send_mouse_click(instance, 25., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 25., 5.);
|
||||
assert_eq(instance.get_clicked_score(), 0);
|
||||
assert_eq(instance.get_clicked_internal_state(), 0);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 5.);
|
||||
assert_eq(instance.get_clicked_score(), 789000);
|
||||
assert_eq(instance.get_clicked_internal_state(), 1);
|
||||
|
||||
|
@ -126,31 +126,31 @@ array.push_back(ModelData{"a3", "world", 333.});
|
|||
auto another_model = std::make_shared<sixtyfps::VectorModel<ModelData>>(std::move(array));
|
||||
instance.set_model(another_model);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 25., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 25., 5.);
|
||||
assert_eq(instance.get_clicked_score(), 333000);
|
||||
assert_eq(instance.get_clicked_internal_state(), 1);
|
||||
assert_eq(instance.get_clicked_index(), 2);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 5.);
|
||||
assert_eq(instance.get_clicked_score(), 222000);
|
||||
assert_eq(instance.get_clicked_name(), "cruel");
|
||||
assert_eq(instance.get_clicked_internal_state(), 1);
|
||||
|
||||
another_model->push_back({"a4", "!", 444.});
|
||||
sixtyfps::testing::send_mouse_click(instance, 35., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 35., 5.);
|
||||
assert_eq(instance.get_clicked_score(), 444000);
|
||||
assert_eq(instance.get_clicked_name(), "!");
|
||||
assert_eq(instance.get_clicked_internal_state(), 1);
|
||||
|
||||
another_model->set_row_data(1, {"a2", "idyllic", 555.});
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 5.);
|
||||
assert_eq(instance.get_clicked_score(), 555000);
|
||||
assert_eq(instance.get_clicked_name(), "idyllic");
|
||||
assert_eq(instance.get_clicked_internal_state(), 2);
|
||||
assert_eq(instance.get_clicked_index(), 1);
|
||||
|
||||
another_model->erase(1);
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 5.);
|
||||
assert_eq(instance.get_clicked_score(), 333000);
|
||||
assert_eq(instance.get_clicked_name(), "world");
|
||||
assert_eq(instance.get_clicked_internal_state(), 2);
|
||||
|
|
|
@ -44,10 +44,10 @@ TestCase := Rectangle {
|
|||
/*
|
||||
```rust
|
||||
use sixtyfps::Model;
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 5.);
|
||||
assert_eq!(instance.get_clicked_score(), 791);
|
||||
|
||||
type ModelData = (sixtyfps::SharedString, sixtyfps::SharedString, f32);
|
||||
|
@ -60,10 +60,10 @@ let another_model = std::rc::Rc::new(sixtyfps::VecModel::<ModelData>::from(
|
|||
|
||||
instance.set_model(sixtyfps::ModelHandle::new(another_model.clone()));
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 25., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 25., 5.);
|
||||
assert_eq!(instance.get_clicked_score(), 335);
|
||||
assert_eq!(another_model.row_data(2).2, 335.);
|
||||
sixtyfps::testing::send_mouse_click(instance, 25., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 25., 5.);
|
||||
assert_eq!(instance.get_clicked_score(), 337);
|
||||
assert_eq!(another_model.row_data(2).2, 337.);
|
||||
assert_eq!(another_model.row_data(2).1, sixtyfps::SharedString::from("world"));
|
||||
|
@ -72,7 +72,7 @@ assert_eq!(another_model.row_data(2).1, sixtyfps::SharedString::from("world"));
|
|||
```cpp
|
||||
auto handle = TestCase::create();
|
||||
const TestCase &instance = *handle;
|
||||
sixtyfps::testing::send_mouse_click(instance, 15., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 15., 5.);
|
||||
assert_eq(instance.get_clicked_score(), 791);
|
||||
|
||||
using ModelData = std::tuple<sixtyfps::SharedString, sixtyfps::SharedString, float>;
|
||||
|
@ -83,10 +83,10 @@ array.push_back(ModelData{"a3", "world", 333.});
|
|||
auto another_model = std::make_shared<sixtyfps::VectorModel<ModelData>>(std::move(array));
|
||||
instance.set_model(another_model);
|
||||
|
||||
sixtyfps::testing::send_mouse_click(instance, 25., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 25., 5.);
|
||||
assert_eq(instance.get_clicked_score(), 335);
|
||||
assert_eq(std::get<2>(another_model->row_data(2)), 335.);
|
||||
sixtyfps::testing::send_mouse_click(instance, 25., 5.);
|
||||
sixtyfps::testing::send_mouse_click(&handle, 25., 5.);
|
||||
assert_eq(instance.get_clicked_score(), 337);
|
||||
assert_eq(std::get<2>(another_model->row_data(2)), 337.);
|
||||
assert_eq(std::get<1>(another_model->row_data(2)), "world");
|
||||
|
|
|
@ -31,8 +31,8 @@ assert_eq(instance.get_this__has_6_slashes__(), 86);
|
|||
```
|
||||
|
||||
```rust
|
||||
let instance = Test_Case::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = Test_Case::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_property_x1(), 42.);
|
||||
assert_eq!(instance.get_property_x2(), 42.);
|
||||
assert_eq!(instance.get_this__has_6_slashes__(), 86);
|
||||
|
|
|
@ -31,8 +31,8 @@ TestCase := Rectangle {
|
|||
/*
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_hello(), 40);
|
||||
assert_eq!(instance.get_binding_dep(), 100);
|
||||
instance.set_condition(false);
|
||||
|
|
|
@ -39,8 +39,8 @@ LICENSE END */
|
|||
/*
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_text1_foo(), 85 + 4);
|
||||
assert_eq!(instance.get_some_prop(), 5);
|
||||
instance.set_active_index(1);
|
||||
|
|
|
@ -35,8 +35,8 @@ assert_eq(signal_3_emited, 1);
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
let signal_3_emited = std::rc::Rc::new(std::cell::Cell::new(0));
|
||||
instance.on_test_signal3({
|
||||
let signal_3_emited = signal_3_emited.clone();
|
||||
|
|
|
@ -42,8 +42,8 @@ assert_eq(signal_3_string_value, "hello");
|
|||
```
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
let signal_3_emited = std::rc::Rc::new(std::cell::RefCell::new((0, String::new())));
|
||||
instance.on_test_signal3({
|
||||
let signal_3_emited = signal_3_emited.clone();
|
||||
|
|
|
@ -19,9 +19,9 @@ TestCase := TextInput {
|
|||
|
||||
/*
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
sixtyfps::testing::send_mouse_click(instance, 50., 50.);
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
sixtyfps::testing::send_mouse_click(&handle, 50., 50.);
|
||||
assert!(instance.get_input_focused());
|
||||
assert_eq!(instance.get_test_text(), "");
|
||||
sixtyfps::testing::send_keyboard_string_sequence(instance, "Test");
|
||||
|
|
|
@ -28,8 +28,8 @@ assert_eq(instance.get_color_of_initialized_text(), sixtyfps::Color::from_rgb_ui
|
|||
```
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_default_text_color(), sixtyfps::Color::from_rgb_u8(0, 0, 0));
|
||||
assert_eq!(instance.get_color_of_initialized_text(), sixtyfps::Color::from_rgb_u8(255, 255, 255));
|
||||
```
|
||||
|
|
|
@ -19,9 +19,9 @@ TestCase := TextInput {
|
|||
|
||||
/*
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
sixtyfps::testing::send_mouse_click(instance, 50., 50.);
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
sixtyfps::testing::send_mouse_click(&handle, 50., 50.);
|
||||
assert!(instance.get_input_focused());
|
||||
assert_eq!(instance.get_test_text(), "");
|
||||
sixtyfps::testing::send_keyboard_string_sequence(instance, "😍");
|
||||
|
|
|
@ -21,8 +21,8 @@ assert(!instance.get_falsevar());
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert!(instance.get_truevar(), 1);
|
||||
assert!(!instance.get_falsevar(), 1);
|
||||
```
|
||||
|
|
|
@ -48,8 +48,8 @@ assert_eq(instance.get_i2(), 50);
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_untyped_d1(), 100);
|
||||
assert_eq!(instance.get_untyped_d2(), 3000);
|
||||
assert_eq!(instance.get_untyped_d3(), 1500);
|
||||
|
|
|
@ -58,8 +58,8 @@ assert(instance.get_value());
|
|||
|
||||
```rust
|
||||
let ratio = 1.;
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_l1(), 12.);
|
||||
assert_eq!(instance.get_l2(), 12. * ratio);
|
||||
assert_eq!(instance.get_l3(), 100. + 12. * ratio);
|
||||
|
|
|
@ -26,8 +26,8 @@ TestCase := Rectangle {
|
|||
|
||||
/*
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_foo_a(), sixtyfps::SharedString::from("444"));
|
||||
assert_eq!(instance.get_foo_b(), 12);
|
||||
instance.emit_change_foo();
|
||||
|
|
|
@ -30,8 +30,8 @@ assert(!fuzzy_compare(instance.get_p1(), 1.001));
|
|||
```
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_p1(), 1.);
|
||||
assert_eq!(instance.get_p2(), 0.01);
|
||||
assert_eq!(instance.get_p3(), 0.055);
|
||||
|
|
|
@ -37,8 +37,8 @@ assert_eq(instance.get_controlled_test_length(), 100.);
|
|||
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_test_length(), 100.);
|
||||
|
||||
assert_eq!(instance.get_controlled_test_length(), 20.);
|
||||
|
|
|
@ -27,8 +27,8 @@ assert(!instance.get_e2());
|
|||
```
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert_eq!(instance.get_p1(), "hello");
|
||||
assert_eq!(instance.get_p2(), "fox:🦊");
|
||||
assert!(instance.get_e1());
|
||||
|
|
|
@ -32,8 +32,8 @@ assert(fuzzy_compare(instance.get_negative_as_float(), -1200000.1));
|
|||
```
|
||||
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
assert!(instance.get_test_is_float());
|
||||
assert_eq!(instance.get_number_as_float(), 42.56);
|
||||
assert_eq!(instance.get_negative_as_float(), -1200000.1);
|
||||
|
|
|
@ -30,8 +30,8 @@ TestCase := Rectangle {
|
|||
|
||||
/*
|
||||
```rust
|
||||
let instance = TestCase::new();
|
||||
let instance = instance.as_ref();
|
||||
let handle = TestCase::new();
|
||||
let instance = handle.as_ref();
|
||||
|
||||
assert_eq!(instance.get_player_1().score, 12);
|
||||
assert_eq!(instance.get_player_1(), Player{ name: "Player1".into(), score: 12, energy_level: 0.8 });
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue