void SliderViewImpl::on_pointer_thumb_press(PointerEvent &e) { if (_state_disabled) return; _state_pressed = true; update_state(); mouse_down_mode = mouse_down_thumb_drag; thumb_move_start_position = _position; mouse_drag_start_pos = e.pos(track.get()); }
int ListBoxViewImpl::get_selection_index(PointerEvent &e) { int index = 0; for (auto &view : listbox->content_view()->children()) { if (view->geometry().border_box().contains(e.pos(listbox->content_view()))) return index; index++; } return -1; }
void WindowView_Impl::dispatch_hot_event(std::shared_ptr<View> &view, PointerEvent &e) { if (view != hot_view) { if (hot_view) { PointerEvent e_exit(PointerEventType::leave, PointerButton::none, e.pos(window_view->root_view()), e.alt_down(), e.shift_down(), e.ctrl_down(), e.cmd_down()); hot_view->dispatch_event(&e_exit, true); } hot_view = view; if (hot_view) { PointerEvent e_enter(PointerEventType::enter, PointerButton::none, e.pos(window_view->root_view()), e.alt_down(), e.shift_down(), e.ctrl_down(), e.cmd_down()); hot_view->dispatch_event(&e_enter, true); } } if (hot_view) hot_view->update_cursor(window); }
void SliderViewImpl::on_pointer_move(PointerEvent &e) { if (_state_disabled) return; if (mouse_down_mode != mouse_down_thumb_drag) { return; } Pointf mouse_pos(e.pos(track.get())); Rectf track_geometry(track->geometry().content_box()); int last_position = _position; if (mouse_pos.x < -100 || mouse_pos.x > track_geometry.get_width() + 100 || mouse_pos.y < -100 || mouse_pos.y > track_geometry.get_height() + 100) { _position = thumb_move_start_position; } else { if (slider->horizontal()) { int delta = (mouse_pos.x - mouse_drag_start_pos.x); _position = thumb_move_start_position + (delta * (_max_position - _min_position)) / (track->geometry().content_box().get_width()); } else { int delta = (mouse_pos.y - mouse_drag_start_pos.y); _position = thumb_move_start_position + (delta * (_max_position - _min_position)) / (track->geometry().content_box().get_height()); } } if (_position > _max_position) _position = _max_position; if (_position < _min_position) _position = _min_position; if (_lock_to_ticks) { int remainder = (_position - _min_position) % _tick_count; _position = _position - remainder; } if (last_position != _position) { if (_func_value_changed) _func_value_changed(); slider->set_needs_layout(); } }
void SliderViewImpl::on_pointer_track_press(PointerEvent &e) { if (_state_disabled) return; if (e.target() == thumb) // Thumb control handled elsewhere return; float mouse_pos; Rectf thumb_geometry(thumb->geometry().content_box()); float thumb_position; if (slider->horizontal()) { mouse_pos = e.pos(track.get()).x; thumb_position = thumb_geometry.left + thumb_geometry.get_width() / 2.0f; timer_target_position = _min_position + mouse_pos * ((_max_position - _min_position)) / (track->geometry().content_box().get_width()); } else { mouse_pos = e.pos(track.get()).y; thumb_position = thumb_geometry.top + thumb_geometry.get_height() / 2.0f; timer_target_position = _min_position + mouse_pos * ((_max_position - _min_position)) / (track->geometry().content_box().get_height()); } if (mouse_pos < thumb_position) { mouse_down_mode = mouse_down_track_decr; timer_step_size = -_page_step; } else { mouse_down_mode = mouse_down_track_incr; timer_step_size = _page_step; } scroll_timer_expired(); }
void WindowView_Impl::window_pointer_event(PointerEvent &e) { std::shared_ptr<View> view_above_cursor = window_view->find_view_at(e.pos(window_view)); auto view = get_capture_view(e, view_above_cursor); if (!view) view = view_above_cursor; dispatch_hot_event(view, e); if (e.type() == PointerEventType::enter || e.type() == PointerEventType::leave) // Ignore window enter/leave events return; if (view) view->dispatch_event(&e); else window_view->dispatch_event(&e); }