forked from enlightenment/efl
text objects work! dude! like totally! :)
SVN revision: 3112
This commit is contained in:
parent
331b113f4d
commit
c64671e765
|
@ -165,6 +165,11 @@ struct _Evas_Object_Text
|
||||||
struct _Evas_Object_Any object;
|
struct _Evas_Object_Any object;
|
||||||
struct {
|
struct {
|
||||||
char *text;
|
char *text;
|
||||||
|
char *font;
|
||||||
|
int size;
|
||||||
|
struct {
|
||||||
|
int w, h;
|
||||||
|
} string;
|
||||||
int r, g, b, a;
|
int r, g, b, a;
|
||||||
} current, previous;
|
} current, previous;
|
||||||
};
|
};
|
||||||
|
@ -236,10 +241,20 @@ 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_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_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);
|
||||||
|
void evas_set_text(Evas e, Evas_Object o, char *text);
|
||||||
|
void evas_set_font(Evas e, Evas_Object o, char *font, int size);
|
||||||
void evas_set_gradient(Evas e, Evas_Object o, Evas_Gradient grad);
|
void evas_set_gradient(Evas e, Evas_Object o, Evas_Gradient grad);
|
||||||
void evas_set_angle(Evas e, Evas_Object o, double angle);
|
void evas_set_angle(Evas e, Evas_Object o, double angle);
|
||||||
void evas_set_zoom_scale(Evas e, Evas_Object o, int scale);
|
void evas_set_zoom_scale(Evas e, Evas_Object o, int scale);
|
||||||
void evas_set_line_xy(Evas e, Evas_Object o, double x1, double y1, double x2, double y2);
|
void evas_set_line_xy(Evas e, Evas_Object o, double x1, double y1, double x2, double y2);
|
||||||
|
void evas_set_font_cache(Evas e, int size);
|
||||||
|
int evas_get_font_cache(Evas e);
|
||||||
|
void evas_flush_font_cache(Evas e);
|
||||||
|
void evas_set_image_cache(Evas e, int size);
|
||||||
|
int evas_get_image_cache(Evas e);
|
||||||
|
void evas_flush_image_cache(Evas e);
|
||||||
|
void evas_font_add_path(Evas e, char *path);
|
||||||
|
void evas_font_del_path(Evas e, char *path);
|
||||||
|
|
||||||
/* layer stacking for object */
|
/* layer stacking for object */
|
||||||
void evas_set_layer(Evas e, Evas_Object o, int l);
|
void evas_set_layer(Evas e, Evas_Object o, int l);
|
||||||
|
|
|
@ -769,7 +769,7 @@ __evas_gl_text_paste(Evas_GL_Font *f, char *text,
|
||||||
TT_Glyph_Metrics metrics;
|
TT_Glyph_Metrics metrics;
|
||||||
float rr, gg, bb, aa;
|
float rr, gg, bb, aa;
|
||||||
GLuint last_tex;
|
GLuint last_tex;
|
||||||
|
|
||||||
j = text[0];
|
j = text[0];
|
||||||
TT_Get_Glyph_Metrics(f->glyphs[j], &metrics);
|
TT_Get_Glyph_Metrics(f->glyphs[j], &metrics);
|
||||||
x_offset = (-metrics.bearingX) / 64;
|
x_offset = (-metrics.bearingX) / 64;
|
||||||
|
|
|
@ -58,17 +58,17 @@ evas_add_image_from_file(Evas e, char *file)
|
||||||
imlib_context_set_image(im);
|
imlib_context_set_image(im);
|
||||||
oo->current.image.w = imlib_image_get_width();
|
oo->current.image.w = imlib_image_get_width();
|
||||||
oo->current.image.h = imlib_image_get_height();
|
oo->current.image.h = imlib_image_get_height();
|
||||||
o->current.x = 0;
|
|
||||||
o->current.y = 0;
|
|
||||||
o->current.w = (double)oo->current.image.w;
|
|
||||||
o->current.h = (double)oo->current.image.h;
|
|
||||||
oo->current.fill.x = 0;
|
|
||||||
oo->current.fill.y = 0;
|
|
||||||
oo->current.fill.w = (double)oo->current.image.w;
|
|
||||||
oo->current.fill.h = (double)oo->current.image.h;
|
|
||||||
imlib_free_image();
|
imlib_free_image();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
oo->current.fill.x = 0;
|
||||||
|
oo->current.fill.y = 0;
|
||||||
|
oo->current.fill.w = (double)oo->current.image.w;
|
||||||
|
oo->current.fill.h = (double)oo->current.image.h;
|
||||||
|
o->current.x = 0;
|
||||||
|
o->current.y = 0;
|
||||||
|
o->current.w = (double)oo->current.image.w;
|
||||||
|
o->current.h = (double)oo->current.image.h;
|
||||||
|
|
||||||
for (l = e->layers; l; l = l->next)
|
for (l = e->layers; l; l = l->next)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "evas_gl_routines.h"
|
||||||
|
#include "evas_imlib_routines.h"
|
||||||
|
|
||||||
Evas
|
Evas
|
||||||
evas_new(void)
|
evas_new(void)
|
||||||
|
@ -85,6 +87,141 @@ evas_set_color(Evas e, Evas_Object o, int r, int g, int b, int a)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_set_text(Evas e, Evas_Object o, char *text)
|
||||||
|
{
|
||||||
|
switch (o->type)
|
||||||
|
{
|
||||||
|
case OBJECT_TEXT:
|
||||||
|
{
|
||||||
|
Evas_Object_Text oo;
|
||||||
|
|
||||||
|
oo = (Evas_Object_Text)o;
|
||||||
|
if (oo->current.text) free(oo->current.text);
|
||||||
|
oo->current.text = strdup(text);
|
||||||
|
oo->previous.text = NULL;
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
{
|
||||||
|
Evas_Imlib_Font *fn;
|
||||||
|
|
||||||
|
fn = __evas_imlib_text_font_new (e->current.display,
|
||||||
|
oo->current.font,
|
||||||
|
oo->current.size);
|
||||||
|
if (fn)
|
||||||
|
{
|
||||||
|
__evas_imlib_text_get_size(fn, oo->current.text,
|
||||||
|
&oo->current.string.w,
|
||||||
|
&oo->current.string.h);
|
||||||
|
__evas_imlib_text_font_free(fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
{
|
||||||
|
Evas_GL_Font *fn;
|
||||||
|
|
||||||
|
fn = __evas_gl_text_font_new (e->current.display,
|
||||||
|
oo->current.font,
|
||||||
|
oo->current.size);
|
||||||
|
if (fn)
|
||||||
|
{
|
||||||
|
__evas_gl_text_get_size(fn, oo->current.text,
|
||||||
|
&oo->current.string.w,
|
||||||
|
&oo->current.string.h);
|
||||||
|
__evas_gl_text_font_free(fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
o->current.w = (double)oo->current.string.w;
|
||||||
|
o->current.h = (double)oo->current.string.h;
|
||||||
|
}
|
||||||
|
o->changed = 1;
|
||||||
|
e->changed = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_set_font(Evas e, Evas_Object o, char *font, int size)
|
||||||
|
{
|
||||||
|
switch (o->type)
|
||||||
|
{
|
||||||
|
case OBJECT_TEXT:
|
||||||
|
{
|
||||||
|
Evas_Object_Text oo;
|
||||||
|
|
||||||
|
oo = (Evas_Object_Text)o;
|
||||||
|
if (oo->current.font) free(oo->current.font);
|
||||||
|
oo->current.font = strdup(font);
|
||||||
|
oo->previous.font = NULL;
|
||||||
|
oo->current.size = size;
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
{
|
||||||
|
Evas_Imlib_Font *fn;
|
||||||
|
|
||||||
|
fn = __evas_imlib_text_font_new (e->current.display,
|
||||||
|
oo->current.font,
|
||||||
|
oo->current.size);
|
||||||
|
if (fn)
|
||||||
|
{
|
||||||
|
__evas_imlib_text_get_size(fn, oo->current.text,
|
||||||
|
&oo->current.string.w,
|
||||||
|
&oo->current.string.h);
|
||||||
|
__evas_imlib_text_font_free(fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
{
|
||||||
|
Evas_GL_Font *fn;
|
||||||
|
|
||||||
|
fn = __evas_gl_text_font_new (e->current.display,
|
||||||
|
oo->current.font,
|
||||||
|
oo->current.size);
|
||||||
|
if (fn)
|
||||||
|
{
|
||||||
|
__evas_gl_text_get_size(fn, oo->current.text,
|
||||||
|
&oo->current.string.w,
|
||||||
|
&oo->current.string.h);
|
||||||
|
__evas_gl_text_font_free(fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
o->current.w = (double)oo->current.string.w;
|
||||||
|
o->current.h = (double)oo->current.string.h;
|
||||||
|
}
|
||||||
|
o->changed = 1;
|
||||||
|
e->changed = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
evas_set_angle(Evas e, Evas_Object o, double angle)
|
evas_set_angle(Evas e, Evas_Object o, double angle)
|
||||||
{
|
{
|
||||||
|
@ -112,3 +249,172 @@ evas_set_zoom_scale(Evas e, Evas_Object o, int scale)
|
||||||
o->changed = 1;
|
o->changed = 1;
|
||||||
e->changed = 1;
|
e->changed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_set_font_cache(Evas e, int size)
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
__evas_imlib_text_cache_set_size(e->current.display, size);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
__evas_gl_text_cache_set_size(e->current.display, size);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
evas_get_font_cache(Evas e)
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
return __evas_imlib_text_cache_get_size(e->current.display);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
return __evas_gl_text_cache_get_size(e->current.display);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_flush_font_cache(Evas e)
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
__evas_imlib_text_cache_empty(e->current.display);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
__evas_gl_text_cache_empty(e->current.display);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_set_image_cache(Evas e, int size)
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
__evas_imlib_image_cache_set_size(e->current.display, size);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
__evas_gl_image_cache_set_size(e->current.display, size);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
evas_get_image_cache(Evas e)
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
return __evas_imlib_image_cache_get_size(e->current.display);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
return __evas_gl_image_cache_get_size(e->current.display);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_flush_image_cache(Evas e)
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
__evas_imlib_image_cache_empty(e->current.display);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
__evas_gl_image_cache_empty(e->current.display);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_font_add_path(Evas e, char *path)
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
__evas_imlib_text_font_add_path(path);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
__evas_gl_text_font_add_path(path);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_font_del_path(Evas e, char *path)
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
__evas_imlib_text_font_del_path(path);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
__evas_gl_text_font_del_path(path);
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -206,10 +206,13 @@ evas_move(Evas e, Evas_Object o, double x, double y)
|
||||||
void
|
void
|
||||||
evas_resize(Evas e, Evas_Object o, double w, double h)
|
evas_resize(Evas e, Evas_Object o, double w, double h)
|
||||||
{
|
{
|
||||||
o->current.w = w;
|
if (o->type != OBJECT_TEXT)
|
||||||
o->current.h = h;
|
{
|
||||||
o->changed = 1;
|
o->current.w = w;
|
||||||
e->changed = 1;
|
o->current.h = h;
|
||||||
|
o->changed = 1;
|
||||||
|
e->changed = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -85,6 +85,9 @@ evas_render(Evas e)
|
||||||
void (*func_init) (Display *disp, Window w);
|
void (*func_init) (Display *disp, Window w);
|
||||||
int (*func_image_get_width) (void *im);
|
int (*func_image_get_width) (void *im);
|
||||||
int (*func_image_get_height) (void *im);
|
int (*func_image_get_height) (void *im);
|
||||||
|
void * (*func_text_font_new) (Display *disp, char *font, int size);
|
||||||
|
void (*func_text_font_free) (Evas_GL_Font *fn);
|
||||||
|
void (*func_text_draw) (Evas_GL_Font *fn, Display *disp, Window win, int win_w, int win_h, int x, int y, char *text, int r, int g, int b, int a);
|
||||||
|
|
||||||
if ((!e->changed) ||
|
if ((!e->changed) ||
|
||||||
(!e->current.display) ||
|
(!e->current.display) ||
|
||||||
|
@ -106,6 +109,9 @@ evas_render(Evas e)
|
||||||
func_init = __evas_imlib_init;
|
func_init = __evas_imlib_init;
|
||||||
func_image_get_width = __evas_imlib_image_get_width;
|
func_image_get_width = __evas_imlib_image_get_width;
|
||||||
func_image_get_height = __evas_imlib_image_get_height;
|
func_image_get_height = __evas_imlib_image_get_height;
|
||||||
|
func_text_font_new = __evas_imlib_text_font_new;
|
||||||
|
func_text_font_free = __evas_imlib_text_font_free;
|
||||||
|
func_text_draw = __evas_imlib_text_draw;
|
||||||
break;
|
break;
|
||||||
case RENDER_METHOD_BASIC_HARDWARE:
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
break;
|
break;
|
||||||
|
@ -118,6 +124,9 @@ evas_render(Evas e)
|
||||||
func_init = __evas_gl_init;
|
func_init = __evas_gl_init;
|
||||||
func_image_get_width = __evas_gl_image_get_width;
|
func_image_get_width = __evas_gl_image_get_width;
|
||||||
func_image_get_height = __evas_gl_image_get_height;
|
func_image_get_height = __evas_gl_image_get_height;
|
||||||
|
func_text_font_new = __evas_gl_text_font_new;
|
||||||
|
func_text_font_free = __evas_gl_text_font_free;
|
||||||
|
func_text_draw = __evas_gl_text_draw;
|
||||||
break;
|
break;
|
||||||
case RENDER_METHOD_ALPHA_HARDWARE:
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
break;
|
break;
|
||||||
|
@ -190,7 +199,14 @@ evas_render(Evas e)
|
||||||
Evas_Object_Text oo;
|
Evas_Object_Text oo;
|
||||||
|
|
||||||
oo = o;
|
oo = o;
|
||||||
if (1)
|
if (((oo->current.text) && (!oo->previous.text)) ||
|
||||||
|
((oo->current.font) && (!oo->previous.font)) ||
|
||||||
|
(oo->current.size != oo->previous.size) ||
|
||||||
|
(oo->current.r != oo->previous.r) ||
|
||||||
|
(oo->current.g != oo->previous.g) ||
|
||||||
|
(oo->current.b != oo->previous.b) ||
|
||||||
|
(oo->current.a != oo->previous.a)
|
||||||
|
)
|
||||||
real_change = 1;
|
real_change = 1;
|
||||||
oo->previous = oo->current;
|
oo->previous = oo->current;
|
||||||
}
|
}
|
||||||
|
@ -451,8 +467,26 @@ evas_render(Evas e)
|
||||||
case OBJECT_TEXT:
|
case OBJECT_TEXT:
|
||||||
{
|
{
|
||||||
Evas_Object_Text oo;
|
Evas_Object_Text oo;
|
||||||
|
void *fn;
|
||||||
|
|
||||||
oo = o;
|
oo = o;
|
||||||
|
fn = func_text_font_new(e->current.display, oo->current.font, oo->current.size);
|
||||||
|
if (fn)
|
||||||
|
{
|
||||||
|
func_text_draw(fn,
|
||||||
|
e->current.display,
|
||||||
|
e->current.drawable,
|
||||||
|
e->current.drawable_width,
|
||||||
|
e->current.drawable_height,
|
||||||
|
o->current.x,
|
||||||
|
o->current.y,
|
||||||
|
oo->current.text,
|
||||||
|
oo->current.r,
|
||||||
|
oo->current.g,
|
||||||
|
oo->current.b,
|
||||||
|
oo->current.a);
|
||||||
|
func_text_font_free(fn);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OBJECT_RECTANGLE:
|
case OBJECT_RECTANGLE:
|
||||||
|
@ -609,7 +643,7 @@ evas_set_scale_smoothness(Evas e, int smooth)
|
||||||
case RENDER_METHOD_ALPHA_HARDWARE:
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,119 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "evas_gl_routines.h"
|
||||||
|
#include "evas_imlib_routines.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
_evas_free_text(Evas_Object o)
|
||||||
|
{
|
||||||
|
Evas_Object_Text oo;
|
||||||
|
|
||||||
|
oo = o;
|
||||||
|
if (o->callbacks) evas_list_free(o->callbacks);
|
||||||
|
if (oo->current.text) free(oo->current.text);
|
||||||
|
free(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_evas_free_text_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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Evas_Object
|
Evas_Object
|
||||||
evas_add_text(Evas e, char *font, int size, char *text)
|
evas_add_text(Evas e, char *font, int size, char *text)
|
||||||
{
|
{
|
||||||
|
Evas_Object_Text oo;
|
||||||
|
Evas_Object_Any o;
|
||||||
|
Evas_List l;
|
||||||
|
Evas_Layer layer;
|
||||||
|
|
||||||
|
o = oo = malloc(sizeof(struct _Evas_Object_Text));
|
||||||
|
memset(o, 0, sizeof(struct _Evas_Object_Text));
|
||||||
|
o->type = OBJECT_TEXT;
|
||||||
|
o->object_free = _evas_free_text;
|
||||||
|
o->object_renderer_data_free = _evas_free_text_renderer_data;
|
||||||
|
|
||||||
|
oo->current.text = strdup(text);
|
||||||
|
oo->current.font = strdup(font);
|
||||||
|
oo->current.size = size;
|
||||||
|
|
||||||
|
{
|
||||||
|
switch (e->current.render_method)
|
||||||
|
{
|
||||||
|
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||||
|
{
|
||||||
|
Evas_Imlib_Font *fn;
|
||||||
|
|
||||||
|
fn = __evas_imlib_text_font_new (e->current.display,
|
||||||
|
oo->current.font,
|
||||||
|
oo->current.size);
|
||||||
|
if (fn)
|
||||||
|
{
|
||||||
|
__evas_imlib_text_get_size(fn, oo->current.text,
|
||||||
|
&oo->current.string.w,
|
||||||
|
&oo->current.string.h);
|
||||||
|
__evas_imlib_text_font_free(fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_BASIC_HARDWARE:
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_3D_HARDWARE:
|
||||||
|
{
|
||||||
|
Evas_GL_Font *fn;
|
||||||
|
|
||||||
|
fn = __evas_gl_text_font_new (e->current.display,
|
||||||
|
oo->current.font,
|
||||||
|
oo->current.size);
|
||||||
|
if (fn)
|
||||||
|
{
|
||||||
|
__evas_gl_text_get_size(fn, oo->current.text,
|
||||||
|
&oo->current.string.w,
|
||||||
|
&oo->current.string.h);
|
||||||
|
__evas_gl_text_font_free(fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
o->current.x = 0;
|
||||||
|
o->current.y = 0;
|
||||||
|
o->current.w = (double)oo->current.string.w;
|
||||||
|
o->current.h = (double)oo->current.string.h;
|
||||||
|
|
||||||
|
for (l = e->layers; l; l = l->next)
|
||||||
|
{
|
||||||
|
layer = l->data;
|
||||||
|
if (layer->layer == o->current.layer)
|
||||||
|
{
|
||||||
|
layer->objects = evas_list_append(layer->objects, o);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
layer = malloc(sizeof(struct _Evas_Layer));
|
||||||
|
memset(layer, 0, sizeof(struct _Evas_Layer));
|
||||||
|
e->layers = evas_list_append(e->layers, layer);
|
||||||
|
layer->objects = evas_list_append(layer->objects, o);
|
||||||
|
|
||||||
|
return o;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include <Evas.h>
|
#include <Evas.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -63,6 +65,7 @@ main(int argc, char **argv)
|
||||||
XMapWindow(d, win);
|
XMapWindow(d, win);
|
||||||
XSync(d, False);
|
XSync(d, False);
|
||||||
}
|
}
|
||||||
|
evas_font_add_path(e, "./fnt");
|
||||||
evas_set_output(e, d, win, vis, cmap);
|
evas_set_output(e, d, win, vis, cmap);
|
||||||
evas_set_output_size(e, win_w, win_h);
|
evas_set_output_size(e, win_w, win_h);
|
||||||
evas_set_output_viewport(e, 0, 0, win_w, win_h);
|
evas_set_output_viewport(e, 0, 0, win_w, win_h);
|
||||||
|
@ -75,10 +78,18 @@ main(int argc, char **argv)
|
||||||
h /= 2;
|
h /= 2;
|
||||||
evas_show(e, o[1]);
|
evas_show(e, o[1]);
|
||||||
|
|
||||||
for (i = 2 ; i < 128; i++)
|
for (i = 2 ; i < 100; 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_set_layer(e, o[i], 100);
|
||||||
|
}
|
||||||
|
for (i = 100; i < 128; i++)
|
||||||
|
{
|
||||||
|
o[i] = evas_add_text(e, "notepad", 20, imgs[i & 0x7]);
|
||||||
|
evas_set_color(e, o[i], rand()&0xff, rand()&0xff, rand()&0xff, 255);
|
||||||
|
evas_show(e, o[i]);
|
||||||
|
evas_set_layer(e, o[i], 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
evas_raise(e, o[1]);
|
evas_raise(e, o[1]);
|
||||||
|
@ -107,6 +118,7 @@ main(int argc, char **argv)
|
||||||
mouse_x = ev.xbutton.x;
|
mouse_x = ev.xbutton.x;
|
||||||
mouse_y = ev.xbutton.y;
|
mouse_y = ev.xbutton.y;
|
||||||
evas_move(e, o[1], mouse_x - w, mouse_y - h);
|
evas_move(e, o[1], mouse_x - w, mouse_y - h);
|
||||||
|
evas_set_layer(e, o[1], 200);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ButtonRelease:
|
case ButtonRelease:
|
||||||
|
@ -118,6 +130,7 @@ main(int argc, char **argv)
|
||||||
mouse_x = ev.xbutton.x;
|
mouse_x = ev.xbutton.x;
|
||||||
mouse_y = ev.xbutton.y;
|
mouse_y = ev.xbutton.y;
|
||||||
evas_move(e, o[1], mouse_x - w, mouse_y - h);
|
evas_move(e, o[1], mouse_x - w, mouse_y - h);
|
||||||
|
evas_set_layer(e, o[1], 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MotionNotify:
|
case MotionNotify:
|
||||||
|
@ -148,7 +161,8 @@ 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]);
|
if (i < 100)
|
||||||
|
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);
|
||||||
|
|
Loading…
Reference in New Issue