labwc/include/scaled-buffer/scaled-img-buffer.h

67 lines
3.5 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef LABWC_SCALED_IMG_BUFFER_H
#define LABWC_SCALED_IMG_BUFFER_H
struct wlr_scene_tree;
struct wlr_scene_node;
struct wlr_scene_buffer;
struct lab_img;
struct scaled_img_buffer {
struct scaled_buffer *scaled_buffer;
struct wlr_scene_buffer *scene_buffer;
struct lab_img *img;
int width;
int height;
};
/*
* | |
* .------------------. .------------.
* scaled_img_buffer | new_output_scale | | set_buffer |
* architecture ´------------------` ´------------`
* | ^
* .--------------------------------|----------------|-------------.
* | v | |
* | .-------------------. .-------------------------. |
* | | scaled_img_buffer |----| wlr_buffer LRU cache(2) |<----, |
* | ´-------------------` ´-------------------------` | |
* | | | | |
* | | .--------------------------. | |
* | | | wlr_buffer LRU cache of | | |
* .-------. | | | other scaled_img_buffers | | |
* | theme | | | | with lab_img_equal() | | |
* ´-------` | | ´--------------------------` | |
* | | | / | | |
* | | | not found found | |
* .---------. | .---------. .----------. .------------. | |
* | lab_img |-img_copy-->| lab_img |-----| render() |--->| wlr_buffer |-----` |
* ´---------` | ´---------` ´----------` ´------------` |
* \ | / |
* \ ´----------/----------------------------------------------------`
* \ /
* .----------------. lab_img provides:
* | lab_img_data | - render function
* | refcount=2 | - list of modification functions
* | `-----------------. to apply on top of lib_img_data
* | | when rendering
* | provides (depending on backend): | - lab_img_equal() comparing the
* | - librsvg handle | lab_img_data reference and
* | - cairo surface | modification function pointers
* ´----------------------------------` of two given lab_img instances
*
*/
/*
* Create an auto scaling image buffer, providing a wlr_scene_buffer node for
* display. It gets destroyed automatically when the backing scaled_buffer
* is being destroyed which in turn happens automatically when the backing
* wlr_scene_buffer (or one of its parents) is being destroyed.
*
* This function clones the lab_img passed as the image source, so callers are
* free to destroy it.
*/
struct scaled_img_buffer *scaled_img_buffer_create(struct wlr_scene_tree *parent,
struct lab_img *img, int width, int height);
#endif /* LABWC_SCALED_IMG_BUFFER_H */