widget* widget_menu_new(void) { int2 p = {0,0}, s = {200, 30}; widget *w = widget_new(p, s); w->draw = widget_rect_draw; return w; }
/************************************************************************** ... **************************************************************************/ struct widget *create_checkbox(struct gui_layer *pDest, bool state, Uint32 flags) { struct widget *pCBox = widget_new(); struct CHECKBOX *pTmp = fc_calloc(1, sizeof(struct CHECKBOX)); if (state) { pCBox->theme = pTheme->CBOX_Sell_Icon; } else { pCBox->theme = pTheme->CBOX_Unsell_Icon; } set_wflag(pCBox, (WF_FREE_STRING | WF_FREE_GFX | WF_FREE_PRIVATE_DATA | flags)); set_wstate(pCBox, FC_WS_DISABLED); set_wtype(pCBox, WT_CHECKBOX); pCBox->mod = KMOD_NONE; pCBox->dst = pDest; pTmp->state = state; pTmp->pTRUE_Theme = pTheme->CBOX_Sell_Icon; pTmp->pFALSE_Theme = pTheme->CBOX_Unsell_Icon; pCBox->private_data.cbox = pTmp; checkbox_baseclass_redraw = pCBox->redraw; pCBox->redraw = redraw_icon; pCBox->size.w = pCBox->theme->w / 4; pCBox->size.h = pCBox->theme->h; return pCBox; }
Patcher* patcher_construct (GType object_type) { Patcher* self; MenuBar* _tmp0_; Widget* _tmp1_; self = (Patcher*) g_type_create_instance (object_type); self->priv->menubar = (_tmp0_ = menu_bar_new (), _menu_bar_unref0 (self->priv->menubar), _tmp0_); self->priv->widget = (_tmp1_ = widget_new (), _widget_unref0 (self->priv->widget), _tmp1_); return self; }
widget* widget_text_new(int x, int y, char* label) { int2 p = {x, y}, s = {0 ,30}; widget *w = widget_new(p, s); w->data = label; w->draw = widget_text_draw; w->noClick = 1; // w->free = widget_button_free; return w; }
widget* widget_button_new(int x, int y, char* label) { int2 p = {x, y}, s = {200 ,30}; widget *w = widget_new(p, s); w->data = label; w->draw = widget_button_draw; w->onclick = widget_button_onclick; w->release = widget_button_release; // w->free = widget_button_free; return w; }
widget* widget_window_new(int x, int y, char* title) { int2 p = {x, y}, s = {400, 300}; widget *w = widget_new(p, s); w->draw = widget_window_draw; w->data = hcopy(title); w->click = widget_window_click; w->onclick = widget_window_onclick; w->release = widget_window_release; w->free = widget_button_free; return w; }
widget* widget_list_new(int x, int y, char **list, int count) { int2 p = {x,y}, s = {150, 150}; widget *w = widget_new(p, s); w->draw = widget_list_draw; w->click = widget_list_click; w->onclick = widget_list_onclick; w->data = list; w->free = widget_list_free; w->count = count; w->selected = -1; return w; }
rectangle_t * rectangle_new(widget_t * parent) { rectangle_t * obj = (rectangle_t *) calloc(1, sizeof(struct s_rectangle_instance)); MEMORY_ALLOC_CHECK_RETURN(obj, NULL); obj->log = my_log_new("Rectangle", MESSAGE); obj->glyph = widget_new(parent, obj, (void (*)(void *, const area_t *))draw, (void(*)(void *))abstract_delete); obj->fill_color = color(0,0,0); obj->is_filled = false; obj->border_color = color(0,0,0); obj->border_tickness = 1; obj->has_border = false; obj->corner_radius = 0; return obj; }
Widget* tk_widget(int type, real x, real y, int (*f)(), void *d) { Widget *w = widget_new(type, x, y, 0.2, f); if (wi >= wn) error("tk"); w->id = wi++; wa[w->id] = w; mvwindow(w->id, 0, 1, 0, 1); mvviewport(w->id, w->xo, w->xo + w->xs, w->yo, w->yo + w->ys); switch (type) { case TK_BUTTON: button_make(w, d); break; default: error("tk"); break; } return w; }
/************************************************************************** ... **************************************************************************/ struct widget * create_textcheckbox(struct gui_layer *pDest, bool state, SDL_String16 *pStr, Uint32 flags) { struct widget *pCBox; struct CHECKBOX *pTmp; SDL_Surface *pSurf, *pIcon; struct widget *pTmpWidget; if (!pStr) { return create_checkbox(pDest, state, flags); } pTmp = fc_calloc(1, sizeof(struct CHECKBOX)); if (state) { pSurf = pTheme->CBOX_Sell_Icon; } else { pSurf = pTheme->CBOX_Unsell_Icon; } pIcon = create_icon_from_theme(pSurf, 0); pCBox = create_iconlabel(pIcon, pDest, pStr, (flags | WF_FREE_PRIVATE_DATA)); pStr->style &= ~SF_CENTER; pCBox->theme = pSurf; FREESURFACE(pIcon); set_wtype(pCBox, WT_TCHECKBOX); pTmp->state = state; pTmp->pTRUE_Theme = pTheme->CBOX_Sell_Icon; pTmp->pFALSE_Theme = pTheme->CBOX_Unsell_Icon; pCBox->private_data.cbox = pTmp; pTmpWidget = widget_new(); /* we can't use pCBox->redraw here, because it is of type iconlabel */ textcheckbox_baseclass_redraw = pTmpWidget->redraw; FREEWIDGET(pTmpWidget); pCBox->redraw = redraw_textcheckbox; return pCBox; }
/************************************************************************** Create ( malloc ) Edit Widget structure. Edit Theme graphic is taken from pTheme->Edit surface; Text is taken from 'pString16'. 'length' parametr determinate width of Edit rect. This function determinate future size of Edit ( width, high ) and save this in: pWidget->size rectangle ( SDL_Rect ) function return pointer to allocated Edit Widget. **************************************************************************/ struct widget * create_edit(SDL_Surface *pBackground, struct gui_layer *pDest, SDL_String16 *pString16, Uint16 length, Uint32 flags) { SDL_Rect buf = {0, 0, 0, 0}; struct widget *pEdit = widget_new(); pEdit->theme = pTheme->Edit; pEdit->theme2 = pBackground; /* FIXME: make somewhere use of it */ pEdit->string16 = pString16; set_wflag(pEdit, (WF_FREE_STRING | WF_FREE_GFX | flags)); set_wstate(pEdit, FC_WS_DISABLED); set_wtype(pEdit, WT_EDIT); pEdit->mod = KMOD_NONE; baseclass_redraw = pEdit->redraw; pEdit->redraw = redraw_edit; if (pString16) { pEdit->string16->style |= SF_CENTER; buf = str16size(pString16); buf.h += adj_size(4); } length = MAX(length, buf.w + adj_size(10)); correct_size_bcgnd_surf(pTheme->Edit, &length, &buf.h); pEdit->size.w = length; pEdit->size.h = buf.h; if(pDest) { pEdit->dst = pDest; } else { pEdit->dst = add_gui_layer(pEdit->size.w, pEdit->size.h); } return pEdit; }
/************************************************************************** Create ( malloc ) Icon2 Widget ( flat Button ) **************************************************************************/ struct widget * create_icon2(SDL_Surface *pIcon, struct gui_layer *pDest, Uint32 flags) { struct widget *pIcon_Widget = widget_new(); pIcon_Widget->theme = pIcon; set_wflag(pIcon_Widget, (WF_FREE_STRING | WF_FREE_GFX | flags)); set_wstate(pIcon_Widget, FC_WS_DISABLED); set_wtype(pIcon_Widget, WT_ICON2); pIcon_Widget->mod = KMOD_NONE; pIcon_Widget->dst = pDest; baseclass_redraw = pIcon_Widget->redraw; pIcon_Widget->redraw = redraw_icon2; if (pIcon) { pIcon_Widget->size.w = pIcon->w + adj_size(4); pIcon_Widget->size.h = pIcon->h + adj_size(4); } return pIcon_Widget; }
int gui_init(int argc, char **argv) { if (gui == NULL) { gui = (struct _GuiCore*)malloc(sizeof(struct _GuiCore)); if (gui == NULL) return -1; } memset(gui, 0, sizeof(struct _GuiCore) ); gui->running = 1; gui->need_update = 1; register_widget("Window" , &window_ops ); register_widget("ListBox" , &listbox_ops ); register_widget("ListBoxItem", &listboxitem_ops ); register_widget("Button" , &button_ops ); register_widget("Image" , &image_ops ); register_widget("label" , &label_ops ); register_widget("NoteBook" , ¬ebook_ops ); register_widget("MessageBox" , &msgbox_ops ); // register_widget("MessageBox" , &messagebox_ops ); gui->signal_hash = hash_new(1, signal_Free ); gui->font_hash = hash_new(1, FontDesc_Free ); gui->image_hash = hash_new(9, ImageDesc_Free ); gui->theme_hash = hash_new(1, Theme_Free ); gui->win_stack = stack_new(NULL); gui->root_widget = widget_new("root", "Window", NULL); gui->argc = argc; gui->argv = argv; if (gui_load("./gui.xml") != 0 ) return -1; if (sdl_init(gui->width, gui->height, gui->bpp) != 0) return -1; return 0; }
/************************************************************************** Create ( malloc ) Icon (theme)Button Widget structure. Icon graphic is taken from 'pIcon' surface (don't change with button changes ); Button Theme graphic is taken from pTheme->Button surface; Text is taken from 'pString16'. This function determinate future size of Button ( width, high ) and save this in: pWidget->size rectangle ( SDL_Rect ) function return pointer to allocated Button Widget. **************************************************************************/ struct widget * create_icon_button(SDL_Surface *pIcon, struct gui_layer *pDest, SDL_String16 *pStr, Uint32 flags) { SDL_Rect buf = {0, 0, 0, 0}; int w = 0, h = 0; struct widget *pButton; if (!pIcon && !pStr) { return NULL; } pButton = widget_new(); pButton->theme = pTheme->Button; pButton->theme2 = pIcon; pButton->string16 = pStr; set_wflag(pButton, (WF_FREE_STRING | flags)); set_wstate(pButton, FC_WS_DISABLED); set_wtype(pButton, WT_I_BUTTON); pButton->mod = KMOD_NONE; pButton->dst = pDest; baseclass_redraw = pButton->redraw; pButton->redraw = redraw_ibutton; if (pStr) { pButton->string16->style |= SF_CENTER; /* if BOLD == true then longest wight */ if (!(pStr->style & TTF_STYLE_BOLD)) { pStr->style |= TTF_STYLE_BOLD; buf = str16size(pStr); pStr->style &= ~TTF_STYLE_BOLD; } else { buf = str16size(pStr); } w = MAX(w, buf.w); h = MAX(h, buf.h); } if (pIcon) { if (pStr) { if ((flags & WF_ICON_UNDER_TEXT) || (flags & WF_ICON_ABOVE_TEXT)) { w = MAX(w, pIcon->w + adj_size(2)); h = MAX(h, buf.h + pIcon->h + adj_size(4)); } else { w = MAX(w, buf.w + pIcon->w + adj_size(20)); h = MAX(h, pIcon->h + adj_size(2)); } } else { w = MAX(w, pIcon->w + adj_size(2)); h = MAX(h, pIcon->h + adj_size(2)); } } else { w += adj_size(10); h += adj_size(2); } correct_size_bcgnd_surf(pTheme->Button, &w, &h); pButton->size.w = w; pButton->size.h = h; return pButton; }