Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Unified Diff: ui/views/widget/native_widget_mac.mm

Issue 303543004: MacViews: views_examples_with_content_exe working! Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add files Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/widget/native_widget_mac.h ('k') | ui/views_content_client/views_content_browser_client.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/widget/native_widget_mac.mm
diff --git a/ui/views/widget/native_widget_mac.mm b/ui/views/widget/native_widget_mac.mm
index 16a45e5169835ff44c675fdb4523dd778e117572..55d6074edd03114494deaf53abc448e6dcaccc89 100644
--- a/ui/views/widget/native_widget_mac.mm
+++ b/ui/views/widget/native_widget_mac.mm
@@ -6,15 +6,82 @@
#include <Cocoa/Cocoa.h>
+#include "base/mac/scoped_nsobject.h"
+#include "ui/compositor/layer_owner.h"
#include "ui/gfx/font_list.h"
+#include "ui/native_theme/native_theme_mac.h"
+#include "ui/gfx/canvas_paint_mac.h"
+#include "ui/gfx/mac/point_utils.h"
+#include "ui/views/cocoa/bridged_content_view.h"
+
+namespace {
+
+template <class OSTREAM>
+OSTREAM& operator<<(OSTREAM& out, const NSRect& rect) {
+ CGFloat x = rect.origin.x;
+ CGFloat y = rect.origin.y;
+ out << '[' << rect.size.width << 'x' << rect.size.height
+ << (x < 0 ? '-' : '+') << x << (y < 0 ? '-' : '+') << y << ']';
+ return out;
+}
+
+template <class OSTREAM>
+OSTREAM& operator<<(OSTREAM& out, const NSPoint& point) {
+ out << '(' << point.x << ',' << point.y << ')';
+ return out;
+}
+
+} // namespace
namespace views {
+class NativeWidgetMac::Impl : public ui::LayerOwner {
+ public:
+ Impl() : bridged_view_(nil) {}
+ virtual ~Impl() {}
+
+ ui::Layer* GetOrCreateLayer() {
+ if (!bridged_view_)
+ return NULL;
+
+ if (layer())
+ return layer();
+
+ DCHECK(!compositor_);
+ compositor_.reset(new ui::Compositor(bridged_view_));
+ SetLayer(new ui::Layer(ui::LAYER_TEXTURED));
+ compositor_->SetRootLayer(layer());
+ return layer();
+ }
+
+ void SetRootView(views::View* view) {
+ if (view == [bridged_view_ view])
+ return;
+
+ DCHECK(!compositor_);
+ [bridged_view_ clearView];
+ bridged_view_.reset();
+ if (view)
+ bridged_view_.reset([[BridgedContentView alloc] initWithView:view]);
+ }
+
+ NSView* GetNSView() { return bridged_view_; }
+
+ private:
+ friend class NativeWidgetMac;
+
+ base::scoped_nsobject<BridgedContentView> bridged_view_;
+ scoped_ptr<ui::Compositor> compositor_;
+ base::scoped_nsobject<NSWindow> window_;
+
+ DISALLOW_COPY_AND_ASSIGN(Impl);
+};
+
////////////////////////////////////////////////////////////////////////////////
// NativeWidgetMac, public:
NativeWidgetMac::NativeWidgetMac(internal::NativeWidgetDelegate* delegate)
- : delegate_(delegate), window_(nil) {
+ : delegate_(delegate), impl_(new Impl) {
}
NativeWidgetMac::~NativeWidgetMac() {
@@ -30,10 +97,11 @@ void NativeWidgetMac::InitNativeWidget(const Widget::InitParams& params) {
// TODO(tapted): Determine a good initial style mask from |params|.
NSInteger style_mask = NSTitledWindowMask | NSClosableWindowMask |
NSMiniaturizableWindowMask | NSResizableWindowMask;
- window_.reset([[NSWindow alloc] initWithContentRect:content_rect
- styleMask:style_mask
- backing:NSBackingStoreBuffered
- defer:NO]);
+ impl_->window_.reset(
+ [[NSWindow alloc] initWithContentRect:content_rect
+ styleMask:style_mask
+ backing:NSBackingStoreBuffered
+ defer:NO]);
}
NonClientFrameView* NativeWidgetMac::CreateNonClientFrameView() {
@@ -62,11 +130,11 @@ const Widget* NativeWidgetMac::GetWidget() const {
}
gfx::NativeView NativeWidgetMac::GetNativeView() const {
- return [window_ contentView];
+ return [impl_->window_ contentView];
}
gfx::NativeWindow NativeWidgetMac::GetNativeWindow() const {
- return window_;
+ return impl_->window_;
}
Widget* NativeWidgetMac::GetTopLevelWidget() {
@@ -76,20 +144,23 @@ Widget* NativeWidgetMac::GetTopLevelWidget() {
const ui::Compositor* NativeWidgetMac::GetCompositor() const {
NOTIMPLEMENTED();
- return NULL;
+ return impl_->layer() ? impl_->layer()->GetCompositor() : NULL;
}
ui::Compositor* NativeWidgetMac::GetCompositor() {
NOTIMPLEMENTED();
- return NULL;
+ return impl_->layer() ? impl_->layer()->GetCompositor() : NULL;
}
ui::Layer* NativeWidgetMac::GetLayer() {
NOTIMPLEMENTED();
return NULL;
+ //return impl_->GetOrCreateLayer();
}
void NativeWidgetMac::ReorderNativeViews() {
+ impl_->SetRootView(GetWidget()->GetRootView());
+ [impl_->window_ setContentView:impl_->GetNSView()];
NOTIMPLEMENTED();
}
@@ -178,11 +249,13 @@ gfx::Rect NativeWidgetMac::GetRestoredBounds() const {
}
void NativeWidgetMac::SetBounds(const gfx::Rect& bounds) {
- NOTIMPLEMENTED();
+ NSRect frame_rect =
+ [impl_->window_ frameRectForContentRect:gfx::ScreenRectToNSRect(bounds)];
+ [impl_->window_ setFrame:frame_rect display:YES animate:NO];
}
void NativeWidgetMac::SetSize(const gfx::Size& size) {
- [window_ setContentSize:NSMakeSize(size.width(), size.height())];
+ [impl_->window_ setContentSize:NSMakeSize(size.width(), size.height())];
}
void NativeWidgetMac::StackAbove(gfx::NativeView native_view) {
@@ -224,6 +297,7 @@ void NativeWidgetMac::ShowMaximizedWithBounds(
void NativeWidgetMac::ShowWithWindowState(ui::WindowShowState state) {
NOTIMPLEMENTED();
+ Activate();
}
bool NativeWidgetMac::IsVisible() const {
@@ -232,7 +306,8 @@ bool NativeWidgetMac::IsVisible() const {
}
void NativeWidgetMac::Activate() {
- NOTIMPLEMENTED();
+ [impl_->window_ makeKeyAndOrderFront:nil];
+ [NSApp activateIgnoringOtherApps:YES];
}
void NativeWidgetMac::Deactivate() {
@@ -241,7 +316,7 @@ void NativeWidgetMac::Deactivate() {
bool NativeWidgetMac::IsActive() const {
NOTIMPLEMENTED();
- return true;
+ return false;
}
void NativeWidgetMac::SetAlwaysOnTop(bool always_on_top) {
@@ -309,6 +384,10 @@ void NativeWidgetMac::RunShellDrag(View* view,
}
void NativeWidgetMac::SchedulePaintInRect(const gfx::Rect& rect) {
+ DLOG(INFO) << "SchedulePaintInRect";
+ [impl_->GetNSView() setNeedsDisplay:YES];
+ if (impl_->layer())
+ impl_->layer()->SchedulePaint(rect);
NOTIMPLEMENTED();
}
@@ -347,8 +426,7 @@ void NativeWidgetMac::SetVisibilityChangedAnimationsEnabled(bool value) {
}
ui::NativeTheme* NativeWidgetMac::GetNativeTheme() const {
- NOTIMPLEMENTED();
- return NULL;
+ return ui::NativeTheme::instance();
}
void NativeWidgetMac::OnRootViewLayout() const {
@@ -379,8 +457,8 @@ namespace internal {
// static
NativeWidgetPrivate* NativeWidgetPrivate::CreateNativeWidget(
internal::NativeWidgetDelegate* delegate) {
- NOTIMPLEMENTED();
- return NULL;
+ // Called e.g. via CreateBubbleWidget().
+ return new NativeWidgetMac(delegate);
}
// static
« no previous file with comments | « ui/views/widget/native_widget_mac.h ('k') | ui/views_content_client/views_content_browser_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698