static int iSplitAction_CB(Ihandle* bar) { Ihandle* ih = bar->parent; IdrawCanvas* dc = iupDrawCreateCanvas(bar); iupDrawParentBackground(dc); if (ih->data->showgrip) { int i, w, h, x, y, count; unsigned char r = 160, g = 160, b = 160, bg_r, bg_g, bg_b; iupDrawGetSize(dc, &w, &h); iupStrToRGB(IupGetAttribute(ih, "COLOR"), &r, &g, &b); if (r+g+b > 3*190) { bg_r = 100; bg_g = 100; bg_b = 100; } else { bg_r = 255; bg_g = 255; bg_b = 255; } if (ih->data->orientation == ISPLIT_VERT) { x = ih->data->barsize/2-1; y = 2; count = (h-2)/5; } else { x = 2; y = ih->data->barsize/2-1; count = (w-2)/5; } for (i = 0; i < count; i++) { iupDrawRectangle(dc, x+1, y+1, x+2, y+2, bg_r, bg_g, bg_b, IUP_DRAW_FILL); iupDrawRectangle(dc, x, y, x+1, y+1, r, g, b, IUP_DRAW_FILL); if (ih->data->orientation == ISPLIT_VERT) y += 5; else x += 5; } } iupDrawFlush(dc); iupDrawKillCanvas(dc); return IUP_DEFAULT; }
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; }
static int iFlatButtonRedraw_CB(Ihandle* ih) { char *image = iupAttribGet(ih, "IMAGE"); char* title = iupAttribGet(ih, "TITLE"); int active = IupGetInt(ih, "ACTIVE"); /* native implementation */ int selected = iupAttribGetInt(ih, "VALUE"); char* fgcolor = iupAttribGetStr(ih, "FGCOLOR"); char* bgcolor = iupAttribGetStr(ih, "BGCOLOR"); char* bgimage = iupAttribGet(ih, "BACKIMAGE"); char* fgimage = iupAttribGet(ih, "FRONTIMAGE"); int border_width = ih->data->border_width; int draw_border = 0; int old_pressed = ih->data->pressed; IdrawCanvas* dc = iupDrawCreateCanvas(ih); iupDrawParentBackground(dc); if (!bgcolor) bgcolor = iupBaseNativeParentGetBgColorAttrib(ih); if (ih->data->pressed || selected) { char* presscolor = iupAttribGetStr(ih, "PSCOLOR"); if (presscolor) bgcolor = presscolor; draw_border = 1; if (!ih->data->pressed && (bgimage || image)) ih->data->pressed = 1; } else if (ih->data->highlight) { char* hlcolor = iupAttribGetStr(ih, "HLCOLOR"); if (hlcolor) bgcolor = hlcolor; draw_border = 1; } /* draw border - can still be disabled setting border_width=0 */ if (draw_border) { char* bordercolor = iupAttribGetStr(ih, "BORDERCOLOR"); iFlatButtonDrawBorder(dc, 0, ih->currentwidth - 1, 0, ih->currentheight - 1, border_width, bordercolor, bgcolor, active); } /* draw background */ if (bgimage) iFlatButtonDrawImage(ih, dc, border_width, border_width, "BACKIMAGE", bgimage, active); else iFlatButtonDrawBox(dc, border_width, ih->currentwidth - 1 - border_width, border_width, ih->currentheight - 1 - border_width, bgcolor, NULL, 1); /* always active */ iFlatButtonDrawIcon(ih, dc, border_width, border_width, ih->currentwidth - 2 * border_width, ih->currentheight - 2 * border_width, "IMAGE", image, title, fgcolor, bgcolor, active); if (fgimage) iFlatButtonDrawImage(ih, dc, border_width, border_width, "FRONTIMAGE", fgimage, active); else if (!image && !title) { int space = border_width + 2; iFlatButtonDrawBorder(dc, space, ih->currentwidth - 1 - space, space, ih->currentheight - 1 - space, 1, "0 0 0", bgcolor, active); space++; iFlatButtonDrawBox(dc, space, ih->currentwidth - 1 - space, space, ih->currentheight - 1 - space, fgcolor, bgcolor, active); } if (selected && !old_pressed && (bgimage || image)) ih->data->pressed = 0; if (ih->data->has_focus) iupDrawFocusRect(dc, border_width, border_width, ih->currentwidth - 2 * border_width, ih->currentheight - 2 * border_width); iupDrawFlush(dc); iupDrawKillCanvas(dc); return IUP_DEFAULT; }