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. | |
Vẽ chữ, đo chữ, nạp font có tiếng Việt.
| enum njin::font_style : u8 |
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. |
| 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.
| ctx | Context của engine. |
| path | Đường dẫn file font (ttf, otf). |
| size | Cỡ 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. |
| style | Kiểu dựng chữ, mặc định là font_smooth. |
| 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.
| ctx | Context của engine. |
| font | Font cần đổi, handle id 0 là font mặc định. |
| style | Kiểu mới. |
| 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.
| ctx | Context của engine. |
| font | Font cần giải phóng. |
| 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.
| ctx | Context của engine. |
| text | Chuỗi UTF-8. |
| pos | Vị trí góc trên trái. |
| size | Cỡ chữ, tính bằng pixel. |
| color | Màu. |
| font | Font, mặc định là font của engine. |
| 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.
| ctx | Context của engine. |
| text | Chuỗi UTF-8. |
| size | Cỡ chữ, tính bằng pixel. |
| font | Font, mặc định là font của engine. |
| 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.
| ctx | Context của engine. |
| text | Chuỗi UTF-8. |
| size | Cỡ chữ, pixel. |
| max_width | Chiều rộng tối đa của một dòng, pixel. |
| font | 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.
| ctx | Context của engine. |
| text | Chuỗi UTF-8. |
| pos | Góc trên trái. |
| size | Cỡ chữ, pixel. |
| max_width | Chiều rộng tối đa, pixel. |
| color | Màu. |
| font | Font. |
| line_spacing | Khoảng cách dòng, nhân với chiều cao dòng. 1 là sát nhau. |