diff options
author | Jean-Philippe Andre <jp.andre@samsung.com> | 2014-02-12 21:10:34 +0900 |
---|---|---|
committer | Jean-Philippe Andre <jp.andre@samsung.com> | 2014-02-13 17:29:32 +0900 |
commit | cd926cc9462b44c5aebab3df4c65152d0cd93a89 (patch) | |
tree | 5b3ce533f29453580c2f16890617936ebc9cfd63 /doc | |
parent | 56f403589839074f5a54f6f1329cc5dcb64f3114 (diff) | |
download | efl-cd926cc9462b44c5aebab3df4c65152d0cd93a89.tar.gz |
Evas filters: Add a small utility to take some screenshots
Let's add some real screenshots to the documentation!
Yay! Fancy effects inlined in the Doxygen! Well... soon :)
Diffstat (limited to 'doc')
-rw-r--r-- | doc/previews/preview_text_filter.c | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/doc/previews/preview_text_filter.c b/doc/previews/preview_text_filter.c new file mode 100644 index 0000000000..d462a1ab87 --- /dev/null +++ b/doc/previews/preview_text_filter.c @@ -0,0 +1,118 @@ +/* +#define EFL_EO_API_SUPPORT 1 +#define EFL_BETA_API_SUPPORT 1 +*/ + +#include "Eo.h" +#include "Evas.h" +#include "Ecore_Evas.h" + +#include <stdio.h> + +/* Beginning of the file used for taking a shot of an object. + * Used for font effect screenshots. + */ + +typedef struct +{ + Ecore_Evas *ee; + const char *file; + const char *key; + const char *flags; +} Widget_Preview_Data; + +/* This comes from Elementary's elm_win.c */ +static void +_shot_do(Widget_Preview_Data *wpd) +{ + Ecore_Evas *ee; + Evas_Object *o; + unsigned int *pixels; + int w, h; + + if (!wpd->file) return; + + ecore_evas_manual_render(wpd->ee); + pixels = (void *)ecore_evas_buffer_pixels_get(wpd->ee); + if (!pixels) return; + + ecore_evas_geometry_get(wpd->ee, NULL, NULL, &w, &h); + if ((w < 1) || (h < 1)) return; + + ee = ecore_evas_buffer_new(1, 1); + o = evas_object_image_add(ecore_evas_get(ee)); + evas_object_image_alpha_set(o, ecore_evas_alpha_get(wpd->ee)); + evas_object_image_size_set(o, w, h); + evas_object_image_data_set(o, pixels); + if (!evas_object_image_save(o, wpd->file, wpd->key, wpd->flags)) + fprintf(stderr, "Cannot save window to '%s' (key '%s', flags '%s')\n", + wpd->file, wpd->key, wpd->flags); + + ecore_evas_free(ee); +} + +static void +_usage(const char *argv0, FILE *f) +{ + fprintf(f, "Usage: %s <text> <filter code> <output file> [font] [fontsize]\n", argv0); +} + +int +main(int argc, char **argv) +{ + Widget_Preview_Data wpd = { NULL, NULL, NULL }; + const char *font = "Sans"; + const char *filter, *text; + int fontsize = 32; + Evas_Object *o; + char *whole_filter; + int w, h; + + if (argc < 4) + { + _usage(argv[0], stderr); + return 1; + } + + w = 1; + h = 1; + text = argv[1]; + filter = argv[2]; + wpd.file = argv[3]; + if (argc >= 5) font = argv[4]; + if (argc >= 6) fontsize = atoi(argv[5]); + + evas_init(); + ecore_evas_init(); + + wpd.ee = ecore_evas_buffer_new(w, h); + if (!wpd.ee) return 2; + + ecore_evas_show(wpd.ee); + ecore_evas_manual_render_set(wpd.ee, EINA_TRUE); + + o = evas_object_text_add(ecore_evas_get(wpd.ee)); + evas_object_move(o, 0, 0); + evas_object_resize(o, w, h); + evas_object_text_font_set(o, font, fontsize); + evas_object_text_text_set(o, text); + evas_object_color_set(o, 255, 255, 255, 255); + evas_object_show(o); + + if (asprintf(&whole_filter, "fill(color = #404040); %s", filter) == -1) + return 2; + eo_do(o, evas_obj_text_filter_program_set(whole_filter)); + free(whole_filter); + + ecore_evas_manual_render(wpd.ee); + evas_object_geometry_get(o, NULL, NULL, &w, &h); + ecore_evas_resize(wpd.ee, w, h); + + _shot_do(&wpd); + + ecore_evas_shutdown(); + evas_shutdown(); + + return 0; +} + |