blob: b88097e5211b83ae5cdf9ced2809207653c7ebd9 [file] [log] [blame]
// Copyright (C) 2016 The Android Open Source Project
//
// This software is licensed under the terms of the GNU General Public
// License version 2, as published by the Free Software Foundation, and
// may be copied, distributed, and modified under those terms.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
#pragma once
#include <QtCore>
#include <QFrame>
#include <QObject>
#include <QRubberBand>
#include <QTimer>
#include <QVariantAnimation>
#include <QWidget>
class EmulatorQtWindow;
class EmulatorContainer;
class EmulatorOverlay : public QFrame {
Q_OBJECT
public:
explicit EmulatorOverlay(EmulatorQtWindow* window,
EmulatorContainer* container);
virtual ~EmulatorOverlay();
void focusOutEvent(QFocusEvent* event) override;
void hideEvent(QHideEvent* event) override;
void keyPressEvent(QKeyEvent* event) override;
void keyReleaseEvent(QKeyEvent* event) override;
void mouseMoveEvent(QMouseEvent* event) override;
void mousePressEvent(QMouseEvent* event) override;
void mouseReleaseEvent(QMouseEvent* event) override;
void moveEvent(QMoveEvent* event) override;
void paintEvent(QPaintEvent* e) override;
void showEvent(QShowEvent* event) override;
void hideForFlash();
void showAsFlash();
void showForMultitouch();
void showForZoom();
void showForZoomUserHidden();
bool wasZoomUserHidden() const;
public slots:
void hide();
private slots:
void slot_flashAnimationFinished();
void slot_flashAnimationValueChanged(const QVariant& value);
void slot_animationValueChanged(const QVariant& value);
private:
void hideAndFocusContainer();
void generateTouchEvents(QMouseEvent* event);
void updateTouchPoints(QMouseEvent* event);
QPoint primaryPinchPoint() const;
QPoint secondaryPinchPoint() const;
QPoint primarySwipePoint() const;
QPoint secondaryTouchPoint() const;
EmulatorQtWindow* mEmulatorWindow;
EmulatorContainer* mContainer;
// Zoom-related members
QRubberBand mRubberBand;
QPoint mRubberbandOrigin;
QPixmap mCursor;
// Multitouch-related members
QImage mCenterImage;
QImage mTouchImage;
QPoint mMultitouchCenter;
QPoint mPrimaryTouchPoint;
QPoint mSecondaryTouchPoint;
QPoint mLastMousePos;
int mCenterPointRadius;
int mTouchPointRadius;
bool mIsSwipeGesture;
bool mReleaseOnClose;
// Multitouch animation values
QVariantAnimation mTouchPointAnimation;
double mLerpValue;
// Screenshot-flash related members
QVariantAnimation mFlashAnimation;
double mFlashValue;
// Ensure the overlay is never being used for more than one function
enum class OverlayMode {
Hidden,
Flash,
Multitouch,
Zoom,
UserHiddenZoom,
} mMode;
};