Fixed the tests

This commit is contained in:
David Capello 2007-12-05 22:00:19 +00:00
parent 7a0913c2cf
commit c50df75059
7 changed files with 321 additions and 313 deletions

View File

@ -55,7 +55,7 @@ int main (int argc, char *argv[])
ji_set_standard_theme(); ji_set_standard_theme();
jmanager_refresh_screen(); jmanager_refresh_screen();
ji_mouse_set_cursor(JI_CURSOR_NORMAL); jmouse_set_cursor(JI_CURSOR_NORMAL);
jalert("Normal==First Alert||&Ok"); jalert("Normal==First Alert||&Ok");
jalert ("Error" jalert ("Error"

View File

@ -32,7 +32,7 @@
#include <allegro.h> #include <allegro.h>
#include <stdio.h> #include <stdio.h>
#include "jinete/jinete/jinete.h" #include "jinete/jinete.h"
static JWidget check, radio[12]; static JWidget check, radio[12];

View File

@ -35,11 +35,11 @@
FONT *my_font = NULL; FONT *my_font = NULL;
void set_my_font (void); void set_my_font(void);
void set_my_palette (void); void set_my_palette(void);
JTheme my_theme_new (void); JTheme my_theme_new(void);
int main (int argc, char *argv[]) int main(int argc, char *argv[])
{ {
JWidget manager, window, box1, box2, box3, box4, box5, button1, button2; JWidget manager, window, box1, box2, box3, box4, box5, button1, button2;
JWidget label_username, label_password; JWidget label_username, label_password;
@ -47,145 +47,145 @@ int main (int argc, char *argv[])
JTheme my_theme; JTheme my_theme;
/* Allegro stuff */ /* Allegro stuff */
allegro_init (); allegro_init();
set_color_depth (16); set_color_depth(16);
if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 320, 200, 0, 0) < 0) { if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 320, 200, 0, 0) < 0) {
if (set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) < 0) { if (set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) < 0) {
set_color_depth (8); set_color_depth(8);
if (set_gfx_mode (GFX_AUTODETECT_WINDOWED, 320, 200, 0, 0) < 0) { if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 320, 200, 0, 0) < 0) {
if (set_gfx_mode (GFX_AUTODETECT, 320, 200, 0, 0) < 0) { if (set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) < 0) {
allegro_message ("%s\n", allegro_error); allegro_message("%s\n", allegro_error);
return 1; return 1;
} }
} }
} }
} }
install_timer (); install_timer();
install_keyboard (); install_keyboard();
install_mouse (); install_mouse();
/* Jinete initialization */ /* Jinete initialization */
manager = jmanager_new (); manager = jmanager_new();
set_my_font (); set_my_font();
set_my_palette (); set_my_palette();
/* change to custom theme */ /* change to custom theme */
my_theme = my_theme_new (); my_theme = my_theme_new();
ji_set_theme (my_theme); ji_set_theme(my_theme);
window = jwindow_new ("Login"); window = jwindow_new("Login");
box1 = jbox_new (JI_VERTICAL); box1 = jbox_new(JI_VERTICAL);
box2 = jbox_new (JI_HORIZONTAL); box2 = jbox_new(JI_HORIZONTAL);
box3 = jbox_new (JI_VERTICAL | JI_HOMOGENEOUS); box3 = jbox_new(JI_VERTICAL | JI_HOMOGENEOUS);
box4 = jbox_new (JI_VERTICAL | JI_HOMOGENEOUS); box4 = jbox_new(JI_VERTICAL | JI_HOMOGENEOUS);
box5 = jbox_new (JI_HORIZONTAL | JI_HOMOGENEOUS); box5 = jbox_new(JI_HORIZONTAL | JI_HOMOGENEOUS);
label_username = jlabel_new ("Username"); label_username = jlabel_new("Username");
label_password = jlabel_new ("Password"); label_password = jlabel_new("Password");
entry_username = jentry_new (32, ""); entry_username = jentry_new(32, "");
entry_password = jentry_new (32, ""); entry_password = jentry_new(32, "");
button1 = jbutton_new ("&OK"); button1 = jbutton_new("&OK");
button2 = jbutton_new ("&Cancel"); button2 = jbutton_new("&Cancel");
jentry_password (entry_password, TRUE); jentry_password(entry_password, TRUE);
jwidget_magnetic (entry_username, TRUE); jwidget_magnetic(entry_username, TRUE);
jwidget_magnetic (button1, TRUE); jwidget_magnetic(button1, TRUE);
jwidget_add_child (window, box1); jwidget_add_child(window, box1);
jwidget_add_child (box1, box2); jwidget_add_child(box1, box2);
jwidget_add_child (box1, box5); jwidget_add_child(box1, box5);
jwidget_add_child (box2, box3); jwidget_add_child(box2, box3);
jwidget_add_child (box2, box4); jwidget_add_child(box2, box4);
jwidget_add_child (box3, label_username); jwidget_add_child(box3, label_username);
jwidget_add_child (box3, label_password); jwidget_add_child(box3, label_password);
jwidget_add_child (box4, entry_username); jwidget_add_child(box4, entry_username);
jwidget_add_child (box4, entry_password); jwidget_add_child(box4, entry_password);
jwidget_add_child (box5, button1); jwidget_add_child(box5, button1);
jwidget_add_child (box5, button2); jwidget_add_child(box5, button2);
jwindow_sizeable (window, FALSE); jwindow_sizeable(window, FALSE);
again:; again:;
jwindow_open_fg (window); jwindow_open_fg(window);
if (jwindow_get_killer (window) == button1) { if (jwindow_get_killer(window) == button1) {
if (*jwidget_get_text (entry_username) && if (*jwidget_get_text(entry_username) &&
*jwidget_get_text (entry_password)) *jwidget_get_text(entry_password))
jalert ("Login Successful" jalert("Login Successful"
"==Welcome \"%s\"" "==Welcome \"%s\""
"||&Done", "||&Done",
jwidget_get_text (entry_username)); jwidget_get_text(entry_username));
else { else {
jalert ("Login Failed" jalert("Login Failed"
"==Try to use some username==and password" "==Try to use some username==and password"
"||&OK"); "||&OK");
goto again; goto again;
} }
} }
jwidget_free (window); jwidget_free(window);
jtheme_free (my_theme); jtheme_free(my_theme);
jmanager_free (manager); jmanager_free(manager);
if (my_font) if (my_font)
destroy_font (my_font); destroy_font(my_font);
return 0; return 0;
} }
END_OF_MAIN (); END_OF_MAIN();
void set_my_font (void) void set_my_font(void)
{ {
char buf[512], argv0[512]; char buf[512], argv0[512];
get_executable_name (argv0, sizeof (argv0)); get_executable_name(argv0, sizeof(argv0));
replace_filename (buf, argv0, "zerohour.ttf", sizeof (buf)); replace_filename(buf, argv0, "zerohour.ttf", sizeof(buf));
my_font = ji_font_load_ttf (buf); my_font = ji_font_load_ttf(buf);
if (my_font) { if (my_font) {
font = my_font; font = my_font;
ji_font_set_size (font, 8); ji_font_set_size(font, 8);
} }
} }
void set_my_palette (void) void set_my_palette(void)
{ {
char buf[512], argv0[512]; char buf[512], argv0[512];
BITMAP *bmp; BITMAP *bmp;
PALETTE pal; PALETTE pal;
get_executable_name (argv0, sizeof (argv0)); get_executable_name(argv0, sizeof(argv0));
replace_filename (buf, argv0, "pal17.pcx", sizeof (buf)); replace_filename(buf, argv0, "pal17.pcx", sizeof(buf));
bmp = load_bitmap (buf, pal); bmp = load_bitmap(buf, pal);
if (bmp) { if (bmp) {
set_palette (pal); set_palette(pal);
rgb_map = malloc (sizeof (RGB_MAP)); rgb_map = malloc(sizeof(RGB_MAP));
create_rgb_table (rgb_map, pal, NULL); create_rgb_table(rgb_map, pal, NULL);
} }
} }
/**********************************************************************/ /**********************************************************************/
/* Theme */ /* Theme */
static void theme_regen (void); static void theme_regen(void);
static void theme_set_cursor (int type); static BITMAP *theme_set_cursor(int type, int *focus_x, int *focus_y);
static void theme_init_widget (JWidget widget); static void theme_init_widget(JWidget widget);
static JRegion theme_get_window_mask (JWidget widget); static JRegion theme_get_window_mask(JWidget widget);
static void theme_draw_box (JWidget widget); static void theme_draw_box(JWidget widget);
static void theme_draw_button (JWidget widget); static void theme_draw_button(JWidget widget);
static void theme_draw_entry (JWidget widget); static void theme_draw_entry(JWidget widget);
static void theme_draw_label (JWidget widget); static void theme_draw_label(JWidget widget);
static void theme_draw_window (JWidget widget); static void theme_draw_window(JWidget widget);
static void draw_rect (JRect rect, int color, bool invert); static void draw_rect(JRect rect, int color, bool invert);
static void draw_edge (JRect rect, int color, bool invert); static void draw_edge(JRect rect, int color, bool invert);
static void draw_entry_cursor (JWidget widget, int x, int y); static void draw_entry_cursor(JWidget widget, int x, int y);
JTheme my_theme_new (void) JTheme my_theme_new(void)
{ {
JTheme theme; JTheme theme;
theme = jtheme_new (); theme = jtheme_new();
if (!theme) if (!theme)
return NULL; return NULL;
@ -198,26 +198,26 @@ JTheme my_theme_new (void)
theme->init_widget = theme_init_widget; theme->init_widget = theme_init_widget;
theme->get_window_mask = theme_get_window_mask; theme->get_window_mask = theme_get_window_mask;
jtheme_set_method (theme, JI_BOX, theme_draw_box); jtheme_set_method(theme, JI_BOX, theme_draw_box);
jtheme_set_method (theme, JI_BUTTON, theme_draw_button); jtheme_set_method(theme, JI_BUTTON, theme_draw_button);
jtheme_set_method (theme, JI_ENTRY, theme_draw_entry); jtheme_set_method(theme, JI_ENTRY, theme_draw_entry);
jtheme_set_method (theme, JI_LABEL, theme_draw_label); jtheme_set_method(theme, JI_LABEL, theme_draw_label);
jtheme_set_method (theme, JI_WINDOW, theme_draw_window); jtheme_set_method(theme, JI_WINDOW, theme_draw_window);
return theme; return theme;
} }
static void theme_regen (void) static void theme_regen(void)
{ {
ji_get_theme ()->desktop_color = makecol (0, 128, 196); ji_get_theme()->desktop_color = makecol(0, 128, 196);
} }
static void theme_set_cursor (int type) static BITMAP *theme_set_cursor(int type, int *focus_x, int *focus_y)
{ {
set_mouse_sprite (NULL); /* use default Allegro cursor */ return NULL;
} }
static void theme_init_widget (JWidget widget) static void theme_init_widget(JWidget widget)
{ {
#define BORDER(n) \ #define BORDER(n) \
widget->border_width.l = n; \ widget->border_width.l = n; \
@ -234,259 +234,259 @@ static void theme_init_widget (JWidget widget)
switch (widget->draw_type) { switch (widget->draw_type) {
case JI_BOX: case JI_BOX:
BORDER (4); BORDER(4);
widget->child_spacing = 2; widget->child_spacing = 2;
break; break;
case JI_BUTTON: case JI_BUTTON:
BORDER (5); BORDER(5);
widget->child_spacing = 0; widget->child_spacing = 0;
break; break;
case JI_ENTRY: case JI_ENTRY:
BORDER (6); BORDER(6);
widget->child_spacing = 0; widget->child_spacing = 0;
break; break;
case JI_WINDOW: case JI_WINDOW:
BORDER4 (7, 7+jwidget_get_text_height (widget)+7, 7, 7); BORDER4(7, 7+jwidget_get_text_height(widget)+7, 7, 7);
widget->child_spacing = 1; widget->child_spacing = 1;
break; break;
} }
} }
static JRegion theme_get_window_mask (JWidget widget) static JRegion theme_get_window_mask(JWidget widget)
{ {
JRegion reg1 = jregion_new (NULL, 0); JRegion reg1 = jregion_new(NULL, 0);
JRegion reg2 = jregion_new (NULL, 0); JRegion reg2 = jregion_new(NULL, 0);
int table[2] = { 2, 1 }; int table[2] = { 2, 1 };
JRect rect = jrect_new (0, 0, 0, 0); JRect rect = jrect_new(0, 0, 0, 0);
JRect pos = jwidget_get_rect (widget); JRect pos = jwidget_get_rect(widget);
int c; int c;
bool overlap; bool overlap;
for (c=0; c<2; c++) { for (c=0; c<2; c++) {
jrect_replace (rect, jrect_replace(rect,
pos->x1+table[c], pos->y1+c, pos->x1+table[c], pos->y1+c,
pos->x2-table[c], pos->y1+c+1); pos->x2-table[c], pos->y1+c+1);
jregion_reset (reg2, rect); jregion_reset(reg2, rect);
jregion_append (reg1, reg2); jregion_append(reg1, reg2);
jrect_replace (rect, jrect_replace(rect,
pos->x1+table[c], pos->y2-c-1, pos->x1+table[c], pos->y2-c-1,
pos->x2-table[c], pos->y2-c); pos->x2-table[c], pos->y2-c);
jregion_reset (reg2, rect); jregion_reset(reg2, rect);
jregion_append (reg1, reg2); jregion_append(reg1, reg2);
} }
jrect_replace (rect, pos->x1, pos->y1+c, pos->x2, pos->y2-c); jrect_replace(rect, pos->x1, pos->y1+c, pos->x2, pos->y2-c);
jregion_reset (reg2, rect); jregion_reset(reg2, rect);
jregion_append (reg1, reg2); jregion_append(reg1, reg2);
jrect_free (pos); jrect_free(pos);
jrect_free (rect); jrect_free(rect);
jregion_free (reg2); jregion_free(reg2);
jregion_validate (reg1, &overlap); jregion_validate(reg1, &overlap);
return reg1; return reg1;
} }
static void theme_draw_box (JWidget widget) static void theme_draw_box(JWidget widget)
{ {
JWidget window = jwidget_get_window (widget); JWidget window = jwidget_get_window(widget);
if (window) { if (window) {
JRect pos = jwidget_get_child_rect (window); JRect pos = jwidget_get_child_rect(window);
draw_edge (pos, makecol (255, 196, 64), FALSE); draw_edge(pos, makecol(255, 196, 64), FALSE);
jrect_shrink (pos, 1); jrect_shrink(pos, 1);
draw_rect (pos, makecol (255, 196, 64), FALSE); draw_rect(pos, makecol(255, 196, 64), FALSE);
jrect_free (pos); jrect_free(pos);
} }
} }
static void theme_draw_button (JWidget widget) static void theme_draw_button(JWidget widget)
{ {
JRect pos = jwidget_get_rect (widget); JRect pos = jwidget_get_rect(widget);
int fg, bg; int fg, bg;
if (jwidget_is_disabled (widget)) { if (jwidget_is_disabled(widget)) {
fg = makecol (196, 196, 196); fg = makecol(196, 196, 196);
bg = makecol (128, 128, 128); bg = makecol(128, 128, 128);
} }
else { else {
fg = makecol (0, 0, 0); fg = makecol(0, 0, 0);
bg = jwidget_has_mouse (widget) ? makecol (64, 224, 255): bg = jwidget_has_mouse(widget) ? makecol(64, 224, 255):
makecol (0, 196, 255); makecol(0, 196, 255);
} }
draw_edge (pos, makecol (255, 196, 64), TRUE); draw_edge(pos, makecol(255, 196, 64), TRUE);
if (jwidget_has_focus (widget)) { if (jwidget_has_focus (widget)) {
jrect_shrink (pos, 1); jrect_shrink(pos, 1);
draw_edge (pos, makecol (0, 0, 0), FALSE); draw_edge(pos, makecol(0, 0, 0), FALSE);
} }
jrect_shrink (pos, 1); jrect_shrink(pos, 1);
draw_edge (pos, bg, jwidget_is_selected (widget)); draw_edge(pos, bg, jwidget_is_selected(widget));
jrect_shrink (pos, 1); jrect_shrink(pos, 1);
draw_edge (pos, makecol (128, 128, 128), !jwidget_is_selected (widget)); draw_edge(pos, makecol(128, 128, 128), !jwidget_is_selected(widget));
jrect_shrink (pos, 1); jrect_shrink(pos, 1);
draw_rect (pos, bg, jwidget_is_selected (widget)); draw_rect(pos, bg, jwidget_is_selected(widget));
if (widget->text) { if (widget->text) {
struct jrect text; struct jrect text;
jwidget_get_texticon_info (widget, NULL, &text, NULL, 0, 0, 0); jwidget_get_texticon_info(widget, NULL, &text, NULL, 0, 0, 0);
if (jwidget_is_selected (widget)) if (jwidget_is_selected(widget))
jrect_displace (&text, 1, 1); jrect_displace(&text, 1, 1);
jdraw_text (widget->text_font, widget->text, text.x1+1, text.y1+1, jdraw_text(widget->text_font, widget->text, text.x1+1, text.y1+1,
makecol (255, 255, 255), bg, FALSE); makecol(255, 255, 255), bg, FALSE);
jdraw_text (widget->text_font, widget->text, jdraw_text(widget->text_font, widget->text,
text.x1, text.y1, fg, bg, FALSE); text.x1, text.y1, fg, bg, FALSE);
} }
jrect_free (pos); jrect_free(pos);
} }
static void theme_draw_entry (JWidget widget) static void theme_draw_entry(JWidget widget)
{ {
int scroll, cursor, state, selbeg, selend; int scroll, cursor, state, selbeg, selend;
bool password = jentry_is_password (widget); bool password = jentry_is_password(widget);
const char *text = widget->text; const char *text = widget->text;
int c, ch, x, y, w, fg, bg; int c, ch, x, y, w, fg, bg;
int cursor_x; int cursor_x;
JRect pos = jwidget_get_rect (widget); JRect pos = jwidget_get_rect(widget);
jtheme_entry_info (widget, &scroll, &cursor, &state, &selbeg, &selend); jtheme_entry_info(widget, &scroll, &cursor, &state, &selbeg, &selend);
bg = makecol (255, 255, 255); bg = makecol(255, 255, 255);
/* 1st border */ /* 1st border */
draw_edge (pos, makecol (255, 196, 64), TRUE); draw_edge(pos, makecol (255, 196, 64), TRUE);
/* 2nd border */ /* 2nd border */
jrect_shrink (pos, 1); jrect_shrink(pos, 1);
if (jwidget_has_focus (widget)) { if (jwidget_has_focus(widget)) {
jdraw_rect (pos, makecol (0, 0, 0)); jdraw_rect(pos, makecol(0, 0, 0));
jrect_shrink (pos, 1); jrect_shrink(pos, 1);
} }
draw_edge (pos, makecol (192, 192, 192), FALSE); draw_edge(pos, makecol(192, 192, 192), FALSE);
/* background */ /* background */
jrect_shrink (pos, 1); jrect_shrink(pos, 1);
jdraw_rectshade (pos, JI_COLOR_SHADE (bg, -64, -64, -64), bg, jdraw_rectshade(pos, JI_COLOR_SHADE(bg, -64, -64, -64), bg,
JI_VERTICAL); JI_VERTICAL);
/* draw the text */ /* draw the text */
x = widget->rc->x1 + widget->border_width.l; x = widget->rc->x1 + widget->border_width.l;
y = (widget->rc->y1+widget->rc->y2)/2 - jwidget_get_text_height (widget)/2; y = (widget->rc->y1+widget->rc->y2)/2 - jwidget_get_text_height(widget)/2;
for (c=scroll; ugetat (text, c); c++) { for (c=scroll; ugetat (text, c); c++) {
ch = password ? '*': ugetat (text, c); ch = password ? '*': ugetat (text, c);
/* normal text */ /* normal text */
bg = -1; bg = -1;
fg = makecol (0, 0, 0); fg = makecol(0, 0, 0);
/* selected */ /* selected */
if ((c >= selbeg) && (c <= selend)) { if ((c >= selbeg) && (c <= selend)) {
if (jwidget_has_focus (widget)) if (jwidget_has_focus(widget))
bg = makecol (44, 76, 145); bg = makecol(44, 76, 145);
else else
bg = makecol (128, 128, 128); bg = makecol(128, 128, 128);
fg = makecol (255, 255, 255); fg = makecol(255, 255, 255);
} }
/* disabled */ /* disabled */
if (jwidget_is_disabled (widget)) { if (jwidget_is_disabled(widget)) {
bg = -1; bg = -1;
fg = makecol (128, 128, 128); fg = makecol(128, 128, 128);
} }
w = ji_font_char_len (widget->text_font, ch); w = ji_font_char_len(widget->text_font, ch);
if (x+w > widget->rc->x2-3) if (x+w > widget->rc->x2-3)
return; return;
cursor_x = x; cursor_x = x;
jdraw_char (widget->text_font, ch, x, y, fg, jdraw_char(widget->text_font, ch, x, y, fg,
bg >= 0 ? bg: makecol (192, 192, 192), bg >= 0); bg >= 0 ? bg: makecol (192, 192, 192), bg >= 0);
x += w; x += w;
/* cursor */ /* cursor */
if ((c == cursor) && (state) && (jwidget_has_focus (widget))) if ((c == cursor) && (state) && (jwidget_has_focus(widget)))
draw_entry_cursor (widget, cursor_x, y); draw_entry_cursor(widget, cursor_x, y);
} }
/* draw the cursor if it is next of the last character */ /* draw the cursor if it is next of the last character */
if ((c == cursor) && (state) && if ((c == cursor) && (state) &&
(jwidget_has_focus (widget)) && (jwidget_has_focus(widget)) &&
(jwidget_is_enabled (widget))) (jwidget_is_enabled(widget)))
draw_entry_cursor (widget, x, y); draw_entry_cursor(widget, x, y);
jrect_free (pos); jrect_free(pos);
} }
static void theme_draw_label (JWidget widget) static void theme_draw_label(JWidget widget)
{ {
/* draw background as Box */ /* draw background as Box */
theme_draw_box (widget); theme_draw_box(widget);
if (widget->text) { if (widget->text) {
struct jrect text; struct jrect text;
jwidget_get_texticon_info (widget, NULL, &text, NULL, 0, 0, 0); jwidget_get_texticon_info(widget, NULL, &text, NULL, 0, 0, 0);
jdraw_text (widget->text_font, widget->text, text.x1+1, text.y1+1, jdraw_text(widget->text_font, widget->text, text.x1+1, text.y1+1,
makecol (0, 0, 0), makecol (196, 128, 0), FALSE); makecol(0, 0, 0), makecol(196, 128, 0), FALSE);
jdraw_text (widget->text_font, widget->text, text.x1, text.y1, jdraw_text(widget->text_font, widget->text, text.x1, text.y1,
makecol (255, 255, 255), makecol (196, 128, 0), FALSE); makecol(255, 255, 255), makecol(196, 128, 0), FALSE);
} }
} }
static void theme_draw_window (JWidget widget) static void theme_draw_window(JWidget widget)
{ {
JRect pos; JRect pos;
int c; int c;
pos = jwidget_get_rect (widget); pos = jwidget_get_rect(widget);
/* borders */ /* borders */
for (c=0; c<3; c++) { for (c=0; c<3; c++) {
jdraw_rectedge (pos, jdraw_rectedge(pos,
JI_COLOR_SHADE (makecol (0, 127, 255), +90, +90, +90), JI_COLOR_SHADE(makecol(0, 127, 255), +90, +90, +90),
JI_COLOR_SHADE (makecol (0, 127, 255), -90, -90, -90)); JI_COLOR_SHADE(makecol(0, 127, 255), -90, -90, -90));
jrect_shrink (pos, 1); jrect_shrink(pos, 1);
} }
/* background */ /* background */
draw_rect (pos, makecol (0, 127, 255), FALSE); draw_rect(pos, makecol(0, 127, 255), FALSE);
/* title bar */ /* title bar */
pos->x1 += 8; pos->x1 += 8;
pos->y1 += 6; pos->y1 += 6;
jdraw_text (widget->text_font, widget->text, pos->x1+1, pos->y1+1, jdraw_text(widget->text_font, widget->text, pos->x1+1, pos->y1+1,
makecol (0, 0, 0), makecol (0, 127, 255), FALSE); makecol(0, 0, 0), makecol(0, 127, 255), FALSE);
jdraw_text (widget->text_font, widget->text, pos->x1, pos->y1, jdraw_text(widget->text_font, widget->text, pos->x1, pos->y1,
makecol (255, 255, 255), makecol (0, 127, 255), FALSE); makecol(255, 255, 255), makecol(0, 127, 255), FALSE);
/* border to client area */ /* border to client area */
jrect_free (pos); jrect_free(pos);
pos = jwidget_get_child_rect (widget); pos = jwidget_get_child_rect(widget);
jrect_stretch (pos, 1); jrect_stretch(pos, 1);
jdraw_rectedge (pos, jdraw_rectedge(pos,
JI_COLOR_SHADE (makecol (0, 127, 255), -32, -32, -32), JI_COLOR_SHADE(makecol(0, 127, 255), -32, -32, -32),
JI_COLOR_SHADE (makecol (0, 127, 255), +32, +32, +32)); JI_COLOR_SHADE(makecol(0, 127, 255), +32, +32, +32));
jrect_free (pos); jrect_free(pos);
} }
static void draw_rect (JRect rect, int color, bool invert) static void draw_rect(JRect rect, int color, bool invert)
{ {
JRect p = jrect_new (0, 0, 0, 0); JRect p = jrect_new(0, 0, 0, 0);
int c1 = JI_COLOR_SHADE (color, +32, +32, +32); int c1 = JI_COLOR_SHADE(color, +32, +32, +32);
int c2 = JI_COLOR_SHADE (color, -32, -32, -32); int c2 = JI_COLOR_SHADE(color, -32, -32, -32);
int c, h = 3; int c, h = 3;
if (invert) { if (invert) {
@ -495,23 +495,23 @@ static void draw_rect (JRect rect, int color, bool invert)
c2 = c; c2 = c;
} }
jrect_replace (p, rect->x1, rect->y1, rect->x2, rect->y1+h); jrect_replace(p, rect->x1, rect->y1, rect->x2, rect->y1+h);
jdraw_rectshade (p, c1, color, JI_VERTICAL); jdraw_rectshade(p, c1, color, JI_VERTICAL);
jrect_replace (p, rect->x1, rect->y1+h, rect->x2, rect->y2-h); jrect_replace(p, rect->x1, rect->y1+h, rect->x2, rect->y2-h);
jdraw_rectfill (p, color); jdraw_rectfill(p, color);
jrect_replace (p, rect->x1, rect->y2-h, rect->x2, rect->y2); jrect_replace(p, rect->x1, rect->y2-h, rect->x2, rect->y2);
jdraw_rectshade (p, color, c2, JI_VERTICAL); jdraw_rectshade(p, color, c2, JI_VERTICAL);
jrect_free (p); jrect_free(p);
} }
static void draw_edge (JRect rect, int color, bool invert) static void draw_edge(JRect rect, int color, bool invert)
{ {
JRect p = jrect_new (0, 0, 0, 0); JRect p = jrect_new(0, 0, 0, 0);
int c1 = JI_COLOR_SHADE (color, +90, +90, +90); int c1 = JI_COLOR_SHADE(color, +90, +90, +90);
int c2 = JI_COLOR_SHADE (color, -90, -90, -90); int c2 = JI_COLOR_SHADE(color, -90, -90, -90);
int c; int c;
if (invert) { if (invert) {
@ -520,25 +520,25 @@ static void draw_edge (JRect rect, int color, bool invert)
c2 = c; c2 = c;
} }
jrect_replace (p, rect->x1, rect->y1, rect->x2, rect->y1+1); jrect_replace(p, rect->x1, rect->y1, rect->x2, rect->y1+1);
jdraw_rectshade (p, c1, color, JI_HORIZONTAL); jdraw_rectshade(p, c1, color, JI_HORIZONTAL);
jrect_moveto (p, p->x1, rect->y2-1); jrect_moveto(p, p->x1, rect->y2-1);
jdraw_rectshade (p, color, c2, JI_HORIZONTAL); jdraw_rectshade(p, color, c2, JI_HORIZONTAL);
jrect_replace (p, rect->x1, rect->y1, rect->x1+1, rect->y2); jrect_replace(p, rect->x1, rect->y1, rect->x1+1, rect->y2);
jdraw_rectshade (p, c1, color, JI_VERTICAL); jdraw_rectshade(p, c1, color, JI_VERTICAL);
jrect_moveto (p, rect->x2-1, p->y1); jrect_moveto(p, rect->x2-1, p->y1);
jdraw_rectshade (p, color, c2, JI_VERTICAL); jdraw_rectshade(p, color, c2, JI_VERTICAL);
jrect_free (p); jrect_free(p);
} }
static void draw_entry_cursor (JWidget widget, int x, int y) static void draw_entry_cursor(JWidget widget, int x, int y)
{ {
int h = jwidget_get_text_height (widget); int h = jwidget_get_text_height(widget);
vline (ji_screen, x, y-1, y+h, makecol (0, 0, 0)); vline(ji_screen, x, y-1, y+h, makecol(0, 0, 0));
vline (ji_screen, x+1, y-1, y+h, makecol (0, 0, 0)); vline(ji_screen, x+1, y-1, y+h, makecol(0, 0, 0));
} }

