void PadView::MouseMoved(BPoint where, uint32 transit, const BMessage* dragMessage) { MainWindow* window = dynamic_cast<MainWindow*>(Window()); if (window == NULL) return; if (fDragging) { window->MoveTo(ConvertToScreen(where) - fDragOffset); } else if (window->AutoRaise()) { where = ConvertToScreen(where); BScreen screen(window); BRect frame = screen.Frame(); BRect windowFrame = window->Frame(); if (where.x == frame.left || where.x == frame.right || where.y == frame.top || where.y == frame.bottom) { BPoint position = window->ScreenPosition(); bool raise = false; if (fabs(0.5 - position.x) > fabs(0.5 - position.y)) { // left or right border if (where.y >= windowFrame.top && where.y <= windowFrame.bottom) { if (position.x < 0.5 && where.x == frame.left) raise = true; else if (position.x > 0.5 && where.x == frame.right) raise = true; } } else { // top or bottom border if (where.x >= windowFrame.left && where.x <= windowFrame.right) { if (position.y < 0.5 && where.y == frame.top) raise = true; else if (position.y > 0.5 && where.y == frame.bottom) raise = true; } } if (raise) window->Activate(); } } }