Render cursors

This commit is contained in:
buffet 2019-03-07 23:36:45 +01:00
parent 1e01e3f74e
commit 45e5f6235e
6 changed files with 74 additions and 6 deletions

15
include/kiwmi/input.h Normal file
View file

@ -0,0 +1,15 @@
/* Copyright (c), Charlotte Meyer <dev@buffet.sh>
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#ifndef KIWMI_INPUT_H
#define KIWMI_INPUT_H
#include <wayland-server.h>
void new_input_notify(struct wl_listener *listener, void *data);
#endif /* KIWMI_INPUT_H */

View file

@ -26,6 +26,7 @@ struct kiwmi_server {
struct wl_list outputs; // struct kiwmi_output::link struct wl_list outputs; // struct kiwmi_output::link
struct wl_listener new_output; struct wl_listener new_output;
struct kiwmi_cursor *cursor; struct kiwmi_cursor *cursor;
struct wl_listener new_input;
}; };
bool server_init(struct kiwmi_server *server); bool server_init(struct kiwmi_server *server);

38
kiwmi/input.c Normal file
View file

@ -0,0 +1,38 @@
/* Copyright (c), Charlotte Meyer <dev@buffet.sh>
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#include "kiwmi/input.h"
#include <wayland-server.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/util/log.h>
#include "kiwmi/server.h"
static void
new_pointer(struct kiwmi_server *server, struct wlr_input_device *device)
{
wlr_cursor_attach_input_device(server->cursor->cursor, device);
}
void
new_input_notify(struct wl_listener *listener, void *data)
{
struct kiwmi_server *server = wl_container_of(listener, server, new_input);
struct wlr_input_device *device = data;
wlr_log(WLR_DEBUG, "Adding input device: '%s'", device->name);
switch (device->type) {
case WLR_INPUT_DEVICE_POINTER:
new_pointer(server, device);
break;
default:
// NOT HANDLED
break;
}
}

View file

@ -1,6 +1,7 @@
kiwmi_sources = files( kiwmi_sources = files(
'main.c', 'main.c',
'server.c', 'server.c',
'input.c',
'output.c', 'output.c',
'desktop/output.c', 'desktop/output.c',
'input/cursor.c', 'input/cursor.c',

View file

@ -23,15 +23,24 @@ output_frame_notify(struct wl_listener *listener, void *data)
struct wlr_renderer *renderer = struct wlr_renderer *renderer =
wlr_backend_get_renderer(wlr_output->backend); wlr_backend_get_renderer(wlr_output->backend);
wlr_output_make_current(wlr_output, NULL); if (!wlr_output_make_current(wlr_output, NULL)) {
wlr_renderer_begin(renderer, wlr_output->width, wlr_output->height); return;
}
int width;
int height;
wlr_output_effective_resolution(wlr_output, &width, &height);
{ {
wlr_renderer_begin(renderer, width, height);
float color[] = {0.18f, 0.20f, 0.25f, 1.0f}; float color[] = {0.18f, 0.20f, 0.25f, 1.0f};
wlr_renderer_clear(renderer, color); wlr_renderer_clear(renderer, color);
wlr_output_render_software_cursors(wlr_output, NULL); wlr_output_render_software_cursors(wlr_output, NULL);
wlr_output_swap_buffers(wlr_output, NULL, NULL); wlr_renderer_end(renderer);
} }
wlr_renderer_end(renderer);
wlr_output_swap_buffers(wlr_output, NULL, NULL);
} }
static void static void

View file

@ -20,6 +20,7 @@
#include <wlr/util/log.h> #include <wlr/util/log.h>
#include "kiwmi/desktop/output.h" #include "kiwmi/desktop/output.h"
#include "kiwmi/input.h"
#include "kiwmi/input/cursor.h" #include "kiwmi/input/cursor.h"
bool bool
@ -42,6 +43,8 @@ server_init(struct kiwmi_server *server)
server->data_device_manager = server->data_device_manager =
wlr_data_device_manager_create(server->wl_display); wlr_data_device_manager_create(server->wl_display);
server->output_layout = wlr_output_layout_create();
server->cursor = cursor_create(server->output_layout); server->cursor = cursor_create(server->output_layout);
if (!server->cursor) { if (!server->cursor) {
wlr_log(WLR_ERROR, "Failed to create cursor"); wlr_log(WLR_ERROR, "Failed to create cursor");
@ -50,13 +53,14 @@ server_init(struct kiwmi_server *server)
return false; return false;
} }
server->output_layout = wlr_output_layout_create();
wl_list_init(&server->outputs); wl_list_init(&server->outputs);
server->new_output.notify = new_output_notify; server->new_output.notify = new_output_notify;
wl_signal_add(&server->backend->events.new_output, &server->new_output); wl_signal_add(&server->backend->events.new_output, &server->new_output);
server->new_input.notify = new_input_notify;
wl_signal_add(&server->backend->events.new_input, &server->new_input);
return true; return true;
} }