View File

@ -40,40 +40,40 @@ int main (int argc, char *argv[])
{ {
JWidget manager, window, box, check1, check2, button1, button2; JWidget manager, window, box, check1, check2, button1, button2;
allegro_init (); allegro_init();
if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 320, 200, 0, 0) < 0) { if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 320, 200, 0, 0) < 0) {
if (set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) < 0) { if (set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) < 0) {
allegro_message("%s\n", allegro_error); allegro_message("%s\n", allegro_error);
return 1; return 1;
} }
} }
install_timer (); install_timer();
install_keyboard (); install_keyboard();
install_mouse (); install_mouse();
manager = jmanager_new (); manager = jmanager_new();
ji_set_standard_theme (); ji_set_standard_theme();
window = jwindow_new ("Example 18"); window = jwindow_new("Example 18");
box = jbox_new (JI_VERTICAL | JI_HOMOGENEOUS); box = jbox_new(JI_VERTICAL | JI_HOMOGENEOUS);
check1 = jcheck_new ("Check &1"); check1 = jcheck_new("Check &1");
check2 = jcheck_new ("Check &2"); check2 = jcheck_new("Check &2");
button1 = jbutton_new ("&OK"); button1 = jbutton_new("&OK");
button2 = jbutton_new ("&Cancel"); button2 = jbutton_new("&Cancel");
jwidget_add_tip (button1, "This is a tip for \"OK\" button"); jwidget_add_tip(button1, "This is a tip for \"OK\" button");
jwidget_add_tip (button2, "This is a tip for the \"Cancel\" button"); jwidget_add_tip(button2, "This is a tip for the \"Cancel\" button");
jwidget_add_child (window, box); jwidget_add_child(window, box);
jwidget_add_child (box, check1); jwidget_add_child(box, check1);
jwidget_add_child (box, check2); jwidget_add_child(box, check2);
jwidget_add_child (box, button1); jwidget_add_child(box, button1);
jwidget_add_child (box, button2); jwidget_add_child(box, button2);
jwindow_open_bg (window); jwindow_open_bg(window);
jmanager_run (manager); jmanager_run(manager);
jmanager_free (manager); jmanager_free(manager);
return 0; return 0;
} }
@ -82,11 +82,11 @@ END_OF_MAIN();
/**********************************************************************/ /**********************************************************************/
/* tip */ /* tip */
static int tip_type (void); static int tip_type(void);
static bool tip_hook (JWidget widget, JMessage msg); static bool tip_hook(JWidget widget, JMessage msg);
static JWidget tip_window_new (const char *text); static JWidget tip_window_new(const char *text);
static bool tip_window_hook (JWidget widget, JMessage msg); static bool tip_window_hook(JWidget widget, JMessage msg);
typedef struct TipData { typedef struct TipData {
int time; int time;
@ -135,11 +135,11 @@ static bool tip_hook(JWidget widget, JMessage msg)
JWidget window = tip_window_new (tip->text); JWidget window = tip_window_new (tip->text);
int w = jrect_w(window->rc); int w = jrect_w(window->rc);
int h = jrect_h(window->rc); int h = jrect_h(window->rc);
jwindow_remap (window); jwindow_remap(window);
jwindow_position (window, jwindow_position(window,
MID (0, ji_mouse_x (0)-w/2, JI_SCREEN_W-w), MID(0, jmouse_x(0)-w/2, JI_SCREEN_W-w),
MID (0, ji_mouse_y (0)-h/2, JI_SCREEN_H-h)); MID(0, jmouse_y(0)-h/2, JI_SCREEN_H-h));
jwindow_open (window); jwindow_open(window);
tip->time = -1; tip->time = -1;
} }
@ -159,8 +159,9 @@ static JWidget tip_window_new(const char *text)
jwidget_set_align(window, JI_CENTER | JI_MIDDLE); jwidget_set_align(window, JI_CENTER | JI_MIDDLE);
/* remove decorative widgets */ /* remove decorative widgets */
JI_LIST_EACH_SAFE(window->children, link, next) JI_LIST_FOR_EACH_SAFE(window->children, link, next) {
jwidget_free(link->data); jwidget_free(link->data);
}
jwidget_add_hook(window, JI_WIDGET, tip_window_hook, NULL); jwidget_add_hook(window, JI_WIDGET, tip_window_hook, NULL);
jwidget_init_theme(window); jwidget_init_theme(window);

