mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-11-28 04:12:56 +00:00
Keep the BalloonTip open when the BalloonTip's arrow prevents the cursor from being inside the spawning ToolTipWidget, which triggers the ToolTipWidget's leaveEvent and would previously close the BalloonTip. When that happens track the cursor until it either leaves the ToolTipWidget's bounding box or leaves the BalloonTip and goes back to the ToolTipWidget, and respectively close the BalloonTip or leave it open.
54 lines
1.3 KiB
C++
54 lines
1.3 KiB
C++
// Copyright 2020 Dolphin Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include <QColor>
|
|
#include <QPixmap>
|
|
#include <QWidget>
|
|
|
|
class QEnterEvent;
|
|
class QEvent;
|
|
class QMouseEvent;
|
|
class QPaintEvent;
|
|
class QPoint;
|
|
class QString;
|
|
|
|
class BalloonTip : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
struct PrivateTag
|
|
{
|
|
};
|
|
|
|
public:
|
|
enum class ShowArrow
|
|
{
|
|
Yes,
|
|
No
|
|
};
|
|
static void ShowBalloon(const QString& title, const QString& message,
|
|
const QPoint& target_arrow_tip_position, QWidget* parent,
|
|
ShowArrow show_arrow = ShowArrow::Yes, int border_width = 1);
|
|
static void HideBalloon();
|
|
static bool IsCursorInsideWidgetBoundingBox(const QWidget& widget);
|
|
static bool IsCursorOnBalloonTip();
|
|
static bool IsWidgetBalloonTipActive(const QWidget& widget);
|
|
|
|
BalloonTip(PrivateTag, const QString& title, QString message, QWidget* parent);
|
|
|
|
protected:
|
|
void enterEvent(QEnterEvent* event) override;
|
|
void leaveEvent(QEvent* event) override;
|
|
void mouseMoveEvent(QMouseEvent* event) override;
|
|
void paintEvent(QPaintEvent* event) override;
|
|
|
|
private:
|
|
void UpdateBoundsAndRedraw(const QPoint& target_arrow_tip_position, ShowArrow show_arrow,
|
|
int border_width);
|
|
|
|
QColor m_border_color;
|
|
QPixmap m_pixmap;
|
|
};
|