[evas] Example code for evas{_init,_shutdown,_load_error_str}.
authorglima <glima@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 9 Jun 2011 17:00:24 +0000 (17:00 +0000)
committerglima <glima@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 9 Jun 2011 17:00:24 +0000 (17:00 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@60142 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

configure.ac
doc/Doxyfile.in
doc/examples.dox [new file with mode: 0644]
src/examples/Makefile.am
src/examples/enlightenment.png [new file with mode: 0644]
src/examples/evas-init-shutdown.c [new file with mode: 0644]
src/examples/evas-load-error-str.c [new file with mode: 0644]

index 4794475..38dc683 100644 (file)
@@ -1569,10 +1569,14 @@ AM_CONDITIONAL([INSTALL_EXAMPLES], [test "x${install_examples}" = "xyes"])
 build_examples="no"
 AC_ARG_ENABLE([build-examples],
    AC_HELP_STRING([--enable-build-examples],
-                  [enable building examples. @<:@default==disabled@:>@]),
+                  [enable building examples (this requires extra denpendencies. if you don't have them installed yet, don't build with this option or it will fail. build again when you have it, overriding the previous installation). @<:@default==disabled@:>@]),
    [
     if test "x${enableval}" = "xyes" ; then
        build_examples="yes"
+       # put in here the dependencies for Evas' examples. they are
+       # meant to be 'real world' usage examples, thus one will be
+       # using higher level libraries on these programs
+       PKG_CHECK_MODULES([ECORE_EVAS], [ecore-evas])
     else
        build_examples="no"
     fi
index d45276d..4feb87a 100644 (file)
@@ -1,7 +1,7 @@
 PROJECT_NAME           = Evas
 PROJECT_NUMBER         = @PACKAGE_VERSION@
 OUTPUT_DIRECTORY       = .
-INPUT                  = @srcdir@/evas.dox @top_srcdir@/src/lib
+INPUT                  = @srcdir@/evas.dox @srcdir@/examples.dox @top_srcdir@/src/lib
 IMAGE_PATH             = img
 OUTPUT_LANGUAGE        = English
 GENERATE_HTML          = YES
diff --git a/doc/examples.dox b/doc/examples.dox
new file mode 100644 (file)
index 0000000..18fe35b
--- /dev/null
@@ -0,0 +1,35 @@
+/**
+ * @page Examples Examples
+ *
+ * Here is a page with examples.
+ *
+ * @ref Example_Evas_Buffer_Simple
+ *
+ * @ref Example_Evas_Init_Shutdown
+ *
+ * @ref Example_Evas_Load_Error_Str
+ *
+ */
+
+/**
+ * @page Example_Evas_Buffer_Simple Simple Evas canvas example
+ *
+ * The canvas will here use the buffer engine.
+ *
+ * @include evas-buffer-simple.c
+ * @example evas-buffer-simple.c
+ */
+
+/**
+ * @page Example_Evas_Init_Shutdown Nested buffer example
+ *
+ * @include evas-init-shutdown.c
+ * @example evas-init-shutdown.c
+ */
+
+/**
+ * @page Example_Evas_Load_Error_Str File descriptor buffer example
+ *
+ * @include evas-load-error-str.c
+ * @example evas-load-error-str.c
+ */
index ee5114d..236a323 100644 (file)
@@ -11,6 +11,7 @@ AM_CPPFLAGS = \
 -DPACKAGE_BIN_DIR=\"$(bindir)\" \
 -DPACKAGE_LIB_DIR=\"$(libdir)\" \
 -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
+-DPACKAGE_EXAMPLES_DIR=\"$(datadir)/$(PACKAGE)/examples\" \
 @EINA_CFLAGS@ \
 @FREETYPE_CFLAGS@ \
 @PIXMAN_CFLAGS@ \
@@ -31,14 +32,31 @@ evas_buffer_simple_SOURCES = evas-buffer-simple.c
 evas_buffer_simple_LDADD = $(top_builddir)/src/lib/libevas.la
 endif
 
+pkglib_PROGRAMS += evas_init_shutdown
+evas_init_shutdown_SOURCES = evas-init-shutdown.c
+evas_init_shutdown_LDADD = $(top_builddir)/src/lib/libevas.la
+
+# put in here the dependencies for Evas' examples. they are meant to
+# be 'real world' usage examples, thus one will be using higher level
+# libraries on these programs. also remember to link with these extra
+# libs only the example requiring them
+if BUILD_ENGINE_SOFTWARE_X11
+AM_CPPFLAGS += -I$(top_srcdir)/src/modules/engines/software_x11 \
+       @ECORE_EVAS_CFLAGS@
+
+pkglib_PROGRAMS += evas_load_error_str
+evas_load_error_str_SOURCES = evas-load-error-str.c
+evas_load_error_str_LDADD = $(top_builddir)/src/lib/libevas.la @ECORE_EVAS_LIBS@
 endif
 
-
+endif
 
 filesdir = $(datadir)/$(PACKAGE)/examples
-files_DATA =
+files_DATA = $(srcdir)/enlightenment.png
 
 if INSTALL_EXAMPLES
 files_DATA += \
-       evas-buffer-simple.c
+       $(srcdir)/evas-buffer-simple.c \
+       $(srcdir)/evas-init-shutdown.c \
+       $(srcdir)/evas-load-error-str.c
 endif
diff --git a/src/examples/enlightenment.png b/src/examples/enlightenment.png
new file mode 100644 (file)
index 0000000..aeb836b
Binary files /dev/null and b/src/examples/enlightenment.png differ
diff --git a/src/examples/evas-init-shutdown.c b/src/examples/evas-init-shutdown.c
new file mode 100644 (file)
index 0000000..b184625
--- /dev/null
@@ -0,0 +1,56 @@
+/**
+ * Simple example illustrating usage of evas_init() and
+ * evas_shutdown(). Usually one would instantiate a canvas to have
+ * something useful out of Evas. For an example of this kind, see the
+ * @ref Example_Evas_Buffer_Simple.
+ *
+ * Here, we are just listing the engine Evas was compiled with support
+ * to.
+ *
+ * @verbatim
+ * gcc -o evas-init-shutdown evas-init-shutdown.c `pkg-config --libs \
+ * --cflags evas`
+ * @endverbatim
+ *
+ */
+
+#include <Evas.h>
+#include <stdio.h>
+#include <errno.h>
+
+/*
+ * Simple example illustrating usage of evas_init() and
+ * evas_shutdown().  Usually one would instantiate a canvas to have
+ * something useful out of Evas. For an example of this kind, see the
+ * evas-buffer-simple.c, which requires the buffer engine module
+ * compiled in Evas.
+ *
+ * Here, we are just listing the engine Evas was compiled with support
+ * to.
+ */
+
+int
+main(void)
+{
+   Evas *canvas;
+   Eina_List *engine_list, *l;
+   char *engine_name;
+
+   evas_init();
+
+   engine_list = evas_render_method_list();
+   if (!engine_list)
+     {
+        fprintf(stderr, "ERROR: Evas supports no engines! Exit.\n");
+        exit(-1);
+     }
+
+   printf("Available Evas Engines:\n");
+   EINA_LIST_FOREACH(engine_list, l, engine_name)
+     printf("%s\n", engine_name);
+
+   evas_render_method_list_free(engine_list);
+
+   evas_shutdown();
+ }
+
diff --git a/src/examples/evas-load-error-str.c b/src/examples/evas-load-error-str.c
new file mode 100644 (file)
index 0000000..fd460fb
--- /dev/null
@@ -0,0 +1,107 @@
+/**
+ * Simple Evas example illustrating evas_load_error_str()'s usage.
+ *
+ * You'll need at least one engine built for it (excluding the buffer
+ * one) and the png image loader also built. See stdout/stderr for
+ * output.
+ *
+ * @verbatim
+ * gcc -o evas-load-error-str evas-load-error-str.c `pkg-config --libs \
+ * --cflags ecore-evas`
+ * @endverbatim
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+
+#include "config.h"
+#endif
+
+#include <Ecore.h>
+#include <Ecore_Evas.h>
+#include <stdio.h>
+#include <errno.h>
+
+#define WIDTH  (320)
+#define HEIGHT (240)
+
+static const char *valid_path = PACKAGE_EXAMPLES_DIR "/enlightenment.png";
+static const char *bogus_path = "/tmp/non-existent-220986.png";
+
+int
+main(void)
+{
+   Evas *evas;
+   Ecore_Evas *ee;
+   Evas_Object *img1, *img2, *bg;
+   int err;
+
+   if (!ecore_evas_init())
+     return EXIT_FAILURE;
+
+   /* this will give you a window with an Evas canvas under the first
+    * engine available */
+   ee = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL);
+   if (!ee)
+     goto error;
+
+   ecore_evas_show(ee);
+
+   /* the canvas pointer, de facto */
+   evas = ecore_evas_get(ee);
+
+   bg = evas_object_rectangle_add(evas);
+   evas_object_color_set(bg, 255, 255, 255, 255); /* white bg */
+   evas_object_move(bg, 0, 0); /* at canvas' origin */
+   evas_object_resize(bg, WIDTH, HEIGHT); /* covers full canvas */
+   evas_object_show(bg);
+
+   img1 = evas_object_image_filled_add(evas);
+   evas_object_image_file_set(img1, valid_path, NULL);
+   err = evas_object_image_load_error_get(img1);
+   if (err != EVAS_LOAD_ERROR_NONE)
+     {
+        fprintf(stderr, "could not load image '%s'. error string is \"%s\"\n",
+                valid_path, evas_load_error_str(err));
+     }
+   else
+     {
+        fprintf(stdout,
+                "loaded image '%s' with succes! error string is \"%s\"\n",
+                valid_path, evas_load_error_str(err));
+
+        evas_object_move(img1, 0, 0);
+        evas_object_resize(img1, WIDTH / 2, HEIGHT / 2);
+        evas_object_show(img1);
+     }
+
+   /* image loading will fail for this one -- unless one cheats and
+    * puts a valid image on that path */
+   img2 = evas_object_image_filled_add(evas);
+   evas_object_image_file_set(img2, bogus_path, NULL);
+   err = evas_object_image_load_error_get(img2);
+   if (err != EVAS_LOAD_ERROR_NONE)
+     {
+        fprintf(stderr, "could not load image '%s': error string is \"%s\"\n",
+                bogus_path, evas_load_error_str(err));
+     }
+   else
+     {
+        evas_object_move(img2, WIDTH / 2, HEIGHT / 2);
+        evas_object_resize(img2, WIDTH / 2, HEIGHT / 2);
+        evas_object_show(img2);
+     }
+
+   ecore_main_loop_begin();
+
+   ecore_evas_free(ee);
+   ecore_evas_shutdown();
+   return 0;
+
+  error:
+   fprintf(stderr, "you got to have at least one evas engine built and linked"
+           " up to ecore-evas for this example to run properly.\n");
+   ecore_evas_shutdown();
+   return -1;
+}
+