View File

@ -133,7 +133,7 @@ void draw_gui()
{ {
jwidget_dirty(manager); jwidget_dirty(manager);
jwidget_flush_redraw(manager); jwidget_flush_redraw(manager);
jmanager_dispatch_draw_messages(); //jmanager_dispatch_draw_messages();
} }
float get_speed(void) float get_speed(void)

View File

@ -19,7 +19,7 @@
#include <allegro.h> #include <allegro.h>
#include <math.h> #include <math.h>
#include "jinete/jbase.h" #include "jinete/jinete.h"
#include "raster/algo.h" #include "raster/algo.h"
#include "raster/image.h" #include "raster/image.h"
@ -131,18 +131,19 @@ void draw_bezier_path(BITMAP *bmp, BEZIER_PATH *path, int flags, int color)
typedef struct Point { int x, y; } Point; typedef struct Point { int x, y; } Point;
static void add_shape_seg(int x1, int y1, int x2, int y2, JList *shape) static void add_shape_seg(int x1, int y1, int x2, int y2, JList shape)
{ {
Point *point = jnew (Point, 1); Point *point = jnew(Point, 1);
point->x = x2; point->x = x2;
point->y = y2; point->y = y2;
*shape = jlist_append (*shape, point); jlist_append(shape, point);
} }
void draw_filled_bezier_path(BITMAP *bmp, BEZIER_PATH *path, int color) void draw_filled_bezier_path(BITMAP *bmp, BEZIER_PATH *path, int color)
{ {
BEZIER_NODE *node; BEZIER_NODE *node;
JList it, shape = NULL; JList shape = jlist_new();
JLink link;
int c, vertices; int c, vertices;
int *points; int *points;
@ -157,7 +158,7 @@ void draw_filled_bezier_path(BITMAP *bmp, BEZIER_PATH *path, int color)
node->next->prev_y, node->next->prev_y,
node->next->x, node->next->x,
node->next->y, node->next->y,
(void *)&shape, (AlgoLine)add_shape_seg); (void *)shape, (AlgoLine)add_shape_seg);
} }
if (node == path->last) if (node == path->last)
@ -166,20 +167,24 @@ void draw_filled_bezier_path(BITMAP *bmp, BEZIER_PATH *path, int color)
vertices = jlist_length(shape); vertices = jlist_length(shape);
if (vertices > 0) { if (vertices > 0) {
points = jmalloc(sizeof (int) * vertices * 2); points = jmalloc(sizeof(int) * vertices * 2);
for (c=0, it=shape; it; it=it->next) {
points[c++] = ((Point *)it->data)->x; c = 0;
points[c++] = ((Point *)it->data)->y; JI_LIST_FOR_EACH(shape, link) {
points[c++] = ((Point *)link->data)->x;
points[c++] = ((Point *)link->data)->y;
} }
polygon(bmp, vertices, points, color); polygon(bmp, vertices, points, color);
ji_free(points); jfree(points);
} }
for (it=shape; it; it=it->next) JI_LIST_FOR_EACH(shape, link);
jfree(it->data); jfree(link->data);
jlist_free(shape);
} }
void draw_art_filled_bezier_path (BITMAP *bmp, BEZIER_PATH *path) void draw_art_filled_bezier_path(BITMAP *bmp, BEZIER_PATH *path)
{ {
Image *image = image_new (IMAGE_RGB, SCREEN_W, SCREEN_H); Image *image = image_new (IMAGE_RGB, SCREEN_W, SCREEN_H);
Path *art_path = path_new (NULL); Path *art_path = path_new (NULL);

View File

@ -54,15 +54,16 @@ void test ()
/* build the layers */ /* build the layers */
{ {
Layer *layer = layer_new (sprite->imgtype); Layer *layer = layer_new(sprite);
/* add this layer to the sprite */ /* add this layer to the sprite */
layer_add_layer (sprite->set, layer); layer_add_layer(sprite->set, layer);
/* build the "stock" and the properties */ /* build the "stock" and the properties */
{ {
int i, c, image_index; int i, c, image_index;
Image *image; Image *image;
Cel *cel;
for (i=0; i<32; i++) { for (i=0; i<32; i++) {
/* make the image */ /* make the image */
@ -79,30 +80,31 @@ void test ()
} }
/* add the new image in the stock */ /* add the new image in the stock */
image_index = stock_add_image (layer->stock, image); image_index = stock_add_image(sprite->stock, image);
/* image property */ /* cel properties */
layer_add_frame (layer, cel = cel_new(i, image_index);
frame_new (i, /* frpos */ cel_set_position(cel,
image_index, /* image */ cos(AL_PI*i/16)*64,
cos(AL_PI*i/16)*64, /* x */ sin(AL_PI*i/16)*64);
sin(AL_PI*i/16)*64, /* y */ cel_set_opacity(cel, 128+sin(AL_PI*i/32)*127);
128+sin(AL_PI*i/32)*127)); /* opacity */
layer_add_cel(layer, cel);
} }
} }
} }
do { do {
image_copy (image_screen, image_bg, 0, 0); image_copy(image_screen, image_bg, 0, 0);
sprite_render (sprite, image_screen, sprite_render(sprite, image_screen,
mouse_x-sprite->w/2, mouse_y-sprite->h/2); mouse_x-sprite->w/2, mouse_y-sprite->h/2);
image_to_allegro (image_screen, bmp, 0, 0); image_to_allegro(image_screen, bmp, 0, 0);
if (key[KEY_LEFT]) sprite->frpos--; if (key[KEY_LEFT]) sprite->frame--;
if (key[KEY_RIGHT]) sprite->frpos++; if (key[KEY_RIGHT]) sprite->frame++;
text_mode(makecol (0, 0, 0)); text_mode(makecol (0, 0, 0));
textprintf(bmp, font, 0, 0, makecol (255, 255, 255), "%d", sprite->frpos); textprintf(bmp, font, 0, 0, makecol(255, 255, 255), "%d", sprite->frame);
blit(bmp, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); blit(bmp, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
} while (!key[KEY_ESC]); } while (!key[KEY_ESC]);
@ -114,16 +116,16 @@ void test ()
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
allegro_init (); allegro_init();
set_color_depth (16); set_color_depth(16);
set_gfx_mode (GFX_AUTODETECT, 320, 200, 0, 0); set_gfx_mode(GFX_AUTODETECT_WINDOWED, 320, 200, 0, 0);
install_timer (); install_timer();
install_keyboard (); install_keyboard();
install_mouse (); install_mouse();
set_palette (default_palette); set_palette(default_palette);
test (); test();
return 0; return 0;
} }