Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657// SPDX-License-Identifier: GPL-2.0-only
#include <linux/bug.h>#include <linux/export.h>#include <linux/string.h>
#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);