📄 evt.cc
字号:
/** * evt.c - * * Copyright (c) 1998 * Transvirtual Technologies, Inc. All rights reserved. * * Copyright (c) 2002, 2003, 2004, 2005 * Kaffe.org contributors, see ChangeLog for details. All rights reserved. * * See the file "license.terms" for information on usage and redistribution * of this file. */#ifdef QPE# include <qpe/qpeapplication.h>#else# include <qapplication.h>#endif#include <qevent.h>#include <qqueue.h>#include <qwidget.h>#include "evt.h"#include "toolkit.h"#include "keysyms.h"jclass AWTEvent;jclass ComponentEvent;jclass MouseEvent;jclass FocusEvent;jclass WindowEvent;jclass KeyEvent;jclass PaintEvent;jclass WMEvent;jmethodID getComponentEvent;jmethodID getMouseEvent;jmethodID getFocusEvent;jmethodID getWindowEvent;jmethodID getKeyEvent;jmethodID getPaintEvent;jmethodID getWMEvent;extern void pollJavaClipboard(JNIEnv *env);extern jobject clearJavaClipboard(JNIEnv *env);#define COMPONENT_RESIZED 101#define WINDOW_CLOSING 201#define WINDOW_CLOSED 202#define WINDOW_ICONIFIED 203#define WINDOW_DEICONIFIED 204#define KEY_PRESSED 401#define KEY_RELEASED 402#define MOUSE_PRESSED 501#define MOUSE_RELEASED 502#define MOUSE_MOVED 503#define MOUSE_ENTERED 504#define MOUSE_EXITED 505#define PAINT 800#define UPDATE 801#define FOCUS_GAINED 1004#define FOCUS_LOST 1005#define WM_KILLED 1905class EventPacket {public: EventPacket(QEvent* evt, int idx) { event = evt; srcIdx = idx; } QEvent* getEvent() { return event; } int getIndex() { return srcIdx; }protected: QEvent* event; int srcIdx;};#ifdef QPEextern QPEApplication *qapp;#elseextern QApplication *qapp;#endifQQueue<EventPacket> g_event_queue;EventDispatcher::EventDispatcher(QWidget *parent, const char *name) { if(parent) parent->installEventFilter(this);}bool EventDispatcher::eventFilter(QObject* o, QEvent* e) { DBG(AWT_EVT, qqDebug("event type=%d widget=%p\n", e->type(), o)); QEvent* newEvent = NULL; EventPacket* packet = NULL; bool processed = false; if (X->srcIdx == 0 || getSourceIdx(X, o) == 0xffffffff) return QWidget::eventFilter(o, e); switch(e->type()) { case QEvent::Clipboard: { newEvent = new QEvent(e->type()); processed = true; break; } case QEvent::Destroy: case QEvent::Reparent: { newEvent = new QEvent(e->type()); processed = true; break; } case QEvent::Show: { DBG(AWT_EVT, qqDebug("Event Show: srcIdx=%d\n", X->srcIdx));#if (QT_VERSION < 300) newEvent = (QEvent*) new QShowEvent(true);#else QShowEvent* tmpShowEvent = (QShowEvent*)e; newEvent = (QEvent*) new QShowEvent();#endif processed = true; break; } case QEvent::Hide: { DBG(AWT_EVT, qqDebug("Event Hid: srcIdx=%d\n", X->srcIdx));#if (QT_VERSION < 300) newEvent = (QEvent*) new QHideEvent(true);#else QHideEvent* tmpHideEvent = (QHideEvent*)e; newEvent = (QEvent*) new QHideEvent();#endif processed = true; break; } case QEvent::FocusIn: case QEvent::FocusOut: { DBG(AWT_EVT, qqDebug("Event Focus: srcIdx=%d\n", X->srcIdx)); QFocusEvent* tmpFocusEvent = (QFocusEvent*)e; newEvent = (QEvent*) new QFocusEvent(tmpFocusEvent->type()); ((QFocusEvent*)newEvent)->setReason(tmpFocusEvent->reason()); processed = true; break; } case QEvent::KeyPress: case QEvent::KeyRelease: { DBG(AWT_EVT, qqDebug("Event Key: srcIdx=%d\n", X->srcIdx)); QKeyEvent* tmpKeyEvent = (QKeyEvent*)e; newEvent = (QEvent*) new QKeyEvent(tmpKeyEvent->type(),tmpKeyEvent->key(), tmpKeyEvent->ascii(), tmpKeyEvent->state(), tmpKeyEvent->text(), tmpKeyEvent->isAutoRepeat(), tmpKeyEvent->count()); processed = true; break; } case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseMove: { DBG(AWT_EVT, qqDebug("Event MouseButton: srcIdx=%d\n", X->srcIdx)); QMouseEvent* tmpMouseEvent = (QMouseEvent*)e; newEvent = (QEvent*) new QMouseEvent(tmpMouseEvent->type(), tmpMouseEvent->pos(), tmpMouseEvent->button(), tmpMouseEvent->state()); processed = true; break; } case QEvent::Paint: { DBG(AWT_EVT, qqDebug("Event Paint: srcIdx=%d\n", X->srcIdx)); QPaintEvent* tmpPaintEvent = (QPaintEvent*)e; newEvent = (QEvent*) new QPaintEvent(tmpPaintEvent->rect(), tmpPaintEvent->erased()); processed = true; break; } case QEvent::Move: { DBG(AWT_EVT, qqDebug("Event Move: srcIdx=%d\n", X->srcIdx)); QPoint data(((QWidget*)o)->width(), ((QWidget*)o)->height()); QMoveEvent* tmpMoveEvent = (QMoveEvent*)e; // Hide width/height in oldPos of newEvent newEvent = (QEvent*) new QMoveEvent(tmpMoveEvent->pos(), data); processed = true; break; } case QEvent::Resize: { DBG(AWT_EVT, qqDebug("Event Resize: srcIdx=%d\n", X->srcIdx)); QSize data(((QWidget*)o)->x(), ((QWidget*)o)->y()); QResizeEvent* tmpResizeEvent = (QResizeEvent*)e; // Hide x/y in oldSize of newEvent newEvent = (QEvent*) new QResizeEvent(tmpResizeEvent->size(), data); processed = true; break; } } if(processed == true) { packet = new EventPacket(newEvent, getSourceIdx(X, o)/*X->srcIdx*/); g_event_queue.enqueue(packet); } return QWidget::eventFilter(o, e);}EventDispatcher* eventDispatcher;void forwardFocus ( int cmd, void* wnd ); /* from wnd.c *//** * Qt-X-Java key modifier mapping * altGr : PC * shift - ctrl alt meta : Java * Shift Lock Ctrl Mod1 Mod3 : X symbol * ---------------------------------------------------------- * 1 1 2 8 4 : Java value * 1 2 4 8 32 : X * ShiftButton NA ControlButton AltButton : QT */static inline int keyMod ( int keyState ){ int mod = 0; if ( keyState & Qt::ShiftButton ) mod |= 1; if ( keyState & Qt::ControlButton ) mod |= 2; if ( keyState & Qt::AltButton ) mod |= 8; return mod;}static inline int mapButton( int button ){ if ( button & Qt::LeftButton) return 1; if ( button & Qt::RightButton) return 3; if ( button & Qt::MidButton) return 2; return 1;} #if defined(KAFFE_VMDEBUG)static char *eventStr ( int evtId ){ switch (evtId) { case COMPONENT_RESIZED: return "ComponentResized"; case WINDOW_CLOSING: return "WindowClosing"; case WINDOW_CLOSED: return "WindowClosed"; case WINDOW_ICONIFIED: return "WindowIconified"; case WINDOW_DEICONIFIED: return "WindowDeiconified"; case KEY_PRESSED: return "KeyPressed"; case KEY_RELEASED: return "KeyReleased"; case MOUSE_PRESSED: return "MousePressed"; case MOUSE_RELEASED: return "MouseReleased"; case MOUSE_MOVED: return "MouseMoved"; case MOUSE_ENTERED: return "MouseEntered"; case MOUSE_EXITED: return "MouseExited"; case PAINT: return "Paint"; case UPDATE: return "Update"; case FOCUS_GAINED: return "FocusGained"; case FOCUS_LOST: return "FocusLost"; case WM_KILLED: return "WMKilled"; default: return "<unknown>"; }};#endifjobject Java_java_awt_Toolkit_evtInit(JNIEnv* env, jclass clazz){ jclass Component; DBG(AWT_EVT, qqDebug("evtInit\n")); if ( ComponentEvent != NULL ){ DBG(AWT_EVT, qqDebug("evtInit called twice\n")); return NULL; } if(qapp == NULL) { DBG(AWT_EVT, qqDebug("evtInit: qapp not initialized!\n")); } eventDispatcher = new EventDispatcher(); qapp->installEventFilter(eventDispatcher); ComponentEvent = env->FindClass("java/awt/ComponentEvt"); MouseEvent = env->FindClass("java/awt/MouseEvt"); FocusEvent = env->FindClass("java/awt/FocusEvt"); WindowEvent = env->FindClass("java/awt/WindowEvt"); KeyEvent = env->FindClass("java/awt/KeyEvt"); PaintEvent = env->FindClass("java/awt/PaintEvt"); WMEvent = env->FindClass("java/awt/WMEvent"); getComponentEvent = env->GetStaticMethodID( ComponentEvent, "getEvent", "(IIIIII)Ljava/awt/ComponentEvt;"); getMouseEvent = env->GetStaticMethodID( MouseEvent, "getEvent", "(IIIII)Ljava/awt/MouseEvt;"); getFocusEvent = env->GetStaticMethodID( FocusEvent, "getEvent", "(IIZ)Ljava/awt/FocusEvt;"); getWindowEvent = env->GetStaticMethodID( WindowEvent, "getEvent", "(II)Ljava/awt/WindowEvt;"); getKeyEvent = env->GetStaticMethodID( KeyEvent, "getEvent",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -