Evas/Edje Ephoto. Needs a lot of work. Run it in a directory where there are images to see the small amount of progress. Good things to come!

SVN revision: 42723
This commit is contained in:
titan 2009-09-26 18:11:38 +00:00 committed by titan
parent e972923902
commit b6e4815e66
51 changed files with 10965 additions and 0 deletions

625
ABOUT-NLS Normal file
View File

@ -0,0 +1,625 @@
Notes on the Free Translation Project
*************************************
Free software is going international! The Free Translation Project
is a way to get maintainers of free software, translators, and users all
together, so that will gradually become able to speak many languages.
A few packages already provide translations for their messages.
If you found this `ABOUT-NLS' file inside a distribution, you may
assume that the distributed package does use GNU `gettext' internally,
itself available at your nearest GNU archive site. But you do _not_
need to install GNU `gettext' prior to configuring, installing or using
this package with messages translated.
Installers will find here some useful hints. These notes also
explain how users should proceed for getting the programs to use the
available translations. They tell how people wanting to contribute and
work at translations should contact the appropriate team.
When reporting bugs in the `intl/' directory or bugs which may be
related to internationalization, you should tell about the version of
`gettext' which is used. The information can be found in the
`intl/VERSION' file, in internationalized packages.
Quick configuration advice
==========================
If you want to exploit the full power of internationalization, you
should configure it using
./configure --with-included-gettext
to force usage of internationalizing routines provided within this
package, despite the existence of internationalizing capabilities in the
operating system where this package is being installed. So far, only
the `gettext' implementation in the GNU C library version 2 provides as
many features (such as locale alias, message inheritance, automatic
charset conversion or plural form handling) as the implementation here.
It is also not possible to offer this additional functionality on top
of a `catgets' implementation. Future versions of GNU `gettext' will
very likely convey even more functionality. So it might be a good idea
to change to GNU `gettext' as soon as possible.
So you need _not_ provide this option if you are using GNU libc 2 or
you have installed a recent copy of the GNU gettext package with the
included `libintl'.
INSTALL Matters
===============
Some packages are "localizable" when properly installed; the
programs they contain can be made to speak your own native language.
Most such packages use GNU `gettext'. Other packages have their own
ways to internationalization, predating GNU `gettext'.
By default, this package will be installed to allow translation of
messages. It will automatically detect whether the system already
provides the GNU `gettext' functions. If not, the GNU `gettext' own
library will be used. This library is wholly contained within this
package, usually in the `intl/' subdirectory, so prior installation of
the GNU `gettext' package is _not_ required. Installers may use
special options at configuration time for changing the default
behaviour. The commands:
./configure --with-included-gettext
./configure --disable-nls
will respectively bypass any pre-existing `gettext' to use the
internationalizing routines provided within this package, or else,
_totally_ disable translation of messages.
When you already have GNU `gettext' installed on your system and run
configure without an option for your new package, `configure' will
probably detect the previously built and installed `libintl.a' file and
will decide to use this. This might be not what is desirable. You
should use the more recent version of the GNU `gettext' library. I.e.
if the file `intl/VERSION' shows that the library which comes with this
package is more recent, you should use
./configure --with-included-gettext
to prevent auto-detection.
The configuration process will not test for the `catgets' function
and therefore it will not be used. The reason is that even an
emulation of `gettext' on top of `catgets' could not provide all the
extensions of the GNU `gettext' library.
Internationalized packages have usually many `po/LL.po' files, where
LL gives an ISO 639 two-letter code identifying the language. Unless
translations have been forbidden at `configure' time by using the
`--disable-nls' switch, all available translations are installed
together with the package. However, the environment variable `LINGUAS'
may be set, prior to configuration, to limit the installed set.
`LINGUAS' should then contain a space separated list of two-letter
codes, stating which languages are allowed.
Using This Package
==================
As a user, if your language has been installed for this package, you
only have to set the `LANG' environment variable to the appropriate
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
and `CC' is an ISO 3166 two-letter country code. For example, let's
suppose that you speak German and live in Germany. At the shell
prompt, merely execute `setenv LANG de_DE' (in `csh'),
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
This can be done from your `.login' or `.profile' file, once and for
all.
You might think that the country code specification is redundant.
But in fact, some languages have dialects in different countries. For
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
country code serves to distinguish the dialects.
The locale naming convention of `LL_CC', with `LL' denoting the
language and `CC' denoting the country, is the one use on systems based
on GNU libc. On other systems, some variations of this scheme are
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
locales supported by your system for your country by running the command
`locale -a | grep '^LL''.
Not all programs have translations for all languages. By default, an
English message is shown in place of a nonexistent translation. If you
understand other languages, you can set up a priority list of languages.
This is done through a different environment variable, called
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
for the purpose of message handling, but you still need to have `LANG'
set to the primary language; this is required by other parts of the
system libraries. For example, some Swedish users who would rather
read translations in German than English for when Swedish is not
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
In the `LANGUAGE' environment variable, but not in the `LANG'
environment variable, `LL_CC' combinations can be abbreviated as `LL'
to denote the language's main dialect. For example, `de' is equivalent
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
(Portuguese as spoken in Portugal) in this context.
Translating Teams
=================
For the Free Translation Project to be a success, we need interested
people who like their own language and write it well, and who are also
able to synergize with other translators speaking the same language.
Each translation team has its own mailing list. The up-to-date list of
teams can be found at the Free Translation Project's homepage,
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
area.
If you'd like to volunteer to _work_ at translating messages, you
should become a member of the translating team for your own language.
The subscribing address is _not_ the same as the list itself, it has
`-request' appended. For example, speakers of Swedish can send a
message to `sv-request@li.org', having this message body:
subscribe
Keep in mind that team members are expected to participate
_actively_ in translations, or at solving translational difficulties,
rather than merely lurking around. If your team does not exist yet and
you want to start one, or if you are unsure about what to do or how to
get started, please write to `translation@iro.umontreal.ca' to reach the
coordinator for all translator teams.
The English team is special. It works at improving and uniformizing
the terminology in use. Proven linguistic skill are praised more than
programming skill, here.
Available Packages
==================
Languages are not equally supported in all packages. The following
matrix shows the current state of internationalization, as of May 2003.
The matrix shows, in regard of each package, for which languages PO
files have been submitted to translation coordination, with a
translation percentage of at least 50%.
Ready PO files am az be bg ca cs da de el en en_GB eo es
+-------------------------------------------+
a2ps | [] [] [] [] |
aegis | () |
anubis | |
ap-utils | |
bash | [] [] [] |
batchelor | |
bfd | [] [] |
binutils | [] [] |
bison | [] [] [] |
bluez-pin | [] [] |
clisp | |
clisp | [] [] [] |
coreutils | [] [] [] [] |
cpio | [] [] [] |
darkstat | () [] |
diffutils | [] [] [] [] [] [] [] |
e2fsprogs | [] [] |
enscript | [] [] [] [] |
error | [] [] [] [] [] |
fetchmail | [] () [] [] [] [] |
fileutils | [] [] [] |
findutils | [] [] [] [] [] [] |
flex | [] [] [] [] |
gas | [] |
gawk | [] [] [] [] |
gcal | [] |
gcc | [] [] |
gettext | [] [] [] [] [] |
gettext-runtime | [] [] [] [] [] |
gettext-tools | [] [] |
gimp-print | [] [] [] [] [] |
gliv | |
glunarclock | [] [] [] |
gnucash | () [] |
gnucash-glossary | [] () [] |
gnupg | [] () [] [] [] [] |
gpe-calendar | [] |
gpe-conf | [] |
gpe-contacts | [] |
gpe-edit | |
gpe-login | [] |
gpe-ownerinfo | [] |
gpe-sketchbook | [] |
gpe-timesheet | |
gpe-today | [] |
gpe-todo | [] |
gphoto2 | [] [] [] [] |
gprof | [] [] |
gpsdrive | () () () |
grep | [] [] [] [] [] |
gretl | [] |
hello | [] [] [] [] [] [] |
id-utils | [] [] |
indent | [] [] [] [] |
jpilot | [] [] [] [] |
jwhois | [] |
kbd | [] [] [] [] [] |
ld | [] [] |
libc | [] [] [] [] [] [] |
libgpewidget | [] |
libiconv | [] [] [] [] [] |
lifelines | [] () |
lilypond | [] |
lingoteach | |
lingoteach_lessons | () () |
lynx | [] [] [] [] |
m4 | [] [] [] [] |
mailutils | [] [] |
make | [] [] [] |
man-db | [] () [] [] () |
mysecretdiary | [] [] [] |
nano | [] () [] [] [] |
nano_1_0 | [] () [] [] [] |
opcodes | [] [] |
parted | [] [] [] [] [] |
ptx | [] [] [] [] [] |
python | |
radius | |
recode | [] [] [] [] [] [] |
screem | |
sed | [] [] [] [] [] |
sh-utils | [] [] [] |
sharutils | [] [] [] [] [] [] |
sketch | [] () [] |
soundtracker | [] [] [] |
sp | [] |
tar | [] [] [] [] |
texinfo | [] [] [] [] |
textutils | [] [] [] [] |
tin | () () |
util-linux | [] [] [] [] [] |
vorbis-tools | [] [] [] |
wastesedge | () |
wdiff | [] [] [] [] |
wget | [] [] [] [] [] [] [] |
xchat | [] [] [] |
xpad | |
+-------------------------------------------+
am az be bg ca cs da de el en en_GB eo es
0 1 4 2 31 17 54 60 14 1 4 12 56
et fa fi fr ga gl he hr hu id it ja ko
+----------------------------------------+
a2ps | [] [] [] () () |
aegis | |
anubis | [] |
ap-utils | [] |
bash | [] [] |
batchelor | [] |
bfd | [] [] |
binutils | [] [] |
bison | [] [] [] [] |
bluez-pin | [] [] [] [] |
clisp | |
clisp | [] |
coreutils | [] [] [] [] |
cpio | [] [] [] [] |
darkstat | () [] [] [] |
diffutils | [] [] [] [] [] [] [] |
e2fsprogs | |
enscript | [] [] |
error | [] [] [] [] |
fetchmail | [] |
fileutils | [] [] [] [] [] |
findutils | [] [] [] [] [] [] [] [] [] [] [] |
flex | [] [] |
gas | [] |
gawk | [] [] |
gcal | [] |
gcc | [] |
gettext | [] [] [] |
gettext-runtime | [] [] [] [] |
gettext-tools | [] |
gimp-print | [] [] |
gliv | () |
glunarclock | [] [] [] [] |
gnucash | [] |
gnucash-glossary | [] |
gnupg | [] [] [] [] [] [] [] |
gpe-calendar | [] |
gpe-conf | |
gpe-contacts | [] |
gpe-edit | [] [] |
gpe-login | [] |
gpe-ownerinfo | [] [] [] |
gpe-sketchbook | [] |
gpe-timesheet | [] [] [] |
gpe-today | [] [] |
gpe-todo | [] [] |
gphoto2 | [] [] [] |
gprof | [] [] |
gpsdrive | () [] () () |
grep | [] [] [] [] [] [] [] [] [] [] [] |
gretl | [] |
hello | [] [] [] [] [] [] [] [] [] [] [] [] [] |
id-utils | [] [] [] |
indent | [] [] [] [] [] [] [] [] |
jpilot | [] () |
jwhois | [] [] [] [] |
kbd | [] |
ld | [] |
libc | [] [] [] [] [] [] |
libgpewidget | [] [] [] |
libiconv | [] [] [] [] [] [] [] [] |
lifelines | () |
lilypond | [] |
lingoteach | [] [] |
lingoteach_lessons | |
lynx | [] [] [] [] |
m4 | [] [] [] [] |
mailutils | |
make | [] [] [] [] [] [] |
man-db | [] () () |
mysecretdiary | [] [] |
nano | [] [] [] [] |
nano_1_0 | [] [] [] [] |
opcodes | [] [] |
parted | [] [] [] |
ptx | [] [] [] [] [] [] [] |
python | |
radius | |
recode | [] [] [] [] [] [] |
screem | |
sed | [] [] [] [] [] [] [] [] |
sh-utils | [] [] [] [] [] [] |
sharutils | [] [] [] [] [] |
sketch | [] |
soundtracker | [] [] [] |
sp | [] () |
tar | [] [] [] [] [] [] [] [] [] |
texinfo | [] [] [] [] |
textutils | [] [] [] [] [] |
tin | [] () |
util-linux | [] [] [] [] () [] |
vorbis-tools | [] |
wastesedge | () |
wdiff | [] [] [] [] [] |
wget | [] [] [] [] [] [] [] [] |
xchat | [] [] [] |
xpad | |
+----------------------------------------+
et fa fi fr ga gl he hr hu id it ja ko
20 1 15 73 14 24 8 10 30 31 19 31 9
lg lt lv ms nb nl nn no pl pt pt_BR ro
+----------------------------------------+
a2ps | [] [] () () () [] [] |
aegis | () |
anubis | [] [] |
ap-utils | () |
bash | [] |
batchelor | |
bfd | |
binutils | |
bison | [] [] [] [] |
bluez-pin | [] |
clisp | |
clisp | [] |
coreutils | [] |
cpio | [] [] [] |
darkstat | [] [] [] [] |
diffutils | [] [] [] |
e2fsprogs | |
enscript | [] [] |
error | [] [] |
fetchmail | () () |
fileutils | [] |
findutils | [] [] [] [] |
flex | [] |
gas | |
gawk | [] |
gcal | |
gcc | |
gettext | [] |
gettext-runtime | [] |
gettext-tools | |
gimp-print | [] |
gliv | [] |
glunarclock | [] |
gnucash | |
gnucash-glossary | [] [] |
gnupg | |
gpe-calendar | [] [] |
gpe-conf | [] [] |
gpe-contacts | [] |
gpe-edit | [] [] |
gpe-login | [] [] |
gpe-ownerinfo | [] [] |
gpe-sketchbook | [] [] |
gpe-timesheet | [] [] |
gpe-today | [] [] |
gpe-todo | [] [] |
gphoto2 | |
gprof | [] |
gpsdrive | () () () |
grep | [] [] [] [] |
gretl | |
hello | [] [] [] [] [] [] [] [] [] |
id-utils | [] [] [] |
indent | [] [] [] |
jpilot | () () |
jwhois | [] [] [] |
kbd | |
ld | |
libc | [] [] [] [] |
libgpewidget | [] [] |
libiconv | [] [] |
lifelines | |
lilypond | [] |
lingoteach | |
lingoteach_lessons | |
lynx | [] [] |
m4 | [] [] [] [] |
mailutils | |
make | [] [] |
man-db | [] |
mysecretdiary | [] |
nano | [] [] [] [] |
nano_1_0 | [] [] [] [] |
opcodes | [] [] [] |
parted | [] [] [] |
ptx | [] [] [] [] [] [] [] |
python | |
radius | |
recode | [] [] [] |
screem | |
sed | [] [] |
sh-utils | [] |
sharutils | [] |
sketch | [] |
soundtracker | |
sp | |
tar | [] [] [] [] [] [] |
texinfo | [] |
textutils | [] |
tin | |
util-linux | [] [] |
vorbis-tools | [] [] |
wastesedge | |
wdiff | [] [] [] [] |
wget | [] [] [] |
xchat | [] [] |
xpad | [] |
+----------------------------------------+
lg lt lv ms nb nl nn no pl pt pt_BR ro
0 0 2 11 7 26 3 4 18 15 34 34
ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
+-------------------------------------------+
a2ps | [] [] [] [] [] | 16
aegis | () | 0
anubis | [] [] | 5
ap-utils | () | 1
bash | [] | 7
batchelor | | 1
bfd | [] [] [] | 7
binutils | [] [] [] | 7
bison | [] [] | 13
bluez-pin | | 7
clisp | | 0
clisp | | 5
coreutils | [] [] [] [] [] | 14
cpio | [] [] [] | 13
darkstat | [] () () | 9
diffutils | [] [] [] [] | 21
e2fsprogs | [] | 3
enscript | [] [] [] | 11
error | [] [] [] | 14
fetchmail | [] | 7
fileutils | [] [] [] [] [] [] | 15
findutils | [] [] [] [] [] [] | 27
flex | [] [] [] | 10
gas | [] | 3
gawk | [] [] | 9
gcal | [] [] | 4
gcc | [] | 4
gettext | [] [] [] [] [] [] | 15
gettext-runtime | [] [] [] [] [] [] | 16
gettext-tools | [] [] | 5
gimp-print | [] [] | 10
gliv | | 1
glunarclock | [] [] [] | 11
gnucash | [] [] | 4
gnucash-glossary | [] [] [] | 8
gnupg | [] [] [] [] | 16
gpe-calendar | [] | 5
gpe-conf | | 3
gpe-contacts | [] | 4
gpe-edit | [] | 5
gpe-login | [] | 5
gpe-ownerinfo | [] | 7
gpe-sketchbook | [] | 5
gpe-timesheet | [] | 6
gpe-today | [] | 6
gpe-todo | [] | 6
gphoto2 | [] [] | 9
gprof | [] [] | 7
gpsdrive | [] [] | 3
grep | [] [] [] [] | 24
gretl | | 2
hello | [] [] [] [] [] | 33
id-utils | [] [] [] | 11
indent | [] [] [] [] | 19
jpilot | [] [] [] [] [] | 10
jwhois | () () [] [] | 10
kbd | [] [] | 8
ld | [] [] | 5
libc | [] [] [] [] | 20
libgpewidget | | 6
libiconv | [] [] [] [] [] [] | 21
lifelines | [] | 2
lilypond | [] | 4
lingoteach | | 2
lingoteach_lessons | () | 0
lynx | [] [] [] [] | 14
m4 | [] [] [] | 15
mailutils | | 2
make | [] [] [] [] | 15
man-db | [] | 6
mysecretdiary | [] [] | 8
nano | [] [] [] | 15
nano_1_0 | [] [] [] | 15
opcodes | [] [] | 9
parted | [] [] | 13
ptx | [] [] [] | 22
python | | 0
radius | | 0
recode | [] [] [] [] | 19
screem | [] | 1
sed | [] [] [] [] [] | 20
sh-utils | [] [] [] | 13
sharutils | [] [] [] [] | 16
sketch | [] | 5
soundtracker | [] | 7
sp | [] | 3
tar | [] [] [] [] [] | 24
texinfo | [] [] [] [] | 13
textutils | [] [] [] [] [] | 15
tin | | 1
util-linux | [] [] | 14
vorbis-tools | [] | 7
wastesedge | | 0
wdiff | [] [] [] [] | 17
wget | [] [] [] [] [] [] [] | 25
xchat | [] [] [] | 11
xpad | | 1
+-------------------------------------------+
50 teams ru sk sl sr sv ta tr uk vi wa zh_CN zh_TW
97 domains 32 19 16 0 56 0 48 10 1 1 12 23 913
Some counters in the preceding matrix are higher than the number of
visible blocks let us expect. This is because a few extra PO files are
used for implementing regional variants of languages, or language
dialects.
For a PO file in the matrix above to be effective, the package to
which it applies should also have been internationalized and
distributed as such by its maintainer. There might be an observable
lag between the mere existence a PO file and its wide availability in a
distribution.
If May 2003 seems to be old, you may fetch a more recent copy of
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
matrix with full percentage details can be found at
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
Using `gettext' in new packages
===============================
If you are writing a freely available program and want to
internationalize it you are welcome to use GNU `gettext' in your
package. Of course you have to respect the GNU Library General Public
License which covers the use of the GNU `gettext' library. This means
in particular that even non-free programs can use `libintl' as a shared
library, whereas only free software can use `libintl' as a static
library or use modified versions of `libintl'.
Once the sources are changed appropriately and the setup can handle
the use of `gettext' the only thing missing are the translations. The
Free Translation Project is also available for packages which are not
developed inside the GNU project. Therefore the information given above
applies also for every other Free Software Project. Contact
`translation@iro.umontreal.ca' to make the `.pot' files available to
the translation teams.

