Index: chrome/gpu/gpu_view_win.cc |
=================================================================== |
--- chrome/gpu/gpu_view_win.cc (revision 65168) |
+++ chrome/gpu/gpu_view_win.cc (working copy) |
@@ -1,132 +0,0 @@ |
-// Copyright (c) 2010 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/gpu/gpu_view_win.h" |
- |
-#include "chrome/common/gpu_messages.h" |
-#include "chrome/gpu/gpu_backing_store_win.h" |
-#include "chrome/gpu/gpu_thread.h" |
-#include "gfx/rect.h" |
- |
-namespace { |
- |
-void DrawBackground(const RECT& dirty_rect, CPaintDC* dc) { |
- HBRUSH white_brush = reinterpret_cast<HBRUSH>(GetStockObject(WHITE_BRUSH)); |
- dc->FillRect(&dirty_rect, white_brush); |
-} |
- |
-void DrawResizeCorner(const RECT& dirty_rect, HDC dc) { |
- // TODO(brettw): implement this. |
-} |
- |
-} // namespace |
- |
-GpuViewWin::GpuViewWin(GpuThread* gpu_thread, |
- HWND parent, |
- int32 routing_id) |
- : gpu_thread_(gpu_thread), |
- routing_id_(routing_id), |
- parent_(parent) { |
- gpu_thread_->AddRoute(routing_id_, this); |
- Create(parent_); |
- SetWindowText(L"GPU window"); |
- ShowWindow(SW_SHOW); |
-} |
- |
-GpuViewWin::~GpuViewWin() { |
- gpu_thread_->RemoveRoute(routing_id_); |
- // TODO(brettw) may want to delete any dangling backing stores, or perhaps |
- // assert if one still exists. |
-} |
- |
-void GpuViewWin::OnMessageReceived(const IPC::Message& msg) { |
- IPC_BEGIN_MESSAGE_MAP(GpuViewWin, msg) |
- IPC_MESSAGE_HANDLER(GpuMsg_NewBackingStore, OnNewBackingStore) |
- IPC_END_MESSAGE_MAP_EX() |
-} |
- |
-void GpuViewWin::OnChannelConnected(int32 peer_pid) { |
-} |
- |
-void GpuViewWin::OnChannelError() { |
- // TODO(brettw) do we need to delete ourselves now? |
-} |
- |
-void GpuViewWin::DidScrollBackingStoreRect(int dx, int dy, |
- const gfx::Rect& rect) { |
- // We need to pass in SW_INVALIDATE to ScrollWindowEx. The documentation on |
- // MSDN states that it only applies to the HRGN argument, which is wrong. |
- // Not passing in this flag does not invalidate the region which was scrolled |
- // from, thus causing painting issues. |
- RECT clip_rect = rect.ToRECT(); |
- ScrollWindowEx(dx, dy, NULL, &clip_rect, NULL, NULL, SW_INVALIDATE); |
-} |
- |
-void GpuViewWin::OnNewBackingStore(int32 routing_id, const gfx::Size& size) { |
- backing_store_.reset( |
- new GpuBackingStoreWin(this, gpu_thread_, routing_id, size)); |
- MoveWindow(0, 0, size.width(), size.height(), TRUE); |
-} |
- |
-void GpuViewWin::OnPaint(HDC unused_dc) { |
- // Grab the region to paint before creation of paint_dc since it clears the |
- // damage region. |
- ScopedGDIObject<HRGN> damage_region(CreateRectRgn(0, 0, 0, 0)); |
- GetUpdateRgn(damage_region, FALSE); |
- |
- CPaintDC paint_dc(m_hWnd); |
- |
- gfx::Rect damaged_rect(paint_dc.m_ps.rcPaint); |
- if (damaged_rect.IsEmpty()) |
- return; |
- |
- if (backing_store_.get()) { |
- gfx::Rect bitmap_rect(gfx::Point(), backing_store_->size()); |
- |
- // Blit only the damaged regions from the backing store. |
- DWORD data_size = GetRegionData(damage_region, 0, NULL); |
- // TODO(brettw) why is the "+1" necessary here? When I remove it, the |
- // page paints black, but according to the documentation, its not needed. |
- scoped_array<char> region_data_buf(new char[data_size + 1]); |
- RGNDATA* region_data = reinterpret_cast<RGNDATA*>(region_data_buf.get()); |
- GetRegionData(damage_region, data_size, region_data); |
- |
- RECT* region_rects = reinterpret_cast<RECT*>(region_data->Buffer); |
- for (DWORD i = 0; i < region_data->rdh.nCount; ++i) { |
- gfx::Rect paint_rect = bitmap_rect.Intersect(gfx::Rect(region_rects[i])); |
- if (!paint_rect.IsEmpty()) { |
- DrawResizeCorner(paint_rect.ToRECT(), backing_store_->hdc()); |
- BitBlt(paint_dc.m_hDC, |
- paint_rect.x(), |
- paint_rect.y(), |
- paint_rect.width(), |
- paint_rect.height(), |
- backing_store_->hdc(), |
- paint_rect.x(), |
- paint_rect.y(), |
- SRCCOPY); |
- } |
- } |
- |
- // Fill the remaining portion of the damaged_rect with the background |
- if (damaged_rect.right() > bitmap_rect.right()) { |
- RECT r; |
- r.left = std::max(bitmap_rect.right(), damaged_rect.x()); |
- r.right = damaged_rect.right(); |
- r.top = damaged_rect.y(); |
- r.bottom = std::min(bitmap_rect.bottom(), damaged_rect.bottom()); |
- DrawBackground(r, &paint_dc); |
- } |
- if (damaged_rect.bottom() > bitmap_rect.bottom()) { |
- RECT r; |
- r.left = damaged_rect.x(); |
- r.right = damaged_rect.right(); |
- r.top = std::max(bitmap_rect.bottom(), damaged_rect.y()); |
- r.bottom = damaged_rect.bottom(); |
- DrawBackground(r, &paint_dc); |
- } |
- } else { |
- DrawBackground(paint_dc.m_ps.rcPaint, &paint_dc); |
- } |
-} |