aboutsummaryrefslogtreecommitdiff
path: root/src/osx/gui/Window.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/osx/gui/Window.mm')
-rw-r--r--src/osx/gui/Window.mm39
1 files changed, 20 insertions, 19 deletions
diff --git a/src/osx/gui/Window.mm b/src/osx/gui/Window.mm
index b838165f..87660ac6 100644
--- a/src/osx/gui/Window.mm
+++ b/src/osx/gui/Window.mm
@@ -40,10 +40,11 @@ using cru::platform::graphics::osx::quartz::Convert;
namespace cru::platform::gui::osx {
namespace {
-inline NSWindowStyleMask CalcWindowStyleMask(bool frame) {
- return frame ? NSWindowStyleMaskTitled | NSWindowStyleMaskClosable |
- NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable
- : NSWindowStyleMaskBorderless;
+inline NSWindowStyleMask CalcWindowStyleMask(WindowStyleFlag flag) {
+ return flag & WindowStyleFlags::NoCaptionAndBorder
+ ? NSWindowStyleMaskBorderless
+ : NSWindowStyleMaskTitled | NSWindowStyleMaskClosable |
+ NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable;
}
}
@@ -144,7 +145,7 @@ Point OsxWindowPrivate::TransformMousePoint(const Point& point) {
void OsxWindowPrivate::CreateWindow() {
NSRect content_rect = Convert(content_rect_);
- NSWindowStyleMask style_mask = CalcWindowStyleMask(frame_);
+ NSWindowStyleMask style_mask = CalcWindowStyleMask(style_flag_);
auto cr = content_rect;
cr.origin.y = GetScreenSize().height - content_rect.origin.y - content_rect.size.height;
@@ -179,20 +180,17 @@ Size OsxWindowPrivate::GetScreenSize() {
Rect OsxWindowPrivate::RetrieveContentRect() {
NSRect rect = [NSWindow contentRectForFrameRect:[window_ frame]
- styleMask:CalcWindowStyleMask(frame_)];
+ styleMask:CalcWindowStyleMask(style_flag_)];
rect.origin.y = GetScreenSize().height - rect.origin.y - rect.size.height;
return cru::platform::graphics::osx::quartz::Convert(rect);
}
}
-OsxWindow::OsxWindow(OsxUiApplication* ui_application, INativeWindow* parent, bool frame)
+OsxWindow::OsxWindow(OsxUiApplication* ui_application)
: OsxGuiResource(ui_application), p_(new details::OsxWindowPrivate(this)) {
p_->window_delegate_ = [[CruWindowDelegate alloc] init:p_.get()];
- p_->parent_ = parent;
-
- p_->frame_ = frame;
p_->content_rect_ = {100, 100, 400, 200};
p_->input_method_context_ = std::make_unique<OsxInputMethodContext>(this);
@@ -211,20 +209,20 @@ void OsxWindow::Close() {
INativeWindow* OsxWindow::GetParent() { return p_->parent_; }
-bool OsxWindow::IsVisible() {
- if (!p_->window_) return false;
- return [p_->window_ isVisible];
+WindowVisibilityType OsxWindow::GetVisibility() {
+ if (!p_->window_) return WindowVisibilityType::Hide;
+ return [p_->window_ isVisible] ? WindowVisibilityType::Show : WindowVisibilityType::Hide;
}
-void OsxWindow::SetVisible(bool is_visible) {
+void OsxWindow::SetVisibility(WindowVisibilityType visibility) {
if (p_->window_) {
- if (is_visible) {
+ if (visibility == WindowVisibilityType::Show) {
[p_->window_ orderFront:nil];
} else {
[p_->window_ orderOut:nil];
}
} else {
- if (is_visible) {
+ if (visibility == WindowVisibilityType::Show) {
p_->CreateWindow();
[p_->window_ orderFront:nil];
}
@@ -247,7 +245,7 @@ void OsxWindow::SetClientRect(const Rect& rect) {
if (p_->window_) {
auto r = Convert(rect);
r.origin.y = p_->GetScreenSize().height - r.origin.y - r.size.height;
- r = [NSWindow frameRectForContentRect:r styleMask:CalcWindowStyleMask(p_->frame_)];
+ r = [NSWindow frameRectForContentRect:r styleMask:CalcWindowStyleMask(p_->style_flag_)];
[p_->window_ setFrame:r display:false];
} else {
p_->content_rect_ = rect;
@@ -257,7 +255,7 @@ void OsxWindow::SetClientRect(const Rect& rect) {
Rect OsxWindow::GetWindowRect() {
auto r = Convert(p_->content_rect_);
r.origin.y = p_->GetScreenSize().height - r.origin.y - r.size.height;
- r = [NSWindow frameRectForContentRect:r styleMask:CalcWindowStyleMask(p_->frame_)];
+ r = [NSWindow frameRectForContentRect:r styleMask:CalcWindowStyleMask(p_->style_flag_)];
r.origin.y = p_->GetScreenSize().height - r.origin.y - r.size.height;
return Convert(r);
}
@@ -265,7 +263,7 @@ Rect OsxWindow::GetWindowRect() {
void OsxWindow::SetWindowRect(const Rect& rect) {
auto r = Convert(rect);
r.origin.y = p_->GetScreenSize().height - r.origin.y - r.size.height;
- r = [NSWindow frameRectForContentRect:r styleMask:CalcWindowStyleMask(p_->frame_)];
+ r = [NSWindow frameRectForContentRect:r styleMask:CalcWindowStyleMask(p_->style_flag_)];
r.origin.y = p_->GetScreenSize().height - r.origin.y - r.size.height;
SetClientRect(Convert(r));
}
@@ -315,6 +313,9 @@ void OsxWindow::SetCursor(std::shared_ptr<ICursor> cursor) {
IEvent<std::nullptr_t>* OsxWindow::CreateEvent() { return &p_->create_event_; }
IEvent<std::nullptr_t>* OsxWindow::DestroyEvent() { return &p_->destroy_event_; }
IEvent<std::nullptr_t>* OsxWindow::PaintEvent() { return &p_->paint_event_; }
+IEvent<WindowVisibilityType>* OsxWindow::VisibilityChangeEvent() {
+ return &p_->visibility_change_event_;
+}
IEvent<Size>* OsxWindow::ResizeEvent() { return &p_->resize_event_; }
IEvent<FocusChangeType>* OsxWindow::FocusEvent() { return &p_->focus_event_; }
IEvent<MouseEnterLeaveType>* OsxWindow::MouseEnterLeaveEvent() {