
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
78 lines
2.6 KiB
C
78 lines
2.6 KiB
C
/*
|
|
* Copyright (C) 2019 Red Hat Inc.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef CLUTTER_PAINT_CONTEXT_H
|
|
#define CLUTTER_PAINT_CONTEXT_H
|
|
|
|
#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
|
|
#error "Only <clutter/clutter.h> can be included directly."
|
|
#endif
|
|
|
|
#include <glib-object.h>
|
|
|
|
#include "clutter-macros.h"
|
|
#include "clutter-stage-view.h"
|
|
|
|
typedef struct _ClutterPaintContext ClutterPaintContext;
|
|
|
|
typedef enum _ClutterPaintFlag
|
|
{
|
|
CLUTTER_PAINT_FLAG_NONE = 0,
|
|
CLUTTER_PAINT_FLAG_NO_CURSORS = 1 << 0,
|
|
CLUTTER_PAINT_FLAG_FORCE_CURSORS = 1 << 1,
|
|
} ClutterPaintFlag;
|
|
|
|
#define CLUTTER_TYPE_PAINT_CONTEXT (clutter_paint_context_get_type ())
|
|
|
|
CLUTTER_EXPORT
|
|
GType clutter_paint_context_get_type (void);
|
|
|
|
CLUTTER_EXPORT
|
|
ClutterPaintContext * clutter_paint_context_new_for_framebuffer (CoglFramebuffer *framebuffer,
|
|
const cairo_region_t *redraw_clip,
|
|
ClutterPaintFlag paint_flags);
|
|
|
|
CLUTTER_EXPORT
|
|
ClutterPaintContext * clutter_paint_context_ref (ClutterPaintContext *paint_context);
|
|
|
|
CLUTTER_EXPORT
|
|
void clutter_paint_context_unref (ClutterPaintContext *paint_context);
|
|
|
|
CLUTTER_EXPORT
|
|
void clutter_paint_context_destroy (ClutterPaintContext *paint_context);
|
|
|
|
CLUTTER_EXPORT
|
|
CoglFramebuffer * clutter_paint_context_get_framebuffer (ClutterPaintContext *paint_context);
|
|
|
|
CLUTTER_EXPORT
|
|
ClutterStageView * clutter_paint_context_get_stage_view (ClutterPaintContext *paint_context);
|
|
|
|
CLUTTER_EXPORT
|
|
void clutter_paint_context_push_framebuffer (ClutterPaintContext *paint_context,
|
|
CoglFramebuffer *framebuffer);
|
|
|
|
CLUTTER_EXPORT
|
|
void clutter_paint_context_pop_framebuffer (ClutterPaintContext *paint_context);
|
|
|
|
CLUTTER_EXPORT
|
|
const cairo_region_t * clutter_paint_context_get_redraw_clip (ClutterPaintContext *paint_context);
|
|
|
|
CLUTTER_EXPORT
|
|
ClutterPaintFlag clutter_paint_context_get_paint_flags (ClutterPaintContext *paint_context);
|
|
|
|
#endif /* CLUTTER_PAINT_CONTEXT_H */
|