diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-01-04 15:09:14 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-01-04 15:09:14 +0000 |
commit | ae4e9076051a736e2bbbce91e7fd58cb27448f24 (patch) | |
tree | 13dc16f764fff92b5f47fd75ce135493fa6374dd /src/gui/gui.cpp | |
parent | dd2d81690185e789d435d5b1839c04bd8e77dea4 (diff) | |
download | mana-ae4e9076051a736e2bbbce91e7fd58cb27448f24.tar.gz mana-ae4e9076051a736e2bbbce91e7fd58cb27448f24.tar.bz2 mana-ae4e9076051a736e2bbbce91e7fd58cb27448f24.tar.xz mana-ae4e9076051a736e2bbbce91e7fd58cb27448f24.zip |
Removed large parts of old GUI code and improved layout of a few dialogs.
Diffstat (limited to 'src/gui/gui.cpp')
-rw-r--r-- | src/gui/gui.cpp | 733 |
1 files changed, 153 insertions, 580 deletions
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index e2a22df3..52b4bc85 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -119,18 +119,18 @@ int gui_update(DIALOG_PLAYER *player) { void loadButtonSkin() { char **tokens; - int tokenCount; - int gridx[4]; - int gridy[4]; - int a = 0; - int x,y,mode; + int tokenCount; + int gridx[4]; + int gridy[4]; + int a = 0; + int x, y, mode; tokens = get_config_argv("button", "gridx", &tokenCount); - for (a=0; a < 4; a++) { + for (a = 0; a < 4; a++) { gridx[a] = atoi(tokens[a]); } tokens = get_config_argv("button", "gridy", &tokenCount); - for (a=0; a < 4; a++) { + for (a = 0; a < 4; a++) { gridy[a] = atoi(tokens[a]); } @@ -148,10 +148,10 @@ void loadButtonSkin() { gui__repository[GUI_BMP_OFS_BUTTON + 2] = (BITMAP *)gui_gfx[3].dat; gui__repository[GUI_BMP_OFS_BUTTON + 3] = (BITMAP *)gui_gfx[1].dat; - for (mode=0; mode < 4; mode++) { - a=0; - for (y=0; y < 3; y++) { - for (x=0; x < 3; x++) { + for (mode = 0; mode < 4; mode++) { + a = 0; + for (y = 0; y < 3; y++) { + for (x = 0; x < 3; x++) { gui_skin.button.background[mode].grid[a] = create_sub_bitmap( gui__repository[GUI_BMP_OFS_BUTTON + mode], gridx[x] , gridy[y], @@ -240,18 +240,18 @@ void loadCheckboxSkin() { void loadTextboxSkin() { char **tokens; - int tokenCount; - int gridx[4]; - int gridy[4]; - int a = 0; - int x,y; + int tokenCount; + int gridx[4]; + int gridy[4]; + int a = 0; + int x, y; tokens = get_config_argv("textbox", "gridx", &tokenCount); - for (a=0; a < 4; a++) { + for (a = 0; a < 4; a++) { gridx[a] = atoi(tokens[a]); } tokens = get_config_argv("textbox", "gridy", &tokenCount); - for (a=0; a < 4; a++) { + for (a = 0; a < 4; a++) { gridy[a] = atoi(tokens[a]); } @@ -262,11 +262,9 @@ void loadTextboxSkin() { gui__repository[GUI_BMP_OFS_TEXTBOX] = (BITMAP *)gui_gfx[9].dat; - - - a=0; - for (y=0; y < 3; y++) { - for (x=0; x < 3; x++) { + a = 0; + for (y = 0; y < 3; y++) { + for (x = 0; x < 3; x++) { gui_skin.textbox.bg.grid[a] = create_sub_bitmap( gui__repository[GUI_BMP_OFS_TEXTBOX], gridx[x] , gridy[y], @@ -279,18 +277,18 @@ void loadTextboxSkin() { void loadListboxSkin() { char **tokens; - int tokenCount; - int gridx[4]; - int gridy[4]; - int a = 0; - int x,y; + int tokenCount; + int gridx[4]; + int gridy[4]; + int a = 0; + int x, y; tokens = get_config_argv("listbox", "gridx", &tokenCount); - for (a=0; a < 4; a++) { + for (a = 0; a < 4; a++) { gridx[a] = atoi(tokens[a]); } tokens = get_config_argv("listbox", "gridy", &tokenCount); - for (a=0; a < 4; a++) { + for (a = 0; a < 4; a++) { gridy[a] = atoi(tokens[a]); } @@ -303,12 +301,12 @@ void loadListboxSkin() { tokens = get_config_argv("listbox", "textcol_disabled", &tokenCount); gui_skin.listbox.textcolor[3] = makecol(atoi(tokens[0]),atoi(tokens[1]),atoi(tokens[2])); - gui__repository[GUI_BMP_OFS_LISTBOX+0] = (BITMAP *)gui_gfx[6].dat; - gui__repository[GUI_BMP_OFS_LISTBOX+1] = (BITMAP *)gui_gfx[10].dat; + gui__repository[GUI_BMP_OFS_LISTBOX + 0] = (BITMAP*)gui_gfx[6].dat; + gui__repository[GUI_BMP_OFS_LISTBOX + 1] = (BITMAP*)gui_gfx[10].dat; - a=0; - for (y=0; y < 3; y++) { - for (x=0; x < 3; x++) { + a = 0; + for (y = 0; y < 3; y++) { + for (x = 0; x < 3; x++) { gui_skin.listbox.bg.grid[a] = create_sub_bitmap( gui__repository[GUI_BMP_OFS_LISTBOX], gridx[x] , gridy[y], @@ -319,16 +317,16 @@ void loadListboxSkin() { } tokens = get_config_argv("listbox", "vscroll_gridx", &tokenCount); - for (a=0; a < 4; a++) { + for (a = 0; a < 4; a++) { gridx[a] = atoi(tokens[a]); } tokens = get_config_argv("listbox", "vscroll_gridy", &tokenCount); - for (a=0; a < 4; a++) { + for (a = 0; a < 4; a++) { gridy[a] = atoi(tokens[a]); } - a=0; - for (y=0; y < 3; y++) { - for (x=0; x < 3; x++) { + a = 0; + for (y = 0; y < 3; y++) { + for (x = 0; x < 3; x++) { gui_skin.listbox.vscroll.grid[a] = create_sub_bitmap( gui__repository[GUI_BMP_OFS_LISTBOX+1], gridx[x] , gridy[y], @@ -377,26 +375,26 @@ void loadPlusSkin() { void loadDialogSkin() { char **tokens; - int tokenCount; - int gridx[4]; - int gridy[4]; - int a = 0; - int x,y; + int tokenCount; + int gridx[4]; + int gridy[4]; + int a = 0; + int x, y; tokens = get_config_argv("dialog", "gridx", &tokenCount); - for (a=0; a < 4; a++) { + for (a = 0; a < 4; a++) { gridx[a] = atoi(tokens[a]); } tokens = get_config_argv("dialog", "gridy", &tokenCount); - for (a=0; a < 4; a++) { + for (a = 0; a < 4; a++) { gridy[a] = atoi(tokens[a]); } gui__repository[GUI_BMP_OFS_DIALOG] = (BITMAP *)gui_gfx[5].dat; - a=0; - for (y=0; y < 3; y++) { - for (x=0; x < 3; x++) { + a = 0; + for (y = 0; y < 3; y++) { + for (x = 0; x < 3; x++) { gui_skin.dialog.bg.grid[a] = create_sub_bitmap( gui__repository[GUI_BMP_OFS_DIALOG], gridx[x] , gridy[y], @@ -407,7 +405,9 @@ void loadDialogSkin() { } } -void draw_skinned_rect(BITMAP*dst, LexSkinnedRect *skin, int x, int y,int w, int h) { +void draw_skinned_rect(BITMAP*dst, LexSkinnedRect *skin, + int x, int y, int w, int h) +{ BITMAP **grid = skin->grid; int w0 = grid[0]->w; @@ -479,14 +479,14 @@ void gui_shutdown(void) { int a, b; /* Button */ - for (a=0; a < 3; a++) { - for (b=0; b < 9 ; b++) { + for (a = 0; a < 3; a++) { + for (b = 0; b < 9 ; b++) { destroy_bitmap(gui_skin.button.background[a].grid[b]); } - } + /* Slider */ - for (a=0; a < 3; a++) { + for (a = 0; a < 3; a++) { destroy_bitmap(gui_skin.slider.hSlider[a]); destroy_bitmap(gui_skin.slider.vSlider[a]); } @@ -505,14 +505,11 @@ void gui_shutdown(void) { destroy_bitmap(gui_skin.radiobutton.disabled); destroy_bitmap(gui_skin.radiobutton.disabled_checked); - for (a=0; a < GUI_BMP_COUNT; a++) { + for (a = 0; a < GUI_BMP_COUNT; a++) { destroy_bitmap(gui__repository[a]); } } -/* - * Draw text for gui widgets - */ int gui_text(BITMAP *bmp, AL_CONST char *s, int x, int y, int color, int centre) { char tmp[1024]; int hline_pos = -1; @@ -556,15 +553,14 @@ int gui_text(BITMAP *bmp, AL_CONST char *s, int x, int y, int color, int centre) } int tmw_text_proc(int msg, DIALOG *d, int c) { - if (msg==MSG_DRAW) { + if (msg == MSG_DRAW) { gui_text(gui_bitmap, (char *)d->dp, d->x, d->y, d->fg, FALSE); } return D_O_K; } - -int tmw_button_proc(int msg, DIALOG *d, int c) { - +int tmw_button_proc(int msg, DIALOG *d, int c) +{ int col = 0; int ofs = 0; int ret = D_O_K; @@ -586,539 +582,116 @@ int tmw_button_proc(int msg, DIALOG *d, int c) { draw_skinned_rect(gui_bitmap, &gui_skin.button.background[0], d->x, d->y, d->w, d->h); col = gui_skin.button.textcolor[0]; } - gui_text(gui_bitmap, (const char *)d->dp, d->x+d->w/2+ofs, d->y+d->h/2-text_height(font)/2+ofs, col, TRUE); - ret = D_O_K; - } else { - /*if(msg==MSG_CLICK) { - if(d->d1==1)((int)d->dp2) + 1; - else if(d->d1==2)((int)d->dp2) - 1; - }*/ - - ret = d_button_proc(msg,d,c); + gui_text(gui_bitmap, (const char *)d->dp, d->x+d->w/2+ofs, d->y+d->h/2-text_height(font)/2+ofs, col, TRUE); + ret = D_O_K; + } else { + /* + if (msg == MSG_CLICK) { + if (d->d1 == 1) ((int)d->dp2) + 1; + else if (d->d1 == 2) ((int)d->dp2) - 1; + } + */ + + ret = d_button_proc(msg,d,c); } return ret; } -int tmw_radio_proc(int msg, DIALOG *d, int c) { - BITMAP *box = NULL; - int x, y; - int tx, ty, l; - int col = 0; +int tmw_dialog_proc(int msg, DIALOG *d, int c) { + int x, y; - if (msg == MSG_DRAW) { - rectfill(gui_bitmap, d->x, d->y, d->x + d->w, d->y+d->h, d->bg); - if (d->flags & D_SELECTED) { - if (d->flags & D_DISABLED) { - box = gui_skin.radiobutton.disabled_checked; + switch (msg) { + case MSG_CLICK: + if (mouse_y<d->y + gui_skin.dialog.bg.grid[1]->h) { + d->d1 = mouse_x - d->x; + d->d2 = mouse_y - d->y; + } + break; + case MSG_DRAW: + if((mouse_b & 1) && (d->d1 >= 0) && (d->d2 >= 0)) { + x = mouse_x - d->d1; + y = mouse_y - d->d2; + if (x < 15) { + x = 0; + position_mouse(d->d1, mouse_y); + } + if (y < 15) { + y = 0; + position_mouse(mouse_x, d->d2); + } + if (x + d->w >= SCREEN_W - 15) { + x = SCREEN_W - d->w; + position_mouse(x+d->d1, mouse_y); + } + if (y + d->h >= SCREEN_H - 15) { + y = SCREEN_H - d->h; + position_mouse(mouse_x, y + d->d2); + } + position_dialog(d, x, y); } else { - box = gui_skin.radiobutton.checked; + d->d1 = -1; + d->d2 = -1; } - } else if (d->flags & D_DISABLED) { - box = gui_skin.radiobutton.disabled; - } else { - box = gui_skin.radiobutton.normal; - } - - if (d->flags & D_DISABLED) { - col = gui_skin.radiobutton.textcolor[1]; - } else { - col = gui_skin.radiobutton.textcolor[0]; - } - - if (d->dp != NULL) { - l = gui_strlen((const char *)d->dp); - } else { - l = 0; - } - - if (d->d2 != 0) { - x = d->x; - tx = x + box->w + box->w/2; - } else { - x = d->x + d->w - box->w; - tx = x - box->w/2 - l; - } - y = d->y + (d->h - box->h)/ 2; - ty = d->y + (d->h - text_height(font)) / 2; - - masked_blit(box, gui_bitmap, 0, 0, x, y, box->w, box->h); - if (d->dp != NULL) { - gui_text(gui_bitmap, (const char *)d->dp, tx, ty, col, 0); - } + draw_skinned_rect(gui_bitmap, &gui_skin.dialog.bg, + d->x, d->y, d->w, d->h); + textprintf_centre_ex(gui_bitmap, font, + d->x + d->w/2, + d->y + (gui_skin.dialog.bg.grid[1]->h - text_height(font)) / 2, + d->fg, -1, "%s", (char*)d->dp); - } else { - return d_radio_proc(msg, d, c); + break; } return D_O_K; } - -int tmw_list_proc(int msg, DIALOG *d, int c) { - static int ignoreRedraw = FALSE; - int itemCount = 0; - int firstItem = d->d2; - int lastItem = 0; - int selectedItem = d->d1; - int x,y,delta; - int a, col; - int w, h = 0; - int cl, cr, cb, ct; - int th = text_height(font); - - int vscroll = 0; - int sliderh = 10; - int slidery = 0; - - (*(getfuncptr)d->dp)(-1, &itemCount); - w = d->w - gui_skin.listbox.bg.grid[0]->w - gui_skin.listbox.bg.grid[2]->w; - h = d->h - gui_skin.listbox.bg.grid[1]->h - gui_skin.listbox.bg.grid[7]->h; - lastItem = MIN(itemCount-1, firstItem + h / text_height(font)); - - if (msg == MSG_DRAW) { - if (ignoreRedraw) { - return D_O_K; - } - rectfill(gui_bitmap, d->x, d->y, d->x + d->w, d->y+d->h, d->bg); - draw_skinned_rect(gui_bitmap, &gui_skin.listbox.bg, d->x, d->y, d->w, d->h); - (*(getfuncptr)d->dp)(-1, &itemCount); - vscroll = (h/th) < (itemCount-1); - if (vscroll) { - w = d->w - 17 - gui_skin.listbox.bg.grid[0]->w; - draw_skinned_rect(gui_bitmap, &gui_skin.listbox.bg, d->x+d->w-15, d->y+1, 14, d->h-2); - sliderh = MAX(((d->h-2)* (h / th)) / itemCount, gui_skin.listbox.bg.grid[0]->h*2); - slidery = ((d->h-2-sliderh) * firstItem) / (itemCount); - slidery+= d->y+1; - draw_skinned_rect(gui_bitmap, &gui_skin.listbox.vscroll, d->x+d->w-13, slidery, 11, sliderh); - } - - if (gui_bitmap->clip) { - cl = gui_bitmap->cl; - ct = gui_bitmap->ct; - cr = gui_bitmap->cr; - cb = gui_bitmap->cb; - } else { - cl=ct=0; - cr=gui_bitmap->w; - cb=gui_bitmap->h; - } - x = d->x + gui_skin.listbox.bg.grid[0]->w; - y = d->y + gui_skin.listbox.bg.grid[0]->h; - set_clip_rect(gui_bitmap, x,y, x+w, y+h); - if (d->flags & D_DISABLED) { - col = gui_skin.listbox.textcolor[3]; - for (a=firstItem; a < lastItem; a++) { - textprintf_ex(gui_bitmap, font, x, y, col, -1, (*(getfuncptr)d->dp)(a, 0)); - y += text_height(font); - } - } else { - for (a=firstItem; a <= lastItem; a++) { - if (a==d->d1) { - col = gui_skin.listbox.textcolor[1]; - rectfill(gui_bitmap, x, y, x+w, y+text_height(font)-1, gui_skin.listbox.textcolor[2]); - } else { - col = gui_skin.listbox.textcolor[0]; - } - textprintf_ex(gui_bitmap, font, x, y, col, -1, (*(getfuncptr)d->dp)(a, 0)); - y += text_height(font); - } - } - set_clip_rect(gui_bitmap, cl, ct, cr, cb); - } else if (msg == MSG_CLICK) { - x = d->x + gui_skin.listbox.bg.grid[0]->w; - y = d->y + gui_skin.listbox.bg.grid[0]->h; - sliderh = MAX(((d->h-2)* (h / th)) / itemCount, gui_skin.listbox.bg.grid[0]->h*2); - //sliderh = ((d->h-2)* (h / th)) / itemCount; - slidery = ((d->h-2-sliderh) * firstItem) / (itemCount); - slidery+= d->y+1; - if (mouse_x > (d->x + d->w - 14) && mouse_x < (d->x+d->w-1)) { - // Ok, scroll bar - if (mouse_y >= slidery && mouse_y < slidery + sliderh) { - delta= mouse_y - slidery; - while (mouse_b) { - a = mouse_y - delta - d->y -1; - a *= itemCount; - a /= (d->h-2); - a = MID(0, a, itemCount- h/th); - if (a != d->d2) { - d->d2 = a; - scare_mouse(); - object_message(d, MSG_DRAW, 0); - unscare_mouse(); - } - slidery = ((d->h-2) * firstItem) / (itemCount); - slidery+= d->y+1; - } - } else if (mouse_y < slidery) { - a = d->d2 - (h/th)+1; - a = MID(0, a, itemCount- h/th); - - d->d2 = a; - scare_mouse(); - object_message(d, MSG_DRAW, 0); - unscare_mouse(); - while (mouse_b) { - } - } else if (mouse_y > slidery + sliderh) { - a = d->d2 + (h/th)-1; - a = MID(0, a, itemCount- h/th); - d->d2 = a; - scare_mouse(); - object_message(d, MSG_DRAW, 0); - unscare_mouse(); - while (mouse_b) { - } - } - } else if (mouse_x >= x && mouse_x < x+w && mouse_y >= y && mouse_y < y+h) { - while (mouse_b) { - a = firstItem + (mouse_y-y) / text_height(font); - if (a <= lastItem && a != selectedItem) { - d->d1 = selectedItem = a; - scare_mouse(); - object_message(d, MSG_DRAW, 0); - unscare_mouse(); - } - } - } - } else { - ignoreRedraw = (msg == MSG_GOTFOCUS || msg == MSG_LOSTFOCUS); - a = d_list_proc(msg, d, c); - if (a == D_USED_CHAR) { - if (d->d1 < d->d2) { - if (d->d1 > 0) { - d->d1 = d->d2; - } - } else if (d->d1 > d->d2 + h/th -1) { - d->d2 = d->d1 - h/th + 1; - } - } - return a; - } - return D_O_K; -} -int tmw_plus_proc(int msg, DIALOG *d, int c) -{ -//d->d1 = 0; -bool draw = false; - -if(mouse_b & 1) - { - if(d->x+d->w > mouse_x && d->x < mouse_x && d->y+d->h > mouse_y && d->y < mouse_y) - if(d->d2==1) - { - //d->d1 = 1; - (*(int(__cdecl *)(void *, int))d->dp)(NULL, d->d1); - masked_blit(gui_skin.plus.bg.grid[1], gui_bitmap, 0, 0, d->x, d->y, gui_bitmap->w, gui_bitmap->h); - draw = true; - } else { - masked_blit(gui_skin.plus.bg.grid[0], gui_bitmap, 0, 0, d->x, d->y, gui_bitmap->w, gui_bitmap->h); - draw = true; - } - } else { - if (!d->d2) { - //disable - masked_blit(gui_skin.plus.bg.grid[2], gui_bitmap, 0, 0, d->x, d->y, gui_bitmap->w, gui_bitmap->h); - draw = true; - } - } - if(!draw) - masked_blit(gui_skin.plus.bg.grid[0], gui_bitmap, 0, 0, d->x, d->y, gui_bitmap->w, gui_bitmap->h); - - -return D_O_K; -} - -/* Dialog box with left centered head */ -int tmw_dialog_proc(int msg, DIALOG *d, int c) { - int x, y; - - switch(msg) { - - case MSG_CLICK: - if(mouse_y<d->y+gui_skin.dialog.bg.grid[1]->h) { - d->d1 = mouse_x - d->x; - d->d2 = mouse_y - d->y; - } - break; - case MSG_DRAW: - if((mouse_b & 1)&&(d->d1>=0)&&(d->d2>=0)) { - x = mouse_x-d->d1; - y = mouse_y-d->d2; - if(x<15) { - x=0; - position_mouse(d->d1, mouse_y); - } - if(y<15) { - y=0; - position_mouse(mouse_x, d->d2); - } - if(x+d->w>=SCREEN_W-15) { - x=SCREEN_W-d->w; - position_mouse(x+d->d1, mouse_y); - } - if(y+d->h>=SCREEN_H-15) { - y=SCREEN_H-d->h; - position_mouse(mouse_x, y+d->d2); - } - position_dialog(d, x, y); - } else { - d->d1 = -1; - d->d2 = -1; - } - draw_skinned_rect(gui_bitmap, &gui_skin.dialog.bg, d->x, d->y, d->w, d->h); - - textprintf_centre_ex(gui_bitmap, font, - d->x + d->w/2, - d->y + (gui_skin.dialog.bg.grid[1]->h - text_height(font))/2, d->fg, -1, "%s", (char*)d->dp); - - break; - } - return D_O_K; -} - - -// Helper function to draw a scrollable bar -void _gui_draw_scrollable_frame(DIALOG *d, int listsize, int offset, int height, int fg_color, int bg) { - int i, len; - int xx, yy; - - /* create and draw the scrollbar */ - i = ((d->h-5) * height + listsize/2) / listsize; - xx = d->x+d->w-10; - yy = d->y; - - if (offset > 0) { - len = (((d->h-5) * offset) + listsize/2) / listsize; - } else len = 0; - if (yy+i < d->y+d->h-3) { - draw_skinned_rect(gui_bitmap, &gui_skin.listbox.vscroll, xx, yy+len, 10, i); - } else { - draw_skinned_rect(gui_bitmap, &gui_skin.listbox.vscroll, xx, yy, 10, d->h-3); - } -} - -/* _gui_draw_textbox: - * Helper function to draw a textbox object. - */ -void _gui_draw_textbox(char *thetext, int *listsize, int draw, int offset, - int wword, int tabsize, int x, int y, int w, int h, - int disabled, int fore, int deselect, int disable) -{ - int fg = fore; - int y1 = y+4; - int x1; - int len; - int ww = w-6; - char s[16]; - char text[16]; - char space[16]; - char *printed = text; - char *scanned = text; - char *oldscan = text; - char *ignore = NULL; - char *tmp, *ptmp; - int width; - int line = 0; - int i = 0; - int noignore; - - usetc(s+usetc(s, '.'), 0); - usetc(text+usetc(text, ' '), 0); - usetc(space+usetc(space, ' '), 0); - - /* find the correct text */ - if (thetext != NULL) { - printed = thetext; - scanned = thetext; - } - - /* choose the text color */ - if (disabled) - fg = disable; - - /* loop over the entire string */ - while (1) { - width = 0; - - /* find the next break */ - while (ugetc(scanned)) { - /* check for a forced break */ - if (ugetc(scanned) == '\n') { - scanned += uwidth(scanned); - - /* we are done parsing the line end */ - break; - } - - /* the next character length */ - usetc(s+usetc(s, ugetc(scanned)), 0); - len = text_length(font, s); - - /* modify length if its a tab */ - if (ugetc(s) == '\t') - len = tabsize * text_length(font, space); - - /* check for the end of a line by excess width of next char */ - if (width+len >= ww) { - /* we have reached end of line do we go back to find start */ - if (wword) { - /* remember where we were */ - oldscan = scanned; - noignore = FALSE; - - /* go backwards looking for start of word */ - while (!uisspace(ugetc(scanned))) { - /* don't wrap too far */ - if (scanned == printed) { - /* the whole line is filled, so stop here */ - tmp = ptmp = scanned; - while (ptmp != oldscan) { - ptmp = tmp; - tmp += uwidth(tmp); - } - scanned = ptmp; - noignore = TRUE; - break; - } - /* look further backwards to wrap */ - tmp = ptmp = printed; - while (tmp < scanned) { - ptmp = tmp; - tmp += uwidth(tmp); - } - scanned = ptmp; - } - /* put the space at the end of the line */ - if (!noignore) { - ignore = scanned; - scanned += uwidth(scanned); - } - else - ignore = NULL; - - /* check for endline at the convenient place */ - if (ugetc(scanned) == '\n') - scanned += uwidth(scanned); - } - /* we are done parsing the line end */ - break; - } - - /* the character can be added */ - scanned += uwidth(scanned); - width += len; - } - - /* check if we are to print it */ - if ((draw) && (line >= offset) && (y1+text_height(font) < (y+h-3))) { - x1 = x+4; - - /* the initial blank bit */ - //rectfill(gui_bitmap, x+2, y1, x1-1, y1+text_height(font), deselect); - - /* print up to the marked character */ - while (printed != scanned) { - /* do special stuff for each charater */ - switch (ugetc(printed)) { - - case '\r': - case '\n': - /* don't print endlines in the text */ - break; - - /* possibly expand the tabs */ - case '\t': - for (i=0; i<tabsize; i++) { - usetc(s+usetc(s, ' '), 0); - textprintf_ex(gui_bitmap, font, x1, y1, fg, -1, s); - x1 += text_length(font, s); - } - break; - - /* print a normal character */ - default: - if (printed != ignore) { - usetc(s+usetc(s, ugetc(printed)), 0); - textprintf_ex(gui_bitmap, font, x1, y1, fg, -1, s); - x1 += text_length(font, s); - } - } - - /* goto the next character */ - printed += uwidth(printed); - } - /* the last blank bit */ - /*if (x1 <= x+w-3) - rectfill(gui_bitmap, x1, y1, x+w-3, y1+alfont_text_height(font)-1, deselect);*/ - - /* print the line end */ - y1 += text_height(font); - } - printed = scanned; - - /* we have done a line */ - line++; - - /* check if we are at the end of the string */ - if (!ugetc(printed)) { - /* the under blank bit */ - /*if (draw) - rectfill(gui_bitmap, x+1, y1, x+w-3, y+h-1, deselect);*/ - - /* tell how many lines we found */ - *listsize = line; - return; - } - } -} - void ok(const char *title, const char *message) { -DIALOG alert_dialog[] = { - /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */ - { tmw_dialog_proc, 0, 0, 0, 60, 0, -1, 0, 0, 0, 0, (void *)title, NULL, NULL }, - { tmw_text_proc, 2, 22, 0, 0, 0, 0, 0, 0, 0, 0, (void *)message, NULL, NULL }, - { tmw_button_proc, 0, 40, 44, 18, 0, -1, 'o', D_EXIT, -1, 0, (char *)"&Ok", NULL, NULL }, - { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }}; - - BITMAP *temp = gui_bitmap; - gui_bitmap = screen; - show_mouse(screen); - alert_dialog[0].w = text_length(font, message)+4; - alert_dialog[1].w = text_length(font, message); - alert_dialog[1].h = text_height(font); - alert_dialog[2].x = text_length(font, message)/2-22; - position_dialog(alert_dialog, 400-alert_dialog[0].w/2, 270); - do_dialog(alert_dialog, 2); - show_mouse(NULL); - gui_bitmap = temp; + DIALOG alert_dialog[] = { + /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */ + { tmw_dialog_proc, 0, 0, 0, 60, 0, -1, 0, 0, 0, 0, (void *)title, NULL, NULL }, + { tmw_text_proc, 2, 22, 0, 0, 0, 0, 0, 0, 0, 0, (void *)message, NULL, NULL }, + { tmw_button_proc, 0, 40, 44, 18, 0, -1, 'o', D_EXIT, -1, 0, (char *)"&Ok", NULL, NULL }, + { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL } + }; + + BITMAP *temp = gui_bitmap; + gui_bitmap = screen; + show_mouse(screen); + alert_dialog[0].w = text_length(font, message) + 4; + alert_dialog[1].w = text_length(font, message); + alert_dialog[1].h = text_height(font); + alert_dialog[2].x = text_length(font, message) / 2 - 22; + position_dialog(alert_dialog, 400 - alert_dialog[0].w / 2, 270); + do_dialog(alert_dialog, 2); + show_mouse(NULL); + gui_bitmap = temp; } unsigned int yes_no(const char *title, const char *message) { - unsigned int ret; - DIALOG alert_dialog[] = { - /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */ - { tmw_dialog_proc, 0, 0, 0, 60, 0, -1, 0, 0, 0, 0, (void *)title, NULL, NULL }, - { tmw_text_proc, 2, 22, 0, 0, 0, 0, 0, 0, 0, 0, (void *)message, NULL, NULL }, - { tmw_button_proc, 0, 40, 44, 18, 0, -1, 'o', D_EXIT, -1, 0, (char *)"&Yes", NULL, NULL }, - { tmw_button_proc, 0, 40, 44, 18, 0, -1, 'o', D_EXIT, -1, 0, (char *)"&No", NULL, NULL }, - { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }}; - - BITMAP *temp = gui_bitmap; - gui_bitmap = screen; - show_mouse(screen); - int width = text_length(font, message)+4; - if(width<100)width=100; - alert_dialog[0].w = width; - alert_dialog[1].w = text_length(font, message); - alert_dialog[1].h = text_height(font); - alert_dialog[2].x = width/2-46; - alert_dialog[2].x = width/2+2; - position_dialog(alert_dialog, 400-width/2, 270); - ret = do_dialog(alert_dialog, 3); - show_mouse(NULL); - gui_bitmap = temp; - return ret-2; + unsigned int ret; + DIALOG alert_dialog[] = { + /* (dialog proc) (x) (y) (w) (h) (fg) (bg) (key) (flags) (d1) (d2) (dp) (dp2) (dp3) */ + { tmw_dialog_proc, 0, 0, 0, 60, 0, -1, 0, 0, 0, 0, (void *)title, NULL, NULL }, + { tmw_text_proc, 2, 22, 0, 0, 0, 0, 0, 0, 0, 0, (void *)message, NULL, NULL }, + { tmw_button_proc, 0, 40, 44, 18, 0, -1, 'o', D_EXIT, -1, 0, (char *)"&Yes", NULL, NULL }, + { tmw_button_proc, 0, 40, 44, 18, 0, -1, 'o', D_EXIT, -1, 0, (char *)"&No", NULL, NULL }, + { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL } + }; + + BITMAP *temp = gui_bitmap; + gui_bitmap = screen; + show_mouse(screen); + int width = text_length(font, message) + 4; + if (width < 100) width = 100; + alert_dialog[0].w = width; + alert_dialog[1].w = text_length(font, message); + alert_dialog[1].h = text_height(font); + alert_dialog[2].x = width / 2 - 46; + alert_dialog[2].x = width / 2 + 2; + position_dialog(alert_dialog, 400 - width / 2, 270); + ret = do_dialog(alert_dialog, 3); + show_mouse(NULL); + gui_bitmap = temp; + return ret - 2; } - - |