+ switch (gi->type)
+ {
+ case GD_TYPE_NORMAL_BUTTON:
+ case GD_TYPE_RADIO_BUTTON:
+ XCopyArea(display, gd->pixmap, drawto, gc,
+ gd->x, gd->y, gi->width, gi->height, gi->x, gi->y);
+ break;
+
+ case GD_TYPE_TEXTINPUT:
+ {
+ int i;
+
+ /* left part of gadget */
+ XCopyArea(display, gd->pixmap, drawto, gc,
+ gd->x, gd->y,
+ gi->text_border, gi->height,
+ gi->x, gi->y);
+
+ /* middle part of gadget */
+ for (i=0; i<=gi->text_size; i++)
+ XCopyArea(display, gd->pixmap, drawto, gc,
+ gd->x + gi->text_border, gd->y,
+ FONT2_XSIZE, gi->height,
+ gi->x + gi->text_border + i * FONT2_XSIZE, gi->y);
+
+ /* right part of gadget */
+ XCopyArea(display, gd->pixmap, drawto, gc,
+ gd->x + ED_WIN_COUNT_XSIZE - gi->text_border, gd->y,
+ gi->text_border, gi->height,
+ gi->x + gi->width - gi->text_border, gi->y);
+
+ /* gadget text value */
+ DrawText(gi->x + gi->text_border, gi->y + gi->text_border,
+ gi->text_value, FS_SMALL, (pressed ? FC_GREEN : FC_YELLOW));
+
+ /* draw cursor, if active */
+ DrawText(gi->x + gi->text_border + strlen(gi->text_value)*FONT2_XSIZE,
+ gi->y + gi->text_border,
+ (pressed ? "<" : " "),
+ FS_SMALL, FC_RED);
+ }
+ break;
+
+ default:
+ return;
+ }
+
+ if (direct)
+ XCopyArea(display, drawto, window, gc,
+ gi->x, gi->y, gi->width, gi->height, gi->x, gi->y);
+ else
+ redraw_mask |= REDRAW_ALL;
+}
+
+void ClickOnGadget(struct GadgetInfo *gi)
+{
+ /* simulate releasing mouse button over last gadget, if still pressed */
+ if (button_status)
+ HandleGadgets(-1, -1, 0);
+
+ /* simulate pressing mouse button over specified gadget */
+ HandleGadgets(gi->x, gi->y, 1);
+
+ /* simulate releasing mouse button over specified gadget */
+ HandleGadgets(gi->x, gi->y, 0);