Index: remoting/client/x11_view.cc |
=================================================================== |
--- remoting/client/x11_view.cc (revision 52921) |
+++ remoting/client/x11_view.cc (working copy) |
@@ -14,6 +14,14 @@ |
namespace remoting { |
+X11View::X11View() |
+ : display_(NULL), |
+ window_(0), |
+ width_(0), |
+ height_(0), |
+ picture_(0) { |
+} |
+ |
X11View::X11View(Display* display, XID window, int width, int height) |
: display_(display), |
window_(window), |
@@ -26,9 +34,49 @@ |
} |
X11View::~X11View() { |
+ DCHECK(!display_); |
+ DCHECK(!window_); |
} |
+bool X11View::Initialize() { |
+ display_ = XOpenDisplay(NULL); |
+ if (!display_) { |
+ return false; |
+ } |
+ |
+ // Get properties of the screen. |
+ int screen = DefaultScreen(display_); |
+ int root_window = RootWindow(display_, screen); |
+ |
+ // Creates the window. |
+ window_ = XCreateSimpleWindow(display_, root_window, 1, 1, 640, 480, 0, |
+ BlackPixel(display_, screen), |
+ BlackPixel(display_, screen)); |
+ DCHECK(window_); |
+ XStoreName(display_, window_, "X11 Remoting"); |
+ |
+ // Specifies what kind of messages we want to receive. |
+ XSelectInput(display_, window_, ExposureMask | ButtonPressMask); |
+ XMapWindow(display_, window_); |
+ return true; |
+} |
+ |
+void X11View::TearDown() { |
+ if (display_ && window_) { |
+ // Shutdown the window system. |
+ XDestroyWindow(display_, window_); |
+ XCloseDisplay(display_); |
+ } |
+ display_ = NULL; |
+ window_ = 0; |
+} |
+ |
void X11View::Paint() { |
+ // Don't bother attempting to paint if the display hasn't been set up. |
+ if (!display_ || !window_ || !height_ || !width_) { |
+ return; |
+ } |
+ |
// TODO(hclam): Paint only the updated regions. |
all_update_rects_.clear(); |
@@ -80,23 +128,24 @@ |
} |
void X11View::SetSolidFill(uint32 color) { |
- // TODO(ajwong): Implement. |
- NOTIMPLEMENTED(); |
+ // TODO(garykac): Implement. |
+ // NOTIMPLEMENTED(); |
} |
void X11View::UnsetSolidFill() { |
- // TODO(ajwong): Implement. |
- NOTIMPLEMENTED(); |
+ // TODO(garykac): Implement. |
+ // NOTIMPLEMENTED(); |
} |
void X11View::SetViewport(int x, int y, int width, int height) { |
- // TODO(ajwong): Implement. |
- NOTIMPLEMENTED(); |
+ // TODO(garykac): Implement. |
+ // NOTIMPLEMENTED(); |
} |
-void X11View::SetBackingStoreSize(int width, int height) { |
- // TODO(ajwong): Implement. |
- NOTIMPLEMENTED(); |
+void X11View::SetHostScreenSize(int width, int height) { |
+ width_ = width; |
+ height_ = height; |
+ XResizeWindow(display_, window_, width_, height_); |
} |
void X11View::InitPaintTarget() { |