Subversion Repositories Kolibri OS

Rev

Rev 6456 | Rev 6470 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6391 ashmew2 1
#ifndef KOLIBRI_EDITBOX_H
2
#define KOLIBRI_EDITBOX_H
3
 
4
#include "kolibri_colors.h"
5
 
6457 punk_joker 6
typedef struct {
6391 ashmew2 7
  unsigned int width;
8
    unsigned int left;
9
    unsigned int top;
10
    unsigned int color;
11
    unsigned int shift_color;
12
    unsigned int focus_border_color;
13
    unsigned int blur_border_color;
14
    unsigned int text_color;
15
    unsigned int max;
16
    char *text;
17
    unsigned int mouse_variable;
18
    unsigned int flags;
19
 
20
/* The following struct members are not used by the users of API */
21
    unsigned int size;
22
    unsigned int pos;
23
    unsigned int offset;
24
    unsigned int cl_curs_x;
25
    unsigned int cl_curs_y;
26
    unsigned int shift;
27
    unsigned int shift_old;
6457 punk_joker 28
}edit_box;
6391 ashmew2 29
 
30
/* Initializes an Editbox with sane settings, sufficient for most use.
31
   This will let you create a box and position it somewhere on the screen.
32
   The text_buffer is a pointer to a character array and needs to be as long as
33
   AT LEAST MAX_CHARS + 1.If the text_buffer is smaller, it will crash if user
34
   types more characters than what will fit into the text buffer.
35
 
36
   Allocating buffer space automatically so that programmer can be carefree now.
37
   This also automatically adjusts the size of edit box so that it can hold enough characters.
38
 
39
   All you need is :
40
 
41
   tlx,tly = Coordinates of the beginning of the edit box.
42
   max_chars = Limit of number of characters user can enter into edit box.
43
*/
44
 
6457 punk_joker 45
edit_box* kolibri_new_edit_box(unsigned int tlx, unsigned int tly, unsigned int max_chars)
6391 ashmew2 46
{
47
    unsigned int PIXELS_PER_CHAR = 7;
6457 punk_joker 48
    edit_box *new_textbox = (edit_box *)malloc(sizeof(edit_box));
6391 ashmew2 49
    char *text_buffer = (char *)calloc(max_chars + 1, sizeof(char));
50
 
51
    /* Update blur_border_color and shift_color from box_lib.mac macro */
52
    /* edit_boxes_set_sys_color */
53
 
54
    new_textbox -> width = max_chars * PIXELS_PER_CHAR;
55
    new_textbox -> left = tlx;
56
    new_textbox -> top = tly;
57
    new_textbox -> color = 0xFFFFFF; /* Always make white edit boxes */
58
    new_textbox -> shift_color = 0x6a9480;
59
    new_textbox -> focus_border_color = kolibri_color_table.color_work_graph;
60
    new_textbox -> blur_border_color = 0x6a9480;
61
    new_textbox -> text_color = kolibri_color_table.color_work_text; /* Always black text when typing */
62
    new_textbox -> max = max_chars;
63
    new_textbox -> text = text_buffer;
64
    new_textbox -> mouse_variable = 1; /* let the mouse take control? */
6393 punk_joker 65
    new_textbox -> flags = 0x00000000;
6391 ashmew2 66
    /* If these lines are uncommented, the executable will crash for no reason at start */
67
    /* Even though these lines are not ever read it ALWAYS causes a crash, even crashes MTDBG. What gives? */
68
 
69
    new_textbox -> size = 0;
70
    new_textbox -> pos = 0;
71
    new_textbox -> offset = 0;
72
    new_textbox -> cl_curs_x = 0;
73
    new_textbox -> cl_curs_y = 0;
74
    new_textbox -> shift = 0;
75
    new_textbox -> shift_old = 0;
76
 
77
    return new_textbox;
78
}
79
 
6457 punk_joker 80
extern void (*edit_box_draw)(edit_box *) __attribute__((__stdcall__));
6391 ashmew2 81
 
82
/* editbox_key is a wrapper written in assembly to handle key press events for editboxes */
83
/* because inline assembly in GCC is a PITA and interferes with the EAX (AH) register */
84
/* which edit_box_key requires */
6457 punk_joker 85
extern void editbox_key(edit_box *) __attribute__((__stdcall__));
6391 ashmew2 86
 
6457 punk_joker 87
extern void (*edit_box_mouse)(edit_box *) __attribute__((__stdcall__));
6393 punk_joker 88
extern volatile unsigned press_key;
6391 ashmew2 89
#endif /* KOLIBRI_EDITBOX_H */