| Index: ui/views/widget/widget_message_filter.cc
|
| ===================================================================
|
| --- ui/views/widget/widget_message_filter.cc (revision 0)
|
| +++ ui/views/widget/widget_message_filter.cc (revision 0)
|
| @@ -0,0 +1,131 @@
|
| +// Copyright (c) 2012 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/views/widget/widget_message_filter.h"
|
| +
|
| +#include <windowsx.h>
|
| +
|
| +#include "ui/aura/root_window.h"
|
| +#include "ui/gfx/canvas_skia_paint.h"
|
| +#include "ui/gfx/insets.h"
|
| +#include "ui/gfx/path.h"
|
| +#include "ui/views/window/non_client_view.h"
|
| +#include "ui/views/widget/widget.h"
|
| +#include "ui/views/widget/widget_hwnd_utils.h"
|
| +
|
| +namespace views {
|
| +
|
| +WidgetMessageFilter::WidgetMessageFilter(aura::RootWindow* root_window,
|
| + Widget* widget)
|
| + : root_window_(root_window),
|
| + widget_(widget) {
|
| + hwnd_ = root_window_->GetAcceleratedWidget();
|
| + ClientAreaSizeChanged();
|
| +}
|
| +
|
| +WidgetMessageFilter::~WidgetMessageFilter() {
|
| +}
|
| +
|
| +bool WidgetMessageFilter::FilterMessage(HWND hwnd,
|
| + UINT message,
|
| + WPARAM w_param,
|
| + LPARAM l_param,
|
| + LRESULT* l_result) {
|
| + switch (message) {
|
| + case WM_NCCALCSIZE:
|
| + return OnNCCalcSize(w_param, l_param, l_result);
|
| + case WM_NCHITTEST:
|
| + return OnNCHitTest(GET_X_LPARAM(l_param),
|
| + GET_Y_LPARAM(l_param),
|
| + l_result);
|
| + case WM_NCPAINT:
|
| + return OnNCPaint(reinterpret_cast<HRGN>(w_param));
|
| + case WM_SIZE:
|
| + OnSize();
|
| + return false;
|
| + case WM_WINDOWPOSCHANGED:
|
| + OnWindowPosChanged(reinterpret_cast<WINDOWPOS*>(l_param));
|
| + return false;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +bool WidgetMessageFilter::OnNCCalcSize(WPARAM w_param,
|
| + LPARAM l_param,
|
| + LRESULT* l_result) {
|
| + gfx::Insets insets = GetClientAreaInsets();
|
| + if (insets.empty()) {
|
| + *l_result = 0;
|
| + return false;
|
| + }
|
| +
|
| + RECT* client_rect = w_param ?
|
| + &(reinterpret_cast<NCCALCSIZE_PARAMS*>(l_param)->rgrc[0]) :
|
| + reinterpret_cast<RECT*>(l_param);
|
| + client_rect->left += insets.left();
|
| + client_rect->top += insets.top();
|
| + client_rect->bottom -= insets.bottom();
|
| + client_rect->right -= insets.right();
|
| +
|
| + if (insets.left() == 0 || insets.top() == 0)
|
| + *l_result = 0;
|
| + else
|
| + *l_result = w_param ? WVR_REDRAW : 0;
|
| + return true;
|
| +}
|
| +
|
| +bool WidgetMessageFilter::OnNCHitTest(int x, int y, LRESULT* l_result) {
|
| + POINT temp = { x, y };
|
| + MapWindowPoints(HWND_DESKTOP, hwnd_, &temp, 1);
|
| + int component = widget_->GetNonClientComponent(gfx::Point(temp));
|
| + if (component != HTNOWHERE) {
|
| + *l_result = component;
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +bool WidgetMessageFilter::OnNCPaint(HRGN update_region) {
|
| + NOTIMPLEMENTED();
|
| + return true;
|
| +}
|
| +
|
| +void WidgetMessageFilter::OnSize() {
|
| + // ResetWindowRegion is going to trigger WM_NCPAINT. By doing it after we've
|
| + // invoked OnSize we ensure the RootView has been laid out.
|
| + ResetWindowRegion(false);
|
| +}
|
| +
|
| +void WidgetMessageFilter::OnWindowPosChanged(WINDOWPOS* window_pos) {
|
| + if (DidClientAreaSizeChange(window_pos))
|
| + ClientAreaSizeChanged();
|
| +}
|
| +
|
| +gfx::Insets WidgetMessageFilter::GetClientAreaInsets() const {
|
| + // TODO(beng): native frame
|
| + return gfx::Insets(0, 0, 1, 0);
|
| +}
|
| +
|
| +bool WidgetMessageFilter::WidgetSizeIsClientSize() const {
|
| + // TODO(beng):
|
| + return false;
|
| +}
|
| +
|
| +void WidgetMessageFilter::ClientAreaSizeChanged() {
|
| + RECT r;
|
| + if (WidgetSizeIsClientSize())
|
| + GetClientRect(hwnd_, &r);
|
| + else
|
| + GetWindowRect(hwnd_, &r);
|
| + gfx::Size s(std::max(0, static_cast<int>(r.right - r.left)),
|
| + std::max(0, static_cast<int>(r.bottom - r.top)));
|
| + widget_->OnNativeWidgetSizeChanged(s);
|
| +}
|
| +
|
| +void WidgetMessageFilter::ResetWindowRegion(bool force) {
|
| + NOTIMPLEMENTED();
|
| +}
|
| +
|
| +
|
| +} // namespace views
|
|
|
| Property changes on: ui\views\widget\widget_message_filter.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|