9
AUTHORS Normal file
View File

@ -0,0 +1,9 @@
________ ________ ___ ___ ________ ________ ________
/ _____/ / __ / / / / / / __ / /__ ___/ / __ /
/ /____ / /_/ / / /_/ / / / / / / / / / / /
/ _____/ / _____/ / __ / / / / / / / / / / /
/ /_____ / / / / / / / /_/ / / / / /_/ /
________/ /__/ /__/ /__/ /_______/ /_/ /_______/
===Project Manager/Lead Developer===
Stephen "okra" Houston <UnixTitan@gmail.com>

28
COPYING Normal file
View File

@ -0,0 +1,28 @@
Icons from the tango project (http://tango.freedesktop.org)
For information see COPYING.icons
Copyright (c) <2006>, <Stephen Houston>
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of ephoto nor the names of its contributors may be used
to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF SUCH DAMAGE.

67
COPYING.icons Normal file
View File

@ -0,0 +1,67 @@
Creative Commons Attribution-ShareAlike 2.5 License Agreement
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions
1. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License.
2. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License.
3. "Licensor" means the individual or entity that offers the Work under the terms of this License.
4. "Original Author" means the individual or entity who created the Work.
5. "Work" means the copyrightable work of authorship offered under the terms of this License.
6. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
7. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike.
2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
1. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works;
2. to create and reproduce Derivative Works;
3. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works;
4. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works.
5.
For the avoidance of doubt, where the work is a musical composition:
1. Performance Royalties Under Blanket Licenses. Licensor waives the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work.
2. Mechanical Rights and Statutory Royalties. Licensor waives the exclusive right to collect, whether individually or via a music rights society or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions).
6. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor waives the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions).
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved.
4. Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
1. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by clause 4(c), as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by clause 4(c), as requested.
2. You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only under the terms of this License, a later version of this License with the same License Elements as this License, or a Creative Commons iCommons license that contains the same License Elements as this License (e.g. Attribution-ShareAlike 2.5 Japan). You must include a copy of, or the Uniform Resource Identifier for, this License or other license specified in the previous sentence with every copy or phonorecord of each Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Derivative Works that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder, and You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Derivative Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Derivative Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Derivative Work itself to be made subject to the terms of this License.
3. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if the Original Author and/or Licensor designate another party or parties (e.g. a sponsor institute, publishing entity, journal) for attribution in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
1. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
2. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
8. Miscellaneous
1. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
2. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
3. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
4. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
5. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.
Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time.
Creative Commons may be contacted at http://creativecommons.org/.

1
ChangeLog Normal file
View File

