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