void DisposableObject::dispose() { if (!disposed) on_dispose(); disposed = true; }
// --------------------------------------------------------------------------- OSStatus OSXWindowImpl::windowHandler(EventHandlerCallRef next, EventRef e) { EventClass clazz = GetEventClass(e); EventKind kind = GetEventKind(e); switch( clazz ) { case kEventClassWindow: { switch( kind ) { case kEventWindowDrawContent: on_paint(); break; case kEventWindowClosed: on_dispose(); break; case kEventWindowBoundsChanged: { aglUpdateContext(mGLContext); GetWindowBounds(mWindowRef,kWindowContentRgn,&mRect); if (window) window->resize( mRect.right - mRect.left, mRect.bottom - mRect.top ); } break; } } break; case kEventClassMouse: { EventMouseButton button; GetEventParameter(e,kEventParamMouseButton, typeMouseButton, NULL, sizeof(button), NULL, &button); Point location; GetEventParameter(e,kEventParamMouseLocation, typeQDPoint, NULL, sizeof(Point), NULL, &location); int mouseX = location.h - mRect.left; int mouseY = location.v - mRect.top; switch( kind ) { case kEventMouseDown: { UInt32 mod = GetCurrentKeyModifiers(); if (mod & EMULATE_RIGHT_KEYMOD) { mButtonDown = GUI_ButtonRight; mMouseDownMod = EMULATE_RIGHT_KEYMOD; } else if (mod & EMULATE_MIDDLE_KEYMOD) { mButtonDown = GUI_ButtonMiddle; mMouseDownMod = EMULATE_MIDDLE_KEYMOD; } else { mButtonDown = button; mMouseDownMod = 0; } window->buttonPress( mButtonDown,mouseX,mouseY); } break; case kEventMouseUp: if ( (mButtonDown) && ( (mMouseDownMod) || (mButtonDown == button) ) ) { window->buttonRelease( mButtonDown,mouseX,mouseY); mMouseDownMod = 0; mButtonDown = 0; } break; case kEventMouseMoved: case kEventMouseDragged: window->mouseMove(mouseX,mouseY); break; case kEventMouseWheelMoved: UInt16 axis; GetEventParameter(e,kEventParamMouseWheelAxis, typeMouseWheelAxis, NULL, sizeof(axis), NULL, &axis); if (axis == kEventMouseWheelAxisY) { int delta; GetEventParameter(e,kEventParamMouseWheelDelta, typeSInt32, NULL, sizeof(delta), NULL, &delta); if (delta != 0) window->wheelRotate( (delta > 0) ? GUI_WheelForward : GUI_WheelBackward ); } } } break; case kEventClassKeyboard: { UInt32 keycode; GetEventParameter(e,kEventParamKeyCode, typeUInt32, NULL, sizeof(keycode), NULL, &keycode); switch( kind ) { case kEventRawKeyDown: break; case kEventRawKeyUp: break; case kEventRawKeyModifiersChanged: break; default: break; } } break; default: break; } return CallNextEventHandler(next,e); }