mirror of
https://git.planet-casio.com/Lephenixnoir/gint.git
synced 2025-01-03 23:43:36 +01:00
render: add alignment options to dtext_opt() and dprint_opt()
This change introduces two new functions dtext_opt() and dprint_opt() that have both color and alignment options. The regular dtext() and dprint() have been changed to always used bg=C_NONE which is what most calls want.
This commit is contained in:
parent
06345967fd
commit
230b796196
5 changed files with 103 additions and 23 deletions
|
@ -201,32 +201,61 @@ font_t const *dfont(font_t const * font);
|
||||||
@w @h Set to the width and height of the rendered text, may be NULL */
|
@w @h Set to the width and height of the rendered text, may be NULL */
|
||||||
void dsize(char const *str, font_t const * font, int *w, int *h);
|
void dsize(char const *str, font_t const * font, int *w, int *h);
|
||||||
|
|
||||||
/* dtext(): Display a string of text
|
/* Alignment settings for dtext_opt() and dprint_opt(). Combining a vertical
|
||||||
|
and a horizontal alignment option specifies where a given point (x,y) should
|
||||||
|
be relative to the rendered string. */
|
||||||
|
enum {
|
||||||
|
/* Horizontal settings: default in dtext() is DTEXT_LEFT */
|
||||||
|
DTEXT_LEFT = 0,
|
||||||
|
DTEXT_CENTER = 1,
|
||||||
|
DTEXT_RIGHT = 2,
|
||||||
|
/* Vertical settings: default in dtext() is DTEXT_TOP */
|
||||||
|
DTEXT_TOP = 0,
|
||||||
|
DTEXT_MIDDLE = 1,
|
||||||
|
DTEXT_BOTTOM = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* dtext_opt(): Display a string of text
|
||||||
|
|
||||||
Draws some text in the video RAM using the font set with dfont() (or gint's
|
Draws some text in the video RAM using the font set with dfont() (or gint's
|
||||||
default if no such font was set).
|
default if no such font was set). This function has a lot of parameters,
|
||||||
|
see dtext() for a simpler version.
|
||||||
|
|
||||||
On fx9860g, due to the particular design of topti, this function performs
|
On fx9860g, due to the particular design of topti, this function performs
|
||||||
drastic rendering optimizations using the line structure of the VRAM and is
|
drastic rendering optimizations using the line structure of the VRAM and is
|
||||||
able to render several characters at once.
|
able to render several characters at once.
|
||||||
|
|
||||||
This is not a printf()-family function so [str] cannot contain formats like
|
This is not a printf()-family function so [str] cannot contain formats like
|
||||||
"%d" and you cannot pass additional arguments.
|
"%d" and you cannot pass additional arguments. See dprint_opt() and dprint()
|
||||||
|
for that.
|
||||||
|
|
||||||
@x @y Coordinates of top-left corner of the rendered string
|
@x @y Coordinates of top-left corner of the rendered string
|
||||||
@str String to display
|
@fg Text color
|
||||||
@fg Text color
|
fx9860g: white, black, none, invert
|
||||||
fx9860g: white, black, none, invert
|
fxcg50: Any R5G6B6 color, or C_NONE
|
||||||
fxcg50: Any R5G6B6 color, or C_NONE
|
@bg Background color
|
||||||
@bg Background color
|
fx9860g: white, black, none, invert
|
||||||
fx9860g: white, black, none, invert
|
fxcg50: Any R5G6B5 color, or C_NONE
|
||||||
fxcg50: Any R5G6B5 color, or C_NONE */
|
@halign Where x should be relative to the rendered string (see above enum)
|
||||||
void dtext(int x, int y, char const *str, int fg, int bg);
|
@valign Where y should be relative to the rendered string (see above enum)
|
||||||
|
@str String to display */
|
||||||
|
void dtext_opt(int x, int y, int fg, int bg, int halign, int valign,
|
||||||
|
char const *str);
|
||||||
|
|
||||||
/* dprint(): Display a formatted string
|
/* dtext(): Simple version of dtext_opt() with defaults
|
||||||
Much like dtext(), but accepts printf-like formats with arguments. See
|
This is exactly dtext_opt() with bg=C_NONE, halign=DTEXT_LEFT and
|
||||||
|
valign=DTEXT_TOP. */
|
||||||
|
void dtext(int x, int y, int fg, char const *str);
|
||||||
|
|
||||||
|
/* dprint_opt(): Display a formatted string
|
||||||
|
Much like dtext_opt(), but accepts printf-like formats with arguments. See
|
||||||
<gint/std/stdio.h> for a detailed view of what this format supports. */
|
<gint/std/stdio.h> for a detailed view of what this format supports. */
|
||||||
void dprint(int x, int y, int fg, int bg, char const *format, ...);
|
void dprint_opt(int x, int y, int fg, int bg, int halign, int valign,
|
||||||
|
char const *format, ...);
|
||||||
|
|
||||||
|
/* dprint(): Simple version of dprint_op() with defaults
|
||||||
|
Like dtext() with formatted printing. */
|
||||||
|
void dprint(int x, int y, int fg, char const *format, ...);
|
||||||
|
|
||||||
//---
|
//---
|
||||||
// Image rendering (bopti)
|
// Image rendering (bopti)
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
#include <gint/defs/attributes.h>
|
#include <gint/defs/attributes.h>
|
||||||
#include <gint/hardware.h>
|
#include <gint/hardware.h>
|
||||||
|
|
||||||
#define dprint(x, y, ...) dprint(x, y, C_BLACK, C_NONE, __VA_ARGS__)
|
#define dprint(x, y, ...) dprint(x, y, C_BLACK, __VA_ARGS__)
|
||||||
#define dtext(x, y, str) dtext (x, y, str, C_BLACK, C_NONE)
|
#define dtext(x, y, str) dtext (x, y, C_BLACK, str)
|
||||||
|
|
||||||
/* gint_panic_default(): Default panic handler */
|
/* gint_panic_default(): Default panic handler */
|
||||||
GNORETURN static void gint_default_panic(GUNUSED uint32_t code)
|
GNORETURN static void gint_default_panic(GUNUSED uint32_t code)
|
||||||
|
|
|
@ -116,8 +116,26 @@ void topti_render(int x, int y, char const *str, size_t size, font_t const *f,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dtext() - display a string of text */
|
/* dtext_opt(): Display a string of text */
|
||||||
void dtext(int x, int y, char const *str, int fg, int bg)
|
void dtext_opt(int x, int y, int fg, int bg, int halign, int valign,
|
||||||
|
char const *str)
|
||||||
{
|
{
|
||||||
|
if(halign != DTEXT_LEFT || valign != DTEXT_TOP)
|
||||||
|
{
|
||||||
|
int w, h;
|
||||||
|
dsize(str, topti_font, &w, &h);
|
||||||
|
|
||||||
|
if(halign == DTEXT_RIGHT) x -= w;
|
||||||
|
if(halign == DTEXT_CENTER) x -= ((w+1) >> 1);
|
||||||
|
if(valign == DTEXT_BOTTOM) y -= h;
|
||||||
|
if(valign == DTEXT_MIDDLE) y -= ((h+1) >> 1);
|
||||||
|
}
|
||||||
|
|
||||||
topti_render(x, y, str, strlen(str), topti_font, fg, bg);
|
topti_render(x, y, str, strlen(str), topti_font, fg, bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* dtext(): Simple version of dtext_opt() with defaults */
|
||||||
|
void dtext(int x, int y, int fg, char const *str)
|
||||||
|
{
|
||||||
|
dtext_opt(x, y, fg, C_NONE, DTEXT_LEFT, DTEXT_TOP, str);
|
||||||
|
}
|
||||||
|
|
|
@ -2,10 +2,29 @@
|
||||||
#include <display/common.h>
|
#include <display/common.h>
|
||||||
#include "topti-asm.h"
|
#include "topti-asm.h"
|
||||||
|
|
||||||
/* dtext(): Display a string of text */
|
/* dtext_opt(): Display a string of text */
|
||||||
void dtext(int x, int y, char const *str, int fg, int bg)
|
void dtext_opt(int x, int y, int fg, int bg, int halign, int valign,
|
||||||
|
char const *str)
|
||||||
{
|
{
|
||||||
if((uint)fg >= 8 || (uint)bg >= 8) return;
|
if((uint)fg >= 8 || (uint)bg >= 8) return;
|
||||||
|
|
||||||
|
if(halign != DTEXT_LEFT || valign != DTEXT_TOP)
|
||||||
|
{
|
||||||
|
int w, h;
|
||||||
|
dsize(str, topti_font, &w, &h);
|
||||||
|
|
||||||
|
if(halign == DTEXT_RIGHT) x -= w;
|
||||||
|
if(halign == DTEXT_CENTER) x -= ((w+1) >> 1);
|
||||||
|
if(valign == DTEXT_BOTTOM) y -= h;
|
||||||
|
if(valign == DTEXT_MIDDLE) y -= ((h+1) >> 1);
|
||||||
|
}
|
||||||
|
|
||||||
topti_render(x, y, str, topti_font, topti_asm_text[fg],
|
topti_render(x, y, str, topti_font, topti_asm_text[fg],
|
||||||
topti_asm_text[bg], gint_vram, gint_vram);
|
topti_asm_text[bg], gint_vram, gint_vram);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* dtext(): Simple version of dtext_opt() with defaults */
|
||||||
|
void dtext(int x, int y, int fg, char const *str)
|
||||||
|
{
|
||||||
|
dtext_opt(x, y, fg, C_NONE, DTEXT_LEFT, DTEXT_TOP, str);
|
||||||
|
}
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
#include <gint/std/stdio.h>
|
#include <gint/std/stdio.h>
|
||||||
|
|
||||||
/* dprint(): Display a formatted string */
|
/* dprint(): Display a formatted string */
|
||||||
void dprint(int x, int y, int fg, int bg, char const *format, ...)
|
void dprint_opt(int x, int y, int fg, int bg, int halign, int valign,
|
||||||
|
char const *format, ...)
|
||||||
{
|
{
|
||||||
char str[512];
|
char str[512];
|
||||||
va_list args;
|
va_list args;
|
||||||
|
@ -11,5 +12,18 @@ void dprint(int x, int y, int fg, int bg, char const *format, ...)
|
||||||
vsnprintf(str, 512, format, args);
|
vsnprintf(str, 512, format, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
dtext(x, y, str, fg, bg);
|
dtext_opt(x, y, fg, bg, halign, valign, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* dprint(): Simple version of dprint_op() with defaults */
|
||||||
|
void dprint(int x, int y, int fg, char const *format, ...)
|
||||||
|
{
|
||||||
|
char str[512];
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
va_start(args, format);
|
||||||
|
vsnprintf(str, 512, format, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
dtext(x, y, fg, str);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue