summaryrefslogtreecommitdiffstats
path: root/chrome/browser/window_clipping_info.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/window_clipping_info.cc')
-rw-r--r--chrome/browser/window_clipping_info.cc165
1 files changed, 0 insertions, 165 deletions
diff --git a/chrome/browser/window_clipping_info.cc b/chrome/browser/window_clipping_info.cc
deleted file mode 100644
index 1e147178..0000000
--- a/chrome/browser/window_clipping_info.cc
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright (c) 2006-2008 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/window_clipping_info.h"
-
-#define DEBUG_WINDOW_CLIPPING_INFO 0
-
-WindowClippingInfo::WindowClippingInfo(HWND aWindow,
- HWND ignore_wnd) : hwnd_(aWindow),
- ignore_(ignore_wnd),
- rgn_(NULL) {
- ::GetWindowRect(hwnd_, &hwnd_rect_);
- ComputeScreenClipping();
- ComputeWindowsClipping();
- if (rgn_) {
- ::OffsetRgn(rgn_, -hwnd_rect_.left, -hwnd_rect_.top);
-#if DEBUG_WINDOW_CLIPPING_INFO
- RECT r;
- ::GetRgnBox(rgn_, &r);
- LOG(INFO) << "Window clip rect is (" << r.left << ", " << r.top << ", "
- << r.right << ", " << r.bottom << ")";
-#endif
- }
-}
-
-WindowClippingInfo::~WindowClippingInfo() {
- if (rgn_) {
- DeleteObject(rgn_);
- }
-}
-
-HRGN WindowClippingInfo::GetClippedRegion() const {
- return rgn_;
-}
-
-BOOL WindowClippingInfo::IsClipped() const {
- if (rgn_ == NULL) {
- return FALSE;
- } else {
- CRect r;
- ::GetRgnBox(rgn_, &r);
- if (r.Width() > 0 && r.Height() > 0) {
- return TRUE;
- } else {
- return FALSE;
- }
- }
-}
-
-HRGN WindowClippingInfo::CombineRegions(HRGN existing, HRGN additional) const {
- if (existing == NULL) {
- return additional;
- } else {
- HRGN new_dest = CreateRectRgn(0, 0, 0, 0);
- ::CombineRgn(new_dest, existing, additional, RGN_OR);
- DeleteObject(existing);
- DeleteObject(additional);
- return new_dest;
- }
-}
-
-void WindowClippingInfo::ComputeScreenClipping() {
- int screen_width = GetSystemMetrics(SM_CXVIRTUALSCREEN);
- int screen_height = GetSystemMetrics(SM_CYVIRTUALSCREEN);
- CRect c;
-
- if (hwnd_rect_.left < 0) {
- c.left = 0;
- c.right = -hwnd_rect_.left;
- c.top = 0;
- c.bottom = hwnd_rect_.Height();
- rgn_ = CombineRegions(rgn_,
- CreateRectRgn(c.left, c.top, c.right, c.bottom));
- }
-
- if (hwnd_rect_.top < 0) {
- c.left = 0;
- c.right = hwnd_rect_.Width();
- c.top = 0;
- c.bottom = -hwnd_rect_.top;
- rgn_ = CombineRegions(rgn_,
- CreateRectRgn(c.left, c.top, c.right, c.bottom));
- }
-
- if (hwnd_rect_.right > screen_width) {
- c.left = screen_width - hwnd_rect_.left;
- c.right = hwnd_rect_.right - screen_width + c.left;
- c.top = 0;
- c.bottom = hwnd_rect_.Height();
- rgn_ = CombineRegions(rgn_,
- CreateRectRgn(c.left, c.top, c.right, c.bottom));
- }
-
- if (hwnd_rect_.bottom > screen_height) {
- c.left = 0;
- c.right = hwnd_rect_.Width();
- c.top = screen_height - hwnd_rect_.top;
- c.bottom = hwnd_rect_.bottom - screen_height + c.top;
- rgn_ = CombineRegions(rgn_,
- CreateRectRgn(c.left, c.top, c.right, c.bottom));
- }
-
- if (rgn_) {
- // Convert the region in screen coordinate system to be compatible with
- // the the windows clipping regions
- ::OffsetRgn(rgn_, hwnd_rect_.left, hwnd_rect_.top);
-#if DEBUG_WINDOW_CLIPPING_INFO
- RECT cr;
- ::GetRgnBox(rgn_, &cr);
- LOG(INFO) << "Screen Clip is (" << cr.left << ", " << cr.top << ", " <<
- cr.right << ", " << cr.bottom << ")";
-#endif
- } else {
-#if DEBUG_WINDOW_CLIPPING_INFO
- LOG(INFO) << "Screen Clip is null";
-#endif
- }
-}
-
-
-// WindowEnumProc is called for every top level windows until we
-// return FALSE or all top level windows have been enumerated.
-//
-// Windows are ordered per Z-Order with higher level windows first and
-// lower level windows last.
-//
-//static
-BOOL CALLBACK WindowClippingInfo::WindowEnumProc(HWND hwnd, LPARAM lParam) {
- WindowClippingInfo* wci =
- reinterpret_cast<WindowClippingInfo*>(lParam);
-
- if (hwnd == wci->ignore_) {
- return TRUE;
- }
-
- if (hwnd == wci->hwnd_) {
- // We have enumerated all the windows above us so we are done
- return FALSE;
- }
-
- if (::IsWindowVisible(hwnd)) {
- RECT r;
- ::GetWindowRect(hwnd, &r);
- RECT intersection;
- if (::IntersectRect(&intersection, &r, &wci->hwnd_rect_)) {
- HRGN rgn = CreateRectRgn(intersection.left,
- intersection.top,
- intersection.right,
- intersection.bottom);
- if (wci->rgn_ == NULL) {
- wci->rgn_ = rgn;
- } else {
- ::CombineRgn(wci->rgn_, wci->rgn_, rgn, RGN_OR);
- ::DeleteObject(rgn);
- }
- }
- }
- return TRUE;
-}
-
-void WindowClippingInfo::ComputeWindowsClipping() {
- ::EnumWindows(WindowEnumProc, reinterpret_cast<LPARAM>(this));
-}
-