From 8923422a2ed470491762813f3112f9c3f2f9d3ec Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Mon, 18 Sep 2000 02:22:04 +0000 Subject: [PATCH] add code to double check object type before doing anything to objects SVN revision: 3523 --- legacy/evas/src/Evas.h | 2 + legacy/evas/src/evas_gradient.c | 2 + legacy/evas/src/evas_image.c | 5 ++ legacy/evas/src/evas_image_routines.c | 3 ++ legacy/evas/src/evas_imlib_routines.c | 3 ++ legacy/evas/src/evas_line.c | 2 + legacy/evas/src/evas_rectangle.c | 1 + legacy/evas/src/evas_text.c | 10 ++++ legacy/evas/src/evas_x11_routines.c | 3 ++ legacy/evas/test/evas_test.c | 73 +++++++++++++++++++-------- 10 files changed, 84 insertions(+), 20 deletions(-) diff --git a/legacy/evas/src/Evas.h b/legacy/evas/src/Evas.h index 5e0f3be060..992d714ec0 100644 --- a/legacy/evas/src/Evas.h +++ b/legacy/evas/src/Evas.h @@ -49,6 +49,8 @@ typedef struct _Evas_Object_Gradient_Box * Evas_Object_Gradient_Box; #define OBJECT_LINE 1233 #define OBJECT_GRADIENT_BOX 1234 +#define IF_OBJ(_o, _t) if (((Evas_Object)_o)->type != _t) + struct _Evas_Render_Data { int *method[RENDER_METHOD_COUNT]; diff --git a/legacy/evas/src/evas_gradient.c b/legacy/evas/src/evas_gradient.c index ace45e8dc0..e2d09e2187 100644 --- a/legacy/evas/src/evas_gradient.c +++ b/legacy/evas/src/evas_gradient.c @@ -13,6 +13,7 @@ _evas_free_gradient_box(Evas_Object o) { Evas_Object_Gradient_Box oo; + IF_OBJ(o, OBJECT_GRADIENT_BOX) return; oo = o; if (oo->current.gradient) evas_gradient_free(oo->current.gradient); free(o); @@ -93,6 +94,7 @@ evas_set_gradient(Evas e, Evas_Object o, Evas_Gradient grad) { Evas_Object_Gradient_Box oo; + IF_OBJ(o, OBJECT_GRADIENT_BOX) return; oo = o; if (oo->current.gradient) evas_gradient_free(oo->current.gradient); diff --git a/legacy/evas/src/evas_image.c b/legacy/evas/src/evas_image.c index a4b23d96cc..b10d2dfea1 100644 --- a/legacy/evas/src/evas_image.c +++ b/legacy/evas/src/evas_image.c @@ -9,6 +9,7 @@ _evas_free_image(Evas_Object o) { Evas_Object_Image oo; + IF_OBJ(o, OBJECT_IMAGE) return; oo = o; if (oo->current.file) free(oo->current.file); free(o); @@ -157,6 +158,7 @@ evas_set_image_fill(Evas e, Evas_Object o, double x, double y, double w, double { Evas_Object_Image oo; + IF_OBJ(o, OBJECT_IMAGE) return; oo = o; oo->current.fill.x = x; oo->current.fill.y = y; @@ -172,6 +174,7 @@ evas_get_image_size(Evas e, Evas_Object o, int *w, int *h) { Evas_Object_Image oo; + IF_OBJ(o, OBJECT_IMAGE) return; oo = o; if (w) *w = oo->current.image.w; if (h) *h = oo->current.image.h; @@ -182,6 +185,7 @@ evas_set_image_border(Evas e, Evas_Object o, int l, int r, int t, int b) { Evas_Object_Image oo; + IF_OBJ(o, OBJECT_IMAGE) return; oo = o; oo->current.border.l = l; oo->current.border.r = r; @@ -196,6 +200,7 @@ evas_get_image_border(Evas e, Evas_Object o, int *l, int *r, int *t, int *b) { Evas_Object_Image oo; + IF_OBJ(o, OBJECT_IMAGE) return; oo = o; if (l) *l = oo->current.border.l; if (r) *r = oo->current.border.r; diff --git a/legacy/evas/src/evas_image_routines.c b/legacy/evas/src/evas_image_routines.c index 81e6b64026..1093a7f427 100644 --- a/legacy/evas/src/evas_image_routines.c +++ b/legacy/evas/src/evas_image_routines.c @@ -794,6 +794,8 @@ __evas_image_get_colormap(Display *disp, int screen) if (__evas_cmap) return __evas_cmap; v = __evas_imlib_get_visual(disp, screen); + __evas_cmap = DefaultColormap(disp, screen); + return __evas_cmap; __evas_cmap = XCreateColormap(disp, RootWindow(disp, screen), v, AllocNone); return __evas_cmap; } @@ -805,6 +807,7 @@ __evas_image_init(Display *disp, int screen, int colors) if (!initted) { + imlib_set_color_usage(216); imlib_set_font_cache_size(1024 * 1024); imlib_set_cache_size(8 * 1024 * 1024); initted = 1; diff --git a/legacy/evas/src/evas_imlib_routines.c b/legacy/evas/src/evas_imlib_routines.c index 042baca307..90ae9caa45 100644 --- a/legacy/evas/src/evas_imlib_routines.c +++ b/legacy/evas/src/evas_imlib_routines.c @@ -717,6 +717,8 @@ __evas_imlib_get_colormap(Display *disp, int screen) if (__evas_cmap) return __evas_cmap; v = __evas_imlib_get_visual(disp, screen); + __evas_cmap = DefaultColormap(disp, screen); + return __evas_cmap; __evas_cmap = XCreateColormap(disp, RootWindow(disp, screen), v, AllocNone); return __evas_cmap; } @@ -728,6 +730,7 @@ __evas_imlib_init(Display *disp, int screen, int colors) if (!initted) { + imlib_set_color_usage(216); imlib_set_font_cache_size(1024 * 1024); imlib_set_cache_size(8 * 1024 * 1024); initted = 1; diff --git a/legacy/evas/src/evas_line.c b/legacy/evas/src/evas_line.c index 14c92bffc0..8d69614791 100644 --- a/legacy/evas/src/evas_line.c +++ b/legacy/evas/src/evas_line.c @@ -9,6 +9,7 @@ _evas_free_line(Evas_Object o) { Evas_Object_Line oo; + IF_OBJ(o, OBJECT_LINE) return; oo = o; free(o); } @@ -81,6 +82,7 @@ evas_set_line_xy(Evas e, Evas_Object o, double x1, double y1, double x2, double Evas_Object_Line oo; int event_update = 0; + IF_OBJ(o, OBJECT_LINE) return; oo = (Evas_Object_Line)o; if ((o->current.visible) && (_evas_point_in_object(e, o, e->mouse.x, e->mouse.y))) diff --git a/legacy/evas/src/evas_rectangle.c b/legacy/evas/src/evas_rectangle.c index 9654d2bd56..8200e4b8a3 100644 --- a/legacy/evas/src/evas_rectangle.c +++ b/legacy/evas/src/evas_rectangle.c @@ -9,6 +9,7 @@ _evas_free_rectangle(Evas_Object o) { Evas_Object_Rectangle oo; + IF_OBJ(o, OBJECT_RECTANGLE) return; oo = o; free(o); } diff --git a/legacy/evas/src/evas_text.c b/legacy/evas/src/evas_text.c index c5e5d8a3f7..b3fa85b0d0 100644 --- a/legacy/evas/src/evas_text.c +++ b/legacy/evas/src/evas_text.c @@ -13,6 +13,7 @@ _evas_free_text(Evas_Object o) { Evas_Object_Text oo; + IF_OBJ(o, OBJECT_TEXT) return; oo = o; if (oo->current.text) free(oo->current.text); free(o); @@ -158,6 +159,7 @@ evas_get_text_string(Evas e, Evas_Object o) { Evas_Object_Text oo; + IF_OBJ(o, OBJECT_TEXT) return ""; oo = o; return oo->current.text; } @@ -167,6 +169,7 @@ evas_get_text_font(Evas e, Evas_Object o) { Evas_Object_Text oo; + IF_OBJ(o, OBJECT_TEXT) return ""; oo = o; return oo->current.font; } @@ -176,6 +179,7 @@ evas_get_text_size(Evas e, Evas_Object o) { Evas_Object_Text oo; + IF_OBJ(o, OBJECT_TEXT) return 0; oo = o; return oo->current.size; } @@ -186,6 +190,7 @@ evas_text_at_position(Evas e, Evas_Object o, double x, double y, { Evas_Object_Text oo; + IF_OBJ(o, OBJECT_TEXT) return -1; oo = o; switch (e->current.render_method) { @@ -275,6 +280,7 @@ evas_text_at(Evas e, Evas_Object o, int index, { Evas_Object_Text oo; + IF_OBJ(o, OBJECT_TEXT) return; oo = o; switch (e->current.render_method) { @@ -352,6 +358,7 @@ evas_text_get_ascent_descent(Evas e, Evas_Object o, int a, d; Evas_Object_Text oo; + IF_OBJ(o, OBJECT_TEXT) return; oo = o; a = 0; d = 0; switch (e->current.render_method) @@ -424,6 +431,7 @@ evas_text_get_max_ascent_descent(Evas e, Evas_Object o, int a, d; Evas_Object_Text oo; + IF_OBJ(o, OBJECT_TEXT) return; oo = o; a = 0; d = 0; switch (e->current.render_method) @@ -496,6 +504,7 @@ evas_text_get_advance(Evas e, Evas_Object o, int a, d; Evas_Object_Text oo; + IF_OBJ(o, OBJECT_TEXT) return; oo = o; a = 0; d = 0; switch (e->current.render_method) @@ -563,6 +572,7 @@ evas_text_get_inset(Evas e, Evas_Object o) Evas_Object_Text oo; int inset; + IF_OBJ(o, OBJECT_TEXT) return 0.0; oo = o; switch (e->current.render_method) { diff --git a/legacy/evas/src/evas_x11_routines.c b/legacy/evas/src/evas_x11_routines.c index fac6e59a10..d976fc9b7a 100644 --- a/legacy/evas/src/evas_x11_routines.c +++ b/legacy/evas/src/evas_x11_routines.c @@ -904,6 +904,8 @@ __evas_x11_get_colormap(Display *disp, int screen) if (__evas_cmap) return __evas_cmap; v = __evas_x11_get_visual(disp, screen); + __evas_cmap = DefaultColormap(disp, screen); + return __evas_cmap; __evas_cmap = XCreateColormap(disp, RootWindow(disp, screen), v, AllocNone); return __evas_cmap; } @@ -915,6 +917,7 @@ __evas_x11_init(Display *disp, int screen, int colors) if (!initted) { + imlib_set_color_usage(216); imlib_set_font_cache_size(1024 * 1024); imlib_set_cache_size(8 * 1024 * 1024); initted = 1; diff --git a/legacy/evas/test/evas_test.c b/legacy/evas/test/evas_test.c index 5caa728cef..fea154c6fa 100644 --- a/legacy/evas/test/evas_test.c +++ b/legacy/evas/test/evas_test.c @@ -93,28 +93,61 @@ main(int argc, char **argv) }; win_w = 640; win_h = 480; - if (argc >= 3) - { - win_w = atoi(argv[1]); - win_h = atoi(argv[2]); - } - e = evas_new(); - if ((argc >= 4) && (!strcmp(argv[3], "software"))) - evas_set_output_method(e, RENDER_METHOD_ALPHA_SOFTWARE); - else if ((argc >= 4) && (!strcmp(argv[3], "x11"))) - evas_set_output_method(e, RENDER_METHOD_BASIC_HARDWARE); - else if ((argc >= 4) && (!strcmp(argv[3], "image"))) + for (i = 1; i < argc; i++) { - DATA32 *data; - - buffer = imlib_create_image(win_w, win_h); - imlib_context_set_image(buffer); - evas_set_output_method(e, RENDER_METHOD_IMAGE); - evas_set_output_image(e, buffer); + if ((!strcmp(argv[i], "-x")) && (i < (argc - 1))) + { + i++; + win_w = atoi(argv[i]); + } + else if ((!strcmp(argv[i], "-y")) && (i < (argc - 1))) + { + i++; + win_h = atoi(argv[i]); + } + else if ((!strcmp(argv[i], "-m")) && (i < (argc - 1))) + { + i++; + if (!strcmp(argv[i], "x11")) + evas_set_output_method(e, RENDER_METHOD_BASIC_HARDWARE); + else if (!strcmp(argv[i], "soft")) + evas_set_output_method(e, RENDER_METHOD_ALPHA_SOFTWARE); + else if (!strcmp(argv[i], "hard")) + evas_set_output_method(e, RENDER_METHOD_3D_HARDWARE); + else if (!strcmp(argv[i], "buf")) + { + DATA32 *data; + + buffer = imlib_create_image(win_w, win_h); + imlib_context_set_image(buffer); + evas_set_output_method(e, RENDER_METHOD_IMAGE); + evas_set_output_image(e, buffer); + } + } + else if ((!strcmp(argv[i], "-c")) && (i < (argc - 1))) + { + i++; + evas_set_output_colors(e, atoi(argv[i])); + } + else if ((!strcmp(argv[i], "-s")) && (i < (argc - 1))) + { + i++; + evas_set_scale_smoothness(e, atoi(argv[i])); + } + else + { + printf("Usage:\n"); + printf(" %s [options]\n", argv[0]); + printf("Where options is one or more of:\n"); + printf(" -x width - width of window in pixels\n"); + printf(" -y height - height of window in pixels\n"); + printf(" -m [x11 | soft | hard | buf] - rendering mode\n"); + printf(" -c colors - maximum colors allocated\n"); + printf(" -s [1 | 0] - smooth scaling / rendering\n"); + exit(0); + } } - else - evas_set_output_method(e, RENDER_METHOD_3D_HARDWARE); d = XOpenDisplay(NULL); vis = evas_get_optimal_visual(e, d); @@ -324,7 +357,7 @@ main(int argc, char **argv) hh = ww; evas_resize(e, o[i], ww, hh); evas_set_image_fill(e, o[i], 0, 0, ww, hh); - /* +/* evas_set_color(e, o[i], 255, 255, 255, (((1.0 + cos((double)(a + j) * 2 * 3 * 3.141592654 / 1000)) / 2) * 255)); */