add eenvader.fractal: an animated wallpaper
SVN revision: 62245
This commit is contained in:
commit
b8e9081c4a
|
@ -0,0 +1,35 @@
|
||||||
|
/INSTALL
|
||||||
|
/Makefile
|
||||||
|
/Makefile.in
|
||||||
|
/aclocal.m4
|
||||||
|
/autom4te.cache/
|
||||||
|
/config.guess
|
||||||
|
/config.h
|
||||||
|
/config.h.in
|
||||||
|
/config.log
|
||||||
|
/config.status
|
||||||
|
/config.sub
|
||||||
|
/configure
|
||||||
|
/depcomp
|
||||||
|
/install-sh
|
||||||
|
/libtool
|
||||||
|
/ltmain.sh
|
||||||
|
/m4/libtool.m4
|
||||||
|
/m4/ltoptions.m4
|
||||||
|
/m4/ltsugar.m4
|
||||||
|
/m4/ltversion.m4
|
||||||
|
/m4/lt~obsolete.m4
|
||||||
|
/missing
|
||||||
|
/src/.deps/
|
||||||
|
/src/.libs/
|
||||||
|
/src/Makefile
|
||||||
|
/src/Makefile.in
|
||||||
|
/src/eenvaders
|
||||||
|
/src/*.lo
|
||||||
|
/src/*.o
|
||||||
|
/src/module.la
|
||||||
|
/stamp-h1
|
||||||
|
/compile
|
||||||
|
/data/Makefile
|
||||||
|
/data/Makefile.in
|
||||||
|
/data/eenvaders.edj
|
|
@ -0,0 +1,32 @@
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to
|
||||||
|
deal in the Software without restriction, including without limitation the
|
||||||
|
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies of the Software and its Copyright notices. In addition publicly
|
||||||
|
documented acknowledgment must be given that this software has been used if no
|
||||||
|
source code of this software is made available publicly. Making the source
|
||||||
|
available publicly means including the source for this software with the
|
||||||
|
distribution, or a method to get this software via some reasonable mechanism
|
||||||
|
(electronic transfer via a network or media) as well as making an offer to
|
||||||
|
supply the source on request. This Copyright notice serves as an offer to
|
||||||
|
supply the source on on request as well. Instead of this, supplying
|
||||||
|
acknowledgments of use of this software in either Copyright notices, Manuals,
|
||||||
|
Publicity and Marketing documents or any documentation provided with any
|
||||||
|
product containing this software. This License does not apply to any software
|
||||||
|
that links to the libraries provided by this software (statically or
|
||||||
|
dynamically), but only to the software provided.
|
||||||
|
|
||||||
|
Please see the COPYING-PLAIN for a plain-english explanation of this notice
|
||||||
|
and its intent.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,6 @@
|
||||||
|
AUTOMAKE_OPTIONS = 1.4 foreign
|
||||||
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
|
SUBDIRS = src data
|
||||||
|
|
||||||
|
ACLOCAL_AMFLAGS = -I m4
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
rm -rf autom4te.cache
|
||||||
|
rm -f aclocal.m4 ltmain.sh
|
||||||
|
|
||||||
|
touch README
|
||||||
|
|
||||||
|
echo "Running autopoint..." ; autopoint -f || :
|
||||||
|
echo "Running aclocal..." ; aclocal -I m4 $ACLOCAL_FLAGS || exit 1
|
||||||
|
echo "Running autoheader..." ; autoheader || exit 1
|
||||||
|
echo "Running autoconf..." ; autoconf || exit 1
|
||||||
|
echo "Running libtoolize..." ; (libtoolize --copy --automake || glibtoolize --automake) || exit 1
|
||||||
|
echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1
|
||||||
|
|
||||||
|
if [ -z "$NOCONFIGURE" ]; then
|
||||||
|
./configure "$@"
|
||||||
|
fi
|
|
@ -0,0 +1,65 @@
|
||||||
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
|
# get rid of that stupid cache mechanism
|
||||||
|
rm -f config.cache
|
||||||
|
|
||||||
|
AC_INIT(eenvaders, 0.1, billiob@efl.so)
|
||||||
|
AC_PREREQ(2.52)
|
||||||
|
AC_CONFIG_SRCDIR(configure.ac)
|
||||||
|
AC_CANONICAL_BUILD
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
AC_ISC_POSIX
|
||||||
|
|
||||||
|
AM_INIT_AUTOMAKE(1.6)
|
||||||
|
AM_CONFIG_HEADER(config.h)
|
||||||
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||||
|
|
||||||
|
AC_PROG_CC_C99
|
||||||
|
AC_HEADER_STDC
|
||||||
|
AC_C_CONST
|
||||||
|
AM_PROG_CC_C_O
|
||||||
|
|
||||||
|
define([AC_LIBTOOL_LANG_CXX_CONFIG], [:])dnl
|
||||||
|
define([AC_LIBTOOL_LANG_F77_CONFIG], [:])dnl
|
||||||
|
AC_PROG_LIBTOOL
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(ECORE_EVAS, [ecore-evas])
|
||||||
|
PKG_CHECK_MODULES(ENLIGHTENMENT, [enlightenment])
|
||||||
|
datadir_edj=$(pkg-config --variable=prefix enlightenment)/share/enlightenment/data/backgrounds
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(EDJE, [edje >= 0.5.0])
|
||||||
|
vmaj=$(pkg-config --variable=vmaj edje)
|
||||||
|
MODULE_ARCH="$host_os-$host_cpu-$vmaj.0.0"
|
||||||
|
AC_SUBST(MODULE_ARCH)
|
||||||
|
AC_DEFINE_UNQUOTED(MODULE_ARCH, "$MODULE_ARCH", "Module architecture")
|
||||||
|
|
||||||
|
# Find edje_cc
|
||||||
|
AC_ARG_WITH(edje-cc,
|
||||||
|
AC_HELP_STRING([--with-edje-cc=PATH], [specify a specific path to edje_cc]),
|
||||||
|
[
|
||||||
|
v=$withval;
|
||||||
|
EDJE_CC=$v
|
||||||
|
],[
|
||||||
|
EDJE_CC=$(pkg-config --variable=prefix edje)/bin/edje_cc
|
||||||
|
]
|
||||||
|
)
|
||||||
|
AC_SUBST(EDJE_CC)
|
||||||
|
AC_MSG_CHECKING([Which edje_cc to use])
|
||||||
|
AC_MSG_RESULT(${EDJE_CC})
|
||||||
|
|
||||||
|
datadir=$(pkg-config --variable=modules edje)/${PACKAGE}
|
||||||
|
AC_ARG_ENABLE(homedir-install,
|
||||||
|
AS_HELP_STRING([--enable-homedir-install], [Install module in homedir]),
|
||||||
|
[
|
||||||
|
datadir="${HOME}/.edje/modules/${PACKAGE}";
|
||||||
|
datadir_edj="${HOME}/.e/e/backgrounds"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
AC_SUBST(datadir_edj)
|
||||||
|
|
||||||
|
AC_OUTPUT([
|
||||||
|
Makefile
|
||||||
|
data/Makefile
|
||||||
|
src/Makefile
|
||||||
|
], [
|
||||||
|
])
|
|
@ -0,0 +1,18 @@
|
||||||
|
AUTOMAKE_OPTIONS = 1.4 foreign
|
||||||
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
|
||||||
|
EDJE_FLAGS = -v
|
||||||
|
|
||||||
|
filesdir = @datadir_edj@
|
||||||
|
files_DATA = eenvaders.edj
|
||||||
|
|
||||||
|
EXTRA_DIST = eenvaders.edc
|
||||||
|
|
||||||
|
eenvaders.edj: eenvaders.edc
|
||||||
|
$(EDJE_CC) $(EDJE_FLAGS) $< $@
|
||||||
|
|
||||||
|
clean-local:
|
||||||
|
rm -rf eenvaders.edj *~
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
rm -rf $(DESTDIR)@datadir_edj@/eenvaders.edj
|
|
@ -0,0 +1,48 @@
|
||||||
|
externals {
|
||||||
|
external: "eenvaders";
|
||||||
|
}
|
||||||
|
|
||||||
|
collections {
|
||||||
|
group {
|
||||||
|
name: "e/desktop/background";
|
||||||
|
|
||||||
|
script {
|
||||||
|
public clock_cb(unused) {
|
||||||
|
emit("eenvaders:refresh", "☃");
|
||||||
|
timer(30, "clock_cb", 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
parts {
|
||||||
|
part {
|
||||||
|
name: "bg";
|
||||||
|
type: RECT;
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
color: 0 43 54 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
part {
|
||||||
|
name: "eenvaders";
|
||||||
|
type: EXTERNAL;
|
||||||
|
source: "eenvaders";
|
||||||
|
|
||||||
|
description {
|
||||||
|
state: "default" 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get everything started at load
|
||||||
|
programs {
|
||||||
|
program {
|
||||||
|
name: "init";
|
||||||
|
signal: "load";
|
||||||
|
source: "";
|
||||||
|
script {
|
||||||
|
clock_cb(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
WIDTH = 7
|
||||||
|
HEIGHT = 7
|
||||||
|
|
||||||
|
|
||||||
|
for i in range(1<<15):
|
||||||
|
img = Image.new("RGB", (WIDTH, HEIGHT), (255, 255, 255))
|
||||||
|
pix = img.load()
|
||||||
|
if (i & (1 << 0)):
|
||||||
|
pix[1, 1] = (0, 0, 0)
|
||||||
|
pix[5, 1] = (0, 0, 0)
|
||||||
|
if (i & (1 << 1)):
|
||||||
|
pix[2, 1] = (0, 0, 0)
|
||||||
|
pix[4, 1] = (0, 0, 0)
|
||||||
|
if (i & (1 << 2)):
|
||||||
|
pix[3, 1] = (0, 0, 0)
|
||||||
|
if (i & (1 << 3)):
|
||||||
|
pix[1, 2] = (0, 0, 0)
|
||||||
|
pix[5, 2] = (0, 0, 0)
|
||||||
|
if (i & (1 << 4)):
|
||||||
|
pix[2, 2] = (0, 0, 0)
|
||||||
|
pix[4, 2] = (0, 0, 0)
|
||||||
|
if (i & (1 << 5)):
|
||||||
|
pix[3, 2] = (0, 0, 0)
|
||||||
|
if (i & (1 << 6)):
|
||||||
|
pix[1, 3] = (0, 0, 0)
|
||||||
|
pix[5, 3] = (0, 0, 0)
|
||||||
|
if (i & (1 << 7)):
|
||||||
|
pix[2, 3] = (0, 0, 0)
|
||||||
|
pix[4, 3] = (0, 0, 0)
|
||||||
|
if (i & (1 << 8)):
|
||||||
|
pix[3, 3] = (0, 0, 0)
|
||||||
|
if (i & (1 << 9)):
|
||||||
|
pix[1, 4] = (0, 0, 0)
|
||||||
|
pix[5, 4] = (0, 0, 0)
|
||||||
|
if (i & (1 << 10)):
|
||||||
|
pix[2, 4] = (0, 0, 0)
|
||||||
|
pix[4, 4] = (0, 0, 0)
|
||||||
|
if (i & (1 << 11)):
|
||||||
|
pix[3, 4] = (0, 0, 0)
|
||||||
|
if (i & (1 << 12)):
|
||||||
|
pix[1, 5] = (0, 0, 0)
|
||||||
|
pix[5, 5] = (0, 0, 0)
|
||||||
|
if (i & (1 << 13)):
|
||||||
|
pix[2, 5] = (0, 0, 0)
|
||||||
|
pix[4, 5] = (0, 0, 0)
|
||||||
|
if (i & (1 << 14)):
|
||||||
|
pix[3, 5] = (0, 0, 0)
|
||||||
|
img.save("img/{0}.png".format(i))
|
|
@ -0,0 +1,28 @@
|
||||||
|
MAINTAINERCLEANFILES = Makefile.in
|
||||||
|
INCLUDES = -I. \
|
||||||
|
-I$(top_srcdir) \
|
||||||
|
-I$(includedir) \
|
||||||
|
@EDJE_CFLAGS@
|
||||||
|
|
||||||
|
|
||||||
|
pkgdir = $(datadir)/$(MODULE_ARCH)
|
||||||
|
pkg_LTLIBRARIES = module.la
|
||||||
|
module_la_SOURCES = \
|
||||||
|
eenvaders_evas_smart.c \
|
||||||
|
eenvaders_edje_external.c
|
||||||
|
|
||||||
|
module_la_LIBADD = @EDJE_LIBS@
|
||||||
|
module_la_LDFLAGS = -module -avoid-version
|
||||||
|
module_la_DEPENDENCIES = $(top_builddir)/config.h
|
||||||
|
|
||||||
|
bin_PROGRAMS = eenvaders
|
||||||
|
|
||||||
|
eenvaders_SOURCES = \
|
||||||
|
eenvaders_evas_smart.c \
|
||||||
|
eenvaders.c
|
||||||
|
eenvaders_CPPFLAGS = \
|
||||||
|
@ECORE_EVAS_CFLAGS@
|
||||||
|
eenvaders_LDADD = @ECORE_EVAS_LIBS@
|
||||||
|
|
||||||
|
clean-local:
|
||||||
|
rm -rf *~
|
|
@ -0,0 +1,106 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <Evas.h>
|
||||||
|
#include <Ecore.h>
|
||||||
|
#include <Ecore_Evas.h>
|
||||||
|
|
||||||
|
#include "eenvaders_evas_smart.h"
|
||||||
|
|
||||||
|
#define BG 0xff002b36
|
||||||
|
#define FG 0xff839496
|
||||||
|
|
||||||
|
#define MIN(a,b) (((a)<(b))?(a):(b))
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
Ecore_Evas *ee;
|
||||||
|
Evas *evas;
|
||||||
|
Evas_Coord w, h;
|
||||||
|
Evas_Object *bg;
|
||||||
|
Evas_Object *eenvaders;
|
||||||
|
} eenvaders_g;
|
||||||
|
#define _G eenvaders_g
|
||||||
|
|
||||||
|
static void
|
||||||
|
resize_cb(Ecore_Evas *ee)
|
||||||
|
{
|
||||||
|
int w, h;
|
||||||
|
|
||||||
|
ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
|
||||||
|
evas_object_resize(_G.bg, w, h);
|
||||||
|
evas_object_resize(_G.eenvaders, w, h);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
timer_cb(void *data)
|
||||||
|
{
|
||||||
|
Evas_Object *o = (Evas_Object *)data;
|
||||||
|
|
||||||
|
evas_object_smart_callback_call(o, "refresh", NULL);
|
||||||
|
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(void)
|
||||||
|
{
|
||||||
|
unsigned int seedval;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
if (!ecore_evas_init())
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
_G.w = 600;
|
||||||
|
_G.h = 350;
|
||||||
|
|
||||||
|
|
||||||
|
/*open file */
|
||||||
|
if ((fd = open("/dev/urandom", O_RDONLY)) < 0) {
|
||||||
|
perror(NULL);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (read(fd, &seedval, sizeof(seedval)) != sizeof(seedval)) {
|
||||||
|
perror(NULL);
|
||||||
|
close(fd);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
srand(seedval);
|
||||||
|
|
||||||
|
_G.ee = ecore_evas_software_x11_new(
|
||||||
|
NULL, /* const char * disp_name */
|
||||||
|
0, /* Ecore_X_Window parent */
|
||||||
|
0, 0, _G.w, _G.h);
|
||||||
|
|
||||||
|
ecore_evas_title_set(_G.ee, "EEnavders.fractal");
|
||||||
|
ecore_evas_borderless_set(_G.ee, 0);
|
||||||
|
ecore_evas_show(_G.ee);
|
||||||
|
_G.evas = ecore_evas_get(_G.ee);
|
||||||
|
|
||||||
|
_G.bg = evas_object_rectangle_add(_G.evas);
|
||||||
|
evas_object_color_set(_G.bg,
|
||||||
|
(BG >> 16) & 0xff,
|
||||||
|
(BG >> 8) & 0xff,
|
||||||
|
BG & 0xff,
|
||||||
|
BG >> 24);
|
||||||
|
evas_object_move(_G.bg, 0, 0);
|
||||||
|
evas_object_resize(_G.bg, _G.w, _G.h);
|
||||||
|
evas_object_show(_G.bg);
|
||||||
|
|
||||||
|
_G.eenvaders = eenvaders_smart_new(_G.evas);
|
||||||
|
evas_object_resize(_G.eenvaders, _G.w, _G.h);
|
||||||
|
evas_object_show(_G.eenvaders);
|
||||||
|
|
||||||
|
ecore_timer_add(3, timer_cb, _G.eenvaders);
|
||||||
|
|
||||||
|
ecore_evas_callback_resize_set(_G.ee, &resize_cb);
|
||||||
|
|
||||||
|
ecore_main_loop_begin();
|
||||||
|
|
||||||
|
ecore_evas_shutdown();
|
||||||
|
ecore_shutdown();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,192 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <Evas.h>
|
||||||
|
#include <Ecore.h>
|
||||||
|
#include <Ecore_Evas.h>
|
||||||
|
#include <Edje.h>
|
||||||
|
|
||||||
|
#include "eenvaders_evas_smart.h"
|
||||||
|
|
||||||
|
/* Prototypes -{{{-*/
|
||||||
|
|
||||||
|
static Evas_Object *
|
||||||
|
eenvaders_ext_add(void *data, Evas *evas, Evas_Object *parent,
|
||||||
|
const Eina_List *params, const char *part_name);
|
||||||
|
static void
|
||||||
|
eenvaders_ext_state_set(void *data, Evas_Object *obj,
|
||||||
|
const void *from_params,
|
||||||
|
const void *to_params, float pos);
|
||||||
|
static void
|
||||||
|
eenvaders_ext_signal_emit(void *data, Evas_Object *obj,
|
||||||
|
const char *emission, const char *source);
|
||||||
|
static Eina_Bool
|
||||||
|
eenvaders_ext_param_set(void *data, Evas_Object *obj,
|
||||||
|
const Edje_External_Param *param);
|
||||||
|
static Eina_Bool
|
||||||
|
eenvaders_ext_param_get(void *data, const Evas_Object *obj,
|
||||||
|
Edje_External_Param *param);
|
||||||
|
static Evas_Object *
|
||||||
|
eenvaders_ext_content_get(void *data, const Evas_Object *obj,
|
||||||
|
const char *content);
|
||||||
|
static void*
|
||||||
|
eenvaders_ext_params_parse(void *data, Evas_Object *obj,
|
||||||
|
const Eina_List *params);
|
||||||
|
static void
|
||||||
|
eenvaders_ext_params_free(void *params);
|
||||||
|
static const char*
|
||||||
|
eenvaders_ext_label_get(void *data);
|
||||||
|
static const char*
|
||||||
|
eenvaders_ext_description_get(void *data);
|
||||||
|
static Evas_Object *
|
||||||
|
eenvaders_ext_icon_add(void *data, Evas *e);
|
||||||
|
static Evas_Object *
|
||||||
|
eenvaders_ext_preview_add(void *data, Evas *e);
|
||||||
|
static const char*
|
||||||
|
eenvaders_ext_translate(void *data, const char *orig);
|
||||||
|
|
||||||
|
/* }}} */
|
||||||
|
/* Globals -{{{-*/
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
Edje_External_Type ext_type;
|
||||||
|
} eenvaders_g = {
|
||||||
|
.ext_type = {
|
||||||
|
.abi_version = EDJE_EXTERNAL_TYPE_ABI_VERSION,
|
||||||
|
.module = "eenvaders",
|
||||||
|
.module_name = "eenvaders",
|
||||||
|
.add = eenvaders_ext_add,
|
||||||
|
.state_set = eenvaders_ext_state_set,
|
||||||
|
.signal_emit = eenvaders_ext_signal_emit,
|
||||||
|
.param_set = eenvaders_ext_param_set,
|
||||||
|
.param_get = eenvaders_ext_param_get,
|
||||||
|
.content_get = eenvaders_ext_content_get,
|
||||||
|
.params_parse = eenvaders_ext_params_parse,
|
||||||
|
.params_free = eenvaders_ext_params_free,
|
||||||
|
.label_get = eenvaders_ext_label_get,
|
||||||
|
.description_get = eenvaders_ext_description_get,
|
||||||
|
.icon_add = eenvaders_ext_icon_add,
|
||||||
|
.preview_add = eenvaders_ext_preview_add,
|
||||||
|
.translate = eenvaders_ext_translate,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
#define _G eenvaders_g
|
||||||
|
|
||||||
|
/* }}} */
|
||||||
|
/* Edje External -{{{-*/
|
||||||
|
|
||||||
|
static Evas_Object *
|
||||||
|
eenvaders_ext_add(void *data, Evas *evas, Evas_Object *parent,
|
||||||
|
const Eina_List *params, const char *part_name)
|
||||||
|
{
|
||||||
|
return eenvaders_smart_new(evas);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eenvaders_ext_state_set(void *data, Evas_Object *obj,
|
||||||
|
const void *from_params,
|
||||||
|
const void *to_params, float pos)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eenvaders_ext_signal_emit(void *data, Evas_Object *obj,
|
||||||
|
const char *emission, const char *source)
|
||||||
|
{
|
||||||
|
evas_object_smart_callback_call(obj, emission, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
eenvaders_ext_param_set(void *data, Evas_Object *obj,
|
||||||
|
const Edje_External_Param *param)
|
||||||
|
{
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
eenvaders_ext_param_get(void *data, const Evas_Object *obj,
|
||||||
|
Edje_External_Param *param)
|
||||||
|
{
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Evas_Object *
|
||||||
|
eenvaders_ext_content_get(void *data, const Evas_Object *obj,
|
||||||
|
const char *content)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void*
|
||||||
|
eenvaders_ext_params_parse(void *data, Evas_Object *obj,
|
||||||
|
const Eina_List *params)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eenvaders_ext_params_free(void *params)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char*
|
||||||
|
eenvaders_ext_label_get(void *data)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char*
|
||||||
|
eenvaders_ext_description_get(void *data)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Evas_Object *
|
||||||
|
eenvaders_ext_icon_add(void *data, Evas *e)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Evas_Object *
|
||||||
|
eenvaders_ext_preview_add(void *data, Evas *e)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char*
|
||||||
|
eenvaders_ext_translate(void *data, const char *orig)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
/* }}} */
|
||||||
|
/* Init/Shutdown -{{{-*/
|
||||||
|
|
||||||
|
Eina_Bool
|
||||||
|
eenvaders_init(void)
|
||||||
|
{
|
||||||
|
unsigned int seedval = time(NULL);
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
if ((fd = open("/dev/random", O_RDONLY)) >= 0) {
|
||||||
|
read(fd, &seedval, sizeof(seedval));
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
srand(seedval);
|
||||||
|
|
||||||
|
edje_external_type_register("eenvaders", &_G.ext_type);
|
||||||
|
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
eenvaders_shutdown(void)
|
||||||
|
{
|
||||||
|
edje_external_type_unregister("eenvaders");
|
||||||
|
}
|
||||||
|
|
||||||
|
EINA_MODULE_INIT(eenvaders_init);
|
||||||
|
EINA_MODULE_SHUTDOWN(eenvaders_shutdown);
|
||||||
|
|
||||||
|
/* }}} */
|
|
@ -0,0 +1,304 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "eenvaders_evas_smart.h"
|
||||||
|
|
||||||
|
#define BG 0xff002b36
|
||||||
|
#define FG 0xff839496
|
||||||
|
|
||||||
|
#define MIN(a,b) (((a)<(b))?(a):(b))
|
||||||
|
|
||||||
|
/* Prototypes -{{{-*/
|
||||||
|
static Evas_Smart *_eenvaders_object_smart_get(void);
|
||||||
|
static Evas_Object *eenvaders_object_new(Evas *evas);
|
||||||
|
static void _eenvaders_object_del(Evas_Object *o);
|
||||||
|
static void _eenvaders_object_move(Evas_Object *o, Evas_Coord x, Evas_Coord y);
|
||||||
|
static void _eenvaders_object_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h);
|
||||||
|
static void _eenvaders_object_show(Evas_Object *o);
|
||||||
|
static void _eenvaders_object_hide(Evas_Object *o);
|
||||||
|
static void _eenvaders_object_color_set(Evas_Object *o, int r, int g, int b, int a);
|
||||||
|
static void _eenvaders_object_clip_set(Evas_Object *o, Evas_Object *clip);
|
||||||
|
static void _eenvaders_object_clip_unset(Evas_Object *o);
|
||||||
|
|
||||||
|
static void
|
||||||
|
draw_eenvaders(Evas_Object *smart_obj,
|
||||||
|
int x, int y, int w, int h);
|
||||||
|
/* }}} */
|
||||||
|
/* Globals -{{{-*/
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
Evas_Smart_Class klass;
|
||||||
|
} eenvaders_evas_smart_g = {
|
||||||
|
.klass = {
|
||||||
|
.name = "eenvaders_object",
|
||||||
|
.version = EVAS_SMART_CLASS_VERSION,
|
||||||
|
.add = NULL,
|
||||||
|
.del = _eenvaders_object_del,
|
||||||
|
.move = _eenvaders_object_move,
|
||||||
|
.resize = _eenvaders_object_resize,
|
||||||
|
.show = NULL,
|
||||||
|
.hide = NULL,
|
||||||
|
.color_set = NULL,
|
||||||
|
.clip_set = NULL,
|
||||||
|
.clip_unset = NULL,
|
||||||
|
.calculate = NULL,
|
||||||
|
.member_add = NULL,
|
||||||
|
.member_del = NULL,
|
||||||
|
.parent = NULL,
|
||||||
|
.callbacks = NULL,
|
||||||
|
.interfaces = NULL,
|
||||||
|
.data = NULL,
|
||||||
|
},
|
||||||
|
#define _G eenvaders_evas_smart_g
|
||||||
|
};
|
||||||
|
|
||||||
|
/* }}} */
|
||||||
|
/* Eenvaders functions -{{{-*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
eenvaders_mouse_down(void *data,
|
||||||
|
Evas *evas,
|
||||||
|
Evas_Object *child,
|
||||||
|
void *event_info)
|
||||||
|
{
|
||||||
|
Evas_Coord x, y, w, h;
|
||||||
|
Evas_Event_Mouse_Up *evt = event_info;
|
||||||
|
Evas_Object *parent = data;
|
||||||
|
void *mem;
|
||||||
|
|
||||||
|
x = evt->canvas.x;
|
||||||
|
y = evt->canvas.y;
|
||||||
|
|
||||||
|
mem = evas_object_data_del(child, "m");
|
||||||
|
if (!mem)
|
||||||
|
return;
|
||||||
|
|
||||||
|
free(mem);
|
||||||
|
evas_object_geometry_get(child, &x, &y, &w, &h);
|
||||||
|
evas_object_smart_member_del(child);
|
||||||
|
evas_object_del(child);
|
||||||
|
draw_eenvaders(parent, x+3, y+3, w-3, h-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Evas_Object*
|
||||||
|
new_eenvader(Evas *evas, Evas_Object *smart_obj)
|
||||||
|
{
|
||||||
|
Evas_Object *o = NULL;
|
||||||
|
uint16_t u = rand();
|
||||||
|
int *mem = calloc(7 * 7, sizeof(int));
|
||||||
|
|
||||||
|
if (!mem) {
|
||||||
|
perror(NULL);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 15; i++) {
|
||||||
|
if (u & (1 << i)) {
|
||||||
|
mem[7 + 7*(i/3) + 1 + i%3] = FG;
|
||||||
|
mem[7 + 7*(i/3) + 5 - i%3] = FG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
o = evas_object_image_filled_add(evas);
|
||||||
|
evas_object_image_alpha_set(o, EINA_TRUE);
|
||||||
|
evas_object_image_fill_set(o, 0, 0, 7, 7);
|
||||||
|
evas_object_image_smooth_scale_set(o, EINA_FALSE);
|
||||||
|
evas_object_image_size_set (o, 7, 7);
|
||||||
|
evas_object_image_data_set(o, (void *) mem);
|
||||||
|
evas_object_data_set(o, "m", (void *) mem);
|
||||||
|
|
||||||
|
evas_object_event_callback_add(o,
|
||||||
|
EVAS_CALLBACK_MOUSE_DOWN,
|
||||||
|
eenvaders_mouse_down,
|
||||||
|
smart_obj);
|
||||||
|
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
square_ceil_7(int n)
|
||||||
|
{
|
||||||
|
/* XXX: considering n >= 7 */
|
||||||
|
int r = 1;
|
||||||
|
|
||||||
|
n /= 7;
|
||||||
|
|
||||||
|
while (n >>= 1) {
|
||||||
|
r <<= 1;
|
||||||
|
}
|
||||||
|
return r * 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
draw_eenvaders(Evas_Object *smart_obj,
|
||||||
|
int x, int y, int w, int h)
|
||||||
|
{
|
||||||
|
Evas_Object *o;
|
||||||
|
int d;
|
||||||
|
|
||||||
|
if (w < 7 || h < 7)
|
||||||
|
return;
|
||||||
|
|
||||||
|
d = square_ceil_7(MIN(w,h));
|
||||||
|
|
||||||
|
o = new_eenvader(evas_object_evas_get(smart_obj), smart_obj);
|
||||||
|
evas_object_resize(o, d, d);
|
||||||
|
evas_object_smart_member_add(o, smart_obj);
|
||||||
|
|
||||||
|
switch(rand() & 3) {
|
||||||
|
case 0:
|
||||||
|
/* top-left */
|
||||||
|
evas_object_move(o, x, y);
|
||||||
|
evas_object_show(o);
|
||||||
|
|
||||||
|
draw_eenvaders(smart_obj, x+d, y, w-d, h); /* right */
|
||||||
|
draw_eenvaders(smart_obj, x, y+d, d, h-d); /* bottom */
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
/* top-right */
|
||||||
|
evas_object_move(o, x+w-d, y);
|
||||||
|
evas_object_show(o);
|
||||||
|
|
||||||
|
draw_eenvaders(smart_obj, x, y+d, w, h-d); /* bottom */
|
||||||
|
draw_eenvaders(smart_obj, x, y, w-d, d); /* left */
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
/* bottom-right */
|
||||||
|
evas_object_move(o, x+w-d, y+h-d);
|
||||||
|
evas_object_show(o);
|
||||||
|
|
||||||
|
draw_eenvaders(smart_obj, x, y, w-d, h); /* left */
|
||||||
|
draw_eenvaders(smart_obj, x+w-d, y, d, h-d); /* top */
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
/* bottom-left */
|
||||||
|
evas_object_move(o, x, y+h-d);
|
||||||
|
evas_object_show(o);
|
||||||
|
|
||||||
|
draw_eenvaders(smart_obj, x, y, w, h-d); /* top */
|
||||||
|
draw_eenvaders(smart_obj, x+d, y+h-d, w-d, d); /* right */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* }}} */
|
||||||
|
/* Smart Object -{{{-*/
|
||||||
|
|
||||||
|
Evas_Object *
|
||||||
|
eenvaders_smart_new(Evas *e)
|
||||||
|
{
|
||||||
|
return eenvaders_object_new(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eenvaders_on_refresh(void *data, Evas_Object *o, void *event_info)
|
||||||
|
{
|
||||||
|
Evas_Coord x, y, w, h;
|
||||||
|
Evas_Object *child;
|
||||||
|
void *mem;
|
||||||
|
Eina_List *list;
|
||||||
|
|
||||||
|
list = evas_object_smart_members_get(o);
|
||||||
|
EINA_LIST_FREE(list, child) {
|
||||||
|
void *mem;
|
||||||
|
|
||||||
|
mem = evas_object_data_del(child, "m");
|
||||||
|
free(mem);
|
||||||
|
evas_object_event_callback_del(o, EVAS_CALLBACK_MOUSE_DOWN,
|
||||||
|
eenvaders_mouse_down);
|
||||||
|
evas_object_smart_member_del(child);
|
||||||
|
evas_object_del(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
evas_object_geometry_get(o, &x, &y, &w, &h);
|
||||||
|
draw_eenvaders(o, x, y, w, h);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Evas_Object *
|
||||||
|
eenvaders_object_new(Evas *evas)
|
||||||
|
{
|
||||||
|
Evas_Object *eenvaders_object;
|
||||||
|
|
||||||
|
eenvaders_object = evas_object_smart_add(evas,
|
||||||
|
_eenvaders_object_smart_get());
|
||||||
|
evas_object_smart_callback_add(eenvaders_object,
|
||||||
|
"refresh",
|
||||||
|
eenvaders_on_refresh,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
return eenvaders_object;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Evas_Smart *
|
||||||
|
_eenvaders_object_smart_get(void)
|
||||||
|
{
|
||||||
|
static Evas_Smart *smart = NULL;
|
||||||
|
|
||||||
|
if (smart)
|
||||||
|
return smart;
|
||||||
|
|
||||||
|
smart = evas_smart_class_new(&_G.klass);
|
||||||
|
return smart;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_eenvaders_object_del(Evas_Object *o)
|
||||||
|
{
|
||||||
|
Evas_Object *child;
|
||||||
|
void *mem;
|
||||||
|
Eina_List *list;
|
||||||
|
|
||||||
|
list = evas_object_smart_members_get(o);
|
||||||
|
EINA_LIST_FREE(list, child) {
|
||||||
|
void *mem;
|
||||||
|
|
||||||
|
evas_object_smart_member_del(child);
|
||||||
|
evas_object_del(child);
|
||||||
|
mem = evas_object_data_del(child, "m");
|
||||||
|
free(mem);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_eenvaders_object_move(Evas_Object *o, Evas_Coord x, Evas_Coord y)
|
||||||
|
{
|
||||||
|
Evas_Coord orig_x, orig_y, dx, dy;
|
||||||
|
Eina_List *lst;
|
||||||
|
void *data;
|
||||||
|
|
||||||
|
evas_object_geometry_get(o, &orig_x, &orig_y, NULL, NULL);
|
||||||
|
dx = x - orig_x;
|
||||||
|
dy = y - orig_y;
|
||||||
|
|
||||||
|
lst = evas_object_smart_members_get(o);
|
||||||
|
EINA_LIST_FREE(lst, data) {
|
||||||
|
Evas_Object *child = data;
|
||||||
|
|
||||||
|
evas_object_geometry_get(child, &orig_x, &orig_y, NULL, NULL);
|
||||||
|
evas_object_move(child, orig_x + dx, orig_y + dy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_eenvaders_object_resize(Evas_Object *o, Evas_Coord w, Evas_Coord h)
|
||||||
|
{
|
||||||
|
Evas_Coord x, y;
|
||||||
|
Evas_Object *child;
|
||||||
|
void *mem;
|
||||||
|
Eina_List *list;
|
||||||
|
|
||||||
|
list = evas_object_smart_members_get(o);
|
||||||
|
EINA_LIST_FREE(list, child) {
|
||||||
|
void *mem;
|
||||||
|
|
||||||
|
mem = evas_object_data_del(child, "m");
|
||||||
|
free(mem);
|
||||||
|
evas_object_smart_member_del(child);
|
||||||
|
evas_object_del(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
evas_object_geometry_get(o, &x, &y, NULL, NULL);
|
||||||
|
draw_eenvaders(o, x, y, w, h);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* }}} */
|
|
@ -0,0 +1,8 @@
|
||||||
|
#ifndef EENVADERS_SMART_H
|
||||||
|
#define EENVADERS_SMART_H
|
||||||
|
#include <Evas.h>
|
||||||
|
|
||||||
|
Evas_Object *eenvaders_smart_new(Evas *e);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue