From 7357bccb20b42bf8e232d55b8bc7a0bdba4bf464 Mon Sep 17 00:00:00 2001 From: Alan Aguiar Date: Sat, 21 Jan 2012 00:55:41 -0200 Subject: [PATCH] version 1 --- COPYING | 674 +++++++++++++++++++++++++++++ MANIFEST | 42 ++ NEWS | 3 + activity.py | 9 + activity/activity.info | 8 + activity/conozco-alimentos.svg | 134 ++++++ conozcoal.py | 640 +++++++++++++++++++++++++++ olpcgames/COPYING | 24 + olpcgames/__init__.py | 102 +++++ olpcgames/_cairoimage.py | 135 ++++++ olpcgames/_gtkmain.py | 70 +++ olpcgames/_version.py | 2 + olpcgames/activity.py | 241 +++++++++++ olpcgames/buildmanifest.py | 33 ++ olpcgames/camera.py | 221 ++++++++++ olpcgames/canvas.py | 171 ++++++++ olpcgames/data/__init__.py | 36 ++ olpcgames/data/sleeping_svg.py | 61 +++ olpcgames/dbusproxy.py | 93 ++++ olpcgames/eventwrap.py | 388 +++++++++++++++++ olpcgames/gtkEvent.py | 289 +++++++++++++ olpcgames/mesh.py | 583 +++++++++++++++++++++++++ olpcgames/pangofont.py | 346 +++++++++++++++ olpcgames/pausescreen.py | 116 +++++ olpcgames/svgsprite.py | 84 ++++ olpcgames/textsprite.py | 40 ++ olpcgames/util.py | 79 ++++ olpcgames/video.py | 178 ++++++++ recursos/comun/datos/creditos.txt | 9 + recursos/comun/fuentes/AllCaps.ttf | Bin 0 -> 51996 bytes recursos/comun/fuentes/Share-Regular.ttf | Bin 0 -> 112376 bytes recursos/comun/imagenes/LICENSE | 10 + recursos/comun/imagenes/bicho.png | Bin 0 -> 98793 bytes recursos/comun/imagenes/globito.png | Bin 0 -> 1583 bytes recursos/comun/imagenes/terron.png | Bin 0 -> 11964 bytes recursos/comun/sonidos/junggle_btn045.wav | Bin 0 -> 22028 bytes recursos/lamina/LICENSE | 9 + recursos/lamina/lamina.png | Bin 0 -> 109893 bytes recursos/lamina/niveles.txt | 64 +++ recursos/lamina/zonas.png | Bin 0 -> 17184 bytes recursos/lamina/zonas.txt | 100 +++++ run.py | 41 ++ setup.py | 4 + 43 files changed, 5039 insertions(+) create mode 100644 COPYING create mode 100644 MANIFEST create mode 100644 NEWS create mode 100644 activity.py create mode 100644 activity/activity.info create mode 100644 activity/conozco-alimentos.svg create mode 100644 conozcoal.py create mode 100644 olpcgames/COPYING create mode 100644 olpcgames/__init__.py create mode 100644 olpcgames/_cairoimage.py create mode 100644 olpcgames/_gtkmain.py create mode 100644 olpcgames/_version.py create mode 100644 olpcgames/activity.py create mode 100644 olpcgames/buildmanifest.py create mode 100644 olpcgames/camera.py create mode 100644 olpcgames/canvas.py create mode 100644 olpcgames/data/__init__.py create mode 100644 olpcgames/data/sleeping_svg.py create mode 100644 olpcgames/dbusproxy.py create mode 100644 olpcgames/eventwrap.py create mode 100644 olpcgames/gtkEvent.py create mode 100644 olpcgames/mesh.py create mode 100644 olpcgames/pangofont.py create mode 100644 olpcgames/pausescreen.py create mode 100644 olpcgames/svgsprite.py create mode 100644 olpcgames/textsprite.py create mode 100644 olpcgames/util.py create mode 100644 olpcgames/video.py create mode 100644 recursos/comun/datos/creditos.txt create mode 100644 recursos/comun/fuentes/AllCaps.ttf create mode 100644 recursos/comun/fuentes/Share-Regular.ttf create mode 100644 recursos/comun/imagenes/LICENSE create mode 100644 recursos/comun/imagenes/bicho.png create mode 100644 recursos/comun/imagenes/globito.png create mode 100644 recursos/comun/imagenes/terron.png create mode 100644 recursos/comun/sonidos/junggle_btn045.wav create mode 100644 recursos/lamina/LICENSE create mode 100644 recursos/lamina/lamina.png create mode 100644 recursos/lamina/niveles.txt create mode 100644 recursos/lamina/zonas.png create mode 100644 recursos/lamina/zonas.txt create mode 100644 run.py create mode 100644 setup.py diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..6470cc3 --- /dev/null +++ b/MANIFEST @@ -0,0 +1,42 @@ +conozcoal.py +run.py +activity.py +setup.py +NEWS +COPYING +activity/conozco-alimentos.svg +activity/activity.info +olpcgames/COPYING +olpcgames/_cairoimage.py +olpcgames/svgsprite.py +olpcgames/util.py +olpcgames/__init__.py +olpcgames/pangofont.py +olpcgames/_gtkmain.py +olpcgames/canvas.py +olpcgames/gtkEvent.py +olpcgames/_version.py +olpcgames/video.py +olpcgames/eventwrap.py +olpcgames/camera.py +olpcgames/mesh.py +olpcgames/pausescreen.py +olpcgames/activity.py +olpcgames/textsprite.py +olpcgames/buildmanifest.py +olpcgames/dbusproxy.py +olpcgames/data/__init__.py +olpcgames/data/sleeping_svg.py +recursos/comun/datos/creditos.txt +recursos/comun/fuentes/AllCaps.ttf +recursos/comun/fuentes/Share-Regular.ttf +recursos/comun/imagenes/globito.png +recursos/comun/imagenes/bicho.png +recursos/comun/imagenes/terron.png +recursos/comun/imagenes/LICENSE +recursos/comun/sonidos/junggle_btn045.wav +recursos/lamina/niveles.txt +recursos/lamina/zonas.txt +recursos/lamina/zonas.png +recursos/lamina/lamina.png +recursos/lamina/LICENSE diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..2f92850 --- /dev/null +++ b/NEWS @@ -0,0 +1,3 @@ +2010-08-11 + +Primera versión de Conozco Alimentos diff --git a/activity.py b/activity.py new file mode 100644 index 0000000..1bc88e8 --- /dev/null +++ b/activity.py @@ -0,0 +1,9 @@ +from olpcgames import activity +from gettext import gettext as _ + +class Activity(activity.PyGameActivity): + """Your Sugar activity""" + + game_name = 'conozcoal' + game_title = _('Conozco Alimentos') + game_size = (1200,900) diff --git a/activity/activity.info b/activity/activity.info new file mode 100644 index 0000000..f0d79fe --- /dev/null +++ b/activity/activity.info @@ -0,0 +1,8 @@ +[Activity] +name = Conozco Alimentos +activity_version = 1 +host_version = 1 +bundle_id = org.ceibaljam.conozcoalimentos +icon = conozco-alimentos +exec = sugar-activity activity.Activity +license = GPL+ diff --git a/activity/conozco-alimentos.svg b/activity/conozco-alimentos.svg new file mode 100644 index 0000000..ec700d0 --- /dev/null +++ b/activity/conozco-alimentos.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/conozcoal.py b/conozcoal.py new file mode 100644 index 0000000..423e4ac --- /dev/null +++ b/conozcoal.py @@ -0,0 +1,640 @@ +#! /usr/bin/env python +# Conozco +# Copyright (C) 2010 Gabriel Eirea +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Contact information: +# Gabriel Eirea geirea@gmail.com +# Ceibal Jam http://ceibaljam.org + +import sys +import random +import os +import pygame +import olpcgames +import gtk + +# constantes +XMAPAMAX = 786 +DXPANEL = 414 +XCENTROPANEL = 1002 +YGLOBITO = 200 +DXBICHO = 261 +DYBICHO = 400 +XBICHO = 1200-DXBICHO +YBICHO = 900-DYBICHO +CAMINORECURSOS = "recursos" +CAMINOLAMINA = "lamina" +CAMINOCOMUN = "comun" +CAMINOFUENTES = "fuentes" +ARCHIVOINFO = "info.txt" +CAMINODATOS = "datos" +ARCHIVONIVELES = "niveles.txt" +ARCHIVOZONAS = "zonas.txt" +ARCHIVOCREDITOS = "creditos.txt" +ARCHIVONOMBRE = "nombre.txt" +CAMINOIMAGENES = "imagenes" +CAMINOSONIDOS = "sonidos" +COLORNOMBREDEPTO = (200,60,60) +COLORPREGUNTAS = (80,80,155) +COLORPANEL = (156,158,172) +TOTALAVANCE = 7 +EVENTORESPUESTA = pygame.USEREVENT+1 +TIEMPORESPUESTA = 2300 +EVENTOREFRESCO = EVENTORESPUESTA+1 +TIEMPOREFRESCO = 250 + +# variables globales para adaptar la pantalla a distintas resoluciones +scale = 1 +shift_x = 0 +shift_y = 0 +xo_resolution = True + +clock = pygame.time.Clock() + +def wait_events(): + """ Funcion para esperar por eventos de pygame sin consumir CPU """ + global clock + clock.tick(20) + return pygame.event.get() + + +class Zona(): + """Clase para zonas de una imagen. + + La posicion esta dada por una imagen bitmap pintada con un color + especifico, dado por la clave (valor 0 a 255 del componente rojo). + """ + + def __init__(self,mapa,nombre,claveColor,tipo,posicion,rotacion): + self.mapa = mapa + self.nombre = nombre + self.claveColor = int(claveColor) + self.tipo = int(tipo) + self.posicion = (int(int(posicion[0])*scale+shift_x), + int(int(posicion[1])*scale+shift_y)) + self.rotacion = int(rotacion) + + def estaAca(self,pos): + """Devuelve True si la coordenada pos esta en la zona""" + if pos[0] < XMAPAMAX*scale+shift_x: + colorAca = self.mapa.get_at((pos[0]-shift_x, pos[1]-shift_y)) + if colorAca[0] == self.claveColor: + return True + else: + return False + else: + return False + + def mostrarNombre(self,pantalla,fuente,color,flipAhora): + """Escribe el nombre de la zona en su posicion""" + text = fuente.render(self.nombre, 1, color) + textrot = pygame.transform.rotate(text, self.rotacion) + textrect = textrot.get_rect() + textrect.center = (self.posicion[0], self.posicion[1]) + pantalla.blit(textrot, textrect) + if flipAhora: + pygame.display.flip() + + +class Nivel(): + """Clase para definir los niveles del juego. + + Cada nivel tiene un dibujo inicial, los elementos pueden estar + etiquetados con el nombre o no, y un conjunto de preguntas. + """ + + def __init__(self,nombre): + self.nombre = nombre + self.preguntas = list() + self.indicePreguntaActual = 0 + self.elementosActivos = list() + + def prepararPreguntas(self): + """Este metodo sirve para preparar la lista de preguntas al azar.""" + random.shuffle(self.preguntas) + + def siguientePregunta(self,listaSufijos,listaPrefijos): + """Prepara el texto de la pregunta siguiente""" + self.preguntaActual = self.preguntas[self.indicePreguntaActual] + self.sufijoActual = random.randint(1,len(listaSufijos))-1 + self.prefijoActual = random.randint(1,len(listaPrefijos))-1 + lineas = listaPrefijos[self.prefijoActual].split("\\") + lineas.extend(self.preguntaActual[0].split("\\")) + lineas.extend(listaSufijos[self.sufijoActual].split("\\")) + self.indicePreguntaActual = self.indicePreguntaActual+1 + if self.indicePreguntaActual == len(self.preguntas): + self.indicePreguntaActual = 0 + return lineas + + def devolverAyuda(self): + """Devuelve la linea de ayuda""" + self.preguntaActual = self.preguntas[self.indicePreguntaActual-1] + return self.preguntaActual[2].split("\\") + + def mostrarPregunta(self,pantalla,fuente,sufijo,prefijo): + """Muestra la pregunta en el globito""" + self.preguntaActual = self.preguntas[self.indicePreguntaActual] + lineas = prefijo.split("\\") + lineas.extend(self.preguntaActual[0].split("\\")) + lineas.extend(sufijo.split("\\")) + yLinea = 100 + for l in lineas: + text = fuente.render(l, 1, COLORPREGUNTAS) + textrect = text.get_rect() + textrect.center = (XCENTROPANEL,yLinea) + pantalla.blit(text, textrect) + yLinea = yLinea + fuente.get_height() + pygame.display.flip() + + +class ConozcoAl(): + """Clase principal del juego. + + """ + + def mostrarTexto(self,texto,fuente,posicion,color): + """Muestra texto en una determinada posicion""" + text = fuente.render(texto, 1, color) + textrect = text.get_rect() + textrect.center = posicion + self.pantalla.blit(text, textrect) + + def cargarZonas(self): + """Carga las imagenes y los datos de las zonas""" + self.zonas = self.cargarImagen("zonas.png") + self.listaZonas = list() + # falta sanitizar manejo de archivo + f = open(os.path.join(self.camino_datos,ARCHIVOZONAS),"r") + linea = f.readline() + while linea: + if linea[0] == "#": + linea = f.readline() + continue + [nombreZona,claveColor,posx,posy,rotacion] = \ + linea.strip().split("|") + nuevaZona = Zona(self.zonas, + unicode(nombreZona,'iso-8859-1'), + claveColor,1,(posx,posy),rotacion) + self.listaZonas.append(nuevaZona) + linea = f.readline() + f.close() + + def cargarNiveles(self): + """Carga los niveles del archivo de configuracion""" + self.listaNiveles = list() + self.listaPrefijos = list() + self.listaSufijos = list() + self.listaCorrecto = list() + self.listaMal = list() + self.listaDespedidas = list() + # falta sanitizar manejo de archivo + f = open(os.path.join(self.camino_datos,ARCHIVONIVELES),"r") + linea = f.readline() + while linea: + if linea[0] == "#": + linea = f.readline() + continue + if linea[0] == "[": + # empieza nivel + nombreNivel = linea.strip("[]\n") + nuevoNivel = Nivel(nombreNivel) + self.listaNiveles.append(nuevoNivel) + linea = f.readline() + continue + if linea.find("=") == -1: + linea = f.readline() + continue + [var,valor] = linea.strip().split("=") + if var.startswith("Prefijo"): + self.listaPrefijos.append( + unicode(valor.strip(),'iso-8859-1')) + elif var.startswith("Sufijo"): + self.listaSufijos.append( + unicode(valor.strip(),'iso-8859-1')) + elif var.startswith("Correcto"): + self.listaCorrecto.append( + unicode(valor.strip(),'iso-8859-1')) + elif var.startswith("Mal"): + self.listaMal.append( + unicode(valor.strip(),'iso-8859-1')) + elif var.startswith("Despedida"): + self.listaDespedidas.append( + unicode(valor.strip(),'iso-8859-1')) + elif var.startswith("Pregunta"): + [texto,respuesta,ayuda] = valor.split("|") + nuevoNivel.preguntas.append( + (unicode(texto.strip(),'iso-8859-1'), + unicode(respuesta.strip(),'iso-8859-1'), + unicode(ayuda.strip(),'iso-8859-1'))) + linea = f.readline() + f.close() + self.indiceNivelActual = 0 + self.numeroNiveles = len(self.listaNiveles) + self.numeroSufijos = len(self.listaSufijos) + self.numeroPrefijos = len(self.listaPrefijos) + self.numeroCorrecto = len(self.listaCorrecto) + self.numeroMal = len(self.listaMal) + self.numeroDespedidas = len(self.listaDespedidas) + + def pantallaAcercaDe(self): + """Pantalla con los datos del juego, creditos, etc""" + global scale, shift_x, shift_y, xo_resolution + self.pantallaTemp = pygame.Surface( + (self.anchoPantalla,self.altoPantalla)) + self.pantallaTemp.blit(self.pantalla,(0,0)) + self.pantalla.fill((0,0,0)) + self.pantalla.blit(self.terron, + (int(20*scale+shift_x), + int(20*scale+shift_y))) + self.mostrarTexto("Acerca de Conozco Alimentos", + self.fuente40, + (int(600*scale+shift_x), + int(100*scale+shift_y)), + (255,255,255)) + # falta sanitizar acceso a archivo + f = open(os.path.join(CAMINORECURSOS, + CAMINOCOMUN, + CAMINODATOS, + ARCHIVOCREDITOS),"r") + yLinea = int(200*scale+shift_y) + for linea in f: + self.mostrarTexto(linea.strip(), + self.fuente32, + (int(600*scale+shift_x),yLinea), + (155,155,255)) + yLinea = yLinea + int(40*scale) + f.close() + self.mostrarTexto("Presiona cualquier tecla para volver", + self.fuente32, + (int(600*scale+shift_x), + int(800*scale+shift_y)), + (255,155,155)) + pygame.display.flip() + while 1: + for event in wait_events(): + if event.type == pygame.KEYDOWN: + self.click.play() + self.pantalla.blit(self.pantallaTemp,(0,0)) + pygame.display.flip() + return + elif event.type == EVENTOREFRESCO: + pygame.display.flip() + + def pantallaInicial(self): + """Pantalla con el menu principal del juego""" + global scale, shift_x, shift_y + self.pantalla.fill((0,0,0)) + self.mostrarTexto("CONOZCO ALIMENTOS", + self.fuente48, + (int(600*scale+shift_x), + int(80*scale+shift_y)), + (255,255,255)) + self.mostrarTexto("Juego", + self.fuente48, + (int(300*scale+shift_x), int(220*scale+shift_y)), + (200,100,100)) + yLista = int(300*scale+shift_y) + for n in self.listaNiveles: + self.pantalla.fill((20,20,20), + (int(10*scale+shift_x), + yLista-int(24*scale), + int(590*scale), + int(48*scale))) + self.mostrarTexto(n.nombre, + self.fuente40, + (int(300*scale+shift_x), yLista), + (200,100,100)) + yLista += int(50*scale) + self.pantalla.fill((20,20,20), + (int(10*scale+shift_x), + int(801*scale+shift_y), + int(590*scale),int(48*scale))) + self.mostrarTexto("Sobre este juego", + self.fuente40, + (int(300*scale+shift_x),int(825*scale+shift_y)), + (100,200,100)) + self.pantalla.fill((20,20,20), + (int(610*scale+shift_x), + int(801*scale+shift_y), + int(590*scale),int(48*scale))) + self.mostrarTexto("Salir", + self.fuente40, + (int(900*scale+shift_x),int(825*scale+shift_y)), + (100,200,100)) + pygame.display.flip() + while 1: + for event in wait_events(): + if event.type == pygame.KEYDOWN: + if event.key == 27: # escape: volver + self.click.play() + self.elegir_directorio = True + return + elif event.type == pygame.MOUSEBUTTONDOWN: + self.click.play() + pos = event.pos + if pos[1] > 275*scale + shift_y: # zona de opciones + if pos[0] < 600*scale + shift_x: # primera columna + if pos[1] < 275*scale + shift_y + \ + len(self.listaNiveles)*50*scale: # nivel + self.indiceNivelActual = \ + int((pos[1]-int(275*scale+shift_y))//\ + int(50*scale)) + self.jugar = True + return + elif pos[1] > 800*scale + shift_y and \ + pos[1] < 850*scale + shift_y: # acerca de + self.pantallaAcercaDe() + else: # segunda columna + if pos[1] > 800*scale + shift_y and \ + pos[1] < 850*scale+shift_y: # volver + self.elegir_directorio = True + return + elif event.type == EVENTOREFRESCO: + pygame.display.flip() + + def cargarImagen(self,nombre): + """Carga una imagen y la escala de acuerdo a la resolucion""" + global scale, xo_resolution + if xo_resolution: + imagen = pygame.image.load( \ + os.path.join(self.camino_imagenes,nombre)) + else: + imagen0 = pygame.image.load( \ + os.path.join(self.camino_imagenes,nombre)) + imagen = pygame.transform.scale(imagen0, + (int(imagen0.get_width()*scale), + int(imagen0.get_height()*scale))) + del imagen0 + return imagen + + def __init__(self): + """Esta es la inicializacion del juego""" + global scale, shift_x, shift_y, xo_resolution + pygame.init() + # crear pantalla + self.anchoPantalla = gtk.gdk.screen_width() + self.altoPantalla = gtk.gdk.screen_height() + self.pantalla = pygame.display.set_mode((self.anchoPantalla, + self.altoPantalla)) + if self.anchoPantalla==1200 and self.altoPantalla==900: + xo_resolution = True + scale = 1 + shift_x = 0 + shift_y = 0 + else: + xo_resolution = False + if self.anchoPantalla/1200.0 975*scale+shift_x and \ + event.pos[0] < 1175*scale+shift_x and \ + event.pos[1] > 25*scale+shift_y and \ + event.pos[1] < 75*scale+shift_y: # terminar + return + elif event.type == EVENTORESPUESTA: + pygame.time.set_timer(EVENTORESPUESTA,0) + if self.esCorrecto: + if self.avanceNivel == TOTALAVANCE: + return + self.avanceNivel = self.avanceNivel + 1 + if self.avanceNivel == TOTALAVANCE: # fin + self.lineasPregunta = self.listaDespedidas[\ + random.randint(1,self.numeroDespedidas)-1]\ + .split("\\") + self.mostrarGlobito(self.lineasPregunta) + pygame.time.set_timer( + EVENTORESPUESTA,TIEMPORESPUESTA) + else: # pregunta siguiente + self.lineasPregunta = \ + self.nivelActual.siguientePregunta(\ + self.listaSufijos,self.listaPrefijos) + self.mostrarGlobito(self.lineasPregunta) + self.nRespuestasMal = 0 + else: + if self.nRespuestasMal >= 2: # ayuda + self.mostrarGlobito( + self.nivelActual.devolverAyuda()) + self.nRespuestasMal = 0 + pygame.time.set_timer( + EVENTORESPUESTA,TIEMPORESPUESTA) + else: # volver a preguntar + self.mostrarGlobito(self.lineasPregunta) + elif event.type == EVENTOREFRESCO: + pygame.display.flip() + + def principal(self): + """Este es el loop principal del juego""" + global scale, shift_x, shift_y + pygame.time.set_timer(EVENTOREFRESCO,TIEMPOREFRESCO) + while 1: + self.cargarDirectorio() + while 1: + # pantalla inicial de juego + self.elegir_directorio = False + self.pantallaInicial() + if self.elegir_directorio: # volver a seleccionar mapa + sys.exit() + # dibujar fondo y panel + self.pantalla.blit(self.fondo, (shift_x, shift_y)) + self.pantalla.fill(COLORPANEL, + (int(XMAPAMAX*scale+shift_x),shift_y, + int(DXPANEL*scale),int(900*scale))) + self.pantalla.blit(self.bicho, + (int(XBICHO*scale+shift_x), + int(YBICHO*scale+shift_y))) + # mostrar pantalla + pygame.display.flip() + # ir al juego + self.jugarNivel() + + +def main(): + juego = ConozcoAl() + juego.principal() + + +if __name__ == "__main__": + main() diff --git a/olpcgames/COPYING b/olpcgames/COPYING new file mode 100644 index 0000000..b8adee0 --- /dev/null +++ b/olpcgames/COPYING @@ -0,0 +1,24 @@ +* Copyright (c) 2007, One Laptop Per Child. +* 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 One Laptop Per Child 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 ONE LAPTOP PER CHILD ``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 ONE LAPTOP PER CHILD 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. diff --git a/olpcgames/__init__.py b/olpcgames/__init__.py new file mode 100644 index 0000000..504388c --- /dev/null +++ b/olpcgames/__init__.py @@ -0,0 +1,102 @@ +"""Wrapper/adaptation system for writing/porting Pygame games to OLPC/Sugar + +The wrapper system attempts to substitute various pieces of the Pygame +implementation in order to make code written without knowledge of the +OLPC/Sugar environment run "naturally" under the GTK environment of +Sugar. It also provides some convenience mechanisms for dealing with +e.g. the Camera and Mesh Network system. + +Considerations for Developers: + +Pygame programs running under OLPCGames will generally not have +"hardware" surfaces, and will not be able to have a reduced-resolution +full-screen view to optimise rendering. The Pygame code will run in +a secondary thread, with the main GTK UI running in the primary thread. +A third "mainloop" thread will occasionally be created to handle the +GStreamer interface to the camera. + +Attributes of Note: + + ACTIVITY -- if not None, then the activity instance which represents + this activity at the Sugar shell level. + WIDGET -- PygameCanvas instance, a GTK widget with an embedded + socket object which is a proxy for the SDL window Pygame to which + pygame renders. + + Constants: All event constants used by the package are defined at this + level. Note that eventually we will need to switch to using UserEvent + and making these values sub-types rather than top-level types. + + +Pygame events at the Activity Level: + + pygame.USEREVENT + code == olpcgames.FILE_READ_REQUEST + filename (unicode/string) -- filename from which to read + metadata (dictionary-like) -- mapping from key to string values + + Note: due to a limitation in the Sugar API, the GTK event loop + will be *frozen* during this operation, as a result you cannot + make any DBUS or GTK calls, nor can you use GUI during the + call to provide input. That is, you have to process this event + synchronously. + + code == olpcgames.FILE_WRITE_REQUEST + filename (unicode/string) -- file name to which to write + metadata (dictionary-like) -- mapping from key: value where all + values must (currently) be strings + + Note: due to a limitation in the Sugar API, the GTK event loop + will be *frozen* during this operation, as a result you cannot + make any DBUS or GTK calls, nor can you use GUI during the + call to provide input. That is, you have to process this event + synchronously. + +see also the mesh and camera modules for more events. + +Deprecated: + + This module includes the activity.PyGameActivity class currently, + this is a deprecated mechanism for accessing the activity class, + and uses the deprecated spelling (case) of the name. Use: + + from olpcgames import activity + + class MyActivity( activity.PygameActivity ): + ... + + to define your PygameActivity subclass (note the case of the + spelling, which now matches Pygame's own spelling). +""" +from olpcgames._version import __version__ +ACTIVITY = None +widget = WIDGET = None + +# XXX problem here, we're filling up the entirety of the Pygame +# event-set with just this small bit of functionality, obviously +# Pygame is not intending for this kind of usage! +( + CAMERA_LOAD, CAMERA_LOAD_FAIL, + + CONNECT,PARTICIPANT_ADD, + PARTICIPANT_REMOVE, + MESSAGE_UNI,MESSAGE_MULTI, +) = range( 25, 32 ) + +# These events use UserEvent.code, eventually *all* events should be +# delivered as UserEvent with code set to the values defined here... + +( + #NET_CONNECT, NET_PARTICIPANT_ADD,NET_PARTICIPANT_REMOVE, + #NET_MESSAGE_UNICAST, NET_MESSAGE_MULTICAST, + #CAMERA_LOAD, CAMERA_LOAD_FAIL, + FILE_READ_REQUEST, FILE_WRITE_REQUEST, +) = range( + 2**16, 2**16+2, +) + +try: + from olpcgames.activity import PygameActivity as PyGameActivity +except ImportError, err: + PyGameActivity = None + diff --git a/olpcgames/_cairoimage.py b/olpcgames/_cairoimage.py new file mode 100644 index 0000000..3cfa22c --- /dev/null +++ b/olpcgames/_cairoimage.py @@ -0,0 +1,135 @@ +"""Utility functions for cairo-specific operations + +USE_BASE_ARRAY -- if False (default), uses numpy arrays, + currently this is the only version that works on 32-bit + machines. +""" +import pygame, struct, logging +big_endian = struct.pack( '=i', 1 ) == struct.pack( '>i', 1 ) + +log = logging.getLogger( 'olpcgames._cairoimage' ) +##log.setLevel( logging.DEBUG ) + +USE_BASE_ARRAY = False + +def newContext( width, height ): + """Create a new render-to-image context + + width, height -- pixel dimensions to be rendered + + Produces an ARGB format Cairo ImageSurface for + rendering your data into using rsvg, Cairo or Pango. + + returns (ImageSurface, CairoContext) for rendering + """ + import cairo + csrf = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) + context = cairo.Context (csrf) + #log.info( 'Format (expect: %s): %s', cairo.FORMAT_ARGB32, csrf.get_format()) + return csrf, context + +def mangle_color(color): + """Mange a colour depending on endian-ness, and swap-necessity + + Converts a 3 or 4 int (or float) value in the range 0-255 into a + 4-float value in the range 0.0-1.0 + """ + r,g,b = color[:3] + if len(color) > 3: + a = color[3] + else: + a = 255.0 + return map(_fixColorBase, (r,g,b,a) ) + +def _fixColorBase( v ): + """Return a properly clamped colour in floating-point space""" + return max((0,min((v,255.0))))/255.0 + +def asImage( csrf ): + """Get the pixels in csrf as a Pygame image + + Note that Pygame 1.7.1 on (Gentoo Linux) AMD64 is incorrectly + calculating the required size ARGB images, so this code will *not* work + on that platform with that version of the library. Pygame-ctypes + does work correctly there. + + Note also that Pygame 1.7.1 is showing a strange colour rotation + bug on 32-bit platforms, such that ARGB mode cannot be used for + images there. Instead we have to do an expensive bit-shift operation + to produce an RGBA image from the ARGB native Cairo format. + + Will raise a ValueError if passed a Null image (i.e. dimension of 0) + + returns Pygame.Surface (image) with convert_alpha() called for it. + """ + # Create and return a new Pygame Image derived from the Cairo Surface + format = 'ARGB' + if hasattr(csrf,'get_data'): + # more recent API, native-format, but have to (potentially) convert the format... + log.debug( 'Native-mode api (get_data)' ) + data = csrf.get_data() + if not big_endian: + # we use array here because it's considerably lighter-weight + # to import than the numpy module + log.debug( 'Not big-endian, byte-swapping array' ) + if USE_BASE_ARRAY: + import array + a = array.array( 'I' ) + a.fromstring( data ) + a.byteswap() + data = a.tostring() + else: + import numpy + n = numpy.fromstring( data, dtype='I' ) + n = ((n & 0xff000000) >> 24 ) | ((n & 0x00ffffff) << 8 ) + n = n.byteswap() + data = n.tostring() + format = 'RGBA' + else: + log.debug( 'Big-endian, array unchanged' ) + data = str(data) # there's one copy + else: + # older api, not native, but we know what it is... + log.debug( 'Non-native mode api, explicitly RGBA' ) + data = csrf.get_data_as_rgba() + data = str(data) # there's one copy + format = 'RGBA' + width, height = csrf.get_width(),csrf.get_height() + + try: + log.info( 'Format = %s', format ) + return pygame.image.fromstring( + data, + (width,height), + format + ) # there's the next + except ValueError, err: + err.args += (len(data), (width,height), width*height*4,format ) + raise + +if __name__ == "__main__": + import unittest + logging.basicConfig() + class Tests( unittest.TestCase ): + def test_colours( self ): + """Test that colours are correctly translated + + If we draw a given colour in cairo, we want the same + colour to show up in Pygame, let's test that... + """ + for sourceColour in [ + (255,0,0, 255), + (0,255,0, 255), + (0,0,255, 255), + (255,255,0, 255), + (0,255,255,255), + (255,0,255,255), + ]: + csrf,cctx = newContext( 1,1 ) + background = mangle_color( sourceColour ) + cctx.set_source_rgba(*background) + cctx.paint() + img = asImage( csrf ) + colour = img.get_at( (0,0)) + assert colour == sourceColour, (sourceColour,mangle_color(sourceColour),colour) + unittest.main() diff --git a/olpcgames/_gtkmain.py b/olpcgames/_gtkmain.py new file mode 100644 index 0000000..33a6a83 --- /dev/null +++ b/olpcgames/_gtkmain.py @@ -0,0 +1,70 @@ +"""Support for GObject mainloop-requiring libraries when not inside GTK + +INITIALIZED -- whether we have a running gobject loop yet... +LOOP_TRACKER -- if present, the manual gtk event loop used to + support gobject-based code running in a non-Gobject event loop + +Holder -- objects which can be held as attributes to keep the mainloop running +""" +import threading, logging +log = logging.getLogger( 'olpcgames._gtkmain' ) +##log.setLevel( logging.DEBUG ) + +INITIALIZED = False +LOOP_TRACKER = None + +class _TrackLoop( object ): + """Tracks the number of open loops and stops when finished""" + count = 0 + _mainloop = None + def increment( self ): + log.info( 'Increment from %s', self.count ) + self.count += 1 # XXX race condition here? + if self.count == 1: + log.info( 'Creating GObject mainloop') + self.t_loop = threading.Thread(target=self.loop) + self.t_loop.setDaemon( True ) + self.t_loop.start() + def decrement( self ): + log.info( 'Decrement from %s', self.count ) + self.count -= 1 + def loop( self ): + """Little thread loop that replicates the gtk mainloop""" + import gtk + while self.count >= 1: + log.debug( 'GTK loop restarting' ) + while gtk.events_pending(): + gtk.main_iteration() + log.debug( 'GTK loop exiting' ) + try: + del self.t_loop + except AttributeError, err: + pass + +class Holder(): + """Object which, while held, keeps the gtk mainloop running""" + def __init__( self ): + log.info( 'Beginning hold on GTK mainloop with Holder object' ) + startGTK() + def __del__( self ): + log.info( 'Releasing hold on GTK mainloop with Holder object' ) + stopGTK() + +def startGTK( ): + """GTK support is required here, process...""" + if not INITIALIZED: + init() + if LOOP_TRACKER: + LOOP_TRACKER.increment() +def stopGTK( ): + """GTK support is no longer required, release""" + if LOOP_TRACKER: + LOOP_TRACKER.decrement() +def init( ): + """Create a gobject mainloop in a sub-thread (you don't need to call this normally)""" + global INITIALIZED, LOOP_TRACKER + if not INITIALIZED: + if not LOOP_TRACKER: + LOOP_TRACKER = _TrackLoop() + INITIALIZED = True + return LOOP_TRACKER diff --git a/olpcgames/_version.py b/olpcgames/_version.py new file mode 100644 index 0000000..6a4e1db --- /dev/null +++ b/olpcgames/_version.py @@ -0,0 +1,2 @@ +"""Module defining the current version of the library""" +__version__ = '1.6' diff --git a/olpcgames/activity.py b/olpcgames/activity.py new file mode 100644 index 0000000..d4a2b5a --- /dev/null +++ b/olpcgames/activity.py @@ -0,0 +1,241 @@ +"""Embeds the Canvas widget into a Sugar-specific Activity environment + +The olpcgames.activity module encapsulates creation of a Pygame activity. +Your Activity should inherit from this class. Simply setting some class +attributes is all you need to do in a class inheriting from +olpcgames.activity.PygameActivity in order to get Pygame to work. + +(The skeleton builder script creates this file automatically for you). + +Note: + You should not import pygame into your activity file, as the olpcgames + wrapper needs to be initialized before pygame is imported the first time. + +Example usage: + + class PygameActivity(activity.Activity): + game_name = None + game_title = 'Pygame Game' + game_size = (units.grid_to_pixels(16), + units.grid_to_pixels(11)) + pygame_mode = 'SDL' +""" +import logging +logging.root.setLevel( logging.WARN ) +log = logging.getLogger( 'olpcgames.activity' ) +##log.setLevel( logging.DEBUG ) + +import pygtk +pygtk.require('2.0') +import gtk +import gtk.gdk +import os + +from sugar.activity import activity +from sugar.graphics import style +from olpcgames.canvas import PygameCanvas +from olpcgames import mesh, util + +__all__ = ['PygameActivity'] + +class PygameActivity(activity.Activity): + """Pygame-specific activity type, provides boilerplate toolbar, creates canvas + + Subclass Overrides: + + game_name -- specifies a fully-qualified name for the game's main-loop + format like so: + 'package.module:main' + if no function name is provided, "main" is assumed. + + game_handler -- DEPRECATED. alternate specification via direct + reference to a main-loop function. + + game_size -- two-value tuple specifying the size of the display in pixels, + this is currently static, so once the window is created it cannot be + changed. + + If None, use the bulk of the screen for the Pygame surface based on + the values reported by the gtk.gdk functions. Note that None is + *not* the default value. + + game_title -- title to be displayed in the Sugar Shell UI + + pygame_mode -- chooses the rendering engine used for handling the + Pygame drawing mode, 'SDL' chooses the standard Pygame renderer, + 'Cairo' chooses the experimental pygamecairo renderer. + + Note: You likely do *not* want to use Cairo, it is no longer maintained. + + PYGAME_CANVAS_CLASS -- normally PygameCanvas, but can be overridden + if you want to provide a different canvas class, e.g. to provide a different + internal layout. Note: only used where pygame_mode == 'SDL' + + The Activity, once created, will be made available as olpcgames.ACTIVITY, + and that access mechanism should allow code to test for the presence of the + activity before accessing Sugar-specific functionality. + + XXX Note that currently the toolbar and window layout are hard-coded into + this super-class, with no easy way of overriding without completely rewriting + the __init__ method. We should allow for customising both the UI layout and + the toolbar contents/layout/connection. + + XXX Note that if you change the title of your activity in the toolbar you may + see the same focus issues as we have patched around in the build_toolbar + method. If so, please report them to Mike Fletcher. + """ + game_name = None + game_title = 'Pygame Game' + game_handler = None + game_size = (16 * style.GRID_CELL_SIZE, + 11 * style.GRID_CELL_SIZE) + pygame_mode = 'SDL' + + def __init__(self, handle): + """Initialise the Activity with the activity-description handle""" + super(PygameActivity, self).__init__(handle) + self.make_global() + if self.game_size is None: + width,height = gtk.gdk.screen_width(), gtk.gdk.screen_height() + log.info( 'Total screen size: %s %s', width,height) + # for now just fudge the toolbar size... + self.game_size = width, height - (1*style.GRID_CELL_SIZE) + self.set_title(self.game_title) +# toolbar = self.build_toolbar() +# log.debug( 'Toolbar size: %s', toolbar.get_size_request()) + canvas = self.build_canvas() + self.connect( 'configure-event', canvas._translator.do_resize_event ) + + def make_global( self ): + """Hack to make olpcgames.ACTIVITY point to us + """ + import weakref, olpcgames + assert not olpcgames.ACTIVITY, """Activity.make_global called twice, have you created two Activity instances in a single process?""" + olpcgames.ACTIVITY = weakref.proxy( self ) + + def build_toolbar( self ): + """Build our Activity toolbar for the Sugar system + + This is a customisation point for those games which want to + provide custom toolbars when running under Sugar. + """ + toolbar = activity.ActivityToolbar(self) + toolbar.show() + self.set_toolbox(toolbar) + def shared_cb(*args, **kwargs): + log.info( 'shared: %s, %s', args, kwargs ) + try: + mesh.activity_shared(self) + except Exception, err: + log.error( """Failure signaling activity sharing to mesh module: %s""", util.get_traceback(err) ) + else: + log.info( 'mesh activity shared message sent, trying to grab focus' ) + try: + self._pgc.grab_focus() + except Exception, err: + log.warn( 'Focus failed: %s', err ) + else: + log.info( 'asserting focus' ) + assert self._pgc.is_focus(), """Did not successfully set pygame canvas focus""" + log.info( 'callback finished' ) + + def joined_cb(*args, **kwargs): + log.info( 'joined: %s, %s', args, kwargs ) + mesh.activity_joined(self) + self._pgc.grab_focus() + self.connect("shared", shared_cb) + self.connect("joined", joined_cb) + + if self.get_shared(): + # if set at this point, it means we've already joined (i.e., + # launched from Neighborhood) + joined_cb() + + toolbar.title.unset_flags(gtk.CAN_FOCUS) + return toolbar + + PYGAME_CANVAS_CLASS = PygameCanvas + def build_canvas( self ): + """Construct the Pygame or PygameCairo canvas for drawing""" + assert self.game_handler or self.game_name, 'You must specify a game_handler or game_name on your Activity (%r)'%( + self.game_handler or self.game_name + ) + if self.pygame_mode != 'Cairo': + self._pgc = self.PYGAME_CANVAS_CLASS(*self.game_size) + self.set_canvas(self._pgc) + self._pgc.grab_focus() + self._pgc.connect_game(self.game_handler or self.game_name) + # XXX Bad coder, do not hide in a widely subclassed operation + # map signal does not appear to show up on socket instances + gtk.gdk.threads_init() + return self._pgc + else: + import hippo + self._drawarea = gtk.DrawingArea() + canvas = hippo.Canvas() + canvas.grab_focus() + self.set_canvas(canvas) + self.show_all() + + import pygamecairo + pygamecairo.install() + + pygamecairo.display.init(canvas) + app = self.game_handler or self.game_name + if ':' not in app: + app += ':main' + mod_name, fn_name = app.split(':') + mod = __import__(mod_name, globals(), locals(), []) + fn = getattr(mod, fn_name) + fn() + def read_file(self, file_path): + """Handle request to read the given file on the Pygame side + + This is complicated rather noticeably by the silly semantics of the Journal + where it unlinks the file as soon as this method returns. We either have to + handle the file-opening in PyGTK (not acceptable), block this thread until + the Pygame thread handles the event (which it may never do) or we have + to make the silly thing use a non-standard file-opening interface. + """ + log.info( 'read_file: %s %s', file_path, self.metadata ) + import olpcgames, pygame + from olpcgames import eventwrap + event = eventwrap.Event( + type = pygame.USEREVENT, + code = olpcgames.FILE_READ_REQUEST, + filename = file_path, + metadata = self.metadata, + ) + eventwrap.post( event ) + event.block() + def write_file( self, file_path ): + """Handle request to write to the given file on the Pygame side + + This is rather complicated by the need to have the file complete by the + time the function returns. Very poor API, after all, if I have to write a + multi-hundred-megabyte file it might take many minutes to complete + writing. + """ + log.info( 'write_file: %s %s', file_path, self.metadata ) + if os.path.exists( file_path ): + self.read_file( file_path ) + import olpcgames, pygame + from olpcgames import eventwrap + event = eventwrap.Event( + type = pygame.USEREVENT, + code = olpcgames.FILE_WRITE_REQUEST, + filename = file_path, + metadata = self.metadata, + ) + eventwrap.post( event ) + event.block() + if not os.path.exists( file_path ): + log.warn( '''No file created in %r''', file_path ) + raise NotImplementedError( """Pygame Activity code did not produce a file for %s"""%( file_path, )) + else: + log.info( '''Stored file in %r''', file_path ) + + +import olpcgames +olpcgames.PyGameActivity = PygameActivity +PyGameActivity = PygameActivity diff --git a/olpcgames/buildmanifest.py b/olpcgames/buildmanifest.py new file mode 100644 index 0000000..899433b --- /dev/null +++ b/olpcgames/buildmanifest.py @@ -0,0 +1,33 @@ +#! /usr/bin/env python +"""Stupid little script to automate generation of MANIFEST and po/POTFILES.in + +Really this should have been handled by using distutils, but oh well, +distutils is a hoary beast and I can't fault people for not wanting to +spend days spelunking around inside it to find the solutions... +""" +from distutils.filelist import FileList +import os + +def fileList( template ): + """Produce a formatted file-list for storing in a file""" + files = FileList() + for line in filter(None,template.splitlines()): + files.process_template_line( line ) + content = '\n'.join( files.files ) + return content + + +def main( ): + """Do the quicky finding of files for our manifests""" + content = fileList( open('MANIFEST.in').read() ) + open( 'MANIFEST','w').write( content ) + + content = fileList( open('POTFILES.in').read() ) + try: + os.makedirs( 'po' ) + except OSError, err: + pass + open( os.path.join('po','POTFILES.in'), 'w').write( content ) + +if __name__ == "__main__": + main() diff --git a/olpcgames/camera.py b/olpcgames/camera.py new file mode 100644 index 0000000..249f295 --- /dev/null +++ b/olpcgames/camera.py @@ -0,0 +1,221 @@ +"""Accesses OLPC Camera functionality via gstreamer + +Depends upon: + pygame + gstreamer (particularly gst-launch) + +Activity demonstrating usage: + + http://dev.laptop.org/git?p=projects/games-misc;a=tree;f=cameratest.activity;hb=HEAD + + +""" +import threading, subprocess +import logging +import olpcgames +import time +import os +import pygame +from olpcgames.util import get_activity_root + +log = logging.getLogger( 'olpcgames.camera' ) +#log.setLevel( logging.DEBUG ) + +CAMERA_LOAD, CAMERA_LOAD_FAIL = olpcgames.CAMERA_LOAD, olpcgames.CAMERA_LOAD + +class Camera(object): + """A class representing a still-picture camera + + Produces a simple gstreamer bus that terminates in a filesink, that is, + it stores the results in a file. When a picture is "snapped" the gstreamer + stream is iterated until it finishes processing and then the file can be + read. + + There are two APIs available, a synchronous API which can potentially + stall your activity's GUI (and is NOT recommended) and an + asynchronous API which returns immediately and delivers the captured + camera image via a Pygame event. To be clear, it is recommended + that you use the snap_async method, *not* the snap method. + + Note: + + The Camera class is simply a convenience wrapper around a fairly + straightforward gst-launch bus. If you have more involved + requirements for your camera manipulations you will probably + find it easier to write your own camera implementation than to + use this one. Basically we provide here the "normal" use case of + snapping a picture into a pygame image. + + Note: + + With the current camera implementation taking a single photograph + requires about 6 seconds! Obviously we'll need to figure out what's + taking gstreamer so long to process the pipe and fix that. + + """ + _aliases = { + 'camera': 'v4l2src', + 'test': 'videotestsrc', + 'testing': 'videotestsrc', + 'png': 'pngenc', + 'jpeg': 'jpegenc', + 'jpg': 'jpegenc', + } + def __init__(self, source='camera', format='png', filename=None, directory = None): + """Initialises the Camera's internal description + + source -- the gstreamer source for the video to capture, useful values: + 'v4l2src','camera' -- the camera + 'videotestsrc','test' -- test pattern generator source + format -- the gstreamer encoder to use for the capture, useful values: + 'pngenc','png' -- PNG format graphic + 'jpegenc','jpg','jpeg' -- JPEG format graphic + filename -- the filename to use for the capture, if not specified defaults + to a random UUID + '.' + format + directory -- the directory in which to create the temporary file, defaults + to get_activity_root() + 'tmp' + """ + log.info( 'Creating camera' ) + if not filename: + import uuid + filename = '%s.%s'%( uuid.uuid4(), format ) + self.source = self._aliases.get( source, source ) + self.format = self._aliases.get( format, format ) + self.filename = filename + self.directory = directory + SNAP_PIPELINE = 'gst-launch','%(source)s','!','ffmpegcolorspace','!','%(format)s','!','filesink','location="%(filename)s"' + def _create_subprocess( self ): + """Method to create the gstreamer subprocess from our settings""" + if not self.directory: + path = os.path.join( get_activity_root(), 'tmp' ) + try: + os.makedirs( path ) + log.info( 'Created temporary directory: %s', path ) + except (OSError,IOError), err: + pass + else: + path = self.directory + filename = os.path.join( path, self.filename ) + format = self.format + source = self.source + pipeline = [s%locals() for s in self.SNAP_PIPELINE ] + return filename, subprocess.Popen( + pipeline,stderr = subprocess.PIPE + ) + + def snap(self): + """Snap a picture via the camera by iterating gstreamer until finished + + Note: this is an unsafe implementation, it will cause the whole + activity to hang until the capture finishes. Time to finish is often + measured in whole seconds (3-6s). + + It is *strongly* recommended that you use snap_async instead of snap! + """ + log.debug( 'Starting snap' ) + filename, pipe = self._create_subprocess() + if not pipe.wait(): + log.debug( 'Ending snap, loading: %s', filename ) + return self._load_and_clean( filename ) + else: + raise IOError( """Unable to complete snapshot: %s""", pipe.stderr.read() ) + def _load_and_clean( self, filename ): + """Use pygame to load given filename, delete after loading/attempt""" + try: + log.info( 'Loading snapshot file: %s', filename ) + return pygame.image.load(filename) + finally: + try: + os.remove( filename ) + except (IOError,OSError), err: + pass + def snap_async( self, token=None ): + """Snap a picture asynchronously generating event on success/failure + + token -- passed back as attribute of the event which signals that capture + is finished + + We return events of type CAMERA_LOAD with an attribute "succeed" + depending on whether we succeed or not. Attributes of the events which + are returned: + + success -- whether the loading process succeeded + token -- as passed to this method + image -- pygame image.load result if successful, None otherwise + filename -- the filename in our temporary directory we used to store + the file temporarily (this file will be deleted before the event + is sent, the name is for informational purposes only). + err -- Exception instance if failed, None otherwise + + Basically identical to the snap method, save that it posts a message + to the event bus in pygame.event instead of blocking and returning... + + Example: + if event == pygame.MOUSEBUTTONDOWN: + camera = Camera( source='test', filename = 'picture32' ) + camera.snap_async( myIdentifier ) + ... + elif event.type == olpcgames.CAMERA_LOAD: + if event.token == myIdentifier: + doSomething( event.image ) + """ + log.debug( 'beginning async snap') + t = threading.Thread(target=self._background_snap, args=[token]) + t.start() + return token + + def _background_snap( + self, + token = None, + ): + """Process gst messages until pipe is finished + + pipe -- gstreamer pipe definition for parse_launch, normally it will + produce a file into which the camera should store an image + + We consider pipe to be finished when we have had two "state changed" + gstreamer events where the pending state is VOID, the first for when + we begin playing, the second for when we finish. + """ + log.debug( 'Background thread kicking off gstreamer capture begun' ) + from pygame.event import Event, post + filename, pipe = self._create_subprocess() + if not pipe.wait(): + success = True + log.debug( 'Ending capture, loading: %s', filename ) + try: + image = self._load_and_clean( filename ) + except Exception, err: + image = None + success = False + else: + err = None + else: + success = False + err = pipe.stderr.read() + image = None + evt = Event( + CAMERA_LOAD, + dict( + filename=filename, + success = success, + token = token, + image=image, + err=err + ) + ) + post( evt ) + +def snap(): + """Dump a snapshot from the camera to a pygame surface in background thread + + See Camera.snap + """ + return Camera().snap() + +def snap_async( token=None, **named ): + """Dump snapshot from camera return asynchronously as event in Pygame + + See Camera.snap_async + """ + return Camera(**named).snap_async( token ) diff --git a/olpcgames/canvas.py b/olpcgames/canvas.py new file mode 100644 index 0000000..2583827 --- /dev/null +++ b/olpcgames/canvas.py @@ -0,0 +1,171 @@ +"""Implements bridge connection between Sugar/GTK and Pygame""" +import os +import sys +import logging +log = logging.getLogger( 'olpcgames.canvas' ) +##log.setLevel( logging.DEBUG ) +import threading +from pprint import pprint + +import pygtk +pygtk.require('2.0') +import gtk +import gobject +import pygame + +from olpcgames import gtkEvent, util + +__all__ = ['PygameCanvas'] + +class PygameCanvas(gtk.Layout): + """Canvas providing bridge methods to run Pygame in GTK + + The PygameCanvas creates a secondary thread in which the Pygame instance will + live, providing synthetic Pygame events to that thread via a Queue. The GUI + connection is done by having the Pygame canvas use a GTK Port object as it's + window pointer, it draws to that X-level window in order to produce output. + """ + mod_name = None + def __init__(self, width, height): + """Initializes the Canvas Object + + width,height -- passed to the inner EventBox in order to request a given size, + the Socket is the only child of this EventBox, and the Pygame commands + will be writing to the Window ID of the socket. The internal EventBox is + centered via an Alignment instance within the PygameCanvas instance. + + XXX Should refactor so that the internal setup can be controlled by the + sub-class, e.g. to get size from the host window, or something similar. + """ + # Build the main widget + log.info( 'Creating the pygame canvas' ) + super(PygameCanvas,self).__init__() + self.set_flags(gtk.CAN_FOCUS) + + # Build the sub-widgets + self._align = gtk.Alignment(0.5, 0.5) + self._inner_evb = gtk.EventBox() + self._socket = gtk.Socket() + + + # Add internal widgets + self._inner_evb.set_size_request(width, height) + self._inner_evb.add(self._socket) + + self._socket.show() + + self._align.add(self._inner_evb) + self._inner_evb.show() + + self._align.show() + + self.put(self._align, 0,0) + + # Construct a gtkEvent.Translator + self._translator = gtkEvent.Translator(self, self._inner_evb) + # + self.show() + def connect_game(self, app): + """Imports the given main-loop and starts processing in secondary thread + + app -- fully-qualified Python path-name for the game's main-loop, with + name within module as :functionname, if no : character is present then + :main will be assumed. + + Side effects: + + Sets the SDL_WINDOWID variable to our socket's window ID + Calls Pygame init + Causes the gtkEvent.Translator to "hook" Pygame + Creates and starts secondary thread for Game/Pygame event processing. + """ + log.info( 'Connecting the pygame canvas' ) + # Setup the embedding + os.environ['SDL_WINDOWID'] = str(self._socket.get_id()) + #print 'Socket ID=%s'%os.environ['SDL_WINDOWID'] + pygame.init() + + self._translator.hook_pygame() + + # Load the modules + # NOTE: This is delayed because pygame.init() must come after the embedding is up + if ':' not in app: + app += ':main' + mod_name, fn_name = app.split(':') + self.mod_name = mod_name + mod = __import__(mod_name, globals(), locals(), []) + fn = getattr(mod, fn_name) + + # Start Pygame + self.__thread = threading.Thread(target=self._start, args=[fn]) + self.__thread.start() + + def _start(self, fn): + """The method that actually runs in the background thread""" + log.info( 'Staring the mainloop' ) + import olpcgames + olpcgames.widget = olpcgames.WIDGET = self + try: + import sugar.activity.activity,os + except ImportError, err: + log.info( """Running outside Sugar""" ) + else: + try: + os.chdir(sugar.activity.activity.get_bundle_path()) + except KeyError, err: + pass + + try: + try: + try: + log.info( '''Running mainloop: %s''', fn ) + fn() + except Exception, err: + log.error( + """Uncaught top-level exception: %s""", + util.get_traceback( err ), + ) + raise + else: + log.info( "Mainloop exited" ) + finally: + log.debug( "Clearing any pending events" ) + from olpcgames import eventwrap + eventwrap.clear() + finally: + log.info( 'Main function finished, calling main_quit' ) + gtk.main_quit() + + source_object_id = None + def view_source(self): + """Implement the 'view source' key by saving + datastore, and then telling the Journal to view it.""" + if self.source_object_id is None: + from sugar import profile + from sugar.datastore import datastore + from sugar.activity.activity import get_bundle_name, get_bundle_path + from gettext import gettext as _ + import os.path + jobject = datastore.create() + metadata = { + 'title': _('%s Source') % get_bundle_name(), + 'title_set_by_user': '1', + 'suggested_filename': 'pippy_app.py', + 'icon-color': profile.get_color().to_string(), + 'mime_type': 'text/x-python', + } + for k,v in metadata.items(): + jobject.metadata[k] = v # dict.update method is missing =( + jobject.file_path = os.path.join(get_bundle_path(), 'pippy_app.py') + datastore.write(jobject) + self.__source_object_id = jobject.object_id + jobject.destroy() + self.journal_show_object(self.__source_object_id) + def journal_show_object(self, object_id): + """Invoke journal_show_object from sugar.activity.activity if it + exists.""" + try: + from sugar.activity.activity import show_object_in_journal + show_object_in_journal(object_id) + except ImportError: + pass # no love from sugar. diff --git a/olpcgames/data/__init__.py b/olpcgames/data/__init__.py new file mode 100644 index 0000000..8510186 --- /dev/null +++ b/olpcgames/data/__init__.py @@ -0,0 +1,36 @@ +"""Design-time __init__.py for resourcepackage + +This is the scanning version of __init__.py for your +resource modules. You replace it with a blank or doc-only +init when ready to release. +""" +try: + __file__ +except NameError: + pass +else: + import os + if os.path.splitext(os.path.basename( __file__ ))[0] == "__init__": + try: + from resourcepackage import package, defaultgenerators + generators = defaultgenerators.generators.copy() + + ### CUSTOMISATION POINT + ## import specialised generators here, such as for wxPython + #from resourcepackage import wxgenerators + #generators.update( wxgenerators.generators ) + except ImportError: + pass + else: + package = package.Package( + packageName = __name__, + directory = os.path.dirname( os.path.abspath(__file__) ), + generators = generators, + ) + package.scan( + ### CUSTOMISATION POINT + ## force true -> always re-loads from external files, otherwise + ## only reloads if the file is newer than the generated .py file. + # force = 1, + ) + diff --git a/olpcgames/data/sleeping_svg.py b/olpcgames/data/sleeping_svg.py new file mode 100644 index 0000000..c52398a --- /dev/null +++ b/olpcgames/data/sleeping_svg.py @@ -0,0 +1,61 @@ +# -*- coding: ISO-8859-1 -*- +"""Resource sleeping_svg (from file sleeping.svg)""" +# written by resourcepackage: (1, 0, 1) +source = 'sleeping.svg' +package = 'olpcgames.data' +data = "\012\012 \012 \012 \012 \012 \012 \ +\012 \012 \012 \012 \012 \012 \012 \012 \012 \012\012" +### end diff --git a/olpcgames/dbusproxy.py b/olpcgames/dbusproxy.py new file mode 100644 index 0000000..a103e28 --- /dev/null +++ b/olpcgames/dbusproxy.py @@ -0,0 +1,93 @@ +"""Spike test for a safer networking system for DBUS-based objects""" +from olpcgames import eventwrap, util +from dbus import proxies +import logging +log = logging.getLogger( 'dbus' ) +log.setLevel( logging.DEBUG ) + +def wrap( value, tube=None,path=None ): + """Wrap object with any required pygame-side proxies""" + if isinstance( value,proxies._ProxyMethod ): + return DBUSMethod( value, tube=tube, path=path ) + elif isinstance( value, proxies._DeferredMethod ): + value._proxy_method = DBUSMethod( value._proxy_method, tube=tube, path=path ) + return value + elif isinstance( value, proxies.ProxyObject ): + return DBUSProxy( value, tube=tube, path=path ) + else: + return value + +class DBUSProxy( object ): + """Proxy for the DBUS Proxy object""" + def __init__( self, proxy, tube=None, path=None ): + log.info( 'Creating Pygame-side proxy for %s (%s)', proxy,path ) + self.__proxy = proxy + self.__tube = tube + self.__path = path + def __getattr__( self, key ): + """Retrieve attribute of given key""" + from dbus import proxies + return wrap( getattr( self.__proxy, key ) ) + def add_signal_receiver( self, callback, eventName, interface, path=None, sender_keyword='sender'): + """Add a new signal handler (which will be called many times) for given signal + """ + log.info( """Setting signal receiver %s for event %s on interface %s (object path %s) with sender_keyword = %r""", + callback, eventName, interface, path, sender_keyword, + ) + log.debug( """proxy: %s proxy.tube: %s""", self.__proxy, self.__proxy.tube ) + self.__tube.add_signal_receiver( + Callback( callback ), + eventName, + interface, + path = path or self.__path, + sender_keyword = sender_keyword, + ) + +class DBUSMethod( object ): + """DBUS method which does callbacks in the Pygame (eventwrapper) thread""" + def __init__( self, proxy, tube,path ): + log.info( 'Creating Pygame-side method proxy for %s', proxy ) + self.__proxy = proxy + self.__tube = tube + self.__path = path + def __call__( self, *args, **named ): + """Perform the asynchronous call""" + log.info( 'Calling proxy for %s with *%s, **%s', self.__proxy, args, named ) + callback, errback = named.get( 'reply_handler'), named.get( 'error_handler' ) + if not callback: + raise TypeError( """Require a reply_handler named argument to do any asynchronous call""" ) + else: + callback = Callback( callback ) + if not errback: + errback = defaultErrback + else: + errback = Callback( errback ) + named['reply_handler'] = callback + named['error_handler'] = errback + return self.__proxy( *args, **named ) + +def defaultErrback( error ): + """Log the error to stderr/log""" + log.error( """Failure in DBUS call: %s""", error ) + +class Callback( object ): + """PyGTK-side callback which generates a CallbackResult to process on the Pygame side""" + def __init__( self, callable, callContext = None): + """Initialize the callback to process results""" + self.callable = callable + if callContext is None: + callContext = util.get_traceback( None ) + self.callContext = callContext + def __call__( self, *args, **named ): + """PyGTK-side callback operation""" + log.info( 'Callback %s return value *%s, **%s', self.callable, args, named ) + from olpcgames import eventwrap + args = [wrap(a) for a in args] + named = dict([ + (k,wrap(v)) for k,v in named.items() + ]) + eventwrap.post( + eventwrap.CallbackResult( + self.callable, args, named, callContext = self.callContext + ) + ) diff --git a/olpcgames/eventwrap.py b/olpcgames/eventwrap.py new file mode 100644 index 0000000..402109c --- /dev/null +++ b/olpcgames/eventwrap.py @@ -0,0 +1,388 @@ +"""Provides substitute for Pygame's "event" module using gtkEvent + +Provides methods which will be substituted into Pygame in order to +provide the synthetic events that we will feed into the Pygame queue. +These methods are registered by the "install" method. + +This event queue does not support getting events only of a certain type. +You need to get all pending events at a time, or filter them yourself. You +can, however, block and unblock events of certain types, so that may be +useful to you. + +Set_grab doesn't do anything (you are not allowed to grab events). Sorry. + +Extensions: + + wait( timeout=None ) -- allows you to wait for only a specified period + before you return to the application. Can be used to e.g. wait for a + short period, then release some resources, then wait a bit more, then + release a few more resources, then a bit more... +""" +import pygame +import gtk +import Queue +import thread, threading +import logging +from olpcgames import util + +log = logging.getLogger( 'olpcgames.eventwrap' ) + +from pygame.event import Event, event_name, pump as pygame_pump, get as pygame_get + +class Event(object): + """Mock pygame events""" + def __init__(self, type, dict=None,**named): + """Initialise the new event variables from dictionary and named become attributes""" + self.type = type + if dict: + self.__dict__.update( dict ) + self.__dict__.update( named ) + def _get_dict( self ): + return self.__dict__ + dict = property( _get_dict ) + def __repr__( self ): + result = [] + for key,value in self.__dict__.items(): + if not key.startswith( '_' ): + result.append( '%s = %r'%( key, value )) + return '%s( %s, %s )'%( + self.__class__.__name__, + self.type, + ",".join( result ), + ) + def block( self ): + """Block until this event is finished processing + + Event process is only finalized on the *next* call to retrieve an event + after the processing operation in which the event is processed. In some + extremely rare cases we might actually see that happen, were the + file-saving event (for example) causes the Pygame event loop to exit. + In that case, the GTK event loop *could* hang. + """ + log.info( '''Blocking GTK thread on event: %s''', self ) + self.__lock = threading.Event() + self.__lock.wait() + def retire( self ): + """Block the GTK event loop until this event is processed""" + try: + self.__lock.set() + log.info( '''Released GTK thread on event: %s''', self ) + except AttributeError, err: + pass + +class CallbackResult( object ): + def __init__( self, callable, args, named, callContext=None ): + """Perform callback in Pygame loop with args and named + + callContext is used to provide more information when there is + a failure in the callback (for debugging purposes) + """ + self.callable = callable + self.args = args + self.named = named + if callContext is None: + callContext = util.get_traceback( None ) + self.callContext = callContext + def __call__( self ): + """Perform the actual callback in the Pygame event loop""" + try: + self.callable( *self.args, **self.named ) + except Exception, err: + log.error( + """Failure in callback %s( *%s, **%s ): %s\n%s""", + getattr(self.callable, '__name__',self.callable), + self.args, self.named, + util.get_traceback( err ), + self.callContext + ) + + +_EVENTS_TO_RETIRE = [] + +def _releaseEvents( ): + """Release/retire previously-processed events""" + if _EVENTS_TO_RETIRE: + for event in _EVENTS_TO_RETIRE: + try: + event.retire() + except AttributeError, err: + pass + +def _processCallbacks( events ): + """Process any callbacks in events and remove from the stream""" + result = [] + for event in events: + if isinstance( event, CallbackResult ): + event() + else: + result.append( event ) + if events and not result: + result.append( + Event( type=pygame.NOEVENT ) + ) + return result + +def _recordEvents( events ): + """Record the set of events to retire on the next iteration""" + global _EVENTS_TO_RETIRE + events = _processCallbacks( events ) + _EVENTS_TO_RETIRE = events + return events + +def install(): + """Installs this module (eventwrap) as an in-place replacement for the pygame.event module. + + Use install() when you need to interact with Pygame code written + without reference to the olpcgames wrapper mechanisms to have the + code use this module's event queue. + + XXX Really, use it everywhere you want to use olpcgames, as olpcgames + registers the handler itself, so you will always wind up with it registered when + you use olpcgames (the gtkEvent.Translator.hook_pygame method calls it). + """ + log.info( 'Installing OLPCGames event wrapper' ) + from olpcgames import eventwrap + import pygame + pygame.event = eventwrap + import sys + sys.modules["pygame.event"] = eventwrap + +# Event queue: +class _FilterQueue( Queue.Queue ): + """Simple Queue sub-class with a put_left method""" + def get_type( self, filterFunction, block=True, timeout=None ): + """Get events of a given type + + Note: can raise Empty *even* when blocking if someone else + pops the event off the queue before we get around to it. + """ + self.not_empty.acquire() + try: + if not block: + if self._empty_type( filterFunction ): + raise Queue.Empty + elif timeout is None: + while self._empty_type( filterFunction ): + self.not_empty.wait() + else: + if timeout < 0: + raise ValueError("'timeout' must be a positive number") + endtime = _time() + timeout + while self._empty_type( filterFunction ): + remaining = endtime - _time() + if remaining <= 0.0: + raise Queue.Empty + self.not_empty.wait(remaining) + item = self._get_type( filterFunction ) + self.not_full.notify() + return item + finally: + self.not_empty.release() + def _empty_type( self, filterFunction ): + """Are we empty with respect to filterFunction?""" + for element in self.queue: + if filterFunction( element ): + return False + return True + def _get_type( self, filterFunction ): + """Get the first instance which matches filterFunction""" + for element in self.queue: + if filterFunction( element ): + self.queue.remove( element ) + return element + # someone popped the event off the queue before we got to it! + raise Queue.Empty + def peek_type( self, filterFunction= lambda x: True ): + """Peek to see if we have filterFunction-matching element + + Note: obviously this is *not* thread safe, it's just informative... + """ + try: + for element in self.queue: + if filterFunction( element ): + return element + return None + except RuntimeError, err: + return None # none yet, at least + +g_events = _FilterQueue() + +# Set of blocked events as set by set +g_blocked = set() +g_blockedlock = thread.allocate_lock() # should use threading instead +g_blockAll = False + +def _typeChecker( types ): + """Create check whether an event is in types""" + try: + if 1 in types: + pass + def check( element ): + return element.type in types + return check + except TypeError, err: + def check( element ): + return element.type == types + return check + +def pump(): + """Handle any window manager and other external events that aren't passed to the user + + Call this periodically (once a frame) if you don't call get(), poll() or wait() + """ + pygame_pump() + _releaseEvents() + +def get( types=None): + """Get a list of all pending events + + types -- either an integer event-type or a sequence of integer event types + which restrict the set of event-types returned from the queue. Keep in mind + that if you do not remove events you may wind up with an eternally growing + queue or a full queue. Normally you will want to remove all events in your + top-level event-loop and propagate them yourself. + + Note: if you use types you lose all event ordering guarantees, events + may show up after events which were originally produced before them due to + the re-ordering of the queue on filtering! + """ + pump() + eventlist = [] + try: + if types: + check = _typeChecker( types ) + while True: + eventlist.append(g_events.get_type( check, block=False)) + else: + while True: + eventlist.append(g_events.get(block=False)) + except Queue.Empty: + pass + + pygameEvents = pygame_get() + if pygameEvents: + log.info( 'Raw Pygame events: %s', pygameEvents) + eventlist.extend( pygameEvents ) + return _recordEvents( eventlist ) + +def poll(): + """Get the next pending event if exists. Otherwise, return pygame.NOEVENT.""" + pump() + try: + result = g_events.get(block=False) + return _recordEvents( [result] )[0] + except Queue.Empty: + return Event(pygame.NOEVENT) + + +def wait( timeout = None): + """Get the next pending event, wait up to timeout if none + + timeout -- if present, only wait up to timeout seconds, if we + do not find an event before then, return None. timeout + is an OLPCGames-specific extension. + """ + pump() + try: + result = None + result = g_events.get(block=True, timeout=timeout) + try: + return _recordEvents( [result] )[0] + except IndexError, err: + return Event( type=pygame.NOEVENT ) + except Queue.Empty, err: + return None + +def peek(types=None): + """True if there is any pending event + + types -- optional set of event-types used to check whether + an event is of interest. If specified must be either a sequence + of integers/longs or an integer/long. + """ + if types: + check = _typeChecker( types ) + return g_events.peek_type( check ) is not None + return not g_events.empty() + +def clear(): + """Clears the entire pending queue of events + + Rarely used + """ + try: + discarded = [] + while True: + discarded.append( g_events.get(block=False) ) + discarded = _recordEvents( discarded ) + _releaseEvents() + return discarded + except Queue.Empty: + pass + +def set_blocked(item): + """Block item/items from being added to the event queue""" + g_blockedlock.acquire() + try: + # FIXME: we do not currently know how to block all event types when + # you set_blocked(none). + [g_blocked.add(x) for x in makeseq(item)] + finally: + g_blockedlock.release() + +def set_allowed(item): + """Allow item/items to be added to the event queue""" + g_blockedlock.acquire() + try: + if item is None: + # Allow all events when you set_allowed(none). Strange, eh? + # Pygame is a wonderful API. + g_blocked.clear() + else: + [g_blocked.remove(x) for x in makeseq(item)] + finally: + g_blockedlock.release() + +def get_blocked(*args, **kwargs): + g_blockedlock.acquire() + try: + blocked = frozenset(g_blocked) + return blocked + finally: + g_blockedlock.release() + +def set_grab(grabbing): + """This method will not be implemented""" + +def get_grab(): + """This method will not be implemented""" + +def post(event): + """Post a new event to the Queue of events""" + g_blockedlock.acquire() + try: + if getattr(event,'type',None) not in g_blocked: + g_events.put(event, block=False) + finally: + g_blockedlock.release() + +def makeseq(obj): + """Accept either a scalar object or a sequence, and return a sequence + over which we can iterate. If we were passed a sequence, return it + unchanged. If we were passed a scalar, return a tuple containing only + that scalar. This allows the caller to easily support one-or-many. + """ + # Strings are the exception because you can iterate over their chars + # -- yet, for all the purposes I've ever cared about, I want to treat + # a string as a scalar. + if isinstance(obj, basestring): + return (obj,) + try: + # Except as noted above, if you can get an iter() from an object, + # it's a collection. + iter(obj) + return obj + except TypeError: + # obj is a scalar. Wrap it in a tuple so we can iterate over the + # one item. + return (obj,) diff --git a/olpcgames/gtkEvent.py b/olpcgames/gtkEvent.py new file mode 100644 index 0000000..6b20102 --- /dev/null +++ b/olpcgames/gtkEvent.py @@ -0,0 +1,289 @@ +"""gtkEvent.py: translate GTK events into Pygame events.""" +import pygtk +pygtk.require('2.0') +import gtk +import gobject +import pygame +from olpcgames import eventwrap +import logging +log = logging.getLogger( 'olpcgames.gtkevent' ) +##log.setLevel( logging.DEBUG ) + +class _MockEvent(object): + """Used to inject key-repeat events on the gtk side.""" + def __init__(self, keyval): + self.keyval = keyval + +class Translator(object): + """Utility class to translate GTK events into Pygame events + + The Translator object interprets incoming GTK events and generates + Pygame events in the eventwrap module's queue as a result. + It also handles generating Pygame style key-repeat events + by synthesizing them via a GTK timer. + """ + key_trans = { + 'Alt_L': pygame.K_LALT, + 'Alt_R': pygame.K_RALT, + 'Control_L': pygame.K_LCTRL, + 'Control_R': pygame.K_RCTRL, + 'Shift_L': pygame.K_LSHIFT, + 'Shift_R': pygame.K_RSHIFT, + 'Super_L': pygame.K_LSUPER, + 'Super_R': pygame.K_RSUPER, + 'KP_Page_Up' : pygame.K_KP9, + 'KP_Page_Down' : pygame.K_KP3, + 'KP_End' : pygame.K_KP1, + 'KP_Home' : pygame.K_KP7, + 'KP_Up' : pygame.K_KP8, + 'KP_Down' : pygame.K_KP2, + 'KP_Left' : pygame.K_KP4, + 'KP_Right' : pygame.K_KP6, + + } + + mod_map = { + pygame.K_LALT: pygame.KMOD_LALT, + pygame.K_RALT: pygame.KMOD_RALT, + pygame.K_LCTRL: pygame.KMOD_LCTRL, + pygame.K_RCTRL: pygame.KMOD_RCTRL, + pygame.K_LSHIFT: pygame.KMOD_LSHIFT, + pygame.K_RSHIFT: pygame.KMOD_RSHIFT, + } + + def __init__(self, mainwindow, mouselistener=None): + """Initialise the Translator with the windows to which to listen""" + # _inner_evb is Mouselistener + self._mainwindow = mainwindow + if mouselistener is None: + mouselistener = mainwindow + + self._inner_evb = mouselistener + + # Need to set our X event masks so we see mouse motion and stuff -- + mainwindow.set_events( + gtk.gdk.KEY_PRESS_MASK | \ + gtk.gdk.KEY_RELEASE_MASK \ + ) + + self._inner_evb.set_events( + gtk.gdk.POINTER_MOTION_MASK | \ + gtk.gdk.POINTER_MOTION_HINT_MASK | \ + gtk.gdk.BUTTON_MOTION_MASK | \ + gtk.gdk.BUTTON_PRESS_MASK | \ + gtk.gdk.BUTTON_RELEASE_MASK + ) + + # Callback functions to link the event systems + mainwindow.connect('unrealize', self._quit) + mainwindow.connect('key_press_event', self._keydown) + mainwindow.connect('key_release_event', self._keyup) + self._inner_evb.connect('button_press_event', self._mousedown) + self._inner_evb.connect('button_release_event', self._mouseup) + self._inner_evb.connect('motion-notify-event', self._mousemove) + + # You might need to do this + mainwindow.set_flags(gtk.CAN_FOCUS) + self._inner_evb.set_flags(gtk.CAN_FOCUS) + + # Internal data + self.__stopped = False + self.__keystate = [0] * 323 + self.__button_state = [0,0,0] + self.__mouse_pos = (0,0) + self.__repeat = (None, None) + self.__held = set() + self.__held_time_left = {} + self.__held_last_time = {} + self.__tick_id = None + + #print "translator initialized" + self._inner_evb.connect( 'expose-event', self.do_expose_event ) +# screen = gtk.gdk.screen_get_default() +# screen.connect( 'size-changed', self.do_resize_event ) + self._inner_evb.connect( 'configure-event', self.do_resize_event ) + def do_expose_event(self, event, widget): + """Handle exposure event (trigger redraw by gst)""" + log.info( 'Expose event: %s', event ) + from olpcgames import eventwrap + eventwrap.post( eventwrap.Event( eventwrap.pygame.VIDEOEXPOSE )) + return True + def do_resize_event( self, activity, event ): + """Our screen (actually, the default screen) has resized""" + log.info( 'Resize event: %s %s', activity, event ) + log.info( 'Event values: %s', (event.width,event.height) ) +# from olpcgames import eventwrap +# # shouldn't the activity's window have this information too? +# eventwrap.post( +# eventwrap.Event( +# eventwrap.pygame.VIDEORESIZE, +# dict(size=(event.width,event.height), width=event.width, height=event.height) +# ) +# ) + return False # continue processing + def hook_pygame(self): + """Hook the various Pygame features so that we implement the event APIs""" + # Pygame should be initialized. Hijack their key and mouse methods + pygame.key.get_pressed = self._get_pressed + pygame.key.set_repeat = self._set_repeat + pygame.mouse.get_pressed = self._get_mouse_pressed + pygame.mouse.get_pos = self._get_mouse_pos + import eventwrap + eventwrap.install() + + def _quit(self, data=None): + self.__stopped = True + eventwrap.post(eventwrap.Event(pygame.QUIT)) + + def _keydown(self, widget, event): + key = event.keyval + log.debug( 'key down: %s', key ) + if key in self.__held: + return True + else: + if self.__repeat[0] is not None: + self.__held_last_time[key] = pygame.time.get_ticks() + self.__held_time_left[key] = self.__repeat[0] + self.__held.add(key) + + return self._keyevent(widget, event, pygame.KEYDOWN) + + def _keyup(self, widget, event): + key = event.keyval + if self.__repeat[0] is not None: + if key in self.__held: + # This is possibly false if set_repeat() is called with a key held + del self.__held_time_left[key] + del self.__held_last_time[key] + self.__held.discard(key) + + return self._keyevent(widget, event, pygame.KEYUP) + + def _keymods(self): + """Extract the keymods as they stand currently.""" + mod = 0 + for key_val, mod_val in self.mod_map.iteritems(): + mod |= self.__keystate[key_val] and mod_val + return mod + + + def _keyevent(self, widget, event, type): + key = gtk.gdk.keyval_name(event.keyval) + if key is None: + # No idea what this key is. + return False + + keycode = None + if key in self.key_trans: + keycode = self.key_trans[key] + elif hasattr(pygame, 'K_'+key.upper()): + keycode = getattr(pygame, 'K_'+key.upper()) + elif hasattr(pygame, 'K_'+key.lower()): + keycode = getattr(pygame, 'K_'+key.lower()) + elif key == 'XF86Start': + # view source request, specially handled... + self._mainwindow.view_source() + else: + print 'Key %s unrecognized'%key + + if keycode is not None: + if type == pygame.KEYDOWN: + mod = self._keymods() + self.__keystate[keycode] = type == pygame.KEYDOWN + if type == pygame.KEYUP: + mod = self._keymods() + ukey = unichr(gtk.gdk.keyval_to_unicode(event.keyval)) + if ukey == '\000': + ukey = '' + evt = eventwrap.Event(type, key=keycode, unicode=ukey, mod=mod) + assert evt.key, evt + self._post(evt) + return True + + def _get_pressed(self): + """Retrieve map/array of which keys are currently depressed (held down)""" + return self.__keystate + + def _get_mouse_pressed(self): + """Return three-element array of which mouse-buttons are currently depressed (held down)""" + return self.__button_state + + def _mousedown(self, widget, event): + self.__button_state[event.button-1] = 1 + return self._mouseevent(widget, event, pygame.MOUSEBUTTONDOWN) + + def _mouseup(self, widget, event): + self.__button_state[event.button-1] = 0 + return self._mouseevent(widget, event, pygame.MOUSEBUTTONUP) + + def _mouseevent(self, widget, event, type): + + evt = eventwrap.Event(type, + button=event.button, + pos=(event.x, event.y)) + self._post(evt) + return True + + def _mousemove(self, widget, event): + # From http://www.learningpython.com/2006/07/25/writing-a-custom-widget-using-pygtk/ + # if this is a hint, then let's get all the necessary + # information, if not it's all we need. + if event.is_hint: + x, y, state = event.window.get_pointer() + else: + x = event.x + y = event.y + state = event.state + + rel = (x - self.__mouse_pos[0], + y - self.__mouse_pos[1]) + self.__mouse_pos = (x, y) + + self.__button_state = [ + state & gtk.gdk.BUTTON1_MASK and 1 or 0, + state & gtk.gdk.BUTTON2_MASK and 1 or 0, + state & gtk.gdk.BUTTON3_MASK and 1 or 0, + ] + + evt = eventwrap.Event(pygame.MOUSEMOTION, + pos=self.__mouse_pos, + rel=rel, + buttons=self.__button_state) + self._post(evt) + return True + + def _tick(self): + """Generate synthetic events for held-down keys""" + cur_time = pygame.time.get_ticks() + for key in self.__held: + delta = cur_time - self.__held_last_time[key] + self.__held_last_time[key] = cur_time + + self.__held_time_left[key] -= delta + if self.__held_time_left[key] <= 0: + self.__held_time_left[key] = self.__repeat[1] + self._keyevent(None, _MockEvent(key), pygame.KEYDOWN) + + return True + + def _set_repeat(self, delay=None, interval=None): + """Set the key-repetition frequency for held-down keys""" + if delay is not None and self.__repeat[0] is None: + self.__tick_id = gobject.timeout_add(10, self._tick) + elif delay is None and self.__repeat[0] is not None: + gobject.source_remove(self.__tick_id) + self.__repeat = (delay, interval) + + def _get_mouse_pos(self): + """Retrieve the current mouse position as a two-tuple of integers""" + return self.__mouse_pos + + def _post(self, evt): + try: + eventwrap.post(evt) + except pygame.error, e: + if str(e) == 'Event queue full': + print "Event queue full!" + pass + else: + raise e diff --git a/olpcgames/mesh.py b/olpcgames/mesh.py new file mode 100644 index 0000000..1ad4c43 --- /dev/null +++ b/olpcgames/mesh.py @@ -0,0 +1,583 @@ +'''Utilities for wrapping the telepathy network for Pygame + +The 'mesh' module allows your Pygame game to be Shared +across the OLPC networking infrastructure (D-bus and Tubes). +It offers a simplified view of the Telepathy system. + +All Sugar activities have a 'Share' menu (toolbar) which is +intended to allow other people to join the activity instance +and collaborate with you. When you select Share, the activity's +icon appears on the Neighborhood view of other laptops. + +If you do nothing else with networking, this is all that will +happen: if anyone selects your shared activity icon, they will +just spawn a new instance of the activity, and they will get to +play your game alone. + +The mesh module automatically sets up a connection from each +participant to every other participant. It provides (string based) +communications channels that let you either broadcast messages +to other users or communicate point-to-point to one other user. + +You can use the "handles" which uniquely idenify users to send +messages to an individual user (send_to( handle, message )) or +broadcast( message ) to send a message to all participants. + +More advanced (structured) networking can be handled by using +the get_object( handle, path ) function, which looks up an object +(by DBUS path) shared by the user "handle" and returns a +DBUS/Telepathy proxy for that object. The object you get back is +actually an olpcgames.dbusproxy.DBUSProxy instance, which +enforces asynchronous operations and runs your +reply_handler/error_handler in the Pygame event loop. + +NOTE: + You *cannot* make synchronous calls on these objects! + You must use the named arguments: + + reply_handler, error_handler + + for every call which you perform on a shared object (normally + these are ExportedGObject instances). + +If you want to run your callbacks in the GTK event loop (for instance +because they need to handle GTK-side objects), you can use the +dbus_get_object function. This is *not* recommended for normal +usage, as any call to Pygame operations within the GTK event loop +can cause a segfault/core of your entire Activity. + +Note: + + mesh sets up N**2 connections for each shared activity, obviously + that will not scale to very large shared activities. + +Note: + + The intention is that mesh will be refactored, possibly as a + new module called "olpcgames.network", which would break out + the various components so that there is no longer an assumed + networking layout. We will attempt to retain the mesh module's + API as we do so. + +Events produced: + + olpcgames.CONNECT -- The tube connection was started. (i.e., the + user clicked Share or started the activity from the Neighborhood + screen). + + Event properties: + + id -- a unique identifier for this connection. (shouldn't be needed + for anything) + + olpcgames.PARTICIPANT_ADD -- A participant joined the activity. + This will trigger for the local user as well as any arriving remote + users. Note that this *only* occurs after the activity is shared, + that is, the local user does not appear until after they have + shared a locally-started activity. + + Event properties: + + handle -- the arriving user's handle (a uniquely identifying string + assigned to the user by the Telepathy system, not human + readable), see lookup_buddy to retrieve human-readable + descriptions of the user. + + olpcgames.PARTICIPANT_REMOVE -- A participant quit the activity. + + Event properties: + + handle -- the departing user's handle. + + olpcgames.MESSAGE_UNI -- A message was sent to you. + + Event properties: + + content -- the content of the message (a string) + handle -- the handle of the sending user. + + olpcgames.MESSAGE_MULTI -- A message was sent to everyone. + + Event properties: + + content -- the content of the message (a string) + handle -- the handle of the sending user. + +Note: + + Eventually we will stop using top-level Pygame event types for the + various networking message types (currently four of them). We will + likely use UserEvent with a sub-type specifier for the various events + that OLPCGames produces. + +See Also: + + http://blog.vrplumber.com/2016 -- Discussion of how Productive uses + the mesh module and raw Telepathy (ExportedGObject instances) +''' +import logging +log = logging.getLogger( 'olpcgames.mesh' ) +##log.setLevel( logging.DEBUG ) +import olpcgames +from olpcgames.util import get_traceback +try: + from sugar.presence.tubeconn import TubeConnection +except ImportError, err: + TubeConnection = object +try: + from dbus.gobject_service import ExportedGObject +except ImportError, err: + ExportedGObject = object +from dbus.service import method, signal + +try: + import telepathy +except ImportError, err: + telepathy = None + +try: + import sugar.presence.presenceservice +except Exception, err: + pass +import pygame.event as PEvent + +class OfflineError( Exception ): + """Raised when we cannot complete an operation due to being offline""" + +DBUS_IFACE="org.laptop.games.pygame" +DBUS_PATH="/org/laptop/games/pygame" +DBUS_SERVICE = None + + +### NEW PYGAME EVENTS ### + +CONNECT = olpcgames.CONNECT +PARTICIPANT_ADD = olpcgames.PARTICIPANT_ADD +PARTICIPANT_REMOVE = olpcgames.PARTICIPANT_REMOVE +MESSAGE_UNI = olpcgames.MESSAGE_UNI +MESSAGE_MULTI = olpcgames.MESSAGE_MULTI + + +# Private objects for useful purposes! +pygametubes = [] +text_chan, tubes_chan = (None, None) +conn = None +initiating = False +joining = False + +connect_callback = None + +def is_initiating(): + '''A version of is_initiator that's a bit less goofy, and can be used + before the Tube comes up.''' + global initiating + return initiating + +def is_joining(): + '''Returns True if the activity was started up by means of the + Neighbourhood mesh view.''' + global joining + return joining + +def set_connect_callback(cb): + '''Just the same as the Pygame event loop can listen for CONNECT, + this is just an ugly callback that the glib side can use to be aware + of when the Tube is ready.''' + global connect_callback + connect_callback = cb + +def activity_shared(activity): + '''Called when the user clicks Share.''' + + global initiating + initiating = True + + _setup(activity) + + + log.debug('This is my activity: making a tube...') + channel = tubes_chan[telepathy.CHANNEL_TYPE_TUBES] + if hasattr( channel, 'OfferDBusTube' ): + id = channel.OfferDBusTube( + DBUS_SERVICE, {}) + else: + id = channel.OfferTube( + telepathy.TUBE_TYPE_DBUS, DBUS_SERVICE, {}) + + global connect_callback + if connect_callback is not None: + connect_callback() + +def activity_joined(activity): + '''Called at the startup of our Activity, when the user started it via Neighborhood intending to join an existing activity.''' + + # Find out who's already in the shared activity: + log.debug('Joined an existing shared activity') + + for buddy in activity._shared_activity.get_joined_buddies(): + log.debug('Buddy %s is already in the activity' % buddy.props.nick) + + + global initiating + global joining + initiating = False + joining = True + + + _setup(activity) + + tubes_chan[telepathy.CHANNEL_TYPE_TUBES].ListTubes( + reply_handler=_list_tubes_reply_cb, + error_handler=_list_tubes_error_cb) + + global connect_callback + if connect_callback is not None: + connect_callback() + +def _getConn( activity ): + log.debug( '_getConn' ) + global conn + if conn: + return conn + else: + if hasattr( activity._shared_activity, 'telepathy_conn' ): + log.debug( '''new-style api for retrieving telepathy connection present''' ) + conn = activity._shared_activity.telepathy_conn + else: + pservice = _get_presence_service() + log.debug( '_get_presence_service -> %s', pservice ) + name, path = pservice.get_preferred_connection() + log.debug( '_get_presence_service -> %s, %s', name, path) + conn = telepathy.client.Connection(name, path) + log.debug( 'Telepathy Client Connection: %s', conn ) + return conn + + + +def _setup(activity): + '''Determines text and tube channels for the current Activity. If no tube +channel present, creates one. Updates text_chan and tubes_chan. + +setup(sugar.activity.Activity, telepathy.client.Connection)''' + global text_chan, tubes_chan, DBUS_SERVICE + log.info( 'Setup for %s', activity ) + if not DBUS_SERVICE: + DBUS_SERVICE = activity.get_bundle_id() + if not activity.get_shared(): + log.error('Failed to share or join activity') + raise "Failure" + + if hasattr( activity._shared_activity, 'telepathy_tubes_chan' ): + log.debug( '''Improved channel setup API available''' ) + _getConn( activity ) + conn = activity._shared_activity.telepathy_conn + tubes_chan = activity._shared_activity.telepathy_tubes_chan + text_chan = activity._shared_activity.telepathy_text_chan + else: + log.debug( '''Old-style setup API''' ) + bus_name, conn_path, channel_paths = activity._shared_activity.get_channels() + _getConn( activity ) + + # Work out what our room is called and whether we have Tubes already + room = None + tubes_chan = None + text_chan = None + for channel_path in channel_paths: + log.debug( 'Testing channel path: %s', channel_path) + channel = telepathy.client.Channel(bus_name, channel_path) + htype, handle = channel.GetHandle() + log.debug( ' Handle Type: %s Handle: %s', htype, handle) + if htype == telepathy.HANDLE_TYPE_ROOM: + log.debug('Found our room: it has handle#%d "%s"', + handle, conn.InspectHandles(htype, [handle])[0]) + room = handle + ctype = channel.GetChannelType() + if ctype == telepathy.CHANNEL_TYPE_TUBES: + log.debug('Found our Tubes channel at %s', channel_path) + tubes_chan = channel + elif ctype == telepathy.CHANNEL_TYPE_TEXT: + log.debug('Found our Text channel at %s', channel_path) + text_chan = channel + + if room is None: + log.error("Presence service didn't create a room") + raise "Failure" + if text_chan is None: + log.error("Presence service didn't create a text channel") + raise "Failure" + + # Make sure we have a Tubes channel - PS doesn't yet provide one + if tubes_chan is None: + log.debug("Didn't find our Tubes channel, requesting one...") + tubes_chan = conn.request_channel(telepathy.CHANNEL_TYPE_TUBES, + telepathy.HANDLE_TYPE_ROOM, room, True) + + tubes_chan[telepathy.CHANNEL_TYPE_TUBES].connect_to_signal('NewTube', + new_tube_cb) + + log.info( 'Setup for %s complete', activity ) + return (text_chan, tubes_chan) + +def new_tube_cb(id, initiator, type, service, params, state): + log.debug("New_tube_cb called: %s %s %s" % (id, initiator, type)) + if (type == telepathy.TUBE_TYPE_DBUS and service == DBUS_SERVICE): + if state == telepathy.TUBE_STATE_LOCAL_PENDING: + channel = tubes_chan[telepathy.CHANNEL_TYPE_TUBES] + if hasattr( channel, 'AcceptDBusTube' ): + channel.AcceptDBusTube( id ) + else: + channel.AcceptTube(id) + + tube_conn = TubeConnection(conn, + tubes_chan[telepathy.CHANNEL_TYPE_TUBES], + id, group_iface=text_chan[telepathy.CHANNEL_INTERFACE_GROUP]) + + global pygametubes, initiating + pygametubes.append(PygameTube(tube_conn, initiating, len(pygametubes))) + + +def _list_tubes_reply_cb(tubes): + for tube_info in tubes: + new_tube_cb(*tube_info) + +def _list_tubes_error_cb(e): + log.error('ListTubes() failed: %s', e) + +def lookup_buddy( dbus_handle, callback, errback=None ): + """Do a lookup on the buddy information, callback with the information + + Calls callback( buddy ) with the result of the lookup, or errback( error ) with + a dbus description of the error in the lookup process. + + returns None + """ + log.debug('Trying to find owner of handle %s...', dbus_handle) + cs_handle = instance().tube.bus_name_to_handle[dbus_handle] + log.debug('Trying to find my handle in %s...', cs_handle) + group = text_chan[telepathy.CHANNEL_INTERFACE_GROUP] + log.debug( 'Calling GetSelfHandle' ) + if not errback: + def errback( error ): + log.error( """Failure retrieving handle for buddy lookup: %s""", error ) + def with_my_csh( my_csh ): + log.debug('My handle in that group is %s', my_csh) + def _withHandle( handle ): + """process the results of the handle values""" + # XXX: we're assuming that we have Buddy objects for all contacts - + # this might break when the server becomes scalable. + pservice = _get_presence_service() + name, path = pservice.get_preferred_connection() + callback( pservice.get_buddy_by_telepathy_handle(name, path, handle) ) + if my_csh == cs_handle: + conn.GetSelfHandle(reply_handler = _withHandle, error_handler=errback) + log.debug('CS handle %s belongs to me, looking up with GetSelfHandle', cs_handle) + elif group.GetGroupFlags() & telepathy.CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES: + handle = group.GetHandleOwners([cs_handle])[0] + log.debug('CS handle %s belongs to %s', cs_handle, handle) + _withHandle( handle ) + else: + handle = cs_handle + log.debug('non-CS handle %s belongs to itself', handle) + _withHandle( handle ) + group.GetSelfHandle( reply_handler = with_my_csh, error_handler = errback) + + + +def get_buddy(dbus_handle): + """DEPRECATED: Get a Buddy from a handle + + THIS API WAS NOT THREAD SAFE! It has been removed to avoid + extremely hard-to-debug failures in activities. Use lookup_buddy + instead! + + Code that read: + + get_buddy( handle ) + doSomething( handle, buddy ) + doSomethingElse( buddy ) + + Translates to: + + def withBuddy( buddy ): + doSomething( handle, buddy ) + doSomethingElse( buddy ) + lookup_buddy( handle, callback=withBuddy ) + """ + raise RuntimeError( + """get_buddy is not thread safe and will crash your activity (hard). Use lookup_buddy.""" + ) + +def _get_presence_service( ): + """Attempt to retrieve the presence service (check for offline condition) + + The presence service, when offline, has no preferred connection type, + so we check that before returning the object... + """ + log.debug( """About to import sugar.presence.presenceservice""" ) + try: + log.debug( 'About to retrieve presence service instance' ) + pservice = sugar.presence.presenceservice.get_instance() + try: + log.debug( ' Retrieved presence service instance: %s', pservice ) + name, path = pservice.get_preferred_connection() + log.debug( ' Name = %s Path = %s', name, path ) + except (TypeError,ValueError), err: + log.warn('Working in offline mode, cannot retrieve buddy information for %s: %s', handle, err ) + raise OfflineError( """Unable to retrieve buddy information, currently offline""" ) + else: + return pservice + except Exception, err: + log.error( """Failure in _get_presence_service: %s""", get_traceback( err )) + +def instance(idx=0): + return pygametubes[idx] + + +class PygameTube(ExportedGObject): + '''The object whose instance is shared across D-bus + + Call instance() to get the instance of this object for your activity service. + Its 'tube' property contains the underlying D-bus Connection. + ''' + def __init__(self, tube, is_initiator, tube_id): + super(PygameTube, self).__init__(tube, DBUS_PATH) + log.info( 'PygameTube init' ) + self.tube = tube + self.is_initiator = is_initiator + self.entered = False + self.ordered_bus_names = [] + PEvent.post(PEvent.Event(CONNECT, id=tube_id)) + + if not self.is_initiator: + self.tube.add_signal_receiver(self.new_participant_cb, 'NewParticipants', DBUS_IFACE, path=DBUS_PATH) + self.tube.watch_participants(self.participant_change_cb) + self.tube.add_signal_receiver(self.broadcast_cb, 'Broadcast', DBUS_IFACE, path=DBUS_PATH, sender_keyword='sender') + + + def participant_change_cb(self, added, removed): + log.debug( 'participant_change_cb: %s %s', added, removed ) + for handle, bus_name in added: + dbus_handle = self.tube.participants[handle] + self.ordered_bus_names.append(dbus_handle) + PEvent.post(PEvent.Event(PARTICIPANT_ADD, handle=dbus_handle)) + + for handle in removed: + dbus_handle = self.tube.participants[handle] + self.ordered_bus_names.remove(dbus_handle) + PEvent.post(PEvent.Event(PARTICIPANT_REMOVE, handle=dbus_handle)) + + if self.is_initiator: + if not self.entered: + # Initiator will broadcast a new ordered_bus_names each time + # a participant joins. + self.ordered_bus_names = [self.tube.get_unique_name()] + self.NewParticipants(self.ordered_bus_names) + + self.entered = True + + @signal(dbus_interface=DBUS_IFACE, signature='as') + def NewParticipants(self, ordered_bus_names): + '''This is the NewParticipants signal, sent when the authoritative list of ordered_bus_names changes.''' + log.debug("sending NewParticipants: %s" % ordered_bus_names) + pass + + @signal(dbus_interface=DBUS_IFACE, signature='s') + def Broadcast(self, content): + '''This is the Broadcast signal; it sends a message to all other activity participants.''' + pass + + @method(dbus_interface=DBUS_IFACE, in_signature='s', out_signature='', sender_keyword='sender') + def Tell(self, content, sender=None): + '''This is the targeted-message interface; called when a message is received that was sent directly to me.''' + PEvent.post(PEvent.Event(MESSAGE_UNI, handle=sender, content=content)) + + def broadcast_cb(self, content, sender=None): + '''This is the Broadcast callback, fired when someone sends a Broadcast signal along the bus.''' + PEvent.post(PEvent.Event(MESSAGE_MULTI, handle=sender, content=content)) + + def new_participant_cb(self, new_bus_names): + '''This is the NewParticipants callback, fired when someone joins or leaves.''' + log.debug("new participant. new bus names %s, old %s" % (new_bus_names, self.ordered_bus_names)) + if self.ordered_bus_names != new_bus_names: + log.warn("ordered bus names out of sync with server, resyncing") + self.ordered_bus_names = new_bus_names + +def send_to(handle, content=""): + '''Sends the given message to the given buddy identified by handle.''' + log.debug( 'send_to: %s %s', handle, content ) + remote_proxy = dbus_get_object(handle, DBUS_PATH) + remote_proxy.Tell(content, reply_handler=dbus_msg, error_handler=dbus_err) + +def dbus_msg(): + log.debug("async reply to send_to") +def dbus_err(e): + log.error("async error: %s" % e) + +def broadcast(content=""): + '''Sends the given message to all participants.''' + log.debug( 'Broadcast: %s', content ) + instance().Broadcast(content) + +def my_handle(): + '''Returns the handle of this user + + Note, you can get a DBusException from this if you have + not yet got a unique ID assigned by the bus. You may need + to delay calling until you are sure you are connected. + ''' + log.debug( 'my handle' ) + return instance().tube.get_unique_name() + +def is_initiator(): + '''Returns the handle of this user.''' + log.debug( 'is initiator' ) + return instance().is_initiator + +def get_participants(): + '''Returns the list of active participants, in order of arrival. + List is maintained by the activity creator; if that person leaves it may not stay in sync.''' + log.debug( 'get_participants' ) + try: + return instance().ordered_bus_names[:] + except IndexError, err: + return [] # no participants yet, as we don't yet have a connection + +def dbus_get_object(handle, path, warning=True): + '''Get a D-bus object from another participant + + Note: this *must* be called *only* from the GTK mainloop, calling + it from Pygame will cause crashes! If you are *sure* you only ever + want to call methods on this proxy from GTK, you can use + warning=False to silence the warning log message. + ''' + if warning: + log.warn( 'Use of dbus_get_object is only safe from the GTK mainloop, use dbus_get_object_proxy instead: %s %s', handle, path ) + return instance().tube.get_object(handle, path) + +def get_object(handle, path): + '''Get a D-BUS proxy object from another participant for use in Pygame + + This is how you can communicate with other participants using + arbitrary D-bus objects without having to manage the participants + yourself. You can use the returned proxy's methods from Pygame, + with your callbacks occuring in the Pygame thread, rather than + in the DBUS/GTK event loop. + + Simply define a D-bus class with an interface and path that you + choose; when you want a reference to the corresponding remote + object on a participant, call this method. + + returns an olpcgames.dbusproxy.DBUSProxy( ) object wrapping + the DBUSProxy object. + + The dbus_get_object_proxy name is deprecated + ''' + log.debug( 'DBUS get_object( %r %r )', handle, path ) + from olpcgames import dbusproxy + return dbusproxy.DBUSProxy( + instance().tube.get_object( handle, path), + tube=instance().tube, + path=path + ) + +dbus_get_object_proxy = get_object diff --git a/olpcgames/pangofont.py b/olpcgames/pangofont.py new file mode 100644 index 0000000..441dfd1 --- /dev/null +++ b/olpcgames/pangofont.py @@ -0,0 +1,346 @@ +"""Implement Pygame's font interface using Pango for international support + +Depends on: + + pygtk (to get the pango context) + pycairo (for the pango rendering context) + python-pango (obviously) + numpy + (pygame) + +As soon as you import this module you have loaded *all* of the above. +You can still use pygame.font until you decide to call install(), which +will replace pygame.font with this module. + +Notes: + + * no ability to load TTF files, PangoFont uses the font files registered + with GTK/X to render graphics, it cannot load an arbitrary TTF file. + Most non-Sugar Pygame games use bundled TTF files, which means + that you will likely need at least some changes to your font handling. + + Note, however, that the Pygame Font class is available to load the TTF + files, so if you don't want to take advantage of PangoFont for already + written code, but want to use it for "system font" operations, you can + mix the two. + + * metrics are missing, Pango can provide the information, but the more + involved metrics system means that translating to the simplified model + in Pygame has as of yet not been accomplished. + + * better support for "exotic" languages and scripts (which is why we use it) + +The main problem with SDL_ttf is that it doesn't handle internationalization +nearly as well as Pango (in fact, pretty much nothing does). However, it is +fairly fast and it has a rich interface. You should avoid fonts where possible, +prerender using Pango for internationalizable text, and use Pango or SDL_ttf +for text that really needs to be rerendered each frame. (Use SDL_ttf if profiling +demonstrates that performance is poor with Pango.) + +Note: + Font -- is the original Pygame Font class, which allows you to load + fonts from TTF files/filenames + PangoFont -- is the Pango-specific rendering engine which allows + for the more involved cross-lingual rendering operations. +""" +import pango +import logging +import pangocairo +import pygame.rect, pygame.image +import gtk +import struct +from pygame import surface +from pygame.font import Font +from olpcgames import _cairoimage + +log = logging.getLogger( 'olpcgames.pangofont' ) +##log.setLevel( logging.DEBUG ) + +# Install myself on top of pygame.font +def install(): + """Replace Pygame's font module with this module""" + log.info( 'installing' ) + from olpcgames import pangofont + import pygame + pygame.font = pangofont + import sys + sys.modules["pygame.font"] = pangofont + +class PangoFont(object): + """Base class for a pygame.font.Font-like object drawn by Pango + + Attributes of note: + + fd -- instances Pango FontDescription object + WEIGHT_* -- parameters for use with set_weight + STYLE_* -- parameters for use with set_style + + """ + WEIGHT_BOLD = pango.WEIGHT_BOLD + WEIGHT_HEAVY = pango.WEIGHT_HEAVY + WEIGHT_LIGHT = pango.WEIGHT_LIGHT + WEIGHT_NORMAL = pango.WEIGHT_NORMAL + WEIGHT_SEMIBOLD = pango.WEIGHT_SEMIBOLD + WEIGHT_ULTRABOLD = pango.WEIGHT_ULTRABOLD + WEIGHT_ULTRALIGHT = pango.WEIGHT_ULTRALIGHT + STYLE_NORMAL = pango.STYLE_NORMAL + STYLE_ITALIC = pango.STYLE_ITALIC + STYLE_OBLIQUE = pango.STYLE_OBLIQUE + def __init__(self, family=None, size=None, bold=False, italic=False, underline=False, fd=None): + """If you know what pango.FontDescription (fd) you want, pass it in as + 'fd'. Otherwise, specify any number of family, size, bold, or italic, + and we will try to match something up for you.""" + + # Always set the FontDescription (FIXME - only set it if the user wants + # to change something?) + if fd is None: + fd = pango.FontDescription() + if family is not None: + fd.set_family(family) + if size is not None: + log.debug( 'Pre-conversion size: %s', size ) + size = int(size*1024) + log.debug( 'Font size: %s', size, ) + fd.set_size(size) # XXX magic number, pango's scaling + self.fd = fd + self.set_bold( bold ) + self.set_italic( italic ) + self.set_underline( underline ) + + def render(self, text, antialias=True, color=(255,255,255), background=None ): + """Render the font onto a new Surface and return it. + We ignore 'antialias' and use system settings. + + text -- (unicode) string with the text to render + antialias -- attempt to antialias the text or not + color -- three or four-tuple of 0-255 values specifying rendering + colour for the text + background -- three or four-tuple of 0-255 values specifying rendering + colour for the background, or None for trasparent background + + returns a pygame image instance + """ + log.info( 'render: %r, antialias = %s, color=%s, background=%s', text, antialias, color, background ) + + layout = self._createLayout( text ) + # determine pixel size + (logical, ink) = layout.get_pixel_extents() + ink = pygame.rect.Rect(ink) + + # Create a new Cairo ImageSurface + csrf,cctx = _cairoimage.newContext( ink.w, ink.h ) + cctx = pangocairo.CairoContext(cctx) + + # Mangle the colors on little-endian machines. The reason for this + # is that Cairo writes native-endian 32-bit ARGB values whereas + # Pygame expects endian-independent values in whatever format. So we + # tell our users not to expect transparency here (avoiding the A issue) + # and we swizzle all the colors around. + + # render onto it + if background is not None: + background = _cairoimage.mangle_color( background ) + cctx.set_source_rgba(*background) + cctx.paint() + + log.debug( 'incoming color: %s', color ) + color = _cairoimage.mangle_color( color ) + log.debug( ' translated color: %s', color ) + + cctx.new_path() + cctx.layout_path(layout) + cctx.set_source_rgba(*color) + cctx.fill() + + # Create and return a new Pygame Image derived from the Cairo Surface + return _cairoimage.asImage( csrf ) + + def set_bold( self, bold=True): + """Set our font description's weight to "bold" or "normal" + + bold -- boolean, whether to set the value to "bold" weight or not + """ + if bold: + self.set_weight( self.WEIGHT_BOLD ) + else: + self.set_weight( self.WEIGHT_NORMAL ) + def set_weight( self, weight ): + """Explicitly set our pango-style weight value""" + self.fd.set_weight( weight ) + return self.get_weight() + def get_weight( self ): + """Explicitly get our pango-style weight value""" + return self.fd.get_weight() + def get_bold( self ): + """Return whether our font's weight is bold (or above)""" + return self.fd.get_weight() >= pango.WEIGHT_BOLD + + def set_italic( self, italic=True ): + """Set our "italic" value (style)""" + if italic: + self.set_style( self.STYLE_ITALIC ) + else: + self.set_style( self.STYLE_NORMAL ) + def set_style( self, style ): + """Set our font description's pango-style""" + self.fd.set_style( style ) + return self.fd.get_style() + def get_style( self ): + """Get our font description's pango-style""" + return self.fd.get_style() + def get_italic( self ): + """Return whether we are currently italicised""" + return self.fd.get_style() == self.STYLE_ITALIC # what about oblique? + + def set_underline( self, underline=True ): + """Set our current underlining properly""" + self.underline = underline + def get_underline( self ): + """Retrieve our current underline setting""" + return self.underline + + def _createLayout( self, text ): + """Produces a Pango layout describing this text in this font""" + # create layout + layout = pango.Layout(gtk.gdk.pango_context_get()) + layout.set_font_description(self.fd) + if self.underline: + attrs = layout.get_attributes() + if not attrs: + attrs = pango.AttrList() + attrs.insert(pango.AttrUnderline(pango.UNDERLINE_SINGLE, 0, 32767)) + layout.set_attributes( attrs ) + layout.set_text(text) + return layout + + def size( self, text ): + """Determine space required to render given text + + returns tuple of (width,height) + """ + layout = self._createLayout( text ) + (logical, ink) = layout.get_pixel_extents() + ink = pygame.rect.Rect(ink) + return (ink.width,ink.height) + +## def get_linesize( self ): +## """Determine inter-line spacing for the font""" +## font = self.get_context().load_font( self.fd ) +## metrics = font.get_metrics() +## return pango.PIXELS( metrics.get_ascent() ) +## def get_height( self ): +## def get_ascent( self ): +## def get_descent( self ): + + +class SysFont(PangoFont): + """Construct a PangoFont from a font description (name), size in pixels, + bold, and italic designation. Similar to SysFont from Pygame.""" + def __init__(self, name, size, bold=False, italic=False): + fd = pango.FontDescription(name) + fd.set_absolute_size(size*pango.SCALE) + if bold: + fd.set_weight(pango.WEIGHT_BOLD) + if italic: + fd.set_style(pango.STYLE_OBLIQUE) + super(SysFont, self).__init__(fd=fd) + +# originally defined a new class, no reason for that... +NotImplemented = NotImplementedError + +def match_font(name,bold=False,italic=False): + """Stub, does not work, use fontByDesc instead""" + raise NotImplementedError("PangoFont doesn't support match_font directly, use SysFont or .fontByDesc") + +def fontByDesc(desc="",bold=False,italic=False): + """Constructs a FontDescription from the given string representation. + +The format of the fontByDesc string representation is passed directly +to the pango.FontDescription constructor and documented at: + + http://www.pygtk.org/docs/pygtk/class-pangofontdescription.html#constructor-pangofontdescription + +Bold and italic are provided as a convenience. + +The format of the string representation is: + + "[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]" + +where FAMILY-LIST is a comma separated list of families optionally terminated by a comma, STYLE_OPTIONS is a whitespace separated list of words where each WORD describes one of style, variant, weight, or stretch, and SIZE is an decimal number (size in points). For example the following are all valid string representations: + + "sans bold 12" + "serif,monospace bold italic condensed 16" + "normal 10" + +The commonly available font families are: Normal, Sans, Serif and Monospace. The available styles are: +Normal the font is upright. +Oblique the font is slanted, but in a roman style. +Italic the font is slanted in an italic style. + +The available weights are: +Ultra-Light the ultralight weight (= 200) +Light the light weight (=300) +Normal the default weight (= 400) +Bold the bold weight (= 700) +Ultra-Bold the ultra-bold weight (= 800) +Heavy the heavy weight (= 900) + +The available variants are: +Normal +Small-Caps + +The available stretch styles are: +Ultra-Condensed the smallest width +Extra-Condensed +Condensed +Semi-Condensed +Normal the normal width +Semi-Expanded +Expanded +Extra-Expanded +Ultra-Expanded the widest width + """ + fd = pango.FontDescription(name) + if bold: + fd.set_weight(pango.WEIGHT_BOLD) + if italic: + fd.set_style(pango.STYLE_OBLIQUE) + return PangoFont(fd=fd) + +def get_init(): + """Return boolean indicating whether we are initialised + + Always returns True + """ + return True + +def init(): + """Initialise the module (null operation)""" + pass + +def quit(): + """De-initialise the module (null operation)""" + pass + +def get_default_font(): + """Return default-font specification to be passed to e.g. fontByDesc""" + return "sans" + +def get_fonts(): + """Return the set of all fonts available (currently just 3 generic types)""" + return ["sans","serif","monospace"] + + +def stdcolor(color): + """Produce a 4-element 0.0-1.0 color value from input""" + def fixlen(color): + if len(color) == 3: + return tuple(color) + (255,) + elif len(color) == 4: + return color + else: + raise TypeError("What sort of color is this: %s" % (color,)) + return [_fixColorBase(x) for x in fixlen(color)] +def _fixColorBase( v ): + """Return a properly clamped colour in floating-point space""" + return max((0,min((v,255.0))))/255.0 diff --git a/olpcgames/pausescreen.py b/olpcgames/pausescreen.py new file mode 100644 index 0000000..113a0ea --- /dev/null +++ b/olpcgames/pausescreen.py @@ -0,0 +1,116 @@ +"""Display a "paused" version of the currently-displayed screen + +This code is largely cribbed from the Pippy activity's display code, +but we try to be a little more generally usable than they are, as +we have more involved activities using the code. + +We use svgsprite to render a graphic which is stored in the +olpcgames data directory over a dimmed version of the current +screen contents. + +_LAST_EVENT_TIME -- tracks the last time that we saw an event + come across the wire. +""" +import logging +log = logging.getLogger( 'olpcgames.pausescreen' ) +import pygame +from pygame import sprite + +_LAST_EVENT_TIME = 0 + +def _set_last_event_time( time=None ): + """Set time as the last event time + + time -- if None, pygame.time.get_ticks() is used + + returns time set + """ + global _LAST_EVENT_TIME + if time is None: + time = pygame.time.get_ticks() + _LAST_EVENT_TIME = time + return time + +def last_event_time( ): + """Return the duration since last event for pausing operations + + returns time in seconds + """ + global _LAST_EVENT_TIME + return (pygame.time.get_ticks() - _LAST_EVENT_TIME)/1000. + + +def get_events( sleep_timeout = 10, pause=None, **args ): + """Retrieve the set of pending events or sleep + + sleep_timeout -- dormant period before we invoke pause_screen + pause -- callable to produce visual notification of pausing, normally + by taking the current screen and modifying it in some way. Defaults + to pauseScreen in this module. If you return nothing from this + function then no restoration or display-flipping will occur + *args -- if present, passed to 'pause' to configuration operation (e.g. + to specify a different overlaySVG file) + + returns set of pending events (potentially empty) + """ + if not pause: + pause = pauseScreen + events = pygame.event.get( ) + if not events: + log.info( 'No events in queue' ) + old_screen = None + if last_event_time() > sleep_timeout: + # we've been waiting long enough, go to sleep visually + log.warn( 'Pausing activity after %s with function %s', sleep_timeout, pause ) + old_screen = pause( ) + if old_screen: + pygame.display.flip() + # now we wait until there *are* some events (efficiently) + # and retrieve any extra events that are waiting... + events = [ pygame.event.wait() ] + pygame.event.get() + log.warn( 'Activity restarted') + if old_screen: + restoreScreen( old_screen ) + if events: + _set_last_event_time() + return events + +def pauseScreen( overlaySVG=None ): + """Display a "Paused" screen and suspend + + This default implementation will not do anything to shut down your + simulation or other code running in other threads. It will merely block + this thread (the pygame thread) until an event shows up in the + eventwrap queue. + + Returns a surface to pass to restoreScreen to continue... + """ + from olpcgames import svgsprite + if not overlaySVG: + from olpcgames.data import sleeping_svg + overlaySVG = sleeping_svg.data + screen = pygame.display.get_surface() + old_screen = screen.copy() # save this for later. + pause_sprite = svgsprite.SVGSprite( + overlaySVG, + ) + pause_sprite.rect.center = screen.get_rect().center + group = sprite.RenderUpdates( ) + group.add( pause_sprite ) + + # dim the screen and display the 'paused' message in the center. + BLACK = (0,0,0) + WHITE = (255,255,255) + dimmed = screen.copy() + dimmed.set_alpha(128) + screen.fill(BLACK) + screen.blit(dimmed, (0,0)) + + group.draw( screen ) + return old_screen + +def restoreScreen( old_screen ): + """Restore the original screen and return""" + screen = pygame.display.get_surface() + screen.blit(old_screen, (0,0)) + return old_screen diff --git a/olpcgames/svgsprite.py b/olpcgames/svgsprite.py new file mode 100644 index 0000000..ad247dd --- /dev/null +++ b/olpcgames/svgsprite.py @@ -0,0 +1,84 @@ +"""RSVG/Cairo-based rendering of SVG into Pygame Images""" +from pygame import sprite, Rect +from olpcgames import _cairoimage + +class SVGSprite( sprite.Sprite ): + """Sprite class which renders SVG source-code as a Pygame image + + Note: + + Currently this sprite class is a bit over-engineered, it gets in the way + if you want to, e.g. animate among a number of SVG drawings, as it + assumes that setSVG will always set a single SVG file for rendering. + """ + rect = image = None + resolution = None + def __init__( + self, svg=None, size=None, *args + ): + """Initialise the svg sprite + + svg -- svg source text (i.e. content of an svg file) + size -- optional, to constrain size, (width,height), leaving one + as None or 0 causes proportional scaling, leaving both + as None or 0 causes natural scaling (screen resolution) + args -- if present, groups to which to automatically add + """ + self.size = size + super( SVGSprite, self ).__init__( *args ) + if svg: + self.setSVG( svg ) + def setSVG( self, svg ): + """Set our SVG source""" + self.svg = svg + # XXX could delay this until actually asked to display... + if self.size: + width,height = self.size + else: + width,height = None,None + self.image = self._render( width,height ).convert_alpha() + rect = self.image.get_rect() + if self.rect: + rect.move( self.rect ) # should let something higher-level do that... + self.rect = rect + + def _render( self, width, height ): + """Render our SVG to a Pygame image""" + import rsvg + handle = rsvg.Handle( data = self.svg ) + originalSize = (width,height) + scale = 1.0 + hw,hh = handle.get_dimension_data()[:2] + if hw and hh: + if not width: + if not height: + width,height = hw,hh + else: + scale = float(height)/hh + width = hh/float(hw) * height + elif not height: + scale = float(width)/hw + height = hw/float(hh) * width + else: + # scale only, only rendering as large as it is... + if width/height > hw/hh: + # want it taller than it is... + width = hh/float(hw) * height + else: + height = hw/float(hh) * width + scale = float(height)/hh + + csrf, ctx = _cairoimage.newContext( int(width), int(height) ) + ctx.scale( scale, scale ) + handle.render_cairo( ctx ) + return _cairoimage.asImage( csrf ) + return None + def copy( self ): + """Create a copy of this sprite without reloading the svg image""" + result = self.__class__( + size = self.size + ) + result.image = self.image + result.rect = Rect(self.rect) + result.resolution = self.resolution + return result diff --git a/olpcgames/textsprite.py b/olpcgames/textsprite.py new file mode 100644 index 0000000..7663630 --- /dev/null +++ b/olpcgames/textsprite.py @@ -0,0 +1,40 @@ +"""Simple Sprite sub-class that renders via a PangoFont""" +from pygame import sprite +from olpcgames import pangofont + +class TextSprite( sprite.Sprite ): + """Sprite with a simple text renderer""" + image = rect = text = color = background = None + def __init__( self, text=None, family=None, size=None, bold=False, italic=False, color=None, background=None ): + super( TextSprite, self ).__init__( ) + self.font = pangofont.PangoFont( family=family, size=size, bold=bold, italic=italic ) + self.set_color( color ) + self.set_background( background ) + self.set_text( text ) + def set_text( self, text ): + """Set our text string and render to a graphic""" + self.text = text + self.render( ) + def set_color( self, color =None): + """Set our rendering colour (default white)""" + self.color = color or (255,255,255) + self.render() + def set_background( self, color=None ): + """Set our background color, default transparent""" + self.background = color + self.render() + def render( self ): + """Render our image and rect (or None,None) + + After a render you will need to move the rect member to the + correct location on the screen. + """ + if self.text: + self.image = self.font.render( self.text, color = self.color, background = self.background ) + currentRect = self.rect + self.rect = self.image.get_rect() + if currentRect: + self.rect.center = currentRect.center + else: + self.rect = None + self.image = None diff --git a/olpcgames/util.py b/olpcgames/util.py new file mode 100644 index 0000000..49a23b0 --- /dev/null +++ b/olpcgames/util.py @@ -0,0 +1,79 @@ +"""Abstraction layer for working outside the Sugar environment""" +import traceback, cStringIO +import logging +log = logging.getLogger( 'olpcgames.util' ) +import os +import os.path + +NON_SUGAR_ROOT = '~/.sugar/default/olpcgames' + +try: + from sugar.activity.activity import get_bundle_path as _get_bundle_path + def get_bundle_path( ): + """Retrieve bundle path from activity with fix for silly registration bug""" + path = _get_bundle_path() + if path.endswith( '.activity.activity' ): + log.warn( '''Found double .activity suffix in bundle path, truncating: %s''', path ) + path = path[:-9] + return path +except ImportError: + log.warn( '''Do not appear to be running under Sugar, stubbing-in get_bundle_path''' ) + def get_bundle_path(): + """Retrieve a substitute data-path for non OLPC systems""" + return os.getcwd() + + +def get_activity_root( ): + """Return the activity root for data storage operations + + If the activity is present, returns the activity's root, + otherwise returns NON_SUGAR_ROOT as the directory. + """ + import olpcgames + if olpcgames.ACTIVITY: + return olpcgames.ACTIVITY.get_activity_root() + else: + return os.path.expanduser( NON_SUGAR_ROOT ) + +def data_path(file_name): + """Return the full path to a file in the data sub-directory of the bundle""" + return os.path.join(get_bundle_path(), 'data', file_name) +def tmp_path(file_name): + """Return the full path to a file in the temporary directory""" + return os.path.join(get_activity_root(), 'tmp', file_name) + +def get_traceback(error): + """Get formatted traceback from current exception + + error -- Exception instance raised + + Attempts to produce a 10-level traceback as a string + that you can log off. Use like so: + + try: + doSomething() + except Exception, err: + log.error( + '''Failure during doSomething with X,Y,Z parameters: %s''', + util.get_traceback( err ), + ) + """ + if error is None: + error = [] + for (f,l,func,statement) in traceback.extract_stack()[:-2]: + if statement: + statement = ': %s'%( statement, ) + if func: + error.append( '%s.%s (%s)%s'%( f,func,l, statement)) + else: + error.append( '%s (%s)%s'%( f,l, statement)) + return "\n".join( error ) + else: + exception = str(error) + file = cStringIO.StringIO() + try: + traceback.print_exc( limit=10, file = file ) + exception = file.getvalue() + finally: + file.close() + return exception diff --git a/olpcgames/video.py b/olpcgames/video.py new file mode 100644 index 0000000..032aa13 --- /dev/null +++ b/olpcgames/video.py @@ -0,0 +1,178 @@ +"""Video widget for displaying a gstreamer pipe + +Note: currently this module is not all that elegant or useful, +we need a better recipe for using and working with Video +under OLPCGames. +""" +import logging +log = logging.getLogger( 'olpcgames.video' ) +#log.setLevel( logging.INFO ) +import os +import signal +import pygame +import weakref +import olpcgames +from olpcgames import _gtkmain + +import pygtk +pygtk.require('2.0') +import gtk +import gst + +class VideoWidget(gtk.DrawingArea): + """Widget to render GStreamer video over our Pygame Canvas + + The VideoWidget is a simple GTK window which is + held by the PygameCanvas, just as is the Pygame + window we normally use. As such this approach + *cannot* work without the GTK wrapper. + + It *should* be possible to use raw X11 operations + to create a child window of the Pygame/SDL window + and use that for the same purpose, but that would + require some pretty low-level ctypes hacking. + + Attributes of Note: + + rect -- Pygame rectangle which tells us where to + display ourselves, setting the rect changes the + position and size of the window. + """ + _imagesink = None + _renderedRect = None + def __init__(self, rect=None, force_aspect_ratio=True): + super(VideoWidget, self).__init__() + self.unset_flags(gtk.DOUBLE_BUFFERED) + if rect is None: + rect = pygame.Rect( (0,0), (160,120)) + self.rect = rect + self.force_aspect_ratio = force_aspect_ratio + self.set_size_request(rect.width,rect.height) + olpcgames.WIDGET.put( self, rect.left,rect.top) + self._renderedRect = rect + self.show() + + def set_rect( self, rect ): + """Set our rectangle (area of the screen)""" + log.debug( 'Set rectangle: %s', rect ) + self.set_size_request(rect.width,rect.height) + olpcgames.WIDGET.move( self, rect.left,rect.top) + self.rect = rect + + def do_expose_event(self, event): + """Handle exposure event (trigger redraw by gst)""" + if self._imagesink: + self._imagesink.expose() + return False + else: + return True + + def set_sink(self, sink): + """Set our window-sink for output""" + assert self.window.xid + self._imagesink = sink + self._imagesink.set_xwindow_id(self.window.xid) + self._imagesink.set_property('force-aspect-ratio', self.force_aspect_ratio) + +class PygameWidget( object ): + """Render "full-screen" video to the entire Pygame screen + + Not particularly useful unless this happens to be exactly what you need. + """ + def __init__( self ): + try: + window_id = pygame.display.get_wm_info()['window'] + except KeyError, err: # pygame-ctypes... + window_id = int(os.environ['SDL_WINDOWID']) + self.window_id = window_id + self._imagesink = None + #self._holder = _gtkmain.Holder() + def set_sink( self, sink ): + """Set up our gst sink""" + log.info( 'Setting sink: %s', sink ) + self._imagesink = sink + sink.set_xwindow_id( self.window_id ) + +#pipe_desc = 'v4l2src ! video/x-raw-yuv,width=160,height=120 ! ffmpegcolorspace ! xvimagesink' +class Player(object): + pipe_desc = 'v4l2src ! ffmpegcolorspace ! video/x-raw-yuv ! xvimagesink' + test_pipe_desc = 'videotestsrc ! ffmpegcolorspace ! video/x-raw-yuv ! xvimagesink' + _synchronized = False + def __init__(self, videowidget, pipe_desc=pipe_desc): + self._playing = False + self._videowidget = videowidget + + self._pipeline = gst.parse_launch(pipe_desc) + + bus = self._pipeline.get_bus() + bus.enable_sync_message_emission() + bus.add_signal_watch() + bus.connect('sync-message::element', self.on_sync_message) + bus.connect('message', self.on_message) + + def play(self): + log.info( 'Play' ) + if self._playing == False: + self._pipeline.set_state(gst.STATE_PLAYING) + self._playing = True + + def pause(self): + log.info( 'Pause' ) + if self._playing == True: + if self._synchronized: + log.debug( ' pause already sync\'d' ) + self._pipeline.set_state(gst.STATE_PAUSED) + self._playing = False + def stop( self ): + """Stop all playback""" + self._pipeline.set_state( gst.STATE_NULL ) + + def on_sync_message(self, bus, message): + log.info( 'Sync: %s', message ) + if message.structure is None: + return + if message.structure.get_name() == 'prepare-xwindow-id': + self._synchronized = True + self._videowidget.set_sink(message.src) + + def on_message(self, bus, message): + log.info( 'Message: %s', message ) + t = message.type + if t == gst.MESSAGE_ERROR: + err, debug = message.parse_error() + log.warn("Video error: (%s) %s" ,err, debug) + self._playing = False + +if __name__ == "__main__": + # Simple testing code... + logging.basicConfig() + log.setLevel( logging.DEBUG ) + from pygame import image,display, event + import pygame + def main(): + display.init() + maxX,maxY = display.list_modes()[0] + screen = display.set_mode( (maxX/3, maxY/3 ) ) + + display.flip() + + pgw = PygameWidget( ) + p = Player( pgw, pipe_desc=Player.test_pipe_desc ) + p.play() + + clock = pygame.time.Clock() + + running = True + while running: + clock.tick( 60 ) + for evt in [pygame.event.wait()] + pygame.event.get(): + if evt.type == pygame.KEYDOWN: + if p._playing: + p.pause() + else: + p.play() + elif evt.type == pygame.QUIT: + p.stop() + running = False + #display.flip() + main() diff --git a/recursos/comun/datos/creditos.txt b/recursos/comun/datos/creditos.txt new file mode 100644 index 0000000..6414f9a --- /dev/null +++ b/recursos/comun/datos/creditos.txt @@ -0,0 +1,9 @@ +Autor: Alan Aguiar +Por consultas, dudas, sugerencias: alanjas@hotmail.com + +Este programa es software libre y desarrollado por la comunidad +Por más información visitá http://ceibaljam.org + +Sonidos bajados de freesound.org: btn045.wav gentileza de junggle +Fuentes bajadas de urbanfonts.com: AllCaps.ttf gentileza de BobFrantic y +Share-Regular.ttf gentileza de Anónimo diff --git a/recursos/comun/fuentes/AllCaps.ttf b/recursos/comun/fuentes/AllCaps.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f73338fda161b2e5dc36fc6777928fc55a399c04 GIT binary patch literal 51996 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 literal 0 HcmV?d00001 diff --git a/recursos/comun/fuentes/Share-Regular.ttf b/recursos/comun/fuentes/Share-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dc9378fda791a1cb2835593acb1f2b4ab7fa263f GIT binary patch literal 112376 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�MHmO4H? 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 S$*;~&Z^3NLPgOE}^Zy&$!_`j! literal 0 HcmV?d00001 diff --git a/recursos/comun/imagenes/LICENSE b/recursos/comun/imagenes/LICENSE new file mode 100644 index 0000000..2c92af3 --- /dev/null +++ b/recursos/comun/imagenes/LICENSE @@ -0,0 +1,10 @@ + +Las imágenes en este directorio están licenciadas bajo una Licencia +Atribución-No Comercial-Compartir Obras Derivadas Igual 3.0 Unported +de Creative Commons. Para ver una copia de esta licencia, visite +http://creativecommons.org/licenses/by-nc-sa/3.0/ o envíenos una carta +a Creative Commons, 171 Second Street, Suite 300, San Francisco, +California, 94105, USA. + +Todas las imágenes fueron creadas por Gabriel Eirea, menos terron.png +que fue creada por Alejandro Rodríguez Juele. diff --git a/recursos/comun/imagenes/bicho.png b/recursos/comun/imagenes/bicho.png new file mode 100644 index 0000000000000000000000000000000000000000..4686238b355a161c9880c8d3ddef010df4c719e3 GIT binary patch literal 98793 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%0ARqk{jrtz#)ujQ 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 Xe?(Zc!Ce^8%#T_+CQetcHNO5AP^UBm literal 0 HcmV?d00001 diff --git a/recursos/comun/imagenes/terron.png b/recursos/comun/imagenes/terron.png new file mode 100644 index 0000000000000000000000000000000000000000..375a8aa31e179701ea3d2166ba1e42c67fe22383 GIT binary patch literal 11964 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 literal 0 HcmV?d00001 diff --git a/recursos/lamina/LICENSE b/recursos/lamina/LICENSE new file mode 100644 index 0000000..a32765c --- /dev/null +++ b/recursos/lamina/LICENSE @@ -0,0 +1,9 @@ + +Las imágenes en este directorio están licenciadas bajo una Licencia +Atribución-No Comercial-Compartir Obras Derivadas Igual 3.0 Unported +de Creative Commons. Para ver una copia de esta licencia, visite +http://creativecommons.org/licenses/by-nc-sa/3.0/ o envíenos una carta +a Creative Commons, 171 Second Street, Suite 300, San Francisco, +California, 94105, USA. + +Todas las imágenes fueron creadas por Alan Aguiar. diff --git a/recursos/lamina/lamina.png b/recursos/lamina/lamina.png new file mode 100644 index 0000000000000000000000000000000000000000..950f4683510c617011c3a8ad010c34cd8ce0718a GIT binary patch literal 109893 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�Xksq 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

2Fg{u-8*?y^~(RR)aGJ7Fg zT>`0L3&54{q|Q$r)+@E~jKRV`DW@nP^&2oHUvz~Y()U;u_%~$VXrW03Bo|_<86lRmkrYr0+zSc zCTGb=Gr@9Hy)OP*j#UQF=vyC+$uBYH+j!qW{^jIGNk(bur7msvl&jp_w9vA%Q`(y4 zVNKh|%d6vJb}_3qH}e>X<3A$hZ)10hiB<=(V0SkTUOpfeIv`{rB{?POJeUUVC-3~5 z?jcaroYmO57N~i-jv>;1q&KJr`%A^C@Ev-`DmzNLD%%Zlxm!?Vm{`$-8Htl65T!@u z!sPlGVu;&L`Z@!~k$^}yskN>j7zsEQ`)>TX0qAcM!Ai-`FZ<3$$R9-&bTWrZF-TnL1ZnohvaT*T583nf?I{8fp!Z^vFA5$12y0MDx6tQL$A!(hvrfO8wtX=_ zu|KEC#GN3?82F|8*JHqSU$f(#o2p+@uFHRX-MvBXt|tSUja2L)xpEDvZr=kQBFtS<3`DIW##3Y?wZN3 z9B$=M{(q882f{#pou?awYK)qU%&gCq)vrHnD{|G9ah^7HO`L!ovWrg&n!-!-#*MX# z=I?d~2Z}XD^b(N_u}s7N5p*z(d;ch@-T0;C8`c9M+_tr-I8Lgv3zvCXV$7OjH3}zI ze2>|Fv(QAz`{ley0~`!#6&25?rkP+afHYn5YSrv+@1k@k4*BTRRh@WKRnW^fGB& zC*~2?)=q56xk}&0Qq1Vv}P0R-`3@2@?U~!I{;}GzhXzmWbCjiT~Hd1 z1TFUhOj`_4YkHJqaXY{|r+PeuT5~Z2o_P`$uarw1W86D?>0GPgKQP)!Q&BQl3Ess1 z3>r~jaXb1kfl-cbhXE=wFL~Z`6fSZ8{II>CdfFcHx!pV=XBGFfPBMErvRJWt2mKXWsv zRv3t6S*4P8@pJVv&X=y{j!euy_o1|mBeKX4x^ne9n2H< zKf%bZY4I^TDt-Ebg5m;n$a=5a6M?AMF~Fu0R;Xb>_;{%E*=($-K=1hCGJW+7no#2b zXnFBNlfp*(pphrC`@Ld7W}(p~*LPVo(9CZ?Awr#>V&+lnC0c zS1;s%i45`ic_buiVr3*vja}X?#aw6*D+}X2(X<{fxV(7>@lf>>`M!2>AJNgd8532ePyM>QjLc# z^Tw#_hkX0S#1m#;t4?rZfy`{)xzEd3ezLaWmE#oF?(;KS`53w!|AOk__hYh38{ot5#}czJI|*f~w- z_t!puewOw)in-S+nfN=!*>;uiE$6GG@zQ36-G$v^GdGJ@rC5HSS}#&C;Am5y6@UbC z2=&WOpoQ5?t4e7Ce@N(jl!`1c&=bW59s+k>zHZMI{I0CtLXFcfCtqCiWYgm<8(Mqo zP%Ugk8X!E}Uj$=IscAHgvY#`>t&L;~7Uwi`b13?FipK~VfXvNjYYT_w@$!jYk!w{Q zb7teKY7Ts}@-(v~+j_j{BKKz1`d1p~Rxg0wzA@mbj@9wZTtTrm`^_5{kKaAd3o)^mPO=D8VaIDb;W3(l|Vc_e5`Rf18p=c!uIZfcUK!qNFCYvBxT zik1TAAGxAGtAfKTLUUFEXenz-qX86y2Knwn7nQK%VHf9v2<2?2;UO0x7POiUI^XDQ z53u|QD6%cC%|Z#tFUD`kUf;S^XJ6;wpF@HTCbAzgat<*1Ct^+&8PZ zObkSLd_8VAzQ1THW6rqRRpV)hgk?Mt>i+({Bc9**TXHz){iRL;x_KMv*i zAgy*QQPY}uUu}+dk6?+G=2AEvQt7IBESnH+Dnl^k!{ri@U#;BCTH-}Y;zeb?wY?PO z_95f{aRCNF%PZU0pY;OMSEMr5m30&w-984c<7#($?S>%iTJ!&PzzYLadEq!i^mU;| za4_l(>EEn220tlp*7%OwAhG=wja%9aX+3nm6@C4sQkJ~S^M-@BJ@HC>prgN8iKf(V zV~A~w@0!s-i*CPHlkT}SFa2v?i3faCajs73A)d0)80WzTiFkZ0Numkb+DOW@UZDPR zg%r*wB#xbZR|}P5HrLt<3OTFYQhi%}2D3C)>#&Sq%afjLceaV!&4)MU~_~2Xc88p^*ca@9a{miTw(A z^me*}fHHUr=NQFX%W{>5<~W?D2eO98tn3aw`ML5XVJRoqK9HZ9DGv?J4D&bxC` zd(yC~1G(r5fWRPILPPyrGbIEig%*SjnYV9c>!G(A{VLwYH99~ejD39xE2GKR(McHN z=LF8gR@P0GGwo8D^s84GmfJ{62PZDfMW4pik^t_@b5Nt`e4*y8EExVve8 z193`qX|S7QNJfsdd) ztok`Lq5r;c*N6&N2UFr7Y`qf$K8c{GHoe$t3rZMAyxeonozBWzTw3G@Iull3R0oHW z2&pJLk$hoh9t5#kzhg8yA>$yxSNQblNw$uHWiTGdN;cAZZ$lST3G~x)^j+oWi8Fp9 z-TPj@=fF&v{Y{f@N$jzQ9MOBg++-likHouO&?EP0FF3#;yLI>n!+nh#0n2t-2K?`Q zQPQP5Ptp{DHY8FLhd~MyC%EFHZxKPiY{gPEO9AIMLDP|qHsaieiwEGVYneH9V%(}r zm*2V|r&>U7p}!xe@s38tn|<{yUNf*BZLXv_9#6T7URwC^9* z!xuua(rc|HZNZ@NiBnbhmp24Vzva@z1Zj#NbBb}dY~4L(GhI(l`d^=iMPPm%oBibJ z3cHwinSM5Tq^w@$I3Q@NXEab(`gzeM%U`v)HpP$A2K$BSh39Q?60|aQ>-LB^Zw(bvqls@-TR-_}uq| z#u_>jbPCM(pmWhD7)zFN{m*^=El(TQfLWPBHr7x5T8CKVcP;SF3F&@=lX56bsDhyWASfm> zVxkkx1U>52b~W)A5i_m=-5*bYM(ldV5Q(Ti2xqmcR$DT2t>nA#lDtI<0o&60#)6ir z4)y6s>D-M4#`98-eZo<^7ob$%s&&?E)c_bR$S)P)O4Dll)0M0QMs#4a;NZ2JxHjO$ z99_tOw(R!pp2pSksU!GA;G>m=OqrEPw4ORUrzVnf0B}C*ShWuMwI)3(_9b>6?xe0dhfv?R|)fpNLSkfO4P>d z%1Xb!%}c1b`t${2rUS6tJ89Rl8bs&Q=%jFAy&jnN#hI|L8n^2n!!Kuc&K*5}FM#0N@Y@hZtX(Ov>e7VMVFkt@W12$n}T&cS^&XP~Bz>&|95B1fL0%<7aW7 z#e_U@yV^fDdUJL4t1McIbSbHiaYquy-^`62UH{QmAQyxnLOh7 zprnEgfsEs6 z%|Q5!8jEm28Ed^~eo2YMWNv6^fzk5MkCT&V)S|(G5kv?C`^77EZp~(%kkbYXt!_x) zdO*pT|BWJ)=apn#g3P zShD%{o1XQmFM^!Mij1*{Z*HCSM_-WSwD(A z_&1;iE^t6QZh%S=EhuEc=wPVaIb-`RtNQfZ2lV!>vOOHq*9ec#UUzxVK@mq5?;r(a zWa=R-^WndMZ9kWqCydNRy~_1wc_Eo$RC{*70|U!OnuWSb_; zn^~&}LzkguDbRM$R%@5-F#+hPhA(P+%#x*MBNsH4WjcuXV5sV7xR$P4+exck<9MpY zIS?bW;N7ZUl^P6nXgc_tErCxl-)zrJd;C?4`^Qyi?!xLjJ;(vj3vo@Ars1%o{}@9F zt)b<6LrGlE^~od#Y|F8&-2d@In?v?XkSIF;Qu5RXiz~1(o5szTh3)Vcz`ojS3A9~W zD2e}5%FzohEbiNpuDx!h;WVnyAy4Kln00X9^psxB^zp&S${W0L=^uildbmrkm`dkk zYT>ED`AN~34UzN7Z0@s78D0p_+s!~F=!?Te(xgFbHv{cD-eFlmZg#b>bxbGEWaZNs zU=9a=(O=Sdq?_L8kC!Glr&~Q{FX}5VD5^@m=w1ts>|QLa0^tux9T1XXJj#r-SEY;FzGypC>9J}G?^?A6+0?3zNmAW!;v)%klK(%qAC2yj*&iv4LZeoqFc~|GT6;LqN z;zi?6Et+jQ7%C%Z^isg|y2*aJX$1_yio!m9`@yY!`M@|LO?%;^?&*U6f`IE|{k0OC z9VfAh+bS4PmYv9HOrp6z6ReW?&D~m;*tx-yq6tho??ZarExbwP1UX5?LssJBY=k&> z{5d#7yAJvWI>Sk_;Eyyd7Z-$}U~F@zf#DSMmxQ5uA|9MsCGro7re6ml6)pe?q!2pK1ik`oN{1o z2*bm?G*|UDZ5o%|)7>(%yRMZ$#xg(sExEit+gnMjr}&R&DMi1BE&81d*S9Xti-5oX zw^kq66}W(V`=0hQNUx*70EJ_p4)k*Xb4tni%pQk%a_OtRB}pO`Hb*vex1O z03R6av>FgztrcUh-AZNK?R?v%s~)y+b9d83>uc{;Fq*%*S2!Bi<6P6bKrkFp%FIgH z=4t<_H3%x=g-MjY80G$8bi&TW=Uw6BXzh-&Fb8FqLZ$u#RE%z`nkjBps~`CM!)lb2 z|A2RtQ8OVy)VV4S2J~##SK5kKD+8&Hr?!dMoWO)4e4x8svaqxktBXKdfPArq^YQ{V zJDloyYjUEy)BjyF@9kWJyN%ZI3~+>hBdL2LQpuXWhN1S?S3*r8X+q@%mHw-TDlwut-R%eaINTaSvY&$T4H#*OFC?Zpx>pQMx{OjftQUhDaE zXU=y+v>6Dn5!btiIY>cw86tYqYSqpe^hZ_eZVIuz19&a$0xl~n3j&{tAC&H!Ov!s_ zf0vtn$)_O~^*}v+ichgl@sIZS2?*s!?*95ogDcw4`uC4=a+CYJYO#?R7(Wh8v>y); z{Bc_i#*Oy#(WzaF_g|t&gOU4987w?{Ht14r=nL{SYqtnDD+B*u%#B$B|FW#f{!&40 zWaAkJa8Hk$h>FZYpVw>uVm_6U`QCdn z?($c@dln`x9>QihH1bnl4E@LD;jBH+E`RPApxbww*|eTf8DCb@@KRGnaMGQUjyg$A zc7#;HXBu@;e8Op1OgD6=FBt*)A?wM1ysZp2f+pkT5fJDq z(`T<~(scZw6#-j#%lCBj=hz36H!4rFJYw1-= z`*t?aGnu?%QdI)A7frQyhYRwp;bg3mk7nxX-TQ3byRkbl{4YZ79PqOx%#wf;yK?#mGYjOMvG@^dyKZE}! zXHwxy7-}-E+=sb<>Q%;5JPMZu{lYynu9hL%NQ-}*1o3yNUTb&WFEq}_d)tOj zFGfH9xfLoY_GQ(I^f7Vk(#qsHwaEjUTiX64_ z!mnrr9aa^0c}l+;7ChyPZHIKqQ*j0bL+^_^E~$RICVUED8}S_e7K!^ojVmt~mT0#l zW$-0@dQMeCnP=qBzY^2ikTltNiAmvo*@oGxo&pF62CrO;n>Ae0;b3*4bXi+#oV|v3 zKYs&m5Z6w#@pe}Ky>Z%WZHhlE#hF3kdFgn5=49_IF*mSLR@%@|nN^&XBd+1}coi#L zB)zfy)dmBL^|DD~Z6Mp1p&K6J`y!uen2ijh1{i~tAU|=vl8dO*A zFbx7*I$qDM$w_%`XAc1az~ViUt}^XHU$?Jl^Om23p?AEeYx>XM>8{0T)Fho%45{Cj zX(N4qIOK3|hnv^UO>0!e_>Z~c{j`9oeR626o5RlF5g={ya@D;!M}3ac)j7CDp){Q5 zL9}iaL2y|J2FPDTBs9bA+yNjZV0>u4M5pBKQF9hQ{wT{3{5a{EES2{r z^y?{(rt#V!R7YK?(2Jve;n${Aes$yE%#iv74X>rl%F`-qZgQWyo`SpwatPYJ_{^nd z=~f+$Nwr?^hMH4z`HlWG2yULa`RpBpgWx^U6TKH8wL>o7mcvjMo!H3z$2!-=W0m-C z6vAN9XUv$?{x3z7a(~QKBgpH>`OvP8;6xvUpzcG{jeaX>%lyI+u@ea6^f@iS664EjKG$)+1 zRj9gke+;8f+_Z1Nh62}=Dr-HS=r8gFS2*>#V_a+;>-bRAQAh}M9cRetrp!JfN6FAw zk8G^s9T@T#(MfSjT5i15B{5(4L!V> ziyg8i9D-TWOfrXBGpFXz7^RK<%GyzeX&b31NP1a(z3gs#yP(wqt~94v=s&#E{8$b9 z?YiVcJ(!S+Sn#=#aqP;n4HfDV=qgZ_dnep#c{@3#S#o{&dz9na0`bk-@u~LvhxrE0 zO9(7AY^;Rtg?D-J*^1{Of4wd1?W@R?n$xj_-A?O!_6WJ?2)ICQ#`6uS&cPE*)9>6f zhH@|TJ|)w58OlX`Q#v3H2tiq@k4#Z_m13&E(a)%lGPpNLg7TOCQdPv38~S=5`8bZ78VIhQQtzf`Eo*aH2Zmki!^F0SU8ziPy!l#gY?S2 zwTcXVtuQNVs;mUvJJaqp{E1*u&d2MrgO-~B3(GpI#p?5(!8zagYKv=!L70aNY`|u2 zxtROa1R0ZX?!AyZigv-{e0Q-(KKkQ*oRVVgL%sWnt&KSndAHgN6w4qDoCpr+R3Ern z3LQ=5k}#4j^n-j;$J5Om93|4o9612@Z?lRPOy#H$6xt29YvqV0z6Bl zcNZ!)%P5rP5o+v$JOyGVYv7uE8fHuQgw;j)ES-F-u?J&!Rp#vMh72*VR4@heFClwT zs~_&FPlI!fOaPUz7|#_WBrrDlAScHWQX8~G^|XIC)NCug@q`+RpBS9Ptjn@J6|+L! zt>d}YDS@lwRk(Z(rtapt7IlQCIr8`Vk~wZnh%enPB0}hBb(iCzBzgPGvd?Xvhj4Eb zEct>taU-EfR(toXTQA7jB9O( zsnH`1{kz5?e%Qqo=w(bn;B8;2^?S2 z*!RLK5~g?7N1sW;+isY~jii&CspRb-W^m6z`pJ%U1;{sxeTFGI zOIO8-3QN-L`kjOR9C#hd<_)0q-M@2g`^VX_RTOZ)QAWIAVaY3^>Z6do)!9M{e5 z=CqGifMa9t;WRvb{P_yfaU+%H)b_}<@31D(7j5m=kICNaNAltycvpt6Wg6ri$6#Z028#Fw>d7$60#H%2XlT(oo6(P!hs79pj6Tr!oz_r_`L9a zUSF0EYzR%~%)je6`gsuPsKG;A)EsK2_ANQ&;$3lBY3RR=Dd}kBd^1#5yv1RToS{fo zRyO3F@bN7>^I4-oAI^k?&cm-pSktCB*HCk}p+vOL(Pr~NL;yhd1;jFNhbk&}>rL}f zqonb~HcwTS(_v1**ajzN*~3ow6WivLF-_CoLpgf_h;K676SEZl zK4f#9S$rY%OZsbbfuyR-BUDkoMYKV`tV~Q#OwOH#NfI|sZi4)MbJRb!8j|zfae@A# zbuRf?EXTX?ehLZ!b$5%4@;5y?%i+TxRW#oYwb7Q`^`fqEi*%FKK5h@;1p_vo#9d#< z{cjW-!Fiv+WBOC_Se~StgE`yul#}4I;tTw(c0^V}{%ZtS6gC3kd86JOfYRJlZuX90 zKJRb;>dlnIxM zDzd+eUUykmp-+jaL+(E{80-ea+EFVU|7{bre$LXJpCX*#2luzZfz2txw|`}lEWM;y z(ne_8%57%4GfGM0=Ci#O=N#ooWXMWB)>!M_SDsU{FKyZF56!ok;#rgZ9~VGKUi>n` zl0GO2vVb_AnNo3FD)jK$j7`@Dv)+ClL-STN9RKmNa%cT!kV~djkOd2I(AaPtf}0wi zZ$Dh07(FZ~YI-A?Yg!Y`*`S*KpLMBAhR+2^*~qQ;%XZ4MJLZ<3aJ~C#$={ZD zC{)!0X{|q;4=n04Q<2;^{p$*b9e-810uJvwFmoqGTJyvbT!pVx zyUG88Z!CQ^O>t(VkTq#)GN`Pn8Icu74`l>C+ey@#R#%yub1<%c)p6qeUvcSVd`!9D z-~lgYB13;^o2#zEHGw#)7%~VN6}}Jm8;CPurZ2(PwF*a zG3qWbV~{*m(g`$VG>D|@o>=|wloUrN6n#B1H z4prLx4?lG+Aq8nY@J5vx|Q5;$Ze~m1S0-4n`bS+7ut(m;4kY&DmaxdbQ!x z^OJS59-$$lCc)nbrWn7v_tK7)%d%T!KBIv{Gzhpl^o7@&tl}?vQOvH>=a)5CaUl=) zWjrBt%9=9bGu8`?v^F1kYS|h_5JV?Ny%c3rlhnN6YWktg&NW#ZVo0E1!Wsh0;VkgUZm+NKNT1uq*sQ-?>X zymj1308wLFhgI>B^25~vP-&a%45kLc8w`Jx1mJo1$=i=N`L8vSnwDz?*WOIH`w!LS7Jk`x^X_3dYEufC7e8}kk>x%$9e|SkKSB{09 zu#6Xu3{esY{?*lwj8b{``&KWB&3zm(&WK9F^A?|536l#W};`5QTJDCY*Y zvWF}+6DKR}wfl14TBDN6`e|EmRwphM59?W6Aus9V#*rNjzY#>6onz!+kAxF=`Vek#TiW-}%3!P>g$p&pR*`*`L5vX7j)Dhe1?dMv4 z@`Ruy@Ow+@)da$UzZUVZb$fGpSYf}G*dgEA=WAJU6<>t)Say}S8MeYae{oQ9mDjy7 zWHcET7A}-nh%o|LW^tr4m6!&OSBrN;D?;lT9n$kv&)saqi>Rb%o=l6D?L-dI(dcR{DSe~sFLiaVf@1^tbaJ{Y*BviFz^h?C+yAzpc zubS12v2-Mx-B(+7cOGv?)#jm#zfq~7W`jX*)LMd9uS2#rwwYCcEV^LU_tmBs8-xAFiTabmu4X52i zxbQ>JA-A=5rIGOi<6(Gz+FAZq@Wdv`=xAACSsT^hbK5oGS69_Z04Hfsik40{rv7*C z-$+3#x%KdJB|Ab#(=@5d-0x%2-_bLFzNdP48}OJp##75QqxR8bU}Vd5J|iW?N*}-B zzH#ef_v7(m>YAe9VzqJqHE#5aKAA|*KqV>j1z=4u&03m5mj*z6;UZch)=FLj^w_Lp zV-s?Un*AU?xRFeu?+>LNKnhuaf8Iyou(q9raGAzQ!eHbaG?&BjFs<8t&Hwh$W8iDW z75(HOu8EF1OuTCG7xqM#lB1Y&>^ECw$*naX(-S8Zu*Y*=oGh3R?Nmr^54Wl|C z8reBS=f4&6-wQ^6gznKKpth$s%Y5&ZY}yXE544!bDcB8;9`1u%uMGBk0(Cb@9z?|X z$OHuEO?{bkcJ=)Ng&J4r#S(V6!)rxjWR)hK6*0hbo<{_dlQmMl2hd{{HiU{JN%ToP>8u+Faw!5v6;Qzxq!)@{HrX z-Rq`MgP7)9v2a%M0jm}}RAwHGa8+^rY!RA(n}jq&%-rBJuO7+Nz+#MyqS>R^YAOC{cVyFjAsyHe z8J|er_;4fjw2y%<@rgV*iFQ1A$EGC@@n`eD_xn#k<>Wl<*9)$m!RI~2OBCu1;!@$F zejjeRkJnGu-*%4!VU|7G-#p&6!(^o|yFFbLefY3!-WsAFu5OV7*=JN7;1h{zDLhs# zbNK9G6e^9iHOqasm;!f6hsTnEfYgPwJT@A)%}cKjH}flRzF1M5kc5HjPZEjrlzJxf zhYky>n~h%L7qZ813&Xvt_mYc{QY-ux?utDD{LcI>DH|5hf?(b*j{kN0zma$JvM0Lz z_%O%TTwXRBs@qR7IBxFDx0|yIU<BhLxMnEP3 zyI#i&y>FmYVIhDF5~XTc0{09JplaF?KVfW8T?Cv?N(SmgnWa$WV$la4pg-vC>A`t^ zkK*~P_!R`vDP*RpAQ zG3Of3XE(nUq&&z(p<3!WfMX_3~dEZ+0D)Ulgm z;z6m{F2{lD|DftJg=5@z*(}a&6u3jqhI;hq>1QM=yxF(;(6pcDgE{=Ps)>A$&8@!L zYj|h4Err`ZBu|KMB~kO;PHctELbU6a{Oxvr;oqc7?<;@H*&0h)p&FWv!hQ?ki0!{n z)8ed(PF7nB9xUu4fB6r2;^wM z2T#cbH~tz7U1fi6r>BrJol|Lp3LD?%`&6`v0t+GYtR-0&+A_!fz4hfj@Kqd@!|%Wk zw%~3)?@PSg?9S>3{cwL&KT1N_1_0G7rS6EP{nhbtEJS7CAuI1klYuhA#O|99I`zD= z@x1o*p(j8rxgD1Y6R4B7NYlSzvHK<1Y-zi2lF*}O`-?iOTPl<_iYludtjke*K{8SV z-a4Zp7}QI6*VLE#{=W?rbBv>rvdyHCkKvor zj!OITC*|-CB({D&Z>A0ZPq#_26B=Sp?VGb*MOrXHf=`{vet0xFw4RU{p)d|Y(-*e*=3FN-J=Z?A8R5`dcM-J9a+7TYwg5O-y% zJ2gsqk4;Q>hab$J->?uQ3uVkhWVeiR2viu5^g7yDz=y_}WF11N6Nu zD{@p0(@61WLvwOl=JVL(vm>f^E8BvDjpzGA-gW=5;onq7#mPxmw_)wwiAw(kMk2~5 z>o|^z0&w&iLH2>rm@3CU1P#wYcTiK^*KR;Sx9hq@xi+s3Ki>ksey;U3zZ;DG40|2!cqF4$`CsY0^Qe^xma>;r+gQXMQtx z?%cob{v-QL&YHE>IcM*Ep7pGio!*k!D1#JB=@9J~W zd48qMVeN#sO0C;zEKKrpTVgCpm%3xz(=n9yWj$2kuX;h0(FlDjw#^@{7tVBPraS_| zcJ*=o=5uJ0s5zUAX13;)7J>82=bCRO-b*s|adFYwuXv>3M|{L_7MI1q!@~-B4n2q< zpcweX;z8ru>)lb-=h!CO?mohjl>39)r8o80=fArN%D#0zHeD+{fBD_*6EX-@zQa<- z=b;Px#>n_2pK;?E^dI2O%S%MHxUlM$2({3-5vp&cx$XIuzeGMObumqDpm5EdbKM0R zl#@j-tbD=$*|3(cWtumUCk;(a!Frx~@o`l;F0`GU?aV7aVtjHo za#B}XxA8Swa8tZ_ONgz^?<#(^pWono^;m*2>aN3|z&?G8u1w@~gMI$M(`ClSd%gbX z@%K&}f;Ogkp%6rV%~QofU@pn4{%>>^dym4zJUXxjz9F9AykBgp?C1wh9>g+zgjXe| zqRVP}VPogA_%d*Pz18iau_t8!sfWwQdn{cT8%nJv%r#-8{#;erKPfw2xqbVG9qaLq z@Q^W0aLfKIHqLL9TgpPO(sT0jf{`A&h=$ess`q0ww!fD!F=4xw*d`VQQBH`lE`i}ZH7>>8a9~jShTO);ViOyXesk8Z zdiFm0qZ(Qvc7O0e%2a09jDGd{LQBHoy_jD2qeJHY#^(-d+mC)+&d*2QR5Iq|cVT8a z*^d#0b@;6Ru) zW{L+@Zw6#E>jTOH2Bwtu9jfqS0gW zDEawCt$AGG_xo-K(Ob+KjBX~Tt)1Vy+7(fvm!3#PQ&m)mWJmTKVdVv&IOHvaFiD!i z*1uFcRM`*%ooE~xjN@Hj-26N3)8M&9&Y7g`b9ld`-%$Cy<;q2H-SWluQG4WTexr(n zFkhejl`RZm-CK=J5RLAU9U*3yPDJCO0}4ZmN$f@l)7*By z!s#*ZHj&C$;X;eoDFnKK8fJaJv$#4$)H7;ALCZF~gyd{06+LiH;Fn6c^e$wyjXl}_) z8@%G*h0lVk1j6T7_05BUql?>v1jYsTOYj~qDqFY^*)_})QBF&Jn`HJT_8RvI8waR| zrX5VZ)U!*;K;vZ{g)Ft{-h|L@RXQEUu0ajQzo!w(@~tD1>?IU;Prh>5goRDN%fjKd z4xcvB)lqZffP|$#L|c{)92_P9=A1juX6mDSp_H_6$0^dz72K9VBU`6@m4a^N6GYlS z%lacjZI8|jtbdB*L=f30@SJSPq)la%MThyGI5e7`Mx`qH>^=A13XU%N#qy=fqRjmq zQ|fp6$Errbc_^B3MPevEV(l-hJBqMA{5d)uA1U>*>q`x@+z;?OlS#=b{`=bO=i>9c zmEN{1wYs#78-=1_<;gg=bQnj@{;cj#4-%llbar`_hR@Q^ziyVAS$wjIh0hs_I(ws2htAxA3=Z ziPu_e4}*6%+%QMy{duEs7v`U4KmM??o_=rDJe?4K6*Hg}E|pK2A5pgNm?i}B5$TZ+ zTn1g0KGgGgDr*@xLZzBQIYEM&zf={OUC?jLmUHHmAH)JuhEf+L<9%OaGyzM6?tilg znTocT86?Y&3wxfdJw=_fh}mARBgSLthkDAd^gK(;o*v%y(j3ViG&J_ss9&6B7LE*y zAfvVQSW3Z0KIyhj9vS{1uWU#bG9{h6zVj$|eB{%g{EGFT@s`FiK`;h-IPhx^R%DVS zO!BE{Ft+l&uaPrY3SnCOkO!nRNR)ymOUnk^q_x*PYJh`!#+N}N9t<=}d?OEIoq47KwC-EYNw!*@5#;iv9xK`Rdbe%*du>VsUKsC*GFM#D0;ckJfO8s}zL zbYN!lqL?s&*H%fl>l-@cl8HpAd?h2o9;~kmS_pw~mH{FO5`}K2V^%OJaLkX2$H%fe z?**(fKC+RBG2TQ{W=Oo3mi{2h^*u5Vs?bhSd{j0 zrq{gIbK9P*^_rd0nfA2o!CkCh)g3j|*o>C2=L{sjoAJ~fy{uuzMf}L!5MqO{d^+7b zy@_Dq-c|Ed9r|F)(`~L3RzBU?lChaqi(kic`a%?(gJAUX8nHE0a&Z(BAdm;)*7Zh2 zn%qw?!sF#8Ayztj{=g<_Qr?riBS>jc0(L#kx9Ou{2iS)Io!b_Ni>G9DYXZ+M*Ph;t z6x+D$Z(@9MYP*{ds33BQ=Wpe=6gG=5bi|dKZC(CubOXatgXnA-7()e5*s_9ZaC+V_(`2er--MMlC?i-6&2voo zc6?~Osj236cjc$N-vjlzsQ%5`%gWTH$*0C=owH0fxV(>UOwjt)-*c5ox6j)bG?L%n z(H*}5xg6gMlL#kmy1$ep4r~%A<5TFaD}&6x!=T5t(mds!on|0Mg;Y|Bk;ECv5dGfp z7j9!*@U+@ia#5>iz=cHW8>$;$A(Ue&lBJz-JX_r}@NojGuYBj+b-1#WU(_J8$=!Rs zYVczw@*0C&&u7wOX-LdOxste6Idc5wx;dPSBUuud>j~qNf|}ebq)Esr_xJpQi57$$ z_3|EBU$eO+Z&fWWluCHk=#e3gV4W#4JeIS&!>9M(3<8&Z%<6#EK{Vsc(T8c&GEv}=L4T*&hyq4MKsZr*EDm@uCa|hw=Qayhp-SBft z_*zmVnyfQBG%`UuD?M{uzI3lsgI+^i>*1YPdk_1P3V}2J8<{FKo1M38y4q#I1QumE zp*%_slV`ZfH#!+Ni_NPs0HOQ3+$=pf(?T+>c?ul#vi=V&11&Xwe_?UGM$3b= z1FFNnObawOE?%4t7WWaU^qv3%5E;w0xLM<;Vva|Rs`rdBHLI1WQYB3`zwN=hz7pLL zKiqszyE=3%4r)$~Z19|_=kxbWOv!0ltxhC`c|NS)=G@IqRsp%0Du>X9*Zc;gQ}h2? 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� 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 T{W9PK7Z7t(tVyA