| Index: mojo/services/native_viewport/native_viewport_win.cc
|
| diff --git a/mojo/services/native_viewport/native_viewport_win.cc b/mojo/services/native_viewport/native_viewport_win.cc
|
| index bf1bb3384ae22f8dd63beb407ce7d676ab266d71..0582c4591aaf9c02dbe81d3046779e86ebdffd73 100644
|
| --- a/mojo/services/native_viewport/native_viewport_win.cc
|
| +++ b/mojo/services/native_viewport/native_viewport_win.cc
|
| @@ -4,156 +4,92 @@
|
|
|
| #include "mojo/services/native_viewport/native_viewport.h"
|
|
|
| -#include "ui/events/event.h"
|
| -#include "ui/events/event_utils.h"
|
| -#include "ui/gfx/win/msg_util.h"
|
| -#include "ui/gfx/win/window_impl.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "ui/gfx/rect.h"
|
| +#include "ui/platform_window/platform_window_delegate.h"
|
| +#include "ui/platform_window/win/win_window.h"
|
|
|
| namespace mojo {
|
| namespace services {
|
| -namespace {
|
| -
|
| -gfx::Rect GetWindowBoundsForClientBounds(DWORD style, DWORD ex_style,
|
| - const gfx::Rect& bounds) {
|
| - RECT wr;
|
| - wr.left = bounds.x();
|
| - wr.top = bounds.y();
|
| - wr.right = bounds.x() + bounds.width();
|
| - wr.bottom = bounds.y() + bounds.height();
|
| - AdjustWindowRectEx(&wr, style, FALSE, ex_style);
|
| -
|
| - // Make sure to keep the window onscreen, as AdjustWindowRectEx() may have
|
| - // moved part of it offscreen.
|
| - gfx::Rect window_bounds(wr.left, wr.top,
|
| - wr.right - wr.left, wr.bottom - wr.top);
|
| - window_bounds.set_x(std::max(0, window_bounds.x()));
|
| - window_bounds.set_y(std::max(0, window_bounds.y()));
|
| - return window_bounds;
|
| -}
|
| -
|
| -}
|
|
|
| -class NativeViewportWin : public gfx::WindowImpl,
|
| - public NativeViewport {
|
| +class NativeViewportWin : public NativeViewport,
|
| + public ui::PlatformWindowDelegate {
|
| public:
|
| explicit NativeViewportWin(NativeViewportDelegate* delegate)
|
| : delegate_(delegate) {
|
| }
|
| +
|
| virtual ~NativeViewportWin() {
|
| - if (IsWindow(hwnd()))
|
| - DestroyWindow(hwnd());
|
| + // Destroy the platform-window while |this| is still alive.
|
| + platform_window_.reset();
|
| }
|
|
|
| private:
|
| // Overridden from NativeViewport:
|
| virtual void Init(const gfx::Rect& bounds) OVERRIDE {
|
| - gfx::Rect window_bounds = GetWindowBoundsForClientBounds(
|
| - WS_OVERLAPPEDWINDOW, window_ex_style(), bounds);
|
| - gfx::WindowImpl::Init(NULL, window_bounds);
|
| - SetWindowText(hwnd(), L"native_viewport::NativeViewportWin!");
|
| + platform_window_.reset(new ui::WinWindow(this, bounds));
|
| }
|
|
|
| virtual void Show() OVERRIDE {
|
| - ShowWindow(hwnd(), SW_SHOWNORMAL);
|
| + platform_window_->Show();
|
| }
|
|
|
| virtual void Hide() OVERRIDE {
|
| - ShowWindow(hwnd(), SW_HIDE);
|
| + platform_window_->Hide();
|
| }
|
|
|
| virtual void Close() OVERRIDE {
|
| - DestroyWindow(hwnd());
|
| + platform_window_->Close();
|
| }
|
|
|
| virtual gfx::Size GetSize() OVERRIDE {
|
| - RECT cr;
|
| - GetClientRect(hwnd(), &cr);
|
| - return gfx::Size(cr.right - cr.left, cr.bottom - cr.top);
|
| + return platform_window_->GetBounds().size();
|
| }
|
|
|
| virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE {
|
| - gfx::Rect window_bounds = GetWindowBoundsForClientBounds(
|
| - GetWindowLong(hwnd(), GWL_STYLE),
|
| - GetWindowLong(hwnd(), GWL_EXSTYLE),
|
| - bounds);
|
| - SetWindowPos(hwnd(), NULL, window_bounds.x(), window_bounds.y(),
|
| - window_bounds.width(), window_bounds.height(),
|
| - SWP_NOREPOSITION);
|
| + platform_window_->SetBounds(bounds);
|
| }
|
|
|
| virtual void SetCapture() OVERRIDE {
|
| - DCHECK(::GetCapture() != hwnd());
|
| - ::SetCapture(hwnd());
|
| + platform_window_->SetCapture();
|
| }
|
|
|
| virtual void ReleaseCapture() OVERRIDE {
|
| - if (::GetCapture() == hwnd())
|
| - ::ReleaseCapture();
|
| - }
|
| -
|
| - CR_BEGIN_MSG_MAP_EX(NativeViewportWin)
|
| - CR_MESSAGE_RANGE_HANDLER_EX(WM_MOUSEFIRST, WM_MOUSELAST, OnMouseRange)
|
| -
|
| - CR_MESSAGE_HANDLER_EX(WM_KEYDOWN, OnKeyEvent)
|
| - CR_MESSAGE_HANDLER_EX(WM_KEYUP, OnKeyEvent)
|
| - CR_MESSAGE_HANDLER_EX(WM_SYSKEYDOWN, OnKeyEvent)
|
| - CR_MESSAGE_HANDLER_EX(WM_SYSKEYUP, OnKeyEvent)
|
| - CR_MESSAGE_HANDLER_EX(WM_CHAR, OnKeyEvent)
|
| - CR_MESSAGE_HANDLER_EX(WM_SYSCHAR, OnKeyEvent)
|
| - CR_MESSAGE_HANDLER_EX(WM_IME_CHAR, OnKeyEvent)
|
| -
|
| - CR_MSG_WM_CREATE(OnCreate)
|
| - CR_MSG_WM_DESTROY(OnDestroy)
|
| - CR_MSG_WM_PAINT(OnPaint)
|
| - CR_MSG_WM_WINDOWPOSCHANGED(OnWindowPosChanged)
|
| - CR_END_MSG_MAP()
|
| -
|
| - LRESULT OnMouseRange(UINT message, WPARAM w_param, LPARAM l_param) {
|
| - MSG msg = { hwnd(), message, w_param, l_param, 0,
|
| - { CR_GET_X_LPARAM(l_param), CR_GET_Y_LPARAM(l_param) } };
|
| - ui::MouseEvent event(msg);
|
| - if (ui::IsMouseEventFromTouch(message))
|
| - event.set_flags(event.flags() | ui::EF_FROM_TOUCH);
|
| - SetMsgHandled(delegate_->OnEvent(&event));
|
| - return 0;
|
| - }
|
| - LRESULT OnKeyEvent(UINT message, WPARAM w_param, LPARAM l_param) {
|
| - MSG msg = { hwnd(), message, w_param, l_param };
|
| - ui::KeyEvent event(msg, message == WM_CHAR);
|
| - SetMsgHandled(delegate_->OnEvent(&event));
|
| - return 0;
|
| - }
|
| - LRESULT OnCreate(CREATESTRUCT* create_struct) {
|
| - delegate_->OnAcceleratedWidgetAvailable(hwnd());
|
| - return 0;
|
| - }
|
| - void OnDestroy() {
|
| + platform_window_->ReleaseCapture();
|
| + }
|
| +
|
| + // ui::PlatformWindowDelegate:
|
| + virtual void OnBoundsChanged(const gfx::Rect& new_bounds) OVERRIDE {
|
| + delegate_->OnBoundsChanged(new_bounds);
|
| + }
|
| +
|
| + virtual void OnDamageRect(const gfx::Rect& damaged_region) OVERRIDE {
|
| + }
|
| +
|
| + virtual void DispatchEvent(ui::Event* event) OVERRIDE {
|
| + delegate_->OnEvent(event);
|
| + }
|
| +
|
| + virtual void OnCloseRequest() OVERRIDE {
|
| + platform_window_->Close();
|
| + }
|
| +
|
| + virtual void OnClosed() OVERRIDE {
|
| delegate_->OnDestroyed();
|
| }
|
| - void OnPaint(HDC) {
|
| - RECT cr;
|
| - GetClientRect(hwnd(), &cr);
|
| -
|
| - PAINTSTRUCT ps;
|
| - HDC dc = BeginPaint(hwnd(), &ps);
|
| - HBRUSH red_brush = CreateSolidBrush(RGB(255, 0, 0));
|
| - HGDIOBJ old_object = SelectObject(dc, red_brush);
|
| - Rectangle(dc, cr.left, cr.top, cr.right, cr.bottom);
|
| - SelectObject(dc, old_object);
|
| - DeleteObject(red_brush);
|
| - EndPaint(hwnd(), &ps);
|
| - }
|
| - void OnWindowPosChanged(WINDOWPOS* window_pos) {
|
| - if (!(window_pos->flags & SWP_NOSIZE) ||
|
| - !(window_pos->flags & SWP_NOMOVE)) {
|
| - RECT cr;
|
| - GetClientRect(hwnd(), &cr);
|
| - delegate_->OnBoundsChanged(
|
| - gfx::Rect(window_pos->x, window_pos->y,
|
| - cr.right - cr.left, cr.bottom - cr.top));
|
| - }
|
| +
|
| + virtual void OnWindowStateChanged(ui::PlatformWindowState state) OVERRIDE {
|
| + }
|
| +
|
| + virtual void OnLostCapture() OVERRIDE {
|
| + }
|
| +
|
| + virtual void OnAcceleratedWidgetAvailable(
|
| + gfx::AcceleratedWidget widget) OVERRIDE {
|
| + delegate_->OnAcceleratedWidgetAvailable(widget);
|
| }
|
|
|
| + scoped_ptr<ui::PlatformWindow> platform_window_;
|
| NativeViewportDelegate* delegate_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(NativeViewportWin);
|
|
|