mirror-chatterino2/src/widgets/AttachedWindow.hpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

80 lines
1.6 KiB
C++
Raw Normal View History

#pragma once
#include "ForwardDecl.hpp"
#include <QTimer>
#include <QWidget>
#include <memory>
namespace chatterino {
class Split;
class Channel;
using ChannelPtr = std::shared_ptr<Channel>;
class AttachedWindow : public QWidget
{
2018-07-03 23:27:17 +02:00
AttachedWindow(void *_target, int _yOffset);
public:
2018-05-28 18:25:19 +02:00
struct GetArgs {
QString winId;
int yOffset = -1;
double x = -1;
double pixelRatio = -1;
2018-05-28 18:25:19 +02:00
int width = -1;
int height = -1;
bool fullscreen = false;
2018-05-28 18:25:19 +02:00
};
2018-05-30 17:17:27 +02:00
virtual ~AttachedWindow() override;
2018-05-30 17:17:27 +02:00
static AttachedWindow *get(void *target_, const GetArgs &args);
#ifdef USEWINSDK
static AttachedWindow *getForeground(const GetArgs &args);
#endif
static void detach(const QString &winId);
void setChannel(ChannelPtr channel);
protected:
virtual void showEvent(QShowEvent *) override;
// virtual void nativeEvent(const QByteArray &eventType, void *message,
// long *result) override;
private:
struct {
Split *split;
} ui_{};
struct Item {
void *hwnd;
AttachedWindow *window;
QString winId;
};
static std::vector<Item> items;
2018-07-06 19:23:47 +02:00
void attachToHwnd(void *attached);
void updateWindowRect(void *attached);
2018-07-06 19:23:47 +02:00
void *target_;
int yOffset_;
int currentYOffset_{};
double x_ = -1;
double pixelRatio_ = -1;
2018-07-06 19:23:47 +02:00
int width_ = 360;
int height_ = -1;
bool fullscreen_ = false;
2018-07-06 19:23:47 +02:00
#ifdef USEWINSDK
bool validProcessName_ = false;
bool attached_ = false;
#endif
QTimer timer_;
QTimer slowTimer_;
};
} // namespace chatterino