Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(419)

Side by Side Diff: wm/host/foreign_test_window_host_linux.cc

Issue 11485006: Add window manager component. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase and add proper use_wm flag support Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 "wm/host/foreign_test_window_host_linux.h"
6
7 #include "base/run_loop.h"
8 #include "ui/aura/env.h"
9
10 namespace wm {
11
12 ForeignTestWindowHostLinux::ForeignTestWindowHostLinux(
13 gfx::AcceleratedWidget parent) : display_(NULL),
danakj 2013/02/21 01:33:15 is this : on the same line thing legit style? neve
reveman 2013/02/22 01:26:44 I like this when possible as it creates a nice sep
14 parent_(parent),
15 window_(0),
16 font_info_(NULL),
17 gc_(0) {
18 }
19
20 ForeignTestWindowHostLinux::~ForeignTestWindowHostLinux() {
21 }
22
23 void ForeignTestWindowHostLinux::Initialize() {
24 DCHECK(parent_);
25 display_ = XOpenDisplay(NULL);
26 size_ = gfx::Size(300, 300);
27 window_ = XCreateSimpleWindow(
28 display_,
29 parent_,
30 30, 30, size_.width(), size_.height(), 0,
31 BlackPixel(display_, DefaultScreen(display_)),
32 WhitePixel(display_, DefaultScreen(display_)));
33 XSelectInput(display_, window_, ExposureMask | StructureNotifyMask);
34 font_info_ = XLoadQueryFont(display_, "9x15");
35 DCHECK(font_info_);
36 gc_ = XCreateGC(display_, window_, 0, NULL);
37 XSetFont(display_, gc_, font_info_->fid);
38 XSetForeground(display_, gc_, BlackPixel(display_, DefaultScreen(display_)));
39
40 MessageLoopForIO::current()->WatchFileDescriptor(
41 ConnectionNumber(display_), true, MessageLoopForIO::WATCH_READ,
42 &connection_watcher_, this);
43
44 PumpXEvents();
45 }
46
47 void ForeignTestWindowHostLinux::Delete() {
48 connection_watcher_.StopWatchingFileDescriptor();
49 XFreeGC(display_, gc_);
50 XFreeFont(display_, font_info_);
51 XCloseDisplay(display_);
52 delete this;
53 }
54
55 void ForeignTestWindowHostLinux::Show() {
56 DCHECK(window_);
57 XMapWindow(display_, window_);
58 }
59
60 void ForeignTestWindowHostLinux::Hide() {
61 DCHECK(window_);
62 XUnmapWindow(display_, window_);
63 }
64
65 void ForeignTestWindowHostLinux::Destroy() {
66 XDestroyWindow(display_, window_);
67 window_ = 0;
68 }
69
70 void ForeignTestWindowHostLinux::Sync() {
71 XSync(display_, False);
72 }
73
74 void ForeignTestWindowHostLinux::ProcessXEvent(XEvent *event) {
75 switch (event->type) {
76 case Expose: {
77 if (event->xexpose.count != 0)
78 break;
79
80 std::string message("Hello, X Window System!");
81
82 // Center text.
83 int width = XTextWidth(font_info_, message.c_str(), message.length());
84 int msg_x = (size_.width() - width) / 2;
85
86 int font_height = font_info_->ascent + font_info_->descent;
87 int msg_y = (size_.height() + font_height) / 2;
88
89 XDrawString(display_,
90 window_,
91 gc_,
92 msg_x, msg_y,
93 message.c_str(), message.length());
94 } break;
95 case ConfigureNotify: {
96 size_ = gfx::Size(event->xconfigure.width, event->xconfigure.height);
97 } break;
98 }
99 }
100
101 void ForeignTestWindowHostLinux::PumpXEvents() {
102 while (XPending(display_)) {
103 XEvent event;
104 XNextEvent(display_, &event);
105 ProcessXEvent(&event);
106 }
107 }
108
109 void ForeignTestWindowHostLinux::OnFileCanReadWithoutBlocking(int fd) {
110 PumpXEvents();
111 }
112
113 void ForeignTestWindowHostLinux::OnFileCanWriteWithoutBlocking(int fd) {
114 }
115
116 // static
117 ForeignTestWindowHost* ForeignTestWindowHost::Create(
118 gfx::AcceleratedWidget parent) {
danakj 2013/02/21 01:33:15 Why is an X window sometimes AcceleratedWidget and
reveman 2013/02/22 01:26:44 RootWindowHost uses AcceleratedWidget and BrowserG
danakj 2013/02/22 01:48:08 Oh argh. Do you think BGCHF could use AcceleratedW
reveman 2013/02/22 06:53:01 I tried that initially when adding CHROMIUM_textur
danakj 2013/02/22 21:42:59 I think I would prefer that. Keeping the Accelerat
119 return new ForeignTestWindowHostLinux(parent);
120 }
121
122 // static
123 void ForeignTestWindowHost::RunAllPendingInMessageLoop() {
124 Display* display = base::MessagePumpAuraX11::GetDefaultXDisplay();
125 XSync(display, False);
126 base::RunLoop run_loop(aura::Env::GetInstance()->GetDispatcher());
127 run_loop.RunUntilIdle();
128 }
129
130 } // namespace wm
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698