Home | History | Annotate | Download | only in test
      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