Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qwasmwindownonclientarea.h
Go to the documentation of this file.
1// Copyright (C) 2018 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QWASMWINDOWNONCLIENTAREA_H
5#define QWASMWINDOWNONCLIENTAREA_H
6
7#include <QtCore/qrect.h>
8#include <QtCore/qtconfigmacros.h>
9#include <QtCore/qnamespace.h>
10
11#include <emscripten/val.h>
12
13#include <functional>
14#include <memory>
15#include <string_view>
16#include <vector>
17
19
20namespace qstdweb {
21class EventCallback;
22}
23
24struct PointerEvent;
25class QWindow;
26class Resizer;
27class TitleBar;
28class QWasmWindow;
29
31{
32public:
33 NonClientArea(QWasmWindow *window, emscripten::val containerElement);
35
37 void propagateSizeHints();
38 TitleBar *titleBar() const { return m_titleBar.get(); }
39
40private:
41 void updateResizability();
42
43 emscripten::val m_qtWindowElement;
44 std::unique_ptr<Resizer> m_resizer;
45 std::unique_ptr<TitleBar> m_titleBar;
46};
47
49{
50public:
52 {
53 public:
55 Callbacks(std::function<void()> onInteraction, std::function<void()> onClick);
57
58 Callbacks(const Callbacks &) = delete;
60 Callbacks &operator=(const Callbacks &) = delete;
62
63 operator bool() const { return !!m_onInteraction; }
64
65 void onInteraction();
66 void onClick();
67
68 private:
69 std::function<void()> m_onInteraction;
70 std::function<void()> m_onClick;
71 };
72
75
77 void setImage(std::string_view imageData, std::string_view format);
78 void setVisible(bool visible);
79
80 emscripten::val htmlElement() const { return m_containerElement; }
81 emscripten::val imageElement() const { return m_imgElement; }
82
83private:
84 emscripten::val m_containerElement;
85 emscripten::val m_imgElement;
86
87 std::unique_ptr<qstdweb::EventCallback> m_webMouseMoveEventCallback;
88 std::unique_ptr<qstdweb::EventCallback> m_webMouseDownEventCallback;
89 std::unique_ptr<qstdweb::EventCallback> m_webClickEventCallback;
90
91 Callbacks m_callbacks;
92};
93
99
101{
102public:
104 {
105 public:
106 static constexpr const char *cssClassNameForEdges(Qt::Edges edges)
107 {
108 switch (edges) {
110 return "nw";
111 case Qt::TopEdge:
112 return "n";
114 return "ne";
115 case Qt::LeftEdge:
116 return "w";
117 case Qt::RightEdge:
118 return "e";
120 return "sw";
121 case Qt::BottomEdge:
122 return "s";
124 return "se";
125 default:
126 return "";
127 }
128 }
129
130 ResizerElement(emscripten::val parentElement, Qt::Edges edges, Resizer *resizer);
136
137 bool onPointerDown(const PointerEvent &event);
138 bool onPointerMove(const PointerEvent &event);
139 bool onPointerUp(const PointerEvent &event);
140
141 private:
142 emscripten::val m_element;
143
144 int m_capturedPointerId = -1;
145
146 const Qt::Edges m_edges;
147
148 Resizer *m_resizer;
149
150 std::unique_ptr<qstdweb::EventCallback> m_mouseDownEvent;
151 std::unique_ptr<qstdweb::EventCallback> m_mouseMoveEvent;
152 std::unique_ptr<qstdweb::EventCallback> m_mouseUpEvent;
153 };
154
155 using ClickCallback = std::function<void()>;
156
157 Resizer(QWasmWindow *window, emscripten::val parentElement);
159
161
162private:
163 void onInteraction();
164 void startResize(Qt::Edges resizeEdges, const PointerEvent &event);
165 void continueResize(const PointerEvent &event);
166 void finishResize();
167
168 struct ResizeData
169 {
170 Qt::Edges edges = Qt::Edges::fromInt(0);
171 QPointF originInScreenCoords;
172 QPoint minShrink;
173 QPoint maxGrow;
174 QRect initialBounds;
175 };
176 std::unique_ptr<ResizeData> m_currentResizeData;
177
178 QWasmWindow *m_window;
179 emscripten::val m_windowElement;
180 std::vector<std::unique_ptr<ResizerElement>> m_elements;
181};
182
184{
185public:
186 TitleBar(QWasmWindow *window, emscripten::val parentElement);
187 ~TitleBar();
188
189 void setTitle(const QString &title);
190 void setRestoreVisible(bool visible);
191 void setMaximizeVisible(bool visible);
192 void setCloseVisible(bool visible);
193 void setIcon(std::string_view imageData, std::string_view format);
194 void setWidth(int width);
195
196 QRectF geometry() const;
197
198private:
199 bool onPointerDown(const PointerEvent &event);
200 bool onPointerMove(const PointerEvent &event);
201 bool onPointerUp(const PointerEvent &event);
202 bool onDoubleClick();
203
204 QPointF clipPointWithScreen(const QPointF &pointInTitleBarCoords) const;
205
206 QWasmWindow *m_window;
207
208 emscripten::val m_element;
209 emscripten::val m_label;
210
211 std::unique_ptr<WebImageButton> m_close;
212 std::unique_ptr<WebImageButton> m_maximize;
213 std::unique_ptr<WebImageButton> m_restore;
214 std::unique_ptr<WebImageButton> m_icon;
215
216 int m_capturedPointerId = -1;
217 QPointF m_moveStartPoint;
218 QPoint m_moveStartWindowPosition;
219
220 std::unique_ptr<qstdweb::EventCallback> m_mouseDownEvent;
221 std::unique_ptr<qstdweb::EventCallback> m_mouseMoveEvent;
222 std::unique_ptr<qstdweb::EventCallback> m_mouseUpEvent;
223 std::unique_ptr<qstdweb::EventCallback> m_doubleClickEvent;
224};
225
227#endif // QWASMWINDOWNONCLIENTAREA_H
void onClientAreaWidthChange(int width)
TitleBar * titleBar() const
NonClientArea(QWasmWindow *window, emscripten::val containerElement)
\inmodule QtCore\reentrant
Definition qpoint.h:217
\inmodule QtCore\reentrant
Definition qpoint.h:25
\inmodule QtCore\reentrant
Definition qrect.h:484
\inmodule QtCore\reentrant
Definition qrect.h:30
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtGui
Definition qwindow.h:63
bool onPointerUp(const PointerEvent &event)
static constexpr const char * cssClassNameForEdges(Qt::Edges edges)
ResizerElement(ResizerElement &&other)
ResizerElement(emscripten::val parentElement, Qt::Edges edges, Resizer *resizer)
ResizerElement & operator=(ResizerElement &&other)=delete
ResizerElement & operator=(const ResizerElement &other)=delete
bool onPointerDown(const PointerEvent &event)
bool onPointerMove(const PointerEvent &event)
ResizerElement(const ResizerElement &other)=delete
Resizer(QWasmWindow *window, emscripten::val parentElement)
std::function< void()> ClickCallback
ResizeConstraints getResizeConstraints()
void setTitle(const QString &title)
void setMaximizeVisible(bool visible)
TitleBar(QWasmWindow *window, emscripten::val parentElement)
QRectF geometry() const
void setWidth(int width)
void setIcon(std::string_view imageData, std::string_view format)
void setCloseVisible(bool visible)
void setRestoreVisible(bool visible)
Callbacks & operator=(Callbacks &&)
Callbacks(const Callbacks &)=delete
Callbacks & operator=(const Callbacks &)=delete
void setImage(std::string_view imageData, std::string_view format)
emscripten::val htmlElement() const
void setVisible(bool visible)
emscripten::val imageElement() const
void setCallbacks(Callbacks callbacks)
Combined button and popup list for selecting options.
@ RightEdge
@ TopEdge
@ BottomEdge
@ LeftEdge
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
GLint GLsizei width
GLint GLsizei GLsizei GLenum format
struct _cl_event * event
PromiseCallbacks callbacks
Definition qstdweb.cpp:275
QString title
[35]
QSharedPointer< T > other(t)
[5]
QByteArray imageData
[15]
aWidget window() -> setWindowTitle("New Window Title")
[2]