bool FrameWindow::onMouseMove(void) { if(m_tracking) { point pt = transformToWndCoord(m_system.getCursor().getPosition()); point newpos = pt - m_offset; Rect testarea(m_area); testarea.setPosition(newpos); if(m_clampToScreen && m_parent) { Size me = m_area.getSize(); Size max = m_parent->getSize(); if(testarea.m_left < 0.f) testarea.m_left = 0.f; if(testarea.m_top < 0.f) testarea.m_top = 0.f; if(testarea.m_right > max.width) testarea.m_left = max.width - me.width; if(testarea.m_bottom > max.height) testarea.m_top = max.height - me.height; testarea.setSize(me); } setArea(testarea); EventArgs a; a.name = "On_Move"; callHandler(&a); } return true; }
bool Button::onMouseButton(EventArgs::MouseButtons btn, EventArgs::ButtonState state) { if(btn == EventArgs::Left) { if(state == EventArgs::Down) { m_system.queryCaptureInput(this); m_pushed = true; invalidate(); } else { m_system.queryCaptureInput(0); m_pushed = false; point pt = transformToWndCoord(m_system.getCursor().getPosition()); if(m_area.isPointInRect(pt)) { MouseEventArgs m; m.name = "On_Clicked"; callHandler(&m); send_event(events::ClickEvent()); } invalidate(); } } Label::onMouseButton(btn, state); return true; }
bool Thumb::onMouseMove(void) { if(m_pushed) { point pt = transformToWndCoord(m_system.getCursor().getPosition()); point newpos = pt - m_offset; Rect testarea(m_area); testarea.setPosition(newpos); Size me = m_area.getSize(); if(testarea.m_left < m_trackarea.m_left) testarea.m_left = m_trackarea.m_left; if(testarea.m_top < m_trackarea.m_top) testarea.m_top = m_trackarea.m_top; if(testarea.m_right > m_trackarea.m_right) testarea.m_left = m_trackarea.m_right - me.width; if(testarea.m_bottom > m_trackarea.m_bottom) testarea.m_top = m_trackarea.m_bottom - me.height; testarea.setSize(me); invalidate(); m_area = testarea; send_event(events::TrackEvent()); } return true; }
bool base_window::hitTest(const point& pt) { if(!m_visible) return false; if(!m_ignoreInputEvents) return m_area.isPointInRect(transformToWndCoord(pt)); return false; }
bool CategorizedList::onMouseButton(EventArgs::MouseButtons btn, EventArgs::ButtonState state) { if(state == EventArgs::Up) { point pt = transformToWndCoord(m_system.getCursor().getPosition()) - m_area.getPosition(); CategoriesIter i = std::find_if(m_categories.begin(), m_categories.end(), detail::HitTestTask(pt)); if(i != m_categories.end()) { CategoryPtr p = *i; p->Fold(!p->collapsed); } } return true; }
bool MarkupText::onMouseMove(void) { m_pt = transformToWndCoord(m_system.getCursor().getPosition()); m_pt -= m_area.getPosition(); bool linkhit = false; if(m_selectedlnk) { linkhit = isHitChunk<LinkArea>(m_selectedlnk.get(), m_pt); if(!linkhit) { setHovered(m_selectedlnk.get(), false); m_selectedlnk.reset(); invalidate(); } } if(!m_selectedlnk) { std::vector<PLinkArea>::iterator ilink = std::find_if(m_links.begin(), m_links.end(), hovertester<LinkArea>(m_pt, *this)); if(ilink != m_links.end()) { m_selectedlnk = (*ilink); setHovered(m_selectedlnk.get(), true); invalidate(); } } if(m_selectedtt) { bool hit = isHitChunk<TooltipArea>(m_selectedtt.get(), m_pt); if(hit) return true; else { hideTooltip(); } } std::vector<PTooltipArea>::iterator itt = std::find_if(m_tooltips.begin(), m_tooltips.end(), hovertester<TooltipArea>(m_pt, *this)); if(itt != m_tooltips.end()) { showTooltip(*itt); } return MarkupBase::onMouseMove(); }
bool ListBox::onMouseMove(void) { point pt = transformToWndCoord(m_system.getCursor().getPosition()) - m_area.getPosition(); child_iter i = std::find_if(m_children.begin(), m_children.end(), detail::HitTestTask(pt)); if(i != m_children.end()) { if(m_selectedItem == *i) return true; m_selectedItem = *i; } else { // shouldn't be here m_selectedItem = 0; } invalidate(); return true; }
bool FrameWindow::onMouseButton(EventArgs::MouseButtons btn, EventArgs::ButtonState state) { if(state == EventArgs::Down && m_movable) { m_system.queryCaptureInput(this); m_tracking = true; point pt = transformToWndCoord(m_system.getCursor().getPosition()); m_offset = pt - m_area.getPosition(); } else { if(m_tracking) m_system.queryCaptureInput(0); m_tracking = false; } return base_window::onMouseButton(btn, state); }
bool Thumb::onMouseButton(EventArgs::MouseButtons btn, EventArgs::ButtonState state) { if(btn == EventArgs::Left) { if(state == EventArgs::Down && m_movable) { m_system.queryCaptureInput(this); m_pushed = true; point pt = transformToWndCoord(m_system.getCursor().getPosition()); m_offset = pt - m_area.getPosition(); } else { if(m_pushed) m_system.queryCaptureInput(0); m_pushed = false; } invalidate(); } return true; }
bool ScrollBar::onMouseButton(EventArgs::MouseButtons btn, EventArgs::ButtonState state) { if(btn == EventArgs::Left) { if(state == EventArgs::Down) { point pt = transformToWndCoord(m_system.getCursor().getPosition()); pt -= m_area.getPosition(); if(m_thumb) { const Rect& track = m_thumb->getTrackarea(); float size = m_horiz ? track.getWidth() : track.getHeight(); if(track.isPointInRect(pt)) { point pos = pt - track.getPosition(); /*pos.x -= m_thumb->getArea().getWidth() / 2; pos.y -= m_thumb->getArea().getHeight() / 2;*/ m_thumb->setProgress(m_horiz ? pos.x / size : pos.y / size); } } } } return true; }
bool base_window::isCursorInside() const { point pt = transformToWndCoord(m_system.getCursor().getPosition()); return m_area.isPointInRect(pt); }