mirror of
https://github.com/brl/mutter.git
synced 2024-11-27 18:40:40 -05:00
b4a8247191
Always force-track the cursor position (so that the X11 backend can keep it up to date), and if the cursor wasn't part of the sampled framebuffer when reading pixels into CPU memory, draw it in an extra pass using cairo after the fact. The cairo based cursor painting only happens on the X11 backend, as we otherwise inhibit the hw cursor. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1391
88 lines
3.4 KiB
C
88 lines
3.4 KiB
C
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
|
|
/*
|
|
* Copyright (C) 2014 Red Hat
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
* 02111-1307, USA.
|
|
*
|
|
* Written by:
|
|
* Jasper St. Pierre <jstpierre@mecheye.net>
|
|
*/
|
|
|
|
#ifndef META_CURSOR_RENDERER_H
|
|
#define META_CURSOR_RENDERER_H
|
|
|
|
#include <glib-object.h>
|
|
|
|
#include "backends/meta-backend-types.h"
|
|
#include "backends/meta-cursor.h"
|
|
|
|
#define META_TYPE_HW_CURSOR_INHIBITOR (meta_hw_cursor_inhibitor_get_type ())
|
|
G_DECLARE_INTERFACE (MetaHwCursorInhibitor, meta_hw_cursor_inhibitor,
|
|
META, HW_CURSOR_INHIBITOR, GObject)
|
|
|
|
struct _MetaHwCursorInhibitorInterface
|
|
{
|
|
GTypeInterface parent_iface;
|
|
|
|
gboolean (* is_cursor_sprite_inhibited) (MetaHwCursorInhibitor *inhibitor,
|
|
MetaCursorSprite *cursor_sprite);
|
|
};
|
|
|
|
#define META_TYPE_CURSOR_RENDERER (meta_cursor_renderer_get_type ())
|
|
G_DECLARE_DERIVABLE_TYPE (MetaCursorRenderer, meta_cursor_renderer,
|
|
META, CURSOR_RENDERER, GObject);
|
|
|
|
struct _MetaCursorRendererClass
|
|
{
|
|
GObjectClass parent_class;
|
|
|
|
gboolean (* update_cursor) (MetaCursorRenderer *renderer,
|
|
MetaCursorSprite *cursor_sprite);
|
|
};
|
|
|
|
MetaCursorRenderer * meta_cursor_renderer_new (MetaBackend *backend);
|
|
|
|
void meta_cursor_renderer_set_cursor (MetaCursorRenderer *renderer,
|
|
MetaCursorSprite *cursor_sprite);
|
|
|
|
void meta_cursor_renderer_set_position (MetaCursorRenderer *renderer,
|
|
float x,
|
|
float y);
|
|
graphene_point_t meta_cursor_renderer_get_position (MetaCursorRenderer *renderer);
|
|
void meta_cursor_renderer_force_update (MetaCursorRenderer *renderer);
|
|
|
|
MetaCursorSprite * meta_cursor_renderer_get_cursor (MetaCursorRenderer *renderer);
|
|
|
|
gboolean meta_cursor_renderer_is_overlay_visible (MetaCursorRenderer *renderer);
|
|
|
|
void meta_cursor_renderer_add_hw_cursor_inhibitor (MetaCursorRenderer *renderer,
|
|
MetaHwCursorInhibitor *inhibitor);
|
|
|
|
void meta_cursor_renderer_remove_hw_cursor_inhibitor (MetaCursorRenderer *renderer,
|
|
MetaHwCursorInhibitor *inhibitor);
|
|
|
|
gboolean meta_cursor_renderer_is_hw_cursors_inhibited (MetaCursorRenderer *renderer,
|
|
MetaCursorSprite *cursor_sprite);
|
|
|
|
graphene_rect_t meta_cursor_renderer_calculate_rect (MetaCursorRenderer *renderer,
|
|
MetaCursorSprite *cursor_sprite);
|
|
|
|
void meta_cursor_renderer_emit_painted (MetaCursorRenderer *renderer,
|
|
MetaCursorSprite *cursor_sprite);
|
|
|
|
#endif /* META_CURSOR_RENDERER_H */
|