我在main.c
文件中有以下代码,它将样式成员分配给按钮结构体:
struct SCGUI_Button button = scgui_new_button();
button.style = (SCGUI_ButtonStyle) {
.background_color = new_color(255, 0, 0),
.hover = {
.font_family = "res/Cursive.ttf",
.background_color = new_color(255, 0, 0) //I defined the color RIGHT HERE (button.style.hover.background_color)
}
};
//Update function (for hover)
scgui_draw_button(&button, CENTER);
在我定义这些函数的button.c
文件中,我有以下代码:
struct SCGUI_Button scgui_new_button() {
//Default initialization values
struct SCGUI_Button button = {
.style = {
.background_color = new_color(200, 200, 200),
.font_color = new_color(0, 0, 0),
.font_family = "res/Roboto.ttf",
.font_size = 24,
.hover = {
.background_color = new_color(220, 220, 220),
.font_color = new_color(20, 20, 20),
.font_family = "res/Roboto.ttf",
.font_size = 24
}
}
};
return button;
}
void scgui_draw_button(struct SCGUI_Button *self) {
if (button_hovered(self->area, app.mouse_pos.x, app.mouse_pos.y)) {
self->state.hovered = true;
//Attempt to set actual button styles to hover styles (either provided in main.c, or if not provided, set to the default values in the button initialization function)
self->style = (SCGUI_ButtonStyle) {
.background_color = self->style.hover.background_color,
.font_color = self->style.hover.font_color,
.font_family = self->style.hover.font_family == NULL ? "res/Roboto.ttf" : self->style.hover.font_family,
.font_size = self->style.hover.font_size == 0 ? 24 : self->style.hover.font_size,
};
}
}
然而,问题就在这里。悬停功能肯定有效,但设置样式则不行。每当我把鼠标悬停在按钮上时,按钮就会变黑。这里我的假设是,未初始化的颜色成员默认为0,因此所有样式都被设置为RGB(0,0,0)。然而,为什么这些结构体样式成员没有被正确设置,对我来说是一个谜。你能不能像我在scgui_draw_button()
函数中那样设置一个结构体样式?我做错了什么?
1条答案
按热度按时间u0sqgete1#
当你使用复合文字进行结构赋值时,所有没有显式给定值的字段都被归零:
赋值后,
button.style.font_family
是空指针,button.style.font_size
是0
(button.style.font_color
没有变化,但这主要是偶然的)。悬停部分中的字体颜色和字体大小也被归零。您需要在第一个片段中执行单个成员赋值:
这保留了未另行提及的成员。