1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ui/compositor/test/test_compositor_host.h" 6 7 #include "base/basictypes.h" 8 #include "base/bind.h" 9 #include "base/compiler_specific.h" 10 #include "base/logging.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/weak_ptr.h" 13 #include "base/message_loop/message_loop.h" 14 #include "ui/compositor/compositor.h" 15 #include "ui/gfx/rect.h" 16 17 namespace ui { 18 19 class TestCompositorHostOzone : public TestCompositorHost { 20 public: 21 TestCompositorHostOzone(const gfx::Rect& bounds, 22 ui::ContextFactory* context_factory); 23 virtual ~TestCompositorHostOzone(); 24 25 private: 26 // Overridden from TestCompositorHost: 27 virtual void Show() OVERRIDE; 28 virtual ui::Compositor* GetCompositor() OVERRIDE; 29 30 void Draw(); 31 32 gfx::Rect bounds_; 33 34 ui::ContextFactory* context_factory_; 35 36 scoped_ptr<ui::Compositor> compositor_; 37 38 DISALLOW_COPY_AND_ASSIGN(TestCompositorHostOzone); 39 }; 40 41 TestCompositorHostOzone::TestCompositorHostOzone( 42 const gfx::Rect& bounds, 43 ui::ContextFactory* context_factory) 44 : bounds_(bounds), 45 context_factory_(context_factory) {} 46 47 TestCompositorHostOzone::~TestCompositorHostOzone() {} 48 49 void TestCompositorHostOzone::Show() { 50 // Ozone should rightly have a backing native framebuffer 51 // An in-memory array draw into by OSMesa is a reasonble 52 // fascimile of a dumb framebuffer at present. 53 // GLSurface will allocate the array so long as it is provided 54 // with a non-0 widget. 55 // TODO(rjkroege): Use a "real" ozone widget when it is 56 // available: http://crbug.com/255128 57 compositor_.reset(new ui::Compositor(1, context_factory_)); 58 compositor_->SetScaleAndSize(1.0f, bounds_.size()); 59 } 60 61 ui::Compositor* TestCompositorHostOzone::GetCompositor() { 62 return compositor_.get(); 63 } 64 65 void TestCompositorHostOzone::Draw() { 66 if (compositor_.get()) 67 compositor_->Draw(); 68 } 69 70 // static 71 TestCompositorHost* TestCompositorHost::Create( 72 const gfx::Rect& bounds, 73 ui::ContextFactory* context_factory) { 74 return new TestCompositorHostOzone(bounds, context_factory); 75 } 76 77 } // namespace ui 78