15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/compositor/test/test_compositor_host.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/win/window_impl.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/compositor/compositor.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestCompositorHostWin : public TestCompositorHost, 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public WindowImpl, 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public CompositorDelegate { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestCompositorHostWin(const gfx::Rect& bounds) { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Init(NULL, bounds); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) compositor_.reset(new ui::Compositor(this, hwnd())); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) compositor_->SetScaleAndSize(1.0f, GetSize()); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestCompositorHostWin() { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DestroyWindow(hwnd()); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from TestCompositorHost: 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Show() OVERRIDE { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowWindow(hwnd(), SW_SHOWNORMAL); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ui::Compositor* GetCompositor() OVERRIDE { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return compositor_.get(); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from CompositorDelegate: 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ScheduleDraw() OVERRIDE { 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!ui::Compositor::WasInitializedWithThread()); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RECT rect; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ::GetClientRect(hwnd(), &rect); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvalidateRect(hwnd(), &rect, FALSE); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BEGIN_MSG_MAP_EX(TestCompositorHostWin) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MSG_WM_PAINT(OnPaint) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) END_MSG_MAP() 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnPaint(HDC dc) { 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) compositor_->Draw(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValidateRect(hwnd(), NULL); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size GetSize() { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RECT r; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetClientRect(hwnd(), &r); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gfx::Rect(r).size(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ui::Compositor> compositor_; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestCompositorHostWin); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestCompositorHost* TestCompositorHost::Create(const gfx::Rect& bounds) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new TestCompositorHostWin(bounds); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ui 70