feat: Add cutsom window without titlebar for osx
This commit is contained in:
parent
a1b7e70404
commit
4be2340d3e
|
@ -21,6 +21,7 @@ macro(add_target name type)
|
||||||
include/DOtherSide/DosQAbstractItemModel.h
|
include/DOtherSide/DosQAbstractItemModel.h
|
||||||
include/DOtherSide/Utils.h
|
include/DOtherSide/Utils.h
|
||||||
include/DOtherSide/DosDockClicker.h
|
include/DOtherSide/DosDockClicker.h
|
||||||
|
include/DOtherSide/DOtherSideStatusWindow.h
|
||||||
src/DOtherSide.cpp
|
src/DOtherSide.cpp
|
||||||
src/DosQMetaObject.cpp
|
src/DosQMetaObject.cpp
|
||||||
src/DosQDeclarative.cpp
|
src/DosQDeclarative.cpp
|
||||||
|
@ -30,8 +31,15 @@ macro(add_target name type)
|
||||||
src/DosQAbstractItemModel.cpp
|
src/DosQAbstractItemModel.cpp
|
||||||
src/DosQQuickImageProvider.cpp
|
src/DosQQuickImageProvider.cpp
|
||||||
src/DosDockClicker.cpp
|
src/DosDockClicker.cpp
|
||||||
|
src/DOtherSideStatusWindow.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (APPLE)
|
||||||
|
target_sources(${name} PUBLIC src/DOtherSideStatusWindow_osx.mm)
|
||||||
|
else()
|
||||||
|
target_sources(${name} PUBLIC ${CMAKE_SOURCE_DIR}/lib/src/DOtherSideStatusWindow_other.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
target_compile_definitions(${name} PRIVATE -DWIN32)
|
target_compile_definitions(${name} PRIVATE -DWIN32)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef STATUSWINDOW_H
|
||||||
|
#define STATUSWINDOW_H
|
||||||
|
|
||||||
|
#include <QQuickWindow>
|
||||||
|
|
||||||
|
class StatusWindow: public QQuickWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
Q_PROPERTY(bool isFullScreen READ isFullScreen NOTIFY isFullScreenChanged)
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
explicit StatusWindow(QWindow *parent = nullptr);
|
||||||
|
|
||||||
|
Q_INVOKABLE void toggleFullScreen();
|
||||||
|
|
||||||
|
bool isFullScreen() const;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void isFullScreenChanged();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void removeTitleBar();
|
||||||
|
void showTitleBar();
|
||||||
|
void initCallbacks();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_isFullScreen;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // STATUSWINDOW_H
|
|
@ -58,12 +58,14 @@
|
||||||
#include "DOtherSide/DosQDeclarative.h"
|
#include "DOtherSide/DosQDeclarative.h"
|
||||||
#include "DOtherSide/DosQQuickImageProvider.h"
|
#include "DOtherSide/DosQQuickImageProvider.h"
|
||||||
#include "DOtherSide/DosDockClicker.h"
|
#include "DOtherSide/DosDockClicker.h"
|
||||||
|
#include "DOtherSide/DOtherSideStatusWindow.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
void register_meta_types()
|
void register_meta_types()
|
||||||
{
|
{
|
||||||
qRegisterMetaType<QVector<int>>();
|
qRegisterMetaType<QVector<int>>();
|
||||||
|
qmlRegisterType<StatusWindow>("DotherSide", 0 , 1, "StatusWindow");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
#include "DOtherSide/DOtherSideStatusWindow.h"
|
||||||
|
|
||||||
|
StatusWindow::StatusWindow(QWindow *parent)
|
||||||
|
: QQuickWindow(parent),
|
||||||
|
m_isFullScreen(false)
|
||||||
|
{
|
||||||
|
removeTitleBar();
|
||||||
|
|
||||||
|
connect(this, &QQuickWindow::windowStateChanged, [&](Qt::WindowState windowState) {
|
||||||
|
if (windowState == Qt::WindowNoState) {
|
||||||
|
removeTitleBar();
|
||||||
|
m_isFullScreen = false;
|
||||||
|
emit isFullScreenChanged();
|
||||||
|
} else if (windowState == Qt::WindowFullScreen) {
|
||||||
|
m_isFullScreen = true;
|
||||||
|
emit isFullScreenChanged();
|
||||||
|
showTitleBar();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void StatusWindow::toggleFullScreen()
|
||||||
|
{
|
||||||
|
if (m_isFullScreen) {
|
||||||
|
showNormal();
|
||||||
|
} else {
|
||||||
|
showFullScreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool StatusWindow::isFullScreen() const
|
||||||
|
{
|
||||||
|
return m_isFullScreen;
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
#include "DOtherSide/DOtherSideStatusWindow.h"
|
||||||
|
|
||||||
|
#include <Foundation/Foundation.h>
|
||||||
|
#include <AppKit/NSView.h>
|
||||||
|
#include <AppKit/NSWindow.h>
|
||||||
|
#include <AppKit/NSColor.h>
|
||||||
|
#include <AppKit/NSToolbar.h>
|
||||||
|
#include <AppKit/NSButton.h>
|
||||||
|
#include <AppKit/AppKit.h>
|
||||||
|
|
||||||
|
void StatusWindow::removeTitleBar()
|
||||||
|
{
|
||||||
|
NSView *nsView = reinterpret_cast<NSView*>(this->winId());
|
||||||
|
NSWindow *window = [nsView window];
|
||||||
|
|
||||||
|
window.titlebarAppearsTransparent = true;
|
||||||
|
window.titleVisibility = NSWindowTitleHidden;
|
||||||
|
window.styleMask |= NSWindowStyleMaskFullSizeContentView;
|
||||||
|
NSButton* close = [window standardWindowButton:NSWindowCloseButton];
|
||||||
|
NSView* titleBarContainerView = close.superview.superview;
|
||||||
|
[titleBarContainerView setHidden:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
void StatusWindow::showTitleBar()
|
||||||
|
{
|
||||||
|
NSView *nsView = reinterpret_cast<NSView*>(this->winId());
|
||||||
|
NSWindow *window = [nsView window];
|
||||||
|
|
||||||
|
window.titlebarAppearsTransparent = true;
|
||||||
|
window.titleVisibility = NSWindowTitleHidden;
|
||||||
|
window.styleMask |= NSWindowStyleMaskFullSizeContentView;
|
||||||
|
NSButton* close = [window standardWindowButton:NSWindowCloseButton];
|
||||||
|
NSView* titleBarContainerView = close.superview.superview;
|
||||||
|
[titleBarContainerView setHidden:NO];
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include "DOtherSide/DOtherSideStatusWindow.h"
|
||||||
|
|
||||||
|
void StatusWindow::removeTitleBar()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void StatusWindow::showTitleBar()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue