// SPDX-License-Identifier: GPL-2.0-only #include #include #include #include "font.h" /** * font_glyph_cursor - Create a cursor glyph * @width: The glyph width in bits per scanline * @height: The number of scanlines in the glyph * @start: The first scanline of the cursor block * @end: The first scanline after the cursor block * @out: The cursor-glyph bitmap * * The parameters @width and @height refer to the glyph size. The caller * has to provide the output buffer @out of sufficient size to hold the * cursor glyph. The arguments in @start and @end describe the number of * scanlines occupied by the cursor block; counting from the top of the * glyph. The helper fills these scanlines with a pattern and clears the * remaining scanlines. */ void font_glyph_cursor(unsigned int width, unsigned int height, unsigned int start, unsigned int end, unsigned char *out) { unsigned int pitch = font_glyph_pitch(width); const unsigned char *out_end = out + height * pitch; unsigned int size; if (WARN_ON_ONCE(start > height)) start = height; if (WARN_ON_ONCE(end > height)) end = height; if (end < start) end = start; /* clear scanlines before cursor block */ size = start * pitch; memset(out, 0x00, size); out += size; /* set cursor block */ size = (end - start) * pitch; memset(out, 0xff, size); out += size; /* clear scanlines below cursor block */ size = (height - end) * pitch; memset(out, 0x00, size); out += size; WARN_ON_ONCE(out != out_end); } EXPORT_SYMBOL_GPL(font_glyph_cursor);