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.
5 #include "ui/compositor/test/test_compositor_host.h"
9 #include "base/basictypes.h"
10 #include "base/bind.h"
11 #include "base/compiler_specific.h"
12 #include "base/logging.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/weak_ptr.h"
15 #include "base/thread_task_runner_handle.h"
16 #include "ui/compositor/compositor.h"
17 #include "ui/gfx/geometry/rect.h"
18 #include "ui/gfx/x/x11_types.h"
22 class TestCompositorHostX11
: public TestCompositorHost
{
24 TestCompositorHostX11(const gfx::Rect
& bounds
,
25 ui::ContextFactory
* context_factory
);
26 ~TestCompositorHostX11() override
;
29 // Overridden from TestCompositorHost:
31 ui::Compositor
* GetCompositor() override
;
37 ui::ContextFactory
* context_factory_
;
39 scoped_ptr
<ui::Compositor
> compositor_
;
43 DISALLOW_COPY_AND_ASSIGN(TestCompositorHostX11
);
46 TestCompositorHostX11::TestCompositorHostX11(
47 const gfx::Rect
& bounds
,
48 ui::ContextFactory
* context_factory
)
50 context_factory_(context_factory
) {
53 TestCompositorHostX11::~TestCompositorHostX11() {
56 void TestCompositorHostX11::Show() {
57 XDisplay
* display
= gfx::GetXDisplay();
58 XSetWindowAttributes swa
;
59 swa
.event_mask
= StructureNotifyMask
| ExposureMask
;
60 swa
.override_redirect
= True
;
61 window_
= XCreateWindow(
63 RootWindow(display
, DefaultScreen(display
)), // parent
64 bounds_
.x(), bounds_
.y(), bounds_
.width(), bounds_
.height(),
66 CopyFromParent
, // depth
68 CopyFromParent
, // visual
69 CWEventMask
| CWOverrideRedirect
, &swa
);
70 XMapWindow(display
, window_
);
74 XNextEvent(display
, &event
);
75 if (event
.type
== MapNotify
&& event
.xmap
.window
== window_
)
78 compositor_
.reset(new ui::Compositor(window_
,
80 base::ThreadTaskRunnerHandle::Get()));
81 compositor_
->SetScaleAndSize(1.0f
, bounds_
.size());
84 ui::Compositor
* TestCompositorHostX11::GetCompositor() {
85 return compositor_
.get();
88 void TestCompositorHostX11::Draw() {
89 if (compositor_
.get())
94 TestCompositorHost
* TestCompositorHost::Create(
95 const gfx::Rect
& bounds
,
96 ui::ContextFactory
* context_factory
) {
97 return new TestCompositorHostX11(bounds
, context_factory
);