Support WindowTitleHint and FramelessWindowHint in QWasmWindow

WindowTitleHint now correctly enables/disables the window title, and
FramelessWindowHint correctly enables/disables the window frame.

Change-Id: I6f98f0a53af828606748308c6b5bd5d492cef9d2
Reviewed-by: Aleksandr Reviakin <aleksandr.reviakin@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
This commit is contained in:
Mikolaj Boc 2023-02-02 09:02:01 +01:00
parent 916008a50d
commit 40ddc38a7b
3 changed files with 15 additions and 8 deletions

View File

@ -39,7 +39,7 @@ const char *Style = R"css(
box-shadow: rgb(0 0 0 / 20%) 0px 10px 16px 0px, rgb(0 0 0 / 19%) 0px 6px 20px 0px;
}
.qt-window.has-title-bar {
.qt-window.has-frame {
border: var(--border-width) solid lightgray;
caret-color: transparent;
}
@ -49,7 +49,7 @@ const char *Style = R"css(
display: none;
}
.qt-window.has-title-bar:not(.maximized) .resize-outline {
.qt-window.has-frame:not(.maximized) .resize-outline {
display: block;
}
@ -125,17 +125,23 @@ const char *Style = R"css(
padding-bottom: 4px;
}
.qt-window.has-title-bar .title-bar {
.qt-window.has-frame .title-bar {
display: flex;
}
.title-bar .window-name {
display: none;
font-family: 'Lucida Grande';
white-space: nowrap;
user-select: none;
overflow: hidden;
}
.qt-window.has-title .title-bar .window-name {
display: block;
}
.title-bar .spacer {
flex-grow: 1
}

View File

@ -358,8 +358,9 @@ void QWasmWindow::onActivationChanged(bool active)
void QWasmWindow::setWindowFlags(Qt::WindowFlags flags)
{
m_flags = flags;
dom::syncCSSClassWith(m_qtWindow, "has-title-bar", hasTitleBar());
dom::syncCSSClassWith(m_qtWindow, "has-frame", hasFrame());
dom::syncCSSClassWith(m_qtWindow, "has-shadow", !flags.testFlag(Qt::NoDropShadowWindowHint));
dom::syncCSSClassWith(m_qtWindow, "has-title", flags.testFlag(Qt::WindowTitleHint));
dom::syncCSSClassWith(m_qtWindow, "transparent-for-input",
flags.testFlag(Qt::WindowTransparentForInput));
@ -421,7 +422,7 @@ void QWasmWindow::applyWindowState()
else
newGeom = normalGeometry();
dom::syncCSSClassWith(m_qtWindow, "has-title-bar", hasTitleBar());
dom::syncCSSClassWith(m_qtWindow, "has-frame", hasFrame());
dom::syncCSSClassWith(m_qtWindow, "maximized", isMaximized);
m_nonClientArea->titleBar()->setRestoreVisible(isMaximized);
@ -518,9 +519,9 @@ void QWasmWindow::requestUpdate()
m_compositor->requestUpdateWindow(this, QWasmCompositor::UpdateRequestDelivery);
}
bool QWasmWindow::hasTitleBar() const
bool QWasmWindow::hasFrame() const
{
return !m_state.testFlag(Qt::WindowFullScreen) && m_flags.testFlag(Qt::WindowTitleHint)
return !m_state.testFlag(Qt::WindowFullScreen) && !m_flags.testFlag(Qt::FramelessWindowHint)
&& !windowIsPopupType(m_flags);
}

View File

@ -91,7 +91,7 @@ private:
friend class QWasmScreen;
void invalidate();
bool hasTitleBar() const;
bool hasFrame() const;
bool hasMaximizeButton() const;
void applyWindowState();