gi->height - 2 * border_y);
// gadget text value
- DrawTextBuffer(gi->x + border_x, gi->y + border_y, gi->textarea.value,
- font_nr, gi->textarea.xsize, -1, gi->textarea.ysize, 0,
- BLIT_ON_BACKGROUND, FALSE, FALSE, FALSE);
+ DrawTextArea(gi->x + border_x, gi->y + border_y, gi->textarea.value,
+ font_nr, gi->textarea.xsize, -1, gi->textarea.ysize, 0,
+ BLIT_ON_BACKGROUND, FALSE, FALSE, FALSE);
cursor_letter = gi->textarea.value[gi->textarea.cursor_position];
cursor_string[0] = (cursor_letter != '\0' ? cursor_letter : ' ');
boolean HandleGadgets(int mx, int my, int button)
{
- static unsigned int pressed_delay = 0;
- static unsigned int pressed_delay_value = GADGET_FRAME_DELAY;
+ static DelayCounter pressed_delay = { GADGET_FRAME_DELAY };
static int last_button = 0;
static int last_mx = 0, last_my = 0;
static int pressed_mx = 0, pressed_my = 0;
(button != 0 && last_gi != NULL && new_gi == last_gi);
gadget_pressed_delay_reached =
- DelayReached(&pressed_delay, pressed_delay_value);
+ DelayReached(&pressed_delay);
gadget_released = (release_event && last_gi != NULL);
gadget_released_inside = (gadget_released && new_gi == last_gi);
ResetDelayCounter(&pressed_delay);
// start gadget delay with longer delay after first click on gadget
- pressed_delay_value = GADGET_FRAME_DELAY_FIRST;
+ pressed_delay.value = GADGET_FRAME_DELAY_FIRST;
}
else // gadget hold pressed for some time
{
// after first repeated gadget click, continue with shorter delay value
- pressed_delay_value = GADGET_FRAME_DELAY;
+ pressed_delay.value = GADGET_FRAME_DELAY;
}
if (gi->type & GD_TYPE_SCROLLBAR && !gadget_dragging)
strcpy(text, gi->textinput.value);
strcpy(&gi->textinput.value[cursor_pos], &text[cursor_pos + 1]);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
+ }
+ else if (key == KSYM_Home && cursor_pos > 0)
+ {
+ gi->textinput.cursor_position = 0;
+
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
+ }
+ else if (key == KSYM_End && cursor_pos < text_length)
+ {
+ gi->textinput.cursor_position = text_length;
+
DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
}
int text_length = strlen(gi->textarea.value);
int area_ysize = gi->textarea.ysize;
int cursor_x_pref = gi->textarea.cursor_x_preferred;
+ int cursor_x = gi->textarea.cursor_x;
int cursor_y = gi->textarea.cursor_y;
int cursor_pos = gi->textarea.cursor_position;
char letter = getCharFromKey(key);
strcpy(text, gi->textarea.value);
strcpy(&gi->textarea.value[cursor_pos], &text[cursor_pos + 1]);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
+ }
+ else if (key == KSYM_Home && cursor_x > 0)
+ {
+ setTextAreaCursorPosition(gi, gi->textarea.cursor_position - cursor_x);
+
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
+ }
+ else if (key == KSYM_End && cursor_pos < text_length)
+ {
+ int last_cursor_pos = cursor_pos;
+
+ while (gi->textarea.value[cursor_pos] != '\0' &&
+ gi->textarea.value[cursor_pos] != '\n')
+ cursor_pos++;
+
+ setTextAreaCursorPosition(gi, gi->textarea.cursor_position + cursor_pos -
+ last_cursor_pos);
+
DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
}