Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / ui / compositor / test / test_compositor_host_x11.cc
blob1357e3ddca4d8b232dc435a204f3aec5bc62d80a
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"
7 #include <X11/Xlib.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"
20 namespace ui {
22 class TestCompositorHostX11 : public TestCompositorHost {
23 public:
24 TestCompositorHostX11(const gfx::Rect& bounds,
25 ui::ContextFactory* context_factory);
26 ~TestCompositorHostX11() override;
28 private:
29 // Overridden from TestCompositorHost:
30 void Show() override;
31 ui::Compositor* GetCompositor() override;
33 gfx::Rect bounds_;
35 ui::ContextFactory* context_factory_;
37 ui::Compositor compositor_;
39 XID window_;
41 DISALLOW_COPY_AND_ASSIGN(TestCompositorHostX11);
44 TestCompositorHostX11::TestCompositorHostX11(
45 const gfx::Rect& bounds,
46 ui::ContextFactory* context_factory)
47 : bounds_(bounds),
48 context_factory_(context_factory),
49 compositor_(context_factory_, base::ThreadTaskRunnerHandle::Get()) {}
51 TestCompositorHostX11::~TestCompositorHostX11() {
54 void TestCompositorHostX11::Show() {
55 XDisplay* display = gfx::GetXDisplay();
56 XSetWindowAttributes swa;
57 swa.event_mask = StructureNotifyMask | ExposureMask;
58 swa.override_redirect = True;
59 window_ = XCreateWindow(
60 display,
61 RootWindow(display, DefaultScreen(display)), // parent
62 bounds_.x(), bounds_.y(), bounds_.width(), bounds_.height(),
63 0, // border width
64 CopyFromParent, // depth
65 InputOutput,
66 CopyFromParent, // visual
67 CWEventMask | CWOverrideRedirect, &swa);
68 XMapWindow(display, window_);
70 while (1) {
71 XEvent event;
72 XNextEvent(display, &event);
73 if (event.type == MapNotify && event.xmap.window == window_)
74 break;
76 compositor_.SetAcceleratedWidgetAndStartCompositor(window_);
77 compositor_.SetScaleAndSize(1.0f, bounds_.size());
80 ui::Compositor* TestCompositorHostX11::GetCompositor() {
81 return &compositor_;
84 // static
85 TestCompositorHost* TestCompositorHost::Create(
86 const gfx::Rect& bounds,
87 ui::ContextFactory* context_factory) {
88 return new TestCompositorHostX11(bounds, context_factory);
91 } // namespace ui