[feat] 低质量ttf render
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include <graphics/draw.h>
|
||||
#include <graphics/layer.h>
|
||||
#include <fonts/pixel_font.h>
|
||||
#include <fonts/ttf.h>
|
||||
#include <serial.h>
|
||||
#include <common.h>
|
||||
#include <string_utils.h>
|
||||
@@ -206,6 +207,7 @@ extern "C" void kernel_main() {
|
||||
serial_write("Sylva: fs_read FAILED: ");
|
||||
serial_write_hex(rd_st);
|
||||
serial_write("\n");
|
||||
serial_write("Test done.\n\n");
|
||||
} else {
|
||||
UINT64 ticks = t1 - t0;
|
||||
UINT64 ms = ticks * (1000 / PIT_TICK_HZ);
|
||||
@@ -217,6 +219,44 @@ extern "C" void kernel_main() {
|
||||
serial_write(" ms (");
|
||||
serial_write_hex(kbps);
|
||||
serial_write(" KiB/s)\n");
|
||||
|
||||
// --- TTF demo ---
|
||||
serial_write("Sylva: ttf_open...\n");
|
||||
ttf_face_t* face = ttf_open(ttf_buf, ttf_size);
|
||||
if (!face) {
|
||||
serial_write("Sylva: ttf_open FAILED\n");
|
||||
} else {
|
||||
serial_write("Sylva: ttf_open OK\n");
|
||||
|
||||
// Create an overlay layer for TTF output (sits above the two demo windows)
|
||||
const UINT32 TL_W = 500, TL_H = 200;
|
||||
layer_t* text_layer = layer_create("ttf_text", LAYER_TYPE_WINDOW, TL_W, TL_H);
|
||||
if (text_layer) {
|
||||
layer_set_z(text_layer, 3);
|
||||
layer_set_pos(text_layer, 100, 300);
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL clear = {0, 0, 0, 0};
|
||||
draw_set_target(text_layer->buffer, TL_W, TL_H);
|
||||
draw_rect(0, 0, TL_W - 1, TL_H - 1, clear);
|
||||
|
||||
// Render at 4 sizes + mixed CJK
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL white = {255, 255, 255, 0};
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL yellow = {255, 240, 80, 0};
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL cyan = {80, 220, 255, 0};
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL pink = {255, 160, 200, 0};
|
||||
|
||||
UINT32 ttf_t0 = pit_get_ticks();
|
||||
ttf_draw_text(face, "Hello, Sylva OS!",
|
||||
40, 60, 24, white);
|
||||
ttf_draw_text(face, "欢迎来到Sylva系统!",
|
||||
40, 110, 32, yellow);
|
||||
UINT32 ttf_t1 = pit_get_ticks();
|
||||
draw_set_default_target();
|
||||
serial_write("Sylva: ttf render in ");
|
||||
serial_write_hex((UINT64)((ttf_t1 - ttf_t0) * (1000 / PIT_TICK_HZ)));
|
||||
serial_write(" ms\n");
|
||||
}
|
||||
ttf_close(face);
|
||||
}
|
||||
kfree(ttf_buf);
|
||||
}
|
||||
serial_write("Test done.\n\n");
|
||||
|
||||
Reference in New Issue
Block a user