@ -0,0 +1 @@
Ephoto - A comprehensive image viewer written using the core EFL.

236
INSTALL Normal file
View File

@ -0,0 +1,236 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script). Here is a another example:
/bin/bash ./configure CONFIG_SHELL=/bin/bash
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
configuration-related scripts to be executed by `/bin/bash'.
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

18
Makefile.am Normal file
View File

@ -0,0 +1,18 @@
## Process this file with automake to produce Makefile.in
MAINTAINERCLEANFILES = Makefile.in Makefile aclocal.m4 config.* \
configure compile depcomp install-sh \
ltconfig ltmain.sh missing mkinstalldirs \
stamp-h.in
SUBDIRS = src data
EXTRA_DIST = \
README AUTHORS COPYING ephoto.spec
ACLOCAL_AMFLAGS = -I m4
dist-hook:
if test -d data; then \
(cd $(srcdir); tar -cf - data) | (cd $(distdir); tar -xf -; rm -rf `find . -name CVS`) \
fi

9
NEWS Normal file
View File

@ -0,0 +1,9 @@
________ ________ ___ ___ ________ ________ ________
/ _____/ / __ / / / / / / __ / /__ ___/ / __ /
/ /____ / /_/ / / /_/ / / / / / / / / / / /
/ _____/ / _____/ / __ / / / / / / / / / / /
/ /_____ / / / / / / / /_/ / / / / /_/ /
________/ /__/ /__/ /__/ /_______/ /_/ /_______/
New ephoto has been added to e17/apps/ephoto in cvs!

11
README Normal file
View File

@ -0,0 +1,11 @@
________ ________ ___ ___ ________ ________ ________
/ _____/ / __ / / / / / / __ / /__ ___/ / __ /
/ /____ / /_/ / / /_/ / / / / / / / / / / /
/ _____/ / _____/ / __ / / / / / / / / / / /
/ /_____ / / / / / / / /_/ / / / / /_/ /
________/ /__/ /__/ /__/ /_______/ /_/ /_______/
Ephoto Image Viewer/Editor/Manipulator/Slideshow creator.
Icons belong to the tango project (http://tango.freedesktop.org)

10
TODO Normal file
View File

@ -0,0 +1,10 @@
________ ________ ___ ___ ________ ________ ________
/ _____/ / __ / / / / / / __ / /__ ___/ / __ /
/ /____ / /_/ / / /_/ / / / / / / / / / / /
/ _____/ / _____/ / __ / / / / / / / / / / /
/ /_____ / / / / / / / /_/ / / / / /_/ /
________/ /__/ /__/ /__/ /_______/ /_/ /_______/
TODO-
Too much to list at the moment.

18
autogen.sh Executable file
View File

@ -0,0 +1,18 @@
#!/bin/sh
rm -rf autom4te.cache
rm -f aclocal.m4 ltmain.sh
touch README
touch ABOUT-NLS
echo "Running aclocal..." ; aclocal $ACLOCAL_FLAGS || exit 1
echo "Running autoconf..." ; autoconf || exit 1
echo "Running autoheader..." ; autoheader || 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

201
configure.ac Normal file
View File

@ -0,0 +1,201 @@
dnl Process this file with autoconf to produce a configure script.
# get rid of that stupid cache mechanism
rm -f config.cache
AC_INIT(configure.ac)
AM_INIT_AUTOMAKE(ephoto, 5.15.0)
AM_CONFIG_HEADER(src/bin/config.h)
AC_ISC_POSIX
AC_PROG_CC
AC_HEADER_STDC
AM_ENABLE_SHARED
AM_PROG_LIBTOOL
AM_WITH_DMALLOC
dnl Set PACKAGE_LOCALE_DIR in config.h.
if test "x$LIBINTL" = "x"; then
LIBINTL="$INTLLIBS"
fi
if test "x${prefix}" = "xNONE"; then
AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${ac_default_prefix}/share/locale", [Locale-specific data directory])
else
AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${prefix}/share/locale", [Locale-specific data directory])
fi
dnl Set PACKAGE_DATA_DIR in config.h.
if test "x${prefix}" = "xNONE"; then
AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${ac_default_prefix}/share/${PACKAGE}", [Shared Data Directory])
else
AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/share/${PACKAGE}", [Shared Data Directory])
fi
dnl Set PACKAGE_BIN_DIR in config.h.
if test "x${datadir}" = 'x${prefix}/bin'; then
if test "x${prefix}" = "xNONE"; then
AC_DEFINE_UNQUOTED(PACKAGE_BIN_DIR, "${ac_default_prefix}/bin", [Installation directory for user executables])
else
AC_DEFINE_UNQUOTED(PACKAGE_BIN_DIR, "${prefix}/bin", [Installation directory for user executables])
fi
else
AC_DEFINE_UNQUOTED(PACKAGE_BIN_DIR, "${bindir}", [Installation directory for user executables])
fi
dnl Set PACKAGE_EXEC_DIR in config.h.
if test "x${prefix}" = "xNONE"; then
AC_DEFINE_UNQUOTED(PACKAGE_EXEC_DIR, "${ac_default_prefix}/bin", [Installed directory for executables])
else
AC_DEFINE_UNQUOTED(PACKAGE_EXEC_DIR, "${prefix}/bin", [Installed directory for executables])
fi
dnl Set PACKAGE_LIB_DIR in config.h.
if test "x${datadir}" = 'x${prefix}/lib'; then
if test "x${prefix}" = "xNONE"; then
AC_DEFINE_UNQUOTED(PACKAGE_LIB_DIR, "${ac_default_prefix}/lib", [Installation directory for libraries])
else
AC_DEFINE_UNQUOTED(PACKAGE_LIB_DIR, "${prefix}/lib", [Installation directory for libraries])
fi
else
AC_DEFINE_UNQUOTED(PACKAGE_LIB_DIR, "${libdir}", [Installation directory for libraries])
fi
dnl Set PACKAGE_SOURCE_DIR in config.h.
packagesrcdir=`cd $srcdir && pwd`
AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}", [Source code directory])
PKG_CHECK_MODULES([EVAS], evas,
[
have_evas="Yes"
],
[
have_evas="No"
echo "Evas was not found by pkg-config!";
AC_MSG_ERROR([Ephoto needs evas to compile.])
]
)
PKG_CHECK_MODULES([ECORE_FILE], ecore-file,
[
have_ecoref="Yes"
],
[
have_ecoref="No"
echo "Ecore_File was not found by pkg-config!";
AC_MSG_ERROR([Ephoto needs ecore_file to compile.])
]
)
PKG_CHECK_MODULES([ECORE_EVAS], ecore-evas,
[
have_ecoree="Yes"
],
[
have_ecoree="No"
echo "Ecore_Evas was not found by pkg-config!";
AC_MSG_ERROR([Ephoto needs ecore_evas to compile.])
]
)
PKG_CHECK_MODULES([EDJE], edje,
[
have_edje="Yes"
],
[
have_edje="No"
echo "Edje was not found by pkg-config!";
AC_MSG_ERROR([Ephoto needs edje to compile.])
]
)
PKG_CHECK_MODULES([EFREET_MIME], efreet-mime,
[
have_efreet_mime="Yes"
],
[
have_efreet_mime="No"
echo "Efreet_Mime was not found by pkg-config!";
AC_MSG_ERROR([Ephoto needs efreet_mime to compile.])
]
)
PKG_CHECK_MODULES([EPSILON], epsilon,
[
have_epsilon="Yes"
],
[
have_epsilon="No"
echo "Epsilon was not found by pkg-config!";
AC_MSG_ERROR([Ephoto needs epsilon to compile.])
]
)
PKG_CHECK_MODULES([EINA], eina-0,
[
have_eina="Yes"
],
[
have_eina="No"
echo "Eina was not found by pkg-config!";
AC_MSG_ERROR([Ephoto needs eina to compile.])
]
)
PKG_CHECK_MODULES([ETHUMB], ethumb_client,
[
have_ethumb="Yes"
],
[
have_ethumb="No"
echo "Ethumb was not found by pkg-config!";
AC_MSG_ERROR([Ephoto needs ethumb to compile.])
]
)
AC_OUTPUT([
Makefile
ephoto.spec
data/Makefile
data/themes/Makefile
data/themes/default/Makefile
data/themes/default/images/Makefile
src/Makefile
src/bin/Makefile
])
echo
echo
echo
echo "------------------------------------------------------------------------"
echo "$PACKAGE $VERSION"
echo "------------------------------------------------------------------------"
echo
echo " ________ ________ ___ ___ ________ ________ ________"
echo " / _____/ / __ / / / / / / __ / /__ ___/ / __ /"
echo " / /____ / /_/ / / /_/ / / / / / / / / / / / "
echo " / _____/ / _____/ / __ / / / / / / / / / / / "
echo "/ /_____ / / / / / / / /_/ / / / / /_/ / "
echo "________/ /__/ /__/ /__/ /_______/ /_/ /_______/ "
echo
echo
echo "------------------------------------------------------------------------"
echo "$PACKAGE $VERSION"
echo "------------------------------------------------------------------------"
echo
echo "Configuration Options Summary:"
echo
echo " Evas ............: $have_evas"
echo " Ecore_File.......: $have_ecoref"
echo " Ecore_Evas.......: $have_ecoree"
echo " Edje ............: $have_edje"
echo " Efreet_Mime .....: $have_efreet_mime"
echo " Eina.............: $have_eina"
echo " Ethumb...........: $have_ethumb"
echo " Libexif .........: $have_exif"
echo
echo "Installation Path.........: $prefix"
echo
echo "Compilation...............: make"
echo "Installation..............: make install"
echo

5
data/Makefile.am Normal file
View File

@ -0,0 +1,5 @@
## Process this file with automake to produce Makefile.in
MAINTAINERCLEANFILES = Makefile.in Makefile
SUBDIRS = themes

5
data/themes/Makefile.am Normal file
View File

@ -0,0 +1,5 @@
## Process this file with automake to produce Makefile.in
MAINTAINERCLEANFILES = Makefile.in Makefile
SUBDIRS = default

View File

@ -0,0 +1,23 @@
MAINTAINERCLEANFILES = Makefile.in
SUBDIRS = images
EDCS = ephoto.edc
EDJS = $(EDCS:%.edc=%.edj)
ephoto_DEPS = ephoto.edc
EXTRA_DIST = $(EDCS)
CLEANFILES = $(EDJS)
themedir = $(pkgdatadir)/themes/default
theme_DATA = $(EDJS)
all: $(EDJS)
ephoto.edj: ${ephoto_DEPS}
SUFFIXES = .edc .edj
.edc.edj:
edje_cc -v -id $(top_srcdir)/data/themes/default/images -fd $(top_srcdir)/data/themes/default/fonts $(top_srcdir)/data/themes/default/$< $(top_builddir)/data/themes/default/$(@F)

View File

@ -0,0 +1,381 @@
fonts
{
font: "Vera.ttf" "default";
}
collections
{
images
{
image: "background.png" COMP;
image: "move_left.png" COMP;
image: "move_right.png" COMP;
image: "thumb_shadow.png" COMP;
image: "selected.png" COMP;
}
group
{
name: "/ephoto/window/background";
parts
{
part
{
name: "background";
type: IMAGE;
mouse_events: 0;
description
{
state: "default" 0.0;
rel1.relative: 0.0 0.0;
rel1.offset: 0 0;
rel2.relative: 1.0 1.0;
rel2.offset: 0 0;
image.normal: "background.png";
}
}
part
{
name: "thumb_area";
type: RECT;
mouse_events: 1;
description
{
state: "default" 0.0;
rel1.to: "background";
rel1.relative: 0.0 0.0;
rel1.offset: 0 0;
rel2.to: "background";
rel2.relative: 1.0 1.0;
rel2.offset: -1 -1;
color: 255 255 255 255;
}
}
part
{
name: "ephoto.swallow.content";
type: SWALLOW;
clip_to: "thumb_area";
mouse_events: 1;
description
{
state: "default" 0.0;
rel1.to: "thumb_area";
rel1.relative: 0.0 0.0;
rel1.offset: 0 0;
rel2.to: "thumb_area";
rel2.relative: 1.0 1.0;
rel2.offset: -1 -1;
}
}
}
}
group
{
name: "/ephoto/image/browser";
styles
{
style
{
name: "pages_style";
base: "font=Sans:style=Bold font_size=18 align=center color=#e0e0e0ff style=soft_shadow shadow_color=#0000001f wrap=word";
tag: "br" "\n";
}
}
parts
{
part
{
name: "thumb_area";
type: RECT;
mouse_events: 1;
description
{
state: "default" 0.0;
rel1.relative: 0.0 0.0;
rel1.offset: 27 0;
rel2.relative: 1.0 1.0;
rel2.offset: -27 -1;
color: 255 255 255 255;
}
}
part
{
name: "ephoto.text.object";
type: TEXTBLOCK;
mouse_events: 1;
scale: 1;
description
{
state: "default" 0.0;
color: 255 255 255 255;
rel1.relative: 1.0 0.0;
rel1.offset: -125 30;
rel2.relative: 1.0 0.0;
rel2.offset: -125 30;
text
{
style: "pages_style";
min: 1 1;
text: "Page: 1 of 1";
}
}
}
part
{
name: "ephoto.swallow.content";
type: SWALLOW;
clip_to: "thumb_area";
mouse_events: 1;
description
{
state: "default" 0.0;
rel1.to: "thumb_area";
rel1.relative: 0.0 0.0;
rel1.offset: 0 0;
rel2.to: "thumb_area";
rel2.relative: 1.0 1.0;
rel2.offset: -1 -1;
}
}
part
{
name: "move_left";
type: IMAGE;
mouse_events: 1;
description
{
state: "default" 0.0;
min: 27 42;
max: 27 42;
rel1.relative: 0.0 0.5;
rel1.offset: 30 0;
rel2.relative: 0.0 0.5;
rel2.offset: -1 -1;
image.normal: "move_left.png";
}
}
part
{
name: "move_right";
type: IMAGE;
mouse_events: 1;
description
{
state: "default" 0.0;
min: 27 42;
max: 27 42;
rel1.relative: 1.0 0.5;
rel1.offset: 0 0;
rel2.relative: 1.0 0.5;
rel2.offset: -30 -1;
image.normal: "move_right.png";
}
}
}
}
group {
name: "/ephoto/thumb/shadow";
min: 198 136;
parts {
part {
name: "ephoto.swallow.content";
type: SWALLOW;
mouse_events: 1;
description {
state: "default" 0.0;
min: 1 1;
max: 176 117;
visible: 1;
rel1.relative: 0.0 0.0;
rel2.relative: 1.0 1.0;
color: 255 255 255 255;
}
description {
state: "hidden" 0.0;
inherit: "default" 0.0;
visible: 0;
color: 255 255 255 0;
}
}
part {
name: "background";
type: IMAGE;
mouse_events: 0;
description {
state: "default" 0.0;
visible: 1;
min: 198 136;
rel1.to: "ephoto.swallow.content";
rel1.offset: 4 3;
rel2.to: "ephoto.swallow.content";
rel2.offset: -5 4;
color: 255 255 255 255;
image.normal: "thumb_shadow.png";
image.border: 12 12 7 13;
}
description {
state: "selected" 0.0;
inherit: "default" 0.0;
color: 255 255 255 255;
}
description {
state: "hidden" 0.0;
inherit: "default" 0.0;
color: 255 255 255 0;
visible: 0;
}
}
}
programs {
program {
name: "selected";
signal: "ephoto.thumb.selected";
source: "ephoto";
action: STATE_SET "selected" 0.0;
transition: LINEAR 0.3;
target: "background";
}
program {
name: "deselected";
signal: "ephoto.thumb.deselected";
source: "ephoto";
action: STATE_SET "default" 0.0;
transition: LINEAR 0.3;
target: "background";
}
program {
name: "hidden";
signal: "ephoto.thumb.hidden";
source: "ephoto";
action: STATE_SET "hidden" 0.0;
transition: LINEAR 0.6;
target: "background";
}
program {
name: "visible";
signal: "ephoto.thumb.visible";
source: "ephoto";
action: STATE_SET "default" 0.0;
transition: LINEAR 0.6;
target: "background";
}
}
}
group {
name: "/ephoto/thumb/image";
min: 176 117;
parts {
part {
name: "clipper";
type: RECT;
mouse_events: 0;
description {
state: "default" 0.0;
visible: 1;
min: 1 1;
max: 176 117;
color: 255 255 255 255;
}
description {
state: "hidden" 0.0;
inherit: "default" 0.0;
visible: 0;
color: 255 255 255 0;
}
}
part {
name: "ephoto.swallow.content";
type: SWALLOW;
mouse_events: 1;
clip_to: "clipper";
description {
state: "default" 0.0;
visible: 1;
min: 1 1;
max: 176 117;
rel1.to: "clipper";
rel1.relative: 0.0 0.0;
rel2.to: "clipper";
rel2.relative: 1.0 1.0;
color: 255 255 255 255;
}
description {
state: "hidden" 0.0;
inherit: "default" 0.0;
visible: 0;
color: 255 255 255 0;
}
}
part {
name: "selected";
type: IMAGE;
description {
state: "default" 0.0;
visible: 0;
min: 10 10;
rel1.to: "clipper";
rel2.to: "clipper";
image.normal: "selected.png";
}
description {
state: "selected" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part {
name: "event_area";
type: RECT;
mouse_events: 1;
description
{
state: "default" 0.0;
color: 255 255 255 0;
rel1.to: "clipper";
rel1.relative: 0.0 0.0;
rel1.offset: 0 0;
rel2.to: "clipper";
rel2.relative: 1.0 1.0;
rel2.offset: -1 -1;
}
}
}
programs {
program {
name: "selected";
signal: "ephoto.thumb.selected";
source: "ephoto";
action: STATE_SET "selected" 0.0;
transition: LINEAR 0.3;
target: "selected";
}
program {
name: "deselected";
signal: "ephoto.thumb.deselected";
source: "ephoto";
action: STATE_SET "default" 0.0;
transition: LINEAR 0.3;
target: "selected";
}
program {
name: "hidden";
signal: "ephoto.thumb.hidden";
source: "ephoto";
action: STATE_SET "hidden" 0.0;
transition: LINEAR 0.6;
target: "ephoto.swallow.content";
target: "clipper";
}
program {
name: "visible";
signal: "ephoto.thumb.visible";
source: "ephoto";
action: STATE_SET "default" 0.0;
transition: LINEAR 0.6;
target: "ephoto.swallow.content";
target: "clipper";
}
}
}
}

Binary file not shown.

View File

@ -0,0 +1,20 @@
MAINTAINERCLEANFILES = Makefile.in
EXTRA_DIST = \
arrow_down.png \
background.png \
bt_sm_hilight.png \
scroll_left.png \
arrow_left.png \
bt_sm_shine.png \
scroll_right.png \
arrow_right.png \
arrow_up.png \
bt_sm_base1.png \
sb_runnerh.png \
bt_sm_base2.png \
sb_runnerv.png \
move_left.png \
move_right.png \
selected.png \
thumb_shadow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 882 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 870 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 898 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 893 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

44
ephoto.spec.in Normal file
View File

@ -0,0 +1,44 @@
Summary: ephoto
Name: @PACKAGE@
Version: @VERSION@
Release: 0.%(date '+%Y%m%d')
License: BSD
Group: Applications/Multimedia
URL: http://www.stephen.3sixty8.com
Source: %{name}-%{version}.tar.gz
Packager: %{?_packager:%{_packager}}%{!?_packager:Stephen Houston <Unixtitan@gmail.com>}
Vendor: %{?_vendorinfo:%{_vendorinfo}}%{!?_vendorinfo:Okra Project (http://www.stephen.3sixty8.com/)}
Distribution: %{?_distribution:%{_distribution}}%{!?_distribution:%{_vendor}}
#BuildSuggests: xorg-x11-devel
BuildRequires: evas-devel ecore-devel edje-devel eina-devel ethumb-devel
BuildRoot: %{_tmppath}/%{name}-%{version}-root
%description
ephoto
%prep
%setup -q
%build
%{configure} --prefix=%{_prefix}
%{__make} %{?_smp_mflags} %{?mflags}
%install
%{__make} %{?mflags_install} DESTDIR=$RPM_BUILD_ROOT install
%clean
test "x$RPM_BUILD_ROOT" != "x/" && rm -rf $RPM_BUILD_ROOT
%post
/sbin/ldconfig
%postun
/sbin/ldconfig
%files
%defattr(-, root, root)
%doc AUTHORS ChangeLog COPYING COPYING.icons README
%{_bindir}/*
%{_datadir}/*
%changelog

7373
m4/libtool.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

368
m4/ltoptions.m4 vendored Normal file
View File

@ -0,0 +1,368 @@
# Helper functions for option handling. -*- Autoconf -*-
#
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 6 ltoptions.m4
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
# ------------------------------------------
m4_define([_LT_MANGLE_OPTION],
[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
# ---------------------------------------
# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
# matching handler defined, dispatch to it. Other OPTION-NAMEs are
# saved as a flag.
m4_define([_LT_SET_OPTION],
[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
_LT_MANGLE_DEFUN([$1], [$2]),
[m4_warning([Unknown $1 option `$2'])])[]dnl
])
# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
# ------------------------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
m4_define([_LT_IF_OPTION],
[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
# -------------------------------------------------------
# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
# are set.
m4_define([_LT_UNLESS_OPTIONS],
[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
[m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
[m4_define([$0_found])])])[]dnl
m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
])[]dnl
])
# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
# ----------------------------------------
# OPTION-LIST is a space-separated list of Libtool options associated
# with MACRO-NAME. If any OPTION has a matching handler declared with
# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
# the unknown option and exit.
m4_defun([_LT_SET_OPTIONS],
[# Set options
m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
[_LT_SET_OPTION([$1], _LT_Option)])
m4_if([$1],[LT_INIT],[
dnl
dnl Simply set some default values (i.e off) if boolean options were not
dnl specified:
_LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
])
_LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
])
dnl
dnl If no reference was made to various pairs of opposing options, then
dnl we run the default mode handler for the pair. For example, if neither
dnl `shared' nor `disable-shared' was passed, we enable building of shared
dnl archives by default:
_LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
_LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
_LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
_LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
[_LT_ENABLE_FAST_INSTALL])
])
])# _LT_SET_OPTIONS
## --------------------------------- ##
## Macros to handle LT_INIT options. ##
## --------------------------------- ##
# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
# -----------------------------------------
m4_define([_LT_MANGLE_DEFUN],
[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
# -----------------------------------------------
m4_define([LT_OPTION_DEFINE],
[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
])# LT_OPTION_DEFINE
# dlopen
# ------
LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
])
AU_DEFUN([AC_LIBTOOL_DLOPEN],
[_LT_SET_OPTION([LT_INIT], [dlopen])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `dlopen' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
# win32-dll
# ---------
# Declare package support for building win32 dll's.
LT_OPTION_DEFINE([LT_INIT], [win32-dll],
[enable_win32_dll=yes
case $host in
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
AC_CHECK_TOOL(AS, as, false)
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
AC_CHECK_TOOL(OBJDUMP, objdump, false)
;;
esac
test -z "$AS" && AS=as
_LT_DECL([], [AS], [0], [Assembler program])dnl
test -z "$DLLTOOL" && DLLTOOL=dlltool
_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
test -z "$OBJDUMP" && OBJDUMP=objdump
_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
])# win32-dll
AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
_LT_SET_OPTION([LT_INIT], [win32-dll])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `win32-dll' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
# _LT_ENABLE_SHARED([DEFAULT])
# ----------------------------
# implement the --enable-shared flag, and supports the `shared' and
# `disable-shared' LT_INIT options.
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_SHARED],
[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([shared],
[AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_shared=yes ;;
no) enable_shared=no ;;
*)
enable_shared=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
enable_shared=yes
fi
done
IFS="$lt_save_ifs"
;;
esac],
[enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
_LT_DECL([build_libtool_libs], [enable_shared], [0],
[Whether or not to build shared libraries])
])# _LT_ENABLE_SHARED
LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
# Old names:
AC_DEFUN([AC_ENABLE_SHARED],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
])
AC_DEFUN([AC_DISABLE_SHARED],
[_LT_SET_OPTION([LT_INIT], [disable-shared])
])
AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_ENABLE_SHARED], [])
dnl AC_DEFUN([AM_DISABLE_SHARED], [])
# _LT_ENABLE_STATIC([DEFAULT])
# ----------------------------
# implement the --enable-static flag, and support the `static' and
# `disable-static' LT_INIT options.
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_STATIC],
[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([static],
[AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_static=yes ;;
no) enable_static=no ;;
*)
enable_static=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
enable_static=yes
fi
done
IFS="$lt_save_ifs"
;;
esac],
[enable_static=]_LT_ENABLE_STATIC_DEFAULT)
_LT_DECL([build_old_libs], [enable_static], [0],
[Whether or not to build static libraries])
])# _LT_ENABLE_STATIC
LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
# Old names:
AC_DEFUN([AC_ENABLE_STATIC],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
])
AC_DEFUN([AC_DISABLE_STATIC],
[_LT_SET_OPTION([LT_INIT], [disable-static])
])
AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AM_ENABLE_STATIC], [])
dnl AC_DEFUN([AM_DISABLE_STATIC], [])
# _LT_ENABLE_FAST_INSTALL([DEFAULT])
# ----------------------------------
# implement the --enable-fast-install flag, and support the `fast-install'
# and `disable-fast-install' LT_INIT options.
# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
m4_define([_LT_ENABLE_FAST_INSTALL],
[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
AC_ARG_ENABLE([fast-install],
[AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
[optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
[p=${PACKAGE-default}
case $enableval in
yes) enable_fast_install=yes ;;
no) enable_fast_install=no ;;
*)
enable_fast_install=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
enable_fast_install=yes
fi
done
IFS="$lt_save_ifs"
;;
esac],
[enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
_LT_DECL([fast_install], [enable_fast_install], [0],
[Whether or not to optimize for fast installation])dnl
])# _LT_ENABLE_FAST_INSTALL
LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
# Old names:
AU_DEFUN([AC_ENABLE_FAST_INSTALL],
[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
the `fast-install' option into LT_INIT's first parameter.])
])
AU_DEFUN([AC_DISABLE_FAST_INSTALL],
[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you put
the `disable-fast-install' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
# _LT_WITH_PIC([MODE])
# --------------------
# implement the --with-pic flag, and support the `pic-only' and `no-pic'
# LT_INIT options.
# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
m4_define([_LT_WITH_PIC],
[AC_ARG_WITH([pic],
[AS_HELP_STRING([--with-pic],
[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
[pic_mode="$withval"],
[pic_mode=default])
test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
])# _LT_WITH_PIC
LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
# Old name:
AU_DEFUN([AC_LIBTOOL_PICMODE],
[_LT_SET_OPTION([LT_INIT], [pic-only])
AC_DIAGNOSE([obsolete],
[$0: Remove this warning and the call to _LT_SET_OPTION when you
put the `pic-only' option into LT_INIT's first parameter.])
])
dnl aclocal-1.4 backwards compatibility:
dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
## ----------------- ##
## LTDL_INIT Options ##
## ----------------- ##
m4_define([_LTDL_MODE], [])
LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
[m4_define([_LTDL_MODE], [nonrecursive])])
LT_OPTION_DEFINE([LTDL_INIT], [recursive],
[m4_define([_LTDL_MODE], [recursive])])
LT_OPTION_DEFINE([LTDL_INIT], [subproject],
[m4_define([_LTDL_MODE], [subproject])])
m4_define([_LTDL_TYPE], [])
LT_OPTION_DEFINE([LTDL_INIT], [installable],
[m4_define([_LTDL_TYPE], [installable])])
LT_OPTION_DEFINE([LTDL_INIT], [convenience],
[m4_define([_LTDL_TYPE], [convenience])])

123
m4/ltsugar.m4 vendored Normal file
View File

@ -0,0 +1,123 @@
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
#
# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 6 ltsugar.m4
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
# lt_join(SEP, ARG1, [ARG2...])
# -----------------------------
# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
# associated separator.
# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
# versions in m4sugar had bugs.
m4_define([lt_join],
[m4_if([$#], [1], [],
[$#], [2], [[$2]],
[m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
m4_define([_lt_join],
[m4_if([$#$2], [2], [],
[m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
# lt_car(LIST)
# lt_cdr(LIST)
# ------------
# Manipulate m4 lists.
# These macros are necessary as long as will still need to support
# Autoconf-2.59 which quotes differently.
m4_define([lt_car], [[$1]])
m4_define([lt_cdr],
[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
[$#], 1, [],
[m4_dquote(m4_shift($@))])])
m4_define([lt_unquote], $1)
# lt_append(MACRO-NAME, STRING, [SEPARATOR])
# ------------------------------------------
# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
# Note that neither SEPARATOR nor STRING are expanded; they are appended
# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
# No SEPARATOR is output if MACRO-NAME was previously undefined (different
# than defined and empty).
#
# This macro is needed until we can rely on Autoconf 2.62, since earlier
# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
m4_define([lt_append],
[m4_define([$1],
m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
# ----------------------------------------------------------
# Produce a SEP delimited list of all paired combinations of elements of
# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
# has the form PREFIXmINFIXSUFFIXn.
# Needed until we can rely on m4_combine added in Autoconf 2.62.
m4_define([lt_combine],
[m4_if(m4_eval([$# > 3]), [1],
[m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
[[m4_foreach([_Lt_prefix], [$2],
[m4_foreach([_Lt_suffix],
]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
# -----------------------------------------------------------------------
# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
m4_define([lt_if_append_uniq],
[m4_ifdef([$1],
[m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
[lt_append([$1], [$2], [$3])$4],
[$5])],
[lt_append([$1], [$2], [$3])$4])])
# lt_dict_add(DICT, KEY, VALUE)
# -----------------------------
m4_define([lt_dict_add],
[m4_define([$1($2)], [$3])])
# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
# --------------------------------------------
m4_define([lt_dict_add_subkey],
[m4_define([$1($2:$3)], [$4])])
# lt_dict_fetch(DICT, KEY, [SUBKEY])
# ----------------------------------
m4_define([lt_dict_fetch],
[m4_ifval([$3],
m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
# -----------------------------------------------------------------
m4_define([lt_if_dict_fetch],
[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
[$5],
[$6])])
# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
# --------------------------------------------------------------
m4_define([lt_dict_filter],
[m4_if([$5], [], [],
[lt_join(m4_quote(m4_default([$4], [[, ]])),
lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
[lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
])

23
m4/ltversion.m4 vendored Normal file
View File

@ -0,0 +1,23 @@
# ltversion.m4 -- version numbers -*- Autoconf -*-
#
# Copyright (C) 2004 Free Software Foundation, Inc.
# Written by Scott James Remnant, 2004
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# Generated from ltversion.in.
# serial 3012 ltversion.m4
# This file is part of GNU Libtool
m4_define([LT_PACKAGE_VERSION], [2.2.6])
m4_define([LT_PACKAGE_REVISION], [1.3012])
AC_DEFUN([LTVERSION_VERSION],
[macro_version='2.2.6'
macro_revision='1.3012'
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
_LT_DECL(, macro_revision, 0)
])

92
m4/lt~obsolete.m4 vendored Normal file
View File

@ -0,0 +1,92 @@
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
#
# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
# Written by Scott James Remnant, 2004.
#
# This file is free software; the Free Software Foundation gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
# serial 4 lt~obsolete.m4
# These exist entirely to fool aclocal when bootstrapping libtool.
#
# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
# which have later been changed to m4_define as they aren't part of the
# exported API, or moved to Autoconf or Automake where they belong.
#
# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
# using a macro with the same name in our local m4/libtool.m4 it'll
# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
# and doesn't know about Autoconf macros at all.)
#
# So we provide this file, which has a silly filename so it's always
# included after everything else. This provides aclocal with the
# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
# because those macros already exist, or will be overwritten later.
# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
#
# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
# Yes, that means every name once taken will need to remain here until
# we give up compatibility with versions before 1.7, at which point
# we need to keep only those names which we still refer to.
# This is to help aclocal find these macros, as it can't see m4_define.
AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])])
m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])

5
src/Makefile.am Normal file
View File

@ -0,0 +1,5 @@
## Process this file with automake to produce Makefile.in
MAINTAINERCLEANFILES = Makefile.in Makefile
SUBDIRS = bin

BIN
src/bin/.ephoto_table.c.swo Normal file

Binary file not shown.

BIN
src/bin/.ephoto_thumb.c.swo Normal file

Binary file not shown.

18
src/bin/Makefile.am Normal file
View File

@ -0,0 +1,18 @@
## Process this file with automake to produce Makefile.in
MAINTAINERCLEANFILES = *.o ephoto config.h.in config.h Makefile.in Makefile \
stamp-h1
bin_PROGRAMS = ephoto
ephoto_SOURCES = \
ephoto.c \
ephoto.h \
ephoto_main.c \
ephoto_image.c \
ephoto_image_browser.c \
ephoto_table.c
ephoto_CFLAGS = @EVAS_CFLAGS@ @EDJE_CFLAGS@ @EINA_CFLAGS@ @EFREET_MIME_CFLAGS@ @ETHUMB_CFLAGS@ -Wall -g
ephoto_LDADD = @EVAS_CFLAGS@ @EDJE_CFLAGS@ @EINA_LIBS@ @EFREET_MIME_LIBS@ @ETHUMB_LIBS@

73
src/bin/ephoto.c Normal file
View File

@ -0,0 +1,73 @@
#include "ephoto.h"
int main(int argc, char **argv)
{
if (!eina_init())
{
printf("Eina failed. Please check your installation!\n");
return 1;
}
if (!eet_init())
{
printf("Eet failed. Please check your installation!\n");
return 1;
}
if (!ecore_init())
{
printf("Ecore failed. Please check your installation!\n");
return 1;
}
if (!ecore_file_init())
{
printf("Ecore_File failed. Please check your installation!\n");
return 1;
}
if (!evas_init())
{
printf("Evas failed. Please check your installation!\n");
return 1;
}
if (!edje_init())
{
printf("Edje failed. Please check your installation!\n");
return 1;
}
if (!ecore_evas_init())
{
printf("Ecore_Evas failed. Please check your installation!\n");
return 1;
}
if (!efreet_mime_init())
{
printf("Efreet failed. Please check your installation!\n");
return 1;
}
if (!ethumb_init())
{
printf("Ethumb failed. Please check your installation!\n");
return 1;
}
if (!ethumb_client_init())
{
printf("Ethumb Client failed. Please check your installation!\n");
return 1;
}
create_main_window();
ecore_main_loop_begin();
ethumb_client_shutdown();
ethumb_shutdown();
efreet_mime_shutdown();
ecore_evas_shutdown();
edje_shutdown();
evas_shutdown();
ecore_file_shutdown();
ecore_shutdown();
eet_shutdown();
eina_shutdown();
return 0;
}

69
src/bin/ephoto.h Normal file
View File

@ -0,0 +1,69 @@
#ifndef _EPHOTO_H_
#define _EPHOTO_H_
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <Ecore.h>
#include <Ecore_Data.h>
#include <Ecore_Evas.h>
#include <Ecore_File.h>
#include <Eet.h>
#include <Efreet_Mime.h>
#include <Eina.h>
#include <Edje.h>
#include <Evas.h>
#include <Ethumb.h>
#include <Ethumb_Client.h>
#include <fcntl.h>
#include <dirent.h>
#include <limits.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include "config.h"
/*Main Functions*/
void create_main_window(void);
/*Ephoto Image Browser*/
void show_image_browser(void);
void hide_image_browser(void);
void populate_thumbnails(void);
/*Ephoto Image*/
Evas_Object *ephoto_image_add();
void ephoto_image_file_set(Evas_Object *obj, const char *file, int w, int h);
void ephoto_image_fill_inside_set(Evas_Object *obj, int fill);
Evas_Object *ephoto_image_edje_object_get(Evas_Object *obj);
void ephoto_image_size_get(Evas_Object *obj, int *w, int *h);
/*Ephoto Table*/
Evas_Object *ephoto_table_add(Evas *e);
void ephoto_table_homogenous_set(Evas_Object *obj, int homogenous);
void ephoto_table_padding_set(Evas_Object *obj, int paddingw, int paddingh);
void ephoto_table_pack(Evas_Object *obj, char *image);
void ephoto_table_viewport_set(Evas_Object *obj, int w, int h);
void ephoto_table_next_page(Evas_Object *obj);
void ephoto_table_prev_page(Evas_Object *obj);
typedef struct _Ephoto Ephoto;
struct _Ephoto
{
Evas *e;
Ecore_Evas *ee;
Ethumb_Client *thumb_cli;
Evas_Object *bg;
Evas_Object *image_browser;
Evas_Object *image_browser_tbl;
Evas_Object *sel;
Eina_List *images;
};
extern Ephoto *em;
#endif

259
src/bin/ephoto_image.c Normal file
View File

@ -0,0 +1,259 @@
#include "ephoto.h"
/*Ephoto Smart Data */
typedef struct _Image_Smart_Data Ephoto_Image_Smart_Data;
struct _Image_Smart_Data
{
Evas_Object *edje;
Evas_Object *image;
Evas_Object *border;
Evas_Coord x, y, w, h;
Evas_Object *obj;
char fill_inside : 1;
char use_border: 1;
int preferredw, preferredh;
};
static void ephoto_image_smart_reconfigure(Ephoto_Image_Smart_Data *sd);
static void ephoto_image_smart_init(void);
static void ephoto_image_smart_add(Evas_Object *obj);
static void ephoto_image_smart_del(Evas_Object *obj);
static void ephoto_image_smart_move(Evas_Object *obj, Evas_Coord x,
Evas_Coord y);
static void ephoto_image_smart_resize(Evas_Object *obj, Evas_Coord w,
Evas_Coord h);
static void ephoto_image_smart_show(Evas_Object *obj);
static void ephoto_image_smart_hide(Evas_Object *obj);
static void ephoto_image_smart_color_set(Evas_Object *obj, int r, int g,
int b, int a);
static void ephoto_image_smart_clip_set(Evas_Object *obj, Evas_Object *clip);
static void ephoto_image_smart_clip_unset(Evas_Object *obj);
/*Ephoto Globals*/
static Evas_Smart *ephoto_image_smart = NULL;
Evas_Object *ephoto_image_add(void)
{
ephoto_image_smart_init();
return evas_object_smart_add(em->e, ephoto_image_smart);
}
void ephoto_image_file_set(Evas_Object *obj, const char *file, int w, int h)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
evas_object_image_load_size_set(sd->image, w, h);
evas_object_image_file_set(sd->image, file, NULL);
evas_object_image_preload(sd->image, TRUE);
ephoto_image_smart_reconfigure(sd);
sd->preferredw = w;
sd->preferredh = h;
}
void ephoto_image_fill_inside_set(Evas_Object *obj, int fill)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (fill && (sd->fill_inside == 1))
return;
if (!fill && (sd->fill_inside == 0))
return;
if (fill)
sd->fill_inside = 1;
else
sd->fill_inside = 0;
ephoto_image_smart_reconfigure(sd);
}
Evas_Object *ephoto_image_edje_object_get(Evas_Object *obj)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
return sd->edje;
}
void ephoto_image_size_get(Evas_Object *obj, int *w, int *h)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
return evas_object_image_size_get(sd->image, w, h);
}
static void ephoto_image_smart_reconfigure(Ephoto_Image_Smart_Data *sd)
{
Evas_Coord x, y, w, h;
int tw, th;
evas_object_image_size_get(sd->image, &tw, &th);
if (tw < 1) tw = 1;
if (th < 1) th = 1;
if (sd->fill_inside)
{
w = sd->w;
h = ((double)th *w) / (double)tw;
if (h > sd->h)
{
h = sd->h;
w = ((double)tw * h) / (double)th;
}
}
else
{
w = sd->w;
h = ((double)th * w) / (double)tw;
if ( h < sd->h)
{
h = sd->h;
w = ((double)tw * h) / (double)th;
}
}
x = sd->x + ((sd->w - w) / 2);
y = sd->y + ((sd->h - h) / 2);
evas_object_move(sd->edje, x, y);
evas_object_resize(sd->edje, sd->preferredw, sd->preferredh);
evas_object_move(sd->image, x, y);
evas_object_image_fill_set(sd->image, 0, 0, sd->preferredw, sd->preferredh);
evas_object_resize(sd->image, sd->preferredw, sd->preferredh);
}
static void ephoto_image_smart_init(void)
{
if (ephoto_image_smart)
return;
static const Evas_Smart_Class sc =
{
"ephoto_image",
EVAS_SMART_CLASS_VERSION,
ephoto_image_smart_add,
ephoto_image_smart_del,
ephoto_image_smart_move,
ephoto_image_smart_resize,
ephoto_image_smart_show,
ephoto_image_smart_hide,
ephoto_image_smart_color_set,
ephoto_image_smart_clip_set,
ephoto_image_smart_clip_unset,
NULL,
NULL,
NULL,
NULL
};
ephoto_image_smart = evas_smart_class_new(&sc);
}
static void
ephoto_image_smart_add(Evas_Object *obj)
{
Ephoto_Image_Smart_Data *sd;
sd = calloc(1, sizeof(Ephoto_Image_Smart_Data));
if (!sd)
return;
sd->edje = edje_object_add(em->e);
edje_object_file_set(sd->edje, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/thumb/image");
edje_object_signal_emit(sd->edje, "ephoto.thumb.visible", "ephoto");
evas_object_smart_member_add(sd->edje, obj);
sd->image = evas_object_image_filled_add(em->e);
evas_object_image_smooth_scale_set(sd->image, TRUE);
sd->x = 0;
sd->y = 0;
sd->w = 0;
sd->h = 0;
sd->fill_inside = 1;
sd->preferredw = 0;
sd->preferredh = 0;
edje_object_part_swallow(sd->edje, "ephoto.swallow.content", sd->image);
evas_object_smart_member_add(sd->image, obj);
evas_object_smart_data_set(obj, sd);
}
static void ephoto_image_smart_del(Evas_Object *obj)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
evas_object_del(sd->image);
evas_object_del(sd->edje);
free(sd);
}
static void ephoto_image_smart_move(Evas_Object *obj, Evas_Coord x,
Evas_Coord y)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if ((sd->x == x) && (sd->y == y))
return;
sd->x = x;
sd->y = y;
ephoto_image_smart_reconfigure(sd);
}
static void ephoto_image_smart_resize(Evas_Object *obj, Evas_Coord w,
Evas_Coord h)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if ((sd->w == w) && (sd->h == h))
return;
sd->w = w;
sd->h = h;
ephoto_image_smart_reconfigure(sd);
}
static void ephoto_image_smart_show(Evas_Object *obj)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
evas_object_show(sd->edje);
evas_object_show(sd->image);
}
static void ephoto_image_smart_hide(Evas_Object *obj)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
evas_object_hide(sd->edje);
evas_object_hide(sd->image);
}
static void ephoto_image_smart_color_set(Evas_Object *obj, int r, int g,
int b, int a)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
evas_object_color_set(sd->image, r, g, b, a);
}
static void ephoto_image_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
evas_object_clip_set(sd->edje, clip);
}
static void ephoto_image_smart_clip_unset(Evas_Object *obj)
{
Ephoto_Image_Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
evas_object_clip_unset(sd->edje);
}

View File

@ -0,0 +1,103 @@
#include "ephoto.h"
static void move_left(void *data, Evas_Object *obj, const char *emission, const char *source);
static void move_right(void *data, Evas_Object *obj, const char *emission, const char *source);
static Eina_List *get_image_files(const char *directory);
/*Show the Image Browser*/
void show_image_browser(void)
{
Evas_Object *o;
int x, y, w, h;
o = edje_object_add(em->e);
edje_object_file_set(o, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/image/browser");
edje_object_part_swallow(em->bg, "ephoto.swallow.content", o);
evas_object_show(o);
em->image_browser = o;
edje_object_part_geometry_get(em->bg, "ephoto.swallow.content", &x, &y, &w, &h);
o = ephoto_table_add(em->e);
ephoto_table_padding_set(o, 20, 20);
ephoto_table_viewport_set(o, w, h);
evas_object_show(o);
edje_object_part_swallow(em->image_browser, "ephoto.swallow.content", o);
em->image_browser_tbl = o;
edje_object_signal_callback_add(em->image_browser, "mouse,up,1", "move_left", move_left, NULL);
edje_object_signal_callback_add(em->image_browser, "mouse,up,1", "move_right", move_right, NULL);
}
void hide_image_browser(void)
{
evas_object_hide(em->image_browser);
}
static void move_left(void *data, Evas_Object *obj, const char *emission, const char *source)
{
ephoto_table_prev_page(em->image_browser_tbl);
printf("Left\n");
}
static void move_right(void *data, Evas_Object *obj, const char *emission, const char *source)
{
ephoto_table_next_page(em->image_browser_tbl);
printf("Right\n");
}
/*Get a list of images and begin to thumbnail them*/
/*They will be passed to create_thumbnail for creation*/
void populate_thumbnails(void)
{
char *dir, *image;
char cwd[PATH_MAX];
dir = getcwd(cwd, PATH_MAX);
em->images = get_image_files(cwd);
while(eina_list_data_get(em->images))
{
image = eina_list_data_get(em->images);
ephoto_table_pack(em->image_browser_tbl, image);
em->images = eina_list_next(em->images);
}
}
/*Get Images From A Certain Directory*/
/*Parameter Directory Is The Directory To Get Images From*/
static Eina_List *get_image_files(const char *directory)
{
Eina_List *ls;
Eina_List *images = NULL;
char path[PATH_MAX], *file;
if (ecore_file_is_dir(directory))
{
ls = ecore_file_ls(directory);
file = eina_list_data_get(ls);
while (file)
{
const char *type;
if (strcmp(directory, "/"))
snprintf(path, PATH_MAX, "%s/%s",
directory, file);
else
snprintf(path, PATH_MAX, "%s%s",
directory, file);
type = efreet_mime_type_get((const char *)path);
if (!strncmp(type, "image", 5))
images = eina_list_append(images, strdup(path));
ls = eina_list_next(ls);
file = eina_list_data_get(ls);
}
eina_list_free(ls);
}
else
images = NULL;
return images;
}

61
src/bin/ephoto_main.c Normal file
View File

@ -0,0 +1,61 @@
#include "ephoto.h"
/*General Callbacks */
static void window_close(Ecore_Evas *ee);
static void window_resize(Ecore_Evas *ee);
static void window_shown(void *data, Evas *e, Evas_Object *obj, void *event_info);
/*Ephoto Main Global*/
Ephoto *em;
/*Create the main ephoto window*/
void create_main_window(void)
{
em = calloc(1, sizeof(Ephoto));
em->sel = NULL;
em->ee = ecore_evas_software_x11_new(0, 0, 0, 0, 950, 530);
ecore_evas_title_set(em->ee, "Ephoto");
ecore_evas_name_class_set(em->ee, "Ephoto", "Ephoto");
ecore_evas_callback_destroy_set(em->ee, window_close);
ecore_evas_callback_resize_set(em->ee, window_resize);
ecore_evas_show(em->ee);
em->e = ecore_evas_get(em->ee);
em->bg = edje_object_add(em->e);
edje_object_file_set(em->bg, PACKAGE_DATA_DIR "/themes/default/ephoto.edj",
"/ephoto/window/background");
evas_object_resize(em->bg, 950, 530);
evas_object_move(em->bg, 0, 0);
evas_object_event_callback_add(em->bg, EVAS_CALLBACK_SHOW, window_shown, NULL);
evas_object_show(em->bg);
}
static void
window_shown(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
show_image_browser();
evas_object_event_callback_del(em->bg, EVAS_CALLBACK_SHOW, window_shown);
}
/*The window has been closed, free and quit*/
static void window_close(Ecore_Evas *ee)
{
evas_object_del(em->image_browser_tbl);
if (em->images)
eina_list_free(em->images);
free(em);
ecore_main_loop_quit();
}
/*The window has been resized, update everything*/
static void window_resize(Ecore_Evas *ee)
{
int w, h;
ecore_evas_geometry_get(ee, NULL, NULL, &w, &h);
evas_object_resize(em->bg, w, h);
evas_object_move(em->bg, 0, 0);
}

687
src/bin/ephoto_table.c Normal file
View File

@ -0,0 +1,687 @@
#include "ephoto.h"
static void image_clicked(void *data, Evas *e, Evas_Object *obj, void *event_info);
typedef struct _Smart_Data Smart_Data;
struct _Smart_Data
{
Evas_Object *obj;
int visiblew;
int visibleh;
int paddingw;
int paddingh;
int tw;
int th;
int x;
int y;
int w;
int h;
int current_head;
int current_page;
int item_w, item_h;
int items_per_page;
int total_pages;
int visible_items;
Eina_List *items;
Eina_List *images;
};
static Evas_Smart *_smart = NULL;
static void _table_smart_change_page(Smart_Data *sd, int direction);
static void _table_smart_reconfigure(Smart_Data *sd);
static void _table_smart_init(void);
static void _table_smart_add(Evas_Object *obj);
static void _table_smart_del(Evas_Object *obj);
static void _table_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
static void _table_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
static void _table_smart_show(Evas_Object *obj);
static void _table_smart_hide(Evas_Object *obj);
static void _table_smart_color_set(Evas_Object *obj, int r, int g, int b, int a);
static void _table_smart_clip_set(Evas_Object *obj, Evas_Object *clip);
static void _table_smart_clip_unset(Evas_Object *obj);
static void connect_callback(void *data, Ethumb_Client *client, Eina_Bool success);
static void thumb_generated(void *data, Ethumb_Client *client, int id, const char *file, const char *key,
const char *thumb_path, const char *thumb_key,
Eina_Bool success);
Evas_Object *ephoto_table_add(Evas *e)
{
_table_smart_init();
return evas_object_smart_add(e, _smart);
}
void ephoto_table_padding_set(Evas_Object *obj, int paddingw, int paddingh)
{
Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd)
return;
sd->paddingw = paddingw;
sd->paddingh = paddingh;
}
static void connect_callback(void *data, Ethumb_Client *client, Eina_Bool success)
{
printf("Connected to ethumb client: %d\n", success);
ethumb_client_fdo_set(client, ETHUMB_THUMB_LARGE);
ethumb_client_format_set(client, ETHUMB_THUMB_FDO);
ethumb_client_aspect_set(client, ETHUMB_THUMB_KEEP_ASPECT);
populate_thumbnails();
}
static void thumb_generated(void *data, Ethumb_Client *client, int id, const char *file, const char *key,
const char *thumb_path, const char *thumb_key,
Eina_Bool success)
{
Evas_Imaging_Image *i;
Evas_Object *img, *timg, *o;
int tmiw, tmih, tmaw, tmah, w, h;
if (success)
{
img = data;
o = ephoto_image_add();
evas_object_show(o);
timg = ephoto_image_edje_object_get(o);
edje_object_part_swallow(img, "ephoto.swallow.content", timg);
edje_object_size_min_get(timg, &tmiw, &tmih);
edje_object_size_max_get(timg, &tmaw, &tmah);
i = evas_imaging_image_load(file, NULL);
evas_imaging_image_size_get(i, &w, &h);
if (w > 120 || h > 120)
{
ephoto_image_fill_inside_set(o, 0);
ephoto_image_file_set(o, thumb_path, tmiw, tmih);
evas_object_resize(o, tmiw, tmih);
evas_object_size_hint_min_set(o, tmiw, tmih);
evas_object_size_hint_max_set(o, tmiw, tmih);
}
else
{
ephoto_image_fill_inside_set(o, 0);
ephoto_image_file_set(o, thumb_path, tmiw, tmih);
evas_object_resize(o, tmiw, tmih);
evas_object_size_hint_min_set(o, tmiw, tmih);
evas_object_size_hint_max_set(o, tmiw, tmih);
}
}
}
static void image_clicked(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
if (em->sel)
edje_object_signal_emit(em->sel, "ephoto.thumb.deselected", "ephoto");
edje_object_signal_emit(obj, "ephoto.thumb.selected", "ephoto");
evas_object_resize(obj, 214, 156);
evas_object_size_hint_min_set(obj, 214, 156);
evas_object_size_hint_max_set(obj, 214, 156);
em->sel = obj;
}
void ephoto_table_pack(Evas_Object *obj, char *image)
{
Smart_Data *sd;
Evas_Imaging_Image *i;
Evas_Object *img;
int w, h;
sd = evas_object_smart_data_get(obj);
sd->images = eina_list_append(sd->images, strdup(image));
if (sd->visible_items+1 > sd->items_per_page)
{
char text[PATH_MAX];
int pages, remain;
pages = eina_list_count(sd->images)/sd->items_per_page;
remain = eina_list_count(sd->images)%sd->items_per_page;
if (remain > 0)
pages++;
sd->total_pages = pages;
snprintf(text, PATH_MAX, "Page: %d of %d", sd->current_page, sd->total_pages);
edje_object_part_text_set(em->image_browser, "ephoto.text.object", text);
return;
}
img = edje_object_add(em->e);
edje_object_file_set(img, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/thumb/shadow");
evas_object_move(img, sd->tw, sd->th);
evas_object_show(img);
evas_object_event_callback_add(img, EVAS_CALLBACK_MOUSE_UP, image_clicked, NULL);
edje_object_signal_emit(img, "ephoto.thumb.visible", "ephoto");
evas_object_resize(img, sd->item_w, sd->item_h);
evas_object_size_hint_min_set(img, sd->item_w, sd->item_h);
evas_object_size_hint_max_set(img, sd->item_w, sd->item_h);
sd->visible_items++;
i = evas_imaging_image_load(image, NULL);
evas_imaging_image_size_get(i, &w, &h);
if (w > 120 || h > 120)
{
ethumb_client_file_set(em->thumb_cli, image, NULL);
ethumb_client_generate(em->thumb_cli, thumb_generated, img, NULL);
}
else
thumb_generated(img, em->thumb_cli, 0, image, NULL, image, NULL, EINA_TRUE);
evas_imaging_image_free(i);
sd->tw += (sd->item_w + sd->paddingw);
sd->items = eina_list_append(sd->items, img);
if (sd->tw+(sd->item_w + sd->paddingw) >= sd->visiblew)
{
sd->th += (sd->item_h + sd->paddingh);
sd->tw = 60;
}
}
void ephoto_table_viewport_set(Evas_Object *obj, int w, int h)
{
Smart_Data *sd;
char text[PATH_MAX];
int pages, remain;
sd = evas_object_smart_data_get(obj);
if ((sd->visiblew == w) && (sd->visibleh == h))
return;
sd->visiblew = w;
sd->visibleh = h;
evas_object_resize(sd->obj, w, h);
evas_object_resize(em->image_browser, w, h);
sd->items_per_page = (sd->visiblew / sd->item_w) * (sd->visibleh / sd->item_h);
if (!eina_list_count(sd->items))
return;
pages = eina_list_count(sd->images)/sd->items_per_page;
remain = eina_list_count(sd->images)%sd->items_per_page;
if (remain > 0)
pages++;
if (pages <= sd->current_page)
sd->total_pages = sd->current_page;
else
sd->total_pages = pages;
snprintf(text, PATH_MAX, "Page: %d of %d", sd->current_page, sd->total_pages);
edje_object_part_text_set(em->image_browser, "ephoto.text.object", text);
_table_smart_reconfigure(sd);
}
void ephoto_table_next_page(Evas_Object *obj)
{
Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
_table_smart_change_page(sd, 1);
}
void ephoto_table_prev_page(Evas_Object *obj)
{
Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
_table_smart_change_page(sd, 0);
}
static void _table_smart_change_page(Smart_Data *sd, int direction)
{
Evas_Imaging_Image *im;
Evas_Object *i, *img;
char *image, text[PATH_MAX];
int w, h, j, vis, head, back, pages, remain;
Eina_List *iterator, *iteratorb;
pages = eina_list_count(sd->images)/sd->items_per_page;
remain = eina_list_count(sd->images)%sd->items_per_page;
if (remain > 0)
pages++;
sd->total_pages = pages;
if (sd->current_page > sd->total_pages)
{
sd->current_page = sd->total_pages;
iterator = eina_list_nth_list(sd->items, sd->current_head);
iteratorb = eina_list_nth_list(sd->items, sd->current_head);
}
else if (direction && sd->current_page < sd->total_pages)
{
if (sd->current_page == 1)
{
iterator = sd->items;
iteratorb = sd->images;
}
else
{
iterator = eina_list_nth_list(sd->items, sd->current_head);
iteratorb = eina_list_nth_list(sd->images, sd->current_head);
}
sd->current_page++;
}
else if (!direction && sd->current_page > 1)
{
if (sd->current_page == 1)
{
iterator = sd->items;
iteratorb = sd->images;
}
else
{
iterator = eina_list_nth_list(sd->items, sd->current_head);
iteratorb = eina_list_nth_list(sd->images, sd->current_head);
}
sd->current_page--;
}
else
return;
snprintf(text, PATH_MAX, "Page: %d of %d", sd->current_page, sd->total_pages);
edje_object_part_text_set(em->image_browser, "ephoto.text.object", text);
for (j = 0; j <= sd->items_per_page; j++)
{
i = eina_list_data_get(iterator);
if (evas_object_visible_get(i))
{
evas_object_hide(i);
edje_object_signal_emit(i, "ephoto.thumb.hidden", "ephoto");
}
iterator = eina_list_next(iterator);
}
if (sd->current_page == 1)
{
iterator = sd->items;
iteratorb = sd->images;
sd->current_head = 0;
}
else
{
vis = eina_list_count(sd->images)-((sd->current_page-1)*sd->items_per_page);
if (vis < sd->items_per_page)
{
back = sd->items_per_page-vis;
while (back > eina_list_count(sd->images))
back--;
head = ((sd->current_page-1)*sd->items_per_page)-back;
iterator = eina_list_nth_list(sd->items, head);
iteratorb = eina_list_nth_list(sd->images, head);
sd->current_head = head;
}
else
{
sd->current_head = (sd->current_page-1)*sd->items_per_page;
iterator = eina_list_nth_list(sd->items, sd->current_head);
iteratorb = eina_list_nth_list(sd->images, sd->current_head);
}
}
sd->tw = 60;
sd->th = 75;
sd->visible_items = 0;
for(j =0; j <= sd->items_per_page && eina_list_data_get(iterator) != NULL; j++)
{
i = eina_list_data_get(iterator);
evas_object_show(i);
evas_object_move(i, sd->tw, sd->th);
edje_object_signal_emit(i, "ephoto.thumb.visible", "ephoto");
sd->visible_items++;
sd->tw += (sd->item_w+sd->paddingw);
if (sd->tw+(sd->item_w+sd->paddingw) >= sd->visiblew)
{
sd->th += (sd->item_h+sd->paddingh);
sd->tw = 60;
}
iterator = eina_list_next(iterator);
iteratorb = eina_list_next(iteratorb);
}
if (sd->visible_items < sd->items_per_page)
{
for (j=0; j <= sd->items_per_page && eina_list_data_get(iteratorb) != NULL; j++)
{
if (sd->visible_items+1 > sd->items_per_page)
return;
image = eina_list_data_get(iteratorb);
img = edje_object_add(em->e);
edje_object_file_set(img, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/thumb/shadow");
evas_object_move(img, sd->tw, sd->th);
evas_object_show(img);
evas_object_event_callback_add(img, EVAS_CALLBACK_MOUSE_UP, image_clicked, NULL);
edje_object_signal_emit(img, "ephoto.thumb.visible", "ephoto");
evas_object_resize(img, sd->item_w, sd->item_h);
evas_object_size_hint_min_set(img, sd->item_w, sd->item_h);
evas_object_size_hint_max_set(img, sd->item_w, sd->item_h);
sd->visible_items++;
im = evas_imaging_image_load(image, NULL);
evas_imaging_image_size_get(im, &w, &h);
if (w > 120 || h > 120)
{
ethumb_client_file_set(em->thumb_cli, image, NULL);
ethumb_client_generate(em->thumb_cli, thumb_generated, img, NULL);
}
else
thumb_generated(img, em->thumb_cli, 0, image, NULL, image, NULL, EINA_TRUE);
evas_imaging_image_free(im);
sd->tw += (sd->item_w + sd->paddingw);
sd->items = eina_list_append(sd->items, img);
if (sd->tw+(sd->item_w + sd->paddingw) >= sd->visiblew)
{
sd->th += (sd->item_h + sd->paddingh);
sd->tw = 60;
}
iteratorb = eina_list_next(iteratorb);
}
}
return;
}
static void _table_smart_reconfigure(Smart_Data *sd)
{
Evas_Imaging_Image *im;
Evas_Object *i, *img;
char *image;
int w, h, j;
Eina_List *iterator, *iteratorb;
if (sd->current_page == 1)
{
iterator = sd->items;
iteratorb = sd->images;
}
else
{
iterator = eina_list_nth_list(sd->items, sd->current_head);
iteratorb = eina_list_nth_list(sd->images, sd->current_head);
}
sd->tw = 60;
sd->th = 75;
sd->visible_items = 0;
for(j =0; j <= sd->items_per_page && eina_list_data_get(iterator) != NULL; j++)
{
i = eina_list_data_get(iterator);
if (sd->visible_items+1 > sd->items_per_page)
{
evas_object_hide(i);
edje_object_signal_emit(i, "ephoto.thumb.hidden", "ephoto");
}
else
{
evas_object_show(i);
evas_object_move(i, sd->tw, sd->th);
edje_object_signal_emit(i, "ephoto.thumb.visible", "ephoto");
sd->visible_items++;
sd->tw += (sd->item_w+sd->paddingw);
if (sd->tw+(sd->item_w+sd->paddingw) >= sd->visiblew)
{
sd->th += (sd->item_h+sd->paddingh);
sd->tw = 60;
}
}
iterator = eina_list_next(iterator);
iteratorb = eina_list_next(iteratorb);
}
if (sd->visible_items < sd->items_per_page)
{
for (j=0; j <= sd->items_per_page && eina_list_data_get(iteratorb) != NULL; j++)
{
if (sd->visible_items+1 > sd->items_per_page)
return;
image = eina_list_data_get(iteratorb);
img = edje_object_add(em->e);
edje_object_file_set(img, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/thumb/shadow");
evas_object_move(img, sd->tw, sd->th);
evas_object_show(img);
evas_object_event_callback_add(img, EVAS_CALLBACK_MOUSE_UP, image_clicked, NULL);
edje_object_signal_emit(img, "ephoto.thumb.visible", "ephoto");
evas_object_resize(img, sd->item_w, sd->item_h);
evas_object_size_hint_min_set(img, sd->item_w, sd->item_h);
evas_object_size_hint_max_set(img, sd->item_w, sd->item_h);
sd->visible_items++;
im = evas_imaging_image_load(image, NULL);
evas_imaging_image_size_get(im, &w, &h);
if (w > 120 || h > 120)
{
ethumb_client_file_set(em->thumb_cli, image, NULL);
ethumb_client_generate(em->thumb_cli, thumb_generated, img, NULL);
}
else
thumb_generated(img, em->thumb_cli, 0, image, NULL, image, NULL, EINA_TRUE);
evas_imaging_image_free(im);
sd->tw += (sd->item_w + sd->paddingw);
sd->items = eina_list_append(sd->items, img);
if (sd->tw+(sd->item_w + sd->paddingw) >= sd->visiblew)
{
sd->th += (sd->item_h + sd->paddingh);
sd->tw = 60;
}
iteratorb = eina_list_next(iteratorb);
}
}
return;
}
static void _table_smart_init(void)
{
if (_smart)
return;
{
static const Evas_Smart_Class sc =
{
"ephoto_table",
EVAS_SMART_CLASS_VERSION,
_table_smart_add,
_table_smart_del,
_table_smart_move,
_table_smart_resize,
_table_smart_show,
_table_smart_hide,
_table_smart_color_set,
_table_smart_clip_set,
_table_smart_clip_unset,
NULL,
NULL
};
em->thumb_cli = ethumb_client_connect(connect_callback, NULL, NULL);
_smart = evas_smart_class_new(&sc);
}
}
static void _table_smart_add(Evas_Object *obj)
{
Smart_Data *sd;
Evas_Object *img;
int w, h;
sd = calloc(1, sizeof(Smart_Data));
if (!sd)
return;
evas_object_geometry_get(em->image_browser, 0, 0, &w, &h);
sd->visiblew = w;
sd->visibleh = h;
sd->tw = 60;
sd->th = 75;
sd->paddingw = 0;
sd->paddingh = 0;
sd->w = 0;
sd->h = 0;
sd->x = 0;
sd->y = 0;
sd->current_head = 0;
sd->current_page = 1;
sd->visible_items = 0;
sd->total_pages = 1;
sd->obj = evas_object_rectangle_add(em->e);
evas_object_color_set(sd->obj, 255, 255, 255, 0);
evas_object_smart_data_set(obj, sd);
img = edje_object_add(em->e);
edje_object_file_set(img, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/thumb/shadow");
edje_object_size_min_get(img, &sd->item_w, &sd->item_h);
evas_object_del(img);
sd->items_per_page = (sd->visiblew / sd->item_w) * (sd->visibleh / sd->item_h);
}
static void _table_smart_del(Evas_Object *obj)
{
Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd)
return;
while (eina_list_data_get(sd->items))
{
Evas_Object *child;
child = eina_list_data_get(sd->items);
if (evas_object_visible_get(child))
evas_object_del(child);
sd->items = eina_list_next(sd->items);
}
evas_object_del(sd->obj);
eina_list_free(sd->images);
eina_list_free(sd->items);
free(sd);
}
static void _table_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
{
Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd)
return;
if ((x == sd->x) && (y == sd->y))
return;
sd->x = x;
sd->y = y;
evas_object_move(sd->obj, x, y);
}
static void _table_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
{
Smart_Data *sd;
int ibw, ibh;
sd = evas_object_smart_data_get(obj);
if (!sd)
return;
evas_object_geometry_get(em->image_browser, 0, 0, &ibw, &ibh);
if ((w == sd->w) && (h == sd->h))
return;
sd->w = w;
sd->h = h;
evas_object_resize(sd->obj, w, h);
if (!eina_list_count(sd->items))
return;
if ((ibw == sd->visiblew) && (ibh == sd->visibleh))
return;
else
ephoto_table_viewport_set(obj, ibw, ibh);
}
static void _table_smart_show(Evas_Object *obj)
{
Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd)
return;
evas_object_show(sd->obj);
}
static void _table_smart_hide(Evas_Object *obj)
{
Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd)
return;
evas_object_hide(sd->obj);
}
static void _table_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
{
Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd)
return;
evas_object_color_set(sd->obj, r, g, b, a);
}
static void _table_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
{
Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd)
return;
evas_object_clip_set(sd->obj, clip);
return;
}
static void _table_smart_clip_unset(Evas_Object *obj)
{
Smart_Data *sd;
sd = evas_object_smart_data_get(obj);
if (!sd)
return;
evas_object_clip_unset(sd->obj);
return;
}