void iFlatButtonDrawText(Ihandle* ih, IdrawCanvas* dc, int x, int y, const char* str, const char* color, const char* bgcolor, int active) { unsigned char r = 0, g = 0, b = 0; if (!color || !str || str[0] == 0) return; iupStrToRGB(color, &r, &g, &b); if (!active) { unsigned char bg_r = 0, bg_g = 0, bg_b = 0; iupStrToRGB(bgcolor, &bg_r, &bg_g, &bg_b); iupImageColorMakeInactive(&r, &g, &b, bg_r, bg_g, bg_b); } iupDrawText(dc, str, (int)strlen(str), x, y, r, g, b, IupGetAttribute(ih, "FONT")); }
static int iExpanderAction_CB(Ihandle* bar) { Ihandle *ih = bar->parent; IdrawCanvas *dc = iupDrawCreateCanvas(bar); unsigned char r=0, g=0, b=0; unsigned char bg_r=0, bg_g=0, bg_b=0; char* title = iupAttribGetStr(ih, "TITLE"); iupStrToRGB(iupBaseNativeParentGetBgColorAttrib(ih), &bg_r, &bg_g, &bg_b); iupStrToRGB(IupGetAttribute(ih, "FGCOLOR"), &r, &g, &b); iupDrawParentBackground(dc); if (ih->data->position == IEXPANDER_TOP && title) { /* left align everything */ int len; iupStrNextLine(title, &len); /* get the length of the first line */ iupDrawText(dc, title, len, IEXPAND_HANDLE_SIZE, 0, r, g, b, IupGetAttribute(ih, "FONT")); if (ih->data->highlight) iExpanderHighligh(&r, &g, &b); if (ih->data->state == IEXPANDER_CLOSE) iExpanderDrawArrow(dc, 1, 0, r, g, b, bg_r, bg_g, bg_b, IEXPANDER_RIGHT); else iExpanderDrawArrow(dc, 0, 0, r, g, b, bg_r, bg_g, bg_b, IEXPANDER_BOTTOM); } else { /* center align the arrow */ int x, y; if (ih->data->highlight) iExpanderHighligh(&r, &g, &b); switch(ih->data->position) { case IEXPANDER_LEFT: x = 0; y = (bar->currentheight - IEXPAND_HANDLE_SIZE)/2; if (ih->data->state == IEXPANDER_CLOSE) iExpanderDrawArrow(dc, x, y, r, g, b, bg_r, bg_g, bg_b, IEXPANDER_RIGHT); else iExpanderDrawArrow(dc, x, y, r, g, b, bg_r, bg_g, bg_b, IEXPANDER_LEFT); break; case IEXPANDER_TOP: x = (bar->currentwidth - IEXPAND_HANDLE_SIZE)/2; y = 0; if (ih->data->state == IEXPANDER_CLOSE) iExpanderDrawArrow(dc, x, y, r, g, b, bg_r, bg_g, bg_b, IEXPANDER_BOTTOM); else iExpanderDrawArrow(dc, x, y, r, g, b, bg_r, bg_g, bg_b, IEXPANDER_TOP); break; case IEXPANDER_RIGHT: x = 0; y = (bar->currentheight - IEXPAND_HANDLE_SIZE)/2; if (ih->data->state == IEXPANDER_CLOSE) iExpanderDrawArrow(dc, x, y, r, g, b, bg_r, bg_g, bg_b, IEXPANDER_LEFT); else iExpanderDrawArrow(dc, x, y, r, g, b, bg_r, bg_g, bg_b, IEXPANDER_RIGHT); break; case IEXPANDER_BOTTOM: x = (bar->currentwidth - IEXPAND_HANDLE_SIZE)/2; y = 0; if (ih->data->state == IEXPANDER_CLOSE) iExpanderDrawArrow(dc, x, y, r, g, b, bg_r, bg_g, bg_b, IEXPANDER_TOP); else iExpanderDrawArrow(dc, x, y, r, g, b, bg_r, bg_g, bg_b, IEXPANDER_BOTTOM); break; } } iupDrawFlush(dc); iupDrawKillCanvas(dc); return IUP_DEFAULT; }