@@ -11,8 +11,7 @@
#define OFFSET(canvas, x, y) (((y) * (canvas)->stride) + ((x) * ((canvas)->bpp >> 3)))
-/* TODO: change to 'static inline' as psplash_fb_plot_pixel was before */
-void
+static inline void
psplash_plot_pixel(PSplashCanvas *canvas,
int x,
int y,
@@ -188,3 +187,109 @@ psplash_draw_image(PSplashCanvas *canvas,
}
}
}
+
+/* Font rendering code based on BOGL by Ben Pfaff */
+
+static int
+psplash_font_glyph (const PSplashFont *font, wchar_t wc, u_int32_t **bitmap)
+{
+ int mask = font->index_mask;
+ int i;
+
+ for (;;)
+ {
+ for (i = font->offset[wc & mask]; font->index[i]; i += 2)
+ {
+ if ((wchar_t)(font->index[i] & ~mask) == (wc & ~mask))
+ {
+ if (bitmap != NULL)
+ *bitmap = &font->content[font->index[i+1]];
+ return font->index[i] & mask;
+ }
+ }
+ }
+ return 0;
+}
+
+void
+psplash_text_size(int *width,
+ int *height,
+ const PSplashFont *font,
+ const char *text)
+{
+ char *c = (char*)text;
+ wchar_t wc;
+ int k, n, w, h, mw;
+
+ n = strlen (text);
+ mw = h = w = 0;
+
+ mbtowc (0, 0, 0);
+ for (; (k = mbtowc (&wc, c, n)) > 0; c += k, n -= k)
+ {
+ if (*c == '\n')
+ {
+ if (w > mw)
+ mw = w;
+ w = 0;
+ h += font->height;
+ continue;
+ }
+
+ w += psplash_font_glyph (font, wc, NULL);
+ }
+
+ *width = (w > mw) ? w : mw;
+ *height = (h == 0) ? font->height : h;
+}
+
+void
+psplash_draw_text(PSplashCanvas *canvas,
+ int x,
+ int y,
+ uint8 red,
+ uint8 green,
+ uint8 blue,
+ const PSplashFont *font,
+ const char *text)
+{
+ int h, w, k, n, cx, cy, dx, dy;
+ char *c = (char*)text;
+ wchar_t wc;
+
+ n = strlen (text);
+ h = font->height;
+ dx = dy = 0;
+
+ mbtowc (0, 0, 0);
+ for (; (k = mbtowc (&wc, c, n)) > 0; c += k, n -= k)
+ {
+ u_int32_t *glyph = NULL;
+
+ if (*c == '\n')
+ {
+ dy += h;
+ dx = 0;
+ continue;
+ }
+
+ w = psplash_font_glyph (font, wc, &glyph);
+
+ if (glyph == NULL)
+ continue;
+
+ for (cy = 0; cy < h; cy++)
+ {
+ u_int32_t g = *glyph++;
+
+ for (cx = 0; cx < w; cx++)
+ {
+ if (g & 0x80000000)
+ psplash_plot_pixel(canvas, x+dx+cx, y+dy+cy, red, green, blue);
+ g <<= 1;
+ }
+ }
+
+ dx += w;
+ }
+}
@@ -39,15 +39,6 @@ typedef struct PSplashCanvas
}
PSplashCanvas;
-/* TODO: Remove after rest of drawing functions migrated to psplash-draw.c */
-void
-psplash_plot_pixel(PSplashCanvas *canvas,
- int x,
- int y,
- uint8 red,
- uint8 green,
- uint8 blue);
-
void
psplash_draw_rect(PSplashCanvas *canvas,
int x,
@@ -68,4 +59,20 @@ psplash_draw_image(PSplashCanvas *canvas,
int img_rowstride,
uint8 *rle_data);
+void
+psplash_text_size(int *width,
+ int *height,
+ const PSplashFont *font,
+ const char *text);
+
+void
+psplash_draw_text(PSplashCanvas *canvas,
+ int x,
+ int y,
+ uint8 red,
+ uint8 green,
+ uint8 blue,
+ const PSplashFont *font,
+ const char *text);
+
#endif
@@ -338,111 +338,3 @@ psplash_fb_new (int angle, int fbdev_id)
return NULL;
}
-
-/* Font rendering code based on BOGL by Ben Pfaff */
-
-static int
-psplash_font_glyph (const PSplashFont *font, wchar_t wc, u_int32_t **bitmap)
-{
- int mask = font->index_mask;
- int i;
-
- for (;;)
- {
- for (i = font->offset[wc & mask]; font->index[i]; i += 2)
- {
- if ((wchar_t)(font->index[i] & ~mask) == (wc & ~mask))
- {
- if (bitmap != NULL)
- *bitmap = &font->content[font->index[i+1]];
- return font->index[i] & mask;
- }
- }
- }
- return 0;
-}
-
-void
-psplash_fb_text_size (int *width,
- int *height,
- const PSplashFont *font,
- const char *text)
-{
- char *c = (char*)text;
- wchar_t wc;
- int k, n, w, h, mw;
-
- n = strlen (text);
- mw = h = w = 0;
-
- mbtowc (0, 0, 0);
- for (; (k = mbtowc (&wc, c, n)) > 0; c += k, n -= k)
- {
- if (*c == '\n')
- {
- if (w > mw)
- mw = w;
- w = 0;
- h += font->height;
- continue;
- }
-
- w += psplash_font_glyph (font, wc, NULL);
- }
-
- *width = (w > mw) ? w : mw;
- *height = (h == 0) ? font->height : h;
-}
-
-void
-psplash_fb_draw_text (PSplashFB *fb,
- int x,
- int y,
- uint8 red,
- uint8 green,
- uint8 blue,
- const PSplashFont *font,
- const char *text)
-{
- int h, w, k, n, cx, cy, dx, dy;
- char *c = (char*)text;
- wchar_t wc;
-
- n = strlen (text);
- h = font->height;
- dx = dy = 0;
-
- mbtowc (0, 0, 0);
- for (; (k = mbtowc (&wc, c, n)) > 0; c += k, n -= k)
- {
- u_int32_t *glyph = NULL;
-
- if (*c == '\n')
- {
- dy += h;
- dx = 0;
- continue;
- }
-
- w = psplash_font_glyph (font, wc, &glyph);
-
- if (glyph == NULL)
- continue;
-
- for (cy = 0; cy < h; cy++)
- {
- u_int32_t g = *glyph++;
-
- for (cx = 0; cx < w; cx++)
- {
- if (g & 0x80000000)
- psplash_plot_pixel(&fb->canvas, x+dx+cx, y+dy+cy,
- red, green, blue);
- g <<= 1;
- }
- }
-
- dx += w;
- }
-}
-
@@ -40,22 +40,6 @@ psplash_fb_destroy (PSplashFB *fb);
PSplashFB*
psplash_fb_new (int angle, int fbdev_id);
-void
-psplash_fb_text_size (int *width,
- int *height,
- const PSplashFont *font,
- const char *text);
-
-void
-psplash_fb_draw_text (PSplashFB *fb,
- int x,
- int y,
- uint8 red,
- uint8 green,
- uint8 blue,
- const PSplashFont *font,
- const char *text);
-
void
psplash_fb_flip(PSplashFB *fb, int sync);
@@ -41,7 +41,7 @@ psplash_draw_msg (PSplashFB *fb, const char *msg)
{
int w, h;
- psplash_fb_text_size (&w, &h, &FONT_DEF, msg);
+ psplash_text_size(&w, &h, &FONT_DEF, msg);
DBG("displaying '%s' %ix%i\n", msg, w, h);
@@ -54,7 +54,7 @@ psplash_draw_msg (PSplashFB *fb, const char *msg)
h,
PSPLASH_BACKGROUND_COLOR);
- psplash_fb_draw_text (fb,
+ psplash_draw_text(&fb->canvas,
(fb->canvas.width-w)/2,
SPLIT_LINE_POS(fb) - h,
PSPLASH_TEXT_COLOR,
Signed-off-by: Vasyl Vavrychuk <vasyl.vavrychuk@opensynergy.com> --- psplash-draw.c | 109 ++++++++++++++++++++++++++++++++++++++++++++++++- psplash-draw.h | 25 ++++++++---- psplash-fb.c | 108 ------------------------------------------------ psplash-fb.h | 16 -------- psplash.c | 4 +- 5 files changed, 125 insertions(+), 137 deletions(-)