/*
- * Copyright (C) 2017 Mentor Graphics Development (Deutschland) GmbH
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include "wayland.hpp"
#include "hmi-debug.h"
-// _
-// _ __ __ _ _ __ ___ ___ ___ _ __ __ _ ___ ___ __ _| |
-// | '_ \ / _` | '_ ` _ \ / _ \/ __| '_ \ / _` |/ __/ _ \ \ \ /\ / / |
-// | | | | (_| | | | | | | __/\__ \ |_) | (_| | (_| __/ \ V V /| |
-// |_| |_|\__,_|_| |_| |_|\___||___/ .__/ \__,_|\___\___| \_/\_/ |_|
-// |_|
+/**
+ * namespace wl
+ */
namespace wl {
-// _ _ _
-// __| (_)___ _ __ | | __ _ _ _
-// / _` | / __| '_ \| |/ _` | | | |
-// | (_| | \__ \ |_) | | (_| | |_| |
-// \__,_|_|___/ .__/|_|\__,_|\__, |
-// |_| |___/
+/**
+ * display
+ */
display::display()
: d(std::unique_ptr<struct wl_display, void (*)(struct wl_display *)>(
wl_display_connect(nullptr), &wl_display_disconnect)),
int display::read_events() {
ST();
- // XXX: uhm, how?!
while (wl_display_prepare_read(this->d.get()) == -1) {
STN(pending_events_dispatch);
if (wl_display_dispatch_pending(this->d.get()) == -1) {
int display::get_error() { return wl_display_get_error(this->d.get()); }
-// _ _
-// _ __ ___ __ _(_)___| |_ _ __ _ _
-// | '__/ _ \/ _` | / __| __| '__| | | |
-// | | | __/ (_| | \__ \ |_| | | |_| |
-// |_| \___|\__, |_|___/\__|_| \__, |
-// |___/ |___/
+/**
+ * registry
+ */
namespace {
void registry_global(void *data, struct wl_registry * /*r*/, uint32_t name,
char const *iface, uint32_t v) {
void registry::global_remove(uint32_t /*name*/) {}
-// _ _
-// ___ _ _| |_ _ __ _ _| |_
-// / _ \| | | | __| '_ \| | | | __|
-// | (_) | |_| | |_| |_) | |_| | |_
-// \___/ \__,_|\__| .__/ \__,_|\__|
-// |_|
+/**
+ * output
+ */
namespace {
void output_geometry(void *data, struct wl_output * /*wl_output*/, int32_t x,
int32_t y, int32_t physical_width, int32_t physical_height,
void output::done() {
HMI_DEBUG("wm", "wl::output %s @ %p done", __func__, this->proxy.get());
- // Let's just disregard the flipped ones...
+ // Pivot and flipped
if (this->transform == WL_OUTPUT_TRANSFORM_90 ||
- this->transform == WL_OUTPUT_TRANSFORM_270) {
+ this->transform == WL_OUTPUT_TRANSFORM_270 ||
+ this->transform == WL_OUTPUT_TRANSFORM_FLIPPED_90 ||
+ this->transform == WL_OUTPUT_TRANSFORM_FLIPPED_270) {
std::swap(this->width, this->height);
}
}
}
} // namespace wl
-// _ __ __ _ _ __ ___ ___ ___ _ __ __ _ ___ ___
-// | '_ \ / _` | '_ ` _ \ / _ \/ __| '_ \ / _` |/ __/ _ \
-// | | | | (_| | | | | | | __/\__ \ |_) | (_| | (_| __/
-// |_| |_|\__,_|_| |_| |_|\___||___/ .__/ \__,_|\___\___|
-// |_|
-// _ _
-// __ _ ___ _ __ (_)_ _(_)
-// / _` |/ _ \ '_ \| \ \ / / |
-// | (_| | __/ | | | |\ V /| |
-// \__, |\___|_| |_|_| \_/ |_|
-// |___/
-namespace genivi {
-
-// _ _ _
-// ___ ___ _ __ | |_ _ __ ___ | | | ___ _ __
-// / __/ _ \| '_ \| __| '__/ _ \| | |/ _ \ '__|
-// | (_| (_) | | | | |_| | | (_) | | | __/ |
-// \___\___/|_| |_|\__|_| \___/|_|_|\___|_|
-//
+/**
+ * namespace compositor
+ */
+namespace compositor {
+
+/**
+ * controller
+ */
namespace {
void controller_screen(void *data, struct ivi_controller * /*ivi_controller*/,
uint32_t id_screen,
constexpr struct ivi_controller_listener listener = {
controller_screen, controller_layer, controller_surface, controller_error};
-} // namespace
+} // namespace compositor
controller::controller(struct wl_registry *r, uint32_t name, uint32_t version)
: wayland_proxy(
void controller::controller_screen(uint32_t id,
struct ivi_controller_screen *screen) {
- HMI_DEBUG("wm", "genivi::controller @ %p screen %u (%x) @ %p", this->proxy.get(),
+ HMI_DEBUG("wm", "compositor::controller @ %p screen %u (%x) @ %p", this->proxy.get(),
id, id, screen);
this->screens[id] = std::make_unique<struct screen>(id, this, screen);
}
void controller::controller_layer(uint32_t id) {
- HMI_DEBUG("wm", "genivi::controller @ %p layer %u (%x)", this->proxy.get(), id, id);
+ HMI_DEBUG("wm", "compositor::controller @ %p layer %u (%x)", this->proxy.get(), id, id);
if (this->layers.find(id) != this->layers.end()) {
- HMI_ERROR("wm", "Someone created a layer without asking US! (%d)", id);
+ HMI_DEBUG("wm", "WindowManager has created layer %u (%x) already", id, id);
} else {
auto &l = this->layers[id] = std::make_unique<struct layer>(id, this);
l->clear_surfaces();
}
void controller::controller_surface(uint32_t id) {
- HMI_DEBUG("wm", "genivi::controller @ %p surface %u (%x)", this->proxy.get(), id,
+ HMI_DEBUG("wm", "compositor::controller @ %p surface %u (%x)", this->proxy.get(), id,
id);
if (this->surfaces.find(id) == this->surfaces.end()) {
this->surfaces[id] = std::make_unique<struct surface>(id, this);
void controller::controller_error(int32_t object_id, int32_t object_type,
int32_t error_code, const char *error_text) {
- HMI_DEBUG("wm", "genivi::controller @ %p error o %i t %i c %i text %s",
+ HMI_DEBUG("wm", "compositor::controller @ %p error o %i t %i c %i text %s",
this->proxy.get(), object_id, object_type, error_code, error_text);
}
-// _
-// | | __ _ _ _ ___ _ __
-// | |/ _` | | | |/ _ \ '__|
-// | | (_| | |_| | __/ |
-// |_|\__,_|\__, |\___|_|
-// |___/
+/**
+ * layer
+ */
namespace {
void layer_visibility(void *data,
struct ivi_controller_layer * /*ivi_controller_layer*/,
}
void controller::layer_visibility(struct layer *l, int32_t visibility) {
- HMI_DEBUG("wm", "genivi::layer %s @ %d v %i", __func__, l->id, visibility);
+ HMI_DEBUG("wm", "compositor::layer %s @ %d v %i", __func__, l->id, visibility);
this->lprops[l->id].visibility = visibility;
}
void controller::layer_opacity(struct layer *l, float opacity) {
- HMI_DEBUG("wm", "genivi::layer %s @ %d o %f", __func__, l->id, opacity);
+ HMI_DEBUG("wm", "compositor::layer %s @ %d o %f", __func__, l->id, opacity);
this->lprops[l->id].opacity = opacity;
}
void controller::layer_source_rectangle(struct layer *l, int32_t x, int32_t y,
int32_t width, int32_t height) {
- HMI_DEBUG("wm", "genivi::layer %s @ %d x %i y %i w %i h %i", __func__,
+ HMI_DEBUG("wm", "compositor::layer %s @ %d x %i y %i w %i h %i", __func__,
l->id, x, y, width, height);
this->lprops[l->id].src_rect = rect{width, height, x, y};
}
void controller::layer_destination_rectangle(struct layer *l, int32_t x,
int32_t y, int32_t width,
int32_t height) {
- HMI_DEBUG("wm", "genivi::layer %s @ %d x %i y %i w %i h %i", __func__,
+ HMI_DEBUG("wm", "compositor::layer %s @ %d x %i y %i w %i h %i", __func__,
l->id, x, y, width, height);
this->lprops[l->id].dst_rect = rect{width, height, x, y};
}
void controller::layer_configuration(struct layer *l, int32_t width,
int32_t height) {
- HMI_DEBUG("wm", "genivi::layer %s @ %d w %i h %i", __func__, l->id,
+ HMI_DEBUG("wm", "compositor::layer %s @ %d w %i h %i", __func__, l->id,
width, height);
this->lprops[l->id].size = size{uint32_t(width), uint32_t(height)};
}
void controller::layer_orientation(struct layer *l, int32_t orientation) {
- HMI_DEBUG("wm", "genivi::layer %s @ %d o %i", __func__, l->id,
+ HMI_DEBUG("wm", "compositor::layer %s @ %d o %i", __func__, l->id,
orientation);
this->lprops[l->id].orientation = orientation;
}
void controller::layer_screen(struct layer *l, struct wl_output *screen) {
- HMI_DEBUG("wm", "genivi::layer %s @ %d s %p", __func__, l->id, screen);
+ HMI_DEBUG("wm", "compositor::layer %s @ %d s %p", __func__, l->id, screen);
}
void controller::layer_destroyed(struct layer *l) {
- HMI_DEBUG("wm", "genivi::layer %s @ %d", __func__, l->id);
+ HMI_DEBUG("wm", "compositor::layer %s @ %d", __func__, l->id);
this->lprops.erase(l->id);
this->layers.erase(l->id);
}
-// __
-// ___ _ _ _ __ / _| __ _ ___ ___
-// / __| | | | '__| |_ / _` |/ __/ _ \
-// \__ \ |_| | | | _| (_| | (_| __/
-// |___/\__,_|_| |_| \__,_|\___\___|
-//
+/**
+ * surface
+ */
namespace {
void surface_visibility(
}
void controller::surface_visibility(struct surface *s, int32_t visibility) {
- HMI_DEBUG("wm", "genivi::surface %s @ %d v %i", __func__, s->id,
+ HMI_DEBUG("wm", "compositor::surface %s @ %d v %i", __func__, s->id,
visibility);
this->sprops[s->id].visibility = visibility;
this->chooks->surface_visibility(s->id, visibility);
}
void controller::surface_opacity(struct surface *s, float opacity) {
- HMI_DEBUG("wm", "genivi::surface %s @ %d o %f", __func__, s->id,
+ HMI_DEBUG("wm", "compositor::surface %s @ %d o %f", __func__, s->id,
opacity);
this->sprops[s->id].opacity = opacity;
}
void controller::surface_source_rectangle(struct surface *s, int32_t x,
int32_t y, int32_t width,
int32_t height) {
- HMI_DEBUG("wm", "genivi::surface %s @ %d x %i y %i w %i h %i", __func__,
+ HMI_DEBUG("wm", "compositor::surface %s @ %d x %i y %i w %i h %i", __func__,
s->id, x, y, width, height);
this->sprops[s->id].src_rect = rect{width, height, x, y};
}
void controller::surface_destination_rectangle(struct surface *s, int32_t x,
int32_t y, int32_t width,
int32_t height) {
- HMI_DEBUG("wm", "genivi::surface %s @ %d x %i y %i w %i h %i", __func__,
+ HMI_DEBUG("wm", "compositor::surface %s @ %d x %i y %i w %i h %i", __func__,
s->id, x, y, width, height);
this->sprops[s->id].dst_rect = rect{width, height, x, y};
this->chooks->surface_destination_rectangle(s->id, x, y, width, height);
void controller::surface_configuration(struct surface *s, int32_t width,
int32_t height) {
- HMI_DEBUG("wm", "genivi::surface %s @ %d w %i h %i", __func__, s->id,
+ HMI_DEBUG("wm", "compositor::surface %s @ %d w %i h %i", __func__, s->id,
width, height);
this->sprops[s->id].size = size{uint32_t(width), uint32_t(height)};
is_configured = true;
}
void controller::surface_orientation(struct surface *s, int32_t orientation) {
- HMI_DEBUG("wm", "genivi::surface %s @ %d o %i", __func__, s->id,
+ HMI_DEBUG("wm", "compositor::surface %s @ %d o %i", __func__, s->id,
orientation);
this->sprops[s->id].orientation = orientation;
}
void controller::surface_pixelformat(struct surface * s,
int32_t pixelformat) {
- HMI_DEBUG("wm", "genivi::surface %s @ %d f %i", __func__, s->id,
+ HMI_DEBUG("wm", "compositor::surface %s @ %d f %i", __func__, s->id,
pixelformat);
}
void controller::surface_layer(struct surface * s,
struct ivi_controller_layer *layer) {
- HMI_DEBUG("wm", "genivi::surface %s @ %d l %u @ %p", __func__, s->id,
+ HMI_DEBUG("wm", "compositor::surface %s @ %d l %u @ %p", __func__, s->id,
this->layer_proxy_to_id[uintptr_t(layer)], layer);
}
void controller::surface_stats(struct surface *s, uint32_t redraw_count,
uint32_t frame_count, uint32_t update_count,
uint32_t pid, const char *process_name) {
- HMI_DEBUG("wm", "genivi::surface %s @ %d r %u f %u u %u pid %u p %s", __func__,
+ HMI_DEBUG("wm", "compositor::surface %s @ %d r %u f %u u %u pid %u p %s", __func__,
s->id, redraw_count, frame_count, update_count, pid,
process_name);
}
void controller::surface_destroyed(struct surface *s) {
- HMI_DEBUG("wm", "genivi::surface %s @ %d", __func__, s->id);
+ HMI_DEBUG("wm", "compositor::surface %s @ %d", __func__, s->id);
this->chooks->surface_removed(s->id);
- // XXX: do I need to actually remove the surface late, i.e. using add_task()?
this->sprops.erase(s->id);
this->surfaces.erase(s->id);
}
void controller::surface_content(struct surface *s, int32_t content_state) {
- HMI_DEBUG("wm", "genivi::surface %s @ %d s %i", __func__, s->id,
+ HMI_DEBUG("wm", "compositor::surface %s @ %d s %i", __func__, s->id,
content_state);
if (content_state == IVI_CONTROLLER_SURFACE_CONTENT_STATE_CONTENT_REMOVED) {
- // XXX is this the right thing to do?
this->chooks->surface_removed(s->id);
this->sprops.erase(s->id);
this->surfaces.erase(s->id);
this->screen_proxy_to_id.erase(uintptr_t(p));
}
-//
-// ___ ___ _ __ ___ ___ _ __
-// / __|/ __| '__/ _ \/ _ \ '_ \
-// \__ \ (__| | | __/ __/ | | |
-// |___/\___|_| \___|\___|_| |_|
-//
+/**
+ * screen
+ */
screen::screen(uint32_t i, struct controller *c,
struct ivi_controller_screen *p)
: wayland_proxy(p), controller_child(c, i) {
- HMI_DEBUG("wm", "genivi::screen @ %p id %u", p, i);
+ HMI_DEBUG("wm", "compositor::screen @ %p id %u", p, i);
}
void screen::clear() { ivi_controller_screen_clear(this->proxy.get()); }
ivi_controller_screen_set_render_order(this->proxy.get(), &wlro);
}
-} // namespace genivi
+} // namespace compositor