UIElement* UI::processMouse(MouseCursor& cursor) { bool mousemove = (cursor.getPos() != cursor_pos); cursor_pos = cursor.getPos(); if(cursor.leftClick()) { left_pressed = true; return click(cursor); } else if(cursor.leftButtonPressed()) { if(mousemove) { left_drag = true; return drag(cursor); } } else { if(left_pressed) { if(left_drag) { left_drag = false; } left_pressed = false; } } int scroll_amount = cursor.scrollWheel(); if(scroll_amount != 0) { scrolling = true; return scroll(cursor); } else if(scrolling) { scrolling = false; } // call idle if nothing happened // not sure about this 'idle' concept really // might be better to indicate the type of change in the action class UIElement* selected = getSelected(); if(selected!=0) selected->idle(); return 0; }