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