njin
Engine 2D gọn nhẹ để tự tay làm game theo ý mình. Vibe coding cũng ổn luôn
Loading...
Searching...
No Matches
Chữ và font

Vẽ chữ, đo chữ, nạp font có tiếng Việt. Tiếp...

Enumerations

enum  njin::font_style : u8 { njin::font_smooth , njin::font_pixel }
 Kiểu dựng chữ, xem font_set_style(). Tiếp...

Các hàm

font_handle njin::font_load (context &ctx, const char *path, i32 size=0, font_style style=font_smooth)
 Nạp một font TrueType/OpenType, kèm sẵn các ký tự tiếng Việt.
void njin::font_set_style (context &ctx, font_handle font, font_style style)
 Đổi kiểu dựng chữ của một font, kể cả font mặc định (handle id 0).
void njin::font_unload (context &ctx, font_handle font)
 Giải phóng font.
void njin::draw_text (const context &ctx, const char *text, vec2 pos, f32 size, rgba color, font_handle font={})
 Vẽ chữ với góc trên trái tại pos.
vec2 njin::text_measure (const context &ctx, const char *text, f32 size, font_handle font={})
 Kích thước một chuỗi khi vẽ bằng draw_text() với cùng tham số.
std::vector< std::string > njin::text_wrap (const context &ctx, const char *text, f32 size, f32 max_width, font_handle font={})
 Chia một đoạn chữ thành các dòng không rộng quá max_width khi vẽ bằng draw_text() với cùng cỡ và font.
vec2 njin::draw_text_wrapped (const context &ctx, const char *text, vec2 pos, f32 size, f32 max_width, rgba color, font_handle font={}, f32 line_spacing=1.1f)
 Vẽ một đoạn chữ tự xuống dòng trong bề rộng max_width, góc trên trái tại pos.

Mô tả chi tiết

Vẽ chữ, đo chữ, nạp font có tiếng Việt.

Thông tin về Enumeration Type

◆ font_style

Kiểu dựng chữ, xem font_set_style().

Enumerator
font_smooth 

Có khử răng cưa, lọc mượt. Hợp font vector, chữ đọc nhiều.

font_pixel 

Không khử răng cưa, lọc nearest: từng texel của glyph hoặc bật hoặc tắt.

Hợp game pixel art.

Thông tin về hàm

◆ font_load()

font_handle njin::font_load ( context & ctx,
const char * path,
i32 size = 0,
font_style style = font_smooth )

Nạp một font TrueType/OpenType, kèm sẵn các ký tự tiếng Việt.

Mỗi cỡ chữ được vẽ có một ảnh glyph riêng, dựng đúng cỡ đó ở lần vẽ đầu tiên (cỡ làm tròn thành số nguyên pixel, từ 6 đến 256), nên chữ nét ở mọi cỡ và một font dùng được cho cả chữ nhỏ lẫn chữ to.

Các tham số
ctxContext của engine.
pathĐường dẫn file font (ttf, otf).
sizeCỡ dựng sẵn ngay lúc nạp, tính bằng pixel, để lần vẽ đầu không phải chờ. Bỏ qua hoặc 0 thì dựng thử ở cỡ 16 để biết file có đọc được không.
styleKiểu dựng chữ, mặc định là font_smooth.
Giá trị trả về
Handle của font, hoặc handle id 0 (font mặc định) nếu nạp thất bại.

◆ font_set_style()

void njin::font_set_style ( context & ctx,
font_handle font,
font_style style )

Đổi kiểu dựng chữ của một font, kể cả font mặc định (handle id 0).

Các ảnh glyph đã dựng bị bỏ và dựng lại ở lần vẽ kế tiếp.

Kiểu font_pixel tắt khử răng cưa và dùng lọc nearest, nên chỉ nét khi vẽ đúng cỡ font được thiết kế: một font pixel như Press Start 2P thiết kế ở 8 pixel thì vẽ ở 8, 16, 24. Font vector thường (như JetBrains Mono) dựng ở cỡ nhỏ theo kiểu này sẽ răng cưa. Chữ kiểu này luôn vẽ trong ảnh ảo, phóng bằng cùng bộ lọc nearest với sprite, và không đi qua lớp chữ nét của config::crisp_text. Nên bật integer_scale cho độ phân giải ảo để mọi pixel chữ to bằng nhau.

Các tham số
ctxContext của engine.
fontFont cần đổi, handle id 0 là font mặc định.
styleKiểu mới.

◆ font_unload()

void njin::font_unload ( context & ctx,
font_handle font )

Giải phóng font.

Handle không hợp lệ bị bỏ qua. Vẽ bằng handle đã giải phóng thì dùng font mặc định.

Các tham số
ctxContext của engine.
fontFont cần giải phóng.

◆ draw_text()

void njin::draw_text ( const context & ctx,
const char * text,
vec2 pos,
f32 size,
rgba color,
font_handle font = {} )

Vẽ chữ với góc trên trái tại pos.

Hỗ trợ xuống dòng bằng \n.

Chuỗi là UTF-8. Font mặc định (handle id 0) là JetBrains Mono, đã có chữ tiếng Việt. Vị trí được làm tròn về pixel để chữ không bị nhòe.

Với độ phân giải ảo và GPU thật, chữ trên màn hình (ngoài world) được vẽ ở độ phân giải cửa sổ, xem config::crisp_text.

Các tham số
ctxContext của engine.
textChuỗi UTF-8.
posVị trí góc trên trái.
sizeCỡ chữ, tính bằng pixel.
colorMàu.
fontFont, mặc định là font của engine.

◆ text_measure()

vec2 njin::text_measure ( const context & ctx,
const char * text,
f32 size,
font_handle font = {} )

Kích thước một chuỗi khi vẽ bằng draw_text() với cùng tham số.

Dùng để căn giữa hoặc căn phải: pos.x = center.x - text_measure(...).x / 2.

Các tham số
ctxContext của engine.
textChuỗi UTF-8.
sizeCỡ chữ, tính bằng pixel.
fontFont, mặc định là font của engine.
Giá trị trả về
Chiều rộng và chiều cao, tính bằng pixel.

◆ text_wrap()

std::vector< std::string > njin::text_wrap ( const context & ctx,
const char * text,
f32 size,
f32 max_width,
font_handle font = {} )

Chia một đoạn chữ thành các dòng không rộng quá max_width khi vẽ bằng draw_text() với cùng cỡ và font.

Chỉ xuống dòng ở dấu cách và ở \n, nên không bao giờ cắt đôi một chữ (hay một ký tự UTF-8); một từ dài hơn cả dòng đứng riêng một dòng.

Các tham số
ctxContext của engine.
textChuỗi UTF-8.
sizeCỡ chữ, pixel.
max_widthChiều rộng tối đa của một dòng, pixel.
fontFont.
Giá trị trả về
Các dòng, theo thứ tự.

◆ draw_text_wrapped()

vec2 njin::draw_text_wrapped ( const context & ctx,
const char * text,
vec2 pos,
f32 size,
f32 max_width,
rgba color,
font_handle font = {},
f32 line_spacing = 1.1f )

Vẽ một đoạn chữ tự xuống dòng trong bề rộng max_width, góc trên trái tại pos.

Các tham số
ctxContext của engine.
textChuỗi UTF-8.
posGóc trên trái.
sizeCỡ chữ, pixel.
max_widthChiều rộng tối đa, pixel.
colorMàu.
fontFont.
line_spacingKhoảng cách dòng, nhân với chiều cao dòng. 1 là sát nhau.
Giá trị trả về
Kích thước của khối chữ đã vẽ.