Index: ui/wayland/wayland_screen.cc |
diff --git a/ui/wayland/wayland_screen.cc b/ui/wayland/wayland_screen.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..73a181be11d5ce7b58fc9301ad0c08b1d93beebd |
--- /dev/null |
+++ b/ui/wayland/wayland_screen.cc |
@@ -0,0 +1,78 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ui/wayland/wayland_screen.h" |
+ |
+#include <wayland-client.h> |
+ |
+#include "ui/wayland/wayland_display.h" |
+ |
+namespace ui { |
+ |
+WaylandScreen::WaylandScreen(WaylandDisplay* display, uint32_t id) |
+ : output_(NULL), |
+ display_(display) { |
+ static const wl_output_listener kOutputListener = { |
+ WaylandScreen::OutputHandleGeometry, |
+ WaylandScreen::OutputHandleMode, |
+ }; |
+ |
+ output_ = wl_output_create(display_->display(), id, 1); |
+ wl_output_add_listener(output_, &kOutputListener, this); |
+} |
+ |
+WaylandScreen::~WaylandScreen() { |
+ if (output_) |
+ wl_output_destroy(output_); |
+} |
+ |
+gfx::Rect WaylandScreen::GetAllocation() const { |
+ gfx::Rect allocation; |
+ allocation.set_origin(position_); |
+ |
+ // Find the active mode and pass its dimensions. |
+ for (Modes::const_iterator i = modes_.begin(); i != modes_.end(); ++i) { |
+ if ((*i).flags & WL_OUTPUT_MODE_CURRENT) { |
+ allocation.set_width((*i).width); |
+ allocation.set_height((*i).height); |
+ break; |
+ } |
+ } |
+ |
+ return allocation; |
+} |
+ |
+// static |
+void WaylandScreen::OutputHandleGeometry(void* data, |
+ wl_output* output, |
+ int32_t x, |
+ int32_t y, |
+ int32_t physical_width, |
+ int32_t physical_height, |
+ int32_t subpixel, |
+ const char* make, |
+ const char* model) { |
+ WaylandScreen* screen = static_cast<WaylandScreen*>(data); |
+ screen->position_.SetPoint(x, y); |
+} |
+ |
+// static |
+void WaylandScreen::OutputHandleMode(void* data, |
+ wl_output* wl_output, |
+ uint32_t flags, |
+ int32_t width, |
+ int32_t height, |
+ int32_t refresh) { |
+ WaylandScreen* screen = static_cast<WaylandScreen*>(data); |
+ |
+ Mode mode; |
+ mode.width = width; |
+ mode.height = height; |
+ mode.refresh = refresh; |
+ mode.flags = flags; |
+ |
+ screen->modes_.push_back(mode); |
+} |
+ |
+} // namespace ui |