Index: ui/aura/desktop_host_win.cc |
=================================================================== |
--- ui/aura/desktop_host_win.cc (revision 113260) |
+++ ui/aura/desktop_host_win.cc (working copy) |
@@ -1,279 +0,0 @@ |
-// Copyright (c) 2011 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 "ui/aura/desktop_host_win.h" |
- |
-#include <windows.h> |
- |
-#include <algorithm> |
- |
-#include "base/message_loop.h" |
-#include "ui/aura/desktop.h" |
-#include "ui/aura/event.h" |
- |
-using std::max; |
-using std::min; |
- |
-namespace aura { |
- |
-namespace { |
- |
-const wchar_t* GetCursorId(gfx::NativeCursor native_cursor) { |
- switch (native_cursor) { |
- case kCursorNull: |
- return IDC_ARROW; |
- case kCursorPointer: |
- return IDC_ARROW; |
- case kCursorCross: |
- return IDC_CROSS; |
- case kCursorHand: |
- return IDC_HAND; |
- case kCursorIBeam: |
- return IDC_IBEAM; |
- case kCursorWait: |
- return IDC_WAIT; |
- case kCursorHelp: |
- return IDC_HELP; |
- case kCursorEastResize: |
- return IDC_SIZEWE; |
- case kCursorNorthResize: |
- return IDC_SIZENS; |
- case kCursorNorthEastResize: |
- return IDC_SIZENESW; |
- case kCursorNorthWestResize: |
- return IDC_SIZENWSE; |
- case kCursorSouthResize: |
- return IDC_SIZENS; |
- case kCursorSouthEastResize: |
- return IDC_SIZENWSE; |
- case kCursorSouthWestResize: |
- return IDC_SIZENESW; |
- case kCursorWestResize: |
- return IDC_SIZEWE; |
- case kCursorNorthSouthResize: |
- return IDC_SIZENS; |
- case kCursorEastWestResize: |
- return IDC_SIZEWE; |
- case kCursorNorthEastSouthWestResize: |
- return IDC_SIZENESW; |
- case kCursorNorthWestSouthEastResize: |
- return IDC_SIZENWSE; |
- case kCursorMove: |
- return IDC_SIZEALL; |
- case kCursorProgress: |
- return IDC_APPSTARTING; |
- case kCursorNoDrop: |
- return IDC_NO; |
- case kCursorNotAllowed: |
- return IDC_NO; |
- case kCursorColumnResize: |
- case kCursorRowResize: |
- case kCursorMiddlePanning: |
- case kCursorEastPanning: |
- case kCursorNorthPanning: |
- case kCursorNorthEastPanning: |
- case kCursorNorthWestPanning: |
- case kCursorSouthPanning: |
- case kCursorSouthEastPanning: |
- case kCursorSouthWestPanning: |
- case kCursorWestPanning: |
- case kCursorVerticalText: |
- case kCursorCell: |
- case kCursorContextMenu: |
- case kCursorAlias: |
- case kCursorCopy: |
- case kCursorNone: |
- case kCursorZoomIn: |
- case kCursorZoomOut: |
- case kCursorGrab: |
- case kCursorGrabbing: |
- case kCursorCustom: |
- // TODO(jamescook): Should we use WebKit glue resources for these? |
- // Or migrate those resources to someplace ui/aura can share? |
- NOTIMPLEMENTED(); |
- return IDC_ARROW; |
- default: |
- NOTREACHED(); |
- return IDC_ARROW; |
- } |
-} |
- |
-} // namespace |
- |
-// static |
-DesktopHost* DesktopHost::Create(const gfx::Rect& bounds) { |
- return new DesktopHostWin(bounds); |
-} |
- |
-// static |
-gfx::Size DesktopHost::GetNativeScreenSize() { |
- return gfx::Size(GetSystemMetrics(SM_CXSCREEN), |
- GetSystemMetrics(SM_CYSCREEN)); |
-} |
- |
-DesktopHostWin::DesktopHostWin(const gfx::Rect& bounds) |
- : desktop_(NULL), |
- fullscreen_(false), |
- saved_window_style_(0), |
- saved_window_ex_style_(0) { |
- Init(NULL, bounds); |
- SetWindowText(hwnd(), L"aura::Desktop!"); |
-} |
- |
-DesktopHostWin::~DesktopHostWin() { |
- DestroyWindow(hwnd()); |
-} |
- |
-bool DesktopHostWin::Dispatch(const MSG& msg) { |
- TranslateMessage(&msg); |
- DispatchMessage(&msg); |
- return true; |
-} |
- |
-void DesktopHostWin::SetDesktop(Desktop* desktop) { |
- desktop_ = desktop; |
-} |
- |
-gfx::AcceleratedWidget DesktopHostWin::GetAcceleratedWidget() { |
- return hwnd(); |
-} |
- |
-void DesktopHostWin::Show() { |
- ShowWindow(hwnd(), SW_SHOWNORMAL); |
-} |
- |
-void DesktopHostWin::ToggleFullScreen() { |
- gfx::Rect target_rect; |
- if (!fullscreen_) { |
- fullscreen_ = true; |
- saved_window_style_ = GetWindowLong(hwnd(), GWL_STYLE); |
- saved_window_ex_style_ = GetWindowLong(hwnd(), GWL_EXSTYLE); |
- GetWindowRect(hwnd(), &saved_window_rect_); |
- SetWindowLong(hwnd(), GWL_STYLE, |
- saved_window_style_ & ~(WS_CAPTION | WS_THICKFRAME)); |
- SetWindowLong(hwnd(), GWL_EXSTYLE, |
- saved_window_ex_style_ & ~(WS_EX_DLGMODALFRAME | |
- WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE)); |
- |
- MONITORINFO mi; |
- mi.cbSize = sizeof(mi); |
- GetMonitorInfo(MonitorFromWindow(hwnd(), MONITOR_DEFAULTTONEAREST), &mi); |
- target_rect = mi.rcMonitor; |
- } else { |
- fullscreen_ = false; |
- SetWindowLong(hwnd(), GWL_STYLE, saved_window_style_); |
- SetWindowLong(hwnd(), GWL_EXSTYLE, saved_window_ex_style_); |
- target_rect = saved_window_rect_; |
- } |
- SetWindowPos(hwnd(), |
- NULL, |
- target_rect.x(), |
- target_rect.y(), |
- target_rect.width(), |
- target_rect.height(), |
- SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); |
-} |
- |
-gfx::Size DesktopHostWin::GetSize() const { |
- RECT r; |
- GetClientRect(hwnd(), &r); |
- return gfx::Rect(r).size(); |
-} |
- |
-void DesktopHostWin::SetSize(const gfx::Size& size) { |
- if (fullscreen_) { |
- saved_window_rect_.right = saved_window_rect_.left + size.width(); |
- saved_window_rect_.bottom = saved_window_rect_.top + size.height(); |
- return; |
- } |
- RECT window_rect; |
- window_rect.left = 0; |
- window_rect.top = 0; |
- window_rect.right = size.width(); |
- window_rect.bottom = size.height(); |
- AdjustWindowRectEx(&window_rect, |
- GetWindowLong(hwnd(), GWL_STYLE), |
- FALSE, |
- GetWindowLong(hwnd(), GWL_EXSTYLE)); |
- SetWindowPos( |
- hwnd(), |
- NULL, |
- 0, |
- 0, |
- window_rect.right - window_rect.left, |
- window_rect.bottom - window_rect.top, |
- SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOREDRAW | SWP_NOREPOSITION); |
-} |
- |
-gfx::Point DesktopHostWin::GetLocationOnNativeScreen() const { |
- RECT r; |
- GetClientRect(hwnd(), &r); |
- return gfx::Point(r.left, r.top); |
-} |
- |
- |
-void DesktopHostWin::SetCursor(gfx::NativeCursor native_cursor) { |
- // Custom web cursors are handled directly. |
- if (native_cursor == kCursorCustom) |
- return; |
- const wchar_t* cursor_id = GetCursorId(native_cursor); |
- // TODO(jamescook): Support for non-system cursors will require finding |
- // the appropriate module to pass to LoadCursor(). |
- ::SetCursor(LoadCursor(NULL, cursor_id)); |
-} |
- |
-gfx::Point DesktopHostWin::QueryMouseLocation() { |
- POINT pt; |
- GetCursorPos(&pt); |
- ScreenToClient(hwnd(), &pt); |
- const gfx::Size size = GetSize(); |
- return gfx::Point(max(0, min(size.width(), static_cast<int>(pt.x))), |
- max(0, min(size.height(), static_cast<int>(pt.y)))); |
-} |
- |
-void DesktopHostWin::PostNativeEvent(const base::NativeEvent& native_event) { |
- ::PostMessage( |
- hwnd(), native_event.message, native_event.wParam, native_event.lParam); |
-} |
- |
-void DesktopHostWin::OnClose() { |
- // TODO: this obviously shouldn't be here. |
- MessageLoopForUI::current()->Quit(); |
-} |
- |
-LRESULT DesktopHostWin::OnKeyEvent(UINT message, |
- WPARAM w_param, |
- LPARAM l_param) { |
- MSG msg = { hwnd(), message, w_param, l_param }; |
- KeyEvent keyev(msg, message == WM_CHAR); |
- SetMsgHandled(desktop_->DispatchKeyEvent(&keyev)); |
- return 0; |
-} |
- |
-LRESULT DesktopHostWin::OnMouseRange(UINT message, |
- WPARAM w_param, |
- LPARAM l_param) { |
- MSG msg = { hwnd(), message, w_param, l_param, 0, |
- { GET_X_LPARAM(l_param), GET_Y_LPARAM(l_param) } }; |
- MouseEvent event(msg); |
- bool handled = false; |
- if (!(event.flags() & ui::EF_IS_NON_CLIENT)) |
- handled = desktop_->DispatchMouseEvent(&event); |
- SetMsgHandled(handled); |
- return 0; |
-} |
- |
-void DesktopHostWin::OnPaint(HDC dc) { |
- desktop_->Draw(); |
- ValidateRect(hwnd(), NULL); |
-} |
- |
-void DesktopHostWin::OnSize(UINT param, const CSize& size) { |
- // Minimizing resizes the window to 0x0 which causes our layout to go all |
- // screwy, so we just ignore it. |
- if (param != SIZE_MINIMIZED) |
- desktop_->OnHostResized(gfx::Size(size.cx, size.cy)); |
-} |
- |
-} // namespace aura |