1 // Copyright 2013 Intel Corporation. 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 "ozone/wayland/surface.h"
7 #include "ozone/wayland/display.h"
9 namespace ozonewayland {
10 static const struct wl_callback_listener frameListener = {
11 WaylandSurface::SurfaceFrameCallback
14 WaylandSurface::WaylandSurface() : surface_(NULL),
17 WaylandDisplay* display = WaylandDisplay::GetInstance();
18 surface_ = wl_compositor_create_surface(display->GetCompositor());
23 m_queue = wl_display_create_queue(display->display());
24 wl_proxy_set_queue((struct wl_proxy *)display->registry(), m_queue);
27 WaylandSurface::~WaylandSurface() {
28 DeleteFrameCallBack();
31 wl_surface_destroy(surface_);
36 void WaylandSurface::AddFrameCallBack() {
40 frameCallBack_ = wl_surface_frame(surface_);
41 wl_callback_add_listener(frameCallBack_, &frameListener, this);
42 wl_proxy_set_queue((struct wl_proxy *)frameCallBack_, m_queue);
45 void WaylandSurface::DeleteFrameCallBack() {
47 wl_callback_destroy(frameCallBack_);
52 int WaylandSurface::EnsureFrameCallBackDone() {
57 wl_display* display = WaylandDisplay::GetInstance()->display();
60 while (frameCallBack_ && ret != -1)
61 ret = wl_display_dispatch_queue(display, m_queue);
63 wl_display_dispatch_pending(display);
69 void WaylandSurface::SurfaceFrameCallback(void* data,
70 struct wl_callback* callback,
72 WaylandSurface* surface = static_cast<WaylandSurface *>(data);
73 wl_callback_destroy(callback);
74 surface->DestroyFrameCallBack();
77 void WaylandSurface::DestroyFrameCallBack() {
78 frameCallBack_ = NULL;
81 } // namespace ozonewayland