michael@0: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ michael@0: /* vim: set ts=4 et sw=4 tw=80: */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include michael@0: #include michael@0: michael@0: #include "mozqwidget.h" michael@0: #include "nsWindow.h" michael@0: michael@0: using namespace mozilla::widget; michael@0: michael@0: MozQWidget::MozQWidget(nsWindow* aReceiver, QWindow* aParent) michael@0: : QWindow(aParent) michael@0: , mReceiver(aReceiver) michael@0: , mUpdatePending(false) michael@0: { michael@0: mWindowType = mReceiver->WindowType(); michael@0: } michael@0: michael@0: MozQWidget::~MozQWidget() michael@0: { michael@0: } michael@0: michael@0: void MozQWidget::render(QPainter* painter) michael@0: { michael@0: Q_UNUSED(painter); michael@0: } michael@0: michael@0: void MozQWidget::renderLater() michael@0: { michael@0: if (!isExposed() || eWindowType_child != mWindowType || !isVisible()) { michael@0: return; michael@0: } michael@0: michael@0: if (!mUpdatePending) { michael@0: mUpdatePending = true; michael@0: QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest)); michael@0: } michael@0: } michael@0: michael@0: void MozQWidget::renderNow() michael@0: { michael@0: if (!isExposed() || eWindowType_child != mWindowType || !isVisible()) { michael@0: return; michael@0: } michael@0: michael@0: mReceiver->OnPaint(); michael@0: } michael@0: michael@0: bool MozQWidget::event(QEvent* event) michael@0: { michael@0: switch (event->type()) { michael@0: case QEvent::UpdateRequest: michael@0: mUpdatePending = false; michael@0: renderNow(); michael@0: return true; michael@0: default: michael@0: return QWindow::event(event); michael@0: } michael@0: } michael@0: michael@0: void MozQWidget::exposeEvent(QExposeEvent* event) michael@0: { michael@0: Q_UNUSED(event); michael@0: if (!isExposed() || eWindowType_child != mWindowType || !isVisible()) { michael@0: return; michael@0: } michael@0: LOG(("MozQWidget::%s [%p] flags:%x\n", __FUNCTION__, (void *)this, flags())); michael@0: renderNow(); michael@0: michael@0: } michael@0: michael@0: void MozQWidget::resizeEvent(QResizeEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->resizeEvent(event); michael@0: QWindow::resizeEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::focusInEvent(QFocusEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->focusInEvent(event); michael@0: QWindow::focusInEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::focusOutEvent(QFocusEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->focusOutEvent(event); michael@0: QWindow::focusOutEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::hideEvent(QHideEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->hideEvent(event); michael@0: QWindow::hideEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::keyPressEvent(QKeyEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->keyPressEvent(event); michael@0: QWindow::keyPressEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::keyReleaseEvent(QKeyEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->keyReleaseEvent(event); michael@0: QWindow::keyReleaseEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::mouseDoubleClickEvent(QMouseEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->mouseDoubleClickEvent(event); michael@0: QWindow::mouseDoubleClickEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::mouseMoveEvent(QMouseEvent* event) michael@0: { michael@0: mReceiver->mouseMoveEvent(event); michael@0: QWindow::mouseMoveEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::mousePressEvent(QMouseEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->mousePressEvent(event); michael@0: QWindow::mousePressEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::mouseReleaseEvent(QMouseEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->mouseReleaseEvent(event); michael@0: QWindow::mouseReleaseEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::moveEvent(QMoveEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->moveEvent(event); michael@0: QWindow::moveEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::showEvent(QShowEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->showEvent(event); michael@0: QWindow::showEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::wheelEvent(QWheelEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: mReceiver->wheelEvent(event); michael@0: QWindow::wheelEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::tabletEvent(QTabletEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: QWindow::tabletEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::touchEvent(QTouchEvent* event) michael@0: { michael@0: LOG(("MozQWidget::%s [%p]\n", __FUNCTION__, (void *)this)); michael@0: QWindow::touchEvent(event); michael@0: } michael@0: michael@0: void MozQWidget::SetCursor(nsCursor aCursor) michael@0: { michael@0: Qt::CursorShape cursor = Qt::ArrowCursor; michael@0: switch(aCursor) { michael@0: case eCursor_standard: michael@0: cursor = Qt::ArrowCursor; michael@0: break; michael@0: case eCursor_wait: michael@0: cursor = Qt::WaitCursor; michael@0: break; michael@0: case eCursor_select: michael@0: cursor = Qt::IBeamCursor; michael@0: break; michael@0: case eCursor_hyperlink: michael@0: cursor = Qt::PointingHandCursor; michael@0: break; michael@0: case eCursor_ew_resize: michael@0: cursor = Qt::SplitHCursor; michael@0: break; michael@0: case eCursor_ns_resize: michael@0: cursor = Qt::SplitVCursor; michael@0: break; michael@0: case eCursor_nw_resize: michael@0: case eCursor_se_resize: michael@0: cursor = Qt::SizeBDiagCursor; michael@0: break; michael@0: case eCursor_ne_resize: michael@0: case eCursor_sw_resize: michael@0: cursor = Qt::SizeFDiagCursor; michael@0: break; michael@0: case eCursor_crosshair: michael@0: case eCursor_move: michael@0: cursor = Qt::SizeAllCursor; michael@0: break; michael@0: case eCursor_help: michael@0: cursor = Qt::WhatsThisCursor; michael@0: break; michael@0: case eCursor_copy: michael@0: case eCursor_alias: michael@0: break; michael@0: case eCursor_context_menu: michael@0: case eCursor_cell: michael@0: case eCursor_grab: michael@0: case eCursor_grabbing: michael@0: case eCursor_spinning: michael@0: case eCursor_zoom_in: michael@0: case eCursor_zoom_out: michael@0: michael@0: default: michael@0: break; michael@0: } michael@0: michael@0: setCursor(cursor); michael@0: }