Ejemplo n.º 1
0
void Stage::OnMouseMove(wxMouseEvent &inEvent) {
    // This function occasionally gets called when destroying
    // broken QuickTime movies.
    if (mIsBeingDestroyed)
        return;

    // Do any mouse-moved processing for our Elements.
    mShouldHideCursorUntilMouseMoved = false;
    UpdateCurrentElementAndCursor();

    // Notify our cursor of its new location.
    if (mActualCursor)
        mActualCursor->MoveCursor(inEvent.GetPosition());

    // If we're displaying XY co-ordinates for the cursor, update them now.
    if (mIsDisplayingXy) {
        wxClientDC dc(this);

        // Get our current screen location.
        wxPoint pos = inEvent.GetPosition();
        long x = dc.DeviceToLogicalX(pos.x);
        long y = dc.DeviceToLogicalY(pos.y);

        // Get the color at that screen location.
        // PORTING - May not work on non-Windows platforms, according to
        // the wxWindows documentation.
        wxMemoryDC offscreen_dc;
        offscreen_dc.SelectObjectAsSource(GetCompositingPixmap());
        wxColour color;
        offscreen_dc.GetPixel(x, y, &color);

        // Update the status bar.
        wxString str;
        str.Printf(wxT("X: %d, Y: %d, C: %02X%02X%02X"),
                   (int) x, (int) y, (int) color.Red(),
                   (int) color.Green(), (int) color.Blue());
        mFrame->SetStatusText(str);
    }

    if (ShouldSendEvents()) {
        EventDispatcher *disp = FindEventDispatcher(inEvent.GetPosition());
        disp->DoEventMouseMoved(inEvent);
    }
}