mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-13 09:35:23 -04:00
Export Drawer2D per request
This commit is contained in:
parent
763a7e23eb
commit
d15ef3ed69
@ -14,9 +14,7 @@
|
||||
#include "Window.h"
|
||||
#include "Options.h"
|
||||
|
||||
cc_bool Drawer2D_BitmappedText;
|
||||
cc_bool Drawer2D_BlackTextShadows;
|
||||
BitmapCol Drawer2D_Cols[DRAWER2D_MAX_COLS];
|
||||
struct _Drawer2DData Drawer2D;
|
||||
#define Font_IsBitmap(font) (!(font)->handle)
|
||||
|
||||
void DrawTextArgs_Make(struct DrawTextArgs* args, STRING_REF const cc_string* text, struct FontDesc* font, cc_bool useShadow) {
|
||||
@ -68,7 +66,7 @@ void Drawer2D_MakeBitmappedFont(struct FontDesc* desc, int size, int flags) {
|
||||
}
|
||||
|
||||
void Drawer2D_MakeFont(struct FontDesc* desc, int size, int flags) {
|
||||
if (Drawer2D_BitmappedText) {
|
||||
if (Drawer2D.BitmappedText) {
|
||||
Drawer2D_MakeBitmappedFont(desc, size, flags);
|
||||
} else {
|
||||
Font_MakeDefault(desc, size, flags);
|
||||
@ -368,7 +366,7 @@ cc_bool Drawer2D_IsWhiteCol(char c) { return c == '\0' || c == 'f' || c == 'F';
|
||||
/* Divides R/G/B by 4 */
|
||||
#define SHADOW_MASK ((0x3F << BITMAPCOL_R_SHIFT) | (0x3F << BITMAPCOL_G_SHIFT) | (0x3F << BITMAPCOL_B_SHIFT))
|
||||
CC_NOINLINE static BitmapCol GetShadowCol(BitmapCol c) {
|
||||
if (Drawer2D_BlackTextShadows) return BITMAPCOL_BLACK;
|
||||
if (Drawer2D.BlackTextShadows) return BITMAPCOL_BLACK;
|
||||
|
||||
/* Initial layout: aaaa_aaaa|rrrr_rrrr|gggg_gggg|bbbb_bbbb */
|
||||
/* Shift right 2: 00aa_aaaa|aarr_rrrr|rrgg_gggg|ggbb_bbbb */
|
||||
@ -387,7 +385,7 @@ static int Drawer2D_Width(int point, char c) {
|
||||
void Drawer2D_ReducePadding_Tex(struct Texture* tex, int point, int scale) {
|
||||
int padding;
|
||||
float vAdj;
|
||||
if (!Drawer2D_BitmappedText) return;
|
||||
if (!Drawer2D.BitmappedText) return;
|
||||
|
||||
padding = (tex->Height - point) / scale;
|
||||
vAdj = (float)padding / Math_NextPowOf2(tex->Height);
|
||||
@ -397,7 +395,7 @@ void Drawer2D_ReducePadding_Tex(struct Texture* tex, int point, int scale) {
|
||||
|
||||
void Drawer2D_ReducePadding_Height(int* height, int point, int scale) {
|
||||
int padding;
|
||||
if (!Drawer2D_BitmappedText) return;
|
||||
if (!Drawer2D.BitmappedText) return;
|
||||
|
||||
padding = (*height - point) / scale;
|
||||
*height -= padding * 2;
|
||||
@ -438,7 +436,7 @@ static void DrawBitmappedTextCore(struct Bitmap* bmp, struct DrawTextArgs* args,
|
||||
BitmapCol cols[256];
|
||||
cc_uint16 dstWidths[256];
|
||||
|
||||
col = Drawer2D_Cols['f'];
|
||||
col = Drawer2D.Colors['f'];
|
||||
if (shadow) col = GetShadowCol(col);
|
||||
|
||||
for (i = 0; i < text.length; i++) {
|
||||
@ -616,7 +614,7 @@ void Drawer2D_DrawClippedText(struct Bitmap* bmp, struct DrawTextArgs* args,
|
||||
*---------------------------------------------------Drawer2D component----------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
static void InitHexEncodedCol(int i, int hex, cc_uint8 lo, cc_uint8 hi) {
|
||||
Drawer2D_Cols[i] = BitmapCol_Make(
|
||||
Drawer2D.Colors[i] = BitmapCol_Make(
|
||||
lo * ((hex >> 2) & 1) + hi * (hex >> 3),
|
||||
lo * ((hex >> 1) & 1) + hi * (hex >> 3),
|
||||
lo * ((hex >> 0) & 1) + hi * (hex >> 3),
|
||||
@ -626,7 +624,7 @@ static void InitHexEncodedCol(int i, int hex, cc_uint8 lo, cc_uint8 hi) {
|
||||
static void OnReset(void) {
|
||||
int i;
|
||||
for (i = 0; i < DRAWER2D_MAX_COLS; i++) {
|
||||
Drawer2D_Cols[i] = 0;
|
||||
Drawer2D.Colors[i] = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i <= 9; i++) {
|
||||
@ -655,8 +653,8 @@ static void OnFileChanged(void* obj, struct Stream* src, const cc_string* name)
|
||||
|
||||
static void OnInit(void) {
|
||||
OnReset();
|
||||
Drawer2D_BitmappedText = Game_ClassicMode || !Options_GetBool(OPT_USE_CHAT_FONT, false);
|
||||
Drawer2D_BlackTextShadows = Options_GetBool(OPT_BLACK_TEXT, false);
|
||||
Drawer2D.BitmappedText = Game_ClassicMode || !Options_GetBool(OPT_USE_CHAT_FONT, false);
|
||||
Drawer2D.BlackTextShadows = Options_GetBool(OPT_BLACK_TEXT, false);
|
||||
|
||||
Options_Get(OPT_FONT_NAME, &font_candidates[0], "");
|
||||
if (Game_ClassicMode) font_candidates[0].length = 0;
|
||||
@ -1164,7 +1162,7 @@ static void Font_SysTextDraw(struct DrawTextArgs* args, struct Bitmap* bmp, int
|
||||
height = args->font->height;
|
||||
descender = TEXT_CEIL(face->size->metrics.descender);
|
||||
|
||||
col = Drawer2D_Cols['f'];
|
||||
col = Drawer2D.Colors['f'];
|
||||
if (shadow) col = GetShadowCol(col);
|
||||
|
||||
for (i = 0; i < text.length; i++) {
|
||||
|
@ -15,6 +15,17 @@ struct IGameComponent;
|
||||
struct StringsBuffer;
|
||||
extern struct IGameComponent Drawer2D_Component;
|
||||
|
||||
CC_VAR extern struct _Drawer2DData {
|
||||
/* Whether text should be drawn and measured using the currently set font bitmap. */
|
||||
/* If false, then text is instead draw using platform/system fonts. */
|
||||
cc_bool BitmappedText;
|
||||
/* Whether the shadows behind text (that uses shadows) is fully black. */
|
||||
cc_bool BlackTextShadows;
|
||||
/* List of all colours. (An A of 0 means the colour is not used) */
|
||||
BitmapCol Colors[DRAWER2D_MAX_COLS];
|
||||
} Drawer2D;
|
||||
|
||||
#define Drawer2D_GetCol(c) Drawer2D.Colors[(cc_uint8)c]
|
||||
void DrawTextArgs_Make(struct DrawTextArgs* args, STRING_REF const cc_string* text, struct FontDesc* font, cc_bool useShadow);
|
||||
void DrawTextArgs_MakeEmpty(struct DrawTextArgs* args, struct FontDesc* font, cc_bool useShadow);
|
||||
|
||||
@ -25,15 +36,6 @@ void Drawer2D_MakeBitmappedFont(struct FontDesc* desc, int size, int flags);
|
||||
/* Initialises the given font. Uses Drawer2D_MakeBitmappedFont or Font_MakeDefault depending on Drawer2D_BitmappedText. */
|
||||
CC_API void Drawer2D_MakeFont(struct FontDesc* desc, int size, int flags);
|
||||
|
||||
/* Whether text should be drawn and measured using the currently set font bitmap. */
|
||||
/* If false, then text is instead draw using platform/system fonts. */
|
||||
extern cc_bool Drawer2D_BitmappedText;
|
||||
/* Whether the shadows behind text (that uses shadows) is fully black. */
|
||||
extern cc_bool Drawer2D_BlackTextShadows;
|
||||
/* List of all colours. (An A of 0 means the colour is not used) */
|
||||
extern BitmapCol Drawer2D_Cols[DRAWER2D_MAX_COLS];
|
||||
#define Drawer2D_GetCol(c) Drawer2D_Cols[(cc_uint8)c]
|
||||
|
||||
/* Clamps the given rectangle to lie inside the bitmap. */
|
||||
/* Returns false if rectangle is completely outside bitmap's rectangle. */
|
||||
cc_bool Drawer2D_Clamp(struct Bitmap* bmp, int* x, int* y, int* width, int* height);
|
||||
|
@ -254,14 +254,14 @@ static void MakeNameTexture(struct Entity* e) {
|
||||
|
||||
Bitmap_AllocateClearedPow2(&bmp, width, height);
|
||||
{
|
||||
origWhiteCol = Drawer2D_Cols['f'];
|
||||
origWhiteCol = Drawer2D.Colors['f'];
|
||||
|
||||
Drawer2D_Cols['f'] = shadowCol;
|
||||
Drawer2D.Colors['f'] = shadowCol;
|
||||
Drawer2D_WithoutCols(&colorlessName, &name);
|
||||
args.text = colorlessName;
|
||||
Drawer2D_DrawText(&bmp, &args, NAME_OFFSET, NAME_OFFSET);
|
||||
|
||||
Drawer2D_Cols['f'] = origWhiteCol;
|
||||
Drawer2D.Colors['f'] = origWhiteCol;
|
||||
args.text = name;
|
||||
Drawer2D_DrawText(&bmp, &args, 0, 0);
|
||||
}
|
||||
|
@ -162,11 +162,11 @@ static void LButton_Draw(void* widget) {
|
||||
LButton_DrawBorder(w);
|
||||
LButton_DrawHighlight(w);
|
||||
|
||||
if (!w->hovered) Drawer2D_Cols['f'] = Drawer2D_Cols['7'];
|
||||
if (!w->hovered) Drawer2D.Colors['f'] = Drawer2D.Colors['7'];
|
||||
Drawer2D_DrawText(&Launcher_Framebuffer, &args,
|
||||
w->x + xOffset / 2, w->y + yOffset / 2);
|
||||
|
||||
if (!w->hovered) Drawer2D_Cols['f'] = Drawer2D_Cols['F'];
|
||||
if (!w->hovered) Drawer2D.Colors['f'] = Drawer2D.Colors['F'];
|
||||
Launcher_MarkDirty(w->x, w->y, w->width, w->height);
|
||||
}
|
||||
|
||||
@ -310,9 +310,9 @@ static void LInput_Draw(void* widget) {
|
||||
w->width - xBorder4, w->height - yBorder4);
|
||||
LInput_BlendBoxTop(w);
|
||||
|
||||
Drawer2D_Cols['f'] = Drawer2D_Cols['0'];
|
||||
Drawer2D.Colors['f'] = Drawer2D.Colors['0'];
|
||||
LInput_DrawText(w, &args);
|
||||
Drawer2D_Cols['f'] = Drawer2D_Cols['F'];
|
||||
Drawer2D.Colors['f'] = Drawer2D.Colors['F'];
|
||||
}
|
||||
|
||||
static Rect2D LInput_MeasureCaret(struct LInput* w) {
|
||||
|
@ -254,7 +254,7 @@ static void Launcher_Init(void) {
|
||||
Drawer2D_MakeFont(&Launcher_HintFont, 12, FONT_FLAGS_NONE);
|
||||
titleX = Display_ScaleX(4); titleY = Display_ScaleY(4);
|
||||
|
||||
Drawer2D_Cols['g'] = BitmapCol_Make(125, 125, 125, 255);
|
||||
Drawer2D.Colors['g'] = BitmapCol_Make(125, 125, 125, 255);
|
||||
Utils_EnsureDirectory("texpacks");
|
||||
Utils_EnsureDirectory("audio");
|
||||
}
|
||||
@ -291,8 +291,8 @@ void Launcher_Run(void) {
|
||||
#endif
|
||||
|
||||
Drawer2D_Component.Init();
|
||||
Drawer2D_BitmappedText = false;
|
||||
Drawer2D_BlackTextShadows = true;
|
||||
Drawer2D.BitmappedText = false;
|
||||
Drawer2D.BlackTextShadows = true;
|
||||
InitFramebuffer();
|
||||
|
||||
Options_Get(LOPT_USERNAME, &Game_Username, "");
|
||||
@ -501,9 +501,9 @@ void Launcher_TryLoadTexturePack(void) {
|
||||
|
||||
void Launcher_UpdateLogoFont(void) {
|
||||
Font_Free(&logoFont);
|
||||
Drawer2D_BitmappedText = (useBitmappedFont || Launcher_ClassicBackground) && hasBitmappedFont;
|
||||
Drawer2D.BitmappedText = (useBitmappedFont || Launcher_ClassicBackground) && hasBitmappedFont;
|
||||
Drawer2D_MakeFont(&logoFont, 32, FONT_FLAGS_NONE);
|
||||
Drawer2D_BitmappedText = false;
|
||||
Drawer2D.BitmappedText = false;
|
||||
}
|
||||
|
||||
/* Fills the given area using pixels from the source bitmap, by repeatedly tiling the bitmap. */
|
||||
|
@ -2864,9 +2864,9 @@ void ChatOptionsScreen_Show(void) {
|
||||
/*########################################################################################################################*
|
||||
*----------------------------------------------------GuiOptionsScreen-----------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
static void GuiOptionsScreen_GetShadows(cc_string* v) { Menu_GetBool(v, Drawer2D_BlackTextShadows); }
|
||||
static void GuiOptionsScreen_GetShadows(cc_string* v) { Menu_GetBool(v, Drawer2D.BlackTextShadows); }
|
||||
static void GuiOptionsScreen_SetShadows(const cc_string* v) {
|
||||
Drawer2D_BlackTextShadows = Menu_SetBool(v, OPT_BLACK_TEXT);
|
||||
Drawer2D.BlackTextShadows = Menu_SetBool(v, OPT_BLACK_TEXT);
|
||||
Event_RaiseVoid(&ChatEvents.FontChanged);
|
||||
}
|
||||
|
||||
@ -2882,9 +2882,9 @@ static void GuiOptionsScreen_SetInventory(const cc_string* v) { ChatOptionsScree
|
||||
static void GuiOptionsScreen_GetTabAuto(cc_string* v) { Menu_GetBool(v, Gui.TabAutocomplete); }
|
||||
static void GuiOptionsScreen_SetTabAuto(const cc_string* v) { Gui.TabAutocomplete = Menu_SetBool(v, OPT_TAB_AUTOCOMPLETE); }
|
||||
|
||||
static void GuiOptionsScreen_GetUseFont(cc_string* v) { Menu_GetBool(v, !Drawer2D_BitmappedText); }
|
||||
static void GuiOptionsScreen_GetUseFont(cc_string* v) { Menu_GetBool(v, !Drawer2D.BitmappedText); }
|
||||
static void GuiOptionsScreen_SetUseFont(const cc_string* v) {
|
||||
Drawer2D_BitmappedText = !Menu_SetBool(v, OPT_USE_CHAT_FONT);
|
||||
Drawer2D.BitmappedText = !Menu_SetBool(v, OPT_USE_CHAT_FONT);
|
||||
Event_RaiseVoid(&ChatEvents.FontChanged);
|
||||
}
|
||||
|
||||
|
@ -1202,7 +1202,7 @@ static void CPE_SetTextColor(cc_uint8* data) {
|
||||
if (code == '\0' || code == ' ' || code == 0xFF) return;
|
||||
if (code == '%' || code == '&') return;
|
||||
|
||||
Drawer2D_Cols[code] = c;
|
||||
Drawer2D.Colors[code] = c;
|
||||
Event_RaiseInt(&ChatEvents.ColCodeChanged, code);
|
||||
}
|
||||
|
||||
|
@ -652,7 +652,7 @@ static void TabListOverlay_ContextRecreated(void* screen) {
|
||||
struct TabListOverlay* s = (struct TabListOverlay*)screen;
|
||||
int size, id;
|
||||
|
||||
size = Drawer2D_BitmappedText ? 16 : 11;
|
||||
size = Drawer2D.BitmappedText ? 16 : 11;
|
||||
Drawer2D_MakeFont(&s->font, size, FONT_FLAGS_PADDING);
|
||||
s->namesCount = 0;
|
||||
|
||||
|
@ -2255,7 +2255,7 @@ static void SpecialInputWidget_UpdateColString(struct SpecialInputWidget* w) {
|
||||
|
||||
for (i = 0; i < DRAWER2D_MAX_COLS; i++) {
|
||||
if (i >= 'A' && i <= 'F') continue;
|
||||
if (!BitmapCol_A(Drawer2D_Cols[i])) continue;
|
||||
if (!BitmapCol_A(Drawer2D.Colors[i])) continue;
|
||||
|
||||
String_Append(&w->colString, '&'); String_Append(&w->colString, (char)i);
|
||||
String_Append(&w->colString, '%'); String_Append(&w->colString, (char)i);
|
||||
|
Loading…
x
Reference in New Issue
Block a user