dde-dock/frame/item/components/appdragwidget.h
donghualin 0bdc1eb1a2 refactor: 调整插件接口,删除指针引用
去掉插件的指针接口,同时插件根据任务栏图标类别返回不同类型的图标,修改所有已实现的插件接口

Log:
Influence: 任务栏-查看快捷设置图标、快捷区域可点击的图标、系统电源图标是否显示正常
Task: https://pms.uniontech.com/task-view-110309.html
Change-Id: I9ffc42189471bb6183f264b366434d9be77275a4
2022-06-01 11:34:34 +08:00

166 lines
4.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (C) 2011 ~ 2018 Deepin Technology Co., Ltd.
*
* Author: listenerri <listenerri@gmail.com>
*
* Maintainer: listenerri <listenerri@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef APPDRAGWIDGET_H
#define APPDRAGWIDGET_H
#include "constants.h"
#include <QPixmap>
#include <QGraphicsObject>
#include <QGraphicsView>
#include <QPainter>
#include <QMouseEvent>
#include <QTimer>
#include <QPropertyAnimation>
#include <QParallelAnimationGroup>
#include <QWidget>
#include "../widgets/tipswidget.h"
#include "dockpopupwindow.h"
#include "dockitem.h"
class AppGraphicsObject : public QGraphicsObject
{
public:
explicit AppGraphicsObject(QGraphicsItem *parent = Q_NULLPTR)
: QGraphicsObject(parent) {}
~AppGraphicsObject() override {}
void setAppPixmap(QPixmap pix)
{
m_appPixmap = pix;
resetProperty();
update();
}
void resetProperty()
{
setScale(1.0);
setRotation(0);
setOpacity(1.0);
update();
}
QRectF boundingRect() const override
{
return m_appPixmap.rect();
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR) override {
Q_UNUSED(option);
Q_UNUSED(widget);
Q_ASSERT(!m_appPixmap.isNull());
painter->drawPixmap(QPoint(0, 0), m_appPixmap);
}
private:
QPixmap m_appPixmap;
};
class AppDragWidget : public QGraphicsView
{
Q_OBJECT
public:
explicit AppDragWidget(QWidget *parent = Q_NULLPTR);
void setAppPixmap(const QPixmap &pix);
void setDockInfo(Dock::Position dockPosition, const QRect &dockGeometry);
void setOriginPos(const QPoint position);
void setPixmapOpacity(qreal opacity);
bool isRemoveAble(const QPoint &curPos);
void setItem(DockItem *item) { m_item = item; }
static bool isRemoveable(const Dock::Position &dockPos, const QRect &doctRect);
void showRemoveAnimation();
void showGoBackAnimation();
signals:
void requestRemoveItem();
protected:
void mouseMoveEvent(QMouseEvent *event) override;
void dragEnterEvent(QDragEnterEvent *event) override;
void dragMoveEvent(QDragMoveEvent *event) override;
void dropEvent(QDropEvent *event) override;
void hideEvent(QHideEvent *event) override;
void moveEvent(QMoveEvent *event) override;
void enterEvent(QEvent *event) override;
private:
void initAnimations();
void onRemoveAnimationStateChanged(QAbstractAnimation::State newState,
QAbstractAnimation::State oldState);
const QPoint popupMarkPoint(Dock::Position pos);
const QPoint topleftPoint() const;
void showRemoveTips();
bool isRemoveItem();
private Q_SLOTS:
void onFollowMouse();
protected:
QScopedPointer<AppGraphicsObject> m_object;
QGraphicsScene *m_scene;
QTimer *m_followMouseTimer;
QPropertyAnimation *m_animScale;
QPropertyAnimation *m_animRotation;
QPropertyAnimation *m_animOpacity;
QParallelAnimationGroup *m_animGroup;
QPropertyAnimation *m_goBackAnim;
Dock::Position m_dockPosition;
QRect m_dockGeometry;
QPoint m_originPoint;
QSize m_iconSize;
Dock::TipsWidget *m_removeTips;
QScopedPointer<DockPopupWindow> m_popupWindow;
/**
* @brief m_distanceMultiple: 倍数
* dock栏上应用区驻留应用被拖拽远离dock的距离除以dock的宽或者高更小的一个的比值
*/
double m_distanceMultiple;
bool m_bDragDrop = false; // 图标是否被拖拽
DockItem *m_item;
};
class QuickDragWidget : public AppDragWidget
{
Q_OBJECT
Q_SIGNALS:
void requestDropItem(QDropEvent *);
void requestDragMove(QDragMoveEvent *);
public:
explicit QuickDragWidget(QWidget *parent = Q_NULLPTR);
~QuickDragWidget() override;
protected:
void dropEvent(QDropEvent *event) override;
void dragMoveEvent(QDragMoveEvent *event) override;
};
#endif /* APPDRAGWIDGET_H */