blob: 70d7a95311c50adcfdc96e06f61242a84fcd2758 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/apps/native_app_window_frame_view_mac.h"
#import <Cocoa/Cocoa.h>
#include "extensions/browser/app_window/native_app_window.h"
#include "ui/base/hit_test.h"
#import "ui/gfx/mac/coordinate_conversion.h"
#include "ui/views/widget/widget.h"
NativeAppWindowFrameViewMac::NativeAppWindowFrameViewMac(
views::Widget* frame,
extensions::NativeAppWindow* window)
: views::NativeFrameView(frame), native_app_window_(window) {
}
NativeAppWindowFrameViewMac::~NativeAppWindowFrameViewMac() {
}
gfx::Rect NativeAppWindowFrameViewMac::GetWindowBoundsForClientBounds(
const gfx::Rect& client_bounds) const {
NSWindow* ns_window = GetWidget()->GetNativeWindow().GetNativeNSWindow();
gfx::Rect window_bounds = gfx::ScreenRectFromNSRect([ns_window
frameRectForContentRect:gfx::ScreenRectToNSRect(client_bounds)]);
// Enforce minimum size (1, 1) in case that |client_bounds| is passed with
// empty size.
if (window_bounds.IsEmpty())
window_bounds.set_size(gfx::Size(1, 1));
return window_bounds;
}
int NativeAppWindowFrameViewMac::NonClientHitTest(const gfx::Point& point) {
if (!bounds().Contains(point))
return HTNOWHERE;
if (GetWidget()->IsFullscreen())
return HTCLIENT;
// Check for possible draggable region in the client area for the frameless
// window.
SkRegion* draggable_region = native_app_window_->GetDraggableRegion();
if (draggable_region && draggable_region->contains(point.x(), point.y()))
return HTCAPTION;
return HTCLIENT;
}