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