forked from enlightenment/efl
cleaner use func pointers for rendering backend funcs - too much copy & paste
SVN revision: 3096
This commit is contained in:
parent
cda8d8b1b8
commit
a5ba53be87
|
@ -131,6 +131,7 @@ struct _Evas_Object_Any
|
||||||
int zoomscale;
|
int zoomscale;
|
||||||
int layer;
|
int layer;
|
||||||
int visible;
|
int visible;
|
||||||
|
int stacking;
|
||||||
} current, previous;
|
} current, previous;
|
||||||
|
|
||||||
int changed;
|
int changed;
|
||||||
|
@ -228,6 +229,7 @@ void evas_set_output(Evas e, Display *disp, Drawable d, Visual *v, Colormap c);
|
||||||
void evas_set_output_size(Evas e, int w, int h);
|
void evas_set_output_size(Evas e, int w, int h);
|
||||||
void evas_set_output_viewport(Evas e, double x, double y, double w, double h);
|
void evas_set_output_viewport(Evas e, double x, double y, double w, double h);
|
||||||
void evas_set_output_method(Evas e, Evas_Render_Method method);
|
void evas_set_output_method(Evas e, Evas_Render_Method method);
|
||||||
|
void evas_set_scale_smoothness(Evas e, int smooth);
|
||||||
|
|
||||||
/* deleting objects */
|
/* deleting objects */
|
||||||
void evas_del_object(Evas e, Evas_Object o);
|
void evas_del_object(Evas e, Evas_Object o);
|
||||||
|
@ -244,7 +246,6 @@ Evas_Object evas_add_bits(Evas e, char *file);
|
||||||
/* set object settings */
|
/* set object settings */
|
||||||
void evas_set_image_file(Evas e, Evas_Object o, char *file);
|
void evas_set_image_file(Evas e, Evas_Object o, char *file);
|
||||||
void evas_set_image_data(Evas e, Evas_Object o, void *data, Evas_Image_Format format, int w, int h);
|
void evas_set_image_data(Evas e, Evas_Object o, void *data, Evas_Image_Format format, int w, int h);
|
||||||
void evas_set_image_scale_smoothness(Evas e, Evas_Object o, int smooth);
|
|
||||||
void evas_set_image_fill(Evas e, Evas_Object o, double x, double y, double w, double h);
|
void evas_set_image_fill(Evas e, Evas_Object o, double x, double y, double w, double h);
|
||||||
void evas_set_bits_file(Evas e, Evas_Object o, char *file);
|
void evas_set_bits_file(Evas e, Evas_Object o, char *file);
|
||||||
void evas_set_color(Evas e, Evas_Object o, int r, int g, int b, int a);
|
void evas_set_color(Evas e, Evas_Object o, int r, int g, int b, int a);
|
||||||
|
@ -265,8 +266,8 @@ void evas_gradient_add_color(Evas_Gradient grad, int r, int g, int b, int a, int
|
||||||
/* stacking within a layer */
|
/* stacking within a layer */
|
||||||
void evas_raise(Evas e, Evas_Object o);
|
void evas_raise(Evas e, Evas_Object o);
|
||||||
void evas_lower(Evas e, Evas_Object o);
|
void evas_lower(Evas e, Evas_Object o);
|
||||||
void evas_stack_above(Evas e, Evas_Object o, int above);
|
void evas_stack_above(Evas e, Evas_Object o, Evas_Object above);
|
||||||
void evas_stack_below(Evas e, Evas_Object o, int above);
|
void evas_stack_below(Evas e, Evas_Object o, Evas_Object above);
|
||||||
|
|
||||||
/* object geoemtry */
|
/* object geoemtry */
|
||||||
void evas_move(Evas e, Evas_Object o, double x, double y);
|
void evas_move(Evas e, Evas_Object o, double x, double y);
|
||||||
|
|
|
@ -8,7 +8,7 @@ MAINTAINERCLEANFILES = Makefile.in
|
||||||
LIBS_X = @x_ldflags@ @x_libs@
|
LIBS_X = @x_ldflags@ @x_libs@
|
||||||
LIBS_IMLIB2 = -lImlib2 -lttf -ldl -lm
|
LIBS_IMLIB2 = -lImlib2 -lttf -ldl -lm
|
||||||
LIBS_DB = -ledb
|
LIBS_DB = -ledb
|
||||||
LIBS_GL = -lGL -lGLU
|
LIBS_GL = -lGLU -lGL
|
||||||
LIBS_EXTRA = -L/usr/local/lib
|
LIBS_EXTRA = -L/usr/local/lib
|
||||||
|
|
||||||
CFLAGS_X = @x_cflags@
|
CFLAGS_X = @x_cflags@
|
||||||
|
|
|
@ -7,11 +7,30 @@
|
||||||
static void
|
static void
|
||||||
_evas_free_image(Evas_Object o)
|
_evas_free_image(Evas_Object o)
|
||||||
{
|
{
|
||||||
|
Evas_Object_Image oo;
|
||||||
|
|
||||||
|
oo = o;
|
||||||
|
if (o->callbacks) evas_list_free(o->callbacks);
|
||||||
|
if (oo->current.file) free(oo->current.file);
|
||||||
|
free(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_evas_free_image_renderer_data(Evas e, Evas_Object o)
|
_evas_free_image_renderer_data(Evas e, Evas_Object o)
|
||||||
{
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* adding objects */
|
/* adding objects */
|
||||||
|
@ -68,22 +87,49 @@ evas_add_image_from_file(Evas e, char *file)
|
||||||
Evas_Object
|
Evas_Object
|
||||||
evas_add_image_from_data(Evas e, void *data, Evas_Image_Format format, int w, int h)
|
evas_add_image_from_data(Evas e, void *data, Evas_Image_Format format, int w, int h)
|
||||||
{
|
{
|
||||||
|
/* FIXME: not implimented */
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set object settings */
|
/* set object settings */
|
||||||
void
|
void
|
||||||
evas_set_image_file(Evas e, Evas_Object o, char *file)
|
evas_set_image_file(Evas e, Evas_Object o, char *file)
|
||||||
{
|
{
|
||||||
|
Evas_Object_Image oo;
|
||||||
|
|
||||||
|
oo = o;
|
||||||
|
if (oo->current.file)
|
||||||
|
free(oo->current.file);
|
||||||
|
oo->previous.file = NULL;
|
||||||
|
oo->current.file = strdup(file);
|
||||||
|
{
|
||||||
|
Imlib_Image im;
|
||||||
|
|
||||||
|
im = imlib_load_image(file);
|
||||||
|
if (im)
|
||||||
|
{
|
||||||
|
imlib_context_set_image(im);
|
||||||
|
oo->current.image.w = imlib_image_get_width();
|
||||||
|
oo->current.image.h = imlib_image_get_height();
|
||||||
|
o->current.w = (double)oo->current.image.w;
|
||||||
|
o->current.h = (double)oo->current.image.h;
|
||||||
|
imlib_free_image();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
oo->current.image.w = 0;
|
||||||
|
oo->current.image.h = 0;
|
||||||
|
o->current.w = (double)oo->current.image.w;
|
||||||
|
o->current.h = (double)oo->current.image.h;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
o->changed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
evas_set_image_data(Evas e, Evas_Object o, void *data, Evas_Image_Format format, int w, int h)
|
evas_set_image_data(Evas e, Evas_Object o, void *data, Evas_Image_Format format, int w, int h)
|
||||||
{
|
{
|
||||||
}
|
/* FIXME: not implimented */
|
||||||
|
|
||||||
void
|
|
||||||
evas_set_image_scale_smoothness(Evas e, Evas_Object o, int smooth)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -95,4 +141,9 @@ evas_set_image_fill(Evas e, Evas_Object o, double x, double y, double w, double
|
||||||
void
|
void
|
||||||
evas_get_image_size(Evas e, Evas_Object o, int *w, int *h)
|
evas_get_image_size(Evas e, Evas_Object o, int *w, int *h)
|
||||||
{
|
{
|
||||||
|
Evas_Object_Image oo;
|
||||||
|
|
||||||
|
oo = o;
|
||||||
|
if (w) *w = oo->current.image.w;
|
||||||
|
if (h) *h = oo->current.image.h;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,5 @@
|
||||||
#include "evas_imlib_routines.h"
|
#include "evas_imlib_routines.h"
|
||||||
|
|
||||||
#define SPANS_COMMON(x1, w1, x2, w2) \
|
|
||||||
(!((((x2) + (w2)) <= (x1)) || ((x2) >= ((x1) + (w1)))))
|
|
||||||
#define RECTS_INTERSECT(x, y, w, h, xx, yy, ww, hh) \
|
|
||||||
((SPANS_COMMON((x), (w), (xx), (ww))) && (SPANS_COMMON((y), (h), (yy), (hh))))
|
|
||||||
|
|
||||||
static void __evas_imlib_image_cache_flush(Display *disp);
|
static void __evas_imlib_image_cache_flush(Display *disp);
|
||||||
static int __evas_anti_alias = 1;
|
static int __evas_anti_alias = 1;
|
||||||
static Evas_List drawable_list = NULL;
|
static Evas_List drawable_list = NULL;
|
||||||
|
|
|
@ -16,6 +16,11 @@
|
||||||
|
|
||||||
#include <Imlib2.h>
|
#include <Imlib2.h>
|
||||||
|
|
||||||
|
#define SPANS_COMMON(x1, w1, x2, w2) \
|
||||||
|
(!((((x2) + (w2)) <= (x1)) || ((x2) >= ((x1) + (w1)))))
|
||||||
|
#define RECTS_INTERSECT(x, y, w, h, xx, yy, ww, hh) \
|
||||||
|
((SPANS_COMMON((x), (w), (xx), (ww))) && (SPANS_COMMON((y), (h), (yy), (hh))))
|
||||||
|
|
||||||
typedef void Evas_Imlib_Image;
|
typedef void Evas_Imlib_Image;
|
||||||
typedef void Evas_Imlib_Font;
|
typedef void Evas_Imlib_Font;
|
||||||
typedef void Evas_Imlib_Graident;
|
typedef void Evas_Imlib_Graident;
|
||||||
|
|
|
@ -4,6 +4,21 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
Evas_Layer
|
||||||
|
_evas_get_object_layer(Evas e, Evas_Object o)
|
||||||
|
{
|
||||||
|
Evas_List l;
|
||||||
|
|
||||||
|
for (l = e->layers; l; l = l->next)
|
||||||
|
{
|
||||||
|
Evas_Layer layer;
|
||||||
|
|
||||||
|
layer = l->data;
|
||||||
|
if (layer->layer == o->current.layer) return layer;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_evas_real_del_object(Evas e, Evas_Object o)
|
_evas_real_del_object(Evas e, Evas_Object o)
|
||||||
{
|
{
|
||||||
|
@ -49,25 +64,65 @@ evas_set_layer_store(Evas e, int l, int store)
|
||||||
void
|
void
|
||||||
evas_raise(Evas e, Evas_Object o)
|
evas_raise(Evas e, Evas_Object o)
|
||||||
{
|
{
|
||||||
|
Evas_Layer layer;
|
||||||
|
|
||||||
|
layer = _evas_get_object_layer(e, o);
|
||||||
|
if (layer)
|
||||||
|
{
|
||||||
|
o->current.stacking = 1;
|
||||||
|
layer->objects = evas_list_remove(layer->objects, o);
|
||||||
|
layer->objects = evas_list_append(layer->objects, o);
|
||||||
|
o->changed = 1;
|
||||||
e->changed = 1;
|
e->changed = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
evas_lower(Evas e, Evas_Object o)
|
evas_lower(Evas e, Evas_Object o)
|
||||||
{
|
{
|
||||||
|
Evas_Layer layer;
|
||||||
|
|
||||||
|
layer = _evas_get_object_layer(e, o);
|
||||||
|
if (layer)
|
||||||
|
{
|
||||||
|
o->current.stacking = 1;
|
||||||
|
layer->objects = evas_list_remove(layer->objects, o);
|
||||||
|
layer->objects = evas_list_prepend(layer->objects, o);
|
||||||
|
o->changed = 1;
|
||||||
e->changed = 1;
|
e->changed = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
evas_stack_above(Evas e, Evas_Object o, int above)
|
evas_stack_above(Evas e, Evas_Object o, Evas_Object above)
|
||||||
{
|
{
|
||||||
|
Evas_Layer layer;
|
||||||
|
|
||||||
|
layer = _evas_get_object_layer(e, o);
|
||||||
|
if (layer)
|
||||||
|
{
|
||||||
|
o->current.stacking = 1;
|
||||||
|
layer->objects = evas_list_remove(layer->objects, o);
|
||||||
|
layer->objects = evas_list_append_relative(layer->objects, o, above);
|
||||||
|
o->changed = 1;
|
||||||
e->changed = 1;
|
e->changed = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
evas_stack_below(Evas e, Evas_Object o, int above)
|
evas_stack_below(Evas e, Evas_Object o, Evas_Object above)
|
||||||
{
|
{
|
||||||
|
Evas_Layer layer;
|
||||||
|
|
||||||
|
layer = _evas_get_object_layer(e, o);
|
||||||
|
if (layer)
|
||||||
|
{
|
||||||
|
o->current.stacking = 1;
|
||||||
|
layer->objects = evas_list_remove(layer->objects, o);
|
||||||
|
layer->objects = evas_list_prepend_relative(layer->objects, o, above);
|
||||||
|
o->changed = 1;
|
||||||
e->changed = 1;
|
e->changed = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* object geoemtry */
|
/* object geoemtry */
|
||||||
|
|
|
@ -75,9 +75,47 @@ evas_render(Evas e)
|
||||||
{
|
{
|
||||||
Evas_List delete_objects;
|
Evas_List delete_objects;
|
||||||
Evas_List l, ll;
|
Evas_List l, ll;
|
||||||
|
void (*func_draw_add_rect) (Display *disp, Window win, int x, int y, int w, int h);
|
||||||
|
void * (*func_image_new_from_file) (Display *disp, char *file);
|
||||||
|
void (*func_image_draw) (void *im, Display *disp, Window w, int win_w, int win_h, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h);
|
||||||
|
void (*func_image_free) (void *im);
|
||||||
|
void (*func_flush_draw) (Display *disp, Window w);
|
||||||
|
void (*func_init) (Display *disp, Window w);
|
||||||
|
int (*func_image_get_width) (void *im);
|
||||||
|
int (*func_image_get_height) (void *im);
|
||||||
|
|
||||||
if ((!e->changed) || (!e->current.display) || (!e->current.drawable))
|
if ((!e->changed) || (!e->current.display) || (!e->current.drawable))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
func_draw_add_rect = __evas_imlib_draw_add_rect;
|
||||||
|
func_image_new_from_file = __evas_imlib_image_new_from_file;
|
||||||
|
func_image_draw = __evas_imlib_image_draw;
|
||||||
|
func_image_free = __evas_imlib_image_free;
|
||||||
|
func_flush_draw = __evas_imlib_flush_draw;
|
||||||
|
func_init = __evas_imlib_init;
|
||||||
|
func_image_get_width = __evas_imlib_image_get_width;
|
||||||
|
func_image_get_height = __evas_imlib_image_get_height;
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
func_draw_add_rect = __evas_gl_draw_add_rect;
|
||||||
|
func_image_new_from_file = __evas_gl_image_new_from_file;
|
||||||
|
func_image_draw = __evas_gl_image_draw;
|
||||||
|
func_image_free = __evas_gl_image_free;
|
||||||
|
func_flush_draw = __evas_gl_flush_draw;
|
||||||
|
func_init = __evas_gl_init;
|
||||||
|
func_image_get_width = __evas_gl_image_get_width;
|
||||||
|
func_image_get_height = __evas_gl_image_get_height;
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
e->changed = 0;
|
e->changed = 0;
|
||||||
if ((e->current.viewport.x != e->previous.viewport.x) ||
|
if ((e->current.viewport.x != e->previous.viewport.x) ||
|
||||||
(e->current.viewport.y != e->previous.viewport.y) ||
|
(e->current.viewport.y != e->previous.viewport.y) ||
|
||||||
|
@ -216,14 +254,10 @@ evas_render(Evas e)
|
||||||
evas_list_free(delete_objects);
|
evas_list_free(delete_objects);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* take all the update rects we've produced and render them */
|
|
||||||
switch (e->current.render_method)
|
|
||||||
{
|
|
||||||
case RENDER_METHOD_ALPHA_SOFTWARE:
|
|
||||||
{
|
{
|
||||||
Imlib_Updates up;
|
Imlib_Updates up;
|
||||||
|
|
||||||
__evas_imlib_init(e->current.display, e->current.screen);
|
func_init(e->current.display, e->current.screen);
|
||||||
if (e->updates)
|
if (e->updates)
|
||||||
{
|
{
|
||||||
up = imlib_updates_merge_for_rendering(e->updates,
|
up = imlib_updates_merge_for_rendering(e->updates,
|
||||||
|
@ -240,7 +274,7 @@ evas_render(Evas e)
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
|
|
||||||
imlib_updates_get_coordinates(u, &x, &y, &w, &h);
|
imlib_updates_get_coordinates(u, &x, &y, &w, &h);
|
||||||
__evas_imlib_draw_add_rect(e->current.display,
|
func_draw_add_rect(e->current.display,
|
||||||
e->current.drawable,
|
e->current.drawable,
|
||||||
x, y, w, h);
|
x, y, w, h);
|
||||||
u = imlib_updates_get_next(u);
|
u = imlib_updates_get_next(u);
|
||||||
|
@ -260,9 +294,15 @@ evas_render(Evas e)
|
||||||
if (o->current.visible)
|
if (o->current.visible)
|
||||||
{
|
{
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
|
|
||||||
_evas_object_get_current_translated_coords(e, o,
|
_evas_object_get_current_translated_coords(e, o,
|
||||||
&x, &y,
|
&x, &y,
|
||||||
&w, &h);
|
&w, &h);
|
||||||
|
if (RECTS_INTERSECT(0, 0,
|
||||||
|
e->current.drawable_width,
|
||||||
|
e->current.drawable_height,
|
||||||
|
x, y, w, h))
|
||||||
|
{
|
||||||
switch (o->type)
|
switch (o->type)
|
||||||
{
|
{
|
||||||
case OBJECT_IMAGE:
|
case OBJECT_IMAGE:
|
||||||
|
@ -271,21 +311,21 @@ evas_render(Evas e)
|
||||||
|
|
||||||
oo = o;
|
oo = o;
|
||||||
{
|
{
|
||||||
Evas_Imlib_Image *im;
|
void *im;
|
||||||
|
|
||||||
im = __evas_imlib_image_new_from_file(e->current.display, oo->current.file);
|
im = func_image_new_from_file(e->current.display, oo->current.file);
|
||||||
if (im)
|
if (im)
|
||||||
{
|
{
|
||||||
__evas_imlib_image_draw(im,
|
func_image_draw(im,
|
||||||
e->current.display,
|
e->current.display,
|
||||||
e->current.drawable,
|
e->current.drawable,
|
||||||
e->current.drawable_width,
|
e->current.drawable_width,
|
||||||
e->current.drawable_height,
|
e->current.drawable_height,
|
||||||
0, 0,
|
0, 0,
|
||||||
__evas_gl_image_get_width(im),
|
func_image_get_width(im),
|
||||||
__evas_gl_image_get_height(im),
|
func_image_get_height(im),
|
||||||
x, y, w, h);
|
x, y, w, h);
|
||||||
__evas_imlib_image_free(im);
|
func_image_free(im);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -329,135 +369,11 @@ evas_render(Evas e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
__evas_imlib_flush_draw(e->current.display,
|
}
|
||||||
e->current.drawable);
|
func_flush_draw(e->current.display, e->current.drawable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case RENDER_METHOD_BASIC_HARDWARE:
|
|
||||||
break;
|
|
||||||
case RENDER_METHOD_3D_HARDWARE:
|
|
||||||
{
|
|
||||||
Imlib_Updates up;
|
|
||||||
|
|
||||||
__evas_gl_init(e->current.display, e->current.screen);
|
|
||||||
if (e->updates)
|
|
||||||
{
|
|
||||||
up = imlib_updates_merge_for_rendering(e->updates,
|
|
||||||
e->current.drawable_width,
|
|
||||||
e->current.drawable_height);
|
|
||||||
e->updates = NULL;
|
|
||||||
if (up)
|
|
||||||
{
|
|
||||||
Imlib_Updates u;
|
|
||||||
|
|
||||||
u = up;
|
|
||||||
while (u)
|
|
||||||
{
|
|
||||||
int x, y, w, h;
|
|
||||||
|
|
||||||
imlib_updates_get_coordinates(u, &x, &y, &w, &h);
|
|
||||||
__evas_gl_draw_add_rect(e->current.display,
|
|
||||||
e->current.drawable,
|
|
||||||
x, y, w, h);
|
|
||||||
u = imlib_updates_get_next(u);
|
|
||||||
}
|
|
||||||
imlib_updates_free(up);
|
|
||||||
/* draw all objects now */
|
|
||||||
for (l = e->layers; l; l = l->next)
|
|
||||||
{
|
|
||||||
Evas_Layer layer;
|
|
||||||
|
|
||||||
layer = l->data;
|
|
||||||
for (ll = layer->objects; ll; ll = ll->next)
|
|
||||||
{
|
|
||||||
Evas_Object_Any o;
|
|
||||||
|
|
||||||
o = ll->data;
|
|
||||||
if (o->current.visible)
|
|
||||||
{
|
|
||||||
int x, y, w, h;
|
|
||||||
_evas_object_get_current_translated_coords(e, o,
|
|
||||||
&x, &y,
|
|
||||||
&w, &h);
|
|
||||||
switch (o->type)
|
|
||||||
{
|
|
||||||
case OBJECT_IMAGE:
|
|
||||||
{
|
|
||||||
Evas_Object_Image oo;
|
|
||||||
|
|
||||||
oo = o;
|
|
||||||
{
|
|
||||||
Evas_GL_Image *im;
|
|
||||||
|
|
||||||
im = __evas_gl_image_new_from_file(e->current.display, oo->current.file);
|
|
||||||
if (im)
|
|
||||||
{
|
|
||||||
__evas_gl_image_draw(im,
|
|
||||||
e->current.display,
|
|
||||||
e->current.drawable,
|
|
||||||
e->current.drawable_width,
|
|
||||||
e->current.drawable_height,
|
|
||||||
0, 0,
|
|
||||||
__evas_gl_image_get_width(im),
|
|
||||||
__evas_gl_image_get_height(im),
|
|
||||||
x, y, w, h);
|
|
||||||
__evas_gl_image_free(im);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case OBJECT_TEXT:
|
|
||||||
{
|
|
||||||
Evas_Object_Text oo;
|
|
||||||
|
|
||||||
oo = o;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case OBJECT_RECTANGLE:
|
|
||||||
{
|
|
||||||
Evas_Object_Rectangle oo;
|
|
||||||
|
|
||||||
oo = o;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case OBJECT_LINE:
|
|
||||||
{
|
|
||||||
Evas_Object_Line oo;
|
|
||||||
|
|
||||||
oo = o;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case OBJECT_GRADIENT_BOX:
|
|
||||||
{
|
|
||||||
Evas_Object_Gradient_Box oo;
|
|
||||||
|
|
||||||
oo = o;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case OBJECT_BITS:
|
|
||||||
{
|
|
||||||
Evas_Object_Bits oo;
|
|
||||||
|
|
||||||
oo = o;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
__evas_gl_flush_draw(e->current.display,
|
|
||||||
e->current.drawable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case RENDER_METHOD_ALPHA_HARDWARE:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
e->previous = e->current;
|
e->previous = e->current;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -539,3 +455,24 @@ evas_set_output_method(Evas e, Evas_Render_Method method)
|
||||||
e->current.render_method = method;
|
e->current.render_method = method;
|
||||||
e->changed = 1;
|
e->changed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_set_scale_smoothness(Evas e, int smooth)
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
__evas_imlib_image_set_smooth_scaling(smooth);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
__evas_gl_image_set_smooth_scaling(smooth);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
LIBS_X = @x_ldflags@ @x_libs@
|
LIBS_X = @x_ldflags@ @x_libs@
|
||||||
LIBS_IMLIB2 = -lImlib2 -lttf -ldl -lm
|
LIBS_IMLIB2 = -lImlib2 -lttf -ldl -lm
|
||||||
LIBS_DB = -ledb
|
LIBS_DB = -ledb
|
||||||
LIBS_GL = -lGL
|
LIBS_GL = -lGLU -lGL
|
||||||
LIBS_EXTRA = -L/usr/local/lib
|
LIBS_EXTRA = -L/usr/local/lib
|
||||||
|
|
||||||
CFLAGS_X = @x_cflags@
|
CFLAGS_X = @x_cflags@
|
||||||
|
|
|
@ -10,9 +10,21 @@ main(int argc, char **argv)
|
||||||
Colormap cmap;
|
Colormap cmap;
|
||||||
Window win;
|
Window win;
|
||||||
int win_w, win_h;
|
int win_w, win_h;
|
||||||
int i, a;
|
int i, a, w, h;
|
||||||
Evas e;
|
Evas e;
|
||||||
Evas_Object o[32];
|
Evas_Object o[128];
|
||||||
|
int down;
|
||||||
|
char *imgs[8] =
|
||||||
|
{
|
||||||
|
"img/mush.png",
|
||||||
|
"img/book.png",
|
||||||
|
"img/bulb.png",
|
||||||
|
"img/term.png",
|
||||||
|
"img/calc.png",
|
||||||
|
"img/worlds.png",
|
||||||
|
"img/spider.png",
|
||||||
|
"img/mouse.png"
|
||||||
|
};
|
||||||
|
|
||||||
win_w = 640; win_h = 480;
|
win_w = 640; win_h = 480;
|
||||||
if (argc == 4)
|
if (argc == 4)
|
||||||
|
@ -46,6 +58,8 @@ main(int argc, char **argv)
|
||||||
vis,
|
vis,
|
||||||
CWColormap | CWBorderPixel | CWEventMask,
|
CWColormap | CWBorderPixel | CWEventMask,
|
||||||
&att);
|
&att);
|
||||||
|
XSelectInput(d, win, ButtonPressMask | ButtonReleaseMask |
|
||||||
|
PointerMotionMask | ExposureMask);
|
||||||
XMapWindow(d, win);
|
XMapWindow(d, win);
|
||||||
XSync(d, False);
|
XSync(d, False);
|
||||||
}
|
}
|
||||||
|
@ -55,20 +69,78 @@ main(int argc, char **argv)
|
||||||
|
|
||||||
o[0] = evas_add_image_from_file(e, "img/sky001.png");
|
o[0] = evas_add_image_from_file(e, "img/sky001.png");
|
||||||
evas_show(e, o[0]);
|
evas_show(e, o[0]);
|
||||||
for (i = 1 ; i < 32; i++)
|
o[1] = evas_add_image_from_file(e, "img/logo001.png");
|
||||||
|
evas_get_image_size(e, o[1], &w, &h);
|
||||||
|
w /= 2;
|
||||||
|
h /= 2;
|
||||||
|
evas_show(e, o[1]);
|
||||||
|
for (i = 2 ; i < 128; i++)
|
||||||
{
|
{
|
||||||
o[i] = evas_add_image_from_file(e, "img/mush.png");
|
o[i] = evas_add_image_from_file(e, "img/mush.png");
|
||||||
evas_show(e, o[i]);
|
evas_show(e, o[i]);
|
||||||
}
|
}
|
||||||
|
evas_raise(e, o[1]);
|
||||||
evas_move(e, o[0], 0, 0);
|
evas_move(e, o[0], 0, 0);
|
||||||
evas_resize(e, o[0], win_w, win_h);
|
evas_resize(e, o[0], win_w, win_h);
|
||||||
a = 0;
|
a = 0;
|
||||||
|
down = 0;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
double x, y;
|
double x, y;
|
||||||
|
XEvent ev;
|
||||||
|
|
||||||
for (i = 1; i < 32; i++)
|
while (XPending(d))
|
||||||
|
/* do*/
|
||||||
|
{
|
||||||
|
XNextEvent(d, &ev);
|
||||||
|
switch(ev.type)
|
||||||
|
{
|
||||||
|
case ButtonPress:
|
||||||
|
{
|
||||||
|
int button, mouse_x, mouse_y;
|
||||||
|
|
||||||
|
down = 1;
|
||||||
|
button = ev.xbutton.button;
|
||||||
|
mouse_x = ev.xbutton.x;
|
||||||
|
mouse_y = ev.xbutton.y;
|
||||||
|
evas_move(e, o[1], mouse_x - w, mouse_y - h);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ButtonRelease:
|
||||||
|
{
|
||||||
|
int button, mouse_x, mouse_y;
|
||||||
|
|
||||||
|
down = 0;
|
||||||
|
button = ev.xbutton.button;
|
||||||
|
mouse_x = ev.xbutton.x;
|
||||||
|
mouse_y = ev.xbutton.y;
|
||||||
|
evas_move(e, o[1], mouse_x - w, mouse_y - h);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case MotionNotify:
|
||||||
|
{
|
||||||
|
int mouse_x, mouse_y;
|
||||||
|
|
||||||
|
mouse_x = ev.xmotion.x;
|
||||||
|
mouse_y = ev.xmotion.y;
|
||||||
|
if (down)
|
||||||
|
{
|
||||||
|
evas_move(e, o[1], mouse_x - w, mouse_y - h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Expose:
|
||||||
|
{
|
||||||
|
evas_update_rect(e, ev.xexpose.x, ev.xexpose.y, ev.xexpose.width, ev.xexpose.height);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* while (XPending(d));*/
|
||||||
|
|
||||||
|
for (i = 2; i < 128; i++)
|
||||||
{
|
{
|
||||||
int j, k;
|
int j, k;
|
||||||
|
|
||||||
|
@ -76,12 +148,13 @@ main(int argc, char **argv)
|
||||||
k = (i * -60) - (i * 2);
|
k = (i * -60) - (i * 2);
|
||||||
x = (win_w + (cos((double)(a + j) * 2 * 3.141592654 / 1000) * (win_h - 100))) / 2;
|
x = (win_w + (cos((double)(a + j) * 2 * 3.141592654 / 1000) * (win_h - 100))) / 2;
|
||||||
y = (win_h + (sin((double)(a + k) * 2 * 3.141592654 / 1000) * (win_h - 100))) / 2;
|
y = (win_h + (sin((double)(a + k) * 2 * 3.141592654 / 1000) * (win_h - 100))) / 2;
|
||||||
|
evas_set_image_file(e, o[i], imgs[(i) & 0x7]);
|
||||||
evas_move(e, o[i], x, y);
|
evas_move(e, o[i], x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
evas_render(e);
|
evas_render(e);
|
||||||
a++;
|
a++;
|
||||||
if (a > 1000) a = 0;
|
if (a >= 1000) a = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 63 KiB |
Loading…
Reference in New Issue