686
686
EXPECT_EQ(area.GetPointer(), nullptr);
689
TEST_F(TestWindowCompositor, UpdateInputAreaMouseInsideOnRelease)
692
ObjectPtr<TestBaseWindow> ia1(new TestBaseWindow());
694
ev.type = EVENT_MOUSE_DOWN;
695
nux::GetWindowCompositor().ProcessEvent(ev);
697
ASSERT_TRUE(ia1->input_area->IsMouseInside());
698
ASSERT_TRUE(ia1->input_area->IsMouseOwner());
700
ObjectPtr<TestBaseWindow> ia2(new TestBaseWindow());
701
ev.type = EVENT_MOUSE_UP;
702
nux::GetWindowCompositor().ProcessEvent(ev);
704
EXPECT_FALSE(ia1->input_area->IsMouseOwner());
705
EXPECT_FALSE(ia1->input_area->IsMouseInside());
706
EXPECT_NE(GetMouseOverArea(), ia1->input_area.GetPointer());
709
TEST_F(TestWindowCompositor, UpdateNewInputAreaMouseInsideOnRelease)
712
ObjectPtr<TestBaseWindow> ia1(new TestBaseWindow());
714
ev.type = EVENT_MOUSE_DOWN;
715
nux::GetWindowCompositor().ProcessEvent(ev);
717
ASSERT_TRUE(ia1->input_area->IsMouseInside());
718
ASSERT_TRUE(ia1->input_area->IsMouseOwner());
720
ObjectPtr<TestBaseWindow> ia2(new TestBaseWindow());
721
ev.type = EVENT_MOUSE_UP;
722
nux::GetWindowCompositor().ProcessEvent(ev);
724
EXPECT_FALSE(ia2->input_area->IsMouseOwner());
725
EXPECT_TRUE(ia2->input_area->IsMouseInside());
726
EXPECT_EQ(GetMouseOverArea(), ia2->input_area.GetPointer());
729
TEST_F(TestWindowCompositor, UpdateNewInputAreaMouseOwnerBeforeSignalEmission)
732
ObjectPtr<TestBaseWindow> ia1(new TestBaseWindow());
734
ev.type = EVENT_MOUSE_DOWN;
735
nux::GetWindowCompositor().ProcessEvent(ev);
736
ASSERT_TRUE(ia1->input_area->IsMouseInside());
737
ASSERT_TRUE(ia1->input_area->IsMouseOwner());
740
ia1->input_area->mouse_up.connect([this, &ia1, &got_cb] (int, int, unsigned long, unsigned long) {
742
EXPECT_TRUE(ia1->input_area->IsMouseInside());
743
EXPECT_FALSE(ia1->input_area->IsMouseOwner());
746
ev.type = EVENT_MOUSE_UP;
747
nux::GetWindowCompositor().ProcessEvent(ev);
750
EXPECT_TRUE(ia1->input_area->IsMouseInside());
751
EXPECT_FALSE(ia1->input_area->IsMouseOwner());
752
EXPECT_EQ(GetMouseOverArea(), ia1->input_area.GetPointer());
755
TEST_F(TestWindowCompositor, InvalidMouseOverAreaOnReleaseDontCrash)
758
ObjectPtr<TestBaseWindow> ia1(new TestBaseWindow());
760
ev.type = EVENT_MOUSE_DOWN;
761
nux::GetWindowCompositor().ProcessEvent(ev);
762
ASSERT_TRUE(ia1->input_area->IsMouseInside());
763
ASSERT_TRUE(ia1->input_area->IsMouseOwner());
765
// We save a copy of the input area, so that WC still things it's alive but
766
// the test window won't return it as the target area for events.
767
auto old_mouse_owner_area = ia1->input_area; (void)old_mouse_owner_area;
768
ia1->input_area.Release();
770
ev.type = EVENT_MOUSE_UP;
771
nux::GetWindowCompositor().ProcessEvent(ev);
774
TEST_F(TestWindowCompositor, EmitMouseCancelOnReleasedMouseOwner)
777
ObjectPtr<TestBaseWindow> ia1(new TestBaseWindow());
779
ev.type = EVENT_MOUSE_DOWN;
780
nux::GetWindowCompositor().ProcessEvent(ev);
781
ASSERT_TRUE(ia1->input_area->IsMouseOwner());
783
bool mouse_cancel_called = false;
784
ia1->input_area->mouse_cancel.connect([this, &mouse_cancel_called] {
785
mouse_cancel_called = true;
788
ev.type = EVENT_MOUSE_UP;
789
nux::GetWindowCompositor().ProcessEvent(ev);
791
EXPECT_TRUE(mouse_cancel_called);
689
794
class DraggedWindow : public nux::BaseWindow
770
875
bool wants_mouse_ownership;
773
virtual void EmitMouseUpSignal(int x, int y,
774
unsigned long mouse_button_state,
775
unsigned long special_keys_state)
878
virtual void EmitMouseUpSignal(int, int,
777
882
++mouse_up_emission_count;
780
virtual void EmitMouseDragSignal(int x, int y,
885
virtual void EmitMouseDragSignal(int, int,
782
unsigned long mouse_button_state,
783
unsigned long special_keys_state)
785
890
++mouse_drag_emission_count;
786
891
mouse_drag_dx = dx;
807
virtual void EmitMouseDownSignal(int x, int y,
808
unsigned long mouse_button_state,
809
unsigned long special_keys_state)
912
virtual void EmitMouseDownSignal(int, int,
811
916
++mouse_down_emission_count;
814
virtual void EmitMouseUpSignal(int x, int y,
815
unsigned long mouse_button_state,
816
unsigned long special_keys_state)
919
virtual void EmitMouseUpSignal(int, int,
818
923
++mouse_up_emission_count;
821
virtual void EmitMouseDragSignal(int x, int y,
823
unsigned long mouse_button_state,
824
unsigned long special_keys_state)
926
virtual void EmitMouseDragSignal(int, int,
826
931
++mouse_drag_emission_count;