+ DrawTextExt(drawto,
+ gi->x + border_x + gi->textarea.cursor_x * font_width,
+ gi->y + border_y + gi->textarea.cursor_y * font_height,
+ cursor_string,
+ font_nr, BLIT_INVERSE);
+ }
+ break;
+
+ case GD_TYPE_SELECTBOX:
+ {
+ int i;
+ char text[MAX_GADGET_TEXTSIZE + 1];
+ int font_nr = (pressed ? gi->font_active : gi->font);
+ int font_width = getFontWidth(font_nr);
+ int font_height = getFontHeight(font_nr);
+ int border_x = gi->border.xsize;
+ int border_y = gi->border.ysize;
+ int button = gi->border.xsize_selectbutton;
+ int width_inner = gi->border.width - button - 2 * border_x;
+ int box_width = gi->selectbox.width;
+ int box_height = gi->selectbox.height;
+
+ /* left part of gadget */
+ BlitBitmapOnBackground(gd->bitmap, drawto, gd->x, gd->y,
+ border_x, gi->height, gi->x, gi->y);
+
+ /* middle part of gadget */
+ for (i=0; i < gi->selectbox.size; i++)
+ BlitBitmapOnBackground(gd->bitmap, drawto, gd->x + border_x, gd->y,
+ font_width, gi->height,
+ gi->x + border_x + i * font_width, gi->y);
+
+ /* button part of gadget */
+ BlitBitmapOnBackground(gd->bitmap, drawto,
+ gd->x + border_x + width_inner, gd->y,
+ button, gi->height,
+ gi->x + gi->width - border_x - button, gi->y);
+
+ /* right part of gadget */
+ BlitBitmapOnBackground(gd->bitmap, drawto,
+ gd->x + gi->border.width - border_x, gd->y,
+ border_x, gi->height,
+ gi->x + gi->width - border_x, gi->y);
+
+ /* set text value */
+ strncpy(text, gi->selectbox.options[gi->selectbox.index].text,
+ gi->selectbox.size);
+ text[gi->selectbox.size] = '\0';
+
+ /* gadget text value */
+ DrawTextExt(drawto, gi->x + border_x, gi->y + border_y, text,
+ font_nr, BLIT_MASKED);
+
+ if (pressed)
+ {
+ if (!gi->selectbox.open)
+ {
+ gi->selectbox.open = TRUE;
+ gi->selectbox.stay_open = FALSE;
+ gi->selectbox.current_index = gi->selectbox.index;
+
+ /* save background under selectbox */
+ BlitBitmap(drawto, gfx.field_save_buffer,
+ gi->selectbox.x, gi->selectbox.y,
+ gi->selectbox.width, gi->selectbox.height,
+ gi->selectbox.x, gi->selectbox.y);
+ }
+
+ /* draw open selectbox */
+
+ /* top left part of gadget border */
+ BlitBitmapOnBackground(gd->bitmap, drawto, gd->x, gd->y,
+ border_x, border_y,
+ gi->selectbox.x, gi->selectbox.y);
+
+ /* top middle part of gadget border */
+ for (i=0; i < gi->selectbox.size; i++)
+ BlitBitmapOnBackground(gd->bitmap, drawto, gd->x + border_x, gd->y,
+ font_width, border_y,
+ gi->selectbox.x + border_x + i * font_width,
+ gi->selectbox.y);
+
+ /* top button part of gadget border */
+ BlitBitmapOnBackground(gd->bitmap, drawto,
+ gd->x + border_x + width_inner, gd->y,
+ button, border_y,
+ gi->selectbox.x + box_width -border_x -button,
+ gi->selectbox.y);
+
+ /* top right part of gadget border */
+ BlitBitmapOnBackground(gd->bitmap, drawto,
+ gd->x + gi->border.width - border_x, gd->y,
+ border_x, border_y,
+ gi->selectbox.x + box_width - border_x,
+ gi->selectbox.y);
+
+ /* left and right part of gadget border for each row */
+ for (i=0; i < gi->selectbox.num_values; i++)
+ {
+ BlitBitmapOnBackground(gd->bitmap, drawto, gd->x, gd->y + border_y,
+ border_x, font_height,
+ gi->selectbox.x,
+ gi->selectbox.y + border_y + i*font_height);
+ BlitBitmapOnBackground(gd->bitmap, drawto,
+ gd->x + gi->border.width - border_x,
+ gd->y + border_y,
+ border_x, font_height,
+ gi->selectbox.x + box_width - border_x,
+ gi->selectbox.y + border_y + i*font_height);
+ }
+
+ /* bottom left part of gadget border */
+ BlitBitmapOnBackground(gd->bitmap, drawto,
+ gd->x, gd->y + gi->height - border_y,
+ border_x, border_y,
+ gi->selectbox.x,
+ gi->selectbox.y + box_height - border_y);
+
+ /* bottom middle part of gadget border */
+ for (i=0; i < gi->selectbox.size; i++)
+ BlitBitmapOnBackground(gd->bitmap, drawto,
+ gd->x + border_x,
+ gd->y + gi->height - border_y,
+ font_width, border_y,
+ gi->selectbox.x + border_x + i * font_width,
+ gi->selectbox.y + box_height - border_y);
+
+ /* bottom button part of gadget border */
+ BlitBitmapOnBackground(gd->bitmap, drawto,
+ gd->x + border_x + width_inner,
+ gd->y + gi->height - border_y,
+ button, border_y,
+ gi->selectbox.x + box_width -border_x -button,
+ gi->selectbox.y + box_height - border_y);
+
+ /* bottom right part of gadget border */
+ BlitBitmapOnBackground(gd->bitmap, drawto,
+ gd->x + gi->border.width - border_x,
+ gd->y + gi->height - border_y,
+ border_x, border_y,
+ gi->selectbox.x + box_width - border_x,
+ gi->selectbox.y + box_height - border_y);
+
+ ClearRectangleOnBackground(drawto,
+ gi->selectbox.x + border_x,
+ gi->selectbox.y + border_y,
+ gi->selectbox.width - 2 * border_x,
+ gi->selectbox.height - 2 * border_y);
+
+ /* selectbox text values */
+ for (i=0; i < gi->selectbox.num_values; i++)
+ {
+ int mask_mode = BLIT_MASKED;
+
+ strncpy(text, gi->selectbox.options[i].text, gi->selectbox.size);
+ text[gi->selectbox.size] = '\0';
+
+ if (i == gi->selectbox.current_index)
+ {
+ FillRectangle(drawto,
+ gi->selectbox.x + border_x,
+ gi->selectbox.y + border_y + i * font_height,
+ gi->selectbox.width - 2 * border_x, font_height,
+ gi->selectbox.inverse_color);
+
+ /* prevent use of cursor graphic by drawing at least two chars */
+ strcat(text, " ");
+ text[gi->selectbox.size] = '\0';
+
+ mask_mode = BLIT_INVERSE;
+ }
+
+ DrawTextExt(drawto,
+ gi->selectbox.x + border_x,
+ gi->selectbox.y + border_y + i * font_height, text,
+ font_nr, mask_mode);
+ }
+
+ redraw_selectbox = TRUE;
+ }
+ else if (gi->selectbox.open)
+ {
+ gi->selectbox.open = FALSE;
+
+ /* redraw closed selectbox */
+ DrawGadget(gi, FALSE, FALSE);
+
+ /* restore background under selectbox */
+ BlitBitmap(gfx.field_save_buffer, drawto,
+ gi->selectbox.x, gi->selectbox.y,
+ gi->selectbox.width, gi->selectbox.height,
+ gi->selectbox.x, gi->selectbox.y);
+
+ redraw_selectbox = TRUE;
+ }