pax_global_header00006660000000000000000000000064130432113520014504gustar00rootroot0000000000000052 comment=76457f32a157202ecd957f645222badea0600c20 qosmic-1.6.0/000077500000000000000000000000001304321135200130035ustar00rootroot00000000000000qosmic-1.6.0/COPYING000066400000000000000000001045131304321135200140420ustar00rootroot00000000000000 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 . qosmic-1.6.0/README000066400000000000000000000345541304321135200136760ustar00rootroot00000000000000================================================================================ Qosmic - A cosmic recursive flame fractal editor. This software is licensed under the GPL. You should have access to the source code; see http://www.fsf.org/licenses/gpl.html. This is free software to edit and render flam3 fractals as described on http://flam3.com. The software links with and uses the flam3 libraries described there. This software can be used to create content for the electricsheep screensaver as described on http://electricsheep.org. ================================================================================ Building Before building you will need to install the prerequisite libraries. Version 1.6.0 of the application is compatible with Qt 5.5, flam3 3.1.1, and Lua 5.2.4. Versions of flam3 < 3.1.1 are not compatible with this version of the application. Version 1.6.0 of Qosmic was developed and tested using: Qt-5.5.1 (http://www.qt.io/) Lua-5.2.4 (http://www.lua.org/) flam3-3.1.1 (http://flam3.com/) libxml2-2.9.3 (http://www.xmlsoft.org/) libpng-1.6.19 (http://www.libpng.org/) libjpeg-turbo-1.4.2 (http://libjpeg-turbo.virtualgl.org/) 1. Install prerequisite libraries listed above. 2. Download and unpack the source archive, and cd into the source directory. 3. Edit qosmic.pro to select qmake options appropriate for your system. 4. Run qmake 5. Run make 6. Run ./qosmic when the build finishes. ================================================================================ Using the Editor The interface is heavily mouse driven relying on either a click and drag motion or the mouse wheel for many controls. If you've used Apophysis, then some things about the editor should seem familiar. The main components consist of the triangle editor, the dock widgets, and the viewers. The triangle editor allows you to select and manipulate an xform element within a genome. The dock widgets contain controls elements that will adjust some property of the current genome or the currently selected triangle. The viewers display the current flam3 image. Viewers: There are three different windows that display flam3 images. The preview widget is updated with a new image every time a setting is changed. It's generally smaller than the main viewer. This widget also has control elements bound to the mouse wheel and buttons. You may drag the preview image using the left mouse button to set the camera view. The scale can be set using the mouse wheel or by holding control with a click and drag motion. The right mouse button displays a popup menu where the preview image quality can be selected. The quality settings displayed in the popup menu can be changed using the viewer presets widget. The viewer presets widget can be accessed by clicking the wrench icon button in the image settings widget. The main viewer displays the same image as the preview widget, but it's updated less frequently, and it's usually larger with higher image quality settings showing more detail. Updating of the main viewer can be disabled by closing it. The image quality for the main viewer can be set by using the mouse button bound to the popup menu here as well. The third viewer is the one displayed when using the directory browser to view flam3 image (png) files by right clicking on the file. This only works when browsing directories using the 'Short View' mode. If you right click on a flam3 file, the directory browser will try to load a png image having the same name as the flam3 file. The key bindings for this viewer are the same as for the main viewer. Selection: There is a selection box in the triangle editor. By clicking in the editor with the control key held and dragging the mouse you can select a subset of triangles. When the selection is active all transformations are performed on the selection and its triangles. Hold the control key and single click in the editor without moving the mouse to disable the selection. Holding the control+shifts keys while selecting triangles or nodes will add them to the selection. Undo/Redo: There is a fifty level undo feature, and each genome has its own set of undo states. The current state can be added to the list of undo states by either clicking undo, or by pressing the control+spacebar keys. When a flam3 file is loaded the list undo states is cleared, and a new state is automatically added. The figure editor and most of the widgets will also add states to the undo ring when you use them with the mouse. In general, if you can change something by clicking and dragging it, then it can be undone. The undo state is typically added when the mouse button is released. Changes using the mouse wheel aren't always saved on the undo stack. An undo state is added at the current undo position, and higher positions are removed. This means that if you click undo and hit control+spacebar, then you will no longer be able to redo to where you were. There will be two versions of the current state available, and you are seeing the most recent state. Here are some more hints: - Use lower quality settings until you get the image you want, then render your final image using higher quality settings if necessary. - Use viewer presets to quickly switch between different image quality settings. - Use scale and quality instead of zoom to gain more control over image quality and rendering times. Zoom changes both of these values at the same time. The flam3 developers suggest leaving zoom at zero since the electricsheep server will convert any sheep submitted to have a zoom of zero. - The mouse wheel can be used to modify the real editable values in the spin box control elements and also in the variations table. Holding shift scales by 1/10, and holding control scales by 10. The '[' and ']' keys will multiply and divide the default increment value by 10. These values can also be changed using the mouse to clicking on the spinbox arrows and moving the mouse up and down. - When focused on a spinbox, pressing Control+ will increase the number of decimal places shown, and Control- will decrease the number to at least one. - When focused on a spinbox, pressing return will update the preview using the current values. - The '\' key will globally disable automatic preview and viewer image updating when changing a spinbox value using the mouse wheel. - The maximum size of the preview image when docked can be set by sizing the preview when it is not docked. - Use the genome selector to view the current set of flam3 images and to select the current genome. There is always at least one genome in the set, and you can add a genome by importing it. - If a png file having the same base name as a flam3 file exists in the same directory as the flam3 file, the directory browser will generate an icon preview image and store it in the $HOME/.qosmic/icons cache. The icons directory cache is needed since scaling many image files can take a while. - When using the directory browser for the first time to view a directory containing flam3 files, the browser tries to find and generate icon sized preview images for each file. This may take a while if you have many flam3 files with corresponding images. - When the directory browser is in 'Short View' mode, using the right mouse button in the directory browser displays the image for a flam3 file if one exists. The middle mouse button toggles hidden files. Double clicking a file with the left mouse button loads the selected flam3 file, and holding the control key will append the genomes in selected flam3 file to the current set. Holding the control key while using the mouse wheel will change the size of any flam3 file icons displayed. - Add, duplicate, and remove triangles using the menu shown by holding the right mouse button in the editor. You can select a triangle by positioning the pointer over it when activating the menu. - The mouse wheel will rotate a triangle in the editor. Holding shift will rotate it less. - The mouse wheel with the control held will scale a triangle. Holding shift will scale less. - Using the mouse wheel while over the basis triangle will scale the editor view. Holding shift will scale less. - Hold the shift key and use the left mouse button to place the rotate/scale axes marker. The marker can be enabled in the by selecting 'mark' in the axis selection menu located below the triangle editor. - Closing the main preview, viewer, genome selector, and mutations windows will prevent their previews from updating. - The left mouse button in the mutations window selects the 'A' genome shown in the top left box. The right mouse button in the mutations window selects the 'B' genome shown in the top right box. - The middle mouse button in the mutations window copies the genome to the currently selected genomes list item. - There is drag and drop enabled for a few of the widgets. You can drag and drop items between the mutations widget and the genome selector. You can drag files from the directory browser into the genome selector. You can also drag items into the main viewer from the mutations and the genome selector widgets. - GIMP gradient files (.ggr) and CPT gradient files (.cpt) can be loaded in the palette widget. Select a directory containing your gradient files using the tool button in the browse tab. Then select a gradient from the gradients scroll list. - You can set the genome displayed at start-up by using the autosave feature. The autosave can be configured by clicking the wrench icon on the select genome widget. When enabled, this feature will save the current set of genomes to a file called '$HOME/.qosmic/autosave.flam3'. The autosave file can be updated when quitting the application or whenever an undo state is created. - Use the selection to simultaneously move, copy, and edit multiple triangles. - The density widget can be used to merge two different genomes in the current genome set. Use the star button in the density widget to apply the density settings of the second genome. Triangles is the second genome having a density of zero are not included when density settings are applied. ================================================================================ Keys The main window and its dock widgets have the following bindings F1 - Select the previous triangle F2 - Select the next triangle F3, Ctrl+Z, Ctrl+; - Undo F4, Shift+Ctrl+Z, Shift+Ctrl+; - Redo ;, Z - Scale the triangle editor scene in Shift+;, Shift+Z - Scale the triangle editor scene out Ctrl+Space - Push the current state onto the undo stack Ctrl+A - Autoscale the figure editor Ctrl+K - Stop rendering Ctrl+R - Create a random genome Ctrl+N - Create a new default flame Ctrl+O - Open a flam3 file Ctrl+S - Save the current flame to a flam3 file Ctrl+I - Save an image of the current flame Ctrl+P - Quicksave the current flame and an image Ctrl+Q - Quit Alt+1 - Select triangle 1 Alt+2 - Select triangle 2 Alt+3 - Select triangle 3 Alt+4 - Select triangle 4 Alt+5 - Select triangle 5 Alt+6 - Select triangle 6 Alt+7 - Select triangle 7 Alt+8 - Select triangle 8 Alt+9 - Select triangle 9 The following keys are bound when focused on a spinbox [ - Increase the key, wheel, or drag multiplier by ten ] - Decrease the key, wheel, or drag multiplier by ten Ctrl+Shift+= - Increase the number of decimal places by one Ctrl+- - Decrease the number of decimal places by one Up - Increase the value by the current multiplier Down - Decrease the value by the current multiplier Return - Update the preview The following keys are bound when focused on a variation value editor [ - Increase the key or drag multiplier by ten ] - Decrease the key or drag multiplier by ten Ctrl+Shift+= - Increase the number of decimal places by one Ctrl+- - Decrease the number of decimal places by one Alt+Up - Increase the value by the current multiplier Ctrl+Up - Increase the value by the current multiplier*10 Shift+Up - Increase the value by the current multiplier/10 Alt+Down - Decrease the value by the current multiplier Ctrl+Down - Decrease the value by the current multiplier*10 Shift+Down - Decrease the value by the current multiplier/10 Up - Move up Down - Move down Right - Move right or expand tree Left - Move left or collapse tree Space - Edit the variation value Delete - Set the value to zero Backspace - Set the value to zero Return - Update the preview When the triangle editor is focused the following keys are bound Ctrl+LeftMouseButton+Drag - Enable the selection Ctrl+LeftMouseButton+NoDrag - Disable the selection LeftMouseButton(on empty space)+Drag - Scroll the editor scene MiddleMouseButton+Drag - Scroll the editor scene Ctrl+MiddleMouseButton+Drag - Zoom the editor scene in/out Shift+LeftMouseButton - Place the coordinate mark if visible Main viewer bindings (including the directory list image viewer) F5 - Decrease the image size F6 - Increase the image size F7 - Scale the image to the previous size F8 - Scale the image to its original size F9 - Save the currently displayed image Esc - Close/Hide the viewer Bindings for the script editor Ctrl+1 - Open a script file Ctrl+2 - Save the current script Ctrl+3 - Save the script with a new name Ctrl+/, Ctrl+L - Comment a single line or selection Ctrl+?, Ctrl+Shift+L - Uncomment a single line or selection Tab - Indent the selection, otherwise tab Ctrl+Tab - Unindent the selection, otherwise tab Ctrl+Return - Run the current script ================================================================================ Thanks to: - Scott Draves for his flam3 library - Erik Reckase for his work on the flam3 library - Mark James for his Silk icon set http://www.famfamfam.com/lab/icons/silk/ - The Apophysis developers for their interface design This program is licensed under the GNU GPL Version 3. See the COPYING file for details. Questions, concerns, suggestions, bug reports, and patches can be sent to bitsed(at)gmail.com. ================================================================================ qosmic-1.6.0/README-LUA000066400000000000000000000404651304321135200143130ustar00rootroot00000000000000-- -- The Lua script environment includes a Frame object type that is -- initialized before execution and is bound to the global 'frame' variable. -- The Frame is the main object with which a script interacts with the qosmic -- application. The Frame contains a vector of Genome types corresponding to -- the each flam3 genome item displayed in the genome selector widget. -- -- The script environment also contains constant values for the flam3 xform -- variation types. These values are globally bound to variables having the -- same name as the variation name with upper case letters. The variables can -- be used to access a particular variation, and they are listed toward the end -- of this document. -- -- Be sure to also look at the example.lua and functions.lua scripts in the -- scripts directory for more examples. -- -- With each function listed below the optional arguments are given in brackets, -- and their default values follow an equal sign. -- -- Please note that the objects in the environment follow the Lua convention -- of beginning array indexes with 1 instead of 0. Additionally, if an array -- index of 0 is passed as an argument, this will be internally translated to an -- index of 1. -- -- -- Frame Object Interface -- Frame() -- Create a new Frame instance. All Frame instances -- reference the same environment. Frame:get_genome([idx =1]) -- Returns a reference to the Genome type at offset -- idx in the genomes list. If there is no genome -- at that offset, the list is filled with default -- Genome types up to idx. Frame:num_genomes() -- Returns the number of genomes in the genomes list Frame::selected([idx]) -- Returns the selected genome index. If -- idx is a valid index, then set the -- seleted genome to that index. Frame:render([idx =1, [filename]]) -- Renders the genome at offset idx in the -- genomes list. If filename is given, then -- the rendered image is saved to that file -- in png format. If filename is not given, -- then the preview image is rendered. Frame:update([idx =1, [filename]]) -- Renders the genome at offset idx in the -- genomes list. If filename is given, then -- the rendered image is saved to that file -- in png format. If filename is not given, -- then the GUI is updated and the preview -- image is rendered. Use update to redraw -- the triangles in the figure editor. Frame:load(filename) -- Load the flam3 xml file given by string filename. The -- existing genome list is cleared beforehand. Frame:save(filename) -- Saves the current genome list to string in filename -- in flam3 xml format. Frame:copy_genome(a, b) -- Copies the genome at offset a to offset b. Value -- 'a' must be a valid genomes offset or a Genome type. Frame:del_genome(idx) -- Removes the genome at offset idx Frame:bitdepth() -- Returns the bit depth used to render genomes. -- -- Genome Type Interface -- -- The Genome type provides access to the xforms (triangle), palette, and image -- settings for an entry in the genomes list. A genome variable value obtained -- from the frame using frame:get_genome() is not a copy, and it refers directly -- to the data in the list. Genome([ref]) -- Create a new Genome instance. An existing Genome -- instance can be used to initialize the new one. index() -- Returns the offset for this genome in the genomes list. center([x,y]) -- The coordinates of the center of the genome. rot_center([x,y]) -- Rotate around this position background([r,g,b]) -- Accessor for the background color of the genome. -- Valid values for r,g, and b variables are in [0.0, 1.0]. num_xforms() -- Returns the number of xforms in the xforms list. final_xform_index() -- Return the valid index of the final xform in the xforms -- list. If the final xform is enabled it's always the last -- element in the list. Returns 0 if the final xform is not -- enabled. get_xform(idx) -- Returns a reference to the XForm at offset idx in the -- xform list for this genome. The given offset must be a -- valid index. add_xform([n =1]) -- Add n xform(s) to the xform list. Returns a reference to -- the last xform added. del_xform(idx) -- Removes the xform at offset idx from the xform list. The -- xforms at higher offsets are re-indexed. copy_xform(a, b) -- Copy values in XForm at offset 'a' to the XForm at offset -- 'b'. The first argument may also be a valid XForm type. clear_xforms() -- Remove all xform from the list. load_palette(idx) -- Load the built-in palette given by idx into the genome's -- palette. Valid values for idx are on [1, NUM_PALETTES]. palette([table]) -- Get/set the palette as a table. The returned table is -- indexed on [1,256], and each table entry is a table -- of RGB values -- { ["r"] = r, ["g"] = g, ["b"] = b, ["a"] = a }. -- When used to set the palette, if the 'a' value is -- missing from a table entry it's assumed to have a -- value of 1.0. palette(idx, [r,g,b,a]) -- Get/set the color in the palette at offset idx. The -- palette is indexed on [1, 256], and the color -- components are valid on [0.0, 1.0]. If the 'a' -- argument has a default value of 1.0 if it's not given -- when setting a palette's color value, highlight_power([real]) -- The maximum Value for an RGB color before trending -- the color towards white as the density increases. -- -1 = disabled, 0 = no highlights chaos([table]) -- Access and return the entire genome chaos array table chaos(idx, [table]) -- Access and return an xform genome chaos array table chaos(idx, rdx, [real]) -- Access and return a genome chaos array entry width([value]) height([value]) rotate([deg]) -- rotates the genome vibrancy([real]) hue_rotation([real]) zoom([value]) -- deprecated. use image scale + quality instead pixels_per_unit([value]) -- image scale spatial_filter_radius([value]) -- filter radius spatial_filter_select([n]) -- the filter shape to use (see below) sample_density([value]) -- image quality brightness([value]) contrast([value]) gamma([value]) time([value]) estimator([value]) estimator_curve([value]) estimator_minimum([value]) gam_lin_thresh([value]) motion_exp([value]) interpolation([value]) interpolation_type([value]) palette_interpolation([value]) final_xform_enable([bool]) -- enable/disable the final xform. returns true -- if the final xform is enabled. symmetry([n]) -- calculate n'th the genome symmetry group palette_index([value]) -- index of built-in palette is used spatial_oversample([value]) -- oversample nbatches([value]) -- passes ntemporal_samples([value]) -- temporal samples -- -- XForm Type Interface -- -- The XForm type returned by a Genome supports the following interface. An -- XForm corresponds to a triangle object in the editor. -- XForm([ref]) -- Create a new XForm instance. An existing XForm -- instance can be used to initialize the new one. index() -- This xform offset in the genome's xform list density([real]) -- density color([idx]) -- The index of the color palette used by this xform -- valid on [0.0, 1.0] color_speed([real]) -- Scaling factor on the color added to current iteration opacity([real]) -- The xform opacity valid on [0.0, 1.0] where 1.0=opaque var(n, [real, [table]]) -- The value of variation 'n'. 'n' may be a string -- containing the variation name, or it may be an -- integer given by one of the global variation -- names (LINEAR, WAVES, ...). 'table' is a -- table of the variation's variable values if they -- exist (see below). This method returns the -- variation value and a table of it's variables. param(n, [real, [table]]) -- An alias for var() animate([real]) -- Set if this xform rotates (in sheep >0 means animate) -- valid on [0.0, inf] coords([table]) -- Access the coordinates for this xform using a table -- having indexes { ["o"], ["x"], ["y"] } o([x,y]) -- The O coordinate for this xform's triangle a([x,y]) -- An alias for o() x([x,y]) -- The X coordinate for this xform's triangle b([x,y]) -- An alias for x() y([x,y]) -- The Y coordinate for this xform's triangle c([x,y]) -- An alias for y() pos([x,y]) -- The coordinates of the center of the xform's triangle. translate(dx, dy) -- Move the center of the xform's triangle by dx, dy rotate(deg,[x,y]) -- Rotate the xform's triangle around [x,y]. -- [x,y]=pos() if not given scale(dz,[dy,[x,y]]) -- Scale the xform's triangle by dz,dy with respect to -- [x,y]. [x,y]=pos() if not given. dy = dz if not given. shear(dx,dy,[x,y]) -- Shear the xform's triangle by dz,dy with respect to -- [x,y]. [x,y]=pos() if not given coefs([table]) -- Access the xform's coefficients using a table having indexes -- { ["a"], ["b"], ["c"], ["d"], ["e"], ["f"] } xa([value]) -- The xform's 'a' value. xb([value]) -- The xform's 'b' value. xc([value]) -- The xform's 'c' value. xd([value]) -- The xform's 'd' value. xe([value]) -- The xform's 'e' value. xf([value]) -- The xform's 'f' value. coordsp([table]) -- Access the coordinates for this xform's post triangle -- using a table having indexes { ["o"], ["x"], ["y"] } op([x,y]) -- The O coordinate for this xform's post triangle xp([x,y]) -- The X coordinate for this xform's post triangle yp([x,y]) -- The Y coordinate for this xform's post triangle posp([x,y]) -- The coordinates of the center of the xform's post triangle. translatep(dx, dy) -- Move the center of the xform's post triangle by dx, dy rotatep(deg,[x,y]) -- Rotate the xform's post triangle around [x,y]. -- [x,y]=pos() if not given scalep(dz,[dy,[x,y]]) -- Scale the xform's post triangle by dz,dy with respect -- to [x,y]. [x,y]=pos() if not given, and dy = dz shearp(dx,dy,[x,y]) -- Shear the xform's post triangle by dx,dy with respect -- to [x,y]. [x,y]=pos() if not given coefsp([table]) -- Access the xform's post coefficients using a table having -- indexes { ["a"], ["b"], ["c"], ["d"], ["e"], ["f"] } xap([value]) -- The xform's post triangle 'a' value. xbp([value]) -- The xform's post triangle 'b' value. xcp([value]) -- The xform's post triangle 'c' value. xdp([value]) -- The xform's post triangle 'd' value. xep([value]) -- The xform's post triangle 'e' value. xfp([value]) -- The xform's post triangle 'f' value. -- -- Looping and thread control -- -- The script environment also contains a stopped() function so that scripts -- can check if they have been requested to stop executing by the controlling -- application. This is useful for scripts that may want to use an infinite -- loop which don't call a qosmic function. while not stopped() do -- ... do something ... end -- You can "restart" a stopped script, or reset the stopped() function by -- passing it a boolean. if stopped() then stopped(false) -- returns false end -- There is also an irand() function that returns a random value between zero -- and one. This is the same random number generator that is used by libflam3. while true do print('irand() = ' .. irand()) end -- Use msleep() to temporarily halt thread execution for one second. while true do print('irand() = ' .. irand()) msleep(1000) end -- The dialog() function can be used to collect input from the user prompt = "enter a number" text = 2 while not ok do ok, text = dialog(prompt, text) local n = tonumber(text) if n then print('got number', n) else prompt = 'not a number, try again' ok = false end end -- -- Variation Types -- -- The following is a list of the globally bound variables corresponding to the -- transform variations. There is also a variable called RANDOM which has a -- value of -1, and the number of variations available is set in a variable -- called NUM_VARS. The variation names are also available as strings in a -- globally bound array called VARIATIONS. -- 1 LINEAR 2 SINUSOIDAL 3 SPHERICAL 4 SWIRL 5 HORSESHOE 6 POLAR 7 HANDKERCHIEF 8 HEART 9 DISC 10 SPIRAL 11 HYPERBOLIC 12 DIAMOND 13 EX 14 JULIA 15 BENT 16 WAVES 17 FISHEYE 18 POPCORN 19 EXPONENTIAL 20 POWER 21 COSINE 22 RINGS 23 FAN 24 BLOB 25 PDJ 26 FAN2 27 RINGS2 28 EYEFISH 29 BUBBLE 30 CYLINDER 31 PERSPECTIVE 32 NOISE 33 JULIAN 34 JULIASCOPE 35 BLUR 36 GAUSSIAN_BLUR 37 RADIAL_BLUR 38 PIE 39 NGON 40 CURL 41 RECTANGLES 42 ARCH 43 TANGENT 44 SQUARE 45 RAYS 46 BLADE 47 SECANT2 48 TWINTRIAN 49 CROSS 50 DISC2 51 SUPER_SHAPE 52 FLOWER 53 CONIC 54 PARABOLA 55 BENT2 56 BIPOLAR 57 BOARDERS 58 BUTTERFLY 59 CELL 60 CPOW 61 CURVE 62 EDISC 63 ELLIPTIC 64 ESCHER 65 FOCI 66 LAZYSUSAN 67 LOONIE 68 PRE_BLUR 69 MODULUS 70 OSCILLOSCOPE 71 POLAR2 72 POPCORN2 73 SCRY 74 SEPARATION 75 SPLIT 76 SPLITS 77 STRIPES 78 WEDGE 79 WEDGE_JULIA 80 WEDGE_SPH 81 WHORL 82 WAVES2 83 EXP 84 LOG 85 SIN 86 COS 87 TAN 88 SEC 89 CSC 90 COT 91 SINH 92 COSH 93 TANH 94 SECH 95 CSCH 96 COTH 97 AUGER 98 FLUX 99 MOBIUS -- -- Variation Variables -- -- Some xform variations have additional parameters called variables associated -- with them. The xform:var() method can be passed, and will return, a table -- indexed by the string name of the variable for these variations. These -- variations and the string names of their variables are listed here. -- BLOB: low, high, waves PDJ: a, b, c, d FAN2: x, y RINGS2: val PERSPECTIVE: angle, dist JULIAN: power, dist JULIASCOPE: power, dist RADIAL_BLUR: angle PIE: slices, rotation, thickness NGON: sides, power, circle, corners CURL: c1, c2 RECTANGLES: x, y DISC2: rot, twist SUPER_SHAPE: rnd, m, n1, n2, n3, holes FLOWER: petals, holes CONIC: eccen, holes PARABOLA: height, width BENT2: x, y BIPOLAR: shift CELL: size CPOW: r, i, power CURVE: xamp, yamp, xlength, ylength ESCHER: beta LAZYSUSAN: spin, space, twist, x, y MODULUS: x, y OSCILLOSCOPE: separation, frequency, amplitude, damping POPCORN2: x, y, c SEPARATION: x, y, xinside, yinside SPLIT: xsize, ysize SPLITS: x, y STRIPES: space, warp WEDGE: angle, count, hole, swirl WEDGE_JULIA: angle, count, power, dist WEDGE_SPH: angle, count, hole, swirl WHORL: inside, outside WAVES2: freqx, freqy, scalex, scaley AUGER: sym, freq, weight, scale FLUX: spread MOBIUS: re_a, im_a, re_b, im_b, re_c, im_c, re_d, im_d -- -- Filter Shapes -- -- The following is a list of the globally bound variables corresponding to the -- spatial kernel shapes that can be used to set/check a genome's -- spatial_filter_select() method. -- GAUSSIAN_KERNEL HERMITE_KERNEL BOX_KERNEL TRIANGLE_KERNEL BELL_KERNEL B_SPLINE_KERNEL LANCZOS3_KERNEL LANCZOS2_KERNEL MITCHELL_KERNEL BLACKMAN_KERNEL CATROM_KERNEL HAMMING_KERNEL HANNING_KERNEL QUADRATIC_KERNEL qosmic-1.6.0/changes.txt000066400000000000000000000266441304321135200151700ustar00rootroot00000000000000Version 1.6.0 - Update to Qt5.5, Lua 5.2, and flam3 3.1.1 - Fix a crash in Lua XForm:get_genome when adding new genomes - Add include to flam3util.cpp for win32 support - Fix infinite loop bug on read error in loadCPTGradient - Set the flam3_genome.symmetry to 1 when loading the default flam3 xml - Use M_PI constant defined in - Fix PaletteEditor log messages - Add ru and cz locale translation files - Use consistent types with Qt compare functions to address build issues - Highlight multi-line comments and strings in the lua editor - Added a lua script dialog() function - Added a clear/delete button for items in the variations editor - Scroll to the new genome when the duplicate button is clicked - Load translations from application resources - Remove checks for flam3_palettes environment variable - Scaling and editing improvements in the xform editor - Add labels to the triangles in the xform editor Version 1.5.0 - Compatibility updates for flam3-3.0.1. - Enhanced directory browsing widget. - Added move, rotate, scale, and flip modes to the triangle editor. - Added xform previews and rendering enhancements to the triangle editor. - Added a genome palette histogram to the xform color selector. - Enhanced flam3 types in Lua scripts. - Alpha channel and HSV colorspace support for ggr gradients. - Enhanced mutations editor. - Enhanced genome selector. - New sheep loop animation widget. - Added a configuration dialog for the autosave feature. - Enhanced tree view in the variations widget. - Added a message output pane to the Lua script editor. - Fixed a bug when modifying coefs in the coordinates widget. - Added drag+drop support to mutations, directory browser, and genome selector. Version 1.4.8 - Compatibility updates for Qt 4.6. - Improved mouse control when zooming the triangle scene. - Fix the colordialog HSV selector to display the full hue range. - Check that libflam3 has version <2.8 in the build setup. - Added controls and lua scripting support to modify the a genome's time, interpolation, and interpolation_type attributes. - Fix an invalid directory problem with the directory browser. - Bind the control key to increase the step value on valueeditor wheel events. - Fix the post-xform scale, rotate, and shear methods in the script environment to use post-xform coordinates. - Fix an edge detection bug when selecting and immediately moving a triangle. - Move the post triangle to the front when enabled. - Bind control+wheel to change the icon size in the Browse and Genomes widgets. Version 1.4.7 - Add global key bindings for scene scaling, image saving, and quicksave. - Adjust triangle painter brushes when rescaling. - Add an undo state when a script finishes. - Bind shift+button to add triangles or nodes to the selection. - Add an undo state when setting a triangle's coords to defaults. - Bind the middle mouse button to scroll the figure editor scene. - Bind control+middlebutton to scale the figure editor scene. - Rebind the coordinate mark placement to shift+middlebutton. - Correctly scale the selection and coordinate mark when restoring undo states. - Use a treeview in variations widget to display variations and their variables. - Added a simple gradient editor to the palette widget. - Improved ggr and cpt gradient file parsing. - Added some edge "buttons" to the triangles that initiate scaling and rotation. - Fix the broken control+space key binding in mainwindow. - Added a clipboard to cut, copy, and paste triangles. - Track undo/redo states for individual genomes. - Draw the HSV selector in colordialog using the current value. Version 1.4.6 - Fixed an initialization bug to ensure the basis triangle is redrawn when loading the initial flam3 file. - Added an msleep() function to the Lua script environment. - Track the post triangle state in the undo stack. - Track the type of item in the selection in the undo stack. - Added frame:update() to the Lua script environment as an alias to frame:render() which additionally redraws the triangles and updates value editors. - Create an undo state when adding, removing, or duplicating triangles. - Fixed a crash that would occur when showing the directory brower. Version 1.4.5 - Select and operate on either triangles or nodes with the selection. - Track the selection and the coordinate mark state in the undo stack. - Improved the coordinate mark icon. - Display lua script error messages in the ScriptEditWidget's status widget. - Cleanup any compiler wanings. - Added a .desktop file to the source archive, and improved package configuration when building from source. - Patched for a locale related problem causing segfaults in libflam3. - Added localization support to remaining real value editor widgets. - Arbitrary precision support in real value editor widgets. - All value editor widgets save their precision and multiplier settings. - Improved the default layout and initial settings. - Added a modal progress dialog displayed when rendering an image to a file. - Fix an off-by-one bug in the PaletteEditor when parsing a .ugr palette. - Added an option to bind the MainViewer image settings to the Preview settings. Version 1.4.4 - Fixed crash when opening mutations widget. - Fixed crash when selecting and removing a post triangle. - Made the selection more persistent while scaling the scene. - Most values can be changed using click and drag. - Most values can be undone and redone. - Display the mark position in the status message as rect,deg,or rad. Version 1.4.3 - Enabled independent quality settings for the image viewers. - Added a dialog to selecting image quality and size when rendering to a file. - Added support for internationalized strings with a naive set of french translations. - Try to set the FLAM3_PALETTES directory using pkg-config. - Improved interaction between the figure editor, widgets, and the undo stack. - Added a floating status message to the main image viewer. - Improved scene scaling and centering in the figure editor. - Improved mutation selection. Version 1.4.2 - Triangle coordinates can be displayed and edited using polar coordinates. - Added a new widget to edit and merge triangle densities. - Added import and export menu items to add or save a genome in the current set. - Choose a random color when adding a new xform. - Fixed more scaling problems in the figure editor. Version 1.4.1 - Viewer presets can be renamed and changed, and they no longer modify the final image size. - Added support for UGR gradient files to the palette editor. - Updated all debug messages to work with 64bit systems. - Several rendering scheduling bug fixes. - Fixed a crash bug in the genome selection widget, and also adjusted the layout. - Automatically rescale the genome when the image size is changed. - Fixed a some scaling and redrawing problems in the figure editor. - Updated to flam3-2.7.16. Version 1.4 - Fixed a bug in calculating the scaling factor when resizing triangles. - Added more options for origin placement when editing triangles. - Added a function to duplicate a triangle. - Post transforms for a triangle can be modified. - Updated to libflam3-2.7.14. - Improved rendering request scheduling. Version 1.3.3 - The camera position and scale can be set using the mouse in the preview widget. - The symmetry setting can be applied to the current genome. - Holding the Alt key disables updating the mainviewer image, and releasing it will immediately update the mainviewer. - Added an undo stack. - Try to load a fixed width font for the Lua editor if possible. - Window title and content fonts use the default qtconfig settings. - Added a selection box to the triangle editor. Now multiple triangles can be moved, rotated, and scaled together. Version 1.3.2 - Removed the libflam3 sources from the distribution tree. - Updated the build dependency to flam3-2.7.11 - Added support for alpha channel image formats. - Lua scripts can be interrupted. - Basic highlighting for Lua scripts. - Simple formatting keys were added to the script editor. - Support for multiple libflam3 pthreads. - Some minor user interface enhancements added. - Added 'help' and 'version' command line options. - Added a list of key bindings to the README Version 1.3.1 - Fixed an assertion related bug that occurs when a cpt gradient file is loaded. - Fixed a bug which caused a crash when calling the lua frame:load method. - Changes to the textedit fields in the coordinates widget now update the selected transform. - The ~/.qosmic.flam3 file is only written when quitting if the file already exists. Version 1.3 - Finer adjustments for the hue, vibrancy, contrast, and brightness settings. - Added a presets widget that keeps a selectable list of preset image resolution and quality settings. - Non-critical log messages can be disabled at compile time. - Added a script editing widget that runs scripts in an Lua script environment. - Loading of CPT gradient files is supported in the palette selector. - Added transformation controls to translate a triangle horizontally and vertically. - The origin for rotate, scale, and flip transformations can be set to the coordinate origin, the triangle center, or to an arbitrary point. - Added final xform support. - Added support for rendering genome symmetry groups. - Adjusted the widget layouts so they work with more styles. - Added compile time support for adjusting the number of pthreads libflam3 will create. - Many user interface enhancements and bug fixes. Version 1.2 - Broke the settings tabbed box into smaller individual widgets, and added them to the mainwindow as dockwidgets. - Automatically save the current flame to the user's $HOME/.qosmic.flam3. - The triangle editor can show grid lines. - The background and grid line colors in the triangle editor can be set. - Fixed some drawing and event handling problems in the triangle editor. - Values in spinboxes and the variations table are adjustable using the mouse wheel. - Minor improvements to the rendering scheduler. - Added scroll lists to the palette selector for selecting gradients. - Nice coloring added to the variations table indicating acceptable sheepserver variations. Also, the non-zero variation values are also colored. - Added a directory browser for browsing, viewing, and selecting flam3 files. - Added a widget that shows the status of the rendering scheduler. - The hue slider now works. - The log level can be set using the 'log' environment variable. - Added icons from the Silk icon set by Mark James http://www.famfamfam.com/lab/icons/silk/ Version 1.1.2 - Fixed a bug introduced in 1.1.1 while trying to remove a compile warning. - Added basis triangle scaling using the mouse wheel. Version 1.1.1 This version is just a 1.1 release with some fixes to the build setup for some systems. If 1.1 builds on your system you don't need to upgrade. - Changed an address cast to long for 64bit systems. - Added libxml2 to the LIBS variable in qosmic.pro. - Moved the local flam3 directory to the beginning of the linker search path. Version 1.1 - Updated the flam3 library to libflam3-2.7.6 - Added a logging facility - Added a mutations widget. - Added a background color selector. - Added support for GIMP Gradient files - Changed the variations tab to use a table class, and added a similar variables tab for editing variation variables. - Added horizontal and vertical flipping for triangles. - The shift key reduces the amount of rotation and scaling. - Fixed icon paths. - Fixed a graphics scene scaling problem that caused the window to jump around. qosmic-1.6.0/dist/000077500000000000000000000000001304321135200137465ustar00rootroot00000000000000qosmic-1.6.0/dist/flam3-2.7.16.ebuild000066400000000000000000000010671304321135200166730ustar00rootroot00000000000000# Copyright 1999-2008 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ inherit eutils DESCRIPTION="Tools and a library for creating flame fractal images" HOMEPAGE="http://flam3.com/" SRC_URI="${HOMEPAGE}/${P}.tar.gz" LICENSE="GPL-2" SLOT="0" KEYWORDS="~amd64" IUSE="" DEPEND="dev-libs/libxml2 media-libs/libpng media-libs/jpeg !<=x11-misc/electricsheep-2.6.8-r1" RDEPEND="${DEPEND}" src_install() { emake install DESTDIR="${D}" || die "emake install failed" dodoc README.txt *.flam3 || die "dodoc failed" } qosmic-1.6.0/dist/qosmic-1.4.1.ebuild000066400000000000000000000015071304321135200170710ustar00rootroot00000000000000# Copyright 1999-2008 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ EAPI=1 inherit eutils qt4 DESCRIPTION="A cosmic recursive flame fractal editor written in Qt" HOMEPAGE="http://qosmic.googlecode.com" SRC_URI="${HOMEPAGE}/files/${P}.tar.bz2" LICENSE="GPL-2" SLOT="0" KEYWORDS="~amd64" IUSE="" DEPEND="|| ( x11-libs/qt-gui:4 =x11-libs/qt-4.3* ) >=media-gfx/flam3-2.7.16 dev-libs/libxml2 media-libs/libpng media-libs/jpeg dev-lang/lua" RDEPEND="${DEPEND}" S=${WORKDIR}/${PN} src_compile() { eqmake4 || die "qmake failed" emake || die "make failed" } src_install() { doicon icons/qosmicicon.xpm || die "doicon failed" dobin qosmic || die "dobin failed" dodoc README README-LUA || die "dodoc failed" make_desktop_entry qosmic "Qosmic" qosmicicon.xpm "KDE;Qt;Graphics" } qosmic-1.6.0/dist/qosmic-1.6.0.ebuild000066400000000000000000000010351304321135200170660ustar00rootroot00000000000000# Copyright 1999-2016 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id$ EAPI=4 inherit qmake-utils DESCRIPTION="A cosmic recursive flame fractal editor" HOMEPAGE="https://github.com/bitsed/qosmic" SRC_URI="https://github.com/bitsed/qosmic/archive/${P}.tar.gz" LICENSE="GPL-3" SLOT="0" KEYWORDS="~amd64" IUSE="" RDEPEND="dev-lang/lua:5.2 dev-qt/qtgui:5 >=media-gfx/flam3-3.1.1" DEPEND="${RDEPEND} virtual/pkgconfig" DOCS="changes.txt README README-LUA" src_prepare() { eqmake5 ROOT=${D} } qosmic-1.6.0/dist/qosmic.spec000066400000000000000000000021661304321135200161220ustar00rootroot00000000000000Name: qosmic Version: 1.6.0 Release: 1%{?dist} Summary: A flam3 fractal editor Group: Applications/Multimedia License: GPLv3 URL: http://github.com/bitsed/qosmic Source0: qosmic-%{version}.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: flam3-devel >= 3.1.1 BuildRequires: qt-devel >= 5.5 BuildRequires: lua-devel >= 5.2 Requires: flam3 >= 3.1.1 Requires: qt >= 5.5 Requires: lua >= 5.2 %description A graphical interface to create, edit, and render flam3 fractal images. %prep %setup -q %build %{_qt4_qmake} make %{?_smp_mflags} %install rm -rf $RPM_BUILD_ROOT make install INSTALL_ROOT=$RPM_BUILD_ROOT %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) %doc README README-LUA changes.txt COPYING scripts/ %{_bindir}/%{name} %{_pixmapsdir}/qosmicicon.xpm %{_desktopdir}/%{name}.desktop %changelog * Thu Mar 10 2011 Nathaniel Clark - 1.4.8-1 - Initial Spec file * Thu Jul 21 2011 David Bitseff - 1.5.0-1 - Version 1.5.0 Spec file * Thu Jun 23 2016 David Bitseff - 1.6.0-1 - Version 1.6.0 Spec file qosmic-1.6.0/icons/000077500000000000000000000000001304321135200141165ustar00rootroot00000000000000qosmic-1.6.0/icons/editcopy.xpm000066400000000000000000000112311304321135200164620ustar00rootroot00000000000000/* XPM */ static char *editcopy[] = { /* columns rows colors chars-per-pixel */ "32 32 155 2", " c black", ". c #191000", "X c #221700", "o c #2E2300", "O c #452E00", "+ c #433200", "@ c #493000", "# c #553800", "$ c #5D4600", "% c #6B5000", "& c #724B00", "* c #7D5E00", "= c #6E694F", "- c #7E795F", "; c #865900", ": c #8A5C00", "> c #8B6800", ", c #936200", "< c #926D00", "1 c #926B1A", "2 c #967000", "3 c #9B721D", "4 c #9B7625", "5 c #9E792A", "6 c #A47C00", "7 c #AA7D00", "8 c #A1761A", "9 c #A57816", "0 c #A4791D", "q c #AD8200", "w c #B28500", "e c #AE8530", "r c #B99626", "t c #97906D", "y c #B18D48", "u c #B49049", "i c #B89542", "p c #BA9C4D", "a c #BD9E52", "s c #BFA053", "d c #B8AE78", "f c #BEB47E", "g c #C49300", "h c #C89600", "j c #C19D2C", "k c #C1A43F", "l c #C09E4E", "z c #CFB457", "x c #C9B159", "c c #CAB573", "v c #D4BF7C", "b c #FFDF62", "n c #FFE064", "m c #FFE16D", "M c #FFE372", "N c #FFE479", "B c #A19D8E", "V c #ABA89A", "C c #BEB580", "Z c #BDB488", "A c #B8B496", "S c #AEADAA", "D c #B3AFA1", "F c #BCBBB6", "G c #BFBFB9", "H c #C0B680", "J c #C4BA85", "K c #C6BD8B", "L c #CBB589", "P c #C8BE88", "I c #C3BC90", "U c #CBC18C", "Y c #CCC493", "T c #D7CB8C", "R c #DAC786", "E c #D8C789", "W c #DAC98B", "Q c #D0C690", "! c #D4CA94", "~ c #D4CC9B", "^ c #D8CE98", "/ c #DCD29C", "( c #C6C3B7", ") c #C8C6BE", "_ c #D5C5A5", "` c #DBC8A1", "' c #DBD4A2", "] c #DED9AE", "[ c #D9D5B1", "{ c #E0CC82", "} c #E8D98B", "| c #E8D991", " . c #E1D7A1", ".. c #E5DBA5", "X. c #E4DCAB", "o. c #E8DDAA", "O. c #E1DCB2", "+. c #E1DCB8", "@. c #FFE683", "#. c #FFE78A", "$. c #FFE885", "%. c #FFE88D", "&. c #FFE992", "*. c #FFEC9D", "=. c #FFF09F", "-. c #ECE2AC", ";. c #E5E0B6", ":. c #E5E1B8", ">. c #EBE4B6", ",. c #EAE5BC", "<. c #F0E5A8", "1. c #FFEDA3", "2. c #FFEDA9", "3. c #F1E8B8", "4. c #FFEFB1", "5. c #FFF1A5", "6. c #FFF2AD", "7. c #FFF2B4", "8. c #FFF2BC", "9. c #CAC8C2", "0. c #D6D4CB", "q. c #DFDAC5", "w. c #D4D2D0", "e. c #E0D7C5", "r. c #E4DAC3", "t. c #E8DEC7", "y. c #E0DFD3", "u. c #E6E2C2", "i. c #E8E1C5", "p. c #EBE3CB", "a. c #EEE9C2", "s. c #E8E6DC", "d. c #F3EDC3", "f. c #F2EDCB", "g. c #F7F2CD", "h. c #FFF3C3", "j. c #FFF4CA", "k. c #FFF8C5", "l. c #FFF8CD", "z. c #FDF5D2", "x. c #FFF7D8", "c. c #FFF9D4", "v. c #FFF9DC", "b. c #E9E8E7", "n. c #F3EFE3", "m. c #F2F0E3", "M. c #F4F2EA", "N. c #FBF7E6", "B. c #FEF9E3", "V. c #FFFBEC", "C. c #F4F4F3", "Z. c #F8F7F6", "A. c #FEFCF4", "S. c #FEFEFC", "D. c None", /* pixels */ "D.D.D.D.D.D.D.D.D.D.D.D.h g g g g g g g g g g w * D.D.D.D.D.", "D.D.D.D.D.D.D.D.D.D.D.D.g z.z.g.g.g.g.g.g.z.g.R 2 D.D.D.D.D.", "D.D.D.D.D.D.D.D.D.D.D.D.g z.d.3.3.3.3.3.3.>.f.g.z < D.D.D.D.", "D.D.D.D.D., : ; , : : : 7 a i a R -.-.-.-.' m.u.g.j > D.D.D.", "D.D.D.D., u y y L L L L ` t.t.e.e v -.-.-.Y b.S.+.d.q D.D.D.", "D.D.D.D., S.S.S.S.S.S.S.S.Z.b.S.e.i W o.o.K w.S.A.u.q D.D.D.", "D.D.D.D., S.S.S.A.S.S.S.S.M.w.S.S._ a E ..K 0.S.S.q.7 D.D.D.", "D.D.D.D., S.A.V.A.A.A.V.A.n.9.S.S.C._ a ..Y t = - A 6 D.D.D.", "D.D.D.D., A.A.V.A.V.V.V.A.n.9.S.S.S.Z.3 ' ' K Z A ] 7 D.D.D.", "D.D.D.D., A.V.B.V.V.B.V.V.n.( F S S G 5 ' | / / X.f.q D.D.D.", "D.D.D.D., A.V.x.B.x.V.B.N.B.e.D B V ) 3 / / ^ ^ ' a.q D.D.D.", "D.D.D.D., V.N.N.B.B.B.v.v.N.z.p.i.p.n.8 ^ / ! Q ' a.q D.D.D.", "D.D.D.D., B.B.x.v.x.z.j.j.x.z.z.c.B.B.0 ! ! ! ^ ' ,.q D.D.D.", "D.D.D.D., B.h.h.z.z.x.x.z.z.z.h.j.x.v.0 ! Q Y ! ~ ,.q D.D.D.", "D.D.D.D., v.c.k.x.h.j.j.j.z.8.h.k.j.v.0 U T U U ~ ,.q D.D.D.", "D.D.D.D., v.k.z.h.h.h.j.8.j.h.h.j.k.v.0 U U U U Y ;.q D.D.D.", "D.D.D.D., x.h.8.8.h.j.8.8.4.h.4.8.h.x.8 P H P P ~ ;.q D.D.D.", "D.D.D.D., v.h.4.4.8.8.4.1.z.h.8.4.h.c.8 H J H J Y ;.q D.D.D.", "D.D.D.D., c.2.z.j.4.*.1.1.8.2.2.*.2.l.8 J J H J U ] q D.D.D.", "D.D.D.D., l.h.2.4.4.1.%.1.&.2.4.8.7.k.8 f d f H U ] q D.D.D.", "D.D.D.D., z.8.#.1.4.1.*.1.1.1.*.N 4.l.8 f f C K ~ :.q D.D.D.", "D.D.D.D., 8.&.4.#.%.4.&.@.#.%.%.&.2.l.8 K K Y ~ ] ,.6 D.D.D.", "D.D.D.D., h.&.#.*.1.1.%.N N #.&.*.1.l.0 ' ] T x r 6 % D.D.D.", "D.D.D.D., 4.4.%.*.#.b &.N M b M 2.1.k.9 k 7 > $ o D.D.D.", "D.D.D.D., 7.&.N 5.&.N @.*.b N M N =.k., + D.D.D.", "D.D.D.D., 6.N N M M &.#.N 2.$.%.8.6.<.& D.D.D.D.D.", "D.D.D.D., 5.&.7.n $.m M 1.7.7.o.c 5 & @ D.D.D.D.D.D.D.D.D.", "D.D.D.D., 7.*.m %.=.&.7.} p 1 % # X D.D.D.D.D.D.D.D.D.D.", "D.D.D.D., 6.5.5.5.| a 1 & + . D.D.D.D.D.D.D.D.D.D.", "D.D.D.D., 6.-.a 1 & O . D.D.D.D.D.D.D.D.D.D.D.D.", "D.D.D.D.; : % O . D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.", "D.D.D.D. D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D." }; qosmic-1.6.0/icons/editcut.xpm000066400000000000000000000131071304321135200163070ustar00rootroot00000000000000/* XPM */ static char *editcut[] = { /* columns rows colors chars-per-pixel */ "32 32 214 2", " c #000000", ". c #0B0B0B", "X c #181300", "o c #1D190B", "O c #131313", "+ c #1B1B1B", "@ c #211E11", "# c #26231A", "$ c #2A2513", "% c #2E2912", "& c #2E2A19", "* c #372E0B", "= c #302A12", "- c #312C1B", "; c #3A320F", ": c #3C3415", "> c #3C351B", ", c #232323", "< c #2B2922", "1 c #2C2C2C", "2 c #302E26", "3 c #353120", "4 c #3F3B2D", "5 c #313131", "6 c #3A3A3A", "7 c #423814", "8 c #493E17", "9 c #413D2F", "0 c #423F32", "q c #4F4319", "w c #5C4A00", "e c #5F4F0D", "r c #514410", "t c #554813", "y c #4E472C", "u c #444136", "i c #4A483F", "p c #534B2B", "a c #504B37", "s c #514C3A", "d c #654F04", "f c #604F0B", "g c #665200", "h c #675509", "j c #6B5405", "k c #6C5807", "l c #6C590B", "z c #745B04", "x c #715D0A", "c c #7B5B02", "v c #625B3B", "b c #7E6815", "n c #6C643E", "m c #4D4B42", "M c #494949", "N c #504D43", "B c #54534C", "V c #515151", "C c #5D5B54", "Z c #656048", "A c #736A44", "S c #726C54", "D c #77725B", "F c #696968", "G c gray50", "H c #826203", "J c #806609", "K c #836907", "L c #8D6A03", "P c #9A6F00", "I c #9B7005", "U c #9E730E", "Y c #9C7511", "T c #85732C", "R c #88783B", "E c #AE7C00", "W c #A87B13", "Q c #847B53", "! c #827D64", "~ c #9C862E", "^ c #A98A1F", "/ c #B28D0A", "( c #B88D00", ") c #B2821A", "_ c #B18E1B", "` c #B3941C", "' c #A88E2C", "] c #A28C36", "[ c #AE9224", "{ c #89815E", "} c #87826D", "| c #858174", " . c #888370", ".. c #8E8A7D", "X. c #928C71", "o. c #A28E44", "O. c #AA9F74", "+. c #B9A456", "@. c #BDA85B", "#. c #B2A068", "$. c #C28700", "%. c #CC8E00", "&. c #C29A00", "*. c #C4962F", "=. c #CCA100", "-. c #D6A800", ";. c #D1AC1B", ":. c #DDB31A", ">. c #D2A922", ",. c #D4AE2B", "<. c #DBA12E", "1. c #DBA433", "2. c #DDB428", "3. c #D2B23B", "4. c #E6A200", "5. c #E8A509", "6. c #EAAF00", "7. c #EFAC1E", "8. c #F5A100", "9. c #FFAD02", "0. c #FCAF0D", "q. c #FCB005", "w. c #FFB60C", "e. c #FFBD00", "r. c #FFBD16", "t. c #E3B432", "y. c #E8BF3C", "u. c #F6BE2F", "i. c #C6A949", "p. c #D9A948", "a. c #D8AB52", "s. c #DBBA45", "d. c #C5B162", "f. c #ECB74D", "g. c #EFB841", "h. c #EFBE4A", "j. c #EABA55", "k. c #FDC006", "l. c #FFC10B", "z. c #FFC800", "x. c #FFC90D", "c. c #FAC113", "v. c #FBC11C", "b. c #FDC910", "n. c #EDC233", "m. c #F5C32D", "M. c #FFC728", "N. c #F4C537", "B. c #F6C63A", "V. c #F5CB36", "C. c #FFD73D", "Z. c #E9C659", "A. c #EAC85A", "S. c #FFDA4B", "D. c #FFDD5D", "F. c #E9CD6B", "G. c #FFD560", "H. c #FFE06C", "J. c gray56", "K. c #959595", "L. c gray62", "P. c #A6A18A", "I. c #A8A69E", "U. c #AEA895", "Y. c #B3AC8F", "T. c #B8AF8B", "R. c #B4AD96", "E. c #B8B199", "W. c #A4A4A4", "Q. c #AAAAAA", "!. c #B0ADA3", "~. c #BBB6A3", "^. c #B1B1B1", "/. c #B9B9B6", "(. c #BBBBBA", "). c #C5BC9D", "_. c #C2BCA2", "`. c #C1BEB5", "'. c #D2C38E", "]. c #DCC78C", "[. c #C7C0A7", "{. c #C7C2AE", "}. c #C7C3B2", "|. c #C5C2B8", " X c #CAC6B6", ".X c #CBC9BE", "XX c #D9D3BB", "oX c #E6D08A", "OX c #E7DEBD", "+X c #ECDEB3", "@X c #FFF0B9", "#X c #C5C5C5", "$X c #CECCC7", "%X c #D0CEC5", "&X c #D0CFC8", "*X c #D2D1CB", "=X c #DBD6C5", "-X c #DBD7C9", ";X c #D3D3D1", ":X c #DBDBDB", ">X c #E5E1D6", ",X c #E5E3DA", ".9.U r . . , T B.*.x qX + , Q !.Q. . + 1 [ m.p.k . qXqXqXqX , u O.W.;X! + ", "4 8.j.` p 5 y ;.u.a.d % qXqXqXqXqXqX O , A P._., ", "1 x <.f.m.x.b.y.a.g ; qXqXqXqXqXqXqXqX + 0 v O ", " - h c W W W W z : qXqXqXqXqXqXqXqXqXqX . . ", " * e l l f X qXqXqXqXqXqXqXqXqXqXqXqXqX ", "qX qXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqX qX", "qXqXqX qXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqX", "qXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqX", "qXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqX" }; qosmic-1.6.0/icons/editpaste.xpm000066400000000000000000000143701304321135200166330ustar00rootroot00000000000000/* XPM */ static char *editpaste[] = { /* columns rows colors chars-per-pixel */ "32 32 257 2", " c black", ". c #0D0900", "X c #191000", "o c #221700", "O c #2A1B00", "+ c #332200", "@ c #3E2900", "# c #3A2804", "$ c #4D3300", "% c #4B3E15", "& c #44391B", "* c #543800", "= c #5A3B00", "- c #4D4015", "; c #524E25", ": c #5A4F2C", "> c #524E3D", ", c #58562F", "< c #53503E", "1 c #5E623B", "2 c #634100", "3 c #684500", "4 c #6E4900", "5 c #614F11", "6 c #685416", "7 c #734C00", "8 c #784F00", "9 c #755B00", "0 c #7C5200", "q c #7C5A00", "w c #7B570F", "e c #69562F", "r c #786600", "t c #7F6A00", "y c #766300", "u c #60613F", "i c #7C6422", "p c #545143", "a c #54524B", "s c gray32", "d c #5D5D57", "f c #616641", "g c #67695D", "h c #6B734D", "j c #6C7553", "k c #616261", "l c #686A64", "z c #6B7162", "x c #727272", "c c #003DFF", "v c #0043FF", "b c #004BFF", "n c #0053FF", "m c #015AFF", "M c #0063FF", "N c #046DFF", "B c #0865FF", "V c #0378FF", "C c #1663FF", "Z c #1576FF", "A c #2678FF", "S c #6F7B84", "D c #77856D", "F c #7B8B75", "G c #0083FF", "H c #0197FF", "J c #0B92FF", "K c #1385FF", "L c #01A5FF", "P c #0DB5FF", "I c #3096FF", "U c #2DADFF", "Y c #2FBCFF", "T c #22C6FF", "R c #2AC5FF", "E c #30D0FF", "W c #38D5FF", "Q c #4493F1", "! c #5F83FF", "~ c #5F8AFF", "^ c #5290E4", "/ c #5F92FF", "( c #4CAAFE", ") c #40B8FF", "_ c #779DCB", "` c #6693E2", "' c #6290FF", "] c #649DFF", "[ c #71A6E5", "{ c #79A4FF", "} c #7FB3FF", "| c #68B8F3", " . c #42DCFF", ".. c #47E0FF", "X. c #58E9FF", "o. c #64C0EB", "O. c #6ADFEF", "+. c #825600", "@. c #845A00", "#. c #8B5C00", "$. c #905F00", "%. c #8C6103", "&. c #876807", "*. c #8A6111", "=. c #886E1B", "-. c #887600", ";. c #8C7A00", ":. c #936200", ">. c #986800", ",. c #926C22", "<. c #987A3F", "1. c #A07200", "2. c #A27511", "3. c #A97D15", "4. c #A77B14", "5. c #998712", "6. c #A68000", "7. c #A78F00", "8. c #AD8016", "9. c #AC9600", "0. c #BB8F00", "q. c #A99B2A", "w. c #B9A000", "e. c #B3A63C", "r. c #958D43", "t. c #988F44", "y. c #9A9346", "u. c #9F9948", "i. c #8B897C", "p. c #958F6F", "a. c #98937B", "s. c #A68443", "d. c #B08C41", "f. c #AF9462", "g. c #B39864", "h. c #B2A850", "j. c #BDB355", "k. c #C3972F", "l. c #C5A400", "z. c #CCAC00", "x. c #D7BB00", "c. c #CCA030", "v. c #CBB43E", "b. c #E4AD0C", "n. c #ECB600", "m. c #EDB900", "M. c #F2BB00", "N. c #C1B84C", "B. c #C1B757", "V. c #C5BB58", "C. c #C9BE5A", "Z. c #C2A978", "A. c #DFC000", "S. c #FDCB00", "D. c #F6C300", "F. c #FFD100", "G. c #FEDB00", "H. c #FFDF0E", "J. c #F5D500", "K. c #FBCD39", "L. c #FFE832", "P. c #FFE432", "I. c #CEC25C", "U. c #D7C648", "Y. c #DDC74B", "T. c #D0C55E", "R. c #D3C85F", "E. c #D5C960", "W. c #DDD264", "Q. c #E0CA4C", "!. c #E7D14E", "~. c #EFDA51", "^. c #F4D050", "/. c #F9D452", "(. c #FEDD53", "). c #E2D765", "_. c #E9DD69", "`. c #E6DD68", "'. c #FDDB6E", "]. c #FFEE4F", "[. c #FEE354", "{. c #FEEA55", "}. c #F7E153", "|. c #FFF056", " X c #ECE16A", ".X c #F1E56D", "XX c #F7EA6F", "oX c #F7EB70", "OX c #F9EC70", "+X c #FEF372", "@X c #979486", "#X c gray60", "$X c #969596", "%X c #8AA193", "&X c #82A89B", "*X c #8CAEA3", "=X c #86A7A9", "-X c #8BA2B1", ";X c #ACA580", ":X c #A5A291", ">X c #B3AF98", ",X c #B8B7AF", ".k.c.6 FXkXkXkXDXkXkXkXx i b.>.+ YXYXYXYXYXYXYXYXYXYX", "YXYXYX:.'.K.=.hX1X1X1X1X1X1X1Xd &.0.%.* 7 #.#.:.$.#.2 YXYXYX", "YXYXYX:./.M.%.$Xk k d s s s e w >.2.d.s.Z.9XrXlXxX0X7 YXYXYX", "YXYXYX:.^.M.1.: % % - % 5 6 &.GXIXIXPXPXPXPXPXLXIXIXg.3 YXYX", "YXYX#X:.^.m.v.y.r.r.r.r.h.h.2.IXPXPXKXKXPXKXHXxXUXIXIXf.4 YX", "YXYX#X:.^.m.Y.I.B.j.j.j.V.I.4.PXKXJXKXJXKXKXmXjXFXIXIXUX+. YX", "YXYX#X:.^.m.Y.E.I.j.j.j.I.R.8.PXKXSXJXJXJXSXnXeXDXIXIXUX<. YX", "YXYXYX:./.M.!.W.R.I.T.R.E.W.8.UXJXJXSXSXSXSXnXeX:X@Xi.X@X@X,X4 ", "YXYXYX:.(.S.}..X X X X X X X8.PXSXAXAXAXAXAXNXzXpXwXwXjX7 ", "YXYXYX:.(.S.[.OXOXOXoXoXt.; O s a p p p p a.AXMXvXaXzXGX+. ", "YXYXYX:.(.S.[.+X+X+XOX+X; 7X2X] / / ~ ! 2Xp MXNXNXNXSXKX+. YX", "YXYXYX:.(.F.|.+X+X+X+X+Xy., _ A m b v c ! p MXMXgXMXAXKX+. YX", "YXYXYX:.(.F.|.+X+X+X+X+X+Xj.& ^ B n b v ' < gXMXgXgXNXKX+. YX", "YXYXYX:.(.F.U.W.+X+X+X+X).y.g Q N m n b ~ < gXgXgXgXAXJXq YX", "YXYXYX:.[.l.j j y.I.j.r.1 =X( K N M m b ~ < gXgXgXgXNXKX+. YX", "YXYXYX:.[.t 5X4X&XD F =X| U J G V Z A C / < fXgXgXgXMXHX+. YX", "YXYXYX:.[.l.h 3XX...W T P L H K I [ S ` { < fXfXfXfXMXKX+. YX", "YXYXYX:.[.G.e.1 *XO...E R Y Y | -Xd Z.k 6X> fXfXfXfXBXJX+. YX", "YXYXYX:.[.G.{.`.u.1 F &X*X%Xz l a.uXfXp.> p.sXsXsXfXBXJX+. YX", "YXYXYX:.{.G.|.+X+X XN.q.5.7.q cXvXsXsXsXsXsXsXsXsXsXBXKX+. YX", "YXYXYX:.|.G.].|.L.H.G.G.G.A.1.JXvXsXsXsXsXsXsXsXfXdXCXPX+. YX", "YXYXYX:.{.G.G.G.G.G.x.w.;.t :.HXdXsXsXsXsXsXdXvXBXZXLXtX= YX", "YXYXYX:.{.G.J.x.9.;.r 9 q 0 #.KXvXsXaXsXvXBXCXHXiXg.*.= O YX", "YXYXYX:.L.9.-.y 9 q 0 = + #.HXbXdXbXVXZXcX8X,.3 $ . YX", "YXYXYX%.z.9 q 7 * o $.PXZXmXmX0Xs.0 $ X YX", "YXYXYX8 0 = o :.IXpXg.*.= O YXYXYXYX", "YXYXYX YXYX@.#.2 @ . YXYXYXYXYXYX", "YXYXYX YXYXYXYXYX YXYXYXYXYXYXYXYXYX", "YXYXYXYXYXYXYXYXYXYXYXYXYXYX YXYXYXYXYXYXYXYXYXYXYXYX" }; qosmic-1.6.0/icons/favicon.png000066400000000000000000000031471304321135200162560ustar00rootroot00000000000000‰PNG  IHDRÀ´u pHYsHHFÉk> vpAg\Æ­ÃIDAT8ËÁ X÷ð»ûß+wÉ]‘„$$D•ãg±Ÿ >K]û¡kujÕʤ~Òíë¾U‹}Ìj7g¿ê°íª­“Ú ŽÖRßT)ö›¯Ï‰­ DÒ$æuyÜå’»ÛïÐ-èAò0!:Ý:¤¹Ž=0ø K§°úNƒÉÙ‰þÓkw»J÷åƒüçžDà}È<sÑkø,ø4<^ —Án$¯k z¶i¼JRñÉûááëHª| þM^¥>£nT]È$¢‚áKq{t>ÕþÅä0wa˜—Z­o5ÜwìQÚ”L¶6z;Ò÷Ц>­\•ÿ‹;37™æIëeÞ³ùkW“€.BõyJCaèPÔ u¡[Ðw‰dò5¦¦ºBl^ÔÒQ¹QmTÿ ’a’f{¬ˆ­Çó{EP.Ëv¸±€£Ô(u€{£0õyâÍÄ ã?c‹ ¹ä À‚J|7À¼Øn €Íh+ÑŽ¶£,ÞƒºÑYD‰²N­W^Ælªæ¬i-³h&5µ9 沼˥m™RWz&ñ=‘Õý§ èì}êca2¥‹¼%ÍLÉNú.}<·Ži`WäOGÀ‹  _O”âõZˆ^«½d®Äî` Õ¨[ ;féSª•g•_ÁçàÛˆ¤dXâ¨`Ù|kÂþØñYõç? _#Ûk´gFGíᢖßZž¨Üaœo ¹n)…ŠN¾B½PÔ–Þ”.‰»éˆ–1 ±¿ã&ì‡r'Œ½% ,ˆ’—¨ÃTÂÑÈäW“®L÷ù ó橼`8 ¾™ü$Y¹cñ[6L['–ˆÇ"4ÿF¬×¯Á—ø>@æ’uÌQÔ‚Î#_G4Èq€Tçˆ^²EÛTz°´g¡§ˆ-ž¨¾bÌé1ï`‹Ø¾WiQ ê׈ŠpÈf1.äïú úŒö‡ ÷x#%=xï‡ê!ìFµ«µ§Ín§žb?ÔoÌoµN·%Ë?°ž´~½ %÷ÂAø0®‡¨íQmô¹tftÙè ²[¸/<£î‹Œ†»Ò+33g3ÇÍÃæmŽz —.ñóã4¿Þÿ<^þ3riGêæ0­6ÆËŒ ¨[T5’ú0éM+ˆ¸±MH  Íl—~.êç[b/eû¢¾h‹Ô.PBCb¾¿ó—á{'Çž¸óQâ‹t‚t)¾XvXNkÂ-øºJ~WÁ²}*­êWpj`Ä÷Nê@rN<²CðӀɛ·ÞÕï¢é¾äêä e8Ô÷¸'^+l:cTxYØ363Ü~ø3ß[cÇ~t+›ÈIsÁ¢+rHþYâu6e~ ú«*¨|º;-ÆÛsà*Ö&gåáì,ÛÈ•âÛb3žñ—øý+&&—x;À¿´\lžŽ‘;äýÙå‰YñåAˆï‹-õUO_ð“nsÃê²-É/òœ¾K5òuâOâ{Ñ*\Âgп†<é/?RqjÑTqê—x«ä– ÓWM‰©“CPŽ*Ê[³~ùZš‹l ¼¤zV=¯ì?<. M€‚Š‚fo(_ãΫ£ˆ#Ä }%À®ÞÄE‹}kÅÅb?†oÆiM¾ßI­ùx¸vàOü"þq Ú¥†ÿœ_tgîH…©w‚pðÆ­¶Øë±\ÿ]4fñf¸\WQ³|"§†ëwÒ‘O#n_gìŸÑ_ºV}MåÉyd;ûªýœ£­zQf¶Ä$§Ž×Ž_¼kÐh4Ë å°6!ÍäiaºÓoHKh„öÜKŠÉ½“_pøÎÿ– ³|y…fIEND®B`‚qosmic-1.6.0/icons/filenew.xpm000066400000000000000000000120111304321135200162700ustar00rootroot00000000000000/* XPM */ static char *filenew[] = { /* columns rows colors chars-per-pixel */ "32 32 178 2", " c black", ". c #191000", "X c #221700", "o c #452E00", "O c #4A3100", "+ c #4E3400", "@ c #553800", "# c #604000", "$ c #6A4600", "% c #6D4800", "& c #704A00", "* c #724C00", "= c #744C00", "- c #764E00", "; c #785000", ": c #805500", "> c #815500", ", c #835700", "< c #865900", "1 c #875A00", "2 c #8A5B00", "3 c #8A5C00", "4 c #8B5C00", "5 c #8C5D00", "6 c #8D5D00", "7 c #8F5E00", "8 c #805911", "9 c #905F00", "0 c #906000", "q c #926000", "w c #946200", "e c #956300", "r c #966400", "t c #976400", "y c #956913", "u c #926C22", "i c #9B7732", "p c #B18D48", "a c #B28E49", "s c #B4904A", "d c #BAA373", "f c #A1A195", "g c #ABAB9F", "h c #ADADAB", "j c #AFAFAB", "k c #B3B3A6", "l c #BCBCB8", "z c #BFBFBC", "x c #CBB489", "c c #CBB58A", "v c #CDB78B", "b c #CAB891", "n c #C9BB9E", "m c #CEBEA2", "M c #C6C6BC", "N c #D9C8A8", "B c #E8E1BA", "V c #E8E1BB", "C c #FEFFA1", "Z c #FFFFA0", "A c #FEFFA3", "S c #FEFFA4", "D c #FEFFA6", "F c #FEFFA8", "G c #FEFFA9", "H c #FFFFA8", "J c #FEFFAA", "K c #FEFFAB", "L c #FFFFAB", "P c #FEFFAC", "I c #FFFFAC", "U c #FEFFAE", "Y c #FEFFAF", "T c #FEFFB0", "R c #FEFFB1", "E c #FFFFB0", "W c #FEFFB4", "Q c #FEFFB5", "! c #FFFFB4", "~ c #FEFFB8", "^ c #FEFFB9", "/ c #FFFFB8", "( c #FFFFB9", ") c #FEFFBB", "_ c #FFFFBA", "` c #FEFFBD", "' c #FFFFBD", "] c #FEFFBE", "[ c #FFFFBE", "{ c #C8C8C1", "} c #CACAC4", "| c #CBCBC6", " . c #DBD2C1", ".. c #DEDFCF", "X. c #D4D4D1", "o. c #E1D5C1", "O. c #E3D9C3", "+. c #E5DCCC", "@. c #E8E8D3", "#. c #ECECD7", "$. c #F0EBDA", "%. c #FEFFC2", "&. c #FEFFC3", "*. c #FFFFC2", "=. c #FEFFC7", "-. c #FFFFC7", ";. c #FEFFCB", ":. c #FEFFCC", ">. c #FFFFCC", ",. c #FEFFCE", "<. c #FEFFD0", "1. c #FEFFD1", "2. c #FFFFD0", "3. c #FFFFD1", "4. c #FFFFD3", "5. c #FEFFD5", "6. c #FFFFD5", "7. c #FEFFD6", "8. c #FEFFD7", "9. c #FFFFD6", "0. c #FFFFD8", "q. c #FEFFDA", "w. c #FFFFDA", "e. c #FFFFDB", "r. c #FFFFDC", "t. c #FEFFDE", "y. c #FEFFDF", "u. c #FFFFDE", "i. c #FFFFDF", "p. c #E9E9E7", "a. c #F3F3E9", "s. c #F3F3EB", "d. c #F5F5E8", "f. c #F8F8E3", "g. c #FEFFE0", "h. c LightYellow", "j. c #FFFFE1", "k. c #FEFFE3", "l. c #FFFFE3", "z. c #FDFEE7", "x. c #FEFFE4", "c. c #FEFFE5", "v. c #FFFFE4", "b. c #FBFBE9", "n. c #FEFFE8", "m. c #FFFFE8", "M. c #FFFFE9", "N. c #FFFFEA", "B. c #FEFFEC", "V. c #FEFFED", "C. c #FFFFEC", "Z. c #FFFFED", "A. c #FEFFEF", "S. c #F4F4F0", "D. c #F4F4F3", "F. c #F5F5F4", "G. c #F8F8F6", "H. c ivory", "J. c #FFFFF1", "K. c #FEFFF3", "L. c #FFFFF3", "P. c #FEFFF4", "I. c #FFFFF4", "U. c #FEFFF7", "Y. c #FFFFF6", "T. c #FFFFF7", "R. c #FBFBFB", "E. c #FFFFF8", "W. c #FFFFF9", "Q. c #FFFFFA", "!. c #FFFFFB", "~. c gray99", "^. c #FEFFFD", "/. c #FFFFFC", "(. c #FFFFFD", "). c #FFFFFE", "_. c gray100", "`. c None", /* pixels */ "`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.", "`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.", "`.`.`.`.`.`.`.`.`.w 2 1 w 4 4 4 6 w 9 6 - `.`.`.`.`.`.`.`.`.", "`.`.`.`.`.`.`.`.r s p p c c c c N O.+.o.y # `.`.`.`.`.`.`.`.", "`.`.`.`.`.`.`.`.r ).).).).).).).).F.p.). .& o `.`.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w ).E.).E.).E.E.E.S.X.).R.n $ + `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w E.Y.Y.E.Y.E.E.E.a.| ).).D.m % `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w E.Y.Y.J.Y.J.Y.Y.a.| ).).).D.> `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w Y.J.J.J.J.J.J.J.a.M l h h { ; `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w Y.B.B.B.N.N.B.B.b...k f h } ; `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w J.N.N.N.N.N.N.N.l.f.#.@.#.a.> `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w J.l.l.l.l.l.l.l.l.l.l.l.l.J.> `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w J.r.l.l.r.l.r.l.r.l.r.l.r.J.1 `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w B.r.r.q.q.q.q.q.q.r.q.q.r.B.> `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w N.5.5.5.5.q.5.5.5.5.5.5.5.B., `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w N.<.<.<.<.<.<.<.5.<.<.<.<.N., `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w l.,.;.;.;.,.;.,.;.,.;.;.;.l., `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w l.-.-.-.-.-.-.;.-.-.-.-.;.l.> `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w l.-.%.%.%.%.%.%.%.%.%.%.%.l., `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w r.' ' ' ' ' ) ' ' ' ' ' ' r., `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w r.) ) W ) ) ) ) ) ) W ) ) q., `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w q.W W W W W W W W W W W W q., `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w 5.Y Y W Y Y Y Y Y Y Y Y Y 5., `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w 5.J J J Y J Y Y J Y J J Y q., `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w 5.J J D J J D J D J W ) ,.$.- `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w <.Z D D Z D J Y ' ,.B b i - O `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w <.Z Z Z Y ) <.B d u & @ X `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w ,.J ) ,.B d y & o . `.`.`.`.`.`.", "`.`.`.`.`.`.`.`.w Y.V d u & o . `.`.`.`.`.`.`.`.", "`.`.`.`.`.`.`.`.1 4 & o . `.`.`.`.`.`.`.`.`.`.`.", "`.`.`.`.`.`.`.`. `.`.`.`.`.`.`.`.`.`.`.`.`.`.", "`.`.`.`.`.`.`.`. `.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`.`." }; qosmic-1.6.0/icons/fileopen.xpm000066400000000000000000000143711304321135200164530ustar00rootroot00000000000000/* XPM */ static char *fileopen[] = { /* columns rows colors chars-per-pixel */ "32 32 257 2", " c black", ". c #0B0900", "X c #130E00", "o c #161100", "O c #231A00", "+ c #352600", "@ c #3B311C", "# c #433100", "$ c #4F3B00", "% c #4A3E16", "& c #4A3D22", "* c #4D421A", "= c #54420D", "- c #4E4529", "; c #484338", ": c #484233", "> c #5B4B24", ", c #624500", "< c #674D00", "1 c #6D4D00", "2 c #6E4F17", "3 c #6D5200", "4 c #775500", "5 c #745B0F", "6 c #795200", "7 c #7A5A00", "8 c #715C18", "9 c #764B0A", "0 c #6C5423", "q c #6D592E", "w c #785E27", "e c #735626", "r c #665736", "t c #7A631D", "y c #7A672E", "u c #776535", "i c #5C5956", "p c #78704F", "a c #75726E", "s c #8D4F00", "d c #815700", "f c #835A00", "g c #8A5C00", "h c #866400", "j c #966100", "k c #956F00", "l c #9C6100", "z c #9D7500", "x c #856B2A", "c c #8C752A", "v c #8C723B", "b c #977939", "n c #A45D00", "m c #A26100", "M c #AA680D", "N c #AB6700", "B c #A07700", "V c #A57B00", "C c #AB7A00", "Z c #AA7300", "A c #AF721A", "S c #B87E00", "D c #B57B00", "F c #B0731A", "G c #B47C26", "H c #B77E28", "J c #897F59", "K c #977C40", "L c #927F58", "P c #807A6C", "I c #9C821D", "U c #9F8A35", "Y c #AC8000", "T c #B28500", "R c #B68800", "E c #BB8B00", "W c #A78337", "Q c #A28B31", "! c #AF9535", "~ c #B58E3A", "^ c #B88633", "/ c #B49936", "( c #BCA039", ") c #998445", "_ c #978657", "` c #8B8264", "' c #8E8572", "] c #978864", "[ c #978C75", "{ c #9F9072", "} c #A38845", "| c #A48952", " . c #AA965C", ".. c #A89156", "X. c #B5934D", "o. c #B39D45", "O. c #B49755", "+. c #AB984A", "@. c #AD9A65", "#. c #A79778", "$. c #A59874", "%. c #A29B7A", "&. c #A79775", "*. c #BDA959", "=. c #B3A46C", "-. c #B1A07F", ";. c #B5A97A", ":. c #BEB37B", ">. c #C49200", ",. c #C89500", "<. c #CC9800", "1. c #C69812", "2. c #D2A31C", "3. c #C2A63E", "4. c #D7AE37", "5. c #C29840", "6. c #C29B4E", "7. c #C2A641", "8. c #C6AA43", "9. c #C8AC45", "0. c #CBAF49", "q. c #CAA746", "w. c #C4A158", "e. c #CAA65D", "r. c #CEA857", "t. c #CFA95A", "y. c #C5AC50", "u. c #CDB14B", "i. c #CBB358", "p. c #CAB152", "a. c #D2AB59", "s. c #D1B54D", "d. c #D4B951", "f. c #D6BC5B", "g. c #DDB45E", "h. c #D9BD56", "j. c #D2B753", "k. c #DAAB48", "l. c #CEAE69", "z. c #CCAD67", "x. c #CCB662", "c. c #CAB26B", "v. c #C8B66B", "b. c #CEB775", "n. c #CEBE7F", "m. c #D3AD66", "M. c #D5BE64", "N. c #D4BF6D", "B. c #E4B34B", "V. c #E0B75F", "C. c #E1B85F", "Z. c #E4BA61", "A. c #E9BE63", "S. c #DDC159", "D. c #DAC269", "F. c #D4C176", "G. c #D8C67F", "H. c #E1C55D", "J. c #EFC05D", "K. c #F1C15E", "L. c #E0C264", "P. c #E5C961", "I. c #EDC164", "U. c #E9CD65", "Y. c #EFD36B", "T. c #F2C564", "R. c #F6C868", "E. c #F8C760", "W. c #FBCC6A", "Q. c #FDCB63", "!. c #F1D56D", "~. c #FFD06C", "^. c #F5D972", "/. c #FED175", "(. c #FADE77", "). c #E4C87A", "_. c #FEE27C", "`. c #8F9192", "'. c #9A9A96", "]. c #A79F83", "[. c #ADA583", "{. c #A7A399", "}. c #BBAC86", "|. c #BDB088", " X c #BBB298", ".X c #A7A8A6", "XX c #ADAEB0", "oX c #B5B6B4", "OX c #BABCBC", "+X c #C6B38E", "@X c #D3BE80", "#X c #D0BC95", "$X c #C6BFA6", "%X c #C5C29D", "&X c #D2C283", "*X c #DAC789", "=X c #DBCA8B", "-X c #D5C489", ";X c #DBCD94", ":X c #D6C699", ">X c #CFC8B1", ",X c #C8C6B7", ".L.ZXyXT.K.E.wX ..XKXKXR YXYX", "YXYXYXYXYXYXYXYXYXYXYXYX V E 4.ZXsXW.K.I.Z.O.{.KXUXUXMXk YXYX", "YXYXYXYXYXYX R E 7 YX< E 2.aXsX6XC.T.Z.w.[ xXUXUXUXUX2X3 YXYX", "YXYXYXYX R >.).5X,.T ,.5XCX8XK.T.A.a.] OXUXUXUXUXUXUX2.O YXYX", "YXYX Y E Z.ZXsX7XsX0XCXyXR.K.I.V._ .XUXUXUXUXUXLXKXJXV D N S 7 ", " z E 4.fXsX/.K.~./.6X~.I.I.C...'.KXUXPXPXPXLXKXGXbXl.N m.SXm.D ", " E 0XgX7XE.W.W.~.~.R.I.Z.w.' bXUXUXUXPXPXLXmXbX$X) ~ aXSXpXBXn ", " <.CXT.Q.~.W.W.R.I.A.t._ hXUXUXUXUXPXLXGXnX,X .t XAXSXeX4Xl.Z ", " <.sXB.W.W.W.T.A.g._ oXUXUXUXUXUXLXLXmXcX=.5 $.BXgXeX!.D.3Xm + ", " <.sXB.R.R.A.V.| {.KXUXUXUXUXLXKXGXvX|.c u qXdXgX^.U.f.3XH f ", " <.sXB.T.Z.m.[ nXUXUXUXUXPXKXHXbX,X) e X) y >XAXAX_.S.h.h.u.s.d.F.6.g YX", " >.9X~ } u '.LXKXmXxX .5 [.IXAX_.!.S.h.h.d.8.s.D.n.j YXYX", " >.:XW v & kXmXvX;.t ] BXAXrX!.U.u.S.9.u.3.7.i.;XM 1 YXYXYX", " E #Xb u : nXcX_ u 1XSXgX^.U.H.S.d.8.s.d.u.b.-XG g YXYXYXYX", " R +Xc r a zX[.= -XdX_.U.d.P.h.d.u.3.8.N.=Xw.l 1 YXYXYXYX", " T }.x > `.oX> %.*.S.S.h.S.7.d.h.0.p.n.c.M d . YXYXYXYXYX", " C ].w @ XXu p *.( h.S.s.u.u.u.p.N.*X^ g + YXYXYXYXYXYX", " Z &.e ; ` * :.o.S.S.S.u.( 9.x.&XX.j , YXYXYXYXYXYX", " B { 0 i % [.o.u.S.d.h.9.M.&Xz.M 6 YXYXYXYXYXYXYXYX", " z { 0 - J *./ S.9.d.i.G.&XF g O YXYXYXYXYXYXYXYXYXYX", " z $.2 w =.! s.d.p.N.;X^ l , YXYXYXYXYXYXYXYXYXYXYX", " B &.9 ;.Q / j.x.@Xl.m 6 YXYXYXYXYXYXYXYXYXYXYXYXYX", " h W @.+.I y.&Xb.F 7 O YXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", " $ s %XU F.=X^ j # YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", " g O. c #23224B", ", c #262353", "< c #292655", "1 c #2B2C54", "2 c #2C2C5B", "3 c #293746", "4 c #2D304F", "5 c #243243", "6 c #2E315D", "7 c #363647", "8 c #303E4A", "9 c #30325E", "0 c #3C3C53", "q c #2E2E60", "w c #2F3160", "e c #302E63", "r c #313164", "t c #363861", "y c #353868", "u c #384650", "i c #284F6B", "p c #2D547B", "a c #3B486A", "s c #36597D", "d c #3D5D7C", "f c #4C4C4C", "g c #40405A", "h c #414E56", "j c #4B585E", "k c #49545E", "l c #555555", "z c #4D4D6B", "x c #434675", "c c #4B5660", "v c #4F5962", "b c #41517E", "n c #4B507D", "m c #515C67", "M c #505D6E", "N c #5C5D7D", "B c #546066", "V c #54626D", "C c #5B646D", "Z c #55677A", "A c #556B78", "S c #5D6772", "D c #6B6B6B", "F c #646464", "G c #616C73", "H c #63707D", "J c #6B7679", "K c gray45", "L c #00418E", "P c #004494", "I c #004894", "U c #044F98", "Y c #03509B", "T c #0A5198", "R c #13579C", "E c #185DA1", "W c #285888", "Q c #2B6094", "! c #396D9A", "~ c #336A96", "^ c #3D719B", "/ c #226EB8", "( c #326EA8", ") c #326BA3", "_ c #3673AE", "` c #3A76B4", "' c #0B6FD1", "] c #0F75D8", "[ c #1479DA", "{ c #1B7CDC", "} c #466481", "| c #42749C", " . c #4A799E", ".. c #506A84", "X. c #5F678D", "o. c #576391", "O. c #5A6592", "+. c #5F6893", "@. c #5B738B", "#. c #507DA1", "$. c #626283", "%. c #636A94", "&. c #656F98", "*. c #657A8F", "=. c #6B7299", "-. c #717191", ";. c #797998", ":. c #687BA6", ">. c #2281DC", ",. c #3F81C0", "<. c #3988D7", "1. c #2785E1", "2. c #2E8AE3", "3. c #368FE5", "4. c #3690E6", "5. c #3D93E7", "6. c #3D94E9", "7. c #57839E", "8. c #4787BC", "9. c #5480A1", "0. c #5B84A3", "q. c #6E8496", "w. c #6E8B9A", "e. c #7D848E", "r. c #728597", "t. c #738598", "y. c #768899", "u. c #7B8B9B", "i. c #6489A5", "p. c #698EA7", "a. c #6D8FA9", "s. c #6E81AB", "d. c #7683A6", "f. c #768CB7", "g. c #7395AD", "h. c #7C96B0", "j. c #4086CA", "k. c #4986C3", "l. c #4284C3", "z. c #498ED2", "x. c #4D95DB", "c. c #548DC5", "v. c #5D92C8", "b. c #5593C9", "n. c #5097DE", "m. c #5198DE", "M. c #4296E7", "N. c #4895E2", "B. c #4B99E5", "V. c #4A9CEB", "C. c #4599EB", "Z. c #529DE6", "A. c #589EE2", "S. c #54A1EB", "D. c #5AA1E6", "F. c #5AA5EB", "G. c #5EA8EF", "H. c #53A3F1", "J. c #5EAAF2", "K. c #6699CB", "L. c #799BC8", "P. c #7EA6C9", "I. c #60A2E5", "U. c #65A7E8", "Y. c #6BABE9", "T. c #68ADF2", "R. c #67B0F5", "E. c #6DB3F6", "W. c #70ADEA", "Q. c #75B0E9", "!. c #7CB5EB", "~. c #73B9F8", "^. c #7BBDFB", "/. c #7CBAF6", "(. c gray55", "). c #828899", "_. c #84949E", "`. c #918E8A", "'. c #949494", "]. c #8F8FA9", "[. c #8997A5", "{. c #8A9AA9", "}. c #9A9BAF", "|. c #9399A9", " X c #9FAAB5", ".X c #A29E9B", "XX c #A7A7A7", "oX c #ABABAB", "OX c #A3A3B4", "+X c #A8A8B7", "@X c #A3ABB3", "#X c #B4B5B5", "$X c #B0B0BC", "%X c #B7B9BC", "&X c #BBB7B3", "*X c #BBBBBB", "=X c #82B1DB", "-X c #81B7EC", ";X c #88BBED", ":X c #86BAED", ">X c #AEBBC8", ",X c #A6BDCD", ".U i 9 YXYX", "YXYXYXo.2X] L C UXDXcXzXkXkXkXjXjXdXdX%X%X&X%X*XN.' ~ 6 YXYX", "YXYXYXo.1X] P k hXoXXXXXoXoX#X#X*X%X&X%X%XdXkXxXx.[ ~ 6 YXYX", "YXYXYXO.3X[ I m FXkXjXjXkXkXkXkXkXkXzXzXzXcXZXSXx.{ ! 6 YXYX", "YXYXYXo.3X{ I S UXvXxXzXkXkXkXkXkXjXdX*X%X#X&X%XZ.1.^ 9 YXYX", "YXYXYXO.4X>.U j jX#X#X#X%XdXdXkXzXkXzXzXcXvXDXJXA.1.| 6 YXYX", "YXYXYXO.6X>.T V PXZXZXZXAXSXDXDXFXHXDXHXHXHXHXSXI.2.| 9 YXYX", "YXYXYXO.6X2.T G UXLXDXDXAXZXZXAXZXvXcXzXkXkXkXgXY.3. .6 YXYX", "YXYXYXO.9X4.R m zXdXdXkXzXvXAXDXHXLXPXPXIXUXUXUXQ.6. .9 YXYX", "YXYXYXO.9X5.R H UXIXUXUXUXUXUXUXUXUXUXUXIXKXJXBX-XC.#.9 YXYX", "YXYXYXO.eXM./ h.UXUXIXKXBXNXnXuXyXwX5X:X!.Y.Y.Y.D.H.9.6 YXYX", "YXYXYX+.rXB.<.x.Q.;X-XQ.Y.U.U.D.Z.Z.B.B.C.V.V.B.B.T.0.9 YXYX", "YXYXYX+.tXB.N.B.B.B.B.C.V.V.H.H.H.D.N.z.8._ ( <.D.R.0.9 YXYX", "YXYXYX+.tXS.Z.F.D.m.z.l.` ) Q W p s } @.r.[. X>XG.E.0.9 YXYX", "YXYXYX+.pXU.m.) p d ..*.u.|.+X @ o YXYXYXYXYXYXYXYXYXYXYXYX", "YXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX", "YXYXYX YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX" }; qosmic-1.6.0/icons/icon.jpg000066400000000000000000000102541304321135200155520ustar00rootroot00000000000000ÿØÿàJFIFHHÿÛC  !"$"$ÿÛCÿÀdd"ÿÄÿÄ:!1AQa"q‘¡#2B±Á3bÑáð’$RS¢ñÿÄÿÄ+!1A"Q‘2q±ÁC¡ðñÿÚ ?üwKá—BT¥¹H·>_\wwYP%"Ra@}Æ*\@¼Ž]1uÈø êW„¤…, Žý· ;e5*£¨KÌ‘0Bµ™ Äî}°c2 §V^ªú@¿†Y%¥óI#GQÜSN6|A ANÄuì9zàÿU¢•ä2êK¨wùø¬Líc"~{Î,ÑÃòH‹õ(6‡]q ­?Ö“¦Êýv¿nxjáæUU—æ9fÒ_d¤T[úumÌ s4ªò§rú’­tî£ÄC©:R¤L3bØí1ÃÎLΆ¬hÔRPé2{‚”›ýqv…'â^ä[ØT~´ØO&ý7±ÚL\ z”¶UÀ—/q¼L6ýq¦ñ¦TÕ6jµ0>åa md\¥Wy˜‰6¼m¾«)]liHV•¨éA…Œwž§®qlàðË"׆¢F¡¤Á_Ÿ¿#‰ONº‡ÒH'` 63ôÿ¼ª"ã¡(0|À ÿnø?ùb)2‡ó׊[ª´ª÷ÜxôÅ:tå‚NX³“Wà5¶PzoõœP€ ’©;Zg]BðKvÚßÛ‡6)“ñÚܧl*{¶ÂŽ C„ÿ-Jå$L]M7Œ°´ŽÅI®&#ÓgdªB@Q>i´G¼sÁvÍE­)W€­BEÊOö1ÿ,qmà½)[(q ÙCʨÿzàÆKEMRï‚ÍJaÁá­¥•v‚lbÞv¶Jž)Q ÔR-‚¥¥ÁvÐï«—IóZ$(xªB’5)BÓ9ùcíÚ:š’\iÆÜljI¸R. ß¿<vˆ>–+iéàîâS 9m3ÚOL:ÛÛºC¼5XÝm"òÌÄýÛ‚[x‹6I}Äo϶ #/~‘i¤S iJ1ùI7¿;ô=𿔡स†IIJTŸaÏå^BßÚyxýCI aEwv9סï›vê¬>EIà³]D+øI§Û»”Š,8"|¦JO®ûíîe–­¥ü/1)H…µ¯Øˆ¾5î d>ëÙ{–MZ •*a@ÊcÞ¤áo?ÉV…8ƒ¨~/-·¿èo‹÷6ÝH)"–š·“)çgBQ¨È!WQÓÈr¿^½°ÃüDËÆ]•Rä,#Ä4͇*f ]à÷ _¦¿‡Ü8—+Å][aTÔˆS®%Bf6OC&ÞøQã¤9_›Ô¾ñ:¥x‹;‚n —§¸ÅIZtè·Ý’Õ–eS$ºù)º´€™’Ê×Ç´y[ÏTÚdº³b‘%$òƒὌ꺅xhKmË¡ß*P •IõŸY¶9æ+g/`ÑeáhBÐC¯éó­;ÀèžqÚü±•áqæ—5ËòZPY­¨­ƒçè”ëÿïs1UlT$éJàÓ{JLâb’ÛJøÂ/¶^f`YiÚ Ú;_ýçë%P¨! &I‹›cê™~à ͉²‡~Ø"Û!Æ•RĤ©@X‹X~±êFø§ç‚YNkVÐeÇRÕ];è -¾€¤•¤‰™Aﶸ^‹†³%i»–üRt)‡F¦šÄ%$Zävð›ANjrU#ÅÔªS"âÉT$ž|À·|]Éд¨"ÉRá`ûoó늒rYOÔSCûœ˜R­.ü!RV¡´B¾àƒ½ÏöÁz°ÒÔ6héBtê žgýç‹ü™WQeAö^qÝ)I'ï.©ÄÔsí‡l£6Éó-?ieèmÛ}õ4$Ïtì}£†…½4“ŠÛå”ÅÝ5!:*R §4ˆ˜çýþ~„ø›&MCéªJ<µ@´¼{ƒ†ºaÕòš¶ê¸A:WéiÁú^z®‘4å…%Æœ’.±8ùœ:w4i¥—÷#† ¿—§'àÝ!0õi¿] Ûæ©ÿŽ3JŒ•/¬»Y’L˜ºAß¾7®1ÊUSSá¡¢¦Hma™<‡¸Ž5ÏHCY‹…#h 9)é˜Ny¢ë…cÃT¹¦þŸ,LdøÊý¤þFéC5 KCêMa–ÔÞ•6Pµ¹_Û <-̨;tÈ©×भÅ.e)@:¼A܃`o˸z»1e-¯1¨k 㶇böÕæ‹oanXÕ^â|ƒ+áï²ØË™UzÛ ”™RP [Q{Kzmj“àT¤ÄÜØŠª•W8ÚmC:à!” ýP9 î7ÀtWÑÑU-—몒°|GT|4ï Ïb~X©æôƒªxVÕ³¿óZJ€<¡I¸¶À‡šA—)kiŸR’T¤øšd‹Á*/k_cV¿›19!»6Îjë ;‹\¥ÄùR?–ƒ0z6'mùáƒT¬Ç3¦e'[¯, zuè~¸Ïi‘Vr—Pûo¶ ãJÞIS=ÌFø«ì^«Ï]RRòšð ŸÆ JÈž‚}$b͵YJ¦e÷–ÃOñ+iŠjU(SÑ 6Ù‹§Ÿ½Î£7EC®åîºÚâaÉ•ô@?>XÌ«s„TÖ,y‚¥A+˜ïGIÅŠÚ׊reLÄ›i/ÎÀoûŒ5ßå¼p ê§ß¦®[J:B…ê‘cûÿŒ^Ï3UÔ¹€wUCCÀuM¨Á1© ¢bFÉ瀵µiÎ2´f yjšl%ô§ÿ!íh&:Î*ä5ËyšÌ±J…Ô6t$À% t˜)ÛósÄ:Øn+‡ÁØ#\Y™Ó„%uEÀ…Áñ±€`‹[xëß³×rlÆUô”ja*PŠeHB¢G—3kò‹ó˜Ô„TxE*Rģ̑7¼ï“}Ž+eù“´ <вÛB‘‘ÏéÌv“ºoË=ÐÅ¥M=cP„¨¥µ7 HŸ|LVPõRÕS–Ó¿YNáÔ’F“Í$Eˆÿ8˜¨èÉñÉ,„¸B‘ªŒÑ”T:„ýê‚ó§_›¨žX ›fu¯Õ?VóÊ[Êxʉ;ëí¿,LL:O—¿èÊ9Û«Pj À[Í…/¡%DôúúED¾âŸnHójä-}'鉉ŠuÖÉ.|4ëÊ©@/9÷€W¸"~G_Ä Â¢ ÊiÚÐ[4BÓª\Qóya‰‰+fü<È>P˜ÒÕTûipé.­ZÔÌ^/êpO4RÓAO÷ŠQKÊP$Ü£ú~¸˜˜L^Ò k"ut¹ý!Huå6ê ^}­Šù’>ˆÝK Z JB•íÈLL;øýÿHÊ`ÒYÍ«B?Ä(è i¸6ú}p»Q> *%)Q‰÷—îq11Bãë‘8ðwÊß©ÐÝK­$(ÙAïq‰‰‰…)É.CƒÿÙqosmic-1.6.0/icons/qosmic.xpm000066400000000000000000001404201304321135200161400ustar00rootroot00000000000000/* XPM */ static char * qosmicicon_xpm[] = { "100 100 1810 2", " c #000000", ". c #040408", "+ c #040508", "@ c #0A0A13", "# c #030306", "$ c #08080F", "% c #111221", "& c #090911", "* c #05050A", "= c #06060B", "- c #0B0C16", "; c #000001", "> c #040509", ", c #06060C", "' c #10101F", ") c #1B1C35", "! c #4C4E92", "~ c #151629", "{ c #111121", "] c #0D0D19", "^ c #10111F", "/ c #151528", "( c #131425", "_ c #0D0D18", ": c #27284B", "< c #121223", "[ c #0B0B14", "} c #16172B", "| c #0B0B15", "1 c #0A0B14", "2 c #1A1B33", "3 c #343665", "4 c #0F101E", "5 c #1E1F3B", "6 c #393B6F", "7 c #4F5198", "8 c #2D2E58", "9 c #232444", "0 c #262749", "a c #0B0B16", "b c #0F0F1D", "c c #131324", "d c #141426", "e c #080810", "f c #10101E", "g c #040407", "h c #050509", "i c #020205", "j c #05060A", "k c #0C0C17", "l c #2C2D55", "m c #010102", "n c #020204", "o c #030305", "p c #010103", "q c #07070D", "r c #010101", "s c #090912", "t c #05060B", "u c #191930", "v c #31325F", "w c #3A3C70", "x c #20203D", "y c #16162A", "z c #1D1D37", "A c #141427", "B c #222343", "C c #252649", "D c #17172C", "E c #20213E", "F c #30325E", "G c #6366BC", "H c #363768", "I c #0C0C16", "J c #121323", "K c #18192E", "L c #17182D", "M c #0C0D18", "N c #1D1E39", "O c #0F101D", "P c #121222", "Q c #141527", "R c #090A12", "S c #222341", "T c #1E1E39", "U c #080910", "V c #020203", "W c #101120", "X c #0F0F1C", "Y c #0A0A14", "Z c #333462", "` c #3B3D72", " . c #0E0E1B", ".. c #131325", "+. c #0D0E1A", "@. c #141528", "#. c #191A31", "$. c #575AA7", "%. c #4D4F94", "&. c #21223F", "*. c #292A4F", "=. c #0E0F1C", "-. c #1A1B32", ";. c #0A0A12", ">. c #07080E", ",. c #07070E", "'. c #252648", "). c #06070C", "!. c #3D3F77", "~. c #42447E", "{. c #1D1E38", "]. c #16172C", "^. c #222342", "/. c #1C1D37", "(. c #30315D", "_. c #323360", ":. c #6467BC", "<. c #242547", "[. c #1F203C", "}. c #15162A", "|. c #1A1A32", "1. c #292B50", "2. c #151628", "3. c #1B1B33", "4. c #0D0E19", "5. c #030407", "6. c #111120", "7. c #4C4E91", "8. c #2F305A", "9. c #2B2C53", "0. c #191A30", "a. c #252647", "b. c #26274A", "c. c #282A4E", "d. c #6567BA", "e. c #343564", "f. c #2A2C52", "g. c #16172A", "h. c #1E1F3A", "i. c #0E0F1B", "j. c #1F1F3B", "k. c #1B1B34", "l. c #5355A1", "m. c #18192F", "n. c #20213F", "o. c #28294D", "p. c #42437D", "q. c #4D4F8D", "r. c #232545", "s. c #151529", "t. c #131426", "u. c #242545", "v. c #0E0E1A", "w. c #222241", "x. c #4B4D8F", "y. c #18182E", "z. c #2E2F58", "A. c #20213D", "B. c #454786", "C. c #6E71C9", "D. c #27284C", "E. c #242546", "F. c #12121F", "G. c #08070B", "H. c #2C2D54", "I. c #111222", "J. c #37386A", "K. c #484B8C", "L. c #2C2E56", "M. c #1C1D36", "N. c #212240", "O. c #2A2B51", "P. c #6A6EC4", "Q. c #40427B", "R. c #232443", "S. c #17182C", "T. c #010203", "U. c #17182E", "V. c #3B3D71", "W. c #373969", "X. c #28294E", "Y. c #31335F", "Z. c #2D2E57", "`. c #2D2F58", " + c #484A89", ".+ c #6A6DBF", "++ c #41437D", "@+ c #393A6E", "#+ c #2A2B52", "$+ c #2E305A", "%+ c #3B3C72", "&+ c #1C1C35", "*+ c #494B8A", "=+ c #1F203B", "-+ c #212241", ";+ c #323462", ">+ c #4A4C8E", ",+ c #7477D2", "'+ c #3D3E76", ")+ c #3F417A", "!+ c #3A3C71", "~+ c #2B2C54", "{+ c #1A1A31", "]+ c #40427C", "^+ c #51539A", "/+ c #37396B", "(+ c #1D1D38", "_+ c #232343", ":+ c #37396A", "<+ c #3C3E74", "[+ c #7073CD", "}+ c #5658A0", "|+ c #4C4C8B", "1+ c #2B2D54", "2+ c #1F203D", "3+ c #353767", "4+ c #2E2F59", "5+ c #3E3F77", "6+ c #292A50", "7+ c #21213F", "8+ c #585AA7", "9+ c #232445", "0+ c #333564", "a+ c #38396C", "b+ c #797DD5", "c+ c #424481", "d+ c #36386A", "e+ c #1B1C34", "f+ c #51549E", "g+ c #41437F", "h+ c #17172B", "i+ c #0C0C18", "j+ c #31325E", "k+ c #4F5295", "l+ c #30315C", "m+ c #484A8B", "n+ c #7A7ED8", "o+ c #595BAC", "p+ c #51539C", "q+ c #383A6D", "r+ c #454783", "s+ c #52549E", "t+ c #020305", "u+ c #52549A", "v+ c #474985", "w+ c #434581", "x+ c #3E4079", "y+ c #393A6D", "z+ c #444583", "A+ c #696CC2", "B+ c #7073CA", "C+ c #313360", "D+ c #131427", "E+ c #41437E", "F+ c #07080F", "G+ c #5658A1", "H+ c #333563", "I+ c #4C4E93", "J+ c #474989", "K+ c #8387E1", "L+ c #454785", "M+ c #353666", "N+ c #2F315C", "O+ c #08080E", "P+ c #6265BD", "Q+ c #3B3C71", "R+ c #121324", "S+ c #6669C0", "T+ c #343666", "U+ c #464887", "V+ c #7E82D8", "W+ c #373869", "X+ c #333463", "Y+ c #252749", "Z+ c #1E1F39", "`+ c #6063B4", " @ c #6568C3", ".@ c #1C1C36", "+@ c #6063B2", "@@ c #323461", "#@ c #40427D", "$@ c #363869", "%@ c #686AC3", "&@ c #7478CA", "*@ c #5658A6", "=@ c #27294D", "-@ c #6B6EC6", ";@ c #5456A2", ">@ c #53569A", ",@ c #484A8C", "'@ c #3B3D73", ")@ c #3C3E75", "!@ c #3F4079", "~@ c #51549D", "{@ c #8C90EE", "]@ c #5C5EB1", "^@ c #4F5199", "/@ c #53569B", "(@ c #777ADF", "_@ c #5C5EAE", ":@ c #5E61B1", "<@ c #26284B", "[@ c #3D3F76", "}@ c #5456A3", "|@ c #878BE9", "1@ c #5F62AF", "2@ c #5457A3", "3@ c #4D4F95", "4@ c #787BD8", "5@ c #5F62B6", "6@ c #6365B8", "7@ c #4A4C8F", "8@ c #444683", "9@ c #383A6C", "0@ c #494B8D", "a@ c #575AA8", "b@ c #6467BE", "c@ c #8C90ED", "d@ c #6062B9", "e@ c #424480", "f@ c #353768", "g@ c #2E2F5A", "h@ c #2F305B", "i@ c #41437C", "j@ c #888CF2", "k@ c #424581", "l@ c #040409", "m@ c #3E4078", "n@ c #6A6DC4", "o@ c #4B4D90", "p@ c #3A3B70", "q@ c #41427D", "r@ c #40417B", "s@ c #4B4D91", "t@ c #494C8E", "u@ c #6467C1", "v@ c #9195F3", "w@ c #696DCC", "x@ c #52549F", "y@ c #464888", "z@ c #7376C9", "A@ c #3E3F78", "B@ c #454784", "C@ c #6A6DC2", "D@ c #474888", "E@ c #2D2E56", "F@ c #50539B", "G@ c #585BAB", "H@ c #8387E5", "I@ c #7C80DC", "J@ c #6466C0", "K@ c #444684", "L@ c #3F417B", "M@ c #3A3B6F", "N@ c #383A6E", "O@ c #5E60B5", "P@ c #8C90F0", "Q@ c #5E61B5", "R@ c #26284A", "S@ c #1A1B31", "T@ c #2A2A4D", "U@ c #4D5093", "V@ c #6366B4", "W@ c #454886", "X@ c #5557A4", "Y@ c #5B5EB0", "Z@ c #6D70D2", "`@ c #9397F3", " # c #6163BB", ".# c #42437F", "+# c #6E71C8", "@# c #9094F8", "## c #343565", "$# c #2C2D56", "%# c #42447D", "&# c #6264B4", "*# c #6568BC", "=# c #444785", "-# c #4C4F94", ";# c #4E5097", "># c #434582", ",# c #6568C4", "'# c #9397F0", ")# c #7477DE", "!# c #5F61B7", "~# c #51539D", "{# c #5355A0", "]# c #37396C", "^# c #363769", "/# c #8D91E9", "(# c #6C6FC9", "_# c #2F315B", ":# c #333562", "<# c #5457A0", "[# c #6568B8", "}# c #54569E", "|# c #575AA9", "1# c #50539C", "2# c #595CAC", "3# c #5B5EB1", "4# c #5E61B6", "5# c #8185E5", "6# c #8689E1", "7# c #676AC7", "8# c #585AA9", "9# c #42447F", "0# c #3C3D74", "a# c #3F4179", "b# c #5356A1", "c# c #5A5CAB", "d# c #9DA1F8", "e# c #6B6ECD", "f# c #47498A", "g# c #6062B7", "h# c #464886", "i# c #7578D6", "j# c #51539B", "k# c #3F417C", "l# c #4F529A", "m# c #50529A", "n# c #52559F", "o# c #5659A7", "p# c #6D71D3", "q# c #9BA0FA", "r# c #696CCB", "s# c #6265BE", "t# c #5A5DAF", "u# c #5759A7", "v# c #6264BD", "w# c #8E91EE", "x# c #8C90F4", "y# c #54569F", "z# c #50529B", "A# c #7276CD", "B# c #5A5CAD", "C# c #4B4D92", "D# c #5759A8", "E# c #696CCA", "F# c #9A9EF9", "G# c #7A7EE2", "H# c #686AC8", "I# c #5A5CAE", "J# c #686BC9", "K# c #A5A9FB", "L# c #7E81EA", "M# c #242647", "N# c #5E61B2", "O# c #3C3D73", "P# c #38396B", "Q# c #3D3E75", "R# c #434583", "S# c #6063B8", "T# c #787CDD", "U# c #6365BF", "V# c #4D4F96", "W# c #6063BB", "X# c #6669C4", "Y# c #787CDF", "Z# c #999DF6", "`# c #6B6ECF", " $ c #5D5FB3", ".$ c #6063B9", "+$ c #8083E7", "@$ c #A4A8FD", "#$ c #6F72D4", "$$ c #363868", "%$ c #323361", "&$ c #494B8E", "*$ c #6366B8", "=$ c #777BDC", "-$ c #4C4E94", ";$ c #7073D7", ">$ c #A1A5FA", ",$ c #787BE3", "'$ c #5F61B6", ")$ c #6063BA", "!$ c #5658A5", "~$ c #6E71D4", "{$ c #A4A8FB", "]$ c #8C90F3", "^$ c #6B6ECE", "/$ c #5C5FB2", "($ c #525499", "_$ c #52559C", ":$ c #27294C", "<$ c #2B2C52", "[$ c #454685", "}$ c #7579D4", "|$ c #686BC1", "1$ c #5D60B5", "2$ c #7276DD", "3$ c #989CF9", "4$ c #8C90F5", "5$ c #7174D9", "6$ c #686BCA", "7$ c #4A4C90", "8$ c #5F62B8", "9$ c #686AC7", "0$ c #8084EF", "a$ c #B4B9FF", "b$ c #777AE1", "c$ c #56599F", "d$ c #5658A2", "e$ c #222345", "f$ c #30325D", "g$ c #5D60B4", "h$ c #6669C5", "i$ c #7B7FD9", "j$ c #686BC5", "k$ c #6366C0", "l$ c #6164BC", "m$ c #7D80EA", "n$ c #A6ABFE", "o$ c #787BE5", "p$ c #6668C4", "q$ c #7579E1", "r$ c #A5A9FD", "s$ c #444685", "t$ c #3C3D70", "u$ c #474988", "v$ c #6B6DC5", "w$ c #434580", "x$ c #494B8C", "y$ c #6A6DCC", "z$ c #8387EA", "A$ c #6366BF", "B$ c #585AAA", "C$ c #7B7FEC", "D$ c #A6AAFC", "E$ c #8387F0", "F$ c #7071D1", "G$ c #5F62B9", "H$ c #696CCC", "I$ c #5F62B7", "J$ c #5A5CAC", "K$ c #6567C2", "L$ c #6F72D6", "M$ c #7E82EC", "N$ c #B7BCFE", "O$ c #8B8FF5", "P$ c #7578E0", "Q$ c #6466BF", "R$ c #393B6E", "S$ c #484B8A", "T$ c #6E71CE", "U$ c #5558A5", "V$ c #6F72D3", "W$ c #7F83E2", "X$ c #7579E0", "Y$ c #9599FB", "Z$ c #979BFA", "`$ c #7C80ED", " % c #7073D8", ".% c #6164BB", "+% c #6C6FCF", "@% c #7679E3", "#% c #9195FB", "$% c #BABFFF", "%% c #7F82F0", "&% c #7073D4", "*% c #686BC8", "=% c #4B4E92", "-% c #6A6DC7", ";% c #464786", ">% c #06070D", ",% c #030307", "'% c #5C5FB1", ")% c #7578DB", "!% c #7D80E0", "~% c #6568C2", "{% c #7477E0", "]% c #6A6DCA", "^% c #8588F7", "/% c #ACB1FE", "(% c #7E81EE", "_% c #787BE6", ":% c #6A6DCE", "<% c #595CAD", "[% c #777AE5", "}% c #7D80EB", "|% c #B4B9FE", "1% c #A0A5FE", "2% c #7C80EC", "3% c #6E70CC", "4% c #5D5FB1", "5% c #5B5DAF", "6% c #585BAA", "7% c #474A8A", "8% c #686BBE", "9% c #6164B6", "0% c #1E1E3A", "a% c #353665", "b% c #373766", "c% c #5B5EAF", "d% c #5558A4", "e% c #6C6FD0", "f% c #6769C2", "g% c #8084E7", "h% c #7D81E5", "i% c #7376DE", "j% c #7275DB", "k% c #8286F5", "l% c #A8ADFE", "m% c #8F93FB", "n% c #6E71D5", "o% c #8285F2", "p% c #9195FC", "q% c #C4CAFF", "r% c #9094FC", "s% c #7B7EEB", "t% c #6B6DCE", "u% c #4F5299", "v% c #4B4C90", "w% c #696CBE", "x% c #0D0D1C", "y% c #6365BD", "z% c #454684", "A% c #5B5DAE", "B% c #6467C0", "C% c #888BEE", "D% c #7B7EE7", "E% c #7578E2", "F% c #7C7FEB", "G% c #9296FA", "H% c #AAAEFF", "I% c #8488F7", "J% c #7275DA", "K% c #6D70D1", "L% c #7578E1", "M% c #8084F1", "N% c #8387F5", "O% c #A9AEFF", "P% c #B7BDFF", "Q% c #8488F8", "R% c #7072D7", "S% c #7275D9", "T% c #595CA9", "U% c #6E71CC", "V% c #7C80E7", "W% c #777AE3", "X% c #6C6FCD", "Y% c #5E61B4", "Z% c #6366BE", "`% c #5C5FB3", " & c #6F71D6", ".& c #767AE3", "+& c #8A8EEE", "@& c #7A7DE7", "#& c #7A7EE9", "$& c #7E81F0", "%& c #888CF9", "&& c #B2B7FF", "*& c #8C90F9", "=& c #7E82EE", "-& c #797CE5", ";& c #7A7DE8", ">& c #7275DC", ",& c #787BE1", "'& c #8084F3", ")& c #8F94FD", "!& c #C7CDFF", "~& c #9FA3FF", "{& c #888BFB", "]& c #797DE8", "^& c #676AC8", "/& c #5E60B4", "(& c #5C5EB2", "_& c #5D5FB4", ":& c #7073D0", "<& c #7275D0", "[& c #6062B5", "}& c #6E71C4", "|& c #6B6EC1", "1& c #54579D", "2& c #787BD4", "3& c #878BEC", "4& c #8E92FA", "5& c #6C70D0", "6& c #6467C2", "7& c #6365BE", "8& c #686BC7", "9& c #7B7FE6", "0& c #9195F6", "a& c #797DE5", "b& c #7C7FEC", "c& c #7E81ED", "d& c #8488F5", "e& c #ABB0FF", "f& c #9EA2FE", "g& c #8589F6", "h& c #8285F6", "i& c #7377DC", "j& c #7B7FEB", "k& c #8286F4", "l& c #8B8FFD", "m& c #A3A8FF", "n& c #CACFFF", "o& c #9599FE", "p& c #888BF6", "q& c #7376DD", "r& c #6567C3", "s& c #7C7FE1", "t& c #7578D8", "u& c #5255A0", "v& c #6264BB", "w& c #7376CD", "x& c #7578D3", "y& c #676ABE", "z& c #53559F", "A& c #777ACE", "B& c #9A9EF5", "C& c #9CA0FE", "D& c #878BF0", "E& c #7276D7", "F& c #6B6EC7", "G& c #6062B8", "H& c #6E71D1", "I& c #6C6FD1", "J& c #8E92F5", "K& c #7F82EC", "L& c #8487F6", "M& c #888CF8", "N& c #9A9EFE", "O& c #B5BAFF", "P& c #8C90FC", "Q& c #8589F8", "R& c #8285F4", "S& c #8185F3", "T& c #868AF6", "U& c #9397FE", "V& c #C0C6FF", "W& c #B1B7FF", "X& c #8083F0", "Y& c #6B6ED0", "Z& c #6669C6", "`& c #7F82E4", " * c #686BC2", ".* c #5557A5", "+* c #797DD9", "@* c #7C7FDA", "#* c #6D70C1", "$* c #5557A2", "%* c #7E81E1", "&* c #999EF6", "** c #A8ADFF", "=* c #999DF9", "-* c #8285E6", ";* c #7B7EE6", ">* c #7F82EB", ",* c #6E71D3", "'* c #6D70D3", ")* c #6F72D5", "!* c #6F72D7", "~* c #7174D8", "{* c #7477DF", "]* c #7174DB", "^* c #777AE4", "/* c #7578DF", "(* c #8D91F7", "_* c #8F92F7", ":* c #8386F4", "<* c #878AF7", "[* c #979BFF", "}* c #969AFE", "|* c #8C90FA", "1* c #888CF7", "2* c #898DFB", "3* c #8F93FD", "4* c #A1A6FE", "5* c #D3D8FF", "6* c #A1A6FF", "7* c #959AFF", "8* c #797DE6", "9* c #7377DA", "0* c #888CEA", "a* c #5B5DB0", "b* c #7174CF", "c* c #8286DF", "d* c #8386E4", "e* c #5D60AC", "f* c #52549D", "g* c #5E60B3", "h* c #6A6DC9", "i* c #9094EF", "j* c #ACB0FF", "k* c #9C9FF5", "l* c #8589F1", "m* c #7579E2", "n* c #7376DF", "o* c #787BE7", "p* c #8184F0", "q* c #797DE9", "r* c #8286F3", "s* c #9A9FFE", "t* c #9296FF", "u* c #8D91FC", "v* c #9296FE", "w* c #AFB4FF", "x* c #B0B5FF", "y* c #9397FF", "z* c #8D91FD", "A* c #8E93FD", "B* c #8F93FC", "C* c #989DFF", "D* c #B8BDFF", "E* c #CCD1FF", "F* c #A0A5FF", "G* c #8A8EF6", "H* c #8285F5", "I* c #7679E1", "J* c #7A7DDD", "K* c #8B8FF0", "L* c #7376D6", "M* c #8E92F3", "N* c #787BD7", "O* c #6669C1", "P* c #6366BD", "Q* c #797CE4", "R* c #9094F6", "S* c #A9AEFC", "T* c #BCC1FF", "U* c #B3B9FF", "V* c #999DFA", "W* c #8285F1", "X* c #7A7DEA", "Y* c #8487F5", "Z* c #777BE2", "`* c #7A7EE8", " = c #7F82EF", ".= c #7F82F1", "+= c #7D81EF", "@= c #8084F2", "#= c #898DFA", "$= c #9599FF", "%= c #9498FC", "&= c #C0C5FF", "*= c #9EA2FF", "== c #969BFF", "-= c #9195FE", ";= c #989CFF", ">= c #A4A9FF", ",= c #A2A6FF", "'= c #8B8FFC", ")= c #7C80EE", "!= c #7679E2", "~= c #8D91F5", "{= c #6A6CCB", "]= c #6163BA", "^= c #8C90EF", "/= c #9599F4", "(= c #868AE8", "_= c #777BDF", ":= c #7A7EE4", "<= c #868AF5", "[= c #9EA2FD", "}= c #BDC2FF", "|= c #ADB2FE", "1= c #9599FC", "2= c #8E92FE", "3= c #8B8FFB", "4= c #8488F6", "5= c #888BF8", "6= c #868AF8", "7= c #8A8DFB", "8= c #9397FB", "9= c #A8ACFF", "0= c #9CA0FF", "a= c #C4C9FF", "b= c #9BA0FE", "c= c #9BA0FF", "d= c #B3B8FF", "e= c #DADFFF", "f= c #AEB3FF", "g= c #8C90FD", "h= c #8589F5", "i= c #8689F8", "j= c #9498FA", "k= c #888CF1", "l= c #7B7EE8", "m= c #777AE2", "n= c #7477DB", "o= c #898DEF", "p= c #969BF5", "q= c #9296F1", "r= c #292A4E", "s= c #6365BA", "t= c #777ADB", "u= c #8184EF", "v= c #999DFE", "w= c #CBD1FF", "x= c #9094FE", "y= c #9196FF", "z= c #9196FD", "A= c #A1A5FF", "B= c #C3C9FF", "C= c #A5AAFF", "D= c #ACB1FF", "E= c #CBD0FF", "F= c #9A9EFF", "G= c #8F94FE", "H= c #8E92FB", "I= c #A0A4FE", "J= c #8C8FF9", "K= c #8184F2", "L= c #7F82ED", "M= c #7F83F2", "N= c #7E81EF", "O= c #797DE7", "P= c #7C80EB", "Q= c #8A8EF3", "R= c #9DA1F9", "S= c #9B9FF7", "T= c #878AEB", "U= c #888CF0", "V= c #6668C3", "W= c #7174DA", "X= c #8A8EFB", "Y= c #969BFE", "Z= c #D3D9FF", "`= c #BFC4FF", " - c #9DA2FF", ".- c #9DA1FF", "+- c #9A9FFF", "@- c #AAAFFF", "#- c #D0D6FF", "$- c #B9BEFF", "%- c #E0E5FF", "&- c #BEC3FF", "*- c #9CA1FF", "=- c #9CA1FE", "-- c #A6ABFF", ";- c #8C90FB", ">- c #8A8EFC", ",- c #A3A7FD", "'- c #A6ABFD", ")- c #9599F5", "!- c #8083EE", "~- c #797CE8", "{- c #696BC9", "]- c #474889", "^- c #40417A", "/- c #676AC4", "(- c #7E82E6", "_- c #8184F4", ":- c #9498FE", "<- c #A6AAFE", "[- c #C1C6FF", "}- c #D7DCFF", "|- c #D4D9FF", "1- c #BCC2FF", "2- c #A7ACFF", "3- c #B7BCFF", "4- c #CED4FF", "5- c #C2C7FF", "6- c #CAD0FF", "7- c #E1E5FF", "8- c #ADB2FF", "9- c #999EFF", "0- c #969AFC", "a- c #B1B6FF", "b- c #A9AEFE", "c- c #8D91F9", "d- c #8387F4", "e- c #7478E0", "f- c #7376DC", "g- c #35355E", "h- c #4D5094", "i- c #7B7EE0", "j- c #676AC6", "k- c #696CC5", "l- c #7074D7", "m- c #8083EF", "n- c #9296FD", "o- c #9DA1FE", "p- c #DDE2FF", "q- c #D2D7FF", "r- c #B5BBFF", "s- c #C5CBFF", "t- c #C9CFFF", "u- c #C7CCFF", "v- c #E4E8FF", "w- c #BEC4FF", "x- c #A6AAFF", "y- c #A5A9FF", "z- c #B6BBFF", "A- c #9EA3FD", "B- c #8386F5", "C- c #2A2B50", "D- c #28284A", "E- c #090910", "F- c #595CAA", "G- c #6366BA", "H- c #7578D7", "I- c #787BD9", "J- c #8689F6", "K- c #8E92FD", "L- c #C6CCFF", "M- c #D6DCFF", "N- c #E4E9FF", "O- c #DAE1FF", "P- c #EEF3FF", "Q- c #CDD2FF", "R- c #9499FC", "S- c #777AE6", "T- c #4A4D8D", "U- c #7C7FDE", "V- c #6568C0", "W- c #7C80E1", "X- c #6A6DCD", "Y- c #6769C6", "Z- c #6E71D2", "`- c #9296FB", " ; c #DEE3FF", ".; c #EAEFFF", "+; c #E6EBFF", "@; c #DFE5FF", "#; c #EFF4FF", "$; c #F2F7FF", "%; c #EFF5FF", "&; c #E0E7FF", "*; c #D9DFFF", "=; c #888CFA", "-; c #8185F2", ";; c #7073D6", ">; c #6D71D4", ",; c #5557A3", "'; c #41447F", "); c #5659A3", "!; c #7073CC", "~; c #7C7FE9", "{; c #878AF6", "]; c #8E92FC", "^; c #9FA4FF", "/; c #DEE4FF", "(; c #F2F6FF", "_; c #FBFEFF", ":; c #FFFFFF", "<; c #FAFDFF", "[; c #EBF0FF", "}; c #C1C7FF", "|; c #ABB1FF", "1; c #9094FB", "2; c #8C91FB", "3; c #7C80EA", "4; c #7377DE", "5; c #6264BC", "6; c #5F62B4", "7; c #4E5096", "8; c #8184E3", "9; c #8387E7", "0; c #6A6CCC", "a; c #7D81F1", "b; c #8487F1", "c; c #8386F6", "d; c #F9FCFF", "e; c #F1F6FF", "f; c #9095FF", "g; c #888CFB", "h; c #5557A0", "i; c #3E4077", "j; c #42437E", "k; c #777AD7", "l; c #7174D0", "m; c #505090", "n; c #7D81E2", "o; c #767AE4", "p; c #9297FF", "q; c #969AFF", "r; c #F3F8FF", "s; c #DFE6FF", "t; c #B6BCFF", "u; c #A0A4FF", "v; c #797CE9", "w; c #595BAB", "x; c #5A5DAE", "y; c #4E5091", "z; c #434481", "A; c #434683", "B; c #8689E6", "C; c #8589ED", "D; c #7679DE", "E; c #8B8FFA", "F; c #9094FD", "G; c #9EA3FF", "H; c #C2C8FF", "I; c #CFD5FF", "J; c #E5EAFF", "K; c #D5DBFF", "L; c #D1D7FF", "M; c #E1E6FF", "N; c #9296FC", "O; c #7E82F0", "P; c #797CE7", "Q; c #353766", "R; c #696CC3", "S; c #7A7EDA", "T; c #7276CF", "U; c #5E60B1", "V; c #6E72D5", "W; c #8285E3", "X; c #7175DA", "Y; c #7074D8", "Z; c #7B7EEC", "`; c #9599FD", " > c #B9BFFF", ".> c #E6EAFF", "+> c #D9DEFF", "@> c #C5CAFF", "#> c #D1D6FF", "$> c #9B9FFF", "%> c #8A8EFA", "&> c #7F83F1", "*> c #7175DB", "=> c #353667", "-> c #6063B1", ";> c #4D5095", ">> c #5456A1", ",> c #898DE5", "'> c #7376D3", ")> c #878BF3", "!> c #777BE5", "~> c #7D81ED", "{> c #7E82ED", "]> c #ABB0FE", "^> c #B2B8FF", "/> c #A5AAFE", "(> c #E0E4FF", "_> c #BDC3FF", ":> c #D0D5FF", "<> c #A7ABFF", "[> c #D8DDFF", "}> c #8184F3", "|> c #595BAA", "1> c #2E3059", "2> c #52559E", "3> c #6669B9", "4> c #7C80D2", "5> c #6B6EC5", "6> c #8F93F4", "7> c #8084EB", "8> c #A4A9FD", "9> c #9297FE", "0> c #E2E7FF", "a> c #CDD3FF", "b> c #989CFE", "c> c #8084F0", "d> c #7B7EEA", "e> c #696CC8", "f> c #5659A6", "g> c #6265B1", "h> c #696CBF", "i> c #6467B9", "j> c #5E61AE", "k> c #484A8A", "l> c #7A7EDE", "m> c #6C6ED0", "n> c #8A8EE0", "o> c #9398F8", "p> c #7D80E8", "q> c #8185F1", "r> c #A1A5FD", "s> c #9297FD", "t> c #A3A7FF", "u> c #9196FC", "v> c #9194FC", "w> c #979CFC", "x> c #696BC8", "y> c #5759A0", "z> c #6F72C7", "A> c #7174CB", "B> c #7376D0", "C> c #6265B6", "D> c #5658A4", "E> c #4D5096", "F> c #787BDB", "G> c #5E61B7", "H> c #8E92EA", "I> c #7578DA", "J> c #6367C1", "K> c #8185EA", "L> c #989CF6", "M> c #9CA0FB", "N> c #8C90F7", "O> c #7D80EE", "P> c #797CE6", "Q> c #777BE4", "R> c #7F83EE", "S> c #898CF8", "T> c #878BEE", "U> c #9B9FFE", "V> c #878BF9", "W> c #8589F7", "X> c #8F93FE", "Y> c #DBE0FF", "Z> c #878BFA", "`> c #868AF7", " , c #8487F4", "., c #8D91F8", "+, c #A0A5FD", "@, c #8185F0", "#, c #7679E0", "$, c #686BBD", "%, c #7B7FDA", "&, c #797DD4", "*, c #7F83DD", "=, c #5D5FB0", "-, c #8286E5", ";, c #9A9EF6", ">, c #6F73D7", ",, c #7578DD", "', c #8E92EF", "), c #8F93F6", "!, c #8185EE", "~, c #8F93F3", "{, c #8184EE", "], c #7D81EE", "^, c #7D81EB", "/, c #989CFD", "(, c #8F93F9", "_, c #898DF9", ":, c #979CFF", "<, c #959AFD", "[, c #8689F7", "}, c #868AF9", "|, c #8083F2", "1, c #9FA4FE", "2, c #B6BBFE", "3, c #8689EF", "4, c #7375D7", "5, c #18182D", "6, c #6265BB", "7, c #6E71BD", "8, c #8A8EEF", "9, c #8C90F2", "0, c #898DEE", "a, c #6E71D0", "b, c #505298", "c, c #6B6ECC", "d, c #898DF0", "e, c #A3A7FA", "f, c #7B7EE4", "g, c #6C6FCE", "h, c #9599F3", "i, c #8B8FE7", "j, c #7679DC", "k, c #6D6FD2", "l, c #7A7DE3", "m, c #9297F8", "n, c #7276DB", "o, c #7C80E8", "p, c #7B7FEA", "q, c #888BFA", "r, c #979CFE", "s, c #8D92F8", "t, c #B0B4FF", "u, c #9095FC", "v, c #989CFC", "w, c #7A7DE6", "x, c #767AE2", "y, c #8589F4", "z, c #888CF5", "A, c #7C7EE6", "B, c #868AF1", "C, c #999DF7", "D, c #A9AEFB", "E, c #8D91ED", "F, c #6B6FC9", "G, c #878AE6", "H, c #969AF5", "I, c #8A8EEA", "J, c #6A6DC5", "K, c #6164BA", "L, c #8B8FF1", "M, c #7F82EA", "N, c #7A7EE6", "O, c #7F82E5", "P, c #9498F5", "Q, c #9195F2", "R, c #7A7DDC", "S, c #6B6DCD", "T, c #8487EC", "U, c #898DED", "V, c #7B7FE4", "W, c #7C80EF", "X, c #898DFD", "Y, c #DAE0FF", "Z, c #BBC0FF", "`, c #9094FF", " ' c #B8BEFF", ".' c #9398FD", "+' c #8084ED", "@' c #6F71D5", "#' c #8285E8", "$' c #989DF8", "%' c #969BF1", "&' c #7174D2", "*' c #6568C1", "=' c #8084E6", "-' c #9A9FEB", ";' c #9094F1", ">' c #7D80E7", ",' c #9A9EFD", "'' c #9397FC", ")' c #959AF7", "!' c #979BF7", "~' c #878BEF", "{' c #9CA1FD", "]' c #9398FC", "^' c #7B7FE9", "/' c #7F83EC", "(' c #979BFE", "_' c #D8DEFF", ":' c #8D92FA", "<' c #8A8EFE", "[' c #898CF9", "}' c #969AF9", "|' c #8588EE", "1' c #7478DB", "2' c #7E81E7", "3' c #7D81E7", "4' c #6164BD", "5' c #6B6DC4", "6' c #9297F3", "7' c #767AD0", "8' c #292B51", "9' c #7E82E8", "0' c #AFB4FE", "a' c #D2D8FF", "b' c #9EA3FE", "c' c #868AF4", "d' c #7276DC", "e' c #8387EF", "f' c #8C90F6", "g' c #9A9FFD", "h' c #8689F2", "i' c #7D80EF", "j' c #C3C8FF", "k' c #898CFB", "l' c #ADB2FC", "m' c #8387F7", "n' c #8185F5", "o' c #888BF5", "p' c #898DF4", "q' c #8083EC", "r' c #787CD7", "s' c #4B4D8D", "t' c #48498A", "u' c #EAEEFF", "v' c #BFC5FF", "w' c #8B8FF4", "x' c #8589F0", "y' c #8B8FF8", "z' c #767AE1", "A' c #787BE4", "B' c #898DF6", "C' c #8185F4", "D' c #DDE3FF", "E' c #8689F0", "F' c #989DFB", "G' c #7377DD", "H' c #7073D9", "I' c #4E5098", "J' c #6D70CD", "K' c #515397", "L' c #6B6ECA", "M' c #8A8EED", "N' c #999DFC", "O' c #ADB3FF", "P' c #B3B8FE", "Q' c #AFB5FF", "R' c #959AFC", "S' c #AEB4FE", "T' c #A8ADFC", "U' c #9397F6", "V' c #7D80ED", "W' c #8286E9", "X' c #7174D7", "Y' c #6E72D6", "Z' c #9FA4FC", "`' c #8083F1", " ) c #AAAFFE", ".) c #8F93F8", "+) c #787CE2", "@) c #7E82EB", "#) c #8A8DF1", "$) c #676AC5", "%) c #26274B", "&) c #6F72C8", "*) c #878BED", "=) c #7C80DA", "-) c #898CF5", ";) c #787BE2", ">) c #7D81E9", ",) c #A0A5F8", "') c #B0B6FE", ")) c #9EA2F8", "!) c #7174D5", "~) c #787CDA", "{) c #7B7EE9", "]) c #898DF1", "^) c #9CA1FC", "/) c #8C90F8", "() c #9195FD", "_) c #898DF8", ":) c #8386F3", "<) c #A2A7FF", "[) c #7D80EC", "}) c #7F83E9", "|) c #797CDA", "1) c #454887", "2) c #676AC2", "3) c #7174CD", "4) c #7477D1", "5) c #676AC1", "6) c #898DE9", "7) c #989DFA", "8) c #7A7DE9", "9) c #8488EC", "0) c #767ADB", "a) c #888BF2", "b) c #9599F0", "c) c #ACB2FE", "d) c #B0B6FF", "e) c #9195F5", "f) c #878AEE", "g) c #7478DF", "h) c #8184F1", "i) c #8B8FF7", "j) c #979BFB", "k) c #7578DE", "l) c #8184E8", "m) c #4D4F92", "n) c #6669BC", "o) c #7376D5", "p) c #6D6FC9", "q) c #5D60B3", "r) c #9BA0F4", "s) c #6F72D1", "t) c #6C6ECE", "u) c #6A6CCA", "v) c #8083E0", "w) c #686BC6", "x) c #A7ACFE", "y) c #999EFC", "z) c #9499FF", "A) c #CED3FF", "B) c #999DFF", "C) c #8F93F5", "D) c #979CF9", "E) c #7E81EC", "F) c #989CFA", "G) c #979BFC", "H) c #787CE6", "I) c #7074D9", "J) c #868AEC", "K) c #6669C3", "L) c #6264B9", "M) c #6D70CC", "N) c #5356A0", "O) c #878BE6", "P) c #7F82DC", "Q) c #797DD8", "R) c #878BF2", "S) c #767AE0", "T) c #8387F1", "U) c #9BA0F6", "V) c #B0B5FE", "W) c #9397F7", "X) c #8B8FF6", "Y) c #9A9EFB", "Z) c #9DA1FD", "`) c #898DF5", " ! c #8589F2", ".! c #898DF3", "+! c #9195ED", "@! c #7275D4", "#! c #5D60B1", "$! c #7B7FE3", "%! c #6769C5", "&! c #A1A6FA", "*! c #BAC0FF", "=! c #C8CEFF", "-! c #9196FB", ";! c #7C7FED", ">! c #797DEA", ",! c #8386F1", "'! c #AAAFFD", ")! c #7578DC", "!! c #676AC3", "~! c #7A7DDB", "{! c #5C5EB0", "]! c #797DD1", "^! c #5658A3", "/! c #7477D5", "(! c #6265B9", "_! c #696BCA", ":! c #8D91FB", "~ c #6164B9", ",~ c #6265B7", "'~ c #868AEB", ")~ c #9499FE", "!~ c #9398FE", "~~ c #999DF2", "{~ c #9DA2FA", "]~ c #9B9FF8", "^~ c #696CC9", "/~ c #585BA5", "(~ c #262649", "_~ c #37386B", ":~ c #5C5FAE", "<~ c #6265BC", "[~ c #585AA4", "}~ c #797CDC", "|~ c #8A8EF1", "1~ c #7477D4", "2~ c #7B7FE7", "3~ c #9DA2FC", "4~ c #9B9FFA", "5~ c #8E92F6", "6~ c #AFB3FE", "7~ c #6C70C7", "8~ c #4D4F93", "9~ c #53569F", "0~ c #585BA9", "a~ c #797CD8", "b~ c #7F82E0", "c~ c #7679DA", "d~ c #7679E4", "e~ c #8A8DFA", "f~ c #7A7EEA", "g~ c #9FA4FD", "h~ c #9296F3", "i~ c #9397F5", "j~ c #7C80DB", "k~ c #7073CB", "l~ c #595CA7", "m~ c #7D81E1", "n~ c #7B7ED9", "o~ c #7E82E5", "p~ c #5E61B3", "q~ c #8184EB", "r~ c #7A7EE0", "s~ c #6466C1", "t~ c #7F83DB", "u~ c #888CEF", "v~ c #7477CE", "w~ c #7376D1", "x~ c #6568BE", "y~ c #53559E", "z~ c #8488F3", "A~ c #7478D9", "B~ c #8C8FEC", "C~ c #777AD9", "D~ c #8E92F0", "E~ c #6265B8", "F~ c #7073C5", "G~ c #797CD7", "H~ c #7478D2", "I~ c #6265BA", "J~ c #5D60AF", "K~ c #7F83E3", "L~ c #6062B3", "M~ c #777AD6", "N~ c #787BDA", "O~ c #9FA3F9", "P~ c #767AD9", "Q~ c #9094F0", "R~ c #7477DA", "S~ c #8387E3", "T~ c #6D71C6", "U~ c #6D70C7", "V~ c #7275D3", "W~ c #777ADE", "X~ c #6467BD", "Y~ c #787CD6", "Z~ c #5A5CA7", "`~ c #888BF7", " { c #868AEF", ".{ c #4A4D90", "+{ c #8C90F1", "@{ c #343563", "#{ c #515495", "${ c #797CD9", "%{ c #686BC0", "&{ c #6164B7", "*{ c #7C80DE", "={ c #5D5FAD", "-{ c #A0A5FC", ";{ c #A5A9FA", ">{ c #6365B5", ",{ c #888CE8", "'{ c #6A6EC8", "){ c #8083DF", "!{ c #6C70CC", "~{ c #5C5FB0", "{{ c #8286E6", "]{ c #585BA6", "^{ c #5C5FAD", "/{ c #2F3059", "({ c #8488E8", "_{ c #6C6FCA", ":{ c #868AE6", "<{ c #898DEB", "[{ c #2F305C", "}{ c #5B5DAA", "|{ c #6466BB", "1{ c #797CD3", "2{ c #6568BD", "3{ c #9296F6", "4{ c #A5AAFB", "5{ c #7073D5", "6{ c #6467BF", "7{ c #7074CC", "8{ c #7A7EDC", "9{ c #595CA8", "0{ c #282A4F", "a{ c #4F5297", "b{ c #4B4E8D", "c{ c #AAAEFC", "d{ c #515294", "e{ c #8084E1", "f{ c #6E71C6", "g{ c #7074D0", "h{ c #52549C", "i{ c #4E5195", "j{ c #6E71C3", "k{ c #7276CE", "l{ c #505296", "m{ c #5759A4", "n{ c #2C2C4B", "o{ c #7E81E5", "p{ c #A5AAFC", "q{ c #4E4F93", "r{ c #585BA8", "s{ c #8084E0", "t{ c #7E81DA", "u{ c #494B89", "v{ c #8F93EE", "w{ c #A0A5F9", "x{ c #888BF1", "y{ c #7578CF", "z{ c #5B5EAD", "A{ c #525599", "B{ c #6B6EC4", "C{ c #6D70C4", "D{ c #696CB9", "E{ c #8185E7", "F{ c #9397F4", "G{ c #8589EF", "H{ c #696CC4", "I{ c #A4A8FC", "J{ c #8083E3", "K{ c #5F62B2", "L{ c #6F73CB", "M{ c #585AA6", "N{ c #5E61A5", "O{ c #8083DC", "P{ c #9398F2", "Q{ c #9094ED", "R{ c #8689EE", "S{ c #2D2F57", "T{ c #3C3E73", "U{ c #7679D1", "V{ c #7578D0", "W{ c #7175D3", "X{ c #8084DB", "Y{ c #7C7FD2", "Z{ c #777BD3", "`{ c #6D70C0", " ] c #5E60A8", ".] c #5558A0", "+] c #585BA4", "@] c #6B6EC3", "#] c #4A4C8D", "$] c #43457F", "%] c #6466BC", "&] c #8589E3", "*] c #505297", "=] c #55589E", "-] c #5D60A9", ";] c #54579C", ">] c #515394", ",] c #4E5093", "'] c #27284A", ")] c #8286E0", "!] c #7A7DD9", "~] c #525294", "{] c #474987", "]] c #878BE5", "^] c #4F5298", "/] c #5A5CA9", "(] c #4B4D8E", "_] c #43457D", ":] c #515399", "<] c #52549B", "[] c #484A88", "}] c #969AF8", "|] c #7275D7", "1] c #393B70", "2] c #6C6FC2", "3] c #676ABB", "4] c #676ABA", "5] c #6063AF", "6] c #343664", "7] c #6264B2", "8] c #8D91F0", "9] c #1F1F3C", "0] c #4F5196", "a] c #5C5EAC", "b] c #41437A", "c] c #787BD0", "d] c #898CE5", "e] c #383A6F", "f] c #7376CF", "g] c #8B8EF2", "h] c #54559E", "i] c #50539A", "j] c #5F62B3", "k] c #53559D", "l] c #686ABE", "m] c #7376CB", "n] c #4E5095", "o] c #6C6FC7", "p] c #5456A0", "q] c #41437B", "r] c #595BA8", "s] c #6E71CD", "t] c #5C5FAC", "u] c #4D4F90", "v] c #6B6EBF", "w] c #5759A5", " . + @ # $ % & * @ & * = $ - ; > , ' ) ! ~ @ { ] ^ / ( _ , : < [ } | 1 2 3 4 % 5 6 7 8 9 0 % a b ~ } c b d % ] e = f g { . @ h g i ; & , ; @ @ | j ; k l - m & 1 = = f ", " n o p f q r ] d , q = & 1 p n s * t u v w x | q y z t o j A B 2 k - @ ] | C D E F G H < c I J E K L ~ M N o 4 O t P $ q j q Q $ | # * R ; # R S T * U V @ j h m # * * ", "g o m . ' n _ W y X n i M , j q Y & @ 5 Z ` s L .K - J q 2 y ..* +.f ( [ D @.: #.$.%.&.*.L y =.( #.-.;.@.>.r =.{ i o $ & e . q n p . +.p * ; $ . V ,.* >.% '.) m , o n r V m p j ", "h ). o x o # ,.b , e # = q m 4 P c 1 & M d !.~.{.]...-.^.{ k 4 /.] P W ~ {.(.@ O (._.:.<.[.}.|.*.1.2.3.L J | @ @ ~ +.} } M m * * [ j * & , r p 4.; f g /.3 b ).= # i e 5.. p & # * p j p n ", "= 1 =.; M } 6.h . r 4 * . @ & I V R R ^ @ d / 7.8.Q 9.#.+.M } I 0.P .Y a.R b.b : Q c.d.e.f.g.1 b.|.h.~ % % k i.*.& e o J h R ,.j t h q I V * * ; h o # = j.N = = g ; * h j = = s * | @ # n ", " . ; = j , ~ @ @ $ n & = ; g & q U k g | =.' h k.l.9.L B X ' m [.W d b y L D m.n.M o.9 p.q.c.H ~ a.r.s.m.^ h.| 4 9 Q {. .d ~ h * h @ R =.- s @ ; @ ,.t.q u.a.S h Y * * ] m e * = q . . ; ", " p } M $ v.~ ^ t , | # # { V & w.h c 5 k.S x.9.f.= Y _ % b |.y.J 5 ^.z.a.A.#.0 B.C.*.'.D.~ L E.N ) K ) : P { ~ c e k = * F.G.d n a ,.V b = & =.M [.H.- f # 5.t $ | k p * # ", " n t I.0.* o n 6.k >.[ ,. t | q g _ e b ] < J.K.L.D ] ] =.L 9 v |.b N M.5 N.b.O.Z P.Q.9.e.E.m.x 5 } R.E.k.S.$ D t.( q ~ h ~ = v.r ] .b o j b ~ *.C & * g , R @ # T.@ t | n @ +.n M | ", " p _ = . p * k ; , # r d * j n ).k [ 1 # k U.} n } &.V.W.b.9 b }.' c X.Y.u : K Z.`.S X.E. +.+++@+&.0 } : ^.*.A.U / M.#+d } ..Y - , $ - m i.U s V | =.Y o $+%+n t.g k q | +.V n , $ D i # = , 1 = i ", " . ; h = ^., e q i +... .- * = ^ > @ k 1 @ } ~ &+&.*+Z.$+&.Q b =+M -+L d '.3 [.;+-+v >+,+'+)+!+b.~+*.N.-.M./ 2 h.m.[.] {+* ] & f q g ; r m v.R { v.]+` c e I , ,.& . $ U 6.R = q g ; * | R >.", " j * j b I * ; * ; .=.J Q r m b ; t.- Q >.) m.u ^+/+2 m.(+b _+A.9.M.^.#+o.R.N.:+<+[+}+|+:+'.1+*.2+3+E O.b } y.( 6.=.~ - I.I & ; ; O k & S.| I.4+5+y , - R ).. [ ( = $ , . M # [ r s = h ; ", " j p q # Q 6+1 j r E h ; @ . ,.v.= | m #.T D : 7+3+8+E.d Q {+2 u a.9+E J.0+ .9.w a+! b+c+d+3+(.0 N e+y k.y.c E m.< b e ~ ( s $ [ ' ( ] q I X 6+f+g+{.b | U @ * ; - 4 a ; [ ). t U =.j X U ", " # > # n t i 1 A.r n U s d h+k * n | i+R | P @ { D {.Q b.j+k+<.{.'.N.[.) l+S {.a+O.o.;+~+m+n+o+p+*.(./+E.q+u.D.e+N K P y.N f {.4 & e $ ] b J d M.{+r+s+9.-.[ m e k * ; ..).= * r t+* * i >.h I b ", " t j M D m g # q / m.; & % k +., $ {+@.) z D -.u.u+v+: } P -+E D [.9+w+x+`.Z y+z+A+B+!+Z.q+E.v b.c.C+y.m.E.0 ~ O y.' ) < _ R.} D+c e+M.( p+E+D } k L .,.@ m K ;.& . , $ ).h & @ & J & ", "= = h * # o V e+R i $ F+= g R 5 } =.J >.1 = =.|.2 Y ' @ *.) Z G+p+[.d j+3 (.E 0 0+#+H+x I+!+J+K+p+!+L+Z.D.M+$+/.N+E .J ^ 2 2 1 q u [.O+0.j.. {.9.8.P+Q+N m.~ #.* ] h h - _ J R . r ,.c | R q @ k E ", "g * r ; h * * * V A.; ' } v.1 d '.( * h.M j R+% I.O ' = : *.#+Y.S+!+4+j+j.~ T T+]+o.X.y.!.x+U+V+%.L+V.W+E.X+X.B %+Z Y+[.#.`.N } .] y E K Z+e e+f.`+ @-+#.( m.c } b & ).$ < > & /.* @ ; | O = @ ", " @ ,. Y # , q & -.+.= o V $ , & M..@2 4.t.,.m.b .{ m.( W f Z.H++++@a+v @@k.0.Z.#@$+$@C+w c+L+%@&@*@I+J+3+q+c.H /.l+9.=@o.7+a.c W ) 2 k.y.x /.v `.-@;@$+} ' { #.4 u s * = f Y s b V Y 6.k ;._ ,.U Q ", "; j j r q r q q Q ^.f = r < >.>.Q '.{ = I.> ^ d | f N L #.6.E $+Z r+>@B.Z.0 [.: g+,@9 /+'@)@!@~@{@]@,@7 ^@/+R.d+9.-+a.&.'.E.l E T ) &+^ x e+O.F /@(@3+|.P M ^.e+k b $ k v.< +.o ] $ c M X . .c q ( ", " h @ @ ). o k s 9.& p / 6.=., . k ^ d g @ o h.~ V | f Q k.T &.^.a+_@:@v v C+<@$@p+j+3+[@'@>+}@|@1@2@3@!./+3 #@w R.J+(.} j+^.;+K 9.'.S &.n.c.g+4@5@e.#+S D P d L c k ] ..O < ~ p ] k =.( a.y L } X ", " ; V . ; U n R ; N.Q q b $ h f P Y l E $ [ s k ^ - I.P 6.@ Q y l+-+J.6@7@3 )@E -+L+8@x+Y.9@0@a@b@c@d@e@K.)+f@]+g@1.[@a+9.D.^.q+N 0+: m.h@~+/+i@j@%.Z u.'.7+z D ~ k b ' M y.& M.c ' c ( j.O b 2+[.k@", "* * [ k ; Y v.j @ = l@u.R - a * m 1 ;.R.1+@ { & L ' y < @ h.x #.&+..a+h@m@n@o@p@q@p@r@Y.f@B.a+s@t@u@v@w@x@w+7@` *.)@4+$+l Y.[.^.F ^.y $+E.(.9.y@z@(@A@b.8 |.y. .} s./ z 1+4+Z+= n {..@, 4 M.@ e+N.w+B@", "; n % . # # ;.. ] _ _.b v.I , >.=.#.&+X.y.D Y m., q V #.h.j.N.h.0.e+n.Q+w C@D@E@6 6 E@e@(.'@F@%.G@H@I@J@f+K@3@L@m@M@4+9.E@X+H+j+-.h@3 N@7@(.O@P@Q@J.<+l+W a 9.,.} ) 4 h.s.L 9 &+' {.J m.m.R.R@K@o.E@", "1 >.j ; >.$ Y i o k [ S@T@m.k n ; M @ =.* (., * ~ L X { X e+c M {.9 ~ o.e.!+U@V@E+)+T+W@!+p@o@s@X@Y@Z@`@ #^@0@^@.#m@8@<+4+L.<+Z.M+m@]+3+q+` ]++#@#7 $@##$#l n.E { '.*.4 * L -.N.5 [ L y..@~+z.%#L.e+@ ", "= @ $ 4 # h ; U @ 6.L Z.y ] A 6.] q 4 J o.o./ A X } y.- ).> 0.&+X.b.[./+8 J.&#*#%.w+r@=#-#;#;@>#3@,#'#)#!#~#{#{#>#8@]#!.^#<+H+!+e.<+6 ##H ^@/#(#p@/+e@e.v Z.E.{+N.^.).9+{ Q #.) S 2 l _#:#<#$@^.{.T ", "| P e * = g . $ b r 4 f $+X s ] O+Q X + s k '@#.b % I.( ,.@.O.&.{.2+-.n./+8 m@U+[#}#y@~#7@J+|#1#2#3#4#5#6#7#8#{#B.>#9#s@0#M@$@M+]+a#E+y@r@b#c#d#e#f#0#4+Z 3+{.4+k 3 h.A 0 N.S.c K 1.m.^.g#h#f.u z z u ", "@ ( ) 9 1 * M | = @ .a { =@L | r - - & * s v.#.x+R+[.D D * ( y.9 D 8.;+[.j+f#E@'@;#i#j#k#l#~#m#0@;#n#o#p#q#r#s#t#s+I+J+` -#e@q@q+a+>+0@$@u#v#w#x#]@0@U+H+@+[.N a.0 6+B 5 R.6+{.[.{.b.Z y#i@l {.b 2 E E ", ". - d L 3.0.^ k .] h ,. .] E ^ 1 P R ~ ] m.[.p 0 '@^.-.t..@/.Z.|.1+c.&.3+N.N+3+8.z#o#A#o#B#-#s+d@C#D#D#E#F#G#H#2@*@;@m#y@I+(.'@m@$@L+7 ,@I#J#K#L#m+*@0+3+!+a+M#$#H+^.( M.9.N !+a.X.j+N#O#l /.( h.c b .", "U ).n e 4 # e+[.E _ ' 0.+.y P#E.( @ e d v.t. .+.) W+Q#B ~ y /.2 y u.B 9++.C+R#h@e@f+-#S#T#U#I#V#W#x@ #Y@X#Y#Z#`# $.$o#;@^@y@'@y@R#7@E+;#B.u@+$@$#$n#~@[@D.$$%$l+9.e.l+0 D h@^.b.(.>+5@_.$#M.: R.b N Q C ", "s m # j j h 4 6.6+3 ) 1 ..D.6+] v.b X o ^ M 2 u / m+z y M.R.{+1+/.z ^..@1+h@u.q+Q#!@&$*$=$z#! -$F@}@d@!#;$>$,$'$7#I#)$s@*@)+.#f#7@!$m#b#~${$]$^$/$3@y@N+9+y@q+`.9#_.(._.D.l 1+($_$3+0 S <.E.:$N .@[.+.", "v.k | = * j & t+X a E.6+g+6+M.3+S.~ m.e+ .b % = L #.a+w [.e+b.4 [.<${.B $#C+h@*.[$J.8@x+7#}$|$s+7 1$*@.$.$2$3$4$5$6$u@b#{#o#! 7$y@s@X@8$9$0$a$b$u@%.m+J.!+x+)@m@2 )@%$[.%$E+q+c$d$@@j+$@~ O.{.u.1.e$n.~ ", " * q e & Y f d = | , #+9.B.L+E [.} I.W } e 6./ E.2 9@: 6+y.f$/.-.E <+_#) 3 !+;+6 y@g$h$u@i$j$|#! k$l$,#5$m$n$o$p$k$/$!#*@D#s@4#m#g$l$q$q#r$~$7#g$L+7@s$)@m@6 !.R.;+/+t$u$v$7 9.!+F E n.2 #+d ~+M.y M.", "j n q I * I .[ ;.| # Y c a B '@w$m@3+#.#.R.L - } : {.@@x$j+9.@@K Z.L.!+a+M+!+Q###w+%.*@{#8$y$z$A$D#g$s#B$P+C$D$E$5$F$G$H$u@I$X@I#J$K$L$M$N$O$P$Q$G@7@7@|#[@R$N+++y@:+N+S$T$I+H /+'@f@D.Z.^.*./.{.: l 6+", "* .- , & $ s = 1 | & .k &++.d &$@+w I+>#6+{.-./ -.h.n.7@8@b.D.3+=+0 /.X+`.v E+L@)+0@>+z#U$ @V$W$d@8$v#6$^$X$Y$Z$`$ %,#U#.%t#u@u@l$+%@%#%$%%%&%*%*@0@z#B.!.x+M+7@w+=%}+-%;%'@e@L+Z.!@!+4+9.%$h._+h.-.'.", "J . n >%= e ,.q = X ,%c 1 ^ | H+8 E@6 ]+;#{#<+f$0 <$j.7+v#p@E.3+0+h@E .#l+]+]#!+E+'%x@K@p+!#g$)%!%~%l${%]%+%^%/%(%_% %:%:%O@<%W#J#[%}%|%1%2%3%4%5%6%s@V#1#J+#@7%f#8%9%7 6 g+a+J.!.a+f.N.9 '.l `.o.N.'.", "M.k s Y . m U # S.m k _ y { h .E.L.0%#.~+*.3@4#.%8@q+3.a%b%c%)@d+q@E+%+!+)+#@'@;#d%.%t#<%5%e%.%f%g%h%L$i%j%+%k%l%m%_% %i%n%6$r#6$V$o%p%q%r%s%t%5%I#}@m#x@~#!$u%v%w%c#)+H ]+e.e.'.4+X+1+a#6+4+$+y _.$@H+", ", J M = ,.=.q $ Y x%# d .. k Q H 0.7+O { 5 O.8#y%`#!#9#z%A%6%H J+++,@z#w p@^@-#~%U$X@=%y%B%l$.%B$C%D%E%{%[%F%G%H%I%o$;$J%K%L%5$M%N%O%P%Q%}%R%g$*@G@b#~#7 D#S%h%2#L+y@J+0#s@]+0+>#y@X+'@z+-+N+H 0 4+B.", ". f E d | h @ # . | g ,.$ P +.L [@N.M.N.E.} 2 O.%$T%U%V%W%S#X%^@s@-#l#7@;@,@7 Y%Z%)$l#G@*@^$J@`% &.&+&@&P$#&$&%&&&*&k%=&-&;&>&,&'&)&!&~&{&]&^&!#/&(&5%*@_&:&<&O@l#o@0@;#{#y@U+[@H H J+Q.m@M@K@f#[&}&|&", "j - m K R % * $ | _ q ,.] | ( { #.E.:+/ P ) Q T u.6+@+F 1&2&3&4&}$A%C#~@p+^@1#/$5&l$6&D#(&D#7&8&k$`#Z@9&0&a&b&c&d&e&f&g&h&F%i&j&k&l&m&n&o&p&q$q&h$8$ @r&l$s&t&P+!#l.*@u&;@E+m+&$T+K@&$B.y@>#v&w&x&y&<+!+", " t = k 0 { 1 c j * 6.k ~ [ ; } _ D.z&~ } 2+#.[.D 3.H+m@!+'@F@A&B&C&D&E&r&k$,#F&~%O@7#G& @h$O@H&Z@~$I&@%L#J&K&L&M&N&O&P&M&Q&R&S&T&U&V&W&o&X&P$Y&e%^&Z&Z%`& *P+O@_&8$B${#3@G@;#,@~@}@.*.$+*@*#*$*l#,@w R.", "* # > < 6.o.@ t.f ; = | ' .| | ~ I.m@X.#+-+e E.b.9 T+!+o.a+q@b#u@%*&***=*-*;*>*,*~$7#+%'*)*!*~*{*]*^*/*$&(*_*:*<*[*$%}*|*%&1*2*3*4*5*6*7*@&8*E%I&J#9*0*X%I$P+)$B#l$a*m#b#g$I#D#U$b*c*d*e*I+L+<+q+v %$O.", "s X h & [ #.#.e 1 X = & S +.2 Q f `.(.J+L ) 2+u 9 [.^.C <+6 4+[@f*g*h*#$i*j*|%k*l*@&W%m*n*n%o*p*@&q&q*.&_%r*s*t*u*v*w*x*y*z*A*B*C*D*E*F*G*H*_%I*i%J*K*!*`#7& %k$Y@2@s#7&`%g$L*P@M*N* $-$g+v D.f$:+N.l b.", "* g 1 6.g .#.B E i.] L v.O ' I.=.P '.B.N.#.f.2+S e+D.h@$#$+a+x+8@t@O*P* @Q*R*S*T*U*V*M&W*c&X*Y*Z*`* =.=+=@=#=F*$=%=6*&=*===-=;=>=5*O&,='=N%)=!=~=(*)#j%{=J#]=r#,#J#~%b$^=/=(=]%o+`%z#]+y@J.@@.#o.*.z.~+", "' ,.@ = 1 ,.< 7+5 f A M.$ Q c P 4 E L E+h.5 &./ 0 Y+x 9 j+J.a+!.r@C#8$_=X#:=~*W%<=[=}=q%|=1=-=2=3=4=5=6=#=%&7=8=9=0=>=a=O%b=c=6*d=e=f=0=g=h=i=j=k=l=[%m=~*^$J%o$n=o=p=q=:&7#g$1$o@{#|#6 &$)+#@l 0+x+9 ( ", "& k >.R | =.#.} [.M.* #.6. .L } ^ } 2 l+<+_.C ) ^.7+D.:$$@h@r=O.)+7$o#s=-@t=k$~$q&(%u=v=P%w=a=e&~&$=o&x=v*y=-=z=0=e&A=O&B=C=C=D=E*E=w*F=G=H=I=J=K=L=M=N=O=P=Q=R=S=T=,*p$B#l.2#m+x+s@>#>#E+h@$@@+$@T+<.h.", "X t ,.e @ | q a h.m.h.M ( 6.2 Q M.E 9 9.J+$#^.u.R.N E@a.j+$+;+)@[@7@.*s#U=Z@O@P+V={*W=F%X=Y=e&n&Z=`=O%6* -.-C*+-~&@-x*x*#-&&D=$-%-&-e&*-=---;-3=>-Q&1*r%,-'-)-!-~-{-k$r#5%3#o+]-0@Z O#6 E+H ^-4+w.R.E.f$", "k = , j ^ = L d & W *.^.d j.2 ' e+L {.h@I+Y.'.1+J u.6+(.Z.)+a+!.t@x+^@/-(-t=v#/$!#;$q&J%;&_-#=:-<-[-}-|-1-e&2->=2->=3-P%4-5-$-6-7-}=@-8-@-9-$=-=0-n$a-b-c-d-e-f-J#e%8$|#X@`%s$K@7 -#<+%+Q#(.9.g-b.@@S ^ ", "@ _ ,.v.* , .' 1 f = F B N.$+] 5 [.~+k.m@h-E@6+4+(.4+'.^.^#a+'+5+>#3@i-j-k-l-6&Z&u@e% %W=8*m-%&n-o->=3-|-p-q-T*r-&&d=s-t-e=u-v-Z=w-T*x*x-y-D=P%z-A-4&B- =@%e%~*v#`#o+G$<%I#5%s@&$y@M+)@e@C-6 D-;+q+o.[.", "t b X E->.$ +.$ ,.& m.J j+c.D d u y ) N `.F-O.o.N.f$H b.c.Z 6 E+,@;@G-H- $_&I-j-4#^&k$'*{%I*m=K=J-K-==9-C=a$w=%-7-#-s-L-M-N-O-P-Z=Q-}=$%q%a=&&*-R-;-K=(%+=S-X#~%,#P+t#p+4#z#7$L+9#z#H @+]#~+H h@##9 l u ", "_ R { 5./ k _ 4.) L 1 s a.J./ D 2 -+/ ^.|.T-Q.o.<$&.9.Z.F L.C+E+.*p+U-C#3#D#V-W-^& @X-Y-`#Z-o$m=X&l&g=`-+-6*O%D*!& ;.;+;@;#;$;%;&;*;M-n&O&C=c=v*B*=;-;(%[%;;j->;u@u#3#6%,;f#y@-$B.x@3 p@6 ';R$*.8.N+` y ", "f > } ; +._ f c ' y u X c {.$@N './+1+b.1+:+);1+j+N+f#p@3+6+7$<+.#-@!;o#{#*@X@i-n=^&A$6&W=~$!=`$~;{;R&u*];$=^;x-x*}=t-/;(;_;:;<;[;|-};a$|;m&.-1;2;4=S&L%3;4;j%`#k$s#5;o+8$I+C#L+7 !.y+3+l 3 f@e.^.8.j+*.", "k ; .{ / ,.D 1.6._ t.W y.d o.x+&+N *.1+(.#@6;!+<+O.*.)+!.@+0@7;G@8;D#D#x@{#D#r&9;0; @'*e%)*i%L%a;b;c;M&3*n-b=A=O%z-5-Z=.;d;:;_;e;/;w=1-a-x-~&[*f;l&g;S&$&{*{%J#o+6%A$Y@o+t#)@s@m#` 8 8.C+`.b.3 F N e.3+", "~ ^ k P } ) m.| y M.u ] L e+#.*.l y.H+-.E.)+h;i;H 3+r@Z )+j;p+L+k;l;{#B${# $m;I#&%n;`#X-y$^$m=o;}%N%l&K-p;q;*=**O&6-M-e=@;#;r;%;s;+;.;p-s-t;O%u;F=v*|*Q&2%v;5$~$k$6&w;|#~#x;K@++)+J.z.@@R$@+h@H.n.m@&$@+", "P P i+* { ' I.e+~ .].L ].L D.2+!+M+9 J.0#6 n#y;6 @+z;q+A;B.0@o+B;d@Y@B$D#0@)$g$ @C;D;W=`#L$5$I*+=Q&E;F;y*G;z-q%H;$%w-n&I;P-/;J;K;u-L-L;M;%-n&a$-- -N;F;N%O;P;{%Z@7#B#o+7@B$z#8@)+3 K.6 H+M+Q;$@U$m@z.z.", "T - ~ ,.X ) N / 0 0.u.#.{+2 } (.e+/+8@c+a+]+L@R;]+0+!@f#J+;@U$S;T;5%f#D#~@D#g$U;V;!*W;j%X;!=Y;Z;S&Q&`;m&z-P%@-m&H%a-1- >L;.>I;+>t-@>O&&&a$}=#> ;5*P%C=$>B*%>&>@&*>e%~%G&}@'%^@,@y@s@]+[$m@8@I+J+u.O.1+h.", "0 n.2+u.e ' ~+} y.0 I.u u.e.e.O.E.l+C+f$$@=>a#->;>w+Q+H >>{#'$,>4#I#b#g$3#O@d@7#7#E#'>)>]&!>~>{>B*]>^>/>F=Y=+-c=e&w*2-P%(>K;_>};:>3-z-<>x---**w*w-|-[>5-2-==g=}>P$j%)*j-8$8$b#7@C#0#z+h;|>U+:$R.2+N D.t.", "@+J.1>8.0 N |.N.D.v %$$+Y+E &.|.)@(.#+a#]+]+t@2>3>K.2@f#o#|#4>5>8$x@o#s+_&J#s#)$X-e%i%6>-;7>A-]>8>v*9>'=z*g=3*C==-*-2-}=0>s-x*a$a>x*w*@-*-b>b>;=.-m&**[-5*E*8-7*%&c>d>*%e% #;#B$A%e>f>7 #@3+Z.[.4+u T /.", "g>h>i>j>Q#5+z.@+#.F h@3+3+{.!+Z.3 q+H y@U+k>B.7@l>n#V#F@/$m>n>v#J#5%p+h$Z&g$U#)$L$)*S&o>&&n$1;B-k%p>q>3=M&m%r>s>x=0=2-E*e=d=--O%5-a$t>e&.-u>-=n-F;v>U&:-c=@-@>t-D*w>%&;&W=r#Q@-%x>*@y@K@++/+A.T h@#+[.9 ", "c 9 6 y>z>A>B>C>D>J+a+<+f#d+3+l h@M+y@K.E>d@u%.*F>Q$s+G>4#H>I>A$5%s# #7#J>6$J#q&K>L>M>0&N>4&O>P>Q>R> =S>T>U>V>W>X>b>f=Y>t-2- -F*e&H;^;$><>z=X=Z>`> ,g;7=g=u*.,s*D=s-_>+,Q=@,#,.$3#y@K@K@[@M+9.j+`.1+} S.", "% T+8.b.3 '@q+$,%,&,*,V-8#s@m+L+)+9.6 L@` I+=,w;j--,v#J@L*;,>,s#:%Z&K$e%K%,,',/=),!,^*L%F%~,{,;&],P>^,/,(,i=`>_,u*$>O& ;t;F*:-:,F*V&m&o&<,+,[,},@=$&@=],}%S&`*N%|,];1,2,1-/%3,4,A$X@s+8@L@)@3 h@H+*.-+{ ", "5,n._ { 9.$+R.'./+C#6,7,8,9,0,a,b,V#%.1#2@2@2#c,X-d, %P$e,f,7#g,y$ @K%H@h,i,j,k,`#~$r#u@5$l,m,,$n,;&`-n-o,p,~>q,c-A=Q-I;--r,p%s,o&t,8-u,2=o&v,N%w,b&o$x,`*X$;$S-y,z,A,~-B,C,d=D,E,6,P+m#y@m@@@*.g@n.b.D ", "0 D m.u N.M.9 4+v !+3 m+m#;#F,G,`@H,I,J,`#K,`#7#-&L,M,k=/>O>N,]*O,P,Q,R,,*S,I&,#p$K$Z&X-E#;$x#T,l=U,V,L#M%W,R&X,-=x-Y,Z,`;K-;-K-`,+- 'q;z*g&<,.'2%@%~$)#{*`*+'s&#$^$7#I&Z@@')##'$''-%'&'s+3@9#S 0 E.d } ", "v.P @ 2 m.n.E 8 *.=@D.O.$@@+J+,@`%*'='B&e,-';'>'0$`;2-D*,''')'!'~'Z- %U# @s#g$P+7#(&t%6&K$.$W%{']'^'~-m=/'+=|,=;('P%_'F*:'<'['%&=;.'O&.-<*:*h=}'|'~-q$1'2'3'L$Z&r#4'l$J#l$p$a*(&K$5'C;s*6'7'p+K@9@1+8'd ", "b h , e+S.2+B O.5 4+E H D.#+3@0@,@U$z#o##$9'L>0'3-Z,L;a'd=b'c'O=~%`#4#v#]@B#O@4#u@^$p#s#A$d'e'f'g'~>@&_%h'i'k%3=.-I;j';=u*k'g&M=O=3=^;l'>-m'}%n'8=o'p'Y#X-y$h$8#.%U$<%s#&$f+l.f#|#f#2@a@)%q'8,r's'Y.9.T ", "| L #.w.x X $#E 0+#+~ 0 1>O.R$/+t'O#B.}@)$Z@_%r*.-`=u'_'v'@-w'M%K%W=`#X#5;7#l$h$H$8$.%H$Z@x'o,~-j=y'z'A'B'C'4=3*@-D'**p;%>k&}>p,}>B-F;a$M&k&h=E'Q=F'G'H'7#7#/$w;~#l#g$5%y@*@3@!.m@L+,@z+^@I')$;$!,J'K'{.", "x @ } ,.[.y e+u |.=@2+z.-.@@z.;+++%+p+~#d@L'M'N'G;O'P'Q'R'3$S'U*T'U'V'Z*H$H#k$r#e%g$A$5$W'X'Y'X;P=Z'`'+=E;g;#=0-`=:> -3*Q&F%-&,$M%c>i= ) -0-.)+)i%@)#)L$p$7#4#! 6%B$s+7 y@I+x@++0@8@q+`.q+s$3 Z.K@/$^&$)", "= y 3.L y.%)2 2+N.n.l p@M@m@'@L@)+m+`%&)*)=)b&~;k&x*-){'^,;)#$>)4$,)')S*))~',,4;X-;$!)~)i%X;I&2${)])^)I%/)#=K-G;_'d=()_)I%2%_%P=%%:)%><)a$_)[)!=L$f-})|)J#8$)$.$^@]@X@B.K.K@1)E+[@8@h@_.%+@@p@#@w+J+[@;#", "m {.{ e ( | T a.E K 6+@@6+c+w B.2)3)4)5)U$`#J%;$6)7)8)9)0)w,y$r#X-u@Z@a)b)c)d)+,e)f)+'_%g)o*{*n=i'h)4*''K-r,[*a-*;t>p%I%&>P=O;8)i)j)#%u*8-`>o$!=k)v#!*l)Y#h$A$f#p+f+z#7@m@)+m#x@U+I+^@r@B.$+E x+^.|.X.T ", "f k k ~ u N -+_+L.z M+b.p@m)n)o)p);@0@U$q)o+W#$)r)s)t)u)v)x;w)G$I#/$8$7#^$!=='B&a-O&x)y)x#@,W%_%C'4=];f=z)A=A=A)[-B)3=g;'&Q%C)D)f'E)b&R>F)G)H)I)j%H$I&J#J)K)u&!$]@t#4#w;u#w+t@m+w /+2 9.d+#+n.] [.=.R.u.", "|.O K 9 2 C 9 J ##;+L+m+L)M)N)m@U+!+F@w;;@E+o#O)P)u@o+^&Q)`%o+K)8#x@2#`%`%^&y$R)S)T)U)V)O&e&o-W)X)H=P&<)w*D=D= ;f=+-x=()Y)Z)`)(%],g)d>^* !x)c>!=Z@d'e#W=;$.!S%h$;>4#u&J.m@]+L+!.X+Z.9.u.8.: `.y x L m.' ", "N g +.&+5 h.&.;+3 8+8&X@$+!+$@%+]#;#C#>#q+x@8$+!8&6%t#G>@!#!m#X@~%8#o#2#s+$)$!%!^$5$G'p,1*&!d=*!U*C=m&--v'1-=!|-**<)D=@--!k%;!m*K%>!E)m$,!'!z,L=)!]%~$}@(&!!~! #;#C#>#4+!+p@x ` 9 l 1.[.5 z M.^.k.'.L y ", "c ~ P D.E.6 d%{!s@>#N.-+C-c.K.;+]+m@0#L+&$g$]!h%^!3@;@z#d@/!7$s@f#x@&$W#(!t&4#g$`%d@_!^$,*-;V>:!2-5-E*&4;)#3!4!m=I&L$X-P+G@;@5!6!_&&$&$C#[@L@<+<$Z.a.E.<.y {+k./ O W P J ", "6./.#+:+>>^@Q+N f.: M+[.u.Z ]+/+: E.p@$@m@Y%6)7!<+>#9#,@,@8!;#o#B.f+}@O*L'd@7$U$B$U$G$k$Z@>&m=`$9!0!--&- ;a!b!c!v'x*m&:,d!%%P;>&;$P$L$h$e!q>f!{>6&h$k$4#g$;@o+g!!!m+>#z;g+4+R$O.[.:$0 ( R.x /.+.- y & f ", "L.U+p+r@4+(+y X.x l K w._+x+P#D.: 1+w H+m+7,:&]@7 -#)@K@z+:.s=s+f+E+S+h!X@B$8#l$;#`%d@G@i!j!k!l!m!U>O%[-a'n!o!+>p!E=w*.-p%P&!-(%m*j%H'Y&n%>&q!r!Z@h$|#w;]@X@*@s!t!u!%.R$p@3 @+f@: 2+'.M..@f.N 2 X M.r q ", "++9 b.h. .`.{.^.t.b.7+e.K@O.S 6+D.E N+H P*v!j$u&B.)@e@F E>{#U%O@X@g,;@G@g$x@V-S+w!F&a,x!-&y!L%M$z!--&&@-Z,A!L-!&@-@-D*w-_>m&1*B-B!~>k)i!I&>&,!C!D!8$I#7 E!;#A@3@Y@F!G!B.v 0+l+8 O.#+O.t.0 ^.9 ) y.P q ", ": 2 N -.n.D ~ :$E ^.0 o.f.E.B #+w f.##C#H!o)s@w+@+I![@7$B.s@J!K!L!!#4#*@M! @8#Y@s+u#Z&d@h$H&>){',=8=7*u;n&j'f=^>@-m%N!O!P!Q!d=&&Z'_,m=`*K%e-;&R!.&p$4#a*! ~#{#7 f+'%S!n#f#[@j+N+^#!.2+[.|.~ /.+.( - f ] ", ": 0 U.Y+k M.u ~+a.~+=+#./.x o.q+C >#q+T!U!V!)@A@t@z#]+p+c%W!X!V$b#s@D@X@3@d%x;X@I!g$E#L$/'Y!Z!`!&>B-*& ~K;>=U>s*x*v*L&&>N=s%M%.~+~b-/%@~#~)*{*$~`)*% @!#~#%~&$)@e@#@&~*~[@x+q@1+O.=~N 2 N.{.v.. | y I.& ", "E.e+N ~ u e ~ 3 l v 9 1+0 -~N+q+f$x@t#;~:&n#1)V#v x+B f#3@>~>~,~V#7@B.J+0@x@Y%f>{#s#k;M''~g),*>&!=c&N!a$V&)~E;('!~--d-.&J%W=n%Z@>&.&m-R)~~&!{~(,]~^~Y-6&P+D#B$L+5+E>J+6@/~m@X+0+l H A.h.2+-.k., ,. .c V ", "R.x (~/+A.w._+X.X.0 !+6 _~9#3@>#p@#@:~i$<~w+F q+w E.3@m+[~7@7@[~x@B.s@L+-$p+/$d@}~|~1~Z& @7#j% @m*2~8=a>3~`>M%f'k&4~5~m*L$v# @U#t#d@^&V=P+;;p>P,6~]~='+%s#d@{#<%x+Q#W@J+7~8~Z.X.r@E (.E e+} y.4 c .& W ", "k 2 l ^@Z.x+H+J.;+6+#+&+X+/.) !.Z.]+r'j$U+`.8 3.j+.#I!9~w+a+K.0~,;;#!.U+>#G&a~b~c~d@P+*@l$`%h$^&d~:* ~H;e~f~_%.!^*b&g~b$J#P+ #f>t#!#o+8$8$l$K$;$x#L,*)h~i~j~^~4#o#>+z#f#>+k~m@<+: 6 N.{.~ k.#.p h u =.0.", "*.M+X+)+J+R.B X.~ {.#+M..@6+6 $+B.l~m~o@q+q+p@X.H.o+8#q+B.3+!+-$q)9#,@{#n~o~p~m#l#o+Y@>>!#!#o#Y-W%:)_>^)%%[%I&q~X;^*r~W)h$s~g$*@g$l#s+x;!#l$u@H$,*+!X-v#u@,+t~u~v~P+I#u&p+*@X!w+@+X.*.{.D.u.0.{ / | o @ ", "y.b.0 &+E.: {.D '.&+F j+L.b '.@+]+w~x~/+f@0 ]+6 p+y~++$+m@l+[@n#b@U;~)x&s+!@t@e@s+p+|#L+z#d@G>^$ %U&5-z~{*`#~$A~i!X-;$B~C~.$4'1$}@u#k>z&;@;@f+|# @D~e#a*2@I#I+3#E~F~G~H~y$x@I~*$N+E X./.h@R.e+h.= ).s x ", "h.m.^.] d x+c.y E.D 9.u } *.*.'@J~K~o@!@H @+H c%H 8.9 O.r=!@J+L~M~N~=%9#8@,@)+w+y@s+)+~#x@x; #;$d'a-O~]&t%:%d@j-P~t%P+>&Q~h$1$u@;@;%E>z#b#0@;#m#8$R~S~D##@y@9#9#B.f+)+D>T~U~V~W~X~w+e.*.4+9.+.#.h.y.4 m ", "-.X -.c e+R.)+h.{.~ a.) (+3 a+[@Y~Z~)+]+<+f#$*v A@-+*.^#7$u+8%6;;#4#m+)@.#p@g+B.J.E>y@L+ $6%!#~$`~Z, {,*)$,;!#,#&'v#J@A$H-;~b#o#&$/$]+E+7;q@.{u#f+6%+{v#s+p+3@%$0 g+.#5+]+)+@{#{${%{6%q+r@{.~+c ~ -.4.& ", "~ Q 2 f u 5 _#r@-+/.w $+R@j+L+&{*{e@%+>#7;;@q+e@p@H '@={U%7.r@>#U+7;e@@@E+3+$@4+'@E+{#I+ $G>j-j%-{;{/*X-]=D#D#.*>{/$ #G@)$,{'{3@;#s@'+z#@+J+m@s@Z d@){!{I!o@8@e@p@M.9#>#Z.H+]+a%L+F&8+f>~{e@;+l 2 t.P -.", "1 @ 3.y L : 6+H+8 / l w C+`.E+{{]{o@E+,@y@J+q+@+/+9~^{U+J+X+3 *.$@/{E!)@w f@)@%$)@J.!+y@I+{#,#;)P'({J#u@z#l$y@p+_{X@f#^@o#V!:{o#>>b#<+e@m@J.q+m#f$I!,#<{p+J+y@4+p@b.v J.N.@+[{!.d+L@}{0#*.)+[@5+=%#@h@_+", "D.a.o.2 `.: ~+H x$y S L@Z.6 |{1{J+/+F@s@E+T+u$2{#!A@f.*.Z.^.r@F H /+s+3 6+;+A.m@@+Q.-$^@x@m#Y-3{4{5{Q@}@f#0@;@o@~{6{U+;#7;o+7{8{G@L+e@m+5+z;J+;#b#y@l.P)5%;#(./+/+4+T+M+6 o.9 J.O.$@l+9{Z 7+<.-.Q e.@+6+", "[.[.^.|.~ E N '.X+I+'@%.0{0@v!6%m+7@m+>#a{,~b{6 e@C+Z.h.~+l B 6+(.'+X@R$#+<$Q#w+l+O.>#;#0@,;e%c{3,h$x@>#]+d{)@)+|#e>8@~#7@z#m+e{Q@G!L@8@B.p@]+L+B.f#0@f{g{!.r@$+h@l E.~+l+w.0 E.n.o.O.h{%#<.&+L ] } u R ", "L.$+Z.e+N.'@~ '.#+i{,@J+,@j{k{U$;#E+l{G-m{R$)@Z.$@Z O.H.@@f$f.v n{H 5+0@d+3 f.H Z /+=>7;L@X@o{p{#$d@l.q{s@t@,@a+K@r{'@1#++R#y@Y%s{m+m+!.B.U+r@Q+: 7@'@~@t{x+w Z a+*.o.H+5 v ^.6+] 9 ( 0 );Q.<.N.y [.-.f ", "u{h;q. +@@>#_#U+)@&$T$/$j-v{]@A$E~,~2>'@J.4+L./+h@6+) B X.H.E.9.L.@@3+I+'@1+O.@@4+a+m@s$-#y$w{x{O@I+>#<+%+H+>#'@%+g*)+)+'@B.y@f#C.1@0@m@Z e@q@/+H+J.e@s@y{z&.{H H.3+R.e.}.#+T {.y.0.E.'.Z.z{a%Y.u.y.d y.", "/.B M+A{B{8!C{D{=,2@V=E{F{G{`&H{u!p+` m+@+M@(.S C+^.R.|.a.Z.5 9+M.L %$;#)+h@O.#+5+D.!.B.*@V$I{Z@D#-$U+E+%$Z #@X+l N#D#9#H @+!+!.m#J{<%%.=>!.<+/+>#5+F m+K{L{E+J.3+%$l S u o.H.R@L N D -.l (.M{%$a.D k t.", "% u.9.u 6+C+'@U+N{O{P{D*A)V*;$k$V#Z H+$+o.'.j.D.D.~ 9.: T {.B h@E.^.N.M+U+^.h.'.3+6 m#g+m#Q{R{B$&$[@J+!@S{O#l T+q+T{W+x+%$f#Q.z.R#$*U{w+@@L+Z.3+a+h@H+%+>#V{w+9.#.n.9@(.0._.`.J -.9+L 9+~ ( u.U+: M.)..@", "(+~ m.#.1.c.'@.#/$W{`)x*@$X{Y{Z{`{ ].]f@N.O.Z.a.o.h@v &+z b.#.a.-+a.a.9 ;#e./+#+} [@$@]+E#Z'X#^@e@]+x+e@]+J+/+3+]+q+p+l+Q+;+:+E@]+p+k~+]!+m@6 @@$+l+F (.J.@]#]3 /+[.X.S {.y.N.M.L ( _ f M.0.) p@$]2 9 '.", "$ x 1+E.#+q+)+Y%H{%]W-&]5{[+t@6 J+*]=]-];]>],]']X.0+z Z.D.S Y+R [.E ^.2 y@%+X+a.{ A@8@C#){)]]@w+J+3 6+1+E M+4+D.v H+u!J.1+~+4+3 *.J+U+!]s@g+##0 0 O.h@K@g+~]R;#+M+v l n.#+#.'.N.u.X 5 {.{.k.< Z.[@B@z ' ", "/.&.(+a.l {];#J.m#g$]]^]! /]h{h@<$l M.9.#+e.%+(]_]:]<][]3+{.4+/ y.^.N.[.T+<+6 D o.)@1#5%}]|]f#)@#@h@9.x :$l+)@(.q+N+k>!+(.Z.h@~+E =>1]:]2]%+Z )+l @@X.9 3+L@3]e.6+w.'.) E k b J X : Y E.( b M.[.o.8@'@) ", "h.2+!+z#;>@@z.]+2@4]5][@C#w+2#e.: h.n.B a.Z+J 2 '.{.[@o.<$J+! !+6]A.a+D.h@]+h@D.O.J.s@7]8]~@]-Z.H.9]^.X.{.L J.$#F !@0]&.h@R.Q+(.: B )@q@&)*].#J.L.*.;+8.h@l+a]h{@+h.] N.y.b h.5 5 1.' P ' c y.] v.e+b]L.", "f.Q.8@l D.S @+h.w+c]F o.@+E !+8@E 2 '.^./.E.u y.u I.} ^.Q E u.2+`.R$K@K@m#7@'.##: !.I+d]h!)+Q.4+Z 9+z l O.Q 4+*.$+!+y@` O._#:$: %)_.%+:$a+U~0@h@e]%${.E.;+j+m@b@%$a+N t.J ~ m.2+D k.D ^ I.q /.D L Q &.,;", "3+Q u.N.*.h@j.Z.f]B@%+4+'.: b.$@)@a.z } 6.m.d 4 ) / d 2 } M E.c u.~+#.w.f$8.U+O#3@0#4%g]h]9.C+9+'@_+E.x 2 9 X.#.6 X.!@i]l I.=@C+`.N.W M+@@_]-]M+X+R.'.E.0.N+*.j]6 6+Q o.'.k } ,.,.( D.c : = n 6.b X ( Y.", "M.6./ %$9 A.-.k]l]f.2 L 0 {.L S ]+{ E.D c D D f [.) ( o.k P E.e+/ }.R+-.O.2+!.S 6 9#m]a,n]` !.q+%$2+S < @@E } 2+/+{.0 m#j.: 2 '.*.h.j+l E.Y.o]p]q+D.~+' &.L |.q]r]7+@.'.m.5 9 } O P d 0 t.b $ ,.* b c =+", "+.W l *.6.^.H C.8.M.~+2 ) R.E 3.m.m+(+m.s y a - 2 @.I * D 6.A b $ ^ 2 D 2 E )+B 3 ^@W;0@>#h@=~: : ^.0 (.0 c I.0..@9 f$5+l 0 y E.D.{.b.o.t.^.8@s]M+M+C o.L.N x `.Y%E.- a._ O R+^.,.= b {.| h 2 & 1 < ^ * ", "y.f$m.'.l %$t]u]*.t.]._+Q Z+s / c 5 H+A t.f ,.] ' = #.M ,. .=.#.k } u g.5 u.f.[@h@v]J'c+j.D.0.- 2 L 2 #+< #.f.F 1+3+9.L@h@} 0 &+%$#+D.N+w.D 3+^!z{_#N+d <.9 1+*.w]^#E.h.<@{ L ^ S.{ J @...Y i.i.e = 1 #."}; qosmic-1.6.0/icons/qosmicicon.xpm000066400000000000000000000260351304321135200170160ustar00rootroot00000000000000/* XPM */ static char * qosmicicon_xpm[] = { "32 32 566 2", " c #020203", ". c #050509", "+ c #0A0A13", "@ c #0A0B14", "# c #07070D", "$ c #040509", "% c #0B0C16", "& c #2A2C52", "* c #0E0F1C", "= c #10101E", "- c #151629", "; c #0E0E1A", "> c #16162A", ", c #1C1D36", "' c #3D3F75", ") c #16172B", "! c #131324", "~ c #05050A", "{ c #05060B", "] c #030305", "^ c #030306", "/ c #020204", "( c #010102", "_ c #0D0D19", ": c #080810", "< c #08080F", "[ c #0C0C17", "} c #131425", "| c #2F315B", "1 c #191930", "2 c #10111F", "3 c #111221", "4 c #1A1B33", "5 c #1A1A32", "6 c #3C3E72", "7 c #20213F", "8 c #20213D", "9 c #151528", "0 c #07070C", "a c #090911", "b c #06060B", "c c #141527", "d c #040408", "e c #05060A", "f c #090A12", "g c #0B0B15", "h c #1D1E38", "i c #2B2C52", "j c #131325", "k c #1C1C36", "l c #26274A", "m c #393B6D", "n c #3D3E73", "o c #1E1F3A", "p c #1F203D", "q c #17182D", "r c #07070E", "s c #222341", "t c #0A0A12", "u c #06070C", "v c #0D0E1A", "w c #2D2E56", "x c #27284A", "y c #17172C", "z c #232445", "A c #27284C", "B c #5A5DA8", "C c #313360", "D c #18192E", "E c #101120", "F c #0C0D18", "G c #242545", "H c #20213E", "I c #0A0A14", "J c #3A3C6F", "K c #28294D", "L c #232443", "M c #2E2F59", "N c #323360", "O c #585BA3", "P c #3F4079", "Q c #2C2D54", "R c #252648", "S c #18182E", "T c #191A30", "U c #3E4078", "V c #0E0E1B", "W c #090910", "X c #252647", "Y c #464885", "Z c #2A2B52", "` c #353666", " . c #323461", ".. c #4B4D8F", "+. c #5D60AC", "@. c #3F417B", "#. c #2E305A", "$. c #2A2B51", "%. c #1B1C34", "&. c #1B1C35", "*. c #333461", "=. c #464785", "-. c #111222", ";. c #0F0F1C", ">. c #0E0F1B", ",. c #1B1B33", "'. c #0D0E19", "). c #0F101E", "!. c #1B1B34", "~. c #37396B", "{. c #393B6E", "]. c #474989", "^. c #7174CE", "/. c #494B8E", "(. c #333564", "_. c #2D2F58", ":. c #5F62AF", "<. c #343564", "[. c #18192F", "}. c #141426", "|. c #1C1C35", "1. c #121324", "2. c #111121", "3. c #191A31", "4. c #232444", "5. c #40427A", "6. c #4C4E90", "7. c #454785", "8. c #4F5198", "9. c #6F72CA", "0. c #5D5FB1", "a. c #494B8D", "b. c #3B3D72", "c. c #363869", "d. c #3B3D73", "e. c #41437E", "f. c #6C6FC2", "g. c #353768", "h. c #1E1F3B", "i. c #212240", "j. c #363868", "k. c #19192F", "l. c #1F203C", "m. c #27284B", "n. c #343665", "o. c #5759A5", "p. c #585BAA", "q. c #52549E", "r. c #5F62B8", "s. c #7A7EDA", "t. c #5558A5", "u. c #484A8B", "v. c #3D3F76", "w. c #464887", "x. c #7376CC", "y. c #6265B7", "z. c #262749", "A. c #30315C", "B. c #3C3E73", "C. c #121323", "D. c #121223", "E. c #21223F", "F. c #28294E", "G. c #333463", "H. c #3E4079", "I. c #6769C1", "J. c #5658A4", "K. c #8488E9", "L. c #6669C4", "M. c #575AA9", "N. c #4C4E93", "O. c #5C5FB2", "P. c #8C90ED", "Q. c #595BAB", "R. c #393A6E", "S. c #30315D", "T. c #42447E", "U. c #3F4179", "V. c #363768", "W. c #2D2E57", "X. c #3A3C71", "Y. c #5659A7", "Z. c #6F73D0", "`. c #6568C4", " + c #7E82E3", ".+ c #7E81E6", "++ c #6769C6", "@+ c #6163BA", "#+ c #7B7EE1", "$+ c #8E92ED", "%+ c #4A4C8F", "&+ c #40427C", "*+ c #505297", "=+ c #292A4F", "-+ c #323361", ";+ c #4E5095", ">+ c #5E60B1", ",+ c #4C4E91", "'+ c #4C4E92", ")+ c #5C5FB1", "!+ c #5D5FB3", "~+ c #6567C1", "{+ c #7C7FE5", "]+ c #797DE7", "^+ c #9499FA", "/+ c #7578DF", "(+ c #7478DE", "_+ c #A1A6FC", ":+ c #7E82EB", "<+ c #676AC3", "[+ c #454786", "}+ c #393B6F", "|+ c #4A4C8B", "1+ c #222343", "2+ c #42447D", "3+ c #787CD4", "4+ c #7D81D9", "5+ c #7578D4", "6+ c #686BC9", "7+ c #696CCB", "8+ c #6F72D5", "9+ c #787BE3", "0+ c #878BF4", "a+ c #9EA3FD", "b+ c #898DF9", "c+ c #8A8EF8", "d+ c #AEB3FE", "e+ c #7A7DE7", "f+ c #6D70D0", "g+ c #6E71CE", "h+ c #5557A5", "i+ c #6164B4", "j+ c #505295", "k+ c #1C1D37", "l+ c #111120", "m+ c #333462", "n+ c #6A6DCA", "o+ c #888CE9", "p+ c #9B9FF8", "q+ c #989CF4", "r+ c #888CF5", "s+ c #8589F5", "t+ c #9094FB", "u+ c #A1A6FF", "v+ c #A6ABFF", "w+ c #AEB3FF", "x+ c #A7ACFE", "y+ c #8689F3", "z+ c #8185ED", "A+ c #7073D6", "B+ c #777ADB", "C+ c #787CDA", "D+ c #6E71C8", "E+ c #5557A3", "F+ c #0F0F1D", "G+ c #353767", "H+ c #242546", "I+ c #444683", "J+ c #6B6EC8", "K+ c #6568C3", "L+ c #898DF2", "M+ c #ADB2FE", "N+ c #B7BCFF", "O+ c #ABB0FF", "P+ c #ADB2FF", "Q+ c #C2C7FF", "R+ c #CBD0FF", "S+ c #9CA0FE", "T+ c #989CFB", "U+ c #8E92F6", "V+ c #777BDD", "W+ c #6063BA", "X+ c #5658A6", "Y+ c #3A3C70", "Z+ c #0D0D18", "`+ c #343666", " @ c #505298", ".@ c #5F62B4", "+@ c #6A6DC7", "@@ c #7275DA", "#@ c #8286F2", "$@ c #9498FD", "%@ c #B5BAFF", "&@ c #CFD4FF", "*@ c #E6EBFF", "=@ c #E5EBFF", "-@ c #C1C6FF", ";@ c #A5AAFE", ">@ c #898DF8", ",@ c #787CE6", "'@ c #676AC6", ")@ c #5C5EB2", "!@ c #4D4F95", "~@ c #444684", "{@ c #323462", "]@ c #292A50", "^@ c #474987", "/@ c #37386A", "(@ c #686BC0", "_@ c #5D5FB0", ":@ c #7275D6", "<@ c #6F72D6", "[@ c #7D80EC", "}@ c #8D91FC", "|@ c #A7ABFF", "1@ c #E5EAFF", "2@ c #9599FD", "3@ c #8083F0", "4@ c #6B6ECE", "5@ c #5A5DAF", "6@ c #4F5199", "7@ c #333563", "8@ c #26284B", "9@ c #2F305B", "0@ c #515399", "a@ c #444583", "b@ c #5E61B0", "c@ c #6467BB", "d@ c #585AAA", "e@ c #6366BF", "f@ c #7578DB", "g@ c #8185EA", "h@ c #9195F8", "i@ c #9CA1FE", "j@ c #9DA2FE", "k@ c #AAAFFF", "l@ c #CED4FF", "m@ c #AEB2FF", "n@ c #ABAFFF", "o@ c #6E71D2", "p@ c #585AA9", "q@ c #4E5096", "r@ c #4A4C8E", "s@ c #343562", "t@ c #484A87", "u@ c #505294", "v@ c #535599", "w@ c #434581", "x@ c #5E60B2", "y@ c #6265BA", "z@ c #787CD7", "A@ c #6265BE", "B@ c #686AC6", "C@ c #797DDC", "D@ c #8386E9", "E@ c #8B8FF2", "F@ c #7A7DE8", "G@ c #888CF4", "H@ c #8C90F9", "I@ c #A6AAFE", "J@ c #B8BDFF", "K@ c #A8ADFF", "L@ c #9094FC", "M@ c #8488F5", "N@ c #9A9EF7", "O@ c #9EA2F9", "P@ c #888CE7", "Q@ c #5B5DAF", "R@ c #42447F", "S@ c #141427", "T@ c #3C3D73", "U@ c #5B5DA5", "V@ c #6D70C4", "W@ c #787BD2", "X@ c #7F82DE", "Y@ c #979CF5", "Z@ c #8D91F1", "`@ c #797DDD", " # c #7377D3", ".# c #6567C2", "+# c #6669C5", "@# c #7174D6", "## c #868AEF", "$# c #7F83EC", "%# c #8286F4", "&# c #8B8FF9", "*# c #9FA4FE", "=# c #8B8FF8", "-# c #7C7FE8", ";# c #777AE0", "># c #7174D5", ",# c #6D70C9", "'# c #7B7ED4", ")# c #6E71C5", "!# c #41437A", "~# c #6366BC", "{# c #8D91F3", "]# c #BFC4FE", "^# c #979BF7", "/# c #8A8DEA", "(# c #7275D1", "_# c #676AC7", ":# c #7679DD", "<# c #8488ED", "[# c #8286F0", "}# c #8D91FA", "|# c #B6BBFF", "1# c #7E81ED", "2# c #999EFC", "3# c #8589F3", "4# c #8386EB", "5# c #696CCA", "6# c #5355A1", "7# c #4D4F94", "8# c #42437F", "9# c #52549B", "0# c #4E5196", "a# c #4F5196", "b# c #585AA6", "c# c #777AD7", "d# c #6C6FCB", "e# c #6467C0", "f# c #7B7ED7", "g# c #8F93F0", "h# c #9498F3", "i# c #8488EA", "j# c #8084EF", "k# c #999DFD", "l# c #A0A4FE", "m# c #868AF4", "n# c #8689F1", "o# c #8A8EF4", "p# c #6D70D1", "q# c #7477D8", "r# c #585BAB", "s# c #51539D", "t# c #20203D", "u# c #3B3C72", "v# c #6D71C6", "w# c #5355A0", "x# c #5D5FAF", "y# c #6366BD", "z# c #878BEA", "A# c #A0A5FB", "B# c #BBC1FF", "C# c #D7DCFF", "D# c #8B8FF7", "E# c #797CE5", "F# c #7679E0", "G# c #8C90F3", "H# c #5D60B3", "I# c #6467BD", "J# c #1E1E39", "K# c #2B2D54", "L# c #585AA2", "M# c #5456A0", "N# c #41437F", "O# c #5D5FB2", "P# c #5B5EAF", "Q# c #6164BA", "R# c #7477DC", "S# c #9498FA", "T# c #CED3FF", "U# c #ABB0FE", "V# c #9CA0FC", "W# c #8A8EF2", "X# c #7174D9", "Y# c #8387EA", "Z# c #5456A2", "`# c #51549B", " $ c #2C2D55", ".$ c #3F417A", "+$ c #6669BD", "@$ c #5A5CAA", "#$ c #52549D", "$$ c #5B5EAE", "%$ c #6F72CE", "&$ c #797DDF", "*$ c #787CE4", "=$ c #AAAFFD", "-$ c #9195FA", ";$ c #7578D7", ">$ c #8386E3", ",$ c #8488E8", "'$ c #8487E2", ")$ c #5F61B7", "!$ c #3E4077", "~$ c #222342", "{$ c #55579E", "]$ c #474988", "^$ c #3C3E75", "/$ c #585BA8", "($ c #595BA6", "_$ c #5C5FAC", ":$ c #5759A8", "<$ c #777BE0", "[$ c #999DF5", "}$ c #7679DE", "|$ c #787CDF", "1$ c #6D70CC", "2$ c #5658A5", "3$ c #5B5EB1", "4$ c #7A7EDD", "5$ c #6D70C6", "6$ c #6366B8", "7$ c #6063B5", "8$ c #5A5DAB", "9$ c #424480", "0$ c #4D4F93", "a$ c #53559D", "b$ c #8D91EB", "c$ c #6F72D1", "d$ c #6265BC", "e$ c #6F72CB", "f$ c #464888", "g$ c #6264B5", "h$ c #5456A1", "i$ c #3C3E74", "j$ c #444680", "k$ c #585BA6", "l$ c #40427B", "m$ c #38396C", "n$ c #575AA0", "o$ c #454784", "p$ c #2F305A", "q$ c #5457A3", "r$ c #51539C", "s$ c #5457A2", "t$ c #6467B9", "u$ c #434582", "v$ c #484B8C", "w$ c #5E61AD", "x$ c #3E3F76", "y$ c #353664", "z$ c #444681", "A$ c #4D4F8E", "B$ c #6E71C3", "C$ c #797DD7", "D$ c #6E72C5", "E$ c #6365B7", "F$ c #484A8A", "G$ c #53569D", "H$ c #494B8B", "I$ c #3D3E75", "J$ c #383A6C", "K$ c #2B2C53", "L$ c #31325E", "M$ c #4F5299", "N$ c #8487DD", "O$ c #696CBB", "P$ c #494B88", "Q$ c #3A3C6E", "R$ c #353665", "S$ c #232343", "T$ c #31335F", "U$ c #27294C", "V$ c #7477CF", "W$ c #575AA3", "X$ c #43447E", "Y$ c #3B3D70", "Z$ c #343565", "`$ c #404178", " % c #44457E", ".% c #1D1E39", "+% c #1A1B32", "@% c #4F5194", "#% c #56589F", "$% c #373868", "%% c #484A88", "&% c #292A4E", "*% c #27294D", "=% c #43457E", "-% c #5D60AD", ";% c #363767", ">% c #3B3D71", ",% c #121222", " . + @ # $ % & * = - ; > , ' > ) ! + + # ~ { ~ ] # - ^ / ( ^ ", "] ~ _ : . < [ } | 1 2 3 4 5 6 7 8 ) 9 ; % 0 a b b c _ . d e $ ( ", "/ / f < g b @ * h i j h k l m n o p q > _ g r b + s t < u d d # ", " v b @ g # g ) w x y z A | B C l 1 D E % < F G H < a < d { : ", "] d g a 3 F I 9 5 J K L M N O P Q R 4 S } y T U q V r < a r _ ", "^ d d ! W I - % = - X Y Z ` ...+.@.#.$.z %.&.*.=.y -.g F [ ;.>.", "] ~ r ;.V + ,.'.).! !.M ..~.{.].^./.` (.Q l _.:.<.[.}.!.} 3 [.| ", ": . b a h g _ |.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.R h.> &.i.j.h ", "F 2 -.V 4 _ V k.l ) l.m.n.o.p.q.r.s.t.u.v.w.x.y.~.$.z.G A.B.o 1 ", "~ # v , Q %.C.D.$.E.H F.G.H.I.J.r.K.L.M.N.O.P.Q.b.R.S.T.U.L 4.&.", "a : r g E ` V.$.4.v.| W.X.N.Y.Z.`. +.+++@+#+$+Q.%+&+*+].~._.=+R ", "v I < f g i.4 -+;+>+,+%+'+)+!+~+{+]+^+/+(+_+:+O.p.<+;+[+}+v.J |+", "~ ) g % ;.G 1+4 M 2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+g+r.Y.h+i+i+j+-+", "f + k+l+2.y w 4.R m+[+n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D+E+&+` m.", "f I F+5 %.|.G+H+& .I+J+K+A+L+M+N+O+P+Q+R+O+S+T+U+V+W+X+[+Y+A.F.", "Z++ _ 9 1+l.M .S.`+ @.@+@++@@#@$@%@&@*@=@-@;@>@,@'@)@!@~@G+{@F.", "V -.y 9 l.]@C ^@/@~@(@Y._@:@<@[@}@|@-@1@*@&@%@2@3@4@5@6@&+7@N c.", "K &.E.i.8@9@}+0@a@b@c@d@e@f@g@h@i@j@k@l@Q+m@n@N+w+L+o@p@q@r@w 8 ", "s@t@u@v@w@{.u.x@y@z@A@B@C@D@E@F@G@H@I@J@K@u+L@M@r+N@O@P@Q@R@_.H ", "S@l.$.T@U@V@W@X@Y@Z@`@ #.#+#@###$#%#J@2@&#*#=#-#;#>#7+,#'#)#!#7 ", "C.[.X =+-+7.~#{#]#^#/#(#_#'@:#<#[#}#|#s+1#2#3#4#5#d@6#7#I+8#9#0#", "3 5 E.S.a#b#.@c#C+d#e#f#g#h#i#j#k#w+l#m#n#o#<#p#q#r#s#~@U <.=+t#", "} #.Y+' c.u#].v#w#x#w#0.y#5#z#A#B#C#k@D#E#F#G#p#H#I#I+G+i J#) 9 ", "9@L H z.W.K#L#M#N#o.0.O#P#Q#R#S#|#T#U#V#W#X#Y#L.Z#J.`#n. $8 S [ ", "i.k+K =+V..$+$U e.@$#$%+$$%$&$*$=$-$h@@@;$>$,$'$)$u.0@!$& l.E _ ", "z.N X ~$K {$&+n.]$^$/$($_$:$Q@<$[$}$|$1$r#2$3$4$5$6$7$8$N ~$} ).", "q , l R (.+.9$U.{.0$a$U X.w.3$b$c$H#d$e$Z#f$/.g$h$d.i$j$k$l$z c ", "l.p | m$n$r@..o$<.p$-+v.` U q$P@r$%+s$q.t$u$u$v$w$V._. $w x$1+G ", "y$z$A$B$C$M#{._.1+z.$.b.W.T@D$E$@.}+F$^$G$H$I$J$B n.W.X T K$L$9 ", "k+Z M$N$O$P$Q$R$L$S$H T$U$P V$9$C <..$(.G+W$/@A.X$Y$X h ) [.=+x ", "K$Z$`$ %u#z..%+%L =+& G+7@@%#%W.G l !$]@K$$%%%Z $7..%q [.1.! &%", "%.*%=%o |.l }.D.! C.D.k+9@-%7@G ~$l.w $.H+l 5.;%l.>%l.> ,%C.F 2 "}; qosmic-1.6.0/icons/silk/000077500000000000000000000000001304321135200150605ustar00rootroot00000000000000qosmic-1.6.0/icons/silk/add.xpm000066400000000000000000000111441304321135200163370ustar00rootroot00000000000000/* XPM */ static char *add[] = { /* columns rows colors chars-per-pixel */ "32 32 111 2", " c #31087F4829AA", ". c #3520830F2CB0", "X c #393B86AE2ED6", "o c #3B198689319B", "O c #3D3188E43349", "+ c #404989D73656", "@ c #43E78C1D395F", "# c #49F592213E0B", "$ c #4EC3951C4201", "% c #532B96FE4594", "& c #528398AB434C", "* c #56249A094A9B", "= c #5AA59C3E4D12", "- c #5BD59D5D50FC", "; c #602F9FAB4F61", ": c #5ECCA1864E6C", "> c #64DFA3D55442", ", c #6A26A7F9567F", "< c #641BB01F5275", "1 c #6954A84E56EC", "2 c #67CCA59757E2", "3 c #6923A6A9585B", "4 c #6CD0AA675CFE", "5 c #71BCACAB5E71", "6 c #6CFAB5BB5556", "7 c #6D6CB60F58F0", "8 c #6C7CBA145964", "9 c #7307B5CC5CA5", "0 c #730CBB415CE2", "q c #7488AD826179", "w c #7920AF0E63BB", "e c #7603B24564D2", "r c #7BB0B0B765C3", "t c #76DBBC31617B", "y c #7AC4BD726499", "u c #7BA7B41A697C", "i c #7D90BD866AD9", "p c #6FBBC11060B6", "a c #75FEC1B36430", "s c #7895C1D66640", "d c #7C5AC15A6959", "f c #8336B5EB6CD4", "g c #8249BF706B8D", "h c #8156B68671CE", "j c #84ADBBAD73EE", "k c #8B4DBBF57528", "l c #8C18BE717B38", "z c #90CEBF8B7C68", "x c #8233C34C6E12", "c c #819FC6E47708", "v c #89A9C43E759B", "b c #821BCA20739F", "n c #8330C653789A", "m c #8C6DC4A87A8F", "M c #865ACD68797C", "N c #8AF9CBE07CB6", "B c #91FAC1AA7DE9", "V c #90E3C9057ED8", "C c #8EF3BFC08092", "Z c #9290C03E814F", "A c #8EB2C27180E7", "S c #8D9ACD0082EB", "D c #9432C47E83FF", "F c #98A9C5B885BD", "G c #93B3CB0C83CA", "H c #9C1FC7128A19", "J c #957CCC428995", "K c #9C81CBF88C0D", "L c #8DD6D13A81B7", "P c #9184D1C0869C", "I c #9646D36B8A49", "U c #9A69D39E8E43", "Y c #9BDECDDE91E5", "T c #9CC0D4D79252", "R c #9E10D8B59399", "E c #A3F5CE259412", "W c #A67BCEC09D4F", "Q c #A273D28F941E", "! c #A0B1D8D49717", "~ c #A282D541995E", "^ c #AB56D4F49E8E", "/ c #A4FADA3C9AB0", "( c #A8B6DC979F3D", ") c #A92CCF26A098", "_ c #AE7ED65FA30E", "` c #AD95DD27A47B", "' c #B3F9D7BDA663", "] c #B444DD95AAD7", "[ c #B968DAF7AD36", "{ c #BDE3DD3BB438", "} c #B6FEE198AE80", "| c #B74EE3C7B06B", " . c #BB31E351B32F", ".. c #C08CDE4FB759", "X. c #C3FFE40BBB56", "o. c #C75AE80CC161", "O. c #CBE8E6AEC398", "+. c #CBD2E987C5AD", "@. c #CF29EB0ECA06", "#. c #D0BAEB1CCA47", "$. c #DC84EDEDD766", "%. c #DE6FEEFCDA56", "&. c #E04AF1ACDD3D", "*. c #E10EF031DC5F", "=. c #E177F1DCDE55", "-. c #E3DAF045E10B", ";. c #E636F393E360", ":. c #E961F67DE717", ">. c #F76EFB73F67C", ",. c gray100", "<. c None", /* pixels */ "<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.<.<.<.<.f f u r r w q q <.<.<.<.<.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.<.<.l B D F D D Z l l j u q <.<.<.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.f k F E ' { ....{ [ _ Y k e 4 2 <.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.k z H ^ [ X.+.+.+.o.X. ._ K l u 4 > <.<.<.<.<.<.<.", "<.<.<.<.<.<.f z E [ O.#.o. .} ] ` ` ] ] ] ^ A u 2 = <.<.<.<.<.<.", "<.<.<.<.<.k z K [ O.#.+. .` ! T T R / ` | ] Q m q > = <.<.<.<.<.", "<.<.<.<.f z E [ +.@. .` ~ U J J I I U R R ! ` Q j 4 = % <.<.<.<.", "<.<.<.<.k F ' X.@.X.( I G J ~ ` ` ( U L N P / ~ J i > % <.<.<.<.", "<.<.<.k B E X.+. .( R P S ~ @.:.:.@.! M b b N I ~ J 4 & $ <.<.<.", "<.<.<.l H ^ X.X.( I P N n ~ =.,.,.&.T s s s s M / T u : & <.<.<.", "<.<.f z Q ] | ] T S N c i Y %.,.,.$.D 7 0 0 0 x I U m e = @ <.<.", "<.<.f z _ ] ` ! G G T ~ Y ] ;.,.,.-.) A G m y y v J K j = @ <.<.", "<.<.r l _ } / I N T +.;.=.;.>.,.,.>.-.$.%.X.m 0 d N Q A - + <.<.", "<.<.r l _ ] R L M ~ =.,.,.,.,.,.,.,.,.,.,.$.G 7 t v Q D - O <.<.", "<.<.w k ^ ` U M b ! =.,.,.,.,.,.,.,.,.,.,.$.G 7 0 v Q D = o <.<.", "<.<.w j E / I M b I o.%.$.-.>.,.,.>.;.%.%.X.v 0 y m K l * o <.<.", "<.<.q f J T I N b b S S m W -.,.,.;.^ V G v y t v G F h % . <.<.", "<.<.5 u j G U I b a p 8 < m $.,.,.$.V 6 6 6 7 i G J j 4 # . <.<.", "<.<.<.5 9 j Q ! b a 0 8 7 G $.,.,.$.V 6 6 6 7 x Q K 4 $ O <.<.<.", "<.<.<., > e K Q G x t 0 0 m X.=.*.X.v 6 6 9 i m K l * o . <.<.<.", "<.<.<.<.> 4 j G Q U x 0 0 y m G G v t 6 6 i K K l 4 # . <.<.<.<.", "<.<.<.<.> 3 5 h K Q V x d y 0 7 6 9 t y g m K D 4 & O . <.<.<.<.", "<.<.<.<.<.> > 4 u D Q Q G v y 0 9 y v G Q K l 4 $ O . <.<.<.<.<.", "<.<.<.<.<.<.= ; 1 u D K K G m v v v G J K l 4 & O <.<.<.<.<.<.", "<.<.<.<.<.<.<.= = : 2 e l F K K K K D j 4 * # O . <.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.% $ # = q j l C C l u 3 # X . <.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.<.<.# $ * = = = * * $ # O . <.<.<.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.<.<.<.<.@ + O o o X . . <.<.<.<.<.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<." }; qosmic-1.6.0/icons/silk/application.xpm000066400000000000000000000052451304321135200201170ustar00rootroot00000000000000/* XPM */ static char *application[] = { /* columns rows colors chars-per-pixel */ "32 32 70 1", " c #4D166E75A750", ". c #4E3A6F8EA87E", "X c #4F39709BA90C", "o c #5257753AAD2F", "O c #54B47827B00E", "+ c #5D287B56AF86", "@ c #56BA79A8B1DA", "# c #591D7D65B548", "$ c #5AEB807DB7F6", "% c #5D3182AABA5A", "& c #606E861DBD68", "* c #63E488C0BEE0", "= c #69E48A9CBCEA", "- c #71F28C6BB9CC", "; c #74CC947ABFFE", ": c #7C2D94FABEE4", "> c #63958A2AC18C", ", c #6A738D5EC079", "< c #6BD492A3C7DD", "1 c #6C5A9452CA85", "2 c #6EFC9895CEB0", "3 c #74C696CEC7A0", "4 c #7E1D9718C10D", "5 c #76809874C51F", "6 c #7F529970C298", "7 c #72189649C8C4", "8 c #73439959CD0D", "9 c #7B659CC9C976", "0 c #6FB09A22D13E", "q c #73D49DBCD406", "w c #78769F61D203", "e c #7E7CA1BECEEE", "r c #7726A0E2D6C7", "t c #7A65A2B4D655", "y c #761CA190D9C7", "u c #7B4BA58ADAD2", "i c #7E7AAA3ADF04", "p c #81F19C1BC5A2", "a c #830F9FA5CA65", "s c #862DA22FCBB9", "d c #896DA545CE73", "f c #8B96A81FD09A", "g c #85F1A933D696", "h c #8E4BAB58D43E", "j c #82C0AB86DE2C", "k c #8AA5AEF5DC4D", "l c #90C0AE15D76C", "z c #9151AF96D86E", "x c #9561B4E7DDCD", "c c #8BCBB402E4D8", "v c #9226B6DEE40F", "b c #9AF0BC34E4CD", "n c #B4BAC2C5DACD", "m c #BE7ACEA7E5E6", "M c #C076D1AEE8FE", "N c #D5D7DE39EBE7", "B c #C62AD8F9F079", "V c #D7FEE10AEE90", "C c #D8AEE1DBEF65", "Z c #DC48E648F3B6", "A c #DFB9EA57F751", "S c #E3D7EBA7F63B", "D c #EA00EF57F6F8", "F c #E2C3ECD8F8BF", "G c #EC7EF1B2F7DE", "H c #EE87F394F97C", "J c #F2B3F6C7FB39", "K c #F68AFA3AFC2C", "L c #FD30FEB2FECF", "P c None", /* pixels */ "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", "PPgkiuuuuutrrqqqqq882211115;PPPP", "*8kcjjjjjjiiuuuuuttttrwwwwe9=PPP", "tjcvcccccccccccccccccccccccg3=PP", "jjcccccccccccccccccccccccccj8,PP", "iiiiiiiiiiiiiiiiiiiiiiiiiiit<,PP", "ujvbbbbbbbbbbbbbbbbbbbbbbbbk7*PP", "yvBFFAAAAAAAAAAAAAAAAAAAFFFMa&PP", "ybALLLLLLLLLLLLLLLLLLLLLLLLCs%PP", "ybALLLLLLLKKKKKKJJJJHHGDDJLCs%PP", "ybALLKKKKKKJJJJJHHGDDDSSSDLVs$PP", "qbALLLLKKKKKKJJJJHHGGGDDSHLVs#PP", "qbALLLLLLKKKKKKJJJJHHHGGDJLNa#PP", "qxZLLLLLLLKKKKKKKJJJJJHHGJLNp@PP", "qxZLLLLLLLLLKKKKKKKJJJJHHKLNp@PP", "qxZLLLLLLLLLLKKKKKKKKJJJJKLNp@PP", "qxZLLLLLLLLLLLLKKKKKKKKJJKLNpOPP", "0xZLLLLLLLLLLLLLKKKKKKKKKKLNpOPP", "2xZLLLLLLLLLLLLLLLLKKKKKKLLN6oPP", "1xZLLLLLLLLLLLLLLLLLLLKKKLLN4oPP", "1zZLLLLLLLLLLLLLLLLLLLLKKLLN:XPP", "smZZCCCVVVNNNNNNNNNNNNNNNNn- PP", "@=affdddsssappppp66644:::::-+XPP", "P@&>*&&%%$$##@@OOoooooXX. XPPP", "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP" }; qosmic-1.6.0/icons/silk/application_edit.xpm000066400000000000000000000173551304321135200211310ustar00rootroot00000000000000/* XPM */ static char *application_edit[] = { /* columns rows colors chars-per-pixel */ "32 32 256 2", " c #52603AF80F9A", ". c #5E1943E11520", "X c #76A8531A1ED8", "o c #6F2651962092", "O c #73DC57F22176", "+ c #A9F963591AD0", "@ c #92AC67162DA1", "# c #8F436DF437EF", "$ c #867D6C9A3692", "% c #91156A9435D6", "& c #B1AF6CA82532", "* c #BF617E06277D", "= c #B341735F2A99", "- c #AF1B7CA23F2B", "; c #C0497BC53126", ": c #C04D7E8A3897", "> c #91BF7E4850ED", ", c #A36F7D015333", "< c #BB9A84913CE7", "1 c #BDBF874A39DD", "2 c #C851843E2F87", "3 c #C9C093DE2E48", "4 c #CA388FBF31DA", "5 c #ABCA84164AFD", "6 c #BCC78BA84433", "7 c #B4978EB25B3F", "8 c #B95D9AD85F30", "9 c #B6AB95A35A37", "0 c #973C878C7B9A", "q c #B70D92C86C08", "w c #A9F9994273F8", "e c #C7528AD240CE", "r c #C4DC8FF74A39", "t c #C9788F1F4D13", "y c #C8AC9A774D65", "u c #D1ED9093493D", "i c #D2109A574367", "p c #CB2D96EB56F5", "a c #C7E198265F96", "s c #CF749AA15E1F", "d c #C3BB91CB5623", "f c #D1C799A75053", "g c #D9359A09502A", "h c #D18598E655E7", "j c #CFA8A6684E82", "k c #CF82A3E343D8", "l c #DF12BC1846DF", "z c #D879A67354C5", "x c #D86FB32D521B", "c c #E5EAADC859BC", "v c #E651B2795A9D", "b c #C37997EC62B2", "n c #C7899B6C6228", "m c #D27B9D896356", "M c #DF98AC5B601F", "N c #D4B0A2E46AB3", "B c #D7C8B13367BB", "V c #DD21B0766BF5", "C c #C0E2A1DE70D8", "Z c #C585A33C7E04", "A c #C737AB507430", "S c #D788A9E67759", "D c #DC21AC9976F4", "F c #DB2EACE079D5", "G c #DF23B442768F", "H c #D9B9B17C77F2", "J c #E60BB1DB6B79", "K c #EB16BCB96DBC", "L c #E3EEAF6B730D", "P c #E8E2B32270AF", "I c #E27DB95B7FE7", "U c #E2E3B3A278AC", "Y c #E738C9A15158", "T c #E8DCCC0C5CC1", "R c #F6F3DF235D7B", "E c #F7B4E15E5F6A", "W c #EC51C3316C6C", "Q c #EF33CBF46BF0", "! c #E369C27466D1", "~ c #EF92DA766C03", "^ c #F600DDB16381", "/ c #F491DBAE6DEA", "( c #F1E0D38F6D80", ") c #E8D8C14573CA", "_ c #EF52CDF1758D", "` c #E5B9CF8B78C6", "' c #F4AAD9D5766C", "] c #F7F9E26862B9", "[ c #F7EBE2D76F77", "{ c #F8D4E2B5622D", "} c #F820E31A7060", "| c #F906E4957462", " . c #7B9E79E183F4", ".. c #4D0A6E75A75F", "X. c #4DF16FA2A90B", "o. c #4EF5708DA980", "O. c #5738764AAAF8", "+. c #571C795DB161", "@. c #6000769CA1A0", "#. c #61FC79FEA361", "$. c #766F855F96FF", "%. c #5D7E84CEBF7E", "&. c #7DA98ED7AED0", "*. c #6039863ABD57", "=. c #63E888A7BEDE", "-. c #69E48A9CBCEA", ";. c #71F28C6AB9CA", ":. c #7BAB943EBDF2", ">. c #74CC947ABFFE", ",. c #5EF08676C0F8", "<. c #631989A0C13D", "1. c #6A738D5EC079", "2. c #6BD492A3C7DD", "3. c #6C5A9452CA85", "4. c #6EFC9895CEB0", "5. c #74C696CEC7A0", "6. c #76809874C51F", "7. c #73439959CD0D", "8. c #7D649E2DCC10", "9. c #70F5964ACA80", "0. c #6FB09A22D13E", "q. c #73D49DBCD406", "w. c #78769F61D203", "e. c #7E7CA1BECEEE", "r. c #7726A0E2D6C7", "t. c #7A65A2B4D655", "y. c #761CA190D9C7", "u. c #7B4BA58ADAD2", "i. c #7E7AAA3ADF04", "p. c #821183608E3C", "a. c #849A88829645", "s. c #8241854095B2", "d. c #9A8AA332AF6C", "f. c #9310A075B09E", "g. c #D60BB521876C", "h. c #D726BB9E844A", "j. c #D8B5BFD7855A", "k. c #D2F1B8E48AFF", "l. c #D9A2B93A9237", "z. c #EAEDB9908163", "x. c #E27FBC058DD7", "c. c #EAF6BF3D8CDC", "v. c #E4B0BD8486A2", "b. c #CC7BC03FB4B2", "n. c #DE2CC63387C6", "m. c #DCE5C0478FD9", "M. c #DCA6C45592B0", "N. c #E6CAC31A87B6", "B. c #EA15C2DA87FC", "V. c #ECECC83F8DBC", "C. c #EC64CAFC8A05", "Z. c #E399C7D68E62", "A. c #EC8FD5AD8DCC", "S. c #EB47C54D94C4", "D. c #E634CA299070", "F. c #EB1CC6A09DBC", "G. c #E372CEEF9885", "H. c #E6E7C6BE97CB", "J. c #F8E1C7BF90AD", "K. c #F23DCD4E9D7F", "L. c #E9EED4C794B5", "P. c #EE92DA90955D", "I. c #EED9DD699DA5", "U. c #F19FDD399353", "Y. c #F4D4DACB9CB5", "T. c #F8ECE6318A87", "R. c #FA06E8AB8B44", "E. c #F506E190966C", "W. c #F878E2F29FBD", "Q. c #FAFFED829C35", "!. c #D04FC084A52B", "~. c #CCF7C364BCB0", "^. c #EDEECBDEA1B5", "/. c #E072CE51AF9A", "(. c #EE03CE6CAA44", "). c #F281D03CA5AB", "_. c #F18DCF0CAA4B", "`. c #EF8EDE54A17F", "'. c #E7D7D3CFAF31", "]. c #E767D971AE81", "[. c #EA49D2E3AEE0", "{. c #F1ACDF8EA2B6", "}. c #F91CD465A3B3", "|. c #E632D73CB441", " X c #EFD5D685B3A7", ".X c #E9C4DA5DB46D", "XX c #F652D77EB557", "oX c #F75DDAA5BB08", "OX c #F068E1A0A0ED", "+X c #F182E225A6E9", "@X c #FA12ECC2A767", "#X c #F670E847AB15", "$X c #F7C5E9DEABD3", "%X c #FA1FED29A986", "&X c #ED68E246B420", "*X c #F20FE652BBEC", "=X c #81EEA01ACBCE", "-X c #83F1A227CE78", ";X c #89D6A6BDD0E8", ":X c #85F1A933D696", ">X c #8E4BAB58D43E", ",X c #82C0AB86DE2C", ".UXUXUXUX", "=.7.XnXIXIXIXIXHXtX/.M.h.k.j.` ~ ^ ^ / Q v P ).fXZXIXIXcX:...UXUX", "<.-X9XnXnXnXnX0X!.k.M.m.g.H x l Y T ! B n Z ~.xXcXcXcX8X;...UXUX", "+.-.=X>X;X;X;Xf.w A '. XG f 4 3 k j y 7 0 s.&.:.:.:.:.;.+.o.UXUX", "UX+.*.<.=.,.,.$.> 8 [.oXz.g 2 * 1 1 < , .@.O.o.X.......o.UXUXUX", "UXUXUXUXUXUXUXUX$ 5 x.}.J.P u ; = = = UXUXUXUXUXUXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUXO # b U z.L h : & + UXUXUXUXUXUXUXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUX. o % 5 d p r < UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUX . X @ - 6 6 6 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX" }; qosmic-1.6.0/icons/silk/application_get.xpm000066400000000000000000000131521304321135200207520ustar00rootroot00000000000000/* XPM */ static char *application_get[] = { /* columns rows colors chars-per-pixel */ "32 32 157 2", " c #2A426B782633", ". c #2C966DC927DC", "X c #2ECE70DC29D3", "o c #313373D12C1D", "O c #352279972FA1", "+ c #2D2B6C4F2FDD", "@ c #39DC7E253350", "# c #3D537E9337F0", "$ c #33EC6F5A4188", "% c #44637D694FFE", "& c #41CF7A1E5B10", "* c #413D75D56630", "= c #4A477F09642E", "- c #3D13804835E5", "; c #3ED581973F09", ": c #407885233950", "> c #43DE84544313", ", c #45ED89823FE6", "< c #48858B1941F8", "1 c #4DA491C04579", "2 c #51D494B54AC1", "3 c #56A19D4C4DFB", "4 c #4421841E5060", "5 c #52168D935DF3", "6 c #5B459C5A539F", "7 c #5EF9962D5EBC", "8 c #66F59F905F48", "9 c #5F69A14758F1", "0 c #6394A6315B95", "q c #657AAB6A5CE9", "w c #5D0E924D60F5", "e c #6704A5736036", "r c #6B21A4226467", "t c #6E8CAFAB6777", "y c #6B3EA4B86AD9", "u c #7065AD666837", "i c #6EA6B4EA6567", "p c #7050B13D6766", "a c #73BDB3126C9C", "s c #7480B8AD6AB1", "d c #788BBAEB6F12", "f c #794BB7F67299", "g c #7C64BCB9740B", "h c #80AFBBC677A8", "j c #80DFB3A17970", "k c #8216BF0C7A1C", "l c #8152C0FF7793", "z c #83E4C1F07B30", "x c #43716DE68242", "c c #4E917C6A8233", "v c #4D2E7BAA8C03", "b c #4B3872F593FA", "n c #4EC66EE1ABDB", "m c #52C37457ADFB", "M c #5499776FB2B3", "N c #56BA79A8B1DA", "B c #59B37CB6B456", "V c #635D881A94B8", "C c #65AE89B19B19", "Z c #7B8AA59C8E81", "A c #5AEB807DB7F6", "S c #5D3182AABA5A", "D c #6163857EA3E0", "F c #729D97B6A4C9", "G c #6C9B884BB62C", "H c #606E861DBD68", "J c #63E488C0BEE0", "K c #69E48A9CBCEA", "L c #7647945FBDAF", "P c #63958A2AC18C", "I c #6A738D5EC079", "U c #6BD492A3C7DD", "Y c #6C5A9452CA85", "T c #6EFC9895CEB0", "R c #74C696CEC7A0", "E c #76809874C51F", "W c #72189649C8C4", "Q c #73439959CD0D", "! c #7B659CC9C976", "~ c #6FB09A22D13E", "^ c #73D49DBCD406", "/ c #78769F61D203", "( c #7E7CA1BECEEE", ") c #7726A0E2D6C7", "_ c #7A65A2B4D655", "` c #761CA190D9C7", "' c #7B4BA58ADAD2", "] c #7E7AAA3ADF04", "[ c #885EBCFF837E", "{ c #9AE1B834A97D", "} c #9B34B8F3A8BD", "| c #875EC3A28088", " . c #8D2FC6628580", ".. c #8C64C9AD857D", "X. c #8F25C97A881E", "o. c #9022C9CC86C6", "O. c #90FCC7088C01", "+. c #942CCC4D8CBD", "@. c #9D53C1C196AA", "#. c #9E18CF33972F", "$. c #9BCBCD7998E1", "%. c #9C22D1839444", "&. c #AECBD22CAC75", "*. c #B0A7D9B0ADB1", "=. c #B2AED727B3E4", "-. c #B51BDB24B38B", ";. c #BA9BDBC8B69E", ":. c #BE99DFCDBB36", ">. c #C23FDC51BD9E", ",. c #82B19C94C65F", "<. c #834C9E8FCA02", "1. c #862DA22FCBB9", "2. c #896DA545CE73", "3. c #8B96A81FD09A", "4. c #85F1A933D696", "5. c #8E4BAB58D43E", "6. c #82C0AB86DE2C", "7. c #8AA5AEF5DC4D", "8. c #90C0AE15D76C", "9. c #9151AF96D86E", "0. c #9561B4E7DDCD", "q. c #A061B4C8C706", "w. c #8BCBB402E4D8", "e. c #9226B6DEE40F", "r. c #9AF0BC34E4CD", "t. c #B5D5CD19C53F", "y. c #BE19DAE4C0B5", "u. c #BB84CDB0D0F6", "i. c #BE7ACEA7E5E6", "p. c #C31DE272C2C8", "a. c #D5ACE7D6DC06", "s. c #D716E91ADC84", "d. c #E229F195DDDD", "f. c #C076D1AEE8FE", "g. c #D71EDFADED68", "h. c #D862DFEBEEBE", "j. c #C62AD8F9F079", "k. c #DE81EC6FE5A5", "l. c #D7FEE10AEE90", "z. c #D8AEE1DBEF65", "x. c #DC3CE5B9F3A2", "c. c #DFB9EA57F751", "v. c #E30DEE80E651", "b. c #E490F2ABE5FF", "n. c #E97AF3F6E722", "m. c #E7C2F489E899", "M. c #EBA7F67EE992", "N. c #E3D7EBA7F63B", "B. c #EA0EEF5EF708", "V. c #E2C3ECD8F8BF", "C. c #EC9BF23BF73F", "Z. c #EED3F399F9FF", "A. c #F4F1FA9AF804", "S. c #F2CAF6C1FB4F", "D. c #F6ABFA18FC56", "F. c #FD50FEA5FED5", "G. c None", /* pixels */ "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.4.7.] ' ' ' ' ' _ ) ) ^ ^ ^ ^ ^ Q Q T T Y Y Y Y E L G.G.G.G.", "J Q 7.w.6.6.6.6.6.6.] ] ' ' ' ' ' _ _ _ _ ) / / / / ( ! K G.G.G.", "_ 6.w.e.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.4.R K G.G.", "6.6.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.6.Q I G.G.", "] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] _ U I G.G.", "' 6.e.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.7.W J G.G.", "` e.j.V.V.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.V.V.V.f.<.H G.G.", "` r.c.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.z.1.S G.G.", "` r.c.F.F.F.F.F.F.F.D.D.D.D.D.D.S.S.S.S.Z.Z.C.B.B.S.F.z.1.S G.G.", "` r.c.F.F.D.D.D.D.D.D.S.S.S.S.S.Z.C.C.B.B.B.N.N.N.B.F.l.1.A G.G.", "^ r.c.F.F.F.F.D.D.D.D.D.D.S.S.S.S.Z.Z.C.C.C.B.B.N.Z.F.l.1.B G.G.", "^ r.c.F.F.F.F.F.F.D.D.D.D.D.D.S.S.S.S.Z.Z.Z.Z.C.B.S.F.g.<.B G.G.", "^ 0.x.F.F.F.F.F.F.F.D.D.D.D.D.D.D.S.S.S.S.S.S.Z.C.S.F.g.,.B G.G.", "^ 0.x.F.F.F.F.F.F.F.F.F.D.D.D.D.D.D.D.Z.k.s.a.k.C.D.F.g.,.N G.G.", "^ 0.x.F.F.F.F.F.F.F.F.F.F.D.D.D.D.D.F.b.-.$.$.=.k.F.F.g.,.N G.G.", "^ 0.x.F.F.F.F.F.F.F.F.F.F.F.F.F.F.A.b.p.+.g g O.y.v.D.g.,.m G.G.", "~ 0.x.F.F.F.F.F.F.F.F.F.F.F.F.F.F.b.-.+.z g d g [ &.n.h.,.m G.G.", "T 0.x.F.F.F.F.F.F.F.F.F.F.F.F.A.b.p.+.g l z l f t [ >.u.L m G.G.", "Y 0.x.F.F.F.F.F.F.F.F.F.F.F.F.b.*.X.g l o.+.+.z a u j Z D m G.G.", "Y 9.x.F.F.F.F.F.F.F.F.F.F.A.b.:.| i s z +.%.%. .a 0 6 5 c b G.G.", "U 8.x.F.F.F.F.F.F.F.F.F.F.m.;.O.i q i g o.%.+. .f 0 1 > & * G.G.", "U 8.x.F.F.F.F.F.F.F.F.F.F.M.:.#. .h p a .+.+.z a e 8 w = * G.G.", "U 5.x.F.F.F.F.F.F.F.F.F.F.D.M.b.d.;.a 0 k +.X.g 9 r @.{ C b G.G.", "P 1.i.x.x.z.z.z.l.l.l.g.g.g.h.x.x.t.y 3 g o...d 2 7 } q.G n G.G.", "N K <.3.3.2.2.2.1.1.1.<.,.,.,.<.<.F 5 3 f ....a < % V G B m G.G.", "G.N H P J H H S S A A B B N N M M v 4 1 q a a 6 - $ x n m G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.; : , < , # o + G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.- @ O o X . G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G." }; qosmic-1.6.0/icons/silk/application_go.xpm000066400000000000000000000130471304321135200206030ustar00rootroot00000000000000/* XPM */ static char *application_go[] = { /* columns rows colors chars-per-pixel */ "32 32 154 2", " c #1BA679FB009A", ". c #22767E2400C8", "X c #25567EE40906", "o c #26DC78AB2324", "O c #27C978BB216E", "+ c #36FF79614B61", "@ c #39A974E55FD8", "# c #394C74D660BD", "$ c #262B809B0000", "% c #2C7083BA0D14", "& c #316286FC0C4E", "* c #355388EE0B94", "= c #3A0F8B3B0D5C", "- c #2CE383571251", "; c #3DE98CE01205", ": c #335D816D28A8", "> c #3B73833D2D12", ", c #43388EBA1564", "< c #4B9994201A78", "1 c #41218F252502", "2 c #423E8C5F2BC2", "3 c #4516925323AC", "4 c #4A2994FE227C", "5 c #4596926729B1", "6 c #557799E324A1", "7 c #55719A6F2C34", "8 c #498B8CBA358D", "9 c #491C92003266", "0 c #52F896D932C3", "q c #5B9E9D753367", "w c #64FC9FF8304B", "e c #64C9A0C23337", "r c #6A71A308377F", "t c #6232A1283AE3", "y c #6CEEA6043FB6", "u c #537F91DF4637", "i c #5F409A554B66", "p c #5F8BA1CD42F6", "a c #6352A3B344CE", "s c #6ADCA62E4167", "d c #6EEBA95D4776", "f c #6358A3914801", "g c #6B7EA7764801", "h c #710CA81043E2", "j c #73CEA95B44F9", "k c #7627ABB54BB8", "l c #7A76ACAF4AF9", "z c #760DAB0A5373", "x c #7A42ADEB52F4", "c c #7957AFB35B4E", "v c #7F67B20E591E", "b c #4C8382686934", "n c #6ADE9E4D66B0", "m c #7E41B3AC64E2", "M c #82F9B33C5D1F", "N c #8365B5556528", "B c #89C2B6BD63C5", "V c #8D6DB8A665F4", "C c #8690B7CE6BB6", "Z c #8AD6B9466C7A", "A c #904FBC0D6FCD", "S c #8D9BBBE373D5", "D c #8FEABDC57826", "F c #9295BDAF7562", "G c #94D5BF7A7993", "H c #97D9C1DE7EE5", "J c #9ABEC2197C38", "K c #4EA27D5F84BE", "L c #56DB799DB22F", "P c #58F27C77B499", "I c #5B167F90BB83", "U c #5840857A9388", "Y c #5E92867398AF", "T c #5AE680BCB7CB", "R c #5D368294BAC7", "E c #790F9EB8A1C5", "W c #606E861DBD68", "Q c #63E488C0BEE0", "! c #69E48A9CBCEA", "~ c #75EF94BEBC32", "^ c #63958A2AC18C", "/ c #6A738D5EC079", "( c #6BD492A3C7DD", ") c #6C5A9452CA85", "_ c #6EFC9895CEB0", "` c #74C696CEC7A0", "' c #76809874C51F", "] c #72189649C8C4", "[ c #73439959CD0D", "{ c #7B659CC9C976", "} c #6FB09A22D13E", "| c #73D49DBCD406", " . c #78769F61D203", ".. c #7E7CA1BECEEE", "X. c #7726A0E2D6C7", "o. c #7A65A2B4D655", "O. c #761CA190D9C7", "+. c #7B4BA58ADAD2", "@. c #7E7AAA3ADF04", "#. c #9D35C3E882CC", "$. c #A0B6C5DA878C", "%. c #A2C2C7CE891E", "&. c #A5F8C8BE8CC5", "*. c #AADBCB3B8F48", "=. c #AB11CC0391F9", "-. c #ACE5CC209D7F", ";. c #B0DFCF549811", ":. c #B407D2759CBB", ">. c #B8A1D402A786", ",. c #B80BCF2EBD1D", "<. c #83929D49C7BC", "1. c #82829F8BCABB", "2. c #8667A235CC7F", "3. c #896DA545CE73", "4. c #8B96A81FD09A", "5. c #85F1A933D696", "6. c #8E4BAB58D43E", "7. c #82C0AB86DE2C", "8. c #8AA5AEF5DC4D", "9. c #90C0AE15D76C", "0. c #9151AF96D86E", "q. c #9561B4E7DDCD", "w. c #8BCBB402E4D8", "e. c #9226B6DEE40F", "r. c #9AF0BC34E4CD", "t. c #B364C9A4C11E", "y. c #BE7ACEA7E5E6", "u. c #CA18DD4DC69F", "i. c #CC1ADF22C8BD", "p. c #D61BE638CCDA", "a. c #D8B1E803CD0F", "s. c #D48EE3F0D448", "d. c #DAA7E85ED8DD", "f. c #E230EE26DA1E", "g. c #C076D1AEE8FE", "h. c #D79BE00CEDF8", "j. c #C62AD8F9F079", "k. c #D826E128EE94", "l. c #D8C2E19EEF7C", "z. c #DC05E5C4F389", "x. c #DFB9EA57F751", "c. c #E29DEA49ECB0", "v. c #E807F0B6EE98", "b. c #E2D0EB60F716", "n. c #EA1DEF5AF751", "m. c #E2C3ECD8F8BF", "M. c #EA1CEEB9F911", "N. c #EDA5F209F7FC", "B. c #EE50F33AF9FB", "V. c #F52CF9E0F3AB", "C. c #F2F2F6EAFB43", "Z. c #F67BF9E8FC6B", "A. c #FD90FEB7FF0D", "S. c None", /* pixels */ "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.5.8.@.+.+.+.+.+.o.X.X.| | | | | [ [ _ _ ) ) ) ) ' ~ S.S.S.S.", "Q [ 8.w.7.7.7.7.7.7.@.@.+.+.+.+.+.o.o.o.o.X. . . . ...{ ! S.S.S.", "o.7.w.e.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.5.` ! S.S.", "7.7.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.7.[ / S.S.", "@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.o.( / S.S.", "+.7.e.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.8.] Q S.S.", "O.e.j.m.b.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.b.m.m.g.1.W S.S.", "O.r.x.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.l.2.R S.S.", "O.r.x.A.A.A.A.A.A.A.Z.Z.Z.Z.Z.Z.C.C.C.C.B.N.N.n.n.C.A.l.2.R S.S.", "O.r.x.A.A.Z.Z.Z.Z.Z.Z.C.C.C.C.C.B.N.N.n.M.M.M.b.b.n.A.k.2.T S.S.", "| r.x.A.A.A.A.Z.Z.Z.Z.Z.Z.C.C.C.C.B.B.B.B.B.B.M.b.B.A.k.2.P S.S.", "| r.x.A.A.A.A.A.A.Z.Z.Z.Z.Z.Z.C.C.C.C.v.s.i.u.s.c.C.A.h.<.P S.S.", "| q.z.A.A.A.A.A.A.A.Z.Z.Z.Z.Z.Z.Z.Z.Z.d.&.B M #.s.Z.A.h.<.P S.S.", "| q.z.A.A.A.A.A.A.A.A.A.A.A.Z.Z.Z.Z.A.p.V e w x -.s.V.h.<.L S.S.", "| q.z.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.p.V r h k z #.f.l.<.L S.S.", "| q.z.A.A.A.A.A.A.A.A.V.f.a.p.p.p.p.p.>.M j M v t k :.t.~ L S.S.", "} q.z.A.A.A.A.A.A.A.A.f.*.V V V B B N M x M J F x s d n Y L S.S.", "_ q.z.A.A.A.A.A.A.A.A.a.V r j l k j h k M A #.#.Z k 7 8 b K S.S.", ") q.z.A.A.A.A.A.A.A.A.a.V j V J J J J J #.#.H H H Z g 0 2 > S.S.", ") 0.z.A.A.A.A.A.A.A.A.a.B k J ;.=.&.&.%.%.#.F S H G N a 4 = S.S.", "( 9.z.A.A.A.A.A.A.A.A.a.B j J =.#.G F F S Z C N Z S D N a 4 & . ", "( 9.z.A.A.A.A.A.A.A.A.a.M h J =.#.F F S S Z N N C S D m p 3 % . ", "( 6.z.A.A.A.A.A.A.A.A.a.M y G =.&.$.#.#.#.G C C D S m f 1 - X S.", "^ 2.y.z.z.l.l.l.k.z.z.,.z e M F S Z Z Z S S S S S m f 9 : O S.S.", "L ! 1.4.4.3.3.3.2.2.2.E i 6 q q q q 7 q a c S S m f 1 : + @ S.S.", "S.L W ^ Q W W R R R I U u < < , , ; = ; 4 t m m a 5 - o # S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.* 3 a a 1 % X S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.$ & 3 5 - S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.. X % - S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.. . S.S.S.S.S.S.S.S." }; qosmic-1.6.0/icons/silk/application_home.xpm000066400000000000000000000173551304321135200211340ustar00rootroot00000000000000/* XPM */ static char *application_home[] = { /* columns rows colors chars-per-pixel */ "32 32 256 2", " c #7B207BBF7ADF", ". c #8FCF5B093244", "X c #987B66BD3C0F", "o c #9077675249F1", "O c #9DFE761C5A0F", "+ c #A60C78BE4AE8", "@ c #A6787C7158D5", "# c #A5567F6D63AE", "$ c #556C92634F98", "% c #5F5D8C525B0D", "& c #589B9704534A", "* c #5CDC992057AF", "= c #61E0A3F55A76", "- c #7D748FBA7B8A", "; c #79909C3474FA", ": c #7E0291187B94", "> c #6595A04F603B", ", c #6C68A9CE6533", "< c #729FAAC96CB2", "1 c #6D79B0D564AB", "2 c #74C6B4516DDA", "3 c #7685A366718C", "4 c #7842AC0D7145", "5 c #7E27AFD878AC", "6 c #7CD2B0F577BC", "7 c #7A9CB739746A", "8 c #AE1A81274DD8", "9 c #B6CD86CE4F01", "0 c #B84E87FB4D8E", "q c #BB8D8A5C4E51", "w c #AE9A83D253E8", "e c #AF4B86F95B16", "r c #BDB98DF052E5", "t c #B6CD8D685C6F", "y c #BFCE9311569F", "u c #93F4833D785E", "i c #84069D437F80", "p c #A0C7802368BC", "a c #AB398CB0687B", "s c #ABAE877C6729", "d c #B2CF8EAB682A", "f c #BEE996A962F7", "g c #BE39987065D9", "h c #BE9199246EAF", "j c #B58093986C10", "k c #A7BE8C727059", "l c #ACD791FF7309", "z c #B87E9987760F", "x c #84B5ACBD7E3D", "c c #80B7B1CB7966", "v c #84ACBA6C7CC4", "b c #C35494CD55F7", "n c #C24F96025ADE", "m c #CA5C9B685C8C", "M c #C62B98F25BD5", "N c #C05897D965C7", "B c #C58E9B966276", "V c #CA499FFC65B6", "C c #C3BF9E5A6CE2", "Z c #CCE7A14065C1", "A c #C5C9A0BC6DAF", "S c #CC35A3106967", "D c #C6EEA2F371BC", "F c #CBC6A8F0778F", "G c #C72AA5B2787A", "H c #D3EEADA47BBB", "J c #D60FAC317783", "K c #4CFD6E54A763", "L c #4E3A6F8EA87E", "P c #4EEE701FA823", "I c #4F567089A919", "U c #527774F5AD04", "Y c #54247829AFC5", "T c #5D347B5EAF92", "R c #568C79A7B1D0", "E c #59567D62B545", "W c #80187EF3801D", "Q c #5AE680BCB7CB", "! c #5D7782DBBAA1", "~ c #60BD864DBDB9", "^ c #64A2889BBE64", "/ c #69E88A9FBCED", "( c #749C8DFFB9F5", ") c #767F9204BBC3", "_ c #79EB939EBD11", "` c #635F89E7C12D", "' c #6A738D5EC079", "] c #6BD492A3C7DD", "[ c #6C5A9452CA85", "{ c #6EFC9895CEB0", "} c #74C696CEC7A0", "| c #7E27969FC156", " . c #76809874C51F", ".. c #7EBA9988C323", "X. c #73439959CD0D", "o. c #76BF9989C91D", "O. c #6FB09A22D13E", "+. c #73D49DBCD406", "@. c #78769F61D203", "#. c #7E7CA1BECEEE", "$. c #7726A0E2D6C7", "%. c #7A45A288D63C", "&. c #761CA190D9C7", "*. c #7AECA5A3DB73", "=. c #7E96AA3EDF04", "-. c #84E8844984E0", ";. c #8C308CE38BD0", ":. c #9CF08E17847A", ">. c #871F9380843F", ",. c #8DF393538D1A", "<. c #90E590748F60", "1. c #9CFA92DD8B78", "2. c #908B8EED908C", "3. c #9473939E93CE", "4. c #9BA79BA09BD2", "5. c #9819966997BB", "6. c #A5F69A8A8FC4", "7. c #B8B49D7C8B22", "8. c #8424AE59806A", "9. c #8BE3B38F89EC", "0. c #8F01BBFC88ED", "q. c #90E6A17F91C8", "w. c #993EA77798DC", "e. c #9911B83A9536", "r. c #BBD2A2058BFE", "t. c #B1BFA1088D09", "y. c #A008A05DA03C", "u. c #8DC0A454BFB0", "i. c #A412A3ECA41D", "p. c #A8EABDC2A6AB", "a. c #ABF6B9BFAAAB", "s. c #B14FBB74AF9F", "d. c #B39EB446B4CB", "f. c #B4FEBA2DB4EE", "g. c #C6A2AA5B835D", "h. c #C657AC878B77", "j. c #C9ECAF528B94", "k. c #D5F7B2F28497", "l. c #C0A5ADF69780", "z. c #C992AF5C93F4", "x. c #CDB3B7929966", "c. c #C3A1B428A34E", "v. c #C2E4B759AFD3", "b. c #C43BBB16AED4", "n. c #D196BF47A5D0", "m. c #C0D8BFAFC030", "M. c #CC13BC5FB14C", "N. c #8A1AC3BD870B", "B. c #9E07CA989A1F", "V. c #968DC2D29403", "C. c #A21CCE129D96", "Z. c #AA93CFD0AA91", "A. c #B0A9CC90AF57", "S. c #A8CBD08BA17D", "D. c #BE64C45DBB92", "F. c #BFCDCB36BC6D", "G. c #B7E4D51DB9B2", "H. c #B5B8DD18B583", "J. c #DD58C3FD9EC2", "K. c #DFF6C6BBA59F", "L. c #D798C4D9ACF2", "P. c #C1EEC17FBF8F", "I. c #D432C588B50C", "U. c #C20ED346BE44", "Y. c #E151C4F2A251", "T. c #E354CEB6B328", "R. c #E93ED0F0B2F0", "E. c #C3D3E2CDBFA8", "W. c #81C09C2AC5D7", "Q. c #82CD9F44CA33", "!. c #8CCDA3FFC202", "~. c #85A6A243CBAF", "^. c #89D2A6F2CEBA", "/. c #9B43AD2BC390", "(. c #9902B027CD03", "). c #943CAABCC75A", "_. c #8280AB70DE2C", "`. c #8AA5AEF5DC4D", "'. c #890AA935D3FC", "]. c #9096AD7AD746", "[. c #9286AF6FD972", "{. c #94E9B4B5DD16", "}. c #8BB0B410E52F", "|. c #9226B6DEE40F", " X c #9ACEBBEFE4B1", ".X c #B909C1C4CF4C", "XX c #BBD1C460D230", "oX c #C004C8DFD6DF", "OX c #B501C2F6DB13", "+X c #BEB9CECEE629", "@X c #C45AC3EDC238", "#X c #D4B3CD9ACB11", "$X c #C6C2D9F9C334", "%X c #C9C2D9F0C751", "&X c #C745D71DC7D0", "*X c #DBFBD33BC67E", "=X c #DDAAD5CECA5A", "-X c #C109C99ED7F0", ";X c #C333CD5AD9C8", ":X c #CF78D0A9D156", ">X c #C6B9D25EDCBD", ",X c #C900D588DFFD", " 3 p.f.4.2.5.3.-.,.p.C.7 1 < 6 9.A.BXfX| I UXUX", "] [.lXiXB.2 , = $ % - ;.-.W -.-. : ; , = * & * 9.wXfX| L UXUX", "] [.lXNXS.v v 6 3 ; >.<.<.3.3.3.<.;.>.i x c 4 < 3 e.cXfX| K UXUX", "] ].lXHXwX8X8X$XU.F.@X@X@X@X@X@X@XP.D.D.F.U.U.$X$X0XHXfX_ K UXUX", "` ~.+XkXfXpXpX,X;X-XoXoXXXXXXXXXXX.X.X.XXXXX;X>X>XsXfXOX( K UXUX", "R / ~.'.^.~.~.~.W.W....._ _ _ _ ) ) ) ) ( ( ) _ _ _ _ ( T I UXUX", "UXR ~ ` ` ~ ~ ! ! ! Q E E R R R R Y Y U U U U I P K K K I UXUXUX", "UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX" }; qosmic-1.6.0/icons/silk/application_view_list.xpm000066400000000000000000000104331304321135200221770ustar00rootroot00000000000000/* XPM */ static char *application_view_list[] = { /* columns rows colors chars-per-pixel */ "32 32 95 2", " c #4D166E75A750", ". c #4E3A6F8EA87E", "X c #4F39709BA90C", "o c #5257753AAD2F", "O c #54B47827B00E", "+ c #5D227B50AF80", "@ c #56BA79A8B1DA", "# c #591D7D65B548", "$ c #5AEB807DB7F6", "% c #5D3182AABA5A", "& c #606E861DBD68", "* c #63E488C0BEE0", "= c #69E08A9ABCEA", "- c #71EA8C62B9C3", "; c #74CC947ABFFE", ": c #7C929544BF3A", "> c #63958A2AC18C", ", c #6A738D5EC079", "< c #6BD492A3C7DD", "1 c #6C5A9452CA85", "2 c #6EFC9895CEB0", "3 c #74C696CEC7A0", "4 c #7DCC96EBC0D0", "5 c #76809874C51F", "6 c #7FB59882C272", "7 c #72169647C8C1", "8 c #73439959CD0D", "9 c #7B659CC9C976", "0 c #6FB09A22D13E", "q c #73D49DBCD406", "w c #78769F61D203", "e c #7E7CA1BECEEE", "r c #7726A0E2D6C7", "t c #7A65A2B4D655", "y c #761CA190D9C7", "u c #7B4BA58ADAD2", "i c #7E7AAA3ADF04", "p c #AEB7AEB7AEB7", "a c #B109B08BAFBB", "s c #B50DB4E3B49F", "d c #BC87BC73BC54", "f c #C10DC087BFBA", "g c #81CA9BF5C55D", "h c #834A9F45C9E8", "j c #865DA261CBFA", "k c #89D8A547CE38", "l c #85F1A933D696", "z c #8D83A97AD149", "x c #82BFAB86DE2C", "c c #8AA3AEF4DC4B", "v c #9208AE75D71E", "b c #91EAAFE1D871", "n c #95C0B47DDCEC", "m c #9875B782DF91", "M c #9941B849E056", "N c #8BCBB402E4D8", "B c #921DB6DBE410", "V c #9BA8BCCAE54E", "C c #B4ADC2B7DAC0", "Z c #92CDCF29FFFF", "A c #9B39D3DCFFFF", "S c #BE61CE9BE5E6", "D c #A107D73CFFFF", "F c #A645DA9BFFFF", "G c #C47FC46DC450", "H c #CC3BCC06CBC2", "J c #D0E2D03BCF72", "K c #D1A6D0FFD036", "L c #D35ED2E6D25A", "P c #D8B0D799D6B9", "I c #D9ADD8E3D7CD", "U c #DDA9DCA0DBD4", "Y c #E176E039DF33", "T c #C071D1A8E8F7", "R c #D6CCDF1BECD3", "E c #C616D8F0F079", "W c #D7FDE0BEEE6E", "Q c #D953E22EEFA5", "! c #DD51E628F2D0", "~ c #DF8AE92DF5FD", "^ c #DC8FEF99FF6E", "/ c #DF14F1C5FFEA", "( c #E6A3E6A3E6A3", ") c #E9E5E920E7D6", "_ c #ECBEEC9DEC69", "` c #F0EFEFF6EEB0", "' c #F21AF10DEFB2", "] c #E1B9EB33F75B", "[ c #E15FEC0DF8E4", "{ c #E37FF447FFFF", "} c #F40AF355F28D", "| c #F89AF6DCF586", " . c #F65CFBF5FFBE", ".. c #FC95FD4DFD2B", "X. c None", /* pixels */ "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.l c i u u u u u t r r q q q q q 8 8 2 2 1 1 1 1 5 ; X.X.X.X.", "* 8 c N x x x x x x i i u u u u u t t t t r w w w w e 9 = X.X.X.", "t x N B N N N N N N N N N N N N N N N N N N N N N N N l 3 = X.X.", "x x N N N N N N N N N N N N N N N N N N N N N N N N N x 8 , X.X.", "i i i i i i i i i i i i i i i i i i i i i i i i i i i t < , X.X.", "u x B V V V V V V V V V V V V V V V V V V V V V V V V c 7 * X.X.", "y B E ] ] ] ] ~ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ T h & X.X.", "y V ~ ..{ { ...| } } } } } } } } ' ' ' ' ' ` ` ` | ..Q j % X.X.", "y V ] { F F { | Y L L L L L K J H H H H H H H H H I | Q j % X.X.", "y V ] { F F { | Y L L L L L L H H H H H H H H H H I | Q j $ X.X.", "q V ~ ..{ { ...| } } } } } } } } _ _ _ _ _ _ _ _ } ..W j # X.X.", "q V ~ .{ { ...} } } _ _ _ _ _ _ _ _ _ _ _ _ _ ) } ..R h # X.X.", "q M ~ { D A { | U H H H H H H G G G G G G G G d d L } W h @ X.X.", "q m ~ { D A { | U H H H H H H G G G G G G G G d d L } W h @ X.X.", "q m ~ .{ { ...| } _ _ _ _ _ _ _ _ _ _ _ _ _ _ ) } ..R g @ X.X.", "q n ~ .{ / ...} _ _ _ _ _ _ _ ) ) ) ) ) ) ) ( ( _ ..R g O X.X.", "0 n ~ { A A / } P G G G G G G d d d d d d d s s s H ' R g O X.X.", "2 n ~ { A A / } P G G G G G G d d d d d d d s s s H ' R g o X.X.", "1 n ! .{ / ...} _ _ _ _ _ _ ) ) ) ) ) ) ( ( ( ( _ ..R 4 o X.X.", "1 b ! ./ ^ ...} _ _ ) ) ) ) ( ( ( ( ( ( ( ( ( ( _ ..R 4 X X.X.", "< b ! / Z Z ^ ' L G G d d d d s s s s s s s s p p G ` R 4 . X.X.", "< v ! / Z Z / } L G G f d d d d s s s s s s s a a G ' R : X.X.", "< v ! ./ / ...} _ _ _ _ _ _ _ ) ) ) ) ) ) ) ) ) ' ..R : X.X.", "> j S ! ! Q Q Q Q ! Q Q Q W W W W W W R R R R R R R R C - X.X.", "@ = h z z k k k k j j j h h g g g g g g 6 6 4 4 : : : - + X X.X.", "X.@ & > * & & % % $ $ # # @ @ O O o o o o o X X . X X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X." }; qosmic-1.6.0/icons/silk/application_view_tile.xpm000066400000000000000000000115301304321135200221600ustar00rootroot00000000000000/* XPM */ static char *application_view_tile[] = { /* columns rows colors chars-per-pixel */ "32 32 121 2", " c #6B89B00F6219", ". c #6BCEB0376268", "X c #72EEB50769A6", "o c #FFFF93F74E4E", "O c #FFFF97735401", "+ c #FFFFA033624F", "@ c #FFCBAF737C9C", "# c #FFFFB0DD7C54", "$ c #84F1C1CD7BA4", "% c #88A0C3A47FF0", "& c #F147D55863A7", "* c #F36CD8AE6C07", "= c #4D166E75A750", "- c #4E3A6F8EA87E", "; c #4F39709BA90C", ": c #5257753AAD2F", "> c #54B47827B00E", ", c #5D287B54AF7D", "< c #56BA79A8B1DA", "1 c #591D7D65B548", "2 c #5AEB807DB7F6", "3 c #5D3182AABA5A", "4 c #606E861DBD68", "5 c #63E488C0BEE0", "6 c #69E18A9BBCE6", "7 c #71F28C67B9BF", "8 c #74CC947ABFFE", "9 c #7BA39483BF69", "0 c #63958A2AC18C", "q c #6A738D5EC079", "w c #6BD492A3C7DD", "e c #6C5A9452CA85", "r c #6EFC9895CEB0", "t c #74C696CEC7A0", "y c #7D5396B4C21C", "u c #76809874C51F", "i c #7F5799FBC3E0", "p c #72149648C8C5", "a c #73439959CD0D", "s c #7B659CC9C976", "d c #6FB09A22D13E", "f c #73D49DBCD406", "g c #78769F61D203", "h c #7E7CA1BECEEE", "j c #7726A0E2D6C7", "k c #7A65A2B4D655", "l c #761CA190D9C7", "z c #7B4BA58ADAD2", "x c #7E7AAA3ADF04", "c c #7D7BC1E5FFFF", "v c #8F43C4398ADA", "b c #919CC43B8906", "n c #AF8DD485A801", "m c #ADE4D486A946", "M c #B07DD574A8B2", "N c #F448DF9B8A01", "B c #FFDFC5559F7C", "V c #F9BDE22082D6", "C c #F6BCE1358AA5", "Z c #FFFFC533A031", "A c #F798E88AA930", "S c #FA6DEA65A9E8", "D c #81EA9C8AC688", "F c #82F09F41C9F7", "G c #8645A1E8CB72", "H c #8962A459CE6B", "J c #8BFDA701D127", "K c #85F1A933D696", "L c #8D2EA96BD264", "P c #82BFAB86DE2C", "I c #8AA3AEF5DC4D", "U c #9058AD54D706", "Y c #9296AF14D963", "T c #95E5B485DDF0", "R c #9955B865E056", "E c #8BCBB402E4D8", "W c #921FB6DBE410", "Q c #9C24BCC1E52F", "! c #B4B9C2C0DAB9", "~ c #82A9C475FFFF", "^ c #92A4CCB4FFFF", "/ c #98DDCFFEFFFF", "( c #9FCFD281FFFF", ") c #BE66CE9CE5D1", "_ c #A155D388FFFF", "` c #AF73DAAFFFFF", "' c #B1E7DC00FFFF", "] c #BA8CDF60FFFF", "[ c #DE07EE22DAEE", "{ c #FF30E5E0D760", "} c #FFFFE94FD762", "| c #FFFFE748D871", " . c #FCA4F49AD80F", ".. c #FAE6F566DAB3", "X. c #FFFFF8BCDC0D", "o. c #C06CD1ABE900", "O. c #D580DE56EDBA", "+. c #D867E008ED10", "@. c #C619D8F1F079", "#. c #D6A3E122EFD7", "$. c #D95AE16CEE53", "%. c #C67AE5A0FFFF", "&. c #C852E70EFFFF", "*. c #D651E165F0A8", "=. c #DD09E57AF432", "-. c #DFB2E96DF6D9", ";. c #FFBEEDD5E27D", ":. c #E6DCF2ECE4CE", ">. c #E9C4F496E52C", ",. c #FD62F7CEE2F5", "<. c #FF02FAB8E5B3", "1. c #E1ECEB4DF73E", "2. c #E2DFEC3DFA68", "3. c #E42CF320FFFF", "4. c #EB0EF69BFFFF", "5. c #EFFCF8EDFFFF", "6. c #F70FFB27F6D4", "7. c #FD02FBFEF742", "8. c #F144FA5BFFFF", "9. c #FC78FE88FE01", "0. c None", /* pixels */ "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.", "0.0.K I x z z z z z k j j f f f f f a a r r e e e e u 8 0.0.0.0.", "5 a I E P P P P P P x x z z z z z k k k k j g g g g h s 6 0.0.0.", "k P E W E E E E E E E E E E E E E E E E E E E E E E E K t 6 0.0.", "P P E E E E E E E E E E E E E E E E E E E E E E E E E P a q 0.0.", "x x x x x x x x x x x x x x x x x x x x x x x x x x x k w q 0.0.", "z P W Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q I p 5 0.0.", "l W @.1.1.1.1.1.1.1.-.1.2.2.2.2.2.2.1.-.1.1.1.1.1.1.2.o.F 4 0.0.", "l Q -.9.4.3.3.3.3.4.9.6.:.[ [ [ [ :.6.9.5.4.4.4.4.8.9.$.H 3 0.0.", "l Q -.4.] ( ( ( ( ] 4.:.n b b b b n :.5.%.' ' ' ' &.8.$.G 3 0.0.", "l Q 1.3.( c ~ ~ c ( 3.[ b X X b [ 4.' ^ / / ^ ' 4.$.G 2 0.0.", "f Q 1.3.( ~ ^ ^ ~ _ 3.[ b X $ $ X b [ 4.' / _ _ / ' 4.$.G 1 0.0.", "f Q 1.3.( ~ ^ ^ ~ _ 3.[ b X $ $ X b [ 4.' / _ _ / ' 4.$.F 1 0.0.", "f R 1.3.( c ~ ~ c ( 3.[ b X X b [ 4.' ^ / / ^ ' 4.$.F < 0.0.", "f R -.4.] ( _ _ ( ] 4.:.m v v v v m :.5.%.` ` ` ` %.8.+.D < 0.0.", "f T =.9.4.3.3.3.3.4.9.6.:.[ [ [ [ :.6.9.4.3.3.3.3.5.9.+.D < 0.0.", "f T =.7.>.[ [ [ [ :.6.7.;.| | | | ;.7.7.,. . . . .<.7.O.D > 0.0.", "d T -.>.M b b b b m :.;.Z @ # @ @ B ;.,.A N N N N S <.O.D > 0.0.", "r T -.[ b X X v [ | @ o O O o @ { ..N & * * & C X.O.i : 0.0.", "e T -.[ b X % % X v [ | @ O + + O @ { ..N * V V * C X.O.y : 0.0.", "e T -.[ b X % % X v [ { @ O + + O @ { ..N * V V * C X.O.y ; 0.0.", "w Y -.[ b X X . v [ { @ o O O o @ { ..N & * * & C X.O.y - 0.0.", "w Y =.>.M b b b b m :.;.B # # # # B ;.<.S C C C C S <.O.9 = 0.0.", "w U =.7.>.[ [ [ [ >.6.7.;.} } } } ;.7.7.<.X.X.X.X.<.7.O.9 = 0.0.", "0 G ) =.=.=.=.=.=.*.$.#.#.*.*.*.#.O.O.O.O.O.O.O.O.O.O.! 7 = 0.0.", "< 6 F L L J J H H H G G F F D D D i i i y y y y y 9 9 7 , ; 0.0.", "0.< 4 0 5 4 4 3 3 2 2 1 1 < < > > : : : : : ; ; - = = = ; 0.0.0.", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0." }; qosmic-1.6.0/icons/silk/arrow_inout.xpm000066400000000000000000000050471304321135200201640ustar00rootroot00000000000000/* XPM */ static char *arrow_inout[] = { /* columns rows colors chars-per-pixel */ "32 32 64 1", " c #41B58B7B3E9C", ". c #44F28E7C413C", "X c #46A890D84287", "o c #4A19946545B5", "O c #4C9D98DF471E", "+ c #4D8395A74947", "@ c #4E8A9A994922", "# c #519E97C94D67", "$ c #52569D7C4CED", "% c #55139ACE50D6", "& c #582A9D39542F", "* c #552AA2B84E5E", "= c #5749A56D504B", "- c #59E6A52D537E", "; c #5CEBABAA551E", ": c #5E78A11A5A3F", "> c #5F4BA97A5860", ", c #5F3BB03C5736", "< c #60C2AFE157AA", "1 c #6133A3245D76", "2 c #6356ADD45BFE", "3 c #6463B3BF5B51", "4 c #6728B8E75D14", "5 c #6923BB335E9F", "6 c #6593A6E4612B", "7 c #66DDAF205FED", "8 c #6986AB4B6491", "9 c #6DA5AC1F6999", "0 c #71E3AF7A6CE6", "q c #67D1B26F6025", "w c #6C20B40C649B", "e c #6CB8BE78620D", "r c #6F88B2506957", "t c #7014C00F65F8", "y c #72B0B5616BEF", "u c #73E0BCA16AAA", "i c #7711B73D70D9", "p c #79BAB64473EA", "a c #7738B89B70E5", "s c #7B0FBAB67406", "d c #7E40B6D4796F", "f c #7F44BAEE79A6", "g c #6E9CC0B963D4", "h c #721FC5416640", "j c #75A5C4A66AC5", "k c #787EC6076DC4", "l c #795EC9146DC3", "z c #7D56C67273CE", "x c #7EF9C927744B", "c c #8225BDE97B55", "v c #81CFCA81773F", "b c #85C9C5717D1A", "n c #8653CC147C1D", "m c #88DCCB507F23", "M c #889BBF4382A9", "N c #87A5C1ED8101", "B c #8AA4C29B83D2", "V c #8CBACD21831D", "C c #9311C6E98C94", "Z c #947ECD678B88", "A c #940AD0FD8A4B", "S c #9D39D29793FD", "D c #A279D2459A47", "F c None", /* pixels */ "jhhhhhhhhhFFFFFFFFFFFF443333<;;;", "hjllllhhhhFFFFFFFFFFFF43333333;;", "hlvnmvjhFFggFFFFFFFF44FF33wuyw2;", "hlnVAVxjFFggFFFFFFFF33FF3wscsy2;", "hlnASSVvkgeeFFFFFFFF3333wsNBcy2-", "hjxVSSZVvkteFFFFFFFF33wyacBNsw>=", "hhjxVZZZZVj5FFFFFFFF3wfbcccsq>-=", "hhhjzmZSDZk5FFFFFFFF,wNCBcaw>=**", "hhFFhzZDDZu4FFFFFFFF;wNCCcr2FF**", "hhFFejmZZbu4FFFFFFFF;qscci2-FF**", "FFeeeejjuue4FFFFFFFF;<2q72-=**FF", "FFeeee554444FFFFFFFF;;;====***FF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FF3333;;;;;;FFFFFFFF$$@@OOOOooFF", "FF3333qqq2;;FFFFFFFF$$---%@oooFF", "33FF3wacci2=FFFFFFFF@-8y06$oFFXX", "33FF3ycBBf2=FFFFFFFF@-0dp9&+FFXX", "33;3ryscMd2*FFFFFFFFO-9p08:%+XXX", "<<3waspppy>*FFFFFFFFO$69866:#oX.", ";2waccir2>=*FFFFFFFFO@%:1898:#X.", ";2yscfr2-***FFFFFFFFoo+#&1991%o ", ";2wyyr2;FF**FFFFFFFFooFF+#16:%X ", ";>2772-*FF$$FFFFFFFFooFF.o%&%+. ", ";;;>--=**$FFFFFFFFFFFFX...ooX.. ", "--==****$$FFFFFFFFFFFFXX... " }; qosmic-1.6.0/icons/silk/arrow_left_right.xpm000066400000000000000000000172401304321135200211530ustar00rootroot00000000000000/* XPM */ static char * arrow_left_right_xpm[] = { "32 32 350 2", " c None", ". c #4D9745", "+ c #4C9544", "@ c #4A9242", "# c #489040", "$ c #448B3C", "% c #4E9546", "& c #4D9345", "* c #4A8F42", "= c #468B3F", "- c #74C768", "; c #73C767", "> c #71C665", ", c #70C464", "' c #6EC162", ") c #6CBF60", "! c #6ABC5E", "~ c #67B95C", "{ c #65B65A", "] c #62B257", "^ c #5EAE55", "/ c #5BAA52", "( c #58A64F", "_ c #55A24C", ": c #529E49", "< c #4F9A46", "[ c #4B9543", "} c #489140", "| c #4D9445", "1 c #579B4F", "2 c #5A9D52", "3 c #579A50", "4 c #4F9248", "5 c #3F8238", "6 c #77C86B", "7 c #7ECB73", "8 c #81CB76", "9 c #80C974", "0 c #7EC772", "a c #7CC570", "b c #7AC36E", "c c #77C06C", "d c #75BD6A", "e c #72BB68", "f c #6FB765", "g c #6CB463", "h c #69B061", "i c #66AD5E", "j c #63AA5B", "k c #60A658", "l c #5CA355", "m c #599F52", "n c #5DA155", "o c #67A85F", "p c #6BAB64", "q c #68A961", "r c #5C9D56", "s c #478941", "t c #3A7C34", "u c #95D28A", "v c #A0D596", "w c #9ED494", "x c #9CD292", "y c #9AD190", "z c #98D08E", "A c #95CE8C", "B c #93CD8A", "C c #91CB88", "D c #8FC986", "E c #8CC784", "F c #89C582", "G c #87C37F", "H c #84C17C", "I c #81BF7A", "J c #7EBD77", "K c #7CBB75", "L c #7BBB75", "M c #7EBD78", "N c #7CBC76", "O c #6EAF68", "P c #569750", "Q c #43853D", "R c #33742E", "S c #B0DBA7", "T c #AED9A5", "U c #ABD8A2", "V c #A9D7A0", "W c #A7D69E", "X c #A5D59C", "Y c #A3D49A", "Z c #A1D398", "` c #9FD296", " . c #9CD195", ".. c #9ACF93", "+. c #97CE90", "@. c #95CD8E", "#. c #92CC8B", "$. c #90CB89", "%. c #8DC987", "&. c #8BC885", "*. c #88C682", "=. c #86C680", "-. c #84C57F", ";. c #76B771", ">. c #5C9E57", ",. c #468740", "'. c #32722D", "). c #266622", "!. c #ADD9A4", "~. c #A8D79F", "{. c #A6D69D", "]. c #A4D59B", "^. c #A2D399", "/. c #A0D297", "(. c #9ED195", "_. c #9BD093", ":. c #99CF91", "<. c #96CE8F", "[. c #94CD8D", "}. c #91CC8A", "|. c #8FCA88", "1. c #8CC985", "2. c #8AC783", "3. c #87C681", "4. c #84C47E", "5. c #83C47D", "6. c #81C37B", "7. c #73B56E", "8. c #599B54", "9. c #43843E", "0. c #2F6F2B", "a. c #246320", "b. c #6FC162", "c. c #7AC56E", "d. c #8ECC84", "e. c #99CF8F", "f. c #96CD8D", "g. c #93CB8A", "h. c #91CA88", "i. c #8EC885", "j. c #8CC583", "k. c #8AC381", "l. c #87C27F", "m. c #84C07C", "n. c #81BE79", "o. c #7FBC77", "p. c #7CBA75", "q. c #79B872", "r. c #76B570", "s. c #75B46E", "t. c #74B46E", "u. c #75B66F", "v. c #78B972", "w. c #77B971", "x. c #73B56D", "y. c #65A75F", "z. c #4D8F48", "A. c #3B7C37", "B. c #2D6D29", "C. c #6EBF61", "D. c #70BF64", "E. c #75C06A", "F. c #76BE6C", "G. c #73BB69", "H. c #70B867", "I. c #6DB564", "J. c #6BB162", "K. c #68AE5F", "L. c #65AB5C", "M. c #62A759", "N. c #5FA457", "O. c #5CA054", "P. c #599D51", "Q. c #55994E", "R. c #52954B", "S. c #4E9148", "T. c #52944C", "U. c #599B53", "V. c #63A65E", "W. c #64A75F", "X. c #5B9E56", "Y. c #4C8E47", "Z. c #387934", "`. c #2C6C28", " + c #6DBE61", ".+ c #6BBD5F", "++ c #68B95C", "@+ c #64B55A", "#+ c #61B257", "$+ c #5EAE54", "%+ c #4E9A46", "&+ c #458D3D", "*+ c #41883A", "=+ c #3D8437", "-+ c #3A8033", ";+ c #3A7F34", ">+ c #3F8339", ",+ c #468940", "'+ c #4E9149", ")+ c #44863F", "!+ c #3A7B35", "~+ c #2B6B28", "{+ c #387A33", "]+ c #367732", "^+ c #33742F", "/+ c #276723", "(+ c #266522", "_+ c #246421", ":+ c #73C667", "<+ c #72C666", "[+ c #71C465", "}+ c #79C96D", "|+ c #79C86D", "1+ c #77C66B", "2+ c #74C369", "3+ c #82CB77", "4+ c #85CB79", "5+ c #83C977", "6+ c #7CC470", "7+ c #6EBC63", "8+ c #64B559", "9+ c #3E8437", "0+ c #3A8034", "a+ c #377C31", "b+ c #34782E", "c+ c #31742C", "d+ c #30712A", "e+ c #2F702A", "f+ c #81CB75", "g+ c #8ECF83", "h+ c #93D089", "i+ c #91CE87", "j+ c #89C97F", "k+ c #7CC272", "l+ c #74BD6A", "m+ c #72BA67", "n+ c #5DA355", "o+ c #5AA052", "p+ c #579C50", "q+ c #54984D", "r+ c #51954A", "s+ c #4D9147", "t+ c #4A8E45", "u+ c #488B42", "v+ c #40823A", "w+ c #33752E", "x+ c #2D6E28", "y+ c #82CA76", "z+ c #8DCE82", "A+ c #9DD393", "B+ c #A4D69A", "C+ c #A2D498", "D+ c #9DD294", "E+ c #97CF8E", "F+ c #93CC8A", "G+ c #91CB87", "H+ c #79B973", "I+ c #77B771", "J+ c #74B56E", "K+ c #72B36C", "L+ c #70B26A", "M+ c #6EB068", "N+ c #5B9D55", "O+ c #286924", "P+ c #84CA79", "Q+ c #92CF88", "R+ c #A3D59A", "S+ c #A8D7A0", "T+ c #89C783", "U+ c #85C57F", "V+ c #84C57E", "W+ c #82C57D", "X+ c #69AC64", "Y+ c #3C7D38", "Z+ c #256521", "`+ c #82C877", " @ c #90CD86", ".@ c #A1D497", "+@ c #8AC784", "@@ c #86C580", "#@ c #81C37C", "$@ c #7FC479", "%@ c #66AA61", "&@ c #397A36", "*@ c #22621F", "=@ c #75C369", "-@ c #7CC471", ";@ c #86C87C", ">@ c #95CD8B", ",@ c #9CD093", "'@ c #9BD092", ")@ c #98CD8F", "!@ c #92C989", "~@ c #8CC584", "{@ c #88C27F", "]@ c #76B670", "^@ c #74B36D", "/@ c #71B16B", "(@ c #6FAF69", "_@ c #6CAE67", ":@ c #6AAC64", "<@ c #68AA62", "[@ c #67A961", "}@ c #65A860", "|@ c #52954E", "1@ c #32722E", "2@ c #215F1E", "3@ c #6FBD64", "4@ c #76BE6B", "5@ c #81C277", "6@ c #88C57E", "7@ c #8BC682", "8@ c #85C27C", "9@ c #78B86F", "0@ c #6DB064", "a@ c #64A95C", "b@ c #5EA456", "c@ c #5BA053", "d@ c #52964B", "e@ c #4C8F45", "f@ c #498B43", "g@ c #468840", "h@ c #43853E", "i@ c #40823B", "j@ c #3E7E39", "k@ c #397A35", "l@ c #266523", "m@ c #205E1D", "n@ c #6BB860", "o@ c #71B967", "p@ c #75B96B", "q@ c #77BA6E", "r@ c #73B66A", "s@ c #68AD5F", "t@ c #5CA453", "u@ c #519B49", "v@ c #31742B", "w@ c #2E6F28", "x@ c #2B6C26", "y@ c #286823", "z@ c #64AF5A", "A@ c #63AD5A", "B@ c #61AA58", "C@ c #60A857", "D@ c #5CA554", "E@ c #58A54F", "F@ c #55A14C", "G@ c #539E4A", "H@ c #519C48", "I@ c #509B47", " ", " ", " . + ", " @ # $ ", " % & * = ", " - - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 ", " - 6 7 8 9 0 a b c d e f g h i j k l m n o p q r s t ", " ; 7 u v w x y z A B C D E F G H I J K L J M N O P Q R ", " > 8 v S T U V W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'.). ", " , 9 w !.U ~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a. ", " b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B. ", " C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.4 S.T.U.V.W.X.Y.Z.`. ", " +.+++@+#+$+/ ( _ : %+[ } &+*+=+-+;+>+,+'+z.)+!+~+ ", " {+]+^+0.`. ", " /+(+a. ", " _+a. ", " :+:+ ", " <+[+[+ ", " }+|+1+2+ ", " }+3+4+5+6+7+8+#+^ / ( _ : < [ } &+*+9+0+a+b+c+d+e+ ", " }+f+g+h+i+j+k+l+m+f g h i j k n+o+p+q+r+s+t+u+v+w+x+ ", " }+y+z+A+B+C+D+E+F+G+D E F G H I J K H+I+J+K+L+M+N+!+O+ ", " <+|+P+Q+R+U S+{.X Y Z ` ...+.@.#.$.%.&.T+3.U+V+W+X+Y+Z+ ", " [+1+`+ @.@~.X Y Z /.(._.:.<.[.}.|.1.+@*.@@4.#@6.$@%@&@*@ ", " =@-@;@>@,@'@)@!@~@{@m.n.o.p.q.]@^@/@(@_@:@<@[@}@|@1@2@ ", " 3@4@5@6@7@8@9@0@a@b@c@P.Q.d@4 e@f@g@h@i@j@A.k@1@l@m@ ", " n@o@p@q@r@s@t@u@[ } &+*+9+0+a+b+v@w@x@y@Z+*@2@m@m@ ", " z@A@B@C@D@ ", " E@F@G@ ", " H@I@ ", " ", " "}; qosmic-1.6.0/icons/silk/arrow_out.xpm000066400000000000000000000052701304321135200176330ustar00rootroot00000000000000/* XPM */ static char *arrow_out[] = { /* columns rows colors chars-per-pixel */ "32 32 71 1", " c #418F8B803E60", ". c #45028EDA4122", "X c #46C490DC42BE", "o c #49AA9298458B", "O c #4D6A99034761", "+ c #4DD094EF4A1E", "@ c #4E6599C94938", "# c #504897654B95", "$ c #52B79DA34D34", "% c #55BE9D9950F4", "& c #59E39E325561", "* c #5DC19F535997", "= c #5571A3444EA1", "- c #57A9A5C450A4", "; c #5ACEA5DE5451", ": c #5CB0AB9C54CD", "> c #5E6EA2C859F6", ", c #5F10A9D55832", "< c #609FAFD3578A", "1 c #6281A5095DCA", "2 c #621FACB65AE3", "3 c #606EB1145771", "4 c #64B0B30F5C07", "5 c #6804B4265F45", "6 c #67E2B9D85DCF", "7 c #6940BAE85EE9", "8 c #6683A6D96203", "9 c #681AA6D463B5", "0 c #6708A90D6247", "q c #695FABF163CC", "w c #6ED9ACD26AE0", "e c #7171AE6C6D12", "r c #6BD0B3866450", "t c #6D9FBDD063AC", "y c #7158BE696762", "u c #7385B5CB6CAF", "i c #7448B9B06C3C", "p c #74E4B01E7018", "a c #7671B80F7017", "s c #79E7B76D733E", "d c #77D0B8D7700F", "f c #7B9DBAC2747C", "g c #7F31BE317801", "h c #71C2C52D65D9", "j c #7423C4FD6901", "k c #79ABC6F16EF6", "l c #7774C8C36BA2", "z c #7D23C48E7399", "x c #7D15C9BE71F5", "c c #8269BD6D7BA8", "v c #8114C58C77D6", "b c #80F7CA90762F", "n c #863DC26D7E65", "m c #84C2CAE77B63", "M c #88A4CA7F7F36", "N c #89D4BFE78321", "B c #87BEC1EC80AE", "V c #8A9BC3468369", "C c #8C7DCBE58354", "Z c #9056CF2A85F1", "A c #935AC78F8CCA", "S c #954ACDFF8CAA", "D c #924ED1658885", "F c #9823D0BD8EF0", "G c #9774CA4B90A0", "H c #9991CFCF9088", "J c #9B86D3009276", "K c #A5AAD6349D4D", "L c #A931D76FA099", "P c #AB8ED8F6A386", "I c None", /* pixels */ "jjhhhhhhhhIIIIIIIIIIII644433::::", "jlxbbxjhhhIIIIIIIIIIII6445rrrr<:", "hxDJJZkhIIIIIIIIIIIIIIII4rgVVg5:", "hbJPLJbjIIIIIIIIIIIIIIIIriBAGBr;", "hbJKKFMzjIIIIIIIIIIIII35ifnVAcr-", "hxCJJSZCzjIIIIIIIIIIII5rgncccd2-", "hjxmCSJSMzyIIIIIIIII35igVVgur2;-", "hhjkbCHHCzy7IIIIIIII35icVnar,===", "hhIIjzCCMzy6IIIIIIII:5iffur,II==", "hhIItjzvzzyIIIIIIIIII4rurr2III==", "IIIIIIyyytIIIIIIIIIIII2222IIIIII", "IIIIII776IIIIIIIIIIIIII--IIIIIII", "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII", "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII", "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII", "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII", "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII", "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII", "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII", "IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII", "IIIIIII::IIIIIIIIIIIIII@OOIIIIII", "IIIIII4422IIIIIIIIIIII%%$$IIIIII", "44III4rrrr2IIIIIIIIII%>11>#oIIXX", "43II4ridur2-IIIIIIII@%>0q8%@IIXX", "33:2riccsr,=IIIIIIIIO$>0ee1&#oX.", "<35rusccuq,=IIIIIIIII$;1we91&#o.", ":5dgsssu2,IIIIIIIIIIII@%18188>+ ", ":rcNcsuq;=IIIIIIIIIIIII+%*1qe8+ ", ":rcVcsq,IIIIIIIIIIIIIIIIo%8ep9+ ", ":2ufsu2-IIIIIIIIIIIIIIII.+>99*o ", ";:222,-==$IIIIIIIIIIIIX..X+++o. ", ";;-=====$$IIIIIIIIIIIIXX.. " }; qosmic-1.6.0/icons/silk/arrow_redo.xpm000066400000000000000000000050461304321135200177560ustar00rootroot00000000000000/* XPM */ static char *arrow_redo[] = { /* columns rows colors chars-per-pixel */ "32 32 64 1", " c #210E5F621DE5", ". c #223560F21E91", "X c #25C2652821D6", "o c #2A3F6B1525D9", "O c #2D6F6EF728EE", "+ c #2F1271E02A14", "@ c #316C739C2C92", "# c #34C978512EE6", "$ c #35E976EE31BD", "% c #36A179DB315A", "& c #39787B9234C6", "* c #3DA47EEE38C4", "= c #3C6F829735B2", "- c #3F4D83C139E0", "; c #42B9854B3D8A", ": c #45638CF13E1A", "> c #47B291A73F9D", ", c #465089314094", "< c #49398D8042DD", "1 c #4BBD92E24467", "2 c #4ED09AB346AC", "3 c #4F6894E947F0", "4 c #521E956A4D61", "5 c #54629B6C4C98", "6 c #57199B205068", "7 c #5BB49EF754B3", "8 c #55C0A27C4C71", "9 c #584DA4354F11", "0 c #5CD2A48F543C", "q c #5D67AC98532D", "w c #6221A6025BB7", "e c #6511AAD45C98", "r c #6852AED25F23", "t c #61A7B18D56CB", "y c #644BB4EA5944", "u c #670CA7AD6029", "i c #6693AA2060CB", "p c #6AE9AD33642C", "a c #6F0CAEDA67F7", "s c #7018AF2968E4", "d c #6CC1B2FE63A5", "f c #6F9AB1C568F0", "g c #70ECBBAD6678", "h c #731AB3A06B80", "j c #748ABCE36A43", "k c #7BAABC8B74B2", "l c #7F00BD5977F8", "z c #7C16C17B747A", "x c #7F06C1AE78EE", "c c #82ADBF5B7B01", "v c #83DDC2ED7C52", "b c #887EC6F07EFC", "n c #87E4C2CE80B0", "m c #8B4AC59E8365", "M c #8E37C94C85A1", "N c #90C3CB708713", "B c #93B2CBDD8B29", "V c #98F5CED38FD2", "C c #97BBCEF4903D", "Z c #9A04CFBA91CA", "A c #9DA6D1C694B7", "S c #A0A4D370975D", "D c #A4A2D5859BEC", "F c None", /* pixels */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFF998FFFFFFF", "FFFFFFFFFFFFFFFFFFFFFF0000FFFFFF", "FFFFFFFFFFFyyttqqq0980rppe5FFFFF", "FFFFFFFFjjjjjjggddddrdhkkhw5FFFF", "FFFFFFFgzvmMNBBBNNMMmmMMMca03FFF", "FFFFFFjzbNVASDDDDDSSAAAZCmhw3FFF", "FFFFFjvNASASDDDDDSAAAAZCVns71FFF", "FFFFgzNADDDAZBNmmmnvcvnnnku6:FFFFFFFFFFFFFFFFFFF", "FFFrkvMNNci541FFFFFFFFFFFFFFFFFF", "FFFehkmBBmlhw5:=&&%##@@OOoooFFFF", "FFF0ehvMNMnlhw531<<,,;;;-&OoFFFF", "FFFF5whcmmvvlkhhffappiiii4$XFFFF", "FFFFF5ehkcllvbvvvvvxxzzzzw&XFFFF", "FFFFFF47eahklvvvvxxxkkkkkw%.FFFF", "FFFFFFF160wupppppiiiewwww4@ FFFF", "FFFFFFFF<<<<<,;;;;-**&&&$@X FFFF", "FFFFFFFFFFF%#@@+OoooXXX.. FFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }; qosmic-1.6.0/icons/silk/arrow_refresh.xpm000066400000000000000000000053731304321135200204660ustar00rootroot00000000000000/* XPM */ static char *arrow_refresh[] = { /* columns rows colors chars-per-pixel */ "32 32 74 1", " c #2232608B1E52", ". c #248C637B20C1", "X c #2B1C6CB025D7", "o c #2E926E202A54", "O c #2FC86F2A2B62", "+ c #2E717114291A", "@ c #320B73D12D25", "# c #355579A72FA7", "$ c #350175363058", "% c #36977974318E", "& c #39677CA9338A", "* c #3D867E31389E", "= c #3D0582DD3619", "- c #3F91856338B2", "; c #420284F43BF6", ": c #44BE8BF23D4E", "> c #46F9901E3F86", ", c #45DA86D0409A", "< c #474189334172", "1 c #4A8C8CCC448D", "2 c #4E748F7B48FD", "3 c #47B590BF3FC8", "4 c #4BE29459442F", "5 c #4EB399B646B7", "6 c #4F8E91C748DF", "7 c #4FF19B3A47B6", "8 c #513C94014ABF", "9 c #53809BD24B90", "0 c #56BA975350A8", "q c #5A289C31539C", "w c #5F0A9F4B584C", "e c #558DA21C4CCD", "r c #5980A7124F9E", "t c #5C46A32A5412", "y c #5D83AC6553EF", "u c #62CCA4435BE6", "i c #6468AA9B5BF5", "p c #68CEAF7A5F90", "a c #6395B156599C", "s c #6AA3BC9B5F64", "d c #6C1CAC5364F5", "f c #7061AF046993", "g c #6D20B42163EB", "h c #6D6BBBD262C4", "j c #71D6BD9B6749", "k c #749EB3EA6D76", "l c #7416BBB66A1F", "z c #78D5BEAA6ECF", "x c #776DB69470CF", "c c #7901B6B071BB", "v c #77D1B8527147", "b c #7BECBA7B7417", "n c #7FFEBD0D7889", "m c #747CC1B369B2", "M c #7D13C2EA72D8", "N c #80A0BF827761", "B c #82C1BE777B29", "V c #80DCC39D7751", "C c #8579C30E7D22", "Z c #8873C83B7E7B", "A c #8994C9E67F9F", "S c #8B57C66E831E", "D c #8DA7C9898524", "F c #8ED0C9C9881D", "G c #90F3C83688F4", "H c #9423CC3C8C10", "J c #9895CE9F8FA1", "K c #989ED0868F23", "L c #97F5CF0E90B4", "P c #9A09CF69917E", "I c #9DA5D1AE9539", "U c #A09DD29E97C7", "Y c #A36AD46D9AC8", "T c None", /* pixels */ "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTT754TTTTTTTTTTT", "TTTTTTTTTTTTTTTTTT9996TTTTTTTTTT", "TTTTTTTTTayyre9547tut0:;=&TTTTTTTTTTTTTTTe744::;==", "TTTTTTTTTTTTTTTTTTTTTTT9tttq81-&", "TTTTTTTTTTThhsTTTTTTT54tkNncfw;#", "TTTTTTTTTTmmjhTTTTTTtttdBGHScu;+", "TTTTTTTTTmMMMlate979udxBSGFBd0;T", "TTTTTTTTmMADSClgpiiigcCSDSCkq c #55E397D94FF2", ", c #569E98D750FB", "< c #5A779E7F538E", "1 c #56DAA14F4E3B", "2 c #588AA4C44F74", "3 c #5C36A3BD53D4", "4 c #5E26AB5654B3", "5 c #5FD0A2B05A5F", "6 c #60C1AFF255C3", "7 c #6293A6385B35", "8 c #6574AA8D5D15", "9 c #6175B12E56DA", "0 c #6599B5185B36", "q c #68CBB3305F43", "w c #691FBA8A5DB6", "e c #667CA8246066", "r c #6B0DAD086406", "t c #6E6AAF826878", "y c #6DC3B2B4650F", "u c #6EE9B9926501", "i c #7041B83165FA", "p c #717DB92F67AF", "a c #736BB39C6C60", "s c #74FBBC026AB5", "d c #7915BAE26F60", "f c #76F7B56A7001", "g c #7869B72A7163", "h c #7B93BBAA742C", "j c #7EDFBE6878A0", "k c #730BC17567BC", "l c #7566C2076A61", "z c #7939C20D6E11", "x c #7D2FC51C7251", "c c #7FDCC0F978D6", "v c #8046BF717717", "b c #815CBF3079FF", "n c #8038C641759B", "m c #84BBC3577D45", "M c #894AC4C37F75", "N c #86EEC8657CF2", "B c #8913C9B87E5D", "V c #8772C54180BE", "C c #8ACBC655832E", "Z c #8D0DC99D857B", "A c #8F9BCA9B8884", "S c #90E2CAD186AF", "D c #94BBCC7D8BCE", "F c #9846CF508E91", "G c #99A9D09E8F57", "H c #9AEECF7E923D", "J c #9D68D1C09414", "K c #A088D27A97A9", "L c #A542D59F9BEA", "P c #A8DED7579F6D", "I c #AA4BD823A10E", "U c #AB85D8F9A1C4", "Y c None", /* pixels */ "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY", "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY", "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY", "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY", "YYYYYYYYYYYYwww00096YYYYYYYYYYYY", "YYYYYYYYYYYzzzzzsspiyYYYYYYYYYYY", "YYYYYYYYYkxBSFGGFDSMhy4YYYYYYYYY", "YYYYYYYYlxBDJLPUILJDVhr3YYYYYYYY", "YYYYYYYknZJLLLPPPLJHFChr3YYYYYYY", "YYYYYYkxZJLILKJHHHHJJHVd7:YYYYYY", "YYYYYYxBJLPPLHSMMCDHJHDmt5YYYYYY", "YYYYYzNDLIPKDCvddhbCDHHZge:YYYYY", "YYYYwzAJLPLDgyq8877yVDDCba;@YYYY", "YYYYwsNSDDZvq2YYYY=3hCZZCf;+YYYY", "YYYY0wuppuyq4YYYYYY3yhCAZg;OYYYY", "YYYY009944432YYYYYY<8amAAg-OYYYY", "YYYYYYYYYYYY11YYYYY:8amZZa*oYYYY", "YYYYYYYYYYYY::YYYY#:edmVVa&XYYYY", "YYYYYYYYYY::::YYY##;avmmjr&.YYYY", "YYYYYYYYYY33::YY*;;7gmmha7% YYYY", "YYYYYYYY:17873**:7ahmmmhe>@YYYYY", "YYYYYYYY15yaar3<8abVMmjt,&YYYYYY", "YYYYYY:17yjMmbhhhjcmmjt<$oYYYYYY", "YYYYYY::7aMAZZZCCmjhgt<&oYYYYYYY", "YYYYYY=:7amZZCCVVmha8,#oYYYYYYYY", "YYYYYY=:<8gbjhaaate7;%oYYYYYYYYY", "YYYYYYYY*:7re5;&&&%@@YYYYYYYYYYY", "YYYYYYYY#*;;;*@X.. YYYYYYYYYYYY", "YYYYYYYYYY##@@YYYYYYYYYYYYYYYYYY", "YYYYYYYYYYOOooYYYYYYYYYYYYYYYYYY", "YYYYYYYYYYYYXXYYYYYYYYYYYYYYYYYY", "YYYYYYYYYYYYXXYYYYYYYYYYYYYYYYYY" }; qosmic-1.6.0/icons/silk/arrow_undo.xpm000066400000000000000000000055141304321135200177720ustar00rootroot00000000000000/* XPM */ static char *arrow_undo[] = { /* columns rows colors chars-per-pixel */ "32 32 78 1", " c #2A836C04269C", ". c #2C616EB52853", "X c #2E4770FB29CE", "o c #31C774892CF2", "O c #34CB79452FA0", "+ c #35C376FE314B", "@ c #370F7B8A315E", "# c #3A137D82348B", "$ c #3C9B82743628", "% c #3E4E803639A8", "& c #424884DC3D33", "* c #44418B9B3D39", "= c #477B911E3FA5", "- c #46B78A574101", "; c #4A9A8DF044A9", ": c #4CF98FE747EF", "> c #4C3991B1452B", ", c #4F4693A148E4", "< c #51DD95C04BB0", "1 c #54339AE14CD3", "2 c #57069B9D5046", "3 c #5A099E145347", "4 c #5504A20A4C0F", "5 c #5800A63E4EB8", "6 c #57BBA0C34FFA", "7 c #5C09A40A53B3", "8 c #5CD6AB9852E1", "9 c #5EFCA29B58D4", "0 c #603DA7B15792", "q c #6241A4AE5B9E", "w c #6668AB4D5E61", "e c #6887AF105F8B", "r c #61B3B2155709", "t c #64A2B58F59F3", "y c #6717B8BF5BFB", "u c #6A20BB8F5EE3", "i c #671CA7186044", "p c #6779A8FF61A1", "a c #6B1BAC9D6425", "s c #6E0FAFB16854", "d c #6D81B3296443", "f c #6CCCBE686153", "g c #6EB5B259683E", "h c #7116B7B5674F", "j c #7194B92E67C4", "k c #73D4B4A76CE1", "l c #752BBC716B89", "z c #779AB6CE707C", "x c #7850B7E3715C", "c c #7770BAEA70F1", "v c #7B07BBFB742F", "b c #7EFEBE28783C", "n c #6EFEC20062E1", "m c #71F0C46165E0", "M c #769BC3D26B4C", "N c #79B5C1F86F03", "B c #7D99C5F972D6", "V c #7EC4C1017885", "C c #8250BEFC7AB4", "Z c #8492C2C77D4E", "A c #873CC66380CC", "S c #8B2BC6648363", "D c #8CEDC95B8652", "F c #8F72CA9488BB", "G c #9083CA3C8731", "H c #9402CBF98BA1", "J c #98EBCF198F45", "K c #948FD0CC8999", "L c #9B0ED01091FB", "P c #9CC3D1F7931C", "I c #A115D5509707", "U c #A48FD5919BBF", "Y c #A875D7AE9F6F", "T c #A9B7D825A0B5", "R c #AD3CD9D0A401", "E c #B14DDB69A7D9", "W c #B34FDCA6A9F1", "Q c None", /* pixels */ "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ", "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ", "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ", "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ", "QQQQmmnnfuuuyttrr8888QQQQQQQQQQQ", "QQQQmMBBBBBNNllljjdddew0QQQQQQQQ", "QQQQnBKIIPPPPPJJHHGSZbka6QQQQQQQ", "QQQQfBIWWERRRRTTYUILHSCkw3QQQQQQ", "QQQQfBIWERRRRTTYYUUPJHGSxa1QQQQQ", "QQQQfNGPLJJJHHHGFGHHHJLHAk9>QQQQ", "QQQQuflllljhddddedkCDHJHGCa3>QQQ", "QQQQuuytrr88885446wgvZDHHZkq>QQQ", "QQQQQQQQQQQQQQQQQQ333pCDSZzi:QQQ", "QQQQQQQQQQQQQQQQQQQ>*2kZZZva;@QQ", "QQQQQQQQQQQQQQQQQQQQ*1azZZCs;OQQ", "QQQQQQQQQQQQQQQQQQQQQqkvVvp&XQQ", "QQQQQQQ411QQQQQQQQQ$#;acvckq&.QQ", "QQQQQQ7776QQQQQQQQ-;;3kbvla3%QQQ", "QQQQQ7waw9<=***&$*,3pkvVVk9,#QQQ", "QQQQ7wkxksq3211<<19akbVVva<&+QQQ", "QQQ7wkCSAZbvvxzkkkxccvVvs3&oQQQQ", "QQQ7akSHHGFFDSSAAZZblhka3;+QQQQQ", "QQQ7wkZGFDDDSSAZZZbcgw9<&+QQQQQQ", "QQQ6qavZCbxkkkkssapq32:&oQQQQQQQ", "QQQQ17paaq1,:;;--&&&%##+QQQQQQQQ", "QQQQQ,332<*#@@OoooX. QQQQQQQQQQQ", "QQQQQQ>;-*QQQQQQQQQQQQQQQQQQQQQQ", "QQQQQQQ$$$QQQQQQQQQQQQQQQQQQQQQQ", "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ", "QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ" }; qosmic-1.6.0/icons/silk/arrow_updown.xpm000066400000000000000000000166141304321135200203440ustar00rootroot00000000000000/* XPM */ static char * arrow_updown_xpm[] = { "32 32 333 2", " c None", ". c #73C468", "+ c #70C465", "@ c #74C569", "# c #76C66A", "$ c #7DC972", "% c #7EC972", "& c #75C66A", "* c #76C66B", "= c #84CA7A", "- c #91CF87", "; c #73C568", "> c #80C875", ", c #93CF89", "' c #A1D499", ") c #80C975", "! c #71C465", "~ c #75C469", "{ c #83C878", "] c #97D08E", "^ c #A2D59A", "/ c #A4D59B", "( c #99D18F", "_ c #84C978", ": c #74C469", "< c #70C564", "[ c #71C565", "} c #71C464", "| c #80C876", "1 c #92CE88", "2 c #9CD293", "3 c #9BD192", "4 c #8FCD86", "5 c #7DC772", "6 c #72C467", "7 c #70C464", "8 c #70C463", "9 c #74C268", "0 c #7DC773", "a c #8ACB81", "b c #94CD8B", "c c #92CD88", "d c #86C97D", "e c #78C56F", "f c #70C264", "g c #7BC56F", "h c #89CA7F", "i c #95CD8B", "j c #87C87D", "k c #79C36F", "l c #70C066", "m c #78C36D", "n c #89C87F", "o c #96CE8D", "p c #94CD8A", "q c #87C87E", "r c #78C46E", "s c #63B35B", "t c #78C36E", "u c #86C87C", "v c #91CC88", "w c #8FCB86", "x c #84C77A", "y c #60B259", "z c #62B15A", "A c #75C06A", "B c #7FC475", "C c #88CA7F", "D c #7DC473", "E c #75BF6A", "F c #65B65C", "G c #63B25A", "H c #5FAF56", "I c #60B057", "J c #6DBC63", "K c #75C06B", "L c #7CC372", "M c #63B25B", "N c #64B35C", "O c #5CAA52", "P c #5FAE56", "Q c #5DAD56", "R c #65B65B", "S c #6ABA60", "T c #70BE66", "U c #73BF69", "V c #66B75C", "W c #5FB055", "X c #64B25C", "Y c #65B35D", "Z c #5FB157", "` c #5BAB53", " . c #60AE58", ".. c #69B260", "+. c #6BB463", "@. c #66B15E", "#. c #65AE5D", "$. c #65B25E", "%. c #66B25E", "&. c #65B25C", "*. c #5FAD58", "=. c #5CAD54", "-. c #67B75D", ";. c #6CBB62", ">. c #6EBC64", ",. c #68B75E", "'. c #62B159", "). c #67B45F", "!. c #6BB562", "~. c #69B461", "{. c #6CB565", "]. c #6EB566", "^. c #6CB465", "/. c #64B15C", "(. c #5DAE55", "_. c #5CAC54", ":. c #6DB366", "<. c #79B972", "[. c #7BBA74", "}. c #73B66C", "|. c #6FB368", "1. c #6FB568", "2. c #70B568", "3. c #6EB567", "4. c #6AB362", "5. c #64AF5C", "6. c #5EAB57", "7. c #61B059", "8. c #63B259", "9. c #64B15B", "0. c #66B25D", "a. c #6AB461", "b. c #6FB767", "c. c #75B96E", "d. c #74B86D", "e. c #76B96E", "f. c #76B86F", "g. c #78BA71", "h. c #7FBD78", "i. c #7EBC77", "j. c #70B569", "k. c #62AE5A", "l. c #5AAB53", "m. c #59A452", "n. c #5BA754", "o. c #64AD5C", "p. c #77B770", "q. c #84BE7E", "r. c #83BC7C", "s. c #7AB874", "t. c #76B570", "u. c #7AB873", "v. c #7DBB76", "w. c #78B871", "x. c #70B469", "y. c #69B162", "z. c #63AE5B", "A. c #63AF5B", "B. c #69B361", "C. c #79BA71", "D. c #7FBC78", "E. c #84BF7D", "F. c #84C07D", "G. c #81BE79", "H. c #82BF7B", "I. c #8BC284", "J. c #8EC487", "K. c #80BD79", "L. c #6DB466", "M. c #5FAD57", "N. c #59A553", "O. c #5AA754", "P. c #63AC5C", "Q. c #74B56D", "R. c #81BD7B", "S. c #82BC7B", "T. c #7BB874", "U. c #78B672", "V. c #7BB975", "W. c #80BC79", "X. c #7BB974", "Y. c #72B46B", "Z. c #6BB263", "`. c #61AA59", " + c #5AA452", ".+ c #57A150", "++ c #5FA959", "@+ c #6BB164", "#+ c #86C17F", "$+ c #83BE7C", "%+ c #90C589", "&+ c #85C07E", "*+ c #70B668", "=+ c #60AE57", "-+ c #5CAA53", ";+ c #57A550", ">+ c #5CA854", ",+ c #68AF61", "'+ c #75B56E", ")+ c #79B773", "!+ c #74B36E", "~+ c #71B26B", "{+ c #71B36B", "]+ c #6CB065", "^+ c #64AD5D", "/+ c #5AA653", "(+ c #56A14F", "_+ c #579E53", ":+ c #569D52", "<+ c #539D4E", "[+ c #529D4D", "}+ c #62AB5B", "|+ c #6EB367", "1+ c #74B66D", "2+ c #78B971", "3+ c #76B76F", "4+ c #7AB973", "5+ c #83BD7C", "6+ c #67B060", "7+ c #5DAA55", "8+ c #55A34F", "9+ c #65AD5E", "0+ c #6AAF63", "a+ c #66AB60", "b+ c #64AA5E", "c+ c #63A85D", "d+ c #5FAA57", "e+ c #66AB5F", "f+ c #64AA5D", "g+ c #5CA755", "h+ c #57A450", "i+ c #5AA055", "j+ c #5BA056", "k+ c #539C4F", "l+ c #4D9949", "m+ c #53A04C", "n+ c #63AC5A", "o+ c #68B061", "p+ c #6AB062", "q+ c #70B369", "r+ c #66AF5F", "s+ c #5DA856", "t+ c #58A551", "u+ c #59A552", "v+ c #5CA855", "w+ c #55A34E", "x+ c #529D4C", "y+ c #59A054", "z+ c #60A45B", "A+ c #62A55D", "B+ c #5CA157", "C+ c #529C4D", "D+ c #4F9B48", "E+ c #5BA653", "F+ c #5EA858", "G+ c #5AA753", "H+ c #59A652", "I+ c #54A24D", "J+ c #53A14C", "K+ c #549F4E", "L+ c #5EA459", "M+ c #66A861", "N+ c #67A962", "O+ c #62A45D", "P+ c #579D52", "Q+ c #56A44F", "R+ c #519F4C", "S+ c #529F4D", "T+ c #509D4B", "U+ c #529C4C", "V+ c #5FA35A", "W+ c #6BAA67", "X+ c #6DAB69", "Y+ c #62A35D", "Z+ c #53994E", "`+ c #55A24D", " @ c #519D4B", ".@ c #50984C", "+@ c #5EA259", "@@ c #6FAD6B", "#@ c #71AE6D", "$@ c #5FA35B", "%@ c #519A4D", "&@ c #54A24E", "*@ c #4F974B", "=@ c #5CA057", "-@ c #64A560", ";@ c #66A561", ">@ c #5FA25B", ",@ c #549B4F", "'@ c #448E41", ")@ c #458E40", "!@ c #438D3F", "~@ c #458E41", "{@ c #4E964A", "]@ c #5B9F56", "^@ c #61A45D", "/@ c #64A55F", "(@ c #5FA25A", "_@ c #53994F", ":@ c #4A9245", "<@ c #458F41", "[@ c #468F41", "}@ c #448F41", "|@ c #448E40", "1@ c #458D41", "2@ c #468F43", "3@ c #51984E", "4@ c #60A35C", "5@ c #67A862", "6@ c #68A863", "7@ c #549A50", "8@ c #499145", "9@ c #448D40", "0@ c #478F43", "a@ c #64A460", "b@ c #6EAB69", "c@ c #63A45F", "d@ c #54994F", "e@ c #489044", "f@ c #428C3F", "g@ c #4A9248", "h@ c #5D9E59", "i@ c #6CA967", "j@ c #5C9E58", "k@ c #4B9248", "l@ c #438C40", "m@ c #4B9247", "n@ c #559950", "o@ c #549951", "p@ c #428B3E", "q@ c #458E42", "r@ c #408A3D", " . . ", " + @ @ + ", " + # $ % & + ", " + * = - - = * + ", " + ; > , ' ' , ) ; + ", " + ! ~ { ] ^ / ( _ : ! + ", " < [ } ~ | 1 2 3 4 5 6 7 [ < ", " 8 9 0 a b c d e f 8 ", " g h i 1 j k ", " l m n o p q r ", " s t u v w x t ", " y z z A B h C D E F G ", " H I H J K L L K J M N G ", " O P I Q R S T U J V W X Y X Z ", " ` ...+.@.#.@.$.%.&.*.=.-.;.>.,.'.M ).!.%.~.{.+.].^./.(. ", " _.*.:.<.[.}.|.1.2.3.4.5.6.7. 8.9.0.a.b.c.d.e.f.g.h.i.j.k.l. ", "m.n.o.p.q.r.s.t.u.v.w.x.y.z. A.B.b.C.D.E.F.G.H.I.J.K.L.M.l.", "N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. + .+++@+p.W.#+F.K.$+I.%+&+*+=+-+", " ;+>+,+'+)+!+~+{+Y.~+]+^+/+(+_+:+<+[+}+|+1+2+2+3+4+5+$+2+6+7+ ", " 8+n.9+0+a+b+c+d+e+f+g+h+<+i+j+k+l+m+n+,+,+o+,+p+q+|.r+s+ ", " 8+t+/+u+n. v+w+x+y+z+A+B+C+D+E+ F+s+G+s+s+H+ ", " I+I+J+ K+L+M+N+O+P+ I+w+Q+ ", " R+S+T+ U+V+W+X+Y+Z+ `+I+ ", " @ .@+@@@#@$@%@ &@ ", " *@=@-@;@>@,@ ", " '@)@!@~@{@]@^@/@(@_@:@<@[@}@ ", " |@1@2@3@4@5@6@Y+7@8@<@'@ ", " 9@0@_@a@b@X+c@d@e@9@ ", " f@g@h@i@i@j@k@f@ ", " l@m@n@o@m@l@ ", " p@q@q@p@ ", " r@r@ "}; qosmic-1.6.0/icons/silk/bullet_add.xpm000066400000000000000000000116451304321135200177140ustar00rootroot00000000000000/* XPM */ static char *bullet_add[] = { /* columns rows colors chars-per-pixel */ "32 32 125 2", " c #339B68591589", ". c #341F68A9163E", "X c #349C68F316E8", "o c #35F26974182C", "O c #3ADD6D601DB4", "+ c #3F1E75781C5C", "@ c #415B77171F17", "# c #43FA791C2196", "$ c #43D578F121AB", "% c #4408792021AD", "& c #44C079A522C9", "* c #443174E3285E", "= c #4A287D5228F5", "- c #4D977BF8330D", "; c #494E81C4216D", ": c #4E9585C227A8", "> c #4E7880302E6A", ", c #58178EDC2F43", "< c #51E282523313", "1 c #52D2835F3365", "2 c #555485EB35DB", "3 c #58878EDF2FBF", "4 c #58B98F14303B", "5 c #551280C53C1E", "6 c #5678822D3D15", "7 c #5B1390D93325", "8 c #5F8D941A38B8", "9 c #6AABA04D3F7F", "0 c #5A7E8505422E", "q c #5CF186B6447F", "w c #5E928BC94201", "e c #61B68E9244B0", "r c #6049899A48C5", "t c #657D8D9A4EB7", "y c #6D259F8845B3", "u c #6E739FB54708", "i c #681992B74D05", "p c #6CE696675224", "a c #6ED197BA53C8", "s c #6A0890F353EE", "d c #6CB192C156FE", "f c #70A899025662", "g c #7140999C568B", "h c #71CF99FA56D7", "j c #78CB9F345F58", "k c #6B89A0AF4097", "l c #6DF4A25F4449", "z c #6F53A09F4897", "x c #6FE6A1104956", "c c #76F6A5C8531F", "v c #79F2A3895C2C", "b c #7F47B22A54C5", "n c #792D9F0B60E7", "m c #7DF2A3066552", "M c #7FAEA3CC685C", "N c #800AAC545BBD", "B c #80BBAD495D1B", "V c #8105AD535D5B", "C c #80CAB2305667", "Z c #807CB23A5607", "A c #81D3B33D57F9", "S c #829FB3295AA8", "D c #8346B6EF5949", "F c #8363B43C59F2", "G c #841FB6BF5A58", "H c #8743B8905E42", "J c #8512AD916601", "K c #8000A45C6811", "L c #878AAF326926", "P c #8CD8B4936CFA", "I c #8D1FB4DD6D73", "U c #8FD1B7507095", "Y c #9240B85C74A5", "T c #95A9BB197667", "R c #967CBD8675BF", "E c #9ADBBE577D58", "W c #9B88C5A77784", "Q c #9C9FC5997821", "! c #9DDEC6BF79FD", "~ c #9ECEC74C7AE3", "^ c #9D6DC0EF7F6B", "/ c #9C0EBF058057", "( c #A15CC9A28162", ") c #A21FC94B820D", "_ c #A25FC9D9826E", "` c #A356C9A2826A", "' c #A59ECB9585B3", "] c #A65FCBD1875A", "[ c #A90ACDC287A3", "{ c #AA21CDE989B9", "} c #A961C8EA8E1E", "| c #AE00D3468D04", " . c #A9A6C88E9046", ".. c #B262CE939A59", "X. c #BA2FD9D29C75", "o. c #BBEED8C3A1B7", "O. c #BC7BD92CA25D", "+. c #BC9AD906A3ED", "@. c #BD75D93DA805", "#. c #BD16D997A78D", "$. c #C012DAC7AA78", "%. c #C0B3DDA8A4E4", "&. c #C205DF4EA862", "*. c #C70FDFE5B084", "=. c #C3FBE06EAAF9", "-. c #CCE9E3D9B757", ";. c #D6F2EAB1C31B", ":. c #D5E7EA25C50C", ">. c #D829E934CA35", ",. c #D8A8E967CA4F", "<. c #D8B9E995CA6C", "1. c #D9CCEA29CB7C", "2. c #DE28ECEDD12C", "3. c #E357F09FD78B", "4. c #E84DF3FEDD60", "5. c #EC80F4D6E642", "6. c #ECD0F4D9E69F", "7. c #EDAEF557E7E5", "8. c #EE97F5E1E8BB", "9. c #F458FA13EF97", "0. c #F577FAB9F114", "q. c #FAD7FD0BF940", "w. c #FB25FD2BF99B", "e. c #FD88FED7FC73", "r. c None", /* pixels */ "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.d s t r 0 5 r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.j m K M n p e 2 r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.f v L E } .. .U c 8 : @ r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.g J R { %.;.-.` S l 7 & r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.q h T [ | =.4.2.] H F x = X r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.6 a ^ X.&.:.9.6.$.' ~ B > . r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.- i / *.3.0.e.w.8.1.O.I < r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.* w Y +.>.6.q.w.7.<.o.I < r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.O 1 B W ( #.5.5.@._ ! V > . r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.o = y b D _ <.,.) G A z = X r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.# , 9 Z Q o.o.Q C k 4 $ r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.+ ; 3 u N P P N u 3 ; + r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.+ % = > < < > = # + r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.X . . X r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r." }; qosmic-1.6.0/icons/silk/bullet_arrow_down.xpm000066400000000000000000000046571304321135200213520ustar00rootroot00000000000000/* XPM */ static char *bullet_arrow_down[] = { /* columns rows colors chars-per-pixel */ "32 32 58 1", " c #6FE76FE76FE7", ". c #706070607060", "X c #739D739D739D", "o c #779A779A779A", "O c #78DB78DB78DB", "+ c #7AE77AE77AE7", "@ c #7B887B887B88", "# c #7CE47CE47CE4", "$ c #7F447F447F44", "% c #813481348134", "& c #82E982E982E9", "* c #84E584E584E5", "= c #85F485F485F4", "- c #870587058705", "; c #881188118811", ": c #89B189B189B1", "> c #8AF18AF18AF1", ", c #8B468B468B46", "< c #8EAF8EAF8EAF", "1 c #8FC58FC58FC5", "2 c #916191619161", "3 c #93D493D493D4", "4 c #958F958F958F", "5 c #963296329632", "6 c #975B975B975B", "7 c #991299129912", "8 c #9A029A029A02", "9 c #9AD29AD29AD2", "0 c #9D5E9D5E9D5E", "q c #9FB39FB39FB3", "w c #A0AEA0AEA0AE", "e c #A184A184A184", "r c #A3A4A3A4A3A4", "t c #A4B1A4B1A4B1", "y c #A671A671A671", "u c #A7E8A7E8A7E8", "i c #A8FDA8FDA8FD", "p c #A98AA98AA98A", "a c #AB66AB66AB66", "s c #AD29AD29AD29", "d c #AD4EAD4EAD4E", "f c #B0C6B0C6B0C6", "g c #B185B185B185", "h c #B3C4B3C4B3C4", "j c #B50DB50DB50D", "k c #B536B536B536", "l c #B68BB68BB68B", "z c #B81BB81BB81B", "x c #B8EAB8EAB8EA", "c c #B9BFB9BFB9BF", "v c #BA9CBA9CBA9C", "b c #BBE1BBE1BBE1", "n c #BCB7BCB7BCB7", "m c #BDD6BDD6BDD6", "M c #BEB9BEB9BEB9", "N c #BFA5BFA5BFA5", "B c #C137C137C137", "V c None", /* pixels */ "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVBNnxkgditq952VVVVVVVVVV", "VVVVVVVVcvvbnbzjgae5:&VVVVVVVVVV", "VVVVVVVVllklcvclgu91*VVVVVVVVVVV", "VVVVVVVVVVppdfhfy7:%VVVVVVVVVVVV", "VVVVVVVVVVewwrit6>$oVVVVVVVVVVVV", "VVVVVVVVVVVV2384=#VVVVVVVVVVVVVV", "VVVVVVVVVVVV;:,-@XVVVVVVVVVVVVVV", "VVVVVVVVVVVVVV+OVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVV. VVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV" }; qosmic-1.6.0/icons/silk/bullet_arrow_left.xpm000066400000000000000000000046571304321135200213350ustar00rootroot00000000000000/* XPM */ static char *bullet_arrow_left[] = { /* columns rows colors chars-per-pixel */ "32 32 58 1", " c #6FE76FE76FE7", ". c #706070607060", "X c #739D739D739D", "o c #779A779A779A", "O c #78DB78DB78DB", "+ c #7AE77AE77AE7", "@ c #7B887B887B88", "# c #7CE47CE47CE4", "$ c #7F447F447F44", "% c #813481348134", "& c #82E982E982E9", "* c #84E584E584E5", "= c #85F485F485F4", "- c #870587058705", "; c #881188118811", ": c #89B189B189B1", "> c #8AF18AF18AF1", ", c #8B468B468B46", "< c #8EAF8EAF8EAF", "1 c #8FC58FC58FC5", "2 c #916191619161", "3 c #93D493D493D4", "4 c #958F958F958F", "5 c #963296329632", "6 c #975B975B975B", "7 c #991299129912", "8 c #9A029A029A02", "9 c #9AD29AD29AD2", "0 c #9D5E9D5E9D5E", "q c #9FB39FB39FB3", "w c #A0AEA0AEA0AE", "e c #A184A184A184", "r c #A3A4A3A4A3A4", "t c #A4B1A4B1A4B1", "y c #A671A671A671", "u c #A7E8A7E8A7E8", "i c #A8FDA8FDA8FD", "p c #A98AA98AA98A", "a c #AB66AB66AB66", "s c #AD29AD29AD29", "d c #AD4EAD4EAD4E", "f c #B0C6B0C6B0C6", "g c #B185B185B185", "h c #B3C4B3C4B3C4", "j c #B50DB50DB50D", "k c #B536B536B536", "l c #B68BB68BB68B", "z c #B81BB81BB81B", "x c #B8EAB8EAB8EA", "c c #B9BFB9BFB9BF", "v c #BA9CBA9CBA9C", "b c #BBE1BBE1BBE1", "n c #BCB7BCB7BCB7", "m c #BDD6BDD6BDD6", "M c #BEB9BEB9BEB9", "N c #BFA5BFA5BFA5", "B c #C137C137C137", "V c None", /* pixels */ "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVlcMBVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVlvmNVVVVVVVVVVVV", "VVVVVVVVVVVVVVepkvbnVVVVVVVVVVVV", "VVVVVVVVVVVVVVwplbcxVVVVVVVVVVVV", "VVVVVVVVVVVV;2wdcnzkVVVVVVVVVVVV", "VVVVVVVVVVVV:3rfvbjgVVVVVVVVVVVV", "VVVVVVVVVV.+,8ihczfdVVVVVVVVVVVV", "VVVVVVVVVV O-4tfljsiVVVVVVVVVVVV", "VVVVVVVVVVVV@=6yggitVVVVVVVVVVVV", "VVVVVVVVVVVVX#>7uarqVVVVVVVVVVVV", "VVVVVVVVVVVVVV$:9e09VVVVVVVVVVVV", "VVVVVVVVVVVVVVo%1555VVVVVVVVVVVV", "VVVVVVVVVVVVVVVV*:<2VVVVVVVVVVVV", "VVVVVVVVVVVVVVVVV&> c #8AF18AF18AF1", ", c #8B468B468B46", "< c #8EAF8EAF8EAF", "1 c #8FC58FC58FC5", "2 c #916191619161", "3 c #93D493D493D4", "4 c #958F958F958F", "5 c #963296329632", "6 c #975B975B975B", "7 c #991299129912", "8 c #9A029A029A02", "9 c #9AD29AD29AD2", "0 c #9D5E9D5E9D5E", "q c #9FB39FB39FB3", "w c #A0AEA0AEA0AE", "e c #A184A184A184", "r c #A3A4A3A4A3A4", "t c #A4B1A4B1A4B1", "y c #A671A671A671", "u c #A7E8A7E8A7E8", "i c #A8FDA8FDA8FD", "p c #A98AA98AA98A", "a c #AB66AB66AB66", "s c #AD29AD29AD29", "d c #AD4EAD4EAD4E", "f c #B0C6B0C6B0C6", "g c #B185B185B185", "h c #B3C4B3C4B3C4", "j c #B50DB50DB50D", "k c #B536B536B536", "l c #B68BB68BB68B", "z c #B81BB81BB81B", "x c #B8EAB8EAB8EA", "c c #B9BFB9BFB9BF", "v c #BA9CBA9CBA9C", "b c #BBE1BBE1BBE1", "n c #BCB7BCB7BCB7", "m c #BDD6BDD6BDD6", "M c #BEB9BEB9BEB9", "N c #BFA5BFA5BFA5", "B c #C137C137C137", "V c None", /* pixels */ "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVV<>&VVVVVVVVVVVVVVVVV", "VVVVVVVVVVVV2<:*VVVVVVVVVVVVVVVV", "VVVVVVVVVVVV5551%oVVVVVVVVVVVVVV", "VVVVVVVVVVVV90e9:$VVVVVVVVVVVVVV", "VVVVVVVVVVVVqrau7>#XVVVVVVVVVVVV", "VVVVVVVVVVVVtiggy6=@VVVVVVVVVVVV", "VVVVVVVVVVVVisjlft4-O VVVVVVVVVV", "VVVVVVVVVVVVdfzchi8,+.VVVVVVVVVV", "VVVVVVVVVVVVgjbvfr3:VVVVVVVVVVVV", "VVVVVVVVVVVVkzncdw2;VVVVVVVVVVVV", "VVVVVVVVVVVVxcblpwVVVVVVVVVVVVVV", "VVVVVVVVVVVVnbvkpeVVVVVVVVVVVVVV", "VVVVVVVVVVVVNmvlVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVBMclVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV", "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV" }; qosmic-1.6.0/icons/silk/bullet_arrow_up.xpm000066400000000000000000000046031304321135200210160ustar00rootroot00000000000000/* XPM */ static char *bullet_arrow_up[] = { /* columns rows colors chars-per-pixel */ "32 32 56 1", " c #5BF65BF65BF6", ". c #5D915D915D91", "X c #5FDA5FDA5FDA", "o c #618961896189", "O c #62CD62CD62CD", "+ c #65FC65FC65FC", "@ c #67AC67AC67AC", "# c #698469846984", "$ c #6DA36DA36DA3", "% c #6E256E256E25", "& c #6F796F796F79", "* c #71F071F071F0", "= c #742674267426", "- c #768076807680", "; c #76FE76FE76FE", ": c #792A792A792A", "> c #7B567B567B56", ", c #7CBC7CBC7CBC", "< c #7E467E467E46", "1 c #80C680C680C6", "2 c #82B982B982B9", "3 c #839983998399", "4 c #851585158515", "5 c #866C866C866C", "6 c #888288828882", "7 c #8B898B898B89", "8 c #8DF48DF48DF4", "9 c #8E708E708E70", "0 c #8F138F138F13", "q c #90D990D990D9", "w c #91A691A691A6", "e c #929892989298", "r c #94BC94BC94BC", "t c #967E967E967E", "y c #99B799B799B7", "u c #9AC39AC39AC3", "i c #9C559C559C55", "p c #9D3F9D3F9D3F", "a c #9E799E799E79", "s c #A0ADA0ADA0AD", "d c #A16BA16BA16B", "f c #A2BBA2BBA2BB", "g c #A3B5A3B5A3B5", "h c #A441A441A441", "j c #A560A560A560", "k c #A6DBA6DBA6DB", "l c #A7CBA7CBA7CB", "z c #A8BBA8BBA8BB", "x c #A96BA96BA96B", "c c #AACAAACAAACA", "v c #ABB2ABB2ABB2", "b c #ACB1ACB1ACB1", "n c #ADF3ADF3ADF3", "m c #AF0CAF0CAF0C", "M c #AFF6AFF6AFF6", "N c None", /* pixels */ "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNvvNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNvxNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNkzckueNNNNNNNNNNNNNN", "NNNNNNNNNNNNkzbluwNNNNNNNNNNNNNN", "NNNNNNNNNNfhkcmcaw2:NNNNNNNNNNNN", "NNNNNNNNNNgjxbMbfr4>NNNNNNNNNNNN", "NNNNNNNNasglbmncju7<&NNNNNNNNNNN", "NNNNNNNNyuiadspyt03;#oNNNNNNNNNN", "NNNNNNNNeq87641,:=%@o.NNNNNNNNNN", "NNNNNNNN9751>-*$#+OX. NNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN" }; qosmic-1.6.0/icons/silk/bullet_black.xpm000066400000000000000000000050231304321135200202310ustar00rootroot00000000000000/* XPM */ static char *bullet_black[] = { /* columns rows colors chars-per-pixel */ "32 32 63 1", " c #000100010001", ". c #139113911391", "X c #164916491649", "o c #171B171B171B", "O c #18E818E818E8", "+ c #1A6F1A6F1A6F", "@ c #1B061B061B06", "# c #1D261D261D26", "$ c #212521252125", "% c #225022502250", "& c #235223522352", "* c #248F248F248F", "= c #251C251C251C", "- c #268526852685", "; c #26BE26BE26BE", ": c #296029602960", "> c #2B0B2B0B2B0B", ", c #2F8D2F8D2F8D", "< c #31AE31AE31AE", "1 c #357935793579", "2 c #35FF35FF35FF", "3 c #386438643864", "4 c #397239723972", "5 c #3A5E3A5E3A5E", "6 c #3B043B043B04", "7 c #3C373C373C37", "8 c #3CC63CC63CC6", "9 c #3F273F273F27", "0 c #490A490A490A", "q c #4CAE4CAE4CAE", "w c #50EA50EA50EA", "e c #562F562F562F", "r c #57C357C357C3", "t c #582058205820", "y c #5A625A625A62", "u c #5B355B355B35", "i c #5C175C175C17", "p c #5E185E185E18", "a c #60CD60CD60CD", "s c #623262326232", "d c #631163116311", "f c #64BC64BC64BC", "g c #651B651B651B", "h c #669B669B669B", "j c #676D676D676D", "k c #684468446844", "l c #6A8B6A8B6A8B", "z c #6DBF6DBF6DBF", "x c #6E7C6E7C6E7C", "c c #6F796F796F79", "v c #70A070A070A0", "b c #71AF71AF71AF", "n c #728B728B728B", "m c #73B273B273B2", "M c #770D770D770D", "N c #788178817881", "B c #798C798C798C", "V c #7AD17AD17AD1", "C c #7C897C897C89", "Z c #80D680D680D6", "A c #836883688368", "S c #847D847D847D", "D c None", /* pixels */ "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDD@+OoDDDDDDDDDDDDDD", "DDDDDDDDDDDD4887531,DDDDDDDDDDDD", "DDDDDDDDDDD4egcmblpq:DDDDDDDDDDD", "DDDDDDDDDDD7fNZAZVby:DDDDDDDDDDD", "DDDDDDDDDD+7cZMxlxNd; DDDDDDDDDD", "DDDDDDDDDDO6mScaugVh= DDDDDDDDDD", "DDDDDDDDDDX4nAzprsNg& DDDDDDDDDD", "DDDDDDDDDD.2lCbkdjnp% DDDDDDDDDD", "DDDDDDDDDDD0tshgpw9#DDDDDDDDDDD", "DDDDDDDDDDDD=-*&&%$#DDDDDDDDDDDD", "DDDDDDDDDDDDDD DDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD", "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" }; qosmic-1.6.0/icons/silk/bullet_delete.xpm000066400000000000000000000127721304321135200204300ustar00rootroot00000000000000/* XPM */ static char *bullet_delete[] = { /* columns rows colors chars-per-pixel */ "32 32 152 2", " c #B9F33E670000", ". c #B8453F4A0000", "X c #B80E419D00C8", "o c #B7A8420D0007", "O c #B85A40870000", "+ c #B85A40CC0000", "@ c #B8D041590184", "# c #BBA240260203", "$ c #BA7D409902D5", "% c #BA924113035D", "& c #B8DD426F022F", "* c #B91B430F0325", "= c #B947435602FB", "- c #B85144520303", "; c #BABB414D03D3", ": c #B96C458503BE", "> c #B9E0466F05E3", ", c #BDB5464406D5", "< c #BC9549630319", "1 c #BCFB49D2033B", "2 c #BAE14A2A03DF", "3 c #BFB14BEA0CAB", "4 c #C1074BFE02A1", "5 c #C1E24CE802F8", "6 c #C41C4DA102DC", "7 c #C2784FC8033A", "8 c #C5374E410374", "9 c #C67E4ECB03BF", "0 c #C7A44E950490", "q c #C35B50B4037C", "w c #C7034FFF05BB", "e c #CD03584102A7", "r c #CF3C588801F5", "t c #C5C35168090B", "y c #C52553E70EBE", "u c #C84D50B608AB", "i c #D1A95B0402E3", "p c #C73B54C20FE9", "a c #C2A0540613C3", "s c #C2EA57431753", "d c #C573562813E1", "f c #C573584D1892", "g c #C8065C241CCC", "h c #C65C5BE71DA0", "j c #C76A5D2A1E2A", "k c #D81160BE01F4", "l c #DB5B623B00DC", "z c #DD826515021A", "x c #DB6E63630520", "c c #DCFE684C038A", "v c #DEBF6C2D0A08", "b c #DD496C3A1519", "n c #D76E69741CD1", "m c #E63F6BD60000", "M c #E68E6C1000AC", "N c #E09E69EE0A4C", "B c #EDEF70D50000", "V c #ECA474450000", "C c #EF9E789F0680", "Z c #F38C73810000", "A c #F7A7762B0439", "S c #F9F979440EB0", "D c #E29A70E716F1", "F c #EA3479D21570", "G c #EEFF78D014D7", "H c #C6D95F9921B4", "J c #C9D05E0A20A7", "K c #C5F5602A2169", "L c #CD2863F120B5", "P c #CA0B6177255D", "I c #C921615D26E9", "U c #CBA9612527FD", "Y c #C970624127EB", "T c #CA6C62B2295D", "R c #CAF163D32966", "E c #CBDB62B12AE4", "W c #CBA865242D95", "Q c #CDF0679F2E52", "! c #CEBD6AE82A62", "~ c #CCF569C62E0A", "^ c #D0106BEC2E18", "/ c #DA8773BF2E86", "( c #CD1B6780315F", ") c #CE6C689630C1", "_ c #D0A170DA33CB", "` c #DABD7630313B", "' c #DCF37E693CF4", "] c #E7AD772322C2", "[ c #E15577F72A45", "{ c #D5C37A144243", "} c #D6687A8442A7", "| c #F72D80E5258E", " . c #EB1E86EC3AF2", ".. c #F0A88FF03329", "X. c #F8618B92347A", "o. c #FF618D5B319F", "O. c #FFFF8D463441", "+. c #F1DD94603E1F", "@. c #FFFD904E3EE9", "#. c #DFD1801943D6", "$. c #EF108B5A4581", "%. c #E0A887B64DE3", "&. c #F34F916140B2", "*. c #F5829AB8422C", "=. c #F9409A254198", "-. c #FC7D9B0D44D1", ";. c #F4DB9C644CEF", ":. c #FFFF9B374D61", ">. c #FF139E704D71", ",. c #E2DC8E07590F", "<. c #F05295305279", "1. c #E98692B25C97", "2. c #FF7C96A1511D", "3. c #FC499F7C51B5", "4. c #FFFF9CF25552", "5. c #FFFFA24D556F", "6. c #FF25A4705D6F", "7. c #E2F89211618F", "8. c #E4C7934762FA", "9. c #EA1C9BE068FA", "0. c #FB309E0663C7", "q. c #FC1FA9EB6B83", "w. c #FFFFA8396DE5", "e. c #EADAA1697631", "r. c #ED17A2D176B8", "t. c #EC8CA5327B07", "y. c #ED82A7D87F80", "u. c #F342A3677209", "i. c #F2CDA46873A4", "p. c #FBB7AAAF7157", "a. c #ED3AACCA83E6", "s. c #EE0AAFFD8A1F", "d. c #FD13B3F6848C", "f. c #FF5EB40184CC", "g. c #FF22BA8B85B7", "h. c #FF6BBDF58E53", "j. c #FCB6BCE39533", "k. c #F92BC9A19BD1", "l. c #FCD1CEB3A5EA", "z. c #FF89CE49ACDC", "x. c #FFD8D480B92F", "c. c #FFFFDDD0C355", "v. c #FE1FE371CA3F", "b. c #FEF6E2D9C97B", "n. c #FD08E456CBB1", "m. c #FFBCE402CC1F", "M. c #FFFFE33DCD4A", "N. c #FFFFE2F1CE30", "B. c #FFFFE2F2D095", "V. c #FFFFE681D196", "C. c #FFFFE6FAD6A9", "Z. c None", /* pixels */ "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.3 , # O o Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.R Q ) ( W P j s Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.~ } 8.t.s.a.9.%._ K Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.I { ,.u.d.h.g.q.<.' ! a Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.= Y 7.i.0.2.@.O.o.X. .` d X Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.. T e.j.f.w.4.:.5.3.&.[ p @ Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z. E y.x.B.C.N.M.V.l.;.D u $ Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z. U r.z.c.m.b.v.n.k.+.N 0 % Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.+ J 1.p.6.>.-.=.*...F x 8 * Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.: g #.$.| S A Z B M z i 5 - Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.h ^ / ] G C V m l e q 1 Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.H L n b v c k r 7 2 Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.f y t w 9 6 4 < Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.> & % ; * - Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z." }; qosmic-1.6.0/icons/silk/bullet_go.xpm000066400000000000000000000152321304321135200175650ustar00rootroot00000000000000/* XPM */ static char *bullet_go[] = { /* columns rows colors chars-per-pixel */ "32 32 206 2", " c #1A2578C30000", ". c #1A197A9D0000", "X c #1B897A240103", "o c #1C597AB00000", "O c #1D2A7AFE00C7", "+ c #1F9B7C870043", "@ c #20FA7D660000", "# c #22687E4F0000", "$ c #23387E570000", "% c #25487FE60457", "& c #262F809E0000", "* c #2610803B04D0", "= c #2A6B82BF0D2D", "- c #2B6F830D0D53", "; c #2B37842C0E76", ": c #2CE8847B0BFC", "> c #2F20858E0BA7", ", c #2C5E84CF0D91", "< c #2D9F84D00EBB", "1 c #326F85D60371", "2 c #317886CB0C6A", "3 c #313D86F90C9F", "4 c #355388EE0B80", "5 c #392D8A380BA4", "6 c #3DA58C7C0F21", "7 c #2B17831E101D", "8 c #2C20835B1005", "9 c #3B8A8BD410C8", "0 c #3E2B8D431320", "q c #3F4F8D4C1329", "w c #41B68E4112D3", "e c #42BB8E0613EC", "r c #44B38F3015DB", "t c #492491C619FB", "y c #495692571D47", "u c #4E9195AF1EBF", "i c #40568F2D22FE", "p c #412B903D21A1", "a c #4025903D2239", "s c #458192782005", "d c #448392772342", "f c #4510925C2645", "g c #4A97947922E7", "h c #4ED4951621F1", "j c #48AC94872468", "k c #4BD5954123CB", "l c #457192962904", "z c #4889948B29B5", "x c #515697B4212B", "c c #5539973C257B", "v c #53319847224D", "b c #56E59976249B", "n c #56959A0E27AE", "m c #5466998D2CCD", "M c #54C89A362D1E", "N c #5AF59B1F27F3", "B c #5A249AB62CAF", "V c #58C49B742F8C", "C c #5FCD9CAB2C13", "Z c #5F0A9D282C14", "A c #58A19C2A301D", "S c #5CFF9D7031EA", "D c #5C759DE73397", "F c #59C09D2F3429", "G c #5F2C9ED63636", "H c #632E9EF12E80", "J c #632B9F3B2FAA", "K c #60EA9E9E32E5", "L c #64649EE92FBE", "P c #64289FD030EE", "I c #64C0A0053432", "U c #66C5A0CA311C", "Y c #663BA02331B5", "T c #6747A14B32B1", "R c #66D2A1C9368A", "E c #69D9A1C8331B", "W c #6977A279354D", "Q c #69CCA2E13687", "! c #6B78A395372F", "~ c #6C8CA33536AC", "^ c #62A0A0A938FE", "/ c #6610A28038E8", "( c #6038A1563DEE", ") c #69C2A30F389C", "_ c #6A3AA3DC394E", "` c #6B00A3B33909", "' c #6E67A4F43B58", "] c #695BA41B3ECF", "[ c #6FB0A5D03DB5", "{ c #5F99A23B41DF", "} c #62DEA3B74224", "| c #60DDA2FB455F", " . c #6261A35E4458", ".. c #611BA29645C7", "X. c #6305A40D466C", "o. c #63CEA43146C5", "O. c #678AA5444581", "+. c #6FE9A78A43CB", "@. c #6D04A81B4A6E", "#. c #722BA74B402F", "$. c #704CA8134422", "%. c #7233A93045B3", "&. c #72C6A9E14738", "*. c #73D8A9FC47B9", "=. c #73F4A957473C", "-. c #7500AB10484B", ";. c #76D3AB48496A", ":. c #7745ABBE4AB4", ">. c #72DFAB0A4EBC", ",. c #77BFABF34DA4", "<. c #78C0ABBD495E", "1. c #79CCABBD4968", "2. c #7A0DACF54BEC", "3. c #7AA5AD5B4D28", "4. c #7CABADC84D9D", "5. c #7A4FAECE5574", "6. c #7957AFB25B52", "7. c #7B4AB20F6208", "8. c #7DD4B3566393", "9. c #7E44B3606381", "0. c #7EC4B3EE6652", "q. c #7F47B49866D1", "w. c #7FF0B4A466E7", "e. c #8159B2945AF6", "r. c #81AFB36C5C29", "t. c #8263B3385CD8", "y. c #831BB3D35FD1", "u. c #84E7B5495EC0", "i. c #8014B3DF6380", "p. c #8251B5036512", "a. c #836DB5716559", "s. c #80F4B4EA6650", "d. c #8518B6826794", "f. c #8620B6F767BF", "g. c #85C0B7896AE6", "h. c #8761B8156C86", "j. c #88F0B8C26B9E", "k. c #8963B8A86CCA", "l. c #8878B8B36D2E", "z. c #8B16B9626BF0", "x. c #8A5CB9A36D82", "c. c #8B6BBA3C6DA7", "v. c #8A51B96B6EDA", "b. c #8C02B9FD6ECD", "n. c #9305BC016D20", "m. c #9056BC116FD8", "M. c #8A62BA8171A2", "N. c #8B9ABAD472BF", "B. c #8CEFBB0C703F", "V. c #8F51BBA771DE", "C. c #8C0FBAC37272", "Z. c #8C44BB397313", "A. c #8C49BB667308", "S. c #8F11BC1272B9", "D. c #8F32BC6A71FD", "F. c #8FA6BC8773F2", "G. c #8D23BC26758F", "H. c #8E89BC1C74A5", "J. c #8CE7BC3C75BA", "K. c #8D37BC7B75B6", "L. c #8F28BC9275DE", "P. c #8EBCBCEA770D", "I. c #8FEABDC67825", "U. c #90CBBCF17467", "Y. c #91C8BCC37409", "T. c #9120BD487449", "R. c #92DBBDF875EE", "E. c #932BBDB57613", "W. c #94F1BED87797", "Q. c #9622BF9E776D", "!. c #9305BF3479DF", "~. c #93F1BF5B7ACF", "^. c #97D8C1DE7EE4", "/. c #9887C0E97953", "(. c #990CC0D07A01", "). c #99C1C1207A4B", "_. c #9888C1847DCF", "`. c #9A8BC1E27C34", "'. c #9B7FC2637C21", "]. c #9968C2327EBF", "[. c #9D60C3777E0C", "{. c #9E5DC3E47E86", "}. c #9FA0C4667FBD", "|. c #A063C4947FFB", " X c #9B85C3D88110", ".X c #9B01C36C8300", "XX c #9C2BC2F8805C", "oX c #9DC5C40581C9", "OX c #9DCCC4928174", "+X c #9D89C4AC8246", "@X c #9E12C47E8310", "#X c #9CEFC43584BB", "$X c #9FA9C54C8430", "%X c #9EAAC4E88609", "&X c #A0B4C5D9878F", "*X c #A20CC7A3887F", "=X c #A37BC7FC89C5", "-X c #A4C6C8798AE2", ";X c #A5D1C8BF8CFF", ":X c #A671C96E8C71", ">X c #A9D6CB519092", ",X c #AB0CCC14919C", ".V y 3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3X! <.n.|.{.'.).`.OX+X]._.].x.@.m q 1 3X3X3X3X3X3X3X3X", "3X3X3X3X3X3XT 3.}.2X,X:X-X=X*X XU.F.^.!.i.O.k 9 3X3X3X3X3X3X3X3X", "3X3X3X3X3X3XJ :.[.XXXE.U.S.B.j.a.p.g.M.P.w.{ d > $ 3X3X3X3X3X3X", "3X3X3X3X3X3XN $.(.1X;X&X%X#X.X~.l.h.I.K.8.o.p : * 3X3X3X3X3X3X3X", "3X3X3X3X3X3Xb / y.Y.V.b.k.v.H.L.C.N.J.q.X.z < o 3X3X3X3X3X3X3X3X", "3X3X3X3X3X3Xv n S G D A M F O.6.Z.G.7.| a , 3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3Xx u t r w 6 5 0 g ( 9.0...l ; . 3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3X3X3X3X3X3X3X3X3X4 s ...i - 3X3X3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3X3X3X3X3X3X3X3X3X& 3 f l 8 3X3X3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3X3X3X3X3X3X3X3X3X# % = 7 3X3X3X3X3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3X3X3X3X3X3X3X3X3X@ + O X 3X3X3X3X3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X", "3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X3X" }; qosmic-1.6.0/icons/silk/bullet_toggle_minus.xpm000066400000000000000000000052301304321135200216510ustar00rootroot00000000000000/* XPM */ static char *bullet_toggle_minus[] = { /* columns rows colors chars-per-pixel */ "32 32 69 1", " c #6FEE6FEE6FEE", ". c #709670967096", "X c #715D715D715D", "o c #731D731D731D", "O c #75D375D375D3", "+ c #764576457645", "@ c #777E777E777E", "# c #78C078C078C0", "$ c #7B6E7B6E7B6E", "% c #7EB97EB97EB9", "& c #7F7F7F7F7F7F", "* c #814A814A814A", "= c #825D825D825D", "- c #837883788378", "; c #842A842A842A", ": c #87A287A287A2", "> c #883B883B883B", ", c #8A608A608A60", "< c #8C6E8C6E8C6E", "1 c #8DED8DED8DED", "2 c #8E518E518E51", "3 c #90C490C490C4", "4 c #91A491A491A4", "5 c #928A928A928A", "6 c #935693569356", "7 c #94BF94BF94BF", "8 c #96D596D596D5", "9 c #979197919791", "0 c #9AA69AA69AA6", "q c #9B999B999B99", "w c #9EB49EB49EB4", "e c #9F7D9F7D9F7D", "r c #A0A3A0A3A0A3", "t c #A272A272A272", "y c #A4D2A4D2A4D2", "u c #A5BFA5BFA5BF", "i c #A7C4A7C4A7C4", "p c #A9ABA9ABA9AB", "a c #AA62AA62AA62", "s c #AC87AC87AC87", "d c #ADD0ADD0ADD0", "f c #AF8DAF8DAF8D", "g c #B0C9B0C9B0C9", "h c #B1A9B1A9B1A9", "j c #B293B293B293", "k c #B354B354B354", "l c #B49CB49CB49C", "z c #B5AEB5AEB5AE", "x c #B691B691B691", "c c #B75DB75DB75D", "v c #B8C4B8C4B8C4", "b c #B9C3B9C3B9C3", "n c #BA4EBA4EBA4E", "m c #BB92BB92BB92", "M c #BCABBCABBCAB", "N c #BDC9BDC9BDC9", "B c #BE9FBE9FBE9F", "V c #BFD9BFD9BFD9", "C c #C0FFC0FFC0FF", "Z c #C206C206C206", "A c #C2CEC2CEC2CE", "S c #C3A0C3A0C3A0", "D c #C4D4C4D4C4D4", "F c #CDA7CDA7CDA7", "G c #CE85CE85CE85", "H c #E3F9E3F9E3F9", "J c #EE62EE62EE62", "K c #EEC2EEC2EEC2", "L c None", /* pixels */ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLSCBmvzkgdaiuLLLLLLLLLLL", "LLLLLLLLAZCVNmbczkgsyrLLLLLLLLLL", "LLLLLLLLVVCZCCVVBBNlyqLLLLLLLLLL", "LLLLLLLLmNCCBMMMMBAvt8LLLLLLLLLL", "LLLLLLLLxnVBzggggxVcw4LLLLLLLLLL", "LLLLLLLLjxBAAZZZZASz0=@.LLLLLLLLLL", "LLLLLLLLL1,:;*%$#OoX LLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL" }; qosmic-1.6.0/icons/silk/bullet_toggle_plus.xpm000066400000000000000000000054001304321135200215000ustar00rootroot00000000000000/* XPM */ static char *bullet_toggle_plus[] = { /* columns rows colors chars-per-pixel */ "32 32 74 1", " c #6FEE6FEE6FEE", ". c #709670967096", "X c #715D715D715D", "o c #731D731D731D", "O c #75D375D375D3", "+ c #764576457645", "@ c #777E777E777E", "# c #78C078C078C0", "$ c #7B6E7B6E7B6E", "% c #7EB97EB97EB9", "& c #7F7F7F7F7F7F", "* c #814A814A814A", "= c #825D825D825D", "- c #837883788378", "; c #842A842A842A", ": c #87A287A287A2", "> c #884088408840", ", c #8A628A628A62", "< c #8BE88BE88BE8", "1 c #8CA58CA58CA5", "2 c #8DC38DC38DC3", "3 c #8E1C8E1C8E1C", "4 c #8FB48FB48FB4", "5 c #90E790E790E7", "6 c #91A491A491A4", "7 c #923C923C923C", "8 c #935693569356", "9 c #94C394C394C3", "0 c #96D696D696D6", "q c #979197919791", "w c #9AA69AA69AA6", "e c #9B999B999B99", "r c #9EB49EB49EB4", "t c #9F7D9F7D9F7D", "y c #A0A3A0A3A0A3", "u c #A272A272A272", "i c #A4D2A4D2A4D2", "p c #A5BFA5BFA5BF", "a c #A7C4A7C4A7C4", "s c #A9ABA9ABA9AB", "d c #AA62AA62AA62", "f c #AC87AC87AC87", "g c #ADD0ADD0ADD0", "h c #AF8DAF8DAF8D", "j c #B0C5B0C5B0C5", "k c #B1E1B1E1B1E1", "l c #B29AB29AB29A", "z c #B391B391B391", "x c #B4CCB4CCB4CC", "c c #B5B6B5B6B5B6", "v c #B686B686B686", "b c #B76EB76EB76E", "n c #B8B1B8B1B8B1", "m c #BA0EBA0EBA0E", "M c #BA4EBA4EBA4E", "N c #BB85BB85BB85", "B c #BCB3BCB3BCB3", "V c #BDBABDBABDBA", "C c #BEA3BEA3BEA3", "Z c #BFBCBFBCBFBC", "A c #C0DDC0DDC0DD", "S c #C1CBC1CBC1CB", "D c #C2D7C2D7C2D7", "F c #C378C378C378", "G c #C484C484C484", "H c #CD2DCD2DCD2D", "J c #CDD1CDD1CDD1", "K c #CE6ECE6ECE6E", "L c #D20FD20FD20F", "P c #E334E334E334", "I c #E3DFE3DFE3DF", "U c #F2FCF2FCF2FC", "Y c #FCA8FCA8FCA8", "T c None", /* pixels */ "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTFACNncljgdapTTTTTTTTTTT", "TTTTTTTTDSAZVNnvxzjfiyTTTTTTTTTT", "TTTTTTTTZZSSSACVCCVxieTTTTTTTTTT", "TTTTTTTTNVAAVSHHSCDnu0TTTTTTTTTT", "TTTTTTTTvmZVzAPPAxCbr6TTTTTTTTTT", "TTTTTTTTkvCSALUULSDcw1TTTTTTTTTT", "TTTTTTTTglBHPUYYUIKz0:TTTTTTTTTT", "TTTTTTTTshNHPUYYUIKl8-TTTTTTTTTT", "TTTTTTTTifNDSLUULSFl5&TTTTTTTTTT", "TTTTTTTTysNCxSIIScAl3$TTTTTTTTTT", "TTTTTTTTepMFZFKKFAGk,+TTTTTTTTTT", "TTTTTTTTqtgxxljjjjjy-oTTTTTTTTTT", "TTTTTTTT89009742<,>=@.TTTTTTTTTT", "TTTTTTTTT2,:;*%$#OoX TTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT", "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT" }; qosmic-1.6.0/icons/silk/bullet_wrench.xpm000066400000000000000000000140121304321135200204410ustar00rootroot00000000000000/* XPM */ static char *bullet_wrench[] = { /* columns rows colors chars-per-pixel */ "32 32 176 2", " c #45247A91D0F2", ". c #48657CEDD210", "X c #4CB6802ED43B", "o c #50178275D565", "O c #52EC843BD54B", "+ c #574486B2D616", "@ c #57CF87D5D634", "# c #5BA089D7D730", "$ c #5C8C89C2D5E6", "% c #5D848BFCD73B", "& c #5F008C21D865", "* c #6DC490F0CAEC", "= c #60DB8E6CD845", "- c #60FA8E21D915", "; c #62D88FE2D972", ": c #63198FF9D9CF", "> c #65CB910CD9CD", ", c #6658919CD992", "< c #63FB90ECDAD2", "1 c #68CB9342DA48", "2 c #692494E0DC00", "3 c #6DDE96B2DACA", "4 c #6EAE9799DBAB", "5 c #6F8198FEDD31", "6 c #780C9B6BD556", "7 c #703399ECDCF6", "8 c #75219C73DD48", "9 c #76399DE8DDCC", "0 c #786C9F86DF54", "q c #7A409FBCDE81", "w c #7C2CA211DFC5", "e c #7D44A24FDF74", "r c #7EE9A33CDFA9", "t c #7FBFA4BEE0AE", "y c #815881588158", "u c #830C830C830C", "i c #847284728472", "p c #86BB86BB86BB", "a c #88D588D588D5", "s c #896189618961", "d c #8BA58BA58BA5", "f c #8C878C878C87", "g c #8E9A8E9A8E9A", "h c #86DA8F4C9C49", "j c #910091009100", "k c #918791879187", "l c #92A192A192A1", "z c #93DC93DC93DC", "x c #94A5945B93F2", "c c #95DA95DA95DA", "v c #96BD965C95D2", "b c #968296829682", "n c #978197819781", "m c #988F988F988F", "M c #99C399C399C3", "N c #9A659A659A65", "B c #9BB09BB09BB0", "V c #9DEA9DEA9DEA", "C c #9EC09EC09EC0", "Z c #96819BF7A566", "A c #9CC99FC4A3DF", "S c #87909AF1B8D2", "D c #A083A083A083", "F c #A3C8A385A30D", "G c #A3A1A3A1A3A1", "H c #A460A460A460", "J c #A5BEA5AFA59A", "K c #A681A681A681", "L c #A731A731A731", "P c #A82EA82EA82E", "I c #A9B8A9B8A9B8", "U c #AB6AAB6AAB6A", "Y c #A85EAA57ADE3", "T c #AC7BAC7BAC7B", "R c #ADA4AD9CAD92", "E c #AEB0AEB0AEB0", "W c #AF8EAF8EAF8E", "Q c #A45DAD1AB952", "! c #B13FB13FB13F", "~ c #B3D9B3D5B3CE", "^ c #B5CAB5CAB5CA", "/ c #B6ABB6ABB6AB", "( c #B791B791B791", ") c #B813B8B9B98C", "_ c #BC23BC19BC07", "` c #BCA8BCA8BCA8", "' c #BD96BD96BD97", "] c #BE5ABE5ABE5A", "[ c #BF55BF55BF55", "{ c #868FA0EECA48", "} c #9BDCA96CC0C1", "| c #9E38AED8C815", " . c #8CB9A791D2D5", ".. c #8513A5B5DA01", "X. c #809CA49DE02B", "o. c #8D52AB7BDC96", "O. c #8C95ABAADF6A", "+. c #9178A9D0D2B4", "@. c #97FAAD2FD0B5", "#. c #9659B092DBF1", "$. c #AF1AB55EC07F", "%. c #A54FB3F1CC65", "&. c #8222A60BE107", "*. c #82A1A697E105", "=. c #850AA823E1EF", "-. c #87B3A9F3E120", ";. c #8726A9BBE1F8", ":. c #8771AA51E2A9", ">. c #8896AB52E268", ",. c #8EB1AE6CE19A", "<. c #8C1DACC0E312", "1. c #8C77AD56E2F0", "2. c #8CABADAAE378", "3. c #8E5CAEE5E335", "4. c #8FB5AF18E27D", "5. c #8EDDAF55E3F0", "6. c #90BBB03DE329", "7. c #9436B1A4E1FE", "8. c #90F2B077E46A", "9. c #90F8B133E51A", "0. c #9210B1A5E560", "q. c #9342B1B5E500", "w. c #951DB387E596", "e. c #97F5B588E68D", "r. c #9A1AB735E613", "t. c #9FB7BA45E4ED", "y. c #9CCFB979E7AC", "u. c #9D41B94BE7BF", "i. c #A16EBC37E71A", "p. c #A145BC57E8A6", "a. c #A26EBCB5E8EC", "s. c #A26ABD79E954", "d. c #A23FBDAFE9B9", "f. c #A4B1BE62E997", "g. c #A6DCC020EA00", "h. c #BCE8C3ECCEFA", "j. c #A7F3C168EAB9", "k. c #A8B5C228EABB", "l. c #AAC5C336EAFE", "z. c #AB80C3DEEAFA", "x. c #AC9FC45AEB79", "c. c #AE9AC5AAEC17", "v. c #AF8EC690EC57", "b. c #AFD5C703ECB1", "n. c #B051C6BFEC95", "m. c #B0F3C77CEC88", "M. c #B2D5C8E9ED19", "N. c #B403C9E9EDA0", "B. c #B492C9FEEDB2", "V. c #C091C092C094", "C. c #C1C8C1C8C1C8", "Z. c #C3E4C3E4C3E4", "A. c #C411C470C52C", "S. c #C4DAC4DBC4DC", "D. c #C59DC59DC59D", "F. c #C6DDC6DDC6DD", "G. c #C7D4C79BC73E", "H. c #C7D8C7D8C7D8", "J. c #C392C5E5C903", "K. c #CA06CA07CA0A", "L. c #CAC7CAC8CAC8", "P. c #CB9CCB9CCB9C", "I. c #C9D3CB67CE4F", "U. c #CF04CEF7CEE3", "Y. c #CF9ECF9ECF9F", "T. c #D075D037CFD8", "R. c #D065D065D065", "E. c #D20FD191D0CA", "W. c #D19AD19BD19C", "Q. c #D2AAD2AAD2AA", "!. c #D5EFD5EFD5EF", "~. c #D8E8D8E8D8E8", "^. c #D99FD99FD99F", "/. c #DB07DB07DB07", "(. c #DF2FDF2FDF2F", "). c None", /* pixels */ ").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).", ").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).", ").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).", ").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).", ").).).).).).).).).).).).).).).).).).B N N M M ).).).).).).).).).", ").).).).).).).).).).).).).).).).).G T R U K C ).).).).).).).).).", ").).).).).).).).).).).).).).).).N U F.R.L.' K ).).).).).).).).).", ").).).).).).).).).).).).).).).).D ~ !.(.U._ H l ).).).).).).).).", ").).).).).).).).).).).).).).).).T ] /.~./ D n k g ).).).).).).).", ").).).).).).).).).).).).).).).).! C.^.W.L g g z B B k d ).).).).", ").).).).).).).).).).).).).).).).W ' Q.P.H f d m E R c a ).).).).", ").).).).).).).).).).).).).).).F ~ V.Y.L.W C C I ` ^ n p ).).).).", ").).).).).).).).).).).).).).).F _ K.W.Y.Z.[ C.D.H.( b i ).).).).", ").).).).).).).).).).).).).).Z Y A.T.U.L.S.Z.F.S.` T l u ).).).).", ").).).).).).).).).).).).O.+.} $.I.E.G.' ~ W E P B l s ).).).).).", ").).).).).).).).).).1.4.7.#.@.%.h.J.) R J D V b s y ).).).).).).", ").).).).).).).).).).-.6.i.t.o. .| Q A v x l j ).).).).).).).).).", ").).).).).).).).).>.3.r.z.k.9...{ S h ).).).).).).).).).).).).).", ").).).).).).).).w :.y.z.M.b.d.,.6 * ).).).).).).).).).).).).).).", ").).).).).).).X.=.0.j.N.B.c.s.2.3 $ ).).).).).).).).).).).).).).", ").).).).).).9 *.e.g.v.M.n.f.8.e > ).).).).).).).).).).).).).).).", ").).).).).).7 t u.c.m.x.a.q.r 4 & ).).).).).).).).).).).).).).).", ").).).).).).2 0 w.g.l.p.<.q 1 # ).).).).).).).).).).).).).).).).", ").).).).).).< 5 &.1.5.;.8 , + ).).).).).).).).).).).).).).).).).", ").).).).).).).- : ; = % @ O ).).).).).).).).).).).).).).).).).).", ").).).).).).).).o X . ).).).).).).).).).).).).).).).).).).).).", ").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).", ").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).", ").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).", ").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).", ").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).", ").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).)." }; qosmic-1.6.0/icons/silk/camera.xpm000066400000000000000000000120731304321135200170410ustar00rootroot00000000000000/* XPM */ static char *camera[] = { /* columns rows colors chars-per-pixel */ "32 32 132 2", " c #2A7D2A7D2A7D", ". c #344E344D344C", "X c #3B5D3B5A3B57", "o c #42E342DE42D9", "O c #484147FE47BA", "+ c #4C504C444C36", "@ c #4FED4F2F4E61", "# c #545B542B53F8", "$ c #5832579756E7", "% c #59265863578C", "& c #5CD15CC35CB5", "* c #5BDF5E3C608D", "= c #5D8D5FEA623A", "- c #6429641C640D", "; c #6B6B6B5E6B5E", ": c #7F5279B46CF2", "> c #6D0F6E5D7172", ", c #6B92710776B0", "< c #6E4373CC7960", "1 c #736C735D7358", "2 c #7C917ADA773E", "3 c #7C777C6D7C66", "4 c #82A77DF7741B", "5 c #809F7F737E30", "6 c #8C9580B364D4", "7 c #954485196062", "8 c #94B387A068B5", "9 c #859D83277D13", "0 c #96678D5C77D0", "q c #91248B7F7DE4", "w c #A76D97947398", "e c #C2339FCD4F26", "r c #CF58AD8A5E4A", "t c #DBE5B6095C81", "y c #E578C040683E", "u c #716079688155", "i c #7E2A8085835B", "p c #7A4084068E7F", "a c #7E1A88149258", "s c #79508B3A9D9A", "d c #7448939BB490", "f c #79DD996EBBC7", "g c #5DA496D8D611", "h c #5EF7986BD6BF", "j c #5FC0998ED8EE", "k c #6F919AC0C81B", "l c #6D719AB1CBBD", "z c #70749791C1C7", "x c #711B999FC524", "c c #71F99C79CAB3", "v c #61A797ACD51B", "b c #62F99A5CD707", "n c #6B3B9C66D227", "m c #65099C68D908", "M c #692F9ECFD993", "N c #78D2A0B3CE75", "B c #7479A18AD6A0", "V c #7AE3A5C4D56D", "C c #849C84658424", "Z c #8BF08AA98779", "A c #869388EE8BC6", "S c #8BDB8BD08BB6", "D c #907C8F838E75", "F c #94A0901F86A6", "G c #912F90908FD7", "H c #99D1954489D7", "J c #86AD8C2E9291", "K c #83CB90379D9B", "L c #8E4596489FE3", "P c #94E694BF9481", "I c #9861979A96B6", "U c #99AF98699705", "Y c #969F99259BC5", "T c #9C329C2E9C32", "R c #A42B9AAA8352", "E c #A0BE9FE59EF5", "W c #B3F4A7C18AE9", "Q c #B502A9EE8FF4", "! c #A740A2D097AC", "~ c #B1E3A9089395", "^ c #B0C4AB8B9EF0", "/ c #8A0495F5A2DE", "( c #8AC59891A72C", ") c #8DE69B60A9B6", "_ c #95559AD8A15F", "` c #9DB39F54A1C2", "' c #914C9F03ADF3", "] c #8A269C1BB0EB", "[ c #9C5AA22CA86B", "{ c #8ED1A0CBB602", "} c #94C1A29AB1A5", "| c #9AF1A6FAB418", " . c #9C12A921B76D", ".. c #9792AA85BEE7", "X. c #A404A3EAA3EF", "o. c #AC39ABFAAB91", "O. c #B2B3AE94A4F0", "+. c #B11AAF9FAC80", "@. c #B145B082AF9C", "#. c #A0F9AA38B484", "$. c #A8F9AECAB51B", "%. c #B3A8B355B2DB", "&. c #B96DB8AFB7DA", "*. c #B78AB9EBBCBE", "=. c #BC5EBC27BC05", "-. c #CAC9BA879351", ";. c #DEA1C47B862A", ":. c #D45AC4699DF3", ">. c #E6AACCFB8FC1", ",. c #80CEA0F6C586", "<. c #8724A84CCCC5", "1. c #9B97AE88C320", "2. c #8278A95CD722", "3. c #9338B1E8D6BF", "4. c #950EB44CD967", "5. c #A906B5ADC439", "6. c #AD89BB0FCA35", "7. c #B10DBB70C700", "8. c #B156BF41CE9F", "9. c #AE21BFBBD4EA", "0. c #BCE5C335CABC", "q. c #AE92C067D597", "w. c #B654C3F4D2FB", "e. c #BB18C76CD578", "r. c #BD19C960D7ED", "t. c #BCF4CA7CD9BD", "y. c #C4FBC477C3EE", "u. c #CCCDCC0FCB3F", "i. c #D13CCFFECEA6", "p. c #C226CBEBD78C", "a. c #C1CFCE38DCC6", "s. c None", /* pixels */ "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.P S S A C C C 3 2 1 > ; > > 1 2 s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.T T T T T T U P S 9 9 q 0 8 6 : 2 C S s.s.s.s.s.s.s.s.s.s.", "s.s.I X.%.=.=.=.=.&.&.o.H R -.;.t e 7 4 Z S s.s.& & & & & & s.s.", "s.s.U o.y.u.y.y.=.=.=.%.! ~ :.>.y r w F I P 3 - - & & & & & & s.", "; C T %.u.u.=.%.o.o.o.o.o.O.^ ~ W Q O.+.o.U 3 ; - - - - - - % # ", "; 3 X.&.y.y.&.%.%.@.o.%.=.=.o.X.` X.o.%.o.T S 3 2 1 1 1 1 ; $ + ", "; 3 X.&.%.%.&.=.u.i.u.u.i.u.y.&.o.T I P T T X.X.I S A C C 1 # o ", "; 3 X.&.o.o.*.0.p.a.t.r.e.e.w.7.$.` S A S I o.%.X.I S C A 1 # X ", "; 2 T o.%.*.0.q.3.2.V V V V V <.1.#.Y Z 3 A X.o.X.P 3 1 C 1 + X ", "- 1 P o.=.0.9.4.B v g g g g g n <...[ D 1 3 T o.T S 1 ; 3 1 + X ", "- 1 S o.y.e.3.B m v b b b b h v n ,.| I 1 1 U X.T C ; ; 2 ; + X ", "- 1 S o.u.r.2.v b b m m m m b v g c .U ; ; P X.U C ; - 1 ; + X ", "- 1 A X.y.e.V h b m M M M M m b h c | P ; ; P X.P 3 - - 1 ; O . ", "- ; C X.y.w.V g b M M M M M m m j c } D - - S T P 3 - & ; - O . ", "- ; C E =.8.V g b m M M M M M m b c ' Z - - S T S 2 & $ ; - O . ", "- ; C T &.6.V g b m M M M M M m b c ) C & - S T S 1 % # - - o . ", "& ; 3 I %.5.N g b m m M M M m m b x / 5 % & A I S 1 # # - & o . ", "& ; 3 G X.#.,.l b b m m m m m n l d a 1 # % C P A 1 # + - & o . ", "& - 2 C P _ { ,.l v b b m m b l f s < & O $ C P C ; + + & % o . ", "& - 1 3 C A L ] f x k k k x z d s u = + + & C P C ; # # & $ X . ", "% & ; 1 1 1 i J / ) ) ) ( / K p , * + + # ; A S C 1 - & & # X . ", "# % & & & & - 1 5 C C C 5 3 1 ; $ O X o + & 1 1 ; & $ # # O . ", "+ + O o o o + # $ % $ # # # @ O o X . . . X o o X X X . . . ", "s.s.. . . . o o o o X X X X X X . . ", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s." }; qosmic-1.6.0/icons/silk/chart_bar.xpm000066400000000000000000000167361304321135200175500ustar00rootroot00000000000000/* XPM */ static char *chart_bar[] = { /* columns rows colors chars-per-pixel */ "32 32 244 2", " c #24D65F9C37B3", ". c #2AFD6DF12382", "X c #2E71723B27C9", "o c #3261768F2C95", "O c #36F87BAC301A", "+ c #181F3E46753F", "@ c #7A012BDB7797", "# c #79A92E9679D0", "$ c #793934197E14", "% c #392170674D98", "& c #1CB549536084", "* c #1A63425E7687", "= c #1CA3456978AA", "- c #1EB6484E78EA", "; c #23714F2367C3", ": c #20E74B377948", "> c #30725A6075BC", ", c #395D62787EBD", "< c #F6DA3C653EE2", "1 c #D6873CA350C4", "2 c #9BA841E57647", "3 c #9CE4472E7CA9", "4 c #F6E141AB442E", "5 c #F5F2471249FF", "6 c #F6724C304E9A", "7 c #F7BA53D854F1", "8 c #F9375625570D", "9 c #FEFE59CF567B", "0 c #FBC65D685BE5", "q c #FEFE62685E4A", "w c #D89D4F2F6229", "e c #F8495F766121", "r c #FC8164E562DD", "t c #FF3369AB65C0", "y c #FD846CFB6A37", "u c #FF0A724E6E3A", "i c #FE62754571B4", "p c #FF0979C675A5", "a c #FEB17DCF7A23", "s c #3B48810D33E1", "d c #3F4C86AC37EB", "f c #438E8C4A3BEC", "g c #46A5846C4167", "h c #49F5880E45A4", "j c #4D538B694A0B", "k c #517B8FB14D66", "l c #481D91E83FED", "z c #4D5998364502", "x c #52BC9E974AA3", "c c #558194405106", "v c #5960991054E9", "b c #5D869DE75900", "n c #55FFA2764DB6", "m c #58C0A5D44EDE", "M c #59E1A39E5234", "N c #5C73AB7B51EB", "B c #60D6A3745B89", "V c #6083B12E55C4", "C c #6396B438584D", "Z c #69CDBB5B58BE", "A c #50709DBE7F26", "S c #602C90B577B3", "D c #67B4AD6760D5", "F c #71E9B6296B77", "G c #75A9BABA6F0A", "H c #6D26AE36734D", "J c #7B94AF7F7AA5", "K c #705EB0C67680", "L c #784DBD5C716A", "P c #75D6B3B67B61", "I c #7AE6B4BC7E7E", "U c #7DBBC35D7288", "Y c #FF6C81CC7DAA", "T c #13842FD5AF3B", "R c #0E782929BFBA", "E c #1B4F3879B19F", "W c #2B4E3669B3D7", "Q c #33B53E20B5CA", "! c #5F362E9B8B7A", "~ c #7AB23C948332", "^ c #1D0F42CF8BDB", "/ c #35705B9A9371", "( c #3C856616819B", ") c #2A51492FB657", "_ c #33B1557BBC65", "` c #352259E8C025", "' c #261B6B4CB978", "] c #2E206DFEB93E", "[ c #7CB143B58906", "{ c #79AA434C9062", "} c #40ED6B68834D", "| c #43DB4D1AB99F", " . c #4C355773BD02", ".. c #4C885BBABF88", "X. c #0E272649C113", "o. c #0F332BF9C0C2", "O. c #10E62D2CC307", "+. c #0F0D3613C757", "@. c #0FC33145C504", "#. c #1A1C39FEC6C9", "$. c #0FDE390AC85E", "%. c #1449401BCA78", "&. c #1ED9449BCB4E", "*. c #1D554B5BCDA3", "=. c #20B74344C819", "-. c #22694642C9AD", ";. c #226D4AD3CCF7", ":. c #23BB525BCEF9", ">. c #36495D0AC0E7", ",. c #22225750D1AB", "<. c #255A5BDAD30A", "1. c #33555F4AD248", "2. c #1C58641EC82F", "3. c #18BE64D5D3B0", "4. c #1E3D6BABD6D1", "5. c #37826096C22A", "6. c #38CA648CC408", "7. c #36796E1CC3A4", "8. c #39FB688EC646", "9. c #3ABA6C6CC855", "0. c #26976321D58F", "q. c #29E1649FD617", "w. c #2C426B9BD78B", "e. c #3A5B6D18D704", "r. c #2574703ED7CD", "t. c #2D1B73B2D9C1", "y. c #31C972C0D7AD", "u. c #33E67938DB33", "i. c #3A6A7DE1DBFC", "p. c #4CCD5F95C15E", "a. c #4DD365AFC32C", "s. c #4ED66CBEC51C", "d. c #4FD6711EC703", "f. c #51487503C970", "g. c #5452797BCB6D", "h. c #58F97E7DCCE9", "j. c #438E7545D81E", "k. c #44F97695D923", "l. c #438D7CA3DAA1", "z. c #4A757C69DAA1", "x. c #9C1C4C5D8324", "c. c #9C6350E88585", "v. c #9CA55434886C", "b. c #AC716B2299E7", "n. c #C9FD74178BF0", "m. c #DC9B72BB8384", "M. c #DE1F7F0B8FF0", "N. c #D24B7FDE9379", "B. c #E1C57D0B8C0C", "V. c #63D7A7F08B1D", "C. c #7678A31E8F8E", "Z. c #7AF4B71580F9", "A. c #7E61B92E839E", "S. c #79A2A5B592AB", "D. c #7EBFAA8495EF", "F. c #64588B49A223", "G. c #7F19A65CABE4", "H. c #3E8682FFDE2F", "J. c #5E5082A0CDFE", "K. c #445383C5DCFB", "L. c #4B3584DDDD13", "P. c #4D22896BDE52", "I. c #52C08672DE7D", "U. c #53B28D6EDF51", "Y. c #5874913CE00B", "T. c #642985DDCEC9", "R. c #75A186A7C93B", "E. c #6BB38B62D206", "W. c #63818CF9D956", "Q. c #72AD8C1AD054", "!. c #4DD18AADE0FB", "~. c #53DE8DA1E191", "^. c #5B298CCAE107", "/. c #56F6927EE52A", "(. c #5CF193F1E216", "). c #61FF9681E2FC", "_. c #653899A6E471", "`. c #6B5A9D5DE534", "'. c #6DCDA0F7E647", "]. c #6E19A074E8A8", "[. c #73EDA307E66C", "{. c #7985A692E765", "}. c #7D17A8D8E7DC", "|. c #745DA453E9A0", " X c #79C3A750E997", ".X c #7DD7AA4BEA2B", "XX c #81DFB44F8353", "oX c #8213BB0E8498", "OX c #8603BC028947", "+X c #89AFBDC78AEC", "@X c #8198AD18973A", "#X c #8ED7BF689051", "$X c #8143A84BAF4A", "%X c #801CB21DADF9", "&X c #8573ABE5B4B0", "*X c #8C6BB3BFBCFE", "=X c #DE7B831F935B", "-X c #FEDA85F6824E", ";X c #FFC08B3C8644", ":X c #FE3F8D998AAD", ">X c #FFAA92338D44", ",X c #FECD953B9296", "X:XXa a ;X2X0XT.K.[.vX[.`._.`.{.).y.2.ZXZXZXZXZXZXZXZXZXZX", "y a eXrX:Xa p -X2X9XJ.H.'.cX[._.).`.[.).w.' A Z Z C V N N m n n ", "t a 2XeX;Xp i Y 1X9Xh.i.`.}.`.).(._.[.^.q.] V.U U L G F F D M x ", "r p 1XeX-Xi u Y X5Xs.w.(.`.(.P.P.U.).L.:.6.*XkXpXA.Z.OXdX+Xv d ", "7 y ,XX5Xa.q.~._.U.L.K.P.(.z.:.5.&XgXiXI P oXsXOXc s ", "6 r :X,Xi 0 0 y :X4Xa.0.I.).U.K.K.L.Y.z.;.>.&XgXOXP K Z.aXXXk O ", "5 e :X,Xu 9 9 t ;X4Xp.<.I.(.P.l.i.K.U.k.;.` &XdXoXH H P pXXXj o ", "4 0 ;X,Xp t t u :X3X..<.L.(.P.K.K.L.U.k.&._ $XdX+XI P A.aXI h X ", "< 8 -X1X>X;X;X;X>X3X .,.L.(.Y.U.U.U.U.j.&._ G.gXsXaXpXaXsXJ g . ", "1 w m.=X=X=XM.B.B.b.| *.e.z.z.k.k.j.j.1.#.) F.@XD.S.S.S.C.S % ", "2 3 c.v.c.x.x.x.3 { Q %.*.;.;.-.-.=.=.#.O.E / } } ( ( , , > ; & ", "[ [ ~ ~ $ $ $ # @ ! W $.+.@.@.O.o.R R X.X.T ^ : - = * * + + + + ", "ZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZX", "ZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZX" }; qosmic-1.6.0/icons/silk/clock.xpm000066400000000000000000000173421304321135200167100ustar00rootroot00000000000000/* XPM */ static char *clock[] = { /* columns rows colors chars-per-pixel */ "32 32 256 2", " c #2B195711796E", ". c #DD159F200F59", "X c #CA2299561E4C", "o c #F4F5B4750000", "O c #E6F7AB0E1B20", "+ c #EE68B36C1976", "@ c #F03EB4EA1763", "# c #F3A8BB981CAE", "$ c #F193B66A19C7", "% c #E96DA87D0624", "& c #C4159A992B6D", "* c #C2879DEF377B", "= c #DD95A6D72546", "- c #D528A55C2E38", "; c #E47AAB2623E8", ": c #EBE1B45B28CC", "> c #F58ABEE12220", ", c #F058C0243FB5", "< c #F26CC01E3879", "1 c #F67FC35E2F5A", "2 c #F539C36D3798", "3 c #B70E9DCB47F2", "4 c #BEB2A3854CE5", "5 c #BEF8B20F6E55", "6 c #B683B3E772ED", "7 c #C018B4C67044", "8 c #AF2BA9277182", "9 c #DD0AB9A74923", "0 c #DB4CB4474482", "q c #C29CAE445A3A", "w c #C158A97354EC", "e c #C6B1B3DC5D4B", "r c #CC2CB55C5913", "t c #D8B7B8A55607", "y c #E7FDBA964514", "u c #E549BC90548B", "i c #C571BA536DB6", "p c #D3CBB9FC623F", "a c #EDF3C4A84939", "s c #F35EC5984A47", "d c #EC1FC1B35949", "f c #F634CF105E59", "g c #F331C96C5685", "h c #E052C2CC5FE8", "j c #E4E6C4EA688D", "k c #ECDFCB966AAD", "l c #EA06C7BC668B", "z c #F416CD5E6489", "x c #F2FACD3369F3", "c c #F50ED07A6B85", "v c #EE72CE6A78CE", "b c #EDF3CD8B715A", "n c #F035D06B7B6E", "m c #F39ED33B7A97", "M c #2D865D38876A", "N c #2FFE5EB3874B", "B c #38B46A959321", "V c #31C067369D5C", "C c #370668FD9A30", "Z c #3E5C71139C14", "A c #32F768F0A182", "S c #443271129707", "D c #5D747BF996CA", "F c #61AB7F369874", "G c #421875D6A450", "H c #421C74B1ACDC", "J c #46327B04A95E", "K c #492C781CA7BD", "L c #59907ECAA1BE", "P c #52337E68A8AC", "I c #43AD7638B386", "U c #4A7C7FACB1BD", "Y c #7D68854486C7", "T c #625E83319E46", "R c #4A9180CEAF5C", "E c #59988234A994", "W c #4CC083C6B336", "Q c #4EF38912B9EB", "! c #53DC8381B421", "~ c #5AC5861EB448", "^ c #5EA68A33B623", "/ c #5E41865CBAE0", "( c #544A8BD6BBDA", ") c #5BE08C4DBB51", "_ c #5E0A90C7BFE0", "` c #66E786D2A33B", "' c #64EB897AAD84", "] c #7D6B96E5AD15", "[ c #77E391EFA76B", "{ c #61FD86D8BE76", "} c #617D8C26BDC0", "| c #69D68DC3B2F8", " . c #691F9306BBDE", ".. c #795196B0B306", "X. c #5B7A945BC345", "o. c #581D965BCADC", "O. c #5C8A997FCC1B", "+. c #576A93F8C624", "@. c #648894C5C44F", "#. c #6AFB9526C48B", "$. c #62D99A3DC721", "%. c #62CA9D82CC48", "&. c #6BEE9CFCCB3E", "*. c #6E52967BC930", "=. c #719F9A1FC6DF", "-. c #75899CFCCB93", ";. c #7C2A9F11CB96", ":. c #6B88A2E3CC77", ">. c #649BA023CF60", ",. c #736FA3EFCE83", "<. c #7C48A261CEAF", "1. c #75F1A8C4CA80", "2. c #6E24A70DD136", "3. c #69E5A4DDD26A", "4. c #7AF0A6E6D084", "5. c #738EA9ADD26E", "6. c #7CE1ABA3D4F2", "7. c #7DAEB1B3D87A", "8. c #7204BC33FDCE", "9. c #7E5AC242F749", "0. c #7C93C1CEF915", "q. c #916F9F7D8870", "w. c #8A5793169527", "e. c #8D86969F98FD", "r. c #94FC9D529F07", "t. c #8F5FA10C8FE8", "y. c #9101A6659B15", "u. c #ABFDB1A4887A", "i. c #B39CB8928781", "p. c #A945BA709C00", "a. c #A8D9B645962F", "s. c #95479F1CA17C", "d. c #88A89F59B771", "f. c #8B2AA61BA1FD", "g. c #9B40A334A468", "h. c #9F07A62CAB68", "j. c #98E6AB5CAAB3", "k. c #8BECAFF1BA0F", "l. c #99F5A944B8B5", "z. c #98BAB8C2BF69", "x. c #A286A286A286", "c. c #A300ABD6AEC1", "v. c #AD82AD84AD7B", "b. c #A665BD4EAB02", "n. c #A4A4B48AB274", "m. c #ADB9B6E3BB8C", "M. c #AA78B461BAC3", "N. c #B4E3B4C2B4A4", "B. c #BA32BCEEBCF6", "V. c #A661C042B056", "C. c #E7D7CD8081D4", "Z. c #F435D6558591", "A. c #F736DACA883E", "S. c #F44FDAB69233", "D. c #F5E4DE4699E0", "F. c #F7BFE0839D4D", "G. c #F831E2EBA406", "H. c #818DA409CD3C", "J. c #8CA5A73ACF01", "K. c #8061AF7CCE25", "L. c #8820B91ECF76", "P. c #97CBBBA1C77E", "I. c #841CA782D34C", "U. c #8ACEAC55D5B1", "Y. c #8929AF3BD74E", "T. c #9373AA00D1E2", "R. c #8C3BB41FD691", "E. c #8E55B44ADAF0", "W. c #8A91BEA6D8D1", "Q. c #95AEB53FDA56", "!. c #9D08B67CDB0D", "~. c #9491BB40DCC2", "^. c #9B18BB5ADE1A", "/. c #9678B9C3D4E1", "(. c #AB3EB626C163", "). c #A2DBBF79C342", "_. c #B64DBF02C360", "`. c #A361BECDDE7B", "'. c #A953BCF8DD1C", "]. c #9581BC7FE1EE", "[. c #9D95C108C3D1", "{. c #9BD1C3C4CBE7", "}. c #953FC1C7CFB1", "|. c #9E6AC32BDDC8", " X c #97F5C411D561", ".X c #B6C8C1A9C53E", "XX c #BD40CA37CD81", "oX c #B86AC410C9B0", "OX c #A367C29FDF82", "+X c #ABBEC14EDF19", "@X c #A22FC90BD9CB", "#X c #BD8ECCD0D403", "$X c #8EF1C6EFE659", "%X c #8F0DCA31EE53", "&X c #94C5C6BFE6AB", "*X c #9BE6C57AE3BC", "=X c #9CE0CA25E424", "-X c #933ACB7FED4E", ";X c #9A45CABCE947", ":X c #A28DC4DBE3D0", ">X c #ABFBC4EBE247", ",X c #A580CA06E52A", " 1 1 > # UXUXUXUXUXUXUXUXUXUXUXUX# # > # UXUXUXUXUXUX", "UXUXUX$ 2 z A.A.f a 0 6 L.8.8.8.8.8.8.L.6 9 a g f s # UXUXUXUXUX", "UXUX@ < z A.G.D.k t i p.W.0.9.9.9.9.0.W.p.i h z m c < @ UXUXUXUX", "UXUX, z S.F.Z.k 9 e b. X$X%X-X-X-X-X%X$X}.p.r y b m z a + UXUXUX", "UX: g m D.S.l t e i.{.-X-X;X=X*X*X*X&X&X&X[.6 r j v Z.x : % UXUX", "UX: z m n j 0 q p.{.=X1X:X|.^.Q.Q.Q.^.*X=X@XV.i.p j S.Z.y O UXUX", "UX; d d u t q u.[.;X1XX>X,X@X Xb.7 p C.v y O UXUX", "UXUX; = - w a.P.|.,X>X3XiXdXlXlXlXdXaXuX>X`.|.).a.5 r 0 = . UXUX", "UXUXX & 3 8 P.&X:X>X4XsXxXZXAXDXDXDXZXbXiX2X:X/.n.u.8 4 * & UXUX", "UXUXUXq.f.k./.*X`.4XNXDXAXCXCXAXKXLXLXGXFXcX>XQ./.z.j.y.t.UXUXUX", "UXUXUX:.5.7.~.OX>XiXDXPXIXCXtXtXDXPXPXLXDXlX3X^.~.R.K.1.:.UXUXUX", "UXUXO.>.2.7.E.OX6XbXGXPXIXkXB._.kXKXPXDXeX#X4X.O.UXUX", "UXUXo.%.2.6.R.`.aXZXGXLXLXyXc.g.qXkXtXeX.XoXiX5XQ.4.5.2.%.o.UXUX", "UXUX+.O.:.4.I.`.lXGXGXLXPXkXg.w.n.m.g.g.m.#XhX7XU.-.,.:.O.+.UXUX", "UXUX( X.&.,.<.!.bXGXGXLXLXtXr.Y e.r.w.s..XsXnX7XU.*.&.&.X.( UXUX", "UXUXQ ( $.&.;.!.cXGXGXGXGXwXg.Y Y w.c.XXjXVXVX5XI.#.&.$.( Q UXUX", "UXUXW ( X.&.-.Q.pXFXFXGXFXwXc.e.e.h.XXjXFXHXmX5XI.#.@.X.( W UXUX", "UXUXR W ( @.-.Q.6XnXFXHXFXjX.Xm.XXwXzXFXHXBXvX1XI.#.@.( W R UXUX", "UXUXJ R ( _ =.U.:XgXBXJXGXNXwXwXzXFXJXJXHXmX8X].<.#.) ( R J UXUX", "UXUXUXJ W ( #.<.Y.XuXaXdXdXaXuX+XU.-.#.^ ! J Z B UXUXUXUX", "UXUXUXUXUXS L E U ! } =.H.J.T.T.T.J.J.;.#.} ^ ~ E L S UXUXUXUXUX", "UXUXUXUXUX` ] ] | ~ ! ~ / { { { { / / ~ ~ ^ ...] [ T UXUXUXUXUX", "UXUXUXUXUXUX.X_.(.d.E G H H I I I I H H K ' l.(.m.m.UXUXUXUXUXUX", "UXUXUXUXUX0XrXrX9Xl.L C V V A A A A V V Z ` M.9X0X0X9XUXUXUXUXUX", "UXUXUXUXN.9XrXrX9Xh.D M M M M M M M M M N F c.9XrXrX9XN.UXUXUXUX", "UXUXUXUXv.N.9X0XB.h.UXUX UXUXh.B.0X9XN.v.UXUXUXUX", "UXUXUXUXx.v.v.N.v.UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXN.v.v.x.UXUXUXUX", "UXUXUXUXx.x.x.x.UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXx.x.x.x.UXUXUXUX" }; qosmic-1.6.0/icons/silk/color_swatch.xpm000066400000000000000000000043031304321135200202750ustar00rootroot00000000000000/* XPM */ static char *color_swatch[] = { /* columns rows colors chars-per-pixel */ "32 32 47 1", " c #FFE96BC169D0", ". c #FFE96CF76A01", "X c #FEF96E426B42", "o c #FEFE6F6F6B6B", "O c #4AEFCD2169C7", "+ c #4A3ACCD26BE6", "@ c #4D47CE54689E", "# c #4C7FCE0F6ABE", "$ c #4D96CDC66B32", "% c #4DC3CC2E6C0D", "& c #4CD4CD796D4E", "* c #4FFECD5B6AEB", "= c #5050CCCC6D6D", "- c #FFFFA91B73DD", "; c #FFFFA9E373A3", ": c #FFFFAAAA7373", "> c #FFFFABBC73A3", ", c #F3CED69264C6", "< c #F390D774647B", "1 c #F0F0D5D56767", "2 c #F0A4D6B0672A", "3 c #5348778BAFB5", "4 c #55C679D2AFCB", "5 c #55F4783AB0A6", "6 c #58587A7AB0B0", "7 c #FFFF759CAF97", "8 c #FFFF768AB0AD", "9 c #FFFF7777B1B1", "0 c #5D82AFF3EE8C", "q c #5D35B1D3ED13", "w c #5D84B145EFA7", "e c #5DD7AF5DF11C", "r c #60B2B021EE6D", "t c #6060B0B0EBEB", "y c #CFE5EE63B41C", "u c #D0D0EBEBB2B2", "i c #D334EE2BB2BC", "p c #D35DEC89B412", "a c #D5DBEED0B427", "s c #D27FEF0AB584", "d c #D9D99B9BDDDD", "f c #DC939AA1E018", "g c #D9179C53DEBD", "h c #DC6B9C43DEC2", "j c #DBDF9B59E10A", "k c #DF3F9B50E109", "l c None", /* pixels */ "llllllllllllllllllllllllllllllll", "llllllllllllllllllllllllllllllll", "llllllllllllllllllllllllllllllll", "llllllllllllllllllllllllllllllll", "lllloooooXll>::::;ll211111llllll", "lllloooooXll>::::;ll211111llllll", "lllloooooXll>::::;ll211111llllll", "lllloooooXll>::::;ll211111llllll", "lllloooooXll>::::;ll211111llllll", "llll..... ll>;;;;-ll<,,,,,llllll", "llllllllllllllllllllllllllllllll", "llllllllllllllllllllllllllllllll", "llllyyyyysll+&&&&#lle00000llllll", "lllluuuuupll%====*llrtttttllllll", "lllluuuuupll%====*llrtttttllllll", "lllluuuuupll%====*llrtttttllllll", "lllluuuuupll%====*llrtttttllllll", "lllliiiiiallO$$$$@llwqqqqqllllll", "llllllllllllllllllllllllllllllll", "llllllllllllllllllllllllllllllll", "llll555553llkffffjll788888llllll", "llll666664llhddddgll899999llllll", "llll666664llhddddgll899999llllll", "llll666664llhddddgll899999llllll", "llll666664llhddddgll899999llllll", "llll666664llhddddgll899999llllll", "llllllllllllllllllllllllllllllll", "llllllllllllllllllllllllllllllll", "llllllllllllllllllllllllllllllll", "llllllllllllllllllllllllllllllll", "llllllllllllllllllllllllllllllll", "llllllllllllllllllllllllllllllll" }; qosmic-1.6.0/icons/silk/color_wheel.xpm000066400000000000000000000173501304321135200201160ustar00rootroot00000000000000/* XPM */ static char *color_wheel[] = { /* columns rows colors chars-per-pixel */ "32 32 256 2", " c #D78F0A710BF0", ". c #DED9271D0137", "X c #CED300482885", "o c #DE702722378B", "O c #E3B3321F29DC", "+ c #F515705B0FD5", "@ c #E88947D62487", "# c #F0AE639B2C91", "$ c #D480198549AB", "% c #CCDA07D3582F", "& c #DA6D22AF4125", "* c #CEA71A5671B6", "= c #D9FB31AE6BD3", "- c #F5A7746C54E4", "; c #E8EC5592703A", ": c #F81C68436AE6", "> c #FC8071F966D4", ", c #FF8D68EA76F1", "< c #FFD278987403", "1 c #3274D22A0FF8", "2 c #1810D38F2DCB", "3 c #2C83D4DD2D1D", "4 c #52C8D1C41068", "5 c #7153D3A113C3", "6 c #491CD8602EE8", "7 c #6C0DDB57333A", "8 c #1570D72952B0", "9 c #348DDA0C4E57", "0 c #27BADC3D713C", "q c #6D28E3C25D54", "w c #5881E3347515", "e c #78A8EA4D77D9", "r c #5490DE1F4DCA", "t c #F7948B182A1D", "y c #FA32A9FA26F7", "u c #8F6FD61C125F", "i c #B11EDA1F0A71", "p c #8D90DE55378F", "a c #B1BAE116329F", "s c #A308E03C36FC", "d c #F05ED055172A", "f c #F437D04C32A1", "g c #C5B6E253287F", "h c #E6BFE7EE2C90", "j c #DE81E4A21350", "k c #F8D68B3D4FAD", "l c #FE89944E6E52", "z c #FE9B875C757E", "x c #FFB690FE7768", "c c #FF0EB7AB78D0", "v c #FEFCA9DA6F1A", "b c #FB10B0AA5286", "n c #9816EEC4778F", "m c #8E21E9F569B3", "M c #A89EFF2A7AB1", "N c #B96BF8C878A4", "B c #ABBAEFC8769F", "V c #F81CD1EC56A6", "C c #D956EC1C529B", "Z c #FF10C8227465", "A c #FECAD878765F", "S c #C6C2F8E77616", "D c #D72BFF9C7BB8", "F c #D1A8EFCE6954", "G c #FE25E61776F5", "H c #E879FC7D7D90", "J c #FC21F9297A49", "K c #EF51EF156BF1", "L c #EA6FED9E48B9", "P c #32B30000BD9C", "I c #515B0000BA97", "U c #6E6F0000B7DE", "Y c #14250B36D15C", "T c #317715D0CEC3", "R c #1B421FC5DBFC", "E c #31922538DBBF", "W c #322E375BE2CC", "Q c #10D22FE1E360", "! c #4A1F1D69CDAF", "~ c #722B1F00C9FC", "^ c #590B2E12D61A", "/ c #62B4200ECC39", "( c #11A44D87EB41", ") c #0A0F6B5BF4FB", "_ c #290A5778EB84", "` c #52AF570DEEB2", "' c #70015611F126", "] c #5460734AF841", "[ c #68A66944FD1F", "{ c #7833692AFB76", "} c #76687BC1FD30", "| c #68B876ADFFFF", " . c #B3BB0000BACE", ".. c #C1E80E4B9111", "X. c #CCB429289414", "o. c #CEB033F4B141", "O. c #C1A215BCB8B0", "+. c #E53052F983B7", "@. c #FD9D6A99870B", "#. c #FB0377C786AA", "$. c #FFFF679F9694", "%. c #FE297B599994", "&. c #EF0B66FC8902", "*. c #FFFF5A58AC30", "=. c #FB637719A6BB", "-. c #FFB16837B6C0", ";. c #F2C16BFFAF9C", ":. c #DECD5170A327", ">. c #9007175CC497", ",. c #ADA22B58CE2F", "<. c #B14E0BC9C207", "1. c #C24E2297C993", "2. c #A89247D3DBBE", "3. c #8F9D5BE8F0FB", "4. c #A2375DD5FFFF", "5. c #B1FB5D4FFFFF", "6. c #A20355A3E308", "7. c #899A672DF99B", "8. c #976E6923FD0F", "9. c #8A1177E3FDAF", "0. c #95B478A1FC74", "q. c #B7F167DAFB40", "w. c #ADB66BE7F9B7", "e. c #D2EC4B2FD288", "r. c #FFFF5BBCD1AE", "t. c #FD2977CBC79F", "y. c #F77C6F06D227", "u. c #C9CF5C10F519", "i. c #E82D5C4FFFF4", "p. c #FA3858FFFA7B", "a. c #FFF05AECE6B6", "s. c #C6D4669BFE3D", "d. c #D702767AF9B0", "f. c #D0CA6B22F6D1", "g. c #FC92767BE727", "h. c #FC596942F74D", "j. c #E8387B55FFD7", "k. c #F89F783FF588", "l. c #EBFA6B17F23E", "z. c #2FA6DF2E8BA3", "x. c #0C0DE55CADFD", "c. c #2BC3E68FB365", "v. c #12CDDC8182CD", "b. c #57ACE4CF9505", "n. c #78A4FFAA884F", "m. c #7B93FE7799CE", "M. c #757AEC638D88", "N. c #4E5AE754AFE1", "B. c #77EBFFCBA9C4", "V. c #7856FE41BA9F", "C. c #7568F255ACDD", "Z. c #30D48DFAF966", "A. c #071CAAF6FA5B", "S. c #2FD0B091FC16", "D. c #18E68B98FA56", "F. c #52A38F39F9BA", "G. c #65CE84D0FD71", "H. c #797888FAFD11", "J. c #668796A3FC97", "K. c #786396DFFE75", "L. c #6AC5AC53FFF1", "P. c #7973A612FE12", "I. c #67D2B90FFF20", "U. c #7922B9A7FE34", "Y. c #0947EA8CCDE2", "T. c #2C99ED94D453", "R. c #083ED2F8F25F", "E. c #2AC7CEBFF7BC", "W. c #09D9EA7BE852", "Q. c #2EF7EB73EF24", "!. c #7AA3FB81D891", "~. c #70A4F7D6CBE2", "^. c #74BECD34FF98", "/. c #6831D560FE8A", "(. c #77C6D6DEFFAA", "). c #6AA7C356FFFF", "_. c #77AFFEBFE60C", "`. c #6BB2E6D4FF30", "'. c #7780EB98FE6A", "]. c #6AF1F888FB3A", "[. c #727BFA0EF7B2", "{. c #6D07FA50E80A", "}. c #57D0D79EE3D7", "|. c #FFFF94768C00", " X c #FF50B1B98D66", ".X c #FEBD8352B843", "XX c #FDF48D42AEDD", "oX c #FFFFB6D0A345", "OX c #FFFFAB3DB48C", "+X c #86F2FB568559", "@X c #99F3FF2F86D5", "#X c #87E2FC83961A", "$X c #9816FC879724", "%X c #A6ECFBC2864C", "&X c #B830FE688A32", "*X c #B0B6FFFF997B", "=X c #8998FCFFA81B", "-X c #88A9FB9BB874", ";X c #97C0FFFFAE6C", ":X c #ADE5FFFFACBD", ">X c #FF12C93E84F1", ",X c #FEA3D99F8D07", "X>Xv t + UXUX", "UXx.c.N.xXxXV.B.B.=X=X;X;X:X:XqXqXwXwX8X7X5XA Z Z c Xc v c X Xk # @ UX", "x.c.~.!.zXzX!.~.xXlXlXcXcXcXSXSXDXDXeXeX,XXc v v X Xl - @ . ", "Y.T.~.!._._.!.!.zXzXcXcXcXSXSXSXFXDXDXeX0X O . ", "W.Q.[.BX[.].[.BXVXCXZXZXKXKXIXPXLXLXAXAX0XoX|.|.< > > < z : O ", "W.Q.[.BX[.].[.BXVXVXZXZXKXKXIXPXPXLXAXAXOXOX|.|.< : : , #.: O ", "R.Q.'.BX].`.'.'.NXCXZXnXKXKXIXIXHXHXJXAXdXOXXX%.@., , , #.: o ", "R.E.`.NX`.`.`.'.NXbXmXnXnXGXGXHXHXHXJXdXdXOXXX%.@.@., @.#.; o X ", "R.E./.NX(././.^.vXvXbXmXmXGXGXGXJXJXkXkXdXsX.X=.$.$.$.#.&.; & X ", "A.E./.(.(.^.).I.U.pXpXpXaXaXjXjXkXkXkXkXhXsXt.-.*.$.=.%.&.; $ X ", "A.S.I.^.vXvXI.L.L.P.iXiXiXaXaXjXjXkXhXhXhXg.t.-.*.*..XXX+.= $ X ", "A.A.S.I.vXvXL.J.J.K.K.rXyXyXuXfXfXfXgXgXk.g.r.r.*.-..X=.+.= $ UX", "UXUXD.Z.U.pXP.J.G.G.| } 9.tXuXuXfXfXj.k.h.a.a.r.y.t.;.;.= % UXUX", "UXUX) D.J.P.P.K.G.| [ [ { 9.0.w.s.d.d.i.p.p.a.a.y.t.;.:.* % UXUX", "UXUX) ) F.J.K.yXH.| [ [ { 7.8.4.q.s.i.i.p.p.h.g.sXt.:.X.* UXUXUX", "UXUXUX( _ ] G.H.H.} [ [ { 7.8.4.5.s.u.i.i.h.k.g.y.y.o.X.UXUXUXUX", "UXUXUXUX( _ ` [ } rXrXtX9.7.8.4.5.s.f.j.j.gXk.l.e.o.X...UXUXUXUX", "UXUXUXUXUXQ W ` ` { 9.0.0.8.8.4.q.q.f.d.d.d.l.e.o.O...UXUXUXUXUX", "UXUXUXUXUXUXR R R W ` ' 7.7.8.w.w.q.q.u.u.e.1.1.O.UXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUXY Y E ^ ' ' 3.3.6.6.2.2.,.,.<. .UXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUXUXUXT T ! ! / / ~ ~ >.>.>.>.UXUXUXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUXUXUXUXY P P P I I I U U UXUXUXUXUXUXUXUXUXUXUXUX" }; qosmic-1.6.0/icons/silk/contrast.xpm000066400000000000000000000136461304321135200174550ustar00rootroot00000000000000/* XPM */ static char *contrast[] = { /* columns rows colors chars-per-pixel */ "32 32 172 2", " c #275827582758", ". c #286B286B286B", "X c #295F295F295F", "o c #2A692A692A69", "O c #2B182B182B18", "+ c #2BCE2BCE2BCE", "@ c #2D5E2D5E2D5E", "# c #2E352E352E35", "$ c #2F632F632F63", "% c #302D302D302D", "& c #311631163116", "* c #321532153215", "= c #335B335B335B", "- c #340934093409", "; c #352B352B352B", ": c #363D363D363D", "> c #371437143714", ", c #387F387F387F", "< c #394139413941", "1 c #39FF39FF39FF", "2 c #3B583B583B58", "3 c #3D353D353D35", "4 c #3E4A3E4A3E4A", "5 c #3FDB3FDB3FDB", "6 c #414941494149", "7 c #420F420F420F", "8 c #433643364336", "9 c #446C446C446C", "0 c #44FB44FB44FB", "q c #470E470E470E", "w c #485748574857", "e c #4A604A604A60", "r c #4BB54BB54BB5", "t c #4C4F4C4F4C4F", "y c #4D864D864D86", "u c #4EAE4EAE4EAE", "i c #4F464F464F46", "p c #505D505D505D", "a c #516C516C516C", "s c #524552455245", "d c #536753675367", "f c #549754975497", "g c #552655265526", "h c #563D563D563D", "j c #577257725772", "k c #585C585C585C", "l c #593459345934", "z c #5A5D5A5D5A5D", "x c #5B445B445B44", "c c #5C545C545C54", "v c #5D415D415D41", "b c #5E035E035E03", "n c #5F3C5F3C5F3C", "m c #603160316031", "M c #614E614E614E", "N c #626162616261", "B c #633D633D633D", "V c #648C648C648C", "C c #657465746574", "Z c #668F668F668F", "A c #679067906790", "S c #686F686F686F", "D c #697769776977", "F c #6A726A726A72", "G c #6B746B746B74", "H c #6C566C566C56", "J c #6DC86DC86DC8", "K c #6E4F6E4F6E4F", "L c #6FAF6FAF6FAF", "P c #709970997099", "I c #719D719D719D", "U c #723272327232", "Y c #732373237323", "T c #748374837483", "R c #76CD76CD76CD", "E c #78D478D478D4", "W c #7CD07CD07CD0", "Q c #80DC80DC80DC", "! c #838783878387", "~ c #878E878E878E", "^ c #8AB28AB28AB2", "/ c #8B978B978B97", "( c #8C988C988C98", ") c #8DB98DB98DB9", "_ c #8EC38EC38EC3", "` c #8F6E8F6E8F6E", "' c #910A910A910A", "] c #923592359235", "[ c #939B939B939B", "{ c #9DC19DC19DC1", "} c #9ECC9ECC9ECC", "| c #9FBC9FBC9FBC", " . c #A0C3A0C3A0C3", ".. c #A1C1A1C1A1C1", "X. c #A276A276A276", "o. c #A3C9A3C9A3C9", "O. c #A4AAA4AAA4AA", "+. c #A5C8A5C8A5C8", "@. c #A6A5A6A5A6A5", "#. c #A8EEA8EEA8EE", "$. c #AAD0AAD0AAD0", "%. c #ABDFABDFABDF", "&. c #ACEAACEAACEA", "*. c #ADC8ADC8ADC8", "=. c #B229B229B229", "-. c #B3C0B3C0B3C0", ";. c #B4C6B4C6B4C6", ":. c #B574B574B574", ">. c #B723B723B723", ",. c #B7C1B7C1B7C1", "<. c #B891B891B891", "1. c #B9E1B9E1B9E1", "2. c #BACABACABACA", "3. c #BBCABBCABBCA", "4. c #BC9FBC9FBC9F", "5. c #BDB5BDB5BDB5", "6. c #BEB4BEB4BEB4", "7. c #BFC1BFC1BFC1", "8. c #C135C135C135", "9. c #C251C251C251", "0. c #C584C584C584", "q. c #C85DC85DC85D", "w. c #C9D9C9D9C9D9", "e. c #CB2DCB2DCB2D", "r. c #CBE7CBE7CBE7", "t. c #CD11CD11CD11", "y. c #CDEFCDEFCDEF", "u. c #CECACECACECA", "i. c #D028D028D028", "p. c #D0C8D0C8D0C8", "a. c #D1F2D1F2D1F2", "s. c #D3DCD3DCD3DC", "d. c #D4E0D4E0D4E0", "f. c #D611D611D611", "g. c #D6CAD6CAD6CA", "h. c #D80AD80AD80A", "j. c #D8E0D8E0D8E0", "k. c #DBD3DBD3DBD3", "l. c #DCF3DCF3DCF3", "z. c #DDECDDECDDEC", "x. c #DEC4DEC4DEC4", "c. c #E02FE02FE02F", "v. c gray88", "b. c #E198E198E198", "n. c #E30DE30DE30D", "m. c #E3F4E3F4E3F4", "M. c #E509E509E509", "N. c #E5FDE5FDE5FD", "B. c #E6F2E6F2E6F2", "V. c #E7E4E7E4E7E4", "C. c #E8D6E8D6E8D6", "Z. c #E9EDE9EDE9ED", "A. c #EAD9EAD9EAD9", "S. c #EBCCEBCCEBCC", "D. c #ECB8ECB8ECB8", "F. c #EDD4EDD4EDD4", "G. c #EEF8EEF8EEF8", "H. c #F002F002F002", "J. c #F100F100F100", "K. c #F1E2F1E2F1E2", "L. c #F2EEF2EEF2EE", "P. c #F437F437F437", "I. c #F4F5F4F5F4F5", "U. c #F5D1F5D1F5D1", "Y. c #F6D9F6D9F6D9", "T. c #F7E6F7E6F7E6", "R. c #F8F1F8F1F8F1", "E. c #F9E1F9E1F9E1", "W. c #FAFCFAFCFAFC", "Q. c #FC21FC21FC21", "!. c #FD0DFD0DFD0D", "~. c None", /* pixels */ "~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.", "~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.", "~.~.~.~.~.~.~.~.~.~.~.~.O.O.O.O.o.o.X.X.~.~.~.~.~.~.~.~.~.~.~.~.", "~.~.~.~.~.~.~.~.~.~.3.6.6.5.5.5.4.4.4.3.3.<.~.~.~.~.~.~.~.~.~.~.", "~.~.~.~.~.~.~.~.&.2.p.x.M.C.Z.Z.Z.C.V.m.l.y.>.#.~.~.~.~.~.~.~.~.", "~.~.~.~.~.~.~.2.7.r.v.G.Y.W.!.!.!.Q.E.I.D.x.w.1.#.~.~.~.~.~.~.~.", "~.~.~.~.~.~.9.y.z.Z.L.T.R.T.U.I.P.I.I.I.I.J.Z.s.%.` ~.~.~.~.~.~.", "~.~.~.~.~.4.u.l.H.E.E.T.U.L.H.F.F.F.G.K.I.I.H.s.o.! G ~.~.~.~.~.", "~.~.~.~.*.8.x.G.Y.T.I.K.H.G.D.S.A.Z.Z.A.D.B.j.3.' Y m f ~.~.~.~.", "~.~.~.~.3.t.Z.R.T.P.H.F.D.S.A.Z.C.V.V.n.j.0.$.[ Q P M l ~.~.~.~.", "~.~.~.3.i.c.L.E.P.H.F.D.A.Z.C.V.V.V.V.h.,.] F M T E G M z ~.~.~.", "~.~.~.5.l.F.Y.T.J.D.S.A.Z.C.V.V.V.n.h.3.` Z 8 0 A R L A c ~.~.~.", "~.~.X.5.m.U.Y.P.F.A.Z.C.V.B.N.B.B.h.>.` N 9 , 5 k D L H v s ~.~.", "~.~.X.4.V.E.U.J.S.Z.C.V.B.N.N.b.g.2._ Z 0 - - 2 w z K L v a ~.~.", "~.~...2.C.Q.L.D.Z.V.B.N.M.N.N.f.:.) M 9 < - - ; > e G I c p ~.~.", "~.~...1.C.!.J.Z.V.B.N.M.M.c.f.1.( V 9 - - - = & # 7 D U c i ~.~.", "~.~. .1.C.Q.H.V.N.M.m.M.M.d.;.( n 8 , - = * * $ @ 6 S P x i ~.~.", "~.~. .1.V.W.H.V.M.m.m.x.d.<./ B 7 * = = * & % % - q S K z i ~.~.", "~.~.| 1.N.T.J.A.M.n.m.s.-./ b 6 > * * * & $ # - 6 d S F l i ~.~.", "~.~.} 1.b.K.K.F.N.z.s.,./ N 6 & & * & % $ @ O > p M S Z k u ~.~.", "~.~.~.<.j.Z.K.K.B.a.=.^ b 6 : & & % $ # @ O . 1 b J A m h ~.~.~.", "~.~.~.:.e.k.G.K.b.6./ m 5 % % & % # @ + o @ > e A L N l d ~.~.~.", "~.~.~.~.:.q.V.D.d.+.V 3 = $ $ $ # @ + X : g A H Z l a ~.~.~.~.", "~.~.~.~.@.,.i.u.>._ x 4 1 : & # # $ * - , e A U D n d r ~.~.~.~.", "~.~.~.~.~.O.+.{ ( W L M s 8 ; # % : 5 t x Z H D m l s ~.~.~.~.~.", "~.~.~.~.~.~.~ W K G T I B f w 7 8 w s b G K Z n l f ~.~.~.~.~.~.", "~.~.~.~.~.~.~.V x v Z G F S Z C V V C Z Z N k d a ~.~.~.~.~.~.~.", "~.~.~.~.~.~.~.~.p g v B A F H H G D A V n l p r ~.~.~.~.~.~.~.~.", "~.~.~.~.~.~.~.~.~.~.h k l l l k j j h h f s ~.~.~.~.~.~.~.~.~.~.", "~.~.~.~.~.~.~.~.~.~.~.~.i u y t t t t t ~.~.~.~.~.~.~.~.~.~.~.~.", "~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.", "~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~." }; qosmic-1.6.0/icons/silk/cross.xpm000066400000000000000000000036261304321135200167460ustar00rootroot00000000000000/* XPM */ static char *cross[] = { /* columns rows colors chars-per-pixel */ "32 32 33 1", " c #E51B228B248D", ". c #E6D428692A6D", "X c #E9592C102E14", "o c #E9312F6F318C", "O c #EBFC33303563", "+ c #EC8A36B9390E", "@ c #EDBA3B753D83", "# c #EEDE3E324072", "$ c #F10D3ED240D2", "% c #EF9F42D34534", "& c #F21743314561", "* c #F1984718497B", "= c #F33F4AB64D1D", "- c #F4C24EB4513A", "; c #F4FB52085488", ": c #FCAD53F15634", "> c #F69F56DC596C", ", c #FE9756E1595C", "< c #F7665A455CB1", "1 c #FC495B1A5D11", "2 c #F8155E5B6102", "3 c #FA4F5EC8617E", "4 c #F83E60306269", "5 c #FB1762B2654D", "6 c #FB3D666468FB", "7 c #FD2D6B0A6D83", "8 c #FD066E9A7152", "9 c #FE7272DD75A4", "0 c #FF04768F797E", "q c #FF437A4F7D41", "w c #FF2D7E41818D", "e c #FF74820A8510", "r c None", /* pixels */ "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrr42rrrrrr", "rrrrrr0000rrrrrrrrrrrr4565>rrrrr", "rrrrr0qqq09rrrrrrrrrr456772;rrrr", "rrrr0qqqqq99rrrrrrrr2568096<;rrr", "rrrr00qwew098rrrrrr24679084>-rrr", "rrrr90qweeq976rrrr24670974;=rrrr", "rrrr990qeew0876rr24679982;=&rrrr", "rrrrrr890qww0862<2679972;=rrrrrr", "rrrrrr7789qwq9766678972;=%rrrrrr", "rrrrrrrr6780qq0099996<;*rrrrrrrr", "rrrrrrrr5568qq0999082;*%rrrrrrrr", "rrrrrrrrrr2690755697;*rrrrrrrrrr", "rrrrrrrrrr<5995,,376-%rrrrrrrrrr", "rrrrrrrrrr<5993,:176;%rrrrrrrrrr", "rrrrrrrrr<<599511576;*%rrrrrrrrr", "rrrrrrrr<<3689877776<=&@rrrrrrrr", "rrrrrrr<<267776555651;*#+rrrrrrr", "rrrrrr><26775<;=*=;<51;&@Orrrrrr", "rrrrr<<25776>=%@@@&=11>=$+Orrrrr", "rrrr><25775>=%rrrr+#*;1,=$OXrrrr", "rrrr><3675>=%#rrrrOO@&:,-&OXrrrr", "rrrr><353>=%rrrrrrrro+&==&+Xrrrr", "rrrr;><<;=%@rrrrrrrr.XO@&$OXrrrr", "rrrrr;;-*%rrrrrrrrrrrr.XOOXrrrrr", "rrrrrr=*%@rrrrrrrrrrrr XXrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr" }; qosmic-1.6.0/icons/silk/cut.xpm000066400000000000000000000106721304321135200164070ustar00rootroot00000000000000/* XPM */ static char *cut[] = { /* columns rows colors chars-per-pixel */ "32 32 103 2", " c #2EAC5D699DC3", ". c #31BF64AB941D", "X c #366B6A559786", "o c #311C60CB9F47", "O c #38776E819CAC", "+ c #2EDA6AB5A084", "@ c #32A56501A41A", "# c #34F06A37A48C", "$ c #35FD6825A83A", "% c #3B5F6FCFAF3C", "& c #39687419A3DB", "* c #3DA17540ADE6", "= c #3D827AB7AB8D", "- c #3DC0751CB2A9", "; c #3F067ADAB2CF", ": c #40B97B34A63E", "> c #4B627DC9A2DF", ", c #427F7DD7AED1", "< c #420D7C44B5E4", "1 c #42BD7C53B838", "2 c #44C5804BA791", "3 c #41D98120AD17", "4 c #53A8867BAC68", "5 c #44778475B5B0", "6 c #46798952B674", "7 c #48FC88F1B66B", "8 c #462E85C3B8F5", "9 c #4A6B82A4BA74", "0 c #465C8C6EBCC0", "q c #4B4C8B8DBD0D", "w c #53C08A2BB245", "e c #4ABE9013BE7C", "r c #5FAA9265B7FF", "t c #538390DCBC72", "y c #605C9318B7E1", "u c #66C69720BB04", "i c #6AD09A2CBD40", "p c #71459E8FC014", "a c #4C0B8D69C220", "s c #4DB99272C3A7", "d c #523595A6C606", "f c #53B09A1FC817", "g c #519B950BCB01", "h c #53F09A8CCC3F", "j c #59DD9FBECE09", "k c #56379E66D31D", "l c #5B639ECAD395", "z c #67089889C076", "x c #645399D8C976", "c c #72949FB6C129", "v c #56ECA17DD29B", "b c #598DA327D600", "n c #5759A279D8F7", "m c #5AD0A620DB69", "M c #5EA3AB88DDC3", "N c #75A2A1CAC309", "B c #7A86A4DAC4C4", "V c #7FACA8A7C768", "C c #62B9A650D840", "Z c #672AA920DABE", "A c #69DCAB4BDD61", "S c #7D47AE0AD50D", "D c #5F0CAD5AE3E6", "F c #6075AC00E081", "G c #6A56AED5E2FE", "H c #6D95B104E382", "J c #70DCB476E5F8", "K c #79B2B65FE3A7", "L c #7A51BAB8E95E", "P c #80B3A752C55F", "I c #80B8A8DEC774", "U c #84E2AC6ACA93", "Y c #89D9AF81CCC4", "T c #8DA2B24ECE84", "R c #8143AF42D4D4", "E c #873DB5F0DC6A", "W c #8D85BA01DEB4", "Q c #93D0B65ED1B1", "! c #96B8B8C1D333", "~ c #9C56BC3FD59F", "^ c #9595BC37DDEC", "/ c #A19DBF51D7AA", "( c #8821BF95EAE3", ") c #A5D6C304DB34", "_ c #AB0DC66BDC97", "` c #AEECC8DFDEC1", "' c #B1F9CABEDF59", "] c #96E9C401E8E6", "[ c #A53AC4ACE1DB", "{ c #AC2FC791E1C8", "} c #A3FFCE09F032", "| c #B54FCD41E199", " . c #BD01D307E5C9", ".. c #B271D12DED58", "X. c #BD62D69EED5E", "o. c #C14DD636E827", "O. c #C340D731E981", "+. c #C70EDA4CEB47", "@. c #CB23DCB8ED78", "#. c #CA00DD17F101", "$. c #D05AE096EFB9", "%. c #D2AEE243F0E1", "&. c None", /* pixels */ "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.& &.&.&.&.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.w w &.&.&.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.c B &.&.&.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.y U T &.&.&.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.u T ! &.&.&.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.i ! ~ &.&.&.&.&.&.&.&.w w &.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.p ~ ) &.&.&.&.&.&.Y I i r &.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.N ) ` &.&.&.&.&.&.Q T N &.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.B ` | &.&.&.&.Y Q ! Q &.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.V | .&.&.&.&./ / ! Y &.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.I . .&.&.p ~ | ' Y &.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.I . .V u ! _ ' _ &.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.U o.O.! ! .o.Q &.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.U O.@._ ) . .&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.Y +.%. .) ! U &.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.Y +.$.| ! N &.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.# = = + & w Y o.O.Q c &.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&., 5 8 8 5 7 z Q O. .P 4 &.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.= 8 h k h h n Z R ) @.+.P > &.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.8 a j v h k D J W { #.X.S t 3 &.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.= d h q &.&.0 m J W [ ..} L F b d &.&.&.&.&.&.&.&.&.&.", "&.&.&.&.& 5 d f &.&.&.= m H E ^ ] ( G m b d & &.&.&.&.&.&.&.&.&.", "&.&.&.&.8 8 7 7 &.&.&.3 m H S S K A q < q q * # &.&.&.&.&.&.&.&.", "&.&.&.&.q q 7 6 &.&.5 s k l x x C k * . : , - - &.&.&.&.&.&.&.&.", "&.&.&.&.8 q d d 6 e m n a < < 9 d h &.&.&.O - - &.&.&.&.&.&.&.&.", "&.&.&.&.= 8 h h s s n k < @ $ - a f &.&.&.. * - &.&.&.&.&.&.&.&.", "&.&.&.&.&.= s h k h a < &.&.@ - s h &.&.&.X * - &.&.&.&.&.&.&.&.", "&.&.&.&.&.&.q f v g ; &.&.&.@ - h b &.&.2 , * % &.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&. - k M f d j d - @ &.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.- g k s a h g * &.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.- < 1 1 < - &.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&. @ - - $ o &.&.&.&.&.&.&.&.&.&." }; qosmic-1.6.0/icons/silk/delete.xpm000066400000000000000000000121411304321135200170470ustar00rootroot00000000000000/* XPM */ static char *delete[] = { /* columns rows colors chars-per-pixel */ "32 32 134 2", " c #B6CB4AAA2A0C", ". c #BA644A752BF8", "X c #BD294D9D3198", "o c #BD7F50DA356E", "O c #BFBB5255391C", "+ c #C5564F4D3919", "@ c #CBBF4E4F3C10", "# c #C55F54203C8C", "$ c #C93D517E3C4E", "% c #C66556234363", "& c #C8B3543E4093", "* c #C6B25B64442D", "= c #CB6F59E7467D", "- c #CCC75C024AAB", "; c #D29A57374718", ": c #D76F56BA4B51", "> c #D0F05D5B4DFF", ", c #D3105CDB50EA", "< c #E72255CD4B36", "1 c #E96156594A13", "2 c #E7C059194E34", "3 c #EA5E5A634DA9", "4 c #E7BE5C56539A", "5 c #EA0F5E2E53F7", "6 c #CA5161D34BF7", "7 c #CEC960B352AB", "8 c #D4FC62EE54DC", "9 c #DA8D61DA56CC", "0 c #D6A264C8597A", "q c #DA0C62255D0C", "w c #D60069B05961", "e c #DBAD6A6C5D7B", "r c #EE6C617A4F58", "t c #EDE36366554D", "y c #EF7C681E56F2", "u c #EB1464F95B1D", "i c #EEB869CD5C88", "p c #F070637E52AE", "a c #F0F26835555F", "s c #F22D72555ED0", "d c #DC9A6635638E", "f c #DDA96C5461DA", "g c #DF71679267E8", "h c #DEEF6FAA68FB", "j c #DDFB75DA6BEB", "k c #E07A668167C3", "l c #EA7A66AD6102", "z c #ED0C6CD4643F", "x c #E06167426894", "c c #E2F56E516E39", "v c #EB586DFD686D", "b c #E162724966BA", "n c #F00B712F61AE", "m c #E2AE74B36B1A", "M c #ED6974C86C5D", "N c #E3E078676DC6", "B c #EEDF7BCE6C4D", "V c #F1E174736314", "C c #F47079C6645F", "Z c #F36B76E86812", "A c #E3FF75487404", "S c #EC72764F70FC", "D c #E4267BBE73C9", "F c #ED877D9274DB", "G c #E3C77DD77A52", "H c #EE3A7FB678EC", "J c #F16E7EC172B3", "K c #F62A83E46D82", "L c #E2E0810F7744", "P c #EF0A80C277B8", "I c #E4FB83CB7CA6", "U c #ED9282947A77", "Y c #EDC08AAA7EBF", "T c #F51E85E9720E", "R c #F53A897973DC", "E c #F8F78BD77588", "W c #F14D85147C9D", "Q c #F3BD8EAB7A89", "! c #F9448FD57A4A", "~ c #F5C491D27E6C", "^ c #F8AE91097C52", "/ c #E7CE858383D6", "( c #ECD3867C817C", ") c #E58B8C4480A5", "_ c #ED518B2384C5", "` c #EBED8CA28AC8", "' c #F39C8EC88295", "] c #F2858D95892B", "[ c #ECDB914D86A5", "{ c #ECCB92C18C3F", "} c #F0109AA08DFC", "| c #F58293C4830A", " . c #FA0F962182E7", ".. c #F46A99CA87BA", "X. c #FA4E9A85872E", "o. c #F22C940E8B1E", "O. c #F4609AAC8C2E", "+. c #F9E09C6D8A50", "@. c #EDD795A29163", "#. c #EECA9A0C9461", "$. c #F4C69E9D9374", "%. c #F800A1678E5F", "&. c #F99BA0BA8E67", "*. c #EFE2A7E89FA7", "=. c #F546A1619197", "-. c #FA51A4409360", ";. c #F202A4469C12", ":. c #F5B7A8BF9BF8", ">. c #FA9AABC79D50", ",. c #F1E2A799A3CA", "<. c #F301AA60A53C", "1. c #FAB5AF7FA2CA", "2. c #F433AE74A94A", "3. c #F819B3D3A7B7", "4. c #FA7AB2FCA5B3", "5. c #F26AB30AAD7E", "6. c #FB81B5C5A941", "7. c #F870B89DAE1D", "8. c #FA8FBA15AE36", "9. c #F2F5B815B30E", "0. c #F65DBA5DB4DA", "q. c #F96BBE8CB68B", "w. c #FCA3C1A8B5DA", "e. c #F7E6C1F4BDDA", "r. c #FABDC540BCE0", "t. c #FB0FC97CBFA6", "y. c #F8BEC5F8C111", "u. c #FBA5CAB7C32E", "i. c #FAA5D7B1D4CA", "p. c #FB31D95FD6EC", "a. c #FB9ADB81D94D", "s. c #FD04E1FEDC3F", "d. c gray100", "f. c None", /* pixels */ "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.g d d q q q q q f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.A G I I I G G G D j f q f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.g A I @.,.5.9.9.5.5.*.{ D e 8 , f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.c A / #.2.q.r.u.t.r.q.7.:.[ D f 8 , f.f.f.f.f.f.f.", "f.f.f.f.f.f.k A { <.e.u.r.8.4.>.>.>.>.4.3.;.U f 8 - f.f.f.f.f.f.", "f.f.f.f.f.c A / <.e.u.t.7.>.=.+.X.+.-.>.6.4.O.D e - - f.f.f.f.f.", "f.f.f.f.x A ` ,.y.u.6.-.O...| ~ . . .X.X.&.:.} N 9 - % f.f.f.f.", "f.f.f.f.c I ;.q.u.w.-. .~ Q Q Q ! ^ ! E E ^ -.=.Y b > & f.f.f.f.", "f.f.f.c A { 0.r.6.-.X.~ Q R R T R R R T K K R ~ $._ 8 @ $ f.f.f.", "f.f.f.A ( $.q.w.-.~ R K B B C C C C C C C C V T $.o.f ; & f.f.f.", "f.f.g D @.<.3.>...T n y y t t t t t t t t y s K | | D e = O f.f.", "f.f.d G ;.4.>.+.~ R W W W W W W W W W W W J V V J W ( D 6 o f.f.", "f.f.d G ;.4.-.~ R ..r.a.p.p.p.p.p.p.p.a.a.0.F t i J o.I 6 X f.f.", "f.f.d D ;.1.X.E K =.s.d.d.d.d.d.d.d.d.d.d.i.P 1 t M o.) 6 X f.f.", "f.f.q A $.:. .K K %.s.d.d.d.d.d.d.d.d.d.d.i.P 1 5 M o.) 6 X f.f.", "f.f.q m { $.^ K C | e.p.p.i.i.i.i.i.i.p.a.0.M 3 u M _ I 6 . f.f.", "f.f.q h ( o.~ R C C J P P P P P P P P P U M u t M H U j * . f.f.", "f.f.0 f N U | ! C a 3 1 1 1 1 1 1 1 1 1 1 1 2 u W Y N w # . f.f.", "f.f.f.9 9 m O.O.Z p r 3 3 1 1 1 1 1 1 1 1 < < z ] _ w # X f.f.f.", "f.f.f., : e _ o.T V y t 3 3 3 3 3 2 2 < < 4 u S _ L - . . f.f.f.", "f.f.f.f., 0 m U o.' z 3 3 3 3 3 2 2 < < < u U _ D w # . f.f.f.f.", "f.f.f.f.7 8 9 b [ o.F z i u 5 2 2 4 5 u l S _ I w & X f.f.f.f.", "f.f.f.f.f.- > 8 b U o.o.W M u 5 4 u M P ] _ D 0 # X . f.f.f.f.f.", "f.f.f.f.f.f.= - , f I [ _ H M v v M F ( _ L 0 $ X f.f.f.f.f.f.", "f.f.f.f.f.f.f.= = - 8 e D U ( _ _ ( U m w = # X . f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.% # $ = e m G I I D j 8 # . f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.+ # * - 6 6 - * * # X . f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.o o o X . . . f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f." }; qosmic-1.6.0/icons/silk/disk.xpm000066400000000000000000000121731304321135200165440ustar00rootroot00000000000000/* XPM */ static char *disk[] = { /* columns rows colors chars-per-pixel */ "32 32 135 2", " c #9444C64775E1", ". c #2DD25DE9A6A7", "X c #2CF65ED8AA0E", "o c #2FBF5F75A808", "O c #2FB15F5DA90F", "+ c #2E186093AD0A", "@ c #3089609FA7FB", "# c #314E622CAC9D", "$ c #3F106B53ADA5", "% c #2EC86357B35B", "& c #2F1B660EBA11", "* c #31176548B4EE", "= c #35F16A04B6F6", "- c #31286724BA13", "; c #34446911BA27", ": c #38B46C39B95C", "> c #3FB571EABEAA", ", c #434B6E72AF7E", "< c #44C76FA6B0C4", "1 c #462A715BB318", "2 c #49217429B5A0", "3 c #4AED76AFB9D2", "4 c #4DCC7A26BDDA", "5 c #59497F92B9B1", "6 c #46CD77F3C2F1", "7 c #4EEC7D26C257", "8 c #51A27F0AC3AF", "9 c #5B1E8108BA25", "0 c #620F8650BEC7", "q c #68288AECBFAF", "w c #5681831AC742", "e c #5A8085DDC6F4", "r c #5FA988BBC7B9", "t c #57A383E5C89F", "y c #59C5861BC97E", "u c #5DB2890ECB5B", "i c #62B78746C0B1", "p c #63898990C507", "a c #6B058D7DC1B4", "s c #64458D32CBE2", "d c #691A8FC0CA9F", "f c #6F33915FC4A5", "g c #66FF904ECE6D", "h c #6B6892F7CEA8", "j c #729D94F0C746", "k c #7686977EC945", "l c #777198D5CAE6", "z c #7AD69B61CC80", "x c #6C9D95DBD4D2", "c c #6F1D98C3D7D6", "v c #6F3198B5D904", "b c #74509AF4D422", "n c #7C5F9F5ED45F", "m c #73D09D16DC79", "M c #7F5EA0C4D034", "N c #7EAFA0CBD3C2", "B c #774BA079DFA7", "V c #7D5EA2DCDC1A", "C c #776DA13BE184", "Z c #7A1BA338E2D7", "A c #A3B4CF8D8596", "S c #A538D09D8728", "D c #AE98D48397FC", "F c #B322D529A777", "G c #BB4EDC52A480", "H c #B469D5DCA918", "J c #C692E01FBE46", "K c #806C9DC4CA37", "L c #8292A344D409", "P c #8865A783D5FD", "I c #8BADAA06D769", "U c #80ECA59ADD47", "Y c #870EA97BDC93", "T c #8C2FAB7CDB5A", "R c #9152AF27DC57", "E c #98F2B1A4D79E", "W c #933EB155DEA6", "Q c #9C5DB6C0DE55", "! c #A215BAB4DF3B", "~ c #8132A7D1E29A", "^ c #867DAB70E3ED", "/ c #89F7AE1AE5F7", "( c #8E6EB1A7E705", ") c #8E40B2FDEA2A", "_ c #94FFB43AE4B2", "` c #9A24B70EE287", "' c #9CA4B96AE49E", "] c #929AB5AFEB67", "[ c #9861B782E9DB", "{ c #96F7B947EC9D", "} c #9A8CB9FDEB7D", "| c #A281BD23E4DC", " . c #A43FBFD5EA77", ".. c #B03EC33FDF4C", "X. c #A684C165E6FD", "o. c #AB47C3B2E774", "O. c #A702C1DEEB2D", "+. c #AC20C58DEC41", "@. c #B032C6A4EA06", "#. c #B371CA8BED1E", "$. c #BB04CE85EC42", "%. c #BE20D12CECE3", "&. c #A485C2C5F09B", "*. c #ACE7C8C6F22A", "=. c #B694CE22F0D1", "-. c #B918D016F2B2", ";. c #BC04D295F3C1", ":. c #DF7EEF27D7D4", ">. c #DFFEEF68D88D", ",. c #E26AF03DDD6B", "<. c #E180F0C3D989", "1. c #C4CFD55EED85", "2. c #C97CD760EE4F", "3. c #CB67DA1DEF49", "4. c #C269D5BAF269", "5. c #C672D8EFF483", "6. c #CE45DE08F469", "7. c #D239DF2FF1DD", "8. c #D56AE1E5F52F", "9. c #DB86E5FAF5E3", "0. c #DE9FE944F770", "q. c #D7B6E5ADF93E", "w. c #DC1CE71DFAA8", "e. c #DE52E94FF93B", "r. c #E84AF3C1E2DF", "t. c #E93FF4CDE338", "y. c #EA6AF3E5EAC9", "u. c #E45AED8AFAC6", "i. c #EDC4F427FC81", "p. c #F833FCA0F718", "a. c #F92BFDA8F7A6", "s. c #F274F712FD6D", "d. c #F682F9F7FE47", "f. c #FB39FD95FF89", "g. c None", /* pixels */ "g.g.& & & - - - - - - - - - - - - - - ; ; ; ; ; ; ; : : g.g.g.g.", "g.6 s x s s s s s s s s s s s s s s s s d d s s s s s r 7 g.g.g.", "& s | $.#.$.1.3.2.2.2.2.1.1.$.$.$.1.1.2.2.1.1.$.$.@.X.R h 8 g.g.", "& g $.8.5.6.i.f.f.s.0.0.i.s.s.i.s.d.f.f.f.d.s.i.u.9.5.o.Y h 7 = ", "- s #.5.&.*.u.f.f.9.! ! 8.s.i.i.s.d.f.f.d.s.i.u.u.q.5.$.o.T e : ", "- s @.;.] { q.f.f.3.L N 2.i.i.i.s.d.d.d.s.i.u.u.e.6.#.#.%.| e : ", "- u +.;.] { q.d.d.3.L N 2.i.i.i.d.d.d.d.i.u.u.e.e.5.} [ $.| e ; ", "- u o.;.] { 8.d.d.3.L L 2.i.i.s.d.d.d.s.i.u.e.e.e.4.( / +.` w * ", "- u o.;.] { 6.i.i.2.L L 1.i.s.d.d.d.s.i.u.e.e.e.e.4.( ^ .W 8 * ", "- y X.;.] { 6.i.i.6.Q Q 7.s.d.d.f.d.s.i.u.e.e.e.e.4.( ~ ' T 8 * ", "- y X.;.) { 6.i.i.0.6.7.u.s.d.f.f.d.i.u.u.e.e.e.e.4.( ~ ' I 7 * ", "- y X.;.] ( #.1.1.1.2.3.3.7.8.8.7.6.2.1.1.%.%.%.%.o.^ U ` P 4 * ", "- y .;.] Z V L L L P P I I I I I P L L L L L L L N m U ` P 4 * ", "- y | -.] m x s g g g h h h h h h h d s s s s s s g c U ` L 4 * ", "- y | =.] C m m m m m m m m m m m m m m m b c c c c m V W L 4 * ", "- y | =.( Z Z Z Z Z Z Z Z Z Z Z Z Z C B B m m m m m m V W L 3 # ", "- t | =.( Z Z Z Z Z Z Z Z Z Z Z Z C B B m m m m m m m V R n 3 # ", "- t | #.( Z C Z Z Z Z Z Z Z C C m m m m m m m m m m m V T z 3 # ", "- t ' #.( C C C C C C C C C C m m m m m m m m v v c c n I z 2 # ", "- t ' #./ ~ ] } } } } } } } } [ [ [ [ [ [ _ _ _ _ Y m b P l 2 # ", "- w ' +./ ] 4.e.e.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.9.%.Y b L k 2 + ", "- w ` +./ [ w.p.r.:.:.>.>.>.>.>.>.>.>.>.>.:.:.t.p.9.T b L j 1 + ", "; t ` +./ [ w.r.G A A A A A A A A A A A A A A G r.q.T h M j 1 X ", "; t ` +.^ [ w.,.D D ,.8.T h z f 1 O ", "; t ` +.^ [ w.y.J F F H H H H H H H H H H F F J y.8.T h z f 1 o ", "; w ` O.^ [ q.y.J F F H H H H H H H H H H F F J y.8.T h z a < . ", "; w _ O.^ [ w.,.D D ,.8.I d l a , . ", "; w _ +._ .u.t.G A A S S S S S S S S S S A A G t.9.T f l a , . ", "- w _ +.O.$.u.a.t.,.<.<.<.<.<.<.<.<.<.<.<.<.<.t.a.9.E k z a , . ", "- 7 U _ W ' $.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2...K q q 9 $ . ", "; > 8 t w w r s s s s p p p p p p p i i i i i 0 0 5 2 , , $ # @ ", "; ; - * * * % % % % % % % + + + + X X X X . . . . . . . . . @ @ " }; qosmic-1.6.0/icons/silk/disk_multiple.xpm000066400000000000000000000123061304321135200204550ustar00rootroot00000000000000/* XPM */ static char *disk_multiple[] = { /* columns rows colors chars-per-pixel */ "32 32 138 2", " c #9656CC925D67", ". c #9693CCC460E4", "X c #9E15CCC37A09", "o c #A16BD1D66E6A", "O c #A20BD24C70BB", "+ c #A9FAD65B7AEB", "@ c #BADAE66C7C7D", "# c #2D0C5EA3A661", "$ c #317C6170A71A", "% c #38CA66A1AA30", "& c #3BB4695EAA53", "* c #3B6E6ED7BCFD", "= c #472571FDB2E6", "- c #4A9E7471B56B", "; c #4CFE77F9B83A", ": c #51B17A13B833", "> c #52C87C62BB13", ", c #588E7F83BC2A", "< c #4C787BF9C228", "1 c #51AA7F3FC279", "2 c #5A988265BF01", "3 c #632B8592BE7E", "4 c #53BE814DC41D", "5 c #5B4F856BC624", "6 c #5E178857C7B8", "7 c #5F3F8896C885", "8 c #640A8806C72A", "9 c #61AD89A5C62D", "0 c #605F86BECF08", "q c #63B38CFDCBF3", "w c #68B28E5CCE37", "e c #6758904CCCF0", "r c #6B64931DCE36", "t c #712F97A5CFCE", "y c #75429BECCDE1", "u c #6B5787F5D780", "i c #66AA8C48D471", "p c #6A708BE8D158", "a c #6AFF87C8DB96", "s c #69808943DD8E", "d c #6D4C9507D19A", "f c #70AD973CD1A8", "g c #74329AC3D4F2", "h c #79A09E24D429", "j c #75989D65D9F0", "k c #784B9FD7DCA9", "l c #7D90A187D682", "z c #7BFCA2B6DCD4", "x c #6B9C8B9EE1AA", "c c #7C1FA3CBE085", "v c #A6FAD10A8701", "b c #AC94D3C58F2E", "n c #AFE4D6799252", "m c #B0A6D7519331", "M c #B4A6D7EBA395", "N c #B501D8A0A2C3", "B c #BC44DAEAAD8E", "V c #BEBDDC92B2EB", "C c #C4B5EAD68B46", "Z c #C9A4EC1D8EF2", "A c #CAA3ED4493FB", "S c #81E19CBBCC49", "D c #86C0A5AACD32", "F c #8E39A726D006", "G c #8633A511D6B6", "H c #8B94A777D410", "J c #8700AC9AD580", "K c #8C2BAB67D64A", "L c #82AEA5FDDAB4", "P c #89CBA7B5D8D2", "I c #8603A9DBDE8B", "U c #8D11AC59DAEC", "Y c #912CAEF1DC26", "T c #8D41B149D80D", "R c #8E55B175D8BF", "E c #95E1B288DD42", "W c #99D0B51ADD5A", "Q c #9DD6B8E4DF8C", "! c #84ECA727E31F", "~ c #85AFA9CCE182", "^ c #8C54AD8CE3F7", "/ c #9081AEB5E69B", "( c #8EAAB1E8E64B", ") c #93CDB448E554", "_ c #9A23B6DAE392", "` c #9CC7BA84E674", "' c #95A2B7F4E9C6", "] c #9A6ABAEAEA00", "[ c #A3D5BD88E4DD", "{ c #A9BCBF9AE181", "} c #A123BFE8EABD", "| c #A5F9C0CDE7A9", " . c #B009C511E3AC", ".. c #A47DC1ACEBC6", "X. c #AD3AC6E8EE83", "o. c #B2D4C752E4A7", "O. c #B6EACA1FE5DD", "+. c #BC16CE5CE7F2", "@. c #B4D5CD58EF97", "#. c #BAF5D0A0EC4A", "$. c #AF9FC728F148", "%. c #B001C953F166", "&. c #B9AFCDF1F1AA", "*. c #BC4FD443F59D", "=. c #C47AD11EDB54", "-. c #CEECDAC5DF3D", ";. c #DC70EF90C3E0", ":. c #D248E4FFCBBD", ">. c #D3E9E8A1CDC4", ",. c #DB33EE06CDCA", "<. c #D5E6E925D12F", "1. c #D8ECEBF9D18B", "2. c #EE8BFA7EC678", "3. c #EFCAFB95C8E4", "4. c #C48ED5C9EE24", "5. c #CE12DCD7EEE6", "6. c #D16DDDEBF01E", "7. c #C492DAE8F820", "8. c #CE64DD2FF27A", "9. c #D282DEDBF0FF", "0. c #D023E0AAEDBB", "q. c #D8E8E557E68E", "w. c #D2A7E215EDA6", "e. c #D618E249F3C0", "r. c #DCA8E66AF466", "t. c #DFD6E8F5F5DB", "y. c #DE14EA2DF9F0", "u. c #E375EADFE48C", "i. c #E184EC4EEDDC", "p. c #E7B5F375E80F", "a. c #ECFBF535E7E2", "s. c #E080E859F467", "d. c #E2C4EABBF682", "f. c #E9DFEF69F78C", "g. c #EC25F357FD2D", "h. c #F77AF9B1FCA5", "j. c #FE88FF66FFF5", "k. c None", /* pixels */ "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.g h g r f l h r q q w r t f r q k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.d g L U E E Y U U U U Y E W W U h r k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.w g ) @.e.6.O.o.5.r.r.r.t.d.d.8.| I r k.k.k.k.k.k.k.k.k.k.k.", "k.k.9 g ] *.e.9.o. .5.t.d.s.r.r.r.5.| I d q k.k.k.k.k.k.k.k.k.k.", "k.k.5 d ) ..` E P P E Q [ [ E Y Y U L h d e q 5 k.k.k.k.k.k.k.k.", "k.k.5 d ( ' L l L U W Q W W E E E E E E E P h r k.k.k.k.k.k.k.k.", "k.k.5 d ) ' l L ` #.e.e.+.+.9.s.s.r.r.e.e.4.[ I r 5 k.k.k.k.k.k.", "k.k.6 d ) ) h l } *.e.9.O.O.6.t.d.t.e.6.5.4.[ I d q k.k.k.k.k.k.", "k.k.9 f ^ ^ d g ) .._ Y U K U E Q W U G G G l h f e q 5 k.k.k.k.", "k.k.q f ^ ~ r d ( ) j d l U U U U U P P P U Y E E U h r 5 k.k.k.", "k.k.9 d ^ I d d ( ) g g ) @.8.5.o.o.5.r.r.r.r.t.t.8.| I r 5 k.k.", "k.k.6 d ~ I d g ) ) f g ] 7.g.f.O.O.f.j.j.j.j.j.j.g.@.^ d 7 k.k.", "k.k.4 e ~ ^ g h ) ) d d ( *.g.s.W W r.j.j.j.j.j.j.y.X.I r 9 k.k.", "k.k.1 q ~ ^ h l ) U r d ^ *.g.d.{ { d.j.j.j.j.j.h.y...z w 5 k.k.", "k.k.< q ~ ^ h h T J e d ( *.g.h.d.d.h.j.j.j.j.j.j.d.[ j 9 4 k.k.", "k.k.1 w / ) h y K J r d ^ %.8.t.d.d.t.t.r.r.r.r.t.4._ g 6 1 k.k.", "k.k.4 d ` [ h y R U r d ^ ] ` ` ` ` ` _ _ _ _ _ _ E L g 9 2 k.k.", "k.k.< q Y Y r r U U f f ^ ) ! z z z z k j j j j j j j f 9 2 k.k.", "k.k.k.< q e 5 w ~ ^ d d I ( ! c z z z k k j j j j j g r 6 , k.k.", "k.k.k.k.< 4 4 i ^ / d r I ' ] ` ` ` _ _ _ ) ) ) ) U l r 2 : k.k.", "k.k.k.k.k.k.4 d ` ` r q ~ ..4.w.w.w.5.5.5.5.5.0.w.#.U e > = k.k.", "k.k.k.k.k.k.< q Y U q q ! X.r.p.1.:.>.<.<.>.:.1.a.w.W w ; & k.k.", "k.k.k.k.k.k.* < q e 5 q ! $.r.1.n X v b b v X m ,.w._ w - & k.k.", "k.k.k.k.k.k.k.* < 4 1 q ^ &.i.;.+ o + + O . + ;.q._ p - % k.k.", "k.k.k.k.k.k.k.k.k.k.4 d ` 5.a.2.Z @ C A A C @ A 3.u.[ d ; & k.k.", "k.k.k.k.k.k.k.k.k.k.< q U o.-.:.B N B V V B M B :.=.K 8 = % k.k.", "k.k.k.k.k.k.k.k.k.k.* < q h G H D D D D D D D D F S 3 = % $ k.k.", "k.k.k.k.k.k.k.k.k.k.k.* < 5 0 i x x x s s a a u p 5 - & $ # k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k." }; qosmic-1.6.0/icons/silk/film.xpm000066400000000000000000000170051304321135200165400ustar00rootroot00000000000000/* XPM */ static char *film[] = { /* columns rows colors chars-per-pixel */ "32 32 246 2", " c #04E804E904E8", ". c #0BE20B630BE3", "X c #11010DC80E38", "o c #12B8101A0F2C", "O c #0E9F0D141012", "+ c #13F513701360", "@ c #169E16BF18EB", "# c #1ACC1AF61BE9", "$ c #1F9F1FC32103", "% c #23C323BC23F5", "& c #2AD72F112673", "* c #28E427842A0F", "= c #2BCC2B732BEE", "- c #30E32E712EC5", "; c #2E9F3C8A2183", ": c #2F952DE53098", "> c #33AC32D13340", ", c #38BA378937B1", "< c #39C93E9135B3", "1 c #3A6C370C3A78", "2 c #3B993B533BBE", "3 c #40783D1E3F5E", "4 c #2C6242AE2866", "5 c #23F63FFF3C96", "6 c #3F635F873D81", "7 c #3EA161113F6F", "8 c #40D6446A3E0D", "9 c #45CD55E13813", "0 c #47D353B33EFE", "q c #43285E553D73", "w c #48EB5CE83EC5", "e c #5EFB57C23682", "r c #54795230392D", "t c #3CD93DA04124", "y c #43133F15402C", "u c #248140494A6A", "i c #3FA4401041F3", "p c #2FB244AC4EB8", "a c #3D0C5ACA5737", "s c #3DBD6274443B", "d c #3CF763C04C37", "f c #3CB95916636E", "g c #439343234399", "h c #47CD45354496", "j c #4754476B47D5", "k c #40494AD2486E", "l c #4BA94B874B9E", "z c #4FE34DEF4CA9", "x c #51DB5006414B", "c c #5E855A744094", "v c #4F7A4F99501D", "b c #51CC4F365306", "n c #54C153B45498", "m c #571654AD5919", "M c #594D565E59AC", "N c #5CEB5BF25CA3", "B c #477A609743B0", "V c #52F760484527", "C c #56B565384A53", "Z c #41D366435B4E", "A c #5BD667195315", "S c #56EE7898565C", "D c #5BEE78C6561A", "F c #557F7A1C5C0D", "G c #74936CF64CDF", "H c #66BF633B53D8", "J c #6C1269E7516A", "K c #672A648F599C", "L c #6E086AB95BF7", "P c #714C6B68526C", "I c #660976EC5656", "U c #664E78A35558", "Y c #681A7A1955A1", "T c #6727761E5BE9", "R c #691C76C15CE2", "E c #63F47AAE5945", "W c #6A5B790A5F14", "Q c #47C05CDC66F8", "! c #61585DE36032", "~ c #583662BB6064", "^ c #54817AD563AE", "/ c #4C7A69C0703C", "( c #57A3693C74AA", ") c #5FB56C9D7542", "_ c #5CC06E017B57", "` c #595F7B17701A", "' c #6453637F63A3", "] c #65F1695E625A", "[ c #68DA67EB675A", "{ c #610065BC69D2", "} c #659C69B56C74", "| c #6C416C366C2F", " . c #6D1370BD6619", ".. c #6D6B72486CB7", "X. c #761E745E63B1", "o. c #78E175076100", "O. c #7A39776368C5", "+. c #60DC6E327307", "@. c #60D26FBF79B3", "#. c #66B474557C97", "$. c #62D27A767E92", "%. c #708370837083", "&. c #3FA8A79652B5", "*. c #38E5A5E364FD", "=. c #3993BFBE665A", "-. c #694D9490409C", ";. c #77289C0A5BB7", ":. c #471DA91F49A2", ">. c #4EADAA7148FC", ",. c #4DFBB02B5079", "<. c #468CAE6D59D0", "1. c #55A8B2014FE0", "2. c #6060AFA34F3E", "3. c #721CA0C84A49", "4. c #6494A84B5847", "5. c #683BB93E5763", "6. c #7994B6205AA3", "7. c #3FD9AC7A6C18", "8. c #6F53B65D6463", "9. c #3F61C40148AF", "0. c #3DA6C4025CC6", "q. c #4683C76D4B64", "w. c #599FCDD44E87", "e. c #7C92D9714F6F", "r. c #64D4CFE353A9", "t. c #66C1CDC05F1A", "y. c #621ED0AD5074", "u. c #7561D6535192", "i. c #7D0EDA3950C3", "p. c #74FFD8715A77", "a. c #4591C18262C7", "s. c #64A3CA8B6FAF", "d. c #6F3FD20A60B9", "f. c #697ECCEA76A4", "g. c #867CBE8F545A", "h. c #8662BE3259CF", "j. c #A6979BC26B56", "k. c #A4A99F9F7520", "l. c #82EFA9C4666E", "z. c #877CBCCE6082", "x. c #8986BF27620E", "c. c #8D4CBE2A6BFC", "v. c #9130BF436F96", "b. c #B70AB1BD6CB5", "n. c #BAD5B4F273E5", "m. c #CFCEBC836032", "M. c #CB81B9D76CFE", "N. c #D403BEA26180", "B. c #C35FB70075E2", "V. c #CA27BF53770E", "C. c #8734C20D53A8", "Z. c #8361DC725D23", "A. c #8384C3406566", "S. c #8DC5C0406B0F", "D. c #908DC1B06C66", "F. c #86FDDB0E6348", "G. c #8AA2DDFE64C9", "H. c #8496DAD46CCA", "J. c #90D1DF97644F", "K. c #91B0C11170D2", "L. c #83FEDCCD71D5", "P. c #9559E2DF6AE3", "I. c #9B00E2F66EDE", "U. c #9B9AE4F6727F", "Y. c #EFC0DF1D7B28", "T. c #F0E5E40C7FC2", "R. c #5C096F2D8028", "E. c #3F2B8F13ABD6", "W. c #442C96748BDA", "Q. c #4258A82F8AFA", "!. c #48C9AB218C77", "~. c #432DBD128B17", "^. c #4C6BA08595D4", "/. c #465A96D5B3CE", "(. c #599695CDB2F2", "). c #67A29286AC9A", "_. c #63D896CAB7FF", "`. c #609D9CF5BA2B", "'. c #5AD1AC98BF6F", "]. c #5588BAC6BEB4", "[. c #5FF7A8DBB638", "{. c #75E8A16AB187", "}. c #3F6BC3768269", "|. c #58A2C20D9888", " X c #6053C6498728", ".X c #6400C71B917E", "XX c #4C89C336ADEF", "oX c #5070C3ABA70C", "OX c #5C99C27DA382", "+X c #56FAC135ADD9", "@X c #4E11C6C0B3FC", "#X c #6244C128BF4B", "$X c #64A99E21C666", "%X c #69B89FFFC553", "&X c #5986BE12C8BA", "*X c #4CFEB46CD65D", "=X c #50E9B74AD148", "-X c #6B48A251C68A", ";X c #7880AC04C410", ":X c #6B74AA5AD792", ">X c #65BDA836D8E1", ",X c #6DE4AC39D872", " SXSXSXSX", "SXSXSXSX' ' ' ! N F <.0.=.~.&X5X7X7X9XZXVXkX~ , , > > > SXSXSXSX", "SXSXSXSX' ' ' N N S ,.q.9.a.|.#X > > > SXSXSXSX", "SXSXSXSX' ' N N M S 1.w.r.r.t.s. XOX].=X*X/.f > > > = = SXSXSXSX", "SXSXSXSXN N N M n D 5.p.Z.Z.i.u.d.f..XOX+X^.a > - = = = SXSXSXSX", "SXSXSXSXN N N n b E A.P.U.U.P.P.G.G.H.L.L.8.B = = = * * SXSXSXSX", "SXSXSXSXM M m n m T l.D.K.K.K.S.x.h.h.C.C.3.9 = * * % % SXSXSXSX", "SXSXSXSXM n n m ' ] T R R R R T I I I I U C < * * % % % SXSXSXSX", "SXSXSXSXn n n n N { _ R.R._ _ _ R.@...X.O.K 2 % % % % # SXSXSXSX", "SXSXSXSXn n l l z ( _.:X,X,X:X>X>X;XhXjXvXk.x % $ % # # SXSXSXSX", "SXSXSXSXn l l h g / '.tXaXdXdXiXiXAXcXNXBXV.c # # # # # SXSXSXSX", "SXSXSXSXl l j g y Z Q.@XeXpXsXiXiXuXxXmXT.m.e # @ # @ @ SXSXSXSX", "SXSXSXSXl j j g 3 d *.}.oX0XrXiX8X9XCXzXMXb.r @ @ @ + + SXSXSXSX", "SXSXSXSXj h g 3 2 s &.0.=.~.&X5X7X7X9XZXVXgXk + + + + + SXSXSXSX", "SXSXSXSXg g g 2 1 7 :.q.9.a.|.#X.w.y.r.t.s. XOX].=X*XE.u + o + . . SXSXSXSX", "SXSXSXSX2 2 2 > > q 2.p.Z.Z.e.u.d.f..XOX+XW.5 X . . . . SXSXSXSX", "SXSXSXSX2 2 , > : w 6.P.I.I.P.J.G.F.H.H.H.4.4 . . . . . SXSXSXSX", "SXSXSXSX, , , > : 0 ;.D.v.v.c.c.z.h.g.g.C.-.; O . . . SXSXSXSX", "SXSXSXSX, > > > > 8 A W W W W R T I I Y Y V & + . SXSXSXSX", "SXSXSXSX> > = = > , l m m n n n n n m m m g % + . SXSXSXSX", "SXSXSXSX> = = * * = SXSXSXSXSXSXSXSXSXSXSXSX+ . SXSXSXSX", "SXSXSXSX= = = * % % SXSXSXSXSXSXSXSXSXSXSXSX SXSXSXSX" }; qosmic-1.6.0/icons/silk/folder.xpm000066400000000000000000000116131304321135200170630ustar00rootroot00000000000000/* XPM */ static char *folder[] = { /* columns rows colors chars-per-pixel */ "32 32 124 2", " c #D7768402264F", ". c #D7FA85C72A28", "X c #D87385D82A8E", "o c #D9068C892E4C", "O c #D9BB92D72F85", "+ c #D98F900F2FFD", "@ c #D9CA9529304E", "# c #D9BC9CC03039", "$ c #DBD591813BF6", "% c #DEE699FC3DB3", "& c #D9A9ABDF2EFD", "* c #D9B2B05A2F8D", "= c #D9BAA4A43031", "- c #D9B6A8BE2FE0", "; c #D9DAB30F3217", ": c #DC2BB7F53ED7", "> c #F11ACBF224CE", ", c #F1ACCD8C2ACA", "< c #F222CEF83334", "1 c #F1EDCE7139C5", "2 c #F327D1C83BA1", "3 c #DF469B73435C", "4 c #DFBB9D734B72", "5 c #E0969F845104", "6 c #DDF2BBF94992", "7 c #DFD8BE7E519B", "8 c #E08CA1BD55A1", "9 c #E1F2A53F5A7F", "0 c #E2D7AB995CAC", "q c #E32AB40F5CF8", "w c #E140BFAF59A9", "e c #EBB2BE975D06", "r c #E37AAD646317", "t c #E373B38964B4", "y c #E37ABCDB6462", "u c #EBB9C033618E", "i c #F277D026402C", "p c #F3B6D3A74516", "a c #F44CD56F4CDE", "s c #E1E3C1F65B85", "d c #F21ECFFC58C3", "f c #F494D6E1538E", "g c #F55DD8835751", "h c #F425D6145B86", "j c #F57DD9895BFC", "k c #E355C43965C3", "l c #EC1DC0EF6547", "z c #E3FAC582692D", "x c #ECBFC26C6BC2", "c c #F29AD2CF623B", "v c #F5EADAFB63B4", "b c #F340D4BB6A6A", "n c #F66DDCC86BBB", "m c #ECF7C50373DC", "M c #E572CA8671C5", "N c #ED3CC5F77B9F", "B c #F02ACFF67BC4", "V c #EFB2D0B57C32", "C c #F3E3D65272C8", "Z c #F690DDEF7430", "A c #F27CD49879AE", "S c #F627DDA87C66", "D c #F76AE0DC7BD9", "F c #ED65C67F8545", "G c #EB5FCE3780F8", "H c #EBC1D2FF8681", "J c #EBD4D4CC8C5B", "K c #F1E6D3FC81A4", "L c #F52CDB3284BC", "P c #F185D56B8C4F", "I c #F45DDB7D8DD0", "U c #F014CEDA93DE", "Y c #EE4CCABB9C3B", "T c #EFC9D17A95DB", "R c #EC6FD895954B", "E c #ED06D9479895", "W c #F40DDBC593E8", "Q c #F1DED7059EB4", "! c #F396DCF49BFB", "~ c #F7CEE27783F4", "^ c #F7B6E29289FE", "/ c #F890E4CD8C79", "( c #F820E3B99250", ") c #F8F6E68F93F0", "_ c #F68AE07B9FC1", "` c #F930E7659AB2", "' c #F994E8F99C91", "] c #EFD2DE8AA645", "[ c #F15CD708A34D", "{ c #F369DB70A4B5", "} c #F426DE0DAB42", "| c #F34FD957B148", " . c #F436DCB4BA63", ".. c #F698E198A4C1", "X. c #FA06EA76A393", "o. c #F405E29AAC66", "O. c #F915E7F6ABD3", "+. c #FA7EEBD5ABA0", "@. c #F4BBE12DB0DD", "#. c #F8C6E7D1B0D4", "$. c #FAB4ED1CB52C", "%. c #F52BE566BC74", "&. c #FA56EC8FB9FA", "*. c #FC20F0ABBCD5", "=. c #F58EE50DC494", "-. c #F5D5E8E5C6CD", ";. c #F8FDEA39C10B", ":. c #F64DE780C9CC", ">. c #F676EAE7CBF7", ",. c #F8B0ED4ECA0C", "<. c #FCAFF27CC3E9", "1. c #FCE3F43BCD27", "2. c #F81EF011D501", "3. c #F9EDEFC2D184", "4. c #FAE2EF74D8C4", "5. c #FB24F2BCD459", "6. c #FB45F3C6DBAB", "7. c #FCB7F67BE432", "8. c #FE7FF9C4E52E", "9. c #FD56F7C7EA8E", "0. c #FEB1FACDEC24", "q. c #FF3AFCDCF3E0", "w. c #FFB7FF29FCB6", "e. c None", /* pixels */ "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.: 7 s s s s s s s s 7 : ; e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.; 6 M H H H H H H H H G M z e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.; s o.6.6.6.6.6.6.6.6.2.>.o.G k k k k k k z M M M z e.e.e.e.", "e.e.* k >.w.0.8.8.9.9.0.0.q.q.6.] J J J J J J J R E E H w e.e.e.", "e.e.& k >.0.<.+.O.#.$.&.;.3.9.0.6.5.5.5.5.5.3.5.5.6.6.%.k & e.e.", "e.e.& k >.7.+.^ I W W W W { ;.5.6.6.6.6.5.5.5.5.5.6.q.>.z & e.e.", "e.e.- y -.6.O.I W I I K A V H J ! ! ! ! W W W W I o.6.-.k & e.e.", "e.e.- y =.6.o.W I P K B V H H J ! ! ! ! W W W W I o.6.=.k & e.e.", "e.e.& y %.6.} P J G m G [ %.,.5.6.6.6.5.5.5.5.5.5.6.q.>.k & e.e.", "e.e.- y =.7.%.} { Q T [ -.6.0.0.8.6.6.6.6.5.5.5.1.6.q.-.y - e.e.", "e.e.= y :.w.9.6.6.6.4.6.9.0.8.5.&.+.X.' ` ) / ^ ~ ' 1.%.y = e.e.", "e.e.= y >.w.q.0.0.0.0.8.8.6.1.$.` ^ ~ D Z n v j f Z &.@.q = e.e.", "e.e.# y :.q.8.5.1.<.<.*.$.+.X.) ^ D Z n v j g a p n $.} q # e.e.", "e.e.# t :.0.5.*.$.+.+.X.` ( ^ ~ S Z n v j f a p 2 v +.} q # e.e.", "e.e.# t =.0.1.$.+.X.' ) / ~ D Z n v v g f a p 2 < j +.} q @ e.e.", "e.e.@ t =.8.<.+.X.` ) / ~ D Z n v j g a p p 2 < , f +.} 0 @ e.e.", "e.e.O r =.8.*.X.` ) ^ ~ D Z n v j f a p 2 2 < , > f X.} 0 @ e.e.", "e.e.o r =.6.&.' ` ( ^ ~ S Z Z n v h g f a p i 1 < j +.} 0 + e.e.", "e.e.o 0 .6.&..._ ! W W I L L S A C C b b c c h d C #.{ 9 o e.e.", "e.e.o 8 Y | U F F F N N N m m m x x x l l u e e e x U F 4 o e.e.", "e.e.e.$ 9 9 5 4 4 4 3 3 3 3 3 3 3 3 3 3 % % % % % 3 4 4 $ e.e.e.", "e.e.e.e.e. . . . . . . . . . . X X X X X X X X . . . X e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e." }; qosmic-1.6.0/icons/silk/folder_explore.xpm000066400000000000000000000155451304321135200206310ustar00rootroot00000000000000/* XPM */ static char *folder_explore[] = { /* columns rows colors chars-per-pixel */ "32 32 215 2", " c #B36D7EEE4352", ". c #D7768402264F", "X c #D8DC84F52717", "o c #D7EE85862978", "O c #D88885542823", "+ c #D9038BD72DCA", "@ c #D9BB92D72F85", "# c #D9BE95F33002", "$ c #D9B79CCB3037", "% c #DC26928E3E2A", "& c #D9AFABDA2EE6", "* c #D9B2B05A2F8D", "= c #D999A6023102", "- c #D9B6A8BE2FE0", "; c #D776A6A83B86", ": c #D99AB34631BC", "> c #DC2BB7F53ED7", ", c #B6E984344990", "< c #B986867C4C67", "1 c #BA6E88994E68", "2 c #BB978B755206", "3 c #BF6E8F3A58D4", "4 c #B4F993C27258", "5 c #CED78FB34904", "6 c #DF849BFC4599", "7 c #DF999C864972", "8 c #C2F68E0B544F", "9 c #C2F694AD5F74", "0 c #E0689B1940FA", "q c #E0969F845104", "w c #DDF2BBF94992", "e c #CD26A9205A19", "r c #D438A1175E55", "t c #DFD8BE7E519B", "y c #E08CA1BD55A1", "u c #E1DEA4085AFB", "i c #E287A8C95F64", "p c #E140BFAF59A9", "a c #CA6A9A3C658C", "s c #C71B9BA96DAC", "d c #C6E49DA77128", "f c #DF2EBC686753", "g c #D48AB4C7699B", "h c #CF7FA57076E3", "j c #D159A57F7638", "k c #D2A2A7F679F7", "l c #D41FAA877D1F", "z c #C7C9B3127E6B", "x c #E37AAD646317", "c c #E373B38964B4", "v c #E375BD0164D9", "b c #E1E3C1F65B85", "n c #E360C43D65B9", "m c #E3FAC582692D", "M c #F877DD6A6761", "N c #F802DC916CFE", "B c #EDC3C57D73C8", "V c #E572CA8671C5", "C c #ED3CC5F77B9F", "Z c #F02ACFF67BC4", "A c #EFB2D0B57C32", "S c #F7F2DEA17287", "D c #F8D4DF58717D", "F c #F0B6D1347A6C", "G c #F6DEDD337E97", "H c #F781E0B879E6", "J c #F8D2E1477B2F", "K c #BC6BA4BA8A09", "L c #BB19AF708CBE", "P c #AB3BA3199DB2", "I c #BCF4ADBC99C8", "U c #990CA304B2C0", "Y c #A954A32BA0CB", "T c #BA0AB7AEA4CF", "R c #BC34B320AC19", "E c #A749AFEFBDB6", "W c #A845AFEABB95", "Q c #AF09B6B4B602", "! c #B783BAC0BE83", "~ c #BAF6BFEABD6A", "^ c #D369AE148636", "/ c #D868AF50837B", "( c #C6F9AD649366", ") c #DCF2C2958932", "_ c #E05ED3CB8895", "` c #EDE2C776848D", "' c #EB5FCE3780F8", "] c #E0B0D4488433", "[ c #EBC1D2FF8681", "{ c #E2A2D7098CC7", "} c #EBD4D4CC8C5B", "| c #EC92DD9C8F20", " . c #F1E6D3FC81A4", ".. c #F662DBEB8593", "X. c #F185D56B8C4F", "o. c #F46ADB578DB2", "O. c #EFDDCE74973E", "+. c #EE4CCABB9C3B", "@. c #E125D43697FC", "#. c #EFC9D17A95DB", "$. c #E69FDA189055", "%. c #EC6FD895954B", "&. c #E650DCB39C13", "*. c #ED06D9479895", "=. c #F45FDC0193DA", "-. c #F1DED7059EB4", ";. c #F3B6DD029BD8", ":. c #F7B8E1E78345", ">. c #F917E3948628", ",. c #F781E1968B44", "<. c #F88EE4AB8BEA", "1. c #F820E3B99250", "2. c #F933E6759302", "3. c #F4C4E2779E39", "4. c #F931E73D9AB7", "5. c #F9A8E9009E41", "6. c #D4AFD3F0A745", "7. c #D483D524ACA5", "8. c #C3D6CE69BFE8", "9. c #CEC2CF19C012", "0. c #C727D08ABE6A", "q. c #EFD2DE8AA645", "w. c #F15CD708A34D", "e. c #F3A5DC66A42A", "r. c #F3CCDE4EAA2B", "t. c #F34FD957B148", "y. c #F436DCB4BA63", "u. c #F5C3E391A440", "i. c #FA1DEA18A294", "p. c #F3A3E290AD27", "a. c #F915E7F6ABD3", "s. c #F536E9CFAF68", "d. c #FA88EB78AB9E", "f. c #E737E2C6B6D7", "g. c #F8C6E7D1B0D4", "h. c #FAD3ED2EB5DD", "j. c #F522E5B1BD2F", "k. c #F983EB7EB9B9", "l. c #FC48F0A7BC22", "z. c #98A7AEACCB6A", "x. c #9F76B362CCDC", "c. c #98A4B19CD0EA", "v. c #9B7DB880DCA2", "b. c #B31FBECAC4DA", "n. c #B836BF9BC875", "m. c #A9F7BE86D5AD", "M. c #A420BDD4DC7C", "N. c #9DA5BCFCE255", "B. c #A0CABE3CE236", "V. c #B3D6C53FC50F", "C. c #BD7DC5B6C2ED", "Z. c #B7B0C814CCCE", "A. c #BC20CC06CB03", "S. c #B833C773D28E", "D. c #B7C5CC19D814", "F. c #B2F5C77FDC64", "G. c #B8EFCE33DFB3", "H. c #BEC9D1DDDF76", "J. c #A5F9C284E47F", "K. c #AAC3C60FE5F8", "L. c #AFEDC928E1FC", "P. c #AE74C9FEE9F8", "I. c #B616CBDBE303", "U. c #BD0FCEC7E1A8", "Y. c #B237CC69EA80", "T. c #BBF6D3BAED59", "R. c #BE84D979F4D5", "E. c #C487CFB3C320", "W. c #C276CFF4CA3C", "Q. c #CB9BD67ECD3A", "!. c #D91ADC4BC148", "~. c #C069D195D824", "^. c #EA3CE264C987", "/. c #F5A6E4ABC4AD", "(. c #F58DE8AFC571", "). c #F8FDEA39C10B", "_. c #F64DE780C9CC", "`. c #F68EEAFCCBEF", "'. c #F8B0ED4ECA0D", "]. c #FCAFF27CC3E9", "[. c #FCE9F32DCD6A", "{. c #F81EF011D501", "}. c #F9EDEFC2D184", "|. c #FAE2EF74D8C4", " X c #FB19F264D453", ".X c #FB16F36FDBBB", "XX c #C653D55FE6CB", "oX c #CB95DB04E6EF", "OX c #C66AD9B2ED63", "+X c #C9A3DB29EF5D", "@X c #D1ADE038ECF6", "#X c #C2AAD7F4F163", "$X c #C3C1DC35F4CB", "%X c #CA9BDF1CF4CF", "&X c #C6B4DFFDF8D2", "*X c #CCEEE1E2F6ED", "=X c #CCB5E286F87E", "-X c #D43DE4D0F5FD", ";X c #D88CE830F7DC", ":X c #DA4EE88CF7F4", ">X c #D052E515F8E3", ",X c #DB93EA5CF8B4", " t b b b b b b b b t > wXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwX", ": w V [ [ [ [ [ [ [ [ ' V m wXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwX", ": b p..X.X.X.X.X.X.X.X{.`.p.' n n n n n n m V V V m wXwXwXwXwXwX", "* n `.qX7X5X5X6X6X7X7X0X0X.Xq.} } } } } } } %.*.*.[ p wXwXwXwXwX", "& n `.7X].d.a.g.k.k.).}.6X7X.X X X X X X}. X X.X.Xj.n & wXwXwXwX", "& n `.4Xd.,.o.=.=.=.=.e.). X.X.X.X.X X X X X X.X0X`.m & wXwXwXwX", "- v _..Xa.o.=.o.o. .F A [ } ;.;.;.;.=.=.=.=.o.u..X(.n & wXwXwXwX", "- v (..Xp.=.o.X. .Z A [ [ | ;.;.;.;.=.=.=.o.o.u..X(.n & wXwXwXwX", "& v j..Xr.X.} ' B ' w.j.'. X.X.X.X X X X X[.[..X0X`.n & wXwXwXwX", "- v /.4Xj.r.e.-.#.w.(..X7X7X5X.X3X3X2X1X.| 6.E.H.#X-X:X,X;X*X$X#XU.b.Q wXwXwXwX", "# c /.7X[.h.d.i.5.2.<.>.J $.8.G.OX*X*X*X*X*X%X%X*XOXF.m.wXwXwXwX", "# c /.5X].d.i.4.2.<.:.J D { Z.Y.%X-X*X%X&X$X$X&X>X%XY.J.wXwXwXwX", "@ x /.5Xl.i.4.2.<.:.H D M ] V.P.%X;X*X$X$X$X$X$X=X$XP.J.wXwXwXwX", "+ x /..Xk.5.4.1.,.:.G S N _ V.P.%X;X*X$X$X$XR.$X=X$XP.B.wXwXwXwX", "+ i y..Xk.u.3.;.=.=.o...G @.Z.Y.%X-X%X$XR.R.R.$X=X#XJ.v.wXwXwXwX", "+ y +.t.O.` ` ` C C C B B ) ~ I.+X-X%X$X$X$X$X$X&XT.M.z.wXwXwXwX", "+ % u u q 7 7 7 6 6 6 6 0 r I n.XX*X=X=X&X&X=X&XR.Y.x.U wXwXwXwX", "wXwXwX. O o o o o o o O X 5 K ! U.#X$X$X$X#X#XT.Y.m.W P 4 wXwXwX", "wXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXK.P.Y.Y.Y.P.K.M.x.E R ( s 8 wXwX", "wXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXJ.K.K.J.N.c.U Y ( ^ j a < wX", "wXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwX4 d j / k 3 ", "wXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwX8 a l h 3 , ", "wXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwX1 9 9 2 1 ", "wXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwX< 2 2 2 ", "wXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwX", "wXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwXwX" }; qosmic-1.6.0/icons/silk/folder_find.xpm000066400000000000000000000165341304321135200200720ustar00rootroot00000000000000/* XPM */ static char *folder_find[] = { /* columns rows colors chars-per-pixel */ "32 32 238 2", " c #01270325047C", ". c #067A076007D2", "X c #0587082F0B47", "o c #0B100C600DFC", "O c #0CAB0E57104E", "+ c #12E113DE15F1", "@ c #1668185F1AC6", "# c #19E81BE21EAA", "$ c #1B871E282102", "% c #1DE120E12466", "& c #25A828982C4E", "* c #28A62B362D15", "= c #29852D56322F", "- c #2CB6311335E4", "; c #319934B236D4", ": c #32C237443C6C", "> c #33BA38A93E3E", ", c #52D13BD11C38", "< c #4DB643533417", "1 c #34C93A6840CA", "2 c #39A23EAD4442", "3 c #3BE4413546F1", "4 c #3D5E43974A7D", "5 c #4D004D6943BA", "6 c #400146184D08", "7 c #42FF48B64EB3", "8 c #44F94BC253AF", "9 c #481A4EF356BB", "0 c #4A6F50F455DB", "q c #4BE053665B65", "w c #504E57775F87", "e c #534559625D0C", "r c #58AC5B8458D5", "t c #64A25770439D", "y c #62835EE24AC4", "u c #6C3166CF4E15", "i c #6315613C5160", "p c #748E66FE5284", "a c #77C76BFC5A12", "s c #7BD070675F9B", "d c #4CC9569E61F3", "f c #4D63583564F7", "g c #52955ABD6363", "h c #5A295EB06091", "j c #52D85D9F69C2", "k c #55A461306DD6", "l c #5B3A63BA6C9E", "z c #55086186700C", "x c #5C9366B77182", "c c #5F9869667468", "v c #619566C76619", "b c #69546C4E667C", "n c #65316B106DCA", "m c #6AF46F0D6AD3", "M c #746874DD65AC", "N c #62A66BAA7525", "B c #62FA6EA67CC4", "V c #6777704176B8", "C c #65D0718A7EA2", "Z c #69BE73707D82", "A c #7E6B7ED27017", "S c #B9AA7DA82C2F", "D c #B4737F2B366F", "F c #8C377F2F5130", "G c #812272B75D28", "H c #A0B57A534567", "J c #857F7B516AE2", "K c #83B77EE77618", "L c #BB5F85F73D1D", "P c #CEB08A202D19", "I c #D7818418264B", "U c #D7FA85C72A28", "Y c #D87385D82A8E", "T c #D8FD8BD32E09", "R c #D9BF919D2F81", "E c #D9B99256300A", "W c #D9B79CCB3037", "Q c #DBD591813BF6", "! c #DEE699FC3DB3", "~ c #E28B9D603F90", "^ c #D9B6ABB32F41", "/ c #D9B2B05A2F8D", "( c #D9B9A5513068", ") c #D9B6A8BE2FE0", "_ c #D99AB34631BC", "` c #DBBCB8043E33", "' c #E0D1BA8D3DA9", "] c #F156CD282A88", "[ c #F1B0CDE4329F", "{ c #F22BCF2D3C63", "} c #F2CFD1783BFE", "| c #8D97835B5B86", " . c #BEF78A9B42DF", ".. c #B21A9AC44744", "X. c #936789D465B1", "o. c #95C98E496E35", "O. c #8C5F8285730E", "+. c #92D085917023", "@. c #93818A897BA8", "#. c #A3CB91C576FB", "$. c #A78695D07B73", "%. c #C3CA8F8047F9", "&. c #C8AE91F44742", "*. c #C4869178492A", "=. c #C9DE932B4879", "-. c #DF469B73435C", ";. c #DFBB9D734B72", ":. c #E0969F845104", ">. c #DDF2BBF94992", ",. c #DF60BE31512A", "<. c #E08CA1BD55A1", "1. c #E1F1A5415A77", "2. c #E484ABDC5CBC", "3. c #E4F3B07F579E", "4. c #E5AAB2B75B35", "5. c #EBB2BE975D07", "6. c #C1FAAEE86ACC", "7. c #DCA8B0D46511", "8. c #E486AD936200", "9. c #E4D7B3EC645F", "0. c #E408BCE86484", "q. c #EA9CBF23615B", "w. c #E7DCBD166DF2", "e. c #E888BBE16ABD", "r. c #E983BEB1758B", "t. c #E983BDF87BF6", "y. c #F33CD2D644A2", "u. c #F3BED4984B94", "i. c #E2DBC07B5157", "p. c #E1E3C1F65B85", "a. c #F21ACFE9586B", "s. c #F45DD63D531B", "d. c #F487D8655675", "f. c #F3C2D53D5BEE", "g. c #F566D9485B87", "h. c #E3D3C3DE6708", "j. c #EC1DC0EF6547", "k. c #ECBEC30F6BEC", "l. c #F2B5D33E63D8", "z. c #F5F8DB4264C0", "x. c #F37CD5036C49", "c. c #F69FDCF76D14", "v. c #EC78C48F72C2", "b. c #E578CAA47266", "n. c #ECE0CC557519", "m. c #ECC2C5B97ABC", "M. c #EFEDCED67FBF", "N. c #F3DBD63D7271", "B. c #F6EBDE6674C4", "V. c #F43BD7EB78A8", "C. c #F6D4DE307B5F", "Z. c #F7D3E1157CB3", "A. c #6B0E768482D1", "S. c #6E9078A0835F", "D. c #6DF57BF28AB1", "F. c #70DC7AED8666", "G. c #74067ED08A2A", "H. c #75BA81978D3E", "J. c #7BD183798B3B", "K. c #786A863D9591", "L. c #7DE389969627", "P. c #7D548A58985A", "I. c #8220863383D6", "U. c #804B87058C8A", "Y. c #94EA8F888179", "T. c #960E94E4897C", "R. c #81B78CCE978E", "E. c #82648EB49B7D", "W. c #86F891B49CB5", "Q. c #87D295BAA42E", "!. c #8BB09701A35C", "~. c #92B49E61AAA1", "^. c #95BBA1AFAE11", "/. c #9B34A5DEB123", "(. c #9DF7A91EB52C", "). c #A1F7ACEFB80A", "_. c #A2A2AE8BBB43", "`. c #A924B416BFA8", "'. c #ED04C62A8572", "]. c #EA08D2548690", "[. c #E9EFD2988824", "{. c #F199D38E83E7", "}. c #F52ADB2D84A8", "|. c #F216D560892C", " X c #F597DD6C8D70", ".X c #EF72CE7A93CC", "XX c #EF05CD0E9B13", "oX c #F538DD6A93C5", "OX c #F15BD6E29DC4", "+X c #F64BDFA89B34", "@X c #F80BE25E83E6", "#X c #F89BE316864F", "$X c #F7EEE2CE8AAB", "%X c #F8C2E4A78CC8", "&X c #F820E3B99250", "*X c #F940E69894C0", "=X c #F68AE07B9FC1", "-X c #F93EE7449B27", ";X c #F9F2E90B9E76", ":X c #CF48C8A7ADEA", ">X c #D751C8D2ABDA", ",X c #F29CD320A81E", " 3 9 0 4 - @ . ", "mXmXmXmXmXmXmXmXmXmXmXmXmXmXv x Z Z l q 2 * mX$ ; 3 q e q 3 % o ", "_ ` ,.p.p.p.p.p.p.p.p.i.' ..M S.!.~.W.S.q ; mXmX7 l J.W.L.N > @ ", "_ >.b.].[.[.[.[.[.[.[.].b.6.A G.(.`.~.H.h 5 mXu h Z ~._.~.S.3 $ ", "_ p.6XlXlXlXlXlXlXlXlXkXdX:XI.F./.).R.V r y F | b S.^.(.E.x : # ", "/ h.sXnXvXcXcXcXvXvXvXbXbXtXU.Z ~.^.G.l 0 i X.o.m C !.~.G.g = @ ", "^ h.sXvXfX8X7X9XeXeXiXkXvXtXJ.c E.Q.A.g 7 r Y.T.n x K.P.Z 0 & + ", "^ h.sXxX8X$X XoXoXoXoXX+.s @.Y.J p t p #.$.G a O.K h 1 $ O ", ") 0.uXzX7X XoXoX X{.n.v.v.7.*.L %.*. .L D L &.=.L L %.H < $ O . ", ") 0.yXlX4X|.{.M.n.k.q.q.w.w.9.8.2.2.2.8.8.8.2.8.8.2.~ S , X ", "^ 0.qXhXOXm.e.9.4.3.2.r.1XuXyXyX3X3X3XqX3X3X3XyXaX,X1.P mXmXmXmX", ") 0.yXlX2X.X'.t.t.t.t.XXdXcXzXzXkXkXkXgXgXgXgXzXbXpX8.R mXmXmXmX", "( 0.uXbXxXjXhXhXaXaXaXdXiXrX8X5X5X;X-X*X*X%X$X5XzXyX8.R mXmXmXmX", "( 0.sXnXbXvXvXvXvXcXzXgX0X;X%X#X@XZ.Z.B.c.z.z.@XgXqX8.R mXmXmXmX", "W 0.pXbXcXkXgXgXfXrX8X5X*X%X#X@XZ.C.B.c.z.g.d.Z.gXqX8.R mXmXmXmX", "W 9.uXvXkXrX0X0X8X;X%X#X#X#X@XZ.C.B.c.z.z.g.s.Z.gXqX8.R mXmXmXmX", "W 9.yXvXgX0X8X5X;X*X$X#X@X@XZ.Z.B.c.c.z.g.s.u.B.fXqX8.R mXmXmXmX", "E 9.yXcXfX8X5X-X*X%X@XZ.Z.B.B.c.z.z.g.s.u.y.} z.rX3X8.E mXmXmXmX", "R 8.yXcXrX5X-X&X$X@XZ.B.c.z.g.g.s.u.y.} } [ ] d.8X1X2.E mXmXmXmX", "T 8.yXzXeX;X-X&X$X@XC.B.c.z.z.f.d.s.u.y.{ { [ g.8X1X2.E mXmXmXmX", "T 2.3XlXeX4X=X+XoXoX X}.}.V.V.N.N.x.l.l.l.f.a.V.9X c #D99AB34631BC", ", c #DBBCB8043E33", "< c #F17BCD0328CC", "1 c #F245CF0E3326", "2 c #F1EDCE7139C5", "3 c #F36FD1F63B85", "4 c #A80B8D0A54C3", "5 c #ADF6995167B4", "6 c #BA86A2AF66D6", "7 c #BE60A64E6AFB", "8 c #BF79A8BE6D69", "9 c #B4DBA2C46497", "0 c #B8EEAB9E71EE", "q c #DF469B73435C", "w c #DFBB9D734B72", "e c #E0969F845104", "r c #DDF2BBF94992", "t c #DF60BE31512A", "y c #E1F2A53F5A7F", "u c #E2D7AB995CAC", "i c #E08CA1BD55A1", "p c #EBB2BE975D07", "a c #E3C4B2055C33", "s c #C505A96F6AE0", "d c #DB4EB14F6032", "f c #CB92B0AC72D9", "g c #DB59BCC27BFA", "h c #D7AABBCD782E", "j c #E37AAD646317", "k c #E373B38964B4", "l c #E340BD3A64C9", "z c #EBB9C033618E", "x c #D798C4C95EB9", "c c #EAA8CEAD4B85", "v c #F277D026402C", "b c #F3E2D3A64491", "n c #F47FD56D4C6A", "m c #E299C24C5AE8", "M c #F21ECFFC58C3", "N c #EB91D15C5627", "B c #F492D6CC5376", "V c #F3CAD5595C6A", "C c #F5D1D9965B1C", "Z c #F616D85F5455", "A c #D87CC7226846", "S c #DA2ACC4E7BE0", "D c #DB58C60E78DB", "F c #E3D3C3DF6709", "G c #EC1DC0EF6547", "H c #ECBEC26A6BBC", "J c #ED3BD6976C7D", "K c #EC66D4066121", "L c #F644DB24636C", "P c #F690DCB56BAD", "I c #F2EDD3C56652", "U c #E45DC2CA7455", "Y c #ECF7C50373DC", "T c #ED3CC5F77B9F", "R c #E729C9E57859", "E c #EE3FD9DA7A73", "W c #F68BDD957451", "Q c #F1D0D31B7BA4", "! c #F5C9DC5B7D82", "~ c #F3E3D65272C8", "^ c #F795E0DE7BC3", "/ c #3BEF6336A3CA", "( c #44F16C8A94BD", ") c #672F7351828E", "_ c #435F6787A036", "` c #468A6A77A121", "' c #4C066E61A3A4", "] c #52EF73A9A6C3", "[ c #563C76CBAB18", "{ c #52DF7FA9AD2E", "} c #5D467ADCAB5E", "| c #58DC775EA99E", " . c #60B07D98ACEA", ".. c #714584C68C3F", "X. c #77CC8C89958F", "o. c #77628B049945", "O. c #52E58029AE7D", "+. c #5A118867B6DD", "@. c #5B798B31BC44", "#. c #58078577B25D", "$. c #6D8A8B48A49B", "%. c #66108507A7DB", "&. c #7E848FB6A260", "*. c #6ACA8769B552", "=. c #718F8DECB9A5", "-. c #70958A36B359", ";. c #65CA9122B70B", ":. c #76639638B6A3", ">. c #76FC919FBAF8", ",. c #7D5E95BBBC2A", "<. c #7AC39B3CBB54", "1. c #7BE59192B119", "2. c #7C37A472B96C", "3. c #644F97C4CC62", "4. c #7B0B95B3C126", "5. c #69C79EF2D44E", "6. c #6BCCA218D9E1", "7. c #7151A7DADFB8", "8. c #75EAA9C6D99D", "9. c #7353AB69E42D", "0. c #881A90128C7E", "q. c #83648F149C4F", "w. c #8C5295BB9588", "e. c #92399B00A402", "r. c #84189A92BEAD", "t. c #80F69673B5E3", "y. c #89ACA164AE88", "u. c #8533A1B3B167", "i. c #830CA424BCB9", "p. c #847CA99BBD84", "a. c #94D2AFD7BE39", "s. c #9CE7B201BD05", "d. c #A071B201BB73", "f. c #C463BA838DBB", "g. c #DAF2CF5689E7", "h. c #DCEAD0D78B40", "j. c #DAB9D16D9564", "k. c #DB53D3DB9CBD", "l. c #D491C4D89720", "z. c #ECEEC68B8483", "x. c #EC6ACAB08366", "c. c #E4E6C91F8348", "v. c #EAC6D2EF8739", "b. c #EC01D26D88D1", "n. c #EFD6DDF588A6", "m. c #F252D46681E7", "M. c #F185D56B8C4F", "N. c #F502DC3A8DBC", "B. c #F52CDB3284BC", "V. c #F013CED793D4", "C. c #EE4CCABB9C3B", "Z. c #E833D4009871", "A. c #F56ADD82930F", "S. c #F6E9DEBC9A07", "D. c #F1DED7059EB4", "F. c #F7DCE22D8388", "G. c #F7D2E24F8A8B", "H. c #F88DE4AB8BEA", "J. c #F544E2EE942E", "K. c #F90FE66C933F", "L. c #F930E73C9AB7", "P. c #F819E4BD9F01", "I. c #D8FBCE59AE4C", "U. c #DC04D58EA381", "Y. c #DE13D833ABC7", "T. c #CB76C972BDBD", "R. c #D0ABCD66BDE8", "E. c #DC84D4C7BBC3", "W. c #DE84DAB3B7B4", "Q. c #EBC0DA28ADAF", "!. c #F2E4DA26A469", "~. c #F444DDDEAACC", "^. c #F1DED76CA381", "/. c #EA72DF4BB4EC", "(. c #F3C2DB06B5D6", "). c #F629E438A39F", "_. c #FA13EA6BA35B", "`. c #F3CDE2D2ADD1", "'. c #FA5EEB97AB57", "]. c #F915E7F6ABD3", "[. c #FACAECCEB418", "{. c #F466E423BD71", "}. c #FA55EB2FBA42", "|. c #F53CE782B1D5", " X c #FC27F0B0BCD7", ".X c #85A99C4DC12C", "XX c #88519DB1C0F1", "oX c #82AAAB1CC562", "OX c #8973B234C77D", "+X c #8BBEB46DCA0F", "@X c #9593B204C2CB", "#X c #98A5B3D6C463", "$X c #91E0B8E2CD56", "%X c #9C53B97CC9CA", "&X c #9FD9BA0AC7A5", "*X c #93A0C002D58F", "=X c #A191BCF6CBCA", "-X c #AC3DB8BCCACA", ";X c #ACC8BD3AD53D", ":X c #8227B694E5A3", ">X c #8321B90FE7A5", ",X c #9AC3C61ADCF0", " , t m m m m m m m m 0 o..XNXNXi.;.8.>X>X:X:X:X:X8.;.i.nXbX,.] ", "> r R v.v.v.v.v.v.v.v.f.&..XMXnX<.#.5.9.9.7.7.7.9.5.#.<.bXbX,.] ", "> m `.xXxXxXxXxXxXxXxX9Xt.r.nXnX<.+.5.9.9.9.9.9.9.5.+.<.bXbX>.] ", "- F pXPXHXFXFXGXGXHXHXeX,.,.MXnX:.{ 3.6.6.6.6.6.6.3.{ :.bXbX>.' ", "= F iXHXsX'.].|.}.}.sXR.1.4.MXbX$.( O.@.@.@.@.@.@.O.( $.wXbX>.' ", "= F iXDX'.G.N.A.A.S.S.l.w.e.9XT.0. ..X.X.X.X.X.X... w.tXvX=.' ", ": l aXxX].N.A.N.N.m.Q U s s g g s 6 7 8 8 8 8 7 7 6 9 f.rX2X=.` ", ": l uXxX`.A.N.M.m.Q Q R g g c.x.x.x.x.x.x.x.x.x.z.U l c.fXvX=.` ", "= l {.xX~.M.b.x.Y x.!./.E.0XyXjXjXjXjXjXjXpXpXjXlX{.R c.fXbX=._ ", ": l uXDX{.~.!.D.V.^.aXkXAXAXSXzXzXzXkXkXkXhXhXzXIXfXD h T.;X*._ ", "; l iXLXGXxXxXxXlXxXGXJXgXyXW.Y.Y.U.U.k.j.j.h.U.0XE.f 5 q.*.[ UX", "; l iXPXLXHXHXHXHXFXFXxXyX/.Z.h.g.S S D A A x S W.I.s 4 ) / UXUX", "$ l iXLXFXcXdXdXsX X[.'.).J.n.E E J J K N N c J |.Q.d * UXUXUXUX", "$ k uXHXcX X[.'.'._.L.K.G.F.^ W P L C Z n b 3 L [.~.a $ UXUXUXUX", "$ k uXHXdX[.'._.L.K.H.F.^ W P L L C B n b 3 1 C '.~.a # UXUXUXUX", "# k uXFXsX'._.L.K.H.F.^ W P L C Z n b b 3 1 < Z '.~.u # UXUXUXUX", "# j uXFX X_.L.K.G.F.^ W P L C B n b 3 3 1 < < B _.~.u # UXUXUXUX", "o j uXxX}.P.L.K.G.F.! W W P L V B B n b v 2 1 V '.~.u @ UXUXUXUX", "o u (.xX}.).P.S.A.A.N.B.B.! Q ~ ~ ~ I I I V M ~ |.!.y o UXUXUXUX", "o i C.(.V.z.z.z.T T T Y Y Y H H H G G z p p p H V.z.w o UXUXUXUX", "O % y y e w w w q q q q q q q q q q & & & & & q w w % UXUXUXUXUX", "UXUX. . . X X X X X X X X X X O O O O O O O O X X X O UXUXUXUXUX" }; qosmic-1.6.0/icons/silk/folder_picture.xpm000066400000000000000000000173531304321135200206250ustar00rootroot00000000000000/* XPM */ static char *folder_picture[] = { /* columns rows colors chars-per-pixel */ "32 32 256 2", " c #557C9FCB3CDA", ". c #758489B328F6", "X c #6BE48D4E3E4B", "o c #72558DBD3680", "O c #7D2892783432", "+ c #771E9A2F366F", "@ c #69919C543DB1", "# c #62E6AABA35C2", "$ c #7B6BB7CE3BC4", "% c #732BB4AF3953", "& c #74B4ABE1372C", "* c #5DF2903E53A3", "= c #64D993C955D1", "- c #7C0B9C804B71", "; c #788CABD54F30", ": c #76AAB2B84541", "> c #6A11A8A557E6", ", c #7803B1A25A42", "< c #5D0E9E3865B2", "1 c #61489E1C605A", "2 c #7584A5616622", "3 c #7E58B2EC687A", "4 c #797BAB1072B4", "5 c #9B7986483289", "6 c #84C599BC3848", "7 c #8143968437D0", "8 c #B9518E422B11", "9 c #BB2690552E2D", "0 c #AF11995F3EE0", "q c #BDA2937E31B0", "w c #D7818418264B", "e c #D7FA85C72A28", "r c #D8FD8BD32E09", "t c #D87385D82A8E", "y c #D9C191BB2FA1", "u c #D9B99256300A", "i c #D9B79CCB3037", "p c #DEDE99AF3D78", "a c #D8ED91933B1B", "s c #C86D9AB03DBD", "d c #D9B6ABB32F41", "f c #D9B2B05A2F8D", "g c #D9B9A5513068", "h c #D9B6A8BE2FE0", "j c #D99AB34631BC", "k c #DBBCB8043E33", "l c #F156CD282A88", "z c #F22BCF2D3C63", "x c #F1B0CDE4329F", "c c #F2CFD1763BF4", "v c #8D7C8ADF5163", "b c #AD4C93BF40C2", "n c #856FBDE143CB", "m c #8B08BF6445A3", "M c #91FEA2CB5C93", "N c #A19CAD2C5E50", "B c #BC48984F6A43", "V c #8ED4BDF56C07", "C c #80F7B2987A4F", "Z c #81CCA8837D07", "A c #AD57A5D567AA", "S c #BF72A03C6E24", "D c #DF469B73435C", "F c #DFBB9D734B72", "G c #CA69964950EC", "H c #E0969F845104", "J c #DD5DA3F654F4", "K c #DE64A7785E75", "L c #DF60BE31512A", "P c #DDF2BBF94992", "I c #E209A82B4B38", "U c #E1F1A5415A77", "Y c #E2CDAAA05D4C", "T c #E273A8CE53C6", "R c #EAFBBDD55CD5", "E c #E125B49B5F6E", "W c #DE7BA794613C", "Q c #DE97A9236337", "! c #D430A3B663D2", "~ c #D4BFACD87279", "^ c #DE2ABB907079", "/ c #C4B9AE456BC3", "( c #E33CACF461EB", ") c #E41FB3F963A8", "_ c #E37BBD1164F1", "` c #E52BB5476DCA", "' c #EBB9C033618E", "] c #E6AAB65570DA", "[ c #E916BE3A7BEC", "{ c #8D1CC25B4815", "} c #9534C4154EE0", "| c #9D22C9E54C1E", " . c #97C7C67D46FE", ".. c #9D8ACA7652E8", "X. c #A317CCDE5302", "o. c #9D21C49D79C0", "O. c #9AC1C6666774", "+. c #A5B7CB8B7202", "@. c #AC21CDC47E75", "#. c #B2A3D45A73C6", "$. c #A30BCAC36B76", "%. c #F341D2E644E9", "&. c #F3C9D4B94C26", "*. c #E218C2055B3E", "=. c #E51FC333577F", "-. c #F21ACFE9586B", ";. c #F463D64F5368", ":. c #F3C2D53C5BE7", ">. c #F58CD9755BF6", ",. c #F487D8655675", "<. c #E3D3C3DE6708", "1. c #ECA1C29C6B2C", "2. c #EC1DC0EF6547", "3. c #F2B4D33D63D4", "4. c #F616DB4F64AC", "5. c #F6B0DCDF6CC7", "6. c #F379D4FA6C22", "7. c #EC83C3EF7354", "8. c #EF20CB7E75A6", "9. c #ED3CC5F77B9F", "0. c #EA35CB5C7702", "q. c #F6FCDE6A73FD", "w. c #F677DDA67BF3", "e. c #F3FAD6C87473", "r. c #F7E1E1467CD3", "t. c #F8BEE1C27C69", "y. c #67DCA2C68C70", "u. c #71658DC4B953", "i. c #746790CFBCE4", "p. c #7BBF95C7BC18", "a. c #7B3EA7D4AC7B", "s. c #7E34AAEABED0", "d. c #741C927FC20F", "f. c #7A5F96EDC2E4", "g. c #7CC498D9C38F", "h. c #975C948892DD", "j. c #96FBBD118F57", "k. c #861AA37297D3", "l. c #82F2B1AE9D4B", "z. c #8D429D15A946", "x. c #9470A396AF7C", "c. c #9983B214A481", "v. c #92EBB7BAAFB3", "b. c #80A7AC60B54E", "n. c #8E05B6ACBB70", "m. c #9A3ABBB2BBAA", "M. c #8619AED3A847", "N. c #A447A54CA89E", "B. c #B4C0D0E89E76", "V. c #A148C53C98A0", "C. c #A5B4C4C0BD99", "Z. c #B289CDE0BB6D", "A. c #B9CDD2D4BED9", "S. c #CE03C3089343", "D. c #D91EC7CA9B83", "F. c #ED65C67F8545", "G. c #ED04CB0787F9", "H. c #EA98D2C5871E", "J. c #E9EFD2988824", "K. c #F3D1DDF78C6A", "L. c #F3D6D8458522", "P. c #EF30CDC592B4", "I. c #EE4CCABB9C3B", "U. c #F5DADE1C93AF", "Y. c #F3DCDB5F9CA4", "T. c #F801E22D8340", "R. c #F8DFE3438456", "E. c #F7CDE2758AC1", "W. c #F8D4E48F8BC6", "Q. c #F44AE28694C2", "!. c #F95AE6B59476", "~. c #F92BE73D9A59", "^. c #F6AEE4709DEF", "/. c #D4D5CBEEB0E1", "(. c #E350C9D0A5E5", "). c #F3A2DB5EAA0B", "_. c #E225D20FBF31", "`. c #F412DD0DB666", "'. c #F492E58AA453", "]. c #FA4FEA5CA2E0", "[. c #F358E171ABCB", "{. c #FA69EB7BAB08", "}. c #F7C0E90AAD5F", "|. c #FAB2ECB7B3EF", " X c #F551E1EFBF22", ".X c #FA30EB0FBA28", "XX c #F84CEABFB63E", "oX c #FBECF0D4BD1F", "OX c #81F39AB2C167", "+X c #89419FCDC236", "@X c #9491ABC6CE78", "#X c #99C3AE3ECDC2", "$X c #9554A966C553", "%X c #9EADB13FCE9F", "&X c #9835BC8ACD58", "*X c #9696AD4BD1FD", "=X c #98EEAF13D35C", "-X c #99BCB067D1E2", ";X c #9CA1BE7EDBC4", ":X c #88DEADE6CCAD", ">X c #A3A8BE1EDC6E", ",X c #B83BCFA6CC0A", " M.>XNXbX-Xf.", "UXUXUXUXUXUXUXUXUXUXUXUXp.@XbXHXvXC.V n m { n $ # > a.>XNXbX-Xf.", "j k L *.*.*.*.*.*.=.=./ z.#XbXHXvXC.C ; : % % # < a.>XVXbX-Xf.", "j P 0.J.J.J.J.J.J.H.H.S.x.@XbXHX6X&Xl.4 ; & + @ 1 y.s.3XVXcX-Xg.", "j *.[.lXlXlXlXlXlXlXlX9X$X@XbXCX4X;X&Xc.A 0 5 v k.:X:X3XVXcX-Xg.", "f <.aXPXFXDXDXDXFXFXFXBX@X*XbXBX2Xn.n.c.A b 5 v k.b.a.m.cXcX=Xg.", "d <.aXFXdX{.}.}.XX.XsX0X$X*XMXrXj.2 2 2 - + o X = = * Z 8XcX=Xg.", "d <.aXSX{.E.K.U.U.U.U.D.N.N.7X/.N 6 6 6 7 O O O . . . M 9XbX=Xf.", "h _ iXzX}.U.U.U.K.L.8.^ S B ! J s q q q q q q q 9 8 8 / qXbX-Xf.", "h _ uXlX[.L.H.8.8.1.R E ~ ~ Q K W W W W W W W Q Q J p W /.5X@Xf.", "d _ XkXY.7.) T T I I ` (.qX0X_._._._._._._._.0X0X(.J G N.@Xg.i.", "h _ uXlX`.P.[ ] ] ` ` G.yXGXhXhXgXgXgXgXgXyXyXjXZXqXQ G h.d.UXUX", "g _ aXLXSXkXkXpXpXpXuXiXiX.X}.'.'.'.^.Q.Q.K.K.'.lXwX( a UXUXUXUX", "g _ aXPXLXFXFXFXDXzXzXfX|.~.W.E.R.T.t.q.5.4.4.R.fX X( y UXUXUXUX", "i _ pXLXDXxXfXdX|.{.{.].~.W.R.R.R.t.q.5.4.>.,.r.fX X( y UXUXUXUX", "i ) uXFXxXoX|.{.~.W.W.E.E.R.T.T.T.t.q.4.4.>.;.r.fX X( y UXUXUXUX", "i ) uXFXfX|.{.].~.W.E.R.R.T.r.r.r.w.5.4.>.;.&.q.dX X( y UXUXUXUX", "u ) uXDXdX{.].~.!.W.R.r.r.q.q.q.5.5.>.;.&.%.c 4.oX`.( u UXUXUXUX", "y ( uXDXoX].~.!.W.T.r.q.5.4.>.>.,.&.%.c c x l ,.{.).Y u UXUXUXUX", "r ( uXzX.X^.~.!.E.T.w.q.5.4.4.:.;.;.&.%.z z x >.{.).Y u UXUXUXUX", "r Y `.lX.X'.^.Y.U.U.K.L.L.w.e.e.e.6.3.3.3.:.-.e.|.).U r UXUXUXUX", "r U I.`.P.G.F.F.9.9.9.7.7.7.1.1.1.2.2.' R R R 1.P.F.F r UXUXUXUX", "t a U U H F F F D D D D D D D D D D p p p p p D F F a UXUXUXUXUX", "UXUXw w w e e e e e e e e e e t t t t t t t t e e e t UXUXUXUXUX" }; qosmic-1.6.0/icons/silk/help.xpm000066400000000000000000000106731304321135200165450ustar00rootroot00000000000000/* XPM */ static char *help[] = { /* columns rows colors chars-per-pixel */ "32 32 103 2", " c #32D7662DA3F1", ". c #365A68A1A5EE", "X c #389C6AE1A790", "o c #3C766E3CA9E8", "O c #43F37380AC75", "+ c #493E7778AF8B", "@ c #4D317A70B014", "# c #47FC77B1B0F2", "$ c #50FA7E96B5A2", "% c #560A812CB46B", "& c #5C5C861DB5FF", "* c #5F068893B752", "= c #555D829FB8D5", "- c #5BE286F1BA87", "; c #5EC78827B949", ": c #6192899FB732", "> c #634D8C7CBC03", ", c #68D38FBDBA98", "< c #6553908DBF9B", "1 c #6C549266BD74", "2 c #71E0966ABED4", "3 c #64218DE0C116", "4 c #66E29370C284", "5 c #6A9C95ADC3C2", "6 c #6CBE9985C630", "7 c #6EC39C12CA0D", "8 c #71D49772C445", "9 c #75229B20C4D4", "0 c #7A8C9DFAC630", "q c #73149DE1CC5A", "w c #7B129F40CA8C", "e c #7EE3A0B4C5C3", "r c #7667A15CCDEA", "t c #7CAAA33FCBF5", "y c #7602A1D7D1BB", "u c #7D35A534D20B", "i c #83BEA31CC610", "p c #8490A65FCBFF", "a c #89F6A773C9A5", "s c #8698A9B7CE5B", "d c #8B8BAB38CE06", "f c #949FAFFBD040", "g c #92A7B062CF3D", "h c #84AAA7FFD46B", "j c #8536AB76D3C9", "k c #8B86AC7FD45B", "l c #8783AF60D875", "z c #8A91AFD1D8E1", "x c #9180AFEAD2C8", "c c #895FB041D724", "v c #8E35B16ADA9A", "b c #93FFB2E6D4F0", "n c #9B5BB64DD42E", "m c #9FF2BB22D75D", "M c #938BB588DA96", "N c #993CB704DAF9", "B c #973EB8E5DC3D", "V c #9C2BBB32DD9A", "C c #A38EBC30D7A6", "Z c #A210BCDEDBB5", "A c #A869BF81D9D0", "S c #9D1BBCB1E2FF", "D c #A1B9BEE2E12E", "F c #A5B3C19BDE9D", "G c #ADB7C488DCE1", "H c #B231C741DEB3", "J c #B4E6C9B0E01A", "K c #A596C291E2F2", "L c #ABF6C607E4A4", "P c #ADADC85AE40E", "I c #AA61C71EEA5F", "U c #B0A3C74DE309", "Y c #B4FCCB1EE3BC", "T c #BB17CEB1E379", "R c #B4E6CDACEBEA", "E c #BED5D20EE674", "W c #BDCAD2DFEB86", "Q c #B7C5D27AF364", "! c #BCC4D5D4F4C9", "~ c #BFF4D888F82A", "^ c #C199D406E75E", "/ c #C476D698EADE", "( c #C6E9D8C2ECD6", ") c #CC20DBE6EDDD", "_ c #D191DEB4ECE9", "` c #C0F9D7BBF3A4", "' c #C523DAB1F55D", "] c #CD1DDE87F3AE", "[ c #CB9EDFDCF93E", "{ c #D0E5E03DF202", "} c #D5C2E244EF57", "| c #D556E378F47A", " . c #DBADE730F4EC", ".. c #DF54E93BF3DA", "X. c #D36EE45CF954", "o. c #D9D2E7F5F998", "O. c #E678EE46F6A2", "+. c #E949EFC5F6A9", "@. c #EC7DF251F850", "#. c #ED33F2F7F956", "$. c #F327F72CFBBC", "%. c #F5EBF8F1FC89", "&. c None", /* pixels */ "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.~ ~ ~ ! ! ! Q Q &.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.[ [ [ [ ' ' ' ' ' ' ' ` &.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.! ' X.o.o.o.| | | | | | | ] R I &.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.~ ' [ | .| ] ( ( ( ( ) ] | ] W R I &.&.&.&.&.&.&.", "&.&.&.&.&.&.Q ` X. .| ) W P D V B V K Y / ) { ( I S &.&.&.&.&.&.", "&.&.&.&.&.Q ! ' | | ( Y K D V V V V V Z P E ) ) R L S &.&.&.&.&.", "&.&.&.&.R ! ] | | / K B B K ^ ) ) / U V M V Y ( ) W D v &.&.&.&.", "&.&.&.&.Q ' | | W K z l F W ..#.#.O.) P c j V Y ) ( L V &.&.&.&.", "&.&.&.W ] ] | / D l u M ( O.$.%.%.$.@.) B u j N T ( W U N &.&.&.", "&.&.&.W ] | ) U v y q M | %.@.O.O.#.%...G j t j F E / T N &.&.&.", "&.&.K R ] ] R V h q q M ) O.) / ( | #.+./ m t r b L / E b q &.&.", "&.&.S R ] ) K z u q 7 j U / T Y / } @.+.) F t 6 t V / E k q &.&.", "&.&.S L ) ( V u r q 7 q p b F E } +.#...E n w 5 9 b ^ E k 5 &.&.", "&.&.M K ) / M r q 7 6 5 4 t G } O.O.} T C s 8 4 5 d ^ E s 4 &.&.", "&.&.v D ) / M r 7 6 6 5 4 j ( @.@._ C p 0 6 4 < < s E E p > &.&.", "&.&.k Z ( / B r 7 6 5 5 4 p Y _ ( G e > > > > , 5 d E T t - &.&.", "&.&.h V / ( Z j q 6 5 5 4 6 t p p 0 1 > > > > < 9 b E Y 0 = &.&.", "&.&.u N E / P M r 5 5 4 4 6 t p p w 1 : : : : 1 p C T G 9 $ &.&.", "&.&.&.b Y ^ E F p 5 4 < > t J ) ) H 0 * * * * 2 n H H C 8 &.&.&.", "&.&.&.k Z U ^ T b w 5 > > p T ....T 0 & & : 1 a G Y n p , &.&.&.", "&.&.&.&.w x T / Y n 0 > > 9 n G G n 2 & & 1 a C T G 9 & &.&.&.&.", "&.&.&.&.3 w Z Y E H x 0 1 2 e a a 0 1 , 2 i C H A d ; o &.&.&.&.", "&.&.&.&.&.4 8 d U ^ Y m p 9 2 1 1 1 2 i n G T A 9 % + &.&.&.&.&.", "&.&.&.&.&.&.= 5 b G T J C g a i i i d n G H A d % X &.&.&.&.&.&.", "&.&.&.&.&.&.&.- , 0 n H T E T T T T T J G f 1 % O &.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.# ; p n F G G G G G G C b 0 @ &.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.> , > > > : : : ; * & % &.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.o X X . . &.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.", "&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&." }; qosmic-1.6.0/icons/silk/image_edit.xpm000066400000000000000000000173471304321135200177110ustar00rootroot00000000000000/* XPM */ static char *image_edit[] = { /* columns rows colors chars-per-pixel */ "32 32 256 2", " c #52623AF20F85", ". c #5E8C43031495", "X c #76AA531A1ED3", "o c #5B1D47051FFC", "O c #6F4A518C204E", "+ c #69965B373BDA", "@ c #4E7062F77E4E", "# c #6B156A60765B", "$ c #92AB67162DA2", "% c #8FDC6DF4372D", "& c #927B67C237FD", "* c #9F2E703F3E3E", "= c #B0656C6B2712", "- c #B9AD7865291B", "; c #AF1B7CA23F2B", ": c #C06E7D1934CF", "> c #8591755357BB", ", c #81FA72FE699A", "< c #BDD086463A13", "1 c #C85984402F81", "2 c #C99093BC2E30", "3 c #CA358FBD31DA", "4 c #ABE583E94A76", "5 c #BCCC8BAA442E", "6 c #B83A87E8444D", "7 c #AF1484655093", "8 c #B868941057A4", "9 c #98918D51784D", "0 c #AF0F8DC06B79", "q c #A84491C4616B", "w c #BA23975B6A10", "e c #B95499E976F4", "r c #C7398DF74805", "t c #D22295924662", "y c #CEFF9A3B5DB2", "u c #C53E944E5787", "i c #D38F99685313", "p c #CF43A3B443AA", "a c #D218A7DD4EED", "s c #DF02BC0D46D6", "d c #D572A3B6528D", "f c #D86BB32A5219", "g c #E49DB1335A2D", "h c #E53FADA35970", "j c #D27C9D8A6358", "k c #C0D29C0871E9", "l c #C47298406233", "z c #D9F0A92469BC", "x c #DD4DB2006868", "c c #C53FAB3D7856", "v c #DA9FABF677F8", "b c #DDC3B5067BA3", "n c #D44EB0617220", "m c #E1F8AF806B06", "M c #E66EB9C36CEB", "N c #E401AF747306", "B c #E438B2F2764B", "V c #E892CB2B570F", "C c #F6FBDF295D7D", "Z c #F7AFE15A5F69", "A c #EEF8CBCF6BF4", "S c #EA3EC39B6AC5", "D c #EF92DA776C06", "F c #F604DDB56386", "G c #F49EDBB96DEB", "H c #F1F8D3A16D8D", "J c #EA20CA5C7617", "K c #F4C0D9E67679", "L c #F839E2A366C8", "P c #F81BE317705F", "I c #F905E4947464", "U c #341A5F9FA57E", "Y c #352E61A0A5EA", "T c #3CDD664BA6EB", "R c #3D286770A9A1", "E c #3ED968FCAA62", "W c #3F4F6832A820", "Q c #4A476C7097DE", "! c #52D76F1D9E32", "~ c #74607A5C8BE5", "^ c #79227FE6913E", "/ c #671676608B2D", "( c #444F6ADCA6B7", ") c #44C86C1AA928", "_ c #4B5B6F01A94E", "` c #4F357216A901", "' c #5A877BC0AF5C", "] c #55A77670AA26", "[ c #5AF27C1EB053", "{ c #6D8E8B59A01D", "} c #7638899C9C7D", "| c #53DB8067ACEB", " . c #5B5A89ACB7AE", ".. c #69238702A68B", "X. c #700785F6AA48", "o. c #6F319548A882", "O. c #67B788B6BCF7", "+. c #6AA48AEBBCE3", "@. c #65CD89E8B5F5", "#. c #71888EFEBC8C", "$. c #73D18DA4B5A9", "%. c #73329095BD0D", "&. c #787891FDB985", "*. c #7DB49DE9BDF2", "=. c #783596CBB569", "-. c #76F2A10DAF2C", ";. c #7CEFA3D6B81A", ":. c #6D9F8EDFC1E9", ">. c #75B59307C16B", ",. c #69C99EA0D1AD", "<. c #63A496A3C9B1", "1. c #7F0CA4ADC0AC", "2. c #6CE8A233D740", "3. c #76F3AB8ADC4B", "4. c #7AF1AF8EDDC2", "5. c #75AFA788D300", "6. c #7BECB08BDF0D", "7. c #7400AC22E366", "8. c #7621AF8BE95D", "9. c #7D4EB1E6E116", "0. c #88438BC58950", "q. c #875393FB8E68", "w. c #AEFBA71C8192", "e. c #BBFEA9C28144", "r. c #B8D0B5C18DAD", "t. c #BB98BF149753", "y. c #AC7EA99F9C71", "u. c #8B029F12B3F7", "i. c #878692BCA3AF", "p. c #8795A1FEAF0C", "a. c #9490A673A334", "s. c #9C6EB2BEAA6F", "d. c #83BAA179B4EE", "f. c #8530ADCFB70C", "g. c #84C0AC73BD17", "h. c #8C03A897B371", "j. c #9700B30BBC54", "k. c #9B38B54CBAE8", "l. c #9330B11DB6A3", "z. c #BE61B620AFCB", "x. c #AC05B4A2B4FD", "c. c #A1B7B4D6B925", "v. c #BCC5B9B2B678", "b. c #A7E4BB72A6FD", "n. c #C7EFB30E8830", "m. c #D8BBB6AB8CD9", "M. c #D954B98C93A4", "N. c #E629BAAB85A9", "B. c #E407BCE6905F", "V. c #C67ABDAEAACB", "C. c #B2ECC444AA77", "Z. c #C651C3078E56", "A. c #DC70C39986A6", "S. c #D9B2C9338BD9", "D. c #DC66C15D9160", "F. c #D34BC9A293F5", "G. c #C4B4C5E19447", "H. c #E911C6CA8A14", "J. c #E488D48F8EC5", "K. c #E9A5C6379A21", "L. c #E2C7D51A915A", "P. c #F4F5DFEE955E", "I. c #F405DA679C91", "U. c #F8E8C7C390AC", "Y. c #F96EE67C8AA0", "T. c #FABDE91B8B69", "R. c #FAFDED819C36", "E. c #F85EE3C399FC", "W. c #C334CF31ADDE", "Q. c #D959C0EDA406", "!. c #C095CC41B55E", "~. c #D101CF3CBA66", "^. c #EEC6CC23A1A9", "/. c #EFA3CF77AB00", "(. c #F184CF04AA42", "). c #EA03D71EAC0C", "_. c #F975D47FA3AD", "`. c #F3C5D785B4CE", "'. c #F75CDAA5BB08", "]. c #F3EDE75EAAD7", "[. c #FB6CEDE5A984", "{. c #F682E7F6A439", "}. c #8435AD56C4FC", "|. c #83C7AC06C86F", " X c #8718B0B5C810", ".X c #8DB1B4BBC752", "XX c #8BA2B452CA7C", "oX c #979EB378C343", "OX c #9960B681C2AD", "+X c #994EB7AFC989", "@X c #9C41B9B1CA4B", "#X c #9039B6D6CB71", "$X c #8387B588D2CC", "%X c #89D9BBCBD93B", "&X c #9459BF7BD4F9", "*X c #A218BC63CA3B", "=X c #A3A5B7DEC8B6", "-X c #ACBEBD74D3F2", ";X c #A693BA04D3E8", ":X c #8EBDBE66E0E6", ">X c #90A7BFB5E333", ",X c #9CA0C04BC552", "X:X%X%X$X$X$X.Xb.G.L.P.E.I.H.H.K.^.(.K.v j ", "UXUXY +.NXVXd.@.5.9.9.6.4.4.3.5.}.s.Z.J.].[.Y.K J S B v v v z UX", "UXUXY +.NXVX*. .,.7.7.7.7.3.3.}.s.t.L.E.[.R.I F H S x y w 0 UXUX", "UXUXY +.NXVX*. .2.7.7.7.7.3.|.s.Z.J.].[.Y.P L F K A h u 9 ~ UXUX", "UXUXY O.NXVX*. .2.8.8.7.3.|.s.t.J.E.[.R.P C F F A S M e ^ ! UXUX", "UXUXY O.NXVX*. .2.8.8.3.1.a.r.S.].[.Y.P Z C G A g m K.z.X.( UXUX", "UXUXY O.NXBX=.| <.2.5.;.a.r.S.P.[.R.P C C F A x 8 k ~.4X+.E UXUX", "UXUXY O.NXlX..Q | @.{ q.w.S.).[.T.I L F G A g u > 0.jXMX+.R UXUX", "UXUXU O.NXVXu.....} 0.9 c A.{.R.I C F F A M z e 0.u.BXNX+.T UXUX", "UXUXU O.MXKXNX-Xx.y.e.c n.A.J D F F G A g x Q.fX4XNXHXqX+.T UXUX", "UXUXY O.MXLXPXAXV.n.D.D.m.n f s V V S M m M.gXKXPXPXLXMX+.W UXUX", "UXUXT +.NXIXIXvXe.c ).`.b i 3 2 p a d z K.bXJXLXLXIXIXNX#.) UXUX", "UXUX( +.-XBXBXv.q 8 ).'.N.i 1 - < 6 7 e z.hXNXNXNXNXNX;X+.) UXUX", "UXUXUX' #.>.>.} > 4 B._.U.N t : - * , ~ X.+.+.+.+.+.#.+.[ UXUXUX", "UXUXUXUX_ ) E @ + % l B N.N i : = & # ! ( R R T T W ( ) UXUXUXUX", "UXUXUXUXUXUXUXUXo O & 4 u u r < UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUX . X $ ; 5 5 5 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX" }; qosmic-1.6.0/icons/silk/images.xpm000066400000000000000000000170351304321135200170610ustar00rootroot00000000000000/* XPM */ static char *images[] = { /* columns rows colors chars-per-pixel */ "32 32 247 2", " c #38276DA64A71", ". c #43337F5A533A", "X c #53577EA670BF", "o c #A0B75A5A6557", "O c #B3B261F26C18", "+ c #B921645E6E3E", "@ c #B5D86B697883", "# c #CD407FE57CCE", "$ c #4A708AC4546A", "% c #5DB887D8529D", "& c #5957941359C1", "* c #55468EBB79B6", "= c #681992EE6340", "- c #70BE9A2464F1", "; c #75F09F4977E7", ": c #7FEE9E927766", "> c #730DA4646D67", ", c #7C3EA70C6F6E", "< c #67B3A14B79A2", "1 c #7E68A59A729C", "2 c #74F4A9E0708B", "3 c #7D74A9C27828", "4 c #80399FB37743", "5 c #81A9A9B775D8", "6 c #862DB18A789E", "7 c #340A5F99A552", "8 c #356C6197A5C9", "9 c #3D186681A74C", "0 c #3F23683DA817", "q c #3E6A67A7A828", "w c #3F906899A88B", "e c #40816E04842B", "r c #4B2679A08833", "t c #461C6C6E91FF", "y c #5FD5644D98EB", "u c #45A8709A91FC", "i c #65B064158F92", "p c #6CBC673592EC", "a c #6E30699895BB", "s c #64CB6B8D9C7E", "d c #42D06AB8A6DF", "f c #43DE6B98A905", "g c #4B5B6F01A94E", "h c #4B057022A7C2", "j c #4D8071A4AA5F", "k c #51BC7DC1A0FE", "l c #54097530AA2D", "z c #53FA7FEDAB99", "x c #5A857B49AD59", "c c #5AF27C1EB053", "v c #65836C80A0D5", "b c #69656E40A0DB", "n c #70D17316A05A", "m c #7D387A54A4C1", "M c #9EC4752A8602", "N c #A68E69E88041", "B c #B2A675C78C4F", "V c #BB437D548F68", "C c #B93B7CF7935F", "Z c #82117F80A82D", "A c #C57D7F0786BB", "S c #521A84B284E2", "D c #5E6188F79F30", "F c #68D48DFF8997", "G c #66C986F79A39", "H c #65388DA49FB4", "J c #637F91D29950", "K c #6A5C93949AB2", "L c #6EC9A2D6913B", "P c #77F1A63B9A25", "I c #5421800CABA8", "U c #5971849CB26A", "Y c #5B18896FB7A5", "T c #5F1382F7B8B8", "R c #5CBA8B0BB946", "E c #66658536A46B", "W c #64548D08A32C", "Q c #6DEA8903A3C6", "! c #646081F5AF0D", "~ c #6FFD8AE2A8CC", "^ c #685590A1A316", "/ c #700690A6A26B", "( c #72369255ABE3", ") c #63698536B735", "_ c #691E82F8B4CC", "` c #6CE089CCB7E5", "' c #649A85C8B993", "] c #673989A4BDD4", "[ c #6BDC8BD9BD8F", "{ c #74458E13B519", "} c #72468F27BD23", "| c #6674912DB6F0", " . c #672E9307B8B8", ".. c #6FEB902DBF81", "X. c #734A935AB5A7", "o. c #784495E8B61E", "O. c #7F3898ECB46D", "+. c #73E6915BBD1E", "@. c #7972938BBB8E", "#. c #764A9A5CBFB6", "$. c #7BD59C2ABC17", "%. c #7D42A54FBA47", "&. c #6E688FDFC109", "*. c #63AA9635C8A1", "=. c #68EB9C78D04A", "-. c #72169147C0B2", ";. c #699D9E92D1D9", ":. c #6C78A1D3D722", ">. c #6D46A2D9D85C", ",. c #7914AAF6D686", "<. c #726CA949DFE6", "1. c #7454AC6EE424", "2. c #AC0F81E29626", "3. c #8D6AAAE084D8", "4. c #84CEA5188906", "5. c #8838BB2B84A8", "6. c #860EB30A8C63", "7. c #92C3BFB48487", "8. c #9456B28C8C2B", "9. c #917BAF8592F5", "0. c #8ED3BD3B9757", "q. c #8F42BE14982F", "w. c #99BEB2F69211", "e. c #9EB48C38ABCB", "r. c #823A8F62B815", "t. c #86769D16B45F", "y. c #885C9E33B493", "u. c #A0C98ED5ADA2", "i. c #BA8390F9A5FF", "p. c #8D4BA957A190", "a. c #871BA1A1ACFB", "s. c #8ACCA277AF61", "d. c #8672A2C1B254", "f. c #84C4A333BDA9", "g. c #8430A9A7BDD5", "h. c #960EB0E6BF10", "j. c #9E47B303BDF1", "k. c #A1B3B320BC27", "l. c #DE23863C81F5", "z. c #C0A1823D95B9", "x. c #CE5989479514", "c. c #C3F289A99C93", "v. c #CD928C8F9C52", "b. c #CCD79A9D9E6E", "n. c #DA15936F9706", "m. c #E38E891F84AC", "M. c #E24D90CD8F56", "N. c #CE1B9B40A03A", "B. c #E5F89F0EA359", "V. c #DF6AA360A996", "C. c #DE57A9B3AAF8", "Z. c #D1FCB100B44E", "A. c #E74FA20CA59E", "S. c #EABAA5BBAB07", "D. c #E9C4AA9FB12D", "F. c #9415C21F8571", "G. c #97E9C6408964", "H. c #9203C3349560", "J. c #A423D4799337", "K. c #A781D85C93B9", "L. c #83B1ABF4C62B", "P. c #8D01B3D4C732", "I. c #8A7EB382C98F", "U. c #95CEB297C389", "Y. c #99BEB4DCC536", "T. c #9107B7E5CBE1", "R. c #92E7B9A9CE1D", "E. c #9D94BA9DCAA6", "W. c #ACB6AF6ACA53", "Q. c #A37FB3FFC478", "!. c #A69DB4CDC93E", "~. c #A238BD3ECB92", "^. c #C029B9DBCB1A", "/. c #A64AB9B0D5C2", "(. c #AB16BC2CD4C6", "). c #8328B756E5A0", "_. c #8422B9D1E7A0", "`. c #94A9C077D604", "'. c #9BCCC68FDD65", "]. c #99E5C7F2E61A", "[. c #9A30C960E774", "{. c #A26FCFFBE642", "}. c #B46CCAC6E47A", "|. c #BF76CF15E67C", " X c #B824CF64EA8C", ".X c #B9A0CF29EB08", "XX c #A407D107E780", "oX c #A618D397EBD4", "OX c #AA93D783EEAA", "+X c #BFB0D1E2E827", "@X c #BAF5D0F9EBD6", "#X c #A60DD706F6DC", "$X c #A6D5D8DDF8AF", "%X c #B62FE575FD7B", "&X c #B8BAE834FFFF", "*X c #C5BBD5ACC954", "=X c #CA82DD0ECDDC", "-X c #D18CDB63CE72", ";X c #C21FCB3BD6D5", ":X c #C330CE72DAFA", ">X c #CF33DB86D595", ",X c #C6C5D466DD6C", " 5.H.H.q.0.P k ) /.^.2.N B C C C C z.v.x.A N.9XaX&.w ", "8 [ aX=X3 & < L K H D k d f T _ v y s v v b b m e.i.x.V.hXuX[ d ", "8 [ aX=X> $ * J ( X.X.[ [ ] [ [ [ [ [ [ [ [ [ } r.u.v.D.hXuX[ d ", "8 ] aX=X2 $ S ( Q.;X . r o.;XvXdXsXlXxXxXxXzXzXzXkXpXlXNXuX+.n V A.0XuX[ d ", "8 ] aX*X= e X.X4.X u } iXsXd.W %.I.I.I.I.I.I.g./ s.pXaX} p O m.5X+X[ d ", "7 ' yXnX,XU.U [ iXlXh.%.`.{.XXXXXXoXoX'.g.Y.fXaX} a + m.5X+X[ d ", "8 ] yXAXCX.X] [ iXxX~.P.XX%X%X%X%X%X&XOXR.~.zXuX} p O l.5X+X[ w ", "9 [ uXZXSXaX[ [ iXxX~.T.OX&X%X%X%X&X&XOXR.~.zXuX} i o # 4X+X[ q ", "f ` (.pXiX/.) [ iXzXY.L.[.$X#X#X#X#X#X].L.Y.fXuX} s M b.7X|.[ q ", "j x } @.+.) f [ uXfXf. .,._._.).).).).,.| f.iXuX+._ W.2XmX|.[ q ", "DXDXg f d 9 8 ] uXpX$.U ;.1.1.<.<.<.1.=.U $.uXuX-.&.@XVXCXyX[ w ", "DXDXDXDXDXDX8 ] uXpX$.Y :.1.1.1.1.1.1.:.Y $.uXuX-.-.aXSXAXuX} f ", "DXDXDXDXDXDX8 ] uXiXo.z *.>.>.:.:.>.>.*.I o.uXuX+.' /.iXiX(.` g ", "DXDXDXDXDXDX8 ] uX,XQ t z R R R R R R I t Q :XuX[ j ) } } ` c j ", "DXDXDXDXDXDX7 ] uXpXy.E X.#.#.#.#.#.#.X.E t.iXyX[ q 9 0 d g DXDX", "DXDXDXDXDXDX7 ' yXMXuX}.}. X X X X X X}.}.uXcX|.[ 9 DXDXDXDXDXDX", "DXDXDXDXDXDX8 ] yXCXVXBXBXBXBXBXBXBXBXBXBXVXCXyX[ w DXDXDXDXDXDX", "DXDXDXDXDXDX9 [ uXZXAXAXAXCXCXCXCXCXCXCXCXAXZXuX} f DXDXDXDXDXDX", "DXDXDXDXDXDXf ` (.iXiXuXuXuXuXuXuXuXuXuXuXuXuX(.` g DXDXDXDXDXDX", "DXDXDXDXDXDXDXx } @.+.[ [ [ [ [ [ [ [ [ [ [ } ` c DXDXDXDXDXDXDX", "DXDXDXDXDXDXDXl g f d 0 q 9 9 9 9 q q 9 9 0 f g j DXDXDXDXDXDXDX" }; qosmic-1.6.0/icons/silk/information.xpm000066400000000000000000000125361304321135200201420ustar00rootroot00000000000000/* XPM */ static char *information[] = { /* columns rows colors chars-per-pixel */ "32 32 145 2", " c #31394BFE85A3", ". c #31134D5E8D9C", "X c #38ED55B98BD2", "o c #308A4E569144", "O c #2F4752089DDF", "+ c #30D95103969A", "@ c #39595747905A", "# c #3CF15C4E950E", "$ c #318052DA9BF2", "% c #396A5C459D46", "& c #3D4F60449DCC", "* c #385C5ADCA09C", "= c #31A56509AA3C", "- c #38FA64D5A8DB", "; c #3CC26B7AAC33", ": c #3BBD7147AF95", "> c #30DE6A00B0F1", ", c #3A4A6F62B1E1", "< c #31B77C42BD40", "1 c #3A3E7B3EBB20", "2 c #413D5F389130", "3 c #41C260D9942F", "4 c #443963C99ABD", "5 c #457569A09DE8", "6 c #4CCC6B899D25", "7 c #511A6CE29DC3", "8 c #426E6595A43D", "9 c #4C156CEEA31A", "0 c #41776747A9DC", "q c #45F56E45ACB2", "w c #517F6E31A4C6", "e c #4DE571C9ACB2", "r c #536474C5A173", "t c #5101707EAB0D", "y c #5A857F6AADD8", "u c #44227585B410", "i c #402B7CDAB7FD", "p c #4B867B1AB2AC", "a c #43D67A58B9C8", "s c #56117AA2B447", "d c #524C7FF1B855", "f c #3D458286BFF1", "g c #5C0781C3ABF2", "h c #479B859ABDF8", "j c #4DAB83EFB932", "k c #5CD983EEB38E", "l c #5D838820B6C2", "z c #524582F4B98E", "x c #5EA98875B9EE", "c c #617B8727B4FE", "v c #63848A26B736", "b c #68048CDEB745", "n c #634B8D04BC63", "m c #68758F22BB7A", "M c #65B890D0BF66", "N c #6A839220BDAC", "B c #72759628BDCE", "V c #72AA98B1BE86", "C c #35D68165C32F", "Z c #38FD859FC64C", "A c #3D8C8A8ECA3F", "S c #44F985D4C142", "D c #47A68C53C608", "F c #4E568CA3C31D", "G c #43248C30CE0D", "H c #52798F70C5DB", "J c #59A388C7C076", "K c #4C4B9073CDEB", "L c #5316906EC7EA", "P c #541D947ECC9D", "I c #59D19728CDE0", "U c #46268E54D0B3", "Y c #47639124D27E", "T c #4D219348D251", "R c #54E195EBD22E", "E c #54359823D2C0", "W c #5BB79A3AD1A5", "Q c #664C93B4C267", "! c #69F29652C417", "~ c #6C7499D3C695", "^ c #644C9680C8AA", "/ c #6D909BFDCA82", "( c #747B9A2AC3E0", ") c #7A0C9D25C466", "_ c #72B89E20CCC5", "` c #7A6D9F7AC97B", "' c #62529D43D472", "] c #7D66A200C739", "[ c #74D7A0CECEF9", "{ c #7C8FA44FCC62", "} c #6E9DA2D4D40C", "| c #759BA30DD268", " . c #7D0BA5DFD25A", ".. c #7EEEA92FD301", "X. c #8326A339C690", "o. c #8955A70BC6E6", "O. c #8CFBA939C825", "+. c #8469A666CAC0", "@. c #89C2A7C6C8E0", "#. c #85AFAA41CD70", "$. c #8BDDAAD2CD35", "%. c #9028AB05CE51", "&. c #817CA7D3D0D3", "*. c #8482ABC2D5CD", "=. c #8A42AE4CD47F", "-. c #848DAE37D913", ";. c #8A2AAF0BD8FD", ":. c #8D58B197D581", ">. c #8692B0F0DA03", ",. c #8C81B1E2DACF", "<. c #93D1B486D541", "1. c #9B6FB7ADD497", "2. c #99EBBA09D638", "3. c #93C0B5A6DB51", "4. c #98ACB7DEDAFF", "5. c #956FB8AEDDD1", "6. c #9C6EBB91DD61", "7. c #A071B798D333", "8. c #A1D6B97ED5C2", "9. c #A219BE79DF9B", "0. c #A315BF43E13F", "q. c #A57AC155DE4D", "w. c #B314C795DEB8", "e. c #A5F3C193E1AB", "r. c #AB19C5EDE2F2", "t. c #B76DCBFCE298", "y. c #B9D1CEDEE550", "u. c #C01DD443EA38", "i. c #C25FD2DFE572", "p. c #C7A6D77FE905", "a. c #C739D8ACEB16", "s. c #CB0DDAAEEB50", "d. c #D205DDF7EBDE", "f. c #D5E2E21BEF2C", "g. c #D9C0E3A8EEA7", "h. c #DD20E6EFF19B", "j. c #DFB9E89AF335", "k. c #E5E1ED9DF5CD", "l. c #EA67F066F74A", "z. c #EA8EF0FDF81F", "x. c #EE66F3C8F95F", "c. c #F169F561FA25", "v. c #F7FDFA53FCF1", "b. c #FEB5FF17FF90", "n. c None", /* pixels */ "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.Y U G G A A A A n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.E W ' ' ' W W W W I L D n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.Y T W } >.3.5.5.5.5.,.*./ H f < n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.T E ' | >.6.e.e.e.0.0.9.3.../ H S 1 n.n.n.n.n.n.n.", "n.n.n.n.n.n.U R } >.6.e.0.6.3.,.,.,.3.4.4.3...^ a > n.n.n.n.n.n.", "n.n.n.n.n.T R ' >.6.r.e.6.3.,.;.;.;.;.3.6.6.3.{ J u , n.n.n.n.n.", "n.n.n.n.G R } >.0.e.5.>.*.;.5.6.6.3.*. .*.:.4.<.{ Q u = n.n.n.n.", "n.n.n.n.K ' -.6.e.6.-.| | ;.r.u.u.r.*._ [ .<.4.<.{ d ; n.n.n.n.", "n.n.n.P I | 6.e.3.*. .| _ 3.s.z.z.s.:./ _ [ .=.4.=.M p ; n.n.n.", "n.n.n.P } -.0.0.-.| | _ _ :.a.k.k.a.:./ / _ _ { 3.<.] n q n.n.n.", "n.n.A W -.5.6.3...[ _ _ _ &.q.y.y.q.{ ~ ~ ~ ~ _ *.:.:.) e $ n.n.", "n.n.A W ,.0.3.*. ._ _ / / &.q.y.y.q.{ ! ! ! ! ~ { =.4.+.t $ n.n.", "n.n.Z I 5.e.;. ._ _ / ~ ! =.s.x.x.s.=.Q Q ! ! ! ~ +.6.$.t + n.n.", "n.n.C P 5.e.=.[ _ / ~ ! ! =.f.b.b.h.=.Q Q Q Q Q Q { 6.%.w o n.n.", "n.n.< L 3.e.*._ / ~ ~ ! Q #.i.z.v.f.$.n n M M M M ] 6.$.w o n.n.", "n.n.< L 3.9.=.[ / ~ ! ! Q +.t.j.c.d.#.n n n n n N ] 2.$.w . n.n.", "n.n.< H :.6.:. ._ ~ ! Q Q { t.j.c.d.+.x v n n m ! ] <.X.9 . n.n.", "n.n.< F { <.3.=._ ! ! ! ( <.p.l.v.h.1.( m c l m ) +.#.V 9 . n.n.", "n.n.n.h Q { 4.3.{ Q Q ` <.y.k.b.b.x.s.8.B k k N +.$.B k 4 n.n.n.", "n.n.n.i j Q :.4.#.( ! ( <.w.s.g.g.d.i.7.B k v ( $.X.k 9 # n.n.n.", "n.n.n.n.: z { <.<.=.( N ( ) X.+.X.X.) B c v ) +.#.V 9 @ n.n.n.n.", "n.n.n.n.= u n ` <.<.{ ( N n l k k k k c b B +.+.V g 3 n.n.n.n.", "n.n.n.n.n.- 0 s ` :.<.$.) N v k k k b B X.$.#.B r 2 X n.n.n.n.n.", "n.n.n.n.n.n.O 8 l ( #.$.+.] ) V V ( ) ] +.X.B g 2 n.n.n.n.n.n.", "n.n.n.n.n.n.n.* 8 e c ( #.<.2.2.1.<.:.+.N y 6 3 X n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.+ % q k ( X.@.O.O.o.X.B y 5 X n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.& 8 9 9 w 7 7 7 6 6 4 # n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.o . . n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n." }; qosmic-1.6.0/icons/silk/layers.xpm000066400000000000000000000172671304321135200171220ustar00rootroot00000000000000/* XPM */ static char *layers[] = { /* columns rows colors chars-per-pixel */ "32 32 254 2", " c #1DF65B2319EA", ". c #1E765BE51AB0", "X c #1EF15C7C1B01", "o c #1F795D6B1C39", "O c #20395E2B1C33", "+ c #20225E421CBC", "@ c #20AC5ECB1CB8", "# c #20C25F3F1DCD", "$ c #217D60261E5A", "% c #21EC60711E09", "& c #229B61411E99", "* c #224161401F4C", "= c #2354627D1FF1", "- c #241F632E201D", "; c #2405634020CD", ": c #24B863E120B9", "> c #24EB645F2183", ", c #2570651821CD", "< c #262A657F222B", "1 c #267666292274", "2 c #26FD669322E6", "3 c #276167722378", "4 c #280F677923CB", "5 c #280F68292412", "6 c #28E168C1244A", "7 c #28AF68E124B9", "8 c #2953698D24D8", "9 c #29956A172551", "0 c #2A1069FC2547", "q c #2A0B6A8125CE", "w c #2A7C6AF52619", "e c #2AF76B412621", "r c #2B5A6C1C2670", "t c #2B9A6C4A26E9", "y c #2BE86CC426FA", "u c #2C1D6D072717", "i c #2C806D7527B7", "p c #2D3F6E4E2825", "a c #2E056F972904", "s c #2EB0700C2946", "d c #2EBC708E29B6", "f c #2F5871432A54", "g c #300771C62AAE", "h c #3073722C2A8F", "j c #303C728E2B35", "k c #308F730D2B8F", "l c #310173722BF7", "z c #317874352C6E", "x c #31DD74022BFA", "c c #320174AC2CFC", "v c #32B575C82D8A", "b c #337576362D9A", "n c #32EE75CE2DC8", "m c #334876532E31", "M c #33C076CE2E97", "N c #345677952F22", "B c #350578592F4E", "V c #356B78BA2FFB", "C c #361A79CE3096", "Z c #36777A083098", "A c #36867A503137", "S c #37257AE931A6", "D c #36F87B2D3176", "F c #37947B8831F1", "G c #37FB7BC33215", "H c #389B7CFA32C7", "J c #393B7D933351", "K c #396A7E4933A6", "L c #399D7E6233CE", "P c #3A497EA63443", "I c #3A627F3E3467", "U c #3AB77FB734C5", "Y c #3B1E7F8334EB", "T c #3B558051354B", "R c #3BFA80DF358E", "E c #3C4B8193363D", "W c #3CD881CC36DD", "Q c #3CE18264369E", "! c #3D56828C370D", "~ c #3D9F83553760", "^ c #3E2083A53786", "/ c #3E1B836737D9", "( c #3E868483384F", ") c #3F328478381F", "_ c #3F76855B3946", "` c #406B866739A4", "' c #40C4868F39B0", "] c #406B86AA3A20", "[ c #40BE874B39F4", "{ c #4127878B3A51", "} c #413487B73ADF", "| c #419488373B9B", " . c #4239888A3B0E", ".. c #421C88CD3BCB", "X. c #42A5897E3C79", "o. c #42CD897B3BFE", "O. c #43688A853C67", "+. c #434F8A9A3D0F", "@. c #43CF8ABE3C86", "#. c #44338B1C3CB2", "$. c #44258AFA3CEF", "%. c #44198B783D3A", "&. c #44E78BC23D59", "*. c #44238B893DD8", "=. c #449E8C243D57", "-. c #44B78C573DC5", ";. c #459D8C9C3DFD", ":. c #45A18CC13EDB", ">. c #45728D433F03", ",. c #45EB8DAB3E7C", "<. c #45CB8DB43F45", "1. c #468F8E5C3F19", "2. c #472E8EEC3F6B", "3. c #469E8F3D3F87", "4. c #47218E99402F", "5. c #46C28F113FD3", "6. c #47838FB84017", "7. c #48088FD5403A", "8. c #483E9025407D", "9. c #483B90BA4128", "0. c #492B9189416B", "q. c #4851916941E7", "w. c #49A291FB4231", "e. c #499A92A74254", "r. c #4A8A930C427C", "t. c #4A9B936C42B2", "y. c #4A98935B4329", "u. c #4B2393C6434C", "i. c #4AB794324367", "p. c #4B1794364376", "a. c #4B3294B84423", "s. c #4B7B952D44C5", "d. c #4BE194DA43F7", "f. c #4BF495374444", "g. c #4C5E95BB4504", "h. c #4D07960844FB", "j. c #4C6996214530", "k. c #4D2E9688454D", "l. c #4D7F979545AE", "z. c #4E12977F459C", "x. c #4CF6970E461D", "c. c #4D52975D4643", "v. c #4E2E97C54624", "b. c #4E3E985B4674", "n. c #4EDE987246BE", "m. c #4F71999146AD", "M. c #4E62986C46F0", "N. c #4F04990746FE", "B. c #4F8299724796", "V. c #4FF799B0475C", "C. c #50729ACC4848", "Z. c #505E9B394820", "A. c #51059B5D4880", "S. c #516B9BC64930", "D. c #51EB9BB04945", "F. c #51AA9C3B49AB", "G. c #523D9CBF497B", "H. c #52019CC149D7", "J. c #52BA9DBE4A96", "K. c #531F9DB34A66", "L. c #52BE9E374AAC", "P. c #53459E5B4A62", "I. c #53AD9E854B07", "U. c #54139F064B9E", "Y. c #54629F9B4B7C", "T. c #556CA01D4C18", "R. c #5562A0BF4C8D", "E. c #5580A1894CAE", "W. c #5598A1044D16", "Q. c #5530A1294CE4", "!. c #5601A1604C85", "~. c #562CA1924D04", "^. c #55D5A23C4D55", "/. c #566AA2CA4E3F", "(. c #5773A30E4E9C", "). c #5788A39F4E6A", "_. c #580EA3BB4E80", "`. c #5816A3D94EE4", "'. c #5862A49E4F15", "]. c #58B9A59C5055", "[. c #594EA5D35031", "{. c #59B4A66E5077", "}. c #59A1A6875105", "|. c #5A07A6855087", " X c #5A24A67B50FF", ".X c #5A73A7BF511C", "XX c #5B1FA7875156", "oX c #5B92A8B45260", "OX c #5BBFA92A52E7", "+X c #5C25A92352BF", "@X c #5C93A9C752C1", "#X c #5C99AA215307", "$X c #5C9DAA5D531F", "%X c #5D60AA9F537C", "&X c #5D66AAE95415", "*X c #5E17ABA3545B", "=X c #5E94ACCA554B", "-X c #5F5BAD065581", ";X c #5F94ADFC55B9", ":X c #5FC0AD9E55D8", ">X c #6006ADBE55E4", ",X c #6040AEC3568E", ".%.} ` ", "PXPXPXPXpXyXPXPXCXBXkXwX6XX*XOX}.).R.K.C.v.p.7.;.O.{ / E E I F A ", "PXPXPXPX%X@XPX=XdXgX9X-X%XoX]./.Y.G.B.k.t.6.&. .' ^ Y J J D N m ", "PXPXPXPX'._.D.[.rXyX,XoX{.).Q.L.Z.v.a.0.1.@.[ ) ! Y G Z C N z k ", "PXPXPXPX~.T.V.(.7X9X*X{.).R.J.C.l.i.9.<.O.[ ^ R P G B b n l d a ", "PXPXPXPXR.U.PX'.1X2X@X'.~.I.A.b.a.q.<.+.{ ( R J S N x h g a u r ", "PXPXPXPXPXS.PXR.*X*X{.!.K.C.l.i.9.>.X.] ~ T H C M l s p p t 8 6 ", "PXPXPXPXPXv.u.A.|.XX~.S.M.f.w.5.*.| _ W P F B v k a t w w 7 2 < ", "PXPXPXPXPXPXPXV.(.`.I.B.g.e.6.-..._ ! I G V n l d i q 7 5 1 : - ", "PXPXPXPXPXPXPXPXW.R.H.n.d.0.2.%.} ( E L S N c g a y 9 5 1 - & % ", "PXPXPXPXPXPXPXPXJ.F.N.d.0.1.#.{ ( E K D N c f p r 8 3 , = % @ O ", "PXPXPXPXPXPXPXPXB.v.d.0.,.O.] / T J A M z f p e 6 2 > = $ + X . ", "PXPXPXPXPXPXPXPXv.h.r.6.=. ._ W P G V n j a y 0 4 < ; * # o . ", "PXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPX", "PXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPX", "PXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPX", "PXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPXPX" }; qosmic-1.6.0/icons/silk/link.xpm000066400000000000000000000112741304321135200165500ustar00rootroot00000000000000/* XPM */ static char *link[] = { /* columns rows colors chars-per-pixel */ "32 32 115 2", " c #3B113B113B11", ". c #3C403C403C40", "X c #3D0E3D0E3D0E", "o c #3F153F153F15", "O c #437743774377", "+ c #44A544A544A5", "@ c #457145714571", "# c #469446944694", "$ c #474347434743", "% c #480C480C480C", "& c #4AA54AA54AA5", "* c #4D294D294D29", "= c #4EBA4EBA4EBA", "- c #4F5C4F5C4F5C", "; c #502550255025", ": c #511D511D511D", "> c #52D052D052D0", ", c #548054805480", "< c #550955095509", "1 c #563E563E563E", "2 c #572657265726", "3 c #583958395839", "4 c #592959295929", "5 c #5A0B5A0B5A0B", "6 c #5B915B915B91", "7 c #5C085C085C08", "8 c #601060106010", "9 c #615F615F615F", "0 c #624C624C624C", "q c #649F649F649F", "w c #65A565A565A5", "e c #664766476647", "r c #67BE67BE67BE", "t c #683068306830", "y c #699969996999", "u c #6A116A116A11", "i c #6B436B436B43", "p c #6C4F6C4F6C4F", "a c #6D1F6D1F6D1F", "s c #6E1C6E1C6E1C", "d c #6F806F806F80", "f c gray44", "g c #712471247124", "h c #726D726D726D", "j c #737473747374", "k c #745774577457", "l c #756675667566", "z c #761576157615", "x c #778B778B778B", "c c #783278327832", "v c #795B795B795B", "b c #7A1A7A1A7A1A", "n c #7B9B7B9B7B9B", "m c #7C367C367C36", "M c #7DAB7DAB7DAB", "N c #7EC67EC67EC6", "B c #7F907F907F90", "V c #808180818081", "C c #814D814D814D", "Z c #82D682D682D6", "A c #838A838A838A", "S c #857A857A857A", "D c #869B869B869B", "F c #876F876F876F", "G c #888B888B888B", "H c #897E897E897E", "J c #8A8F8A8F8A8F", "K c #8B6D8B6D8B6D", "L c #8C248C248C24", "P c #8EF28EF28EF2", "I c #8F828F828F82", "U c #91AE91AE91AE", "Y c #937293729372", "T c #946C946C946C", "R c #956295629562", "E c #978D978D978D", "W c #98B298B298B2", "Q c #998B998B998B", "! c #9AC09AC09AC0", "~ c #9BB69BB69BB6", "^ c #9CBD9CBD9CBD", "/ c #9D9E9D9E9D9E", "( c #9ED39ED39ED3", ") c #9FF49FF49FF4", "_ c #A0A2A0A2A0A2", "` c #A2AAA2AAA2AA", "' c #A4ADA4ADA4AD", "] c #A7F0A7F0A7F0", "[ c #A8ACA8ACA8AC", "{ c #A966A966A966", "} c #AA9CAA9CAA9C", "| c #AB5DAB5DAB5D", " . c #ACEEACEEACEE", ".. c #ADB4ADB4ADB4", "X. c #AF00AF00AF00", "o. c #AF91AF91AF91", "O. c #B042B042B042", "+. c #B2B0B2B0B2B0", "@. c #B4B2B4B2B4B2", "#. c #B857B857B857", "$. c #B9DAB9DAB9DA", "%. c #BA66BA66BA66", "&. c #BBFDBBFDBBFD", "*. c #BDC4BDC4BDC4", "=. c #BEFEBEFEBEFE", "-. c #C072C072C072", ";. c #C1D4C1D4C1D4", ":. c #C3C8C3C8C3C8", ">. c #C4E4C4E4C4E4", ",. c #CAE2CAE2CAE2", "<. c #CBD7CBD7CBD7", "1. c #D01CD01CD01C", "2. c #D374D374D374", "3. c #D501D501D501", "4. c None", /* pixels */ "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.M H E R A x 4.4.4.4.x Z R E J N 4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.S W ' .[ W L C 4.4.4.Y / } } / U Z 4.4.4.4.4.4.4.", "4.4.4.4.4.9 B ( :.3.2.,.&.{ P n c T %.,.1.<.=...E C 0 4.4.4.4.4.", "4.4.4.4., f T ..>.<.;.#.O.` P V b L o.=.*.%.@.} / K a < 4.4.4.4.", "4.4.4.4.q S +.%.Q M j h x B H G M b N m k g z D ~ E n e 4.4.4.4.", "4.4.4.= s L $.*.M % O : p S ! ( Y F m y ; + & d Q ! Z d ; 4.4.4.", "4.4.4.- j G _ 4.4.4.. 4 I +.=.-.#.X.' S 1 X 4.4.4.Y S k - 4.4.4.", "4.4.4.* g V H 4.4.4. 1 H ] o.o.| ' ~ B > 4.4.4.K V g * 4.4.4.", "4.4.4.% w l D 4.4.# o # 4 e a d s y 0 1 @ o # 4.4.F l w % 4.4.4.", "4.4.4.O 5 u A J l r 8 6 4 2 1 2 3 3 3 4 6 8 r l J A u 5 O 4.4.4.", "4.4.4.4.= 9 V T W Q E U G m s t i h M G U E Q W T V 9 = 4.4.4.4.", "4.4.4.4.$ 5 j S Y ^ ) ^ Y F x d j M H Y ^ ) ^ Y S j 5 $ 4.4.4.4.", "4.4.4.4.4.4.3 0 d c n m v k i 4.4.d z v m n c d 0 3 4.4.4.4.4.4.", "4.4.4.4.4.4.# = 7 q t y u r 4.4.4.4.t u y t q 7 = # 4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4." }; qosmic-1.6.0/icons/silk/magnifier_zoom_in.xpm000066400000000000000000000133041304321135200213020ustar00rootroot00000000000000/* XPM */ static char *magnifier_zoom_in[] = { /* columns rows colors chars-per-pixel */ "32 32 161 2", " c #2ECF6FE029D2", ". c #385A6E392947", "X c #2F5A71422A82", "o c #32DD740F2C74", "O c #37977A793192", "+ c #39B77CB13251", "@ c #5D187E3E3FAE", "# c #6601799B3A75", "$ c #95F75D4B1523", "% c #9AD9630B1C24", "& c #9CE166732087", "* c #85F8756B35CB", "= c #A5E96DEA2BC2", "- c #A66D70E22EEE", "; c #A7BB72A83115", ": c #A920744E338A", "> c #AD3D76DE3866", ", c #AB79790B3AA9", "< c #B36E7F2042D4", "1 c #3D6E835136D2", "2 c #410781A23713", "3 c #4208874E3995", "4 c #43E689483BA6", "5 c #4AC78A1C3DB8", "6 c #5C778508475F", "7 c #5DEF87CE4924", "8 c #4D59933143B1", "9 c #543F93C64311", "0 c #59A697374845", "q c #5BEE9A5B4B17", "w c #5D4B9D7A5361", "e c #61A29EE24E7E", "r c #5655A2724E33", "t c #5D53A36351C8", "y c #5DD9AC20551B", "u c #6773A1A04F67", "i c #63F6A4615284", "p c #6B33A5EB54E1", "a c #6351AEAD574D", "s c #653EADE2591F", "d c #6D5FACE95C95", "f c #70B9A8BE56B5", "g c #74BCACCD5C20", "h c #7AB2AF995E75", "j c #64C3B4905A8C", "k c #6AB0B43B5B42", "l c #6FE9B9315F85", "z c #727DB5B05FD4", "x c #55B190BD64CA", "c c #5DE998A7664F", "v c #60D69CE96047", "b c #6DD8918B6B1F", "n c #68C9A72967AD", "m c #6BD3B6FD6255", "M c #6C17BA466036", "N c #72FEB6086739", "B c #7CDAB38062BD", "V c #7418B9B8627E", "C c #7DFDB9486774", "Z c #70F1AE2D75D8", "A c #7763BA9A7666", "S c #7565B4477D54", "D c #75A3BB277AF5", "F c #B5A382E24800", "G c #B916864F4CF9", "H c #A9CA8E4457C7", "J c #B826869053A6", "K c #BC3B8B725305", "L c #AF519FA46EE9", "P c #A42E9A687829", "I c #BEE598ED73DE", "U c #84AEB6776694", "Y c #8498BB866A60", "T c #8A29BA576C60", "R c #8F89BE6970AB", "E c #91B7BEBD7231", "W c #B020A1F670EB", "Q c #C2CA8F7F5A04", "! c #C1E893505D09", "~ c #C69A9903663A", "^ c #CA8E9D476AD7", "/ c #CDC7A19C7161", "( c #D310A5D77854", ") c #D373A9207AED", "_ c #8B1CC1F07063", "` c #961AC2AF7668", "' c #7628B459802E", "] c #7B13BDBE8049", "[ c #7F19C1298451", "{ c #77719815C2F4", "} c #75D09C89CED6", "| c #79CF9FC1D05F", " . c #7D0FA380D2AD", ".. c #9E5194198DCE", "X. c #95879BBA9E0C", "o. c #B895B02B84FA", "O. c #B90CB0CD8504", "+. c #827D93A9AC4A", "@. c #8960A63AB018", "#. c #8A0DBD8AA066", "$. c #8CEAA122BD46", "%. c #8FEDB520BF17", "&. c #8C3DBE28B8CE", "*. c #D682AD728123", "=. c #DB33B34D89ED", "-. c #DFB7B8FA91E5", ";. c #E2F5BE41994C", ":. c #8716C6A28804", ">. c #92CFC985A35E", ",. c #9902C1DBAA6E", "<. c #9E44CD0AB34E", "1. c #8BBFA97BCFD7", "2. c #8163A6A6D4F5", "3. c #8593AA30D740", "4. c #8CB9AEACD908", "5. c #8F19B083DA06", "6. c #953BB619DD7E", "7. c #9FCFB8FBDACD", "8. c #9CD0BD37E3E7", "9. c #A6AFC6FDC8D7", "0. c #A792CD94CF5A", "q. c #A84DCEC1CE2E", "w. c #AA6CD0C8CEE0", "e. c #A03FC748D105", "r. c #ACB5CFABD972", "t. c #AE31D257D19A", "y. c #AF19D114D9E7", "u. c #B265D55BD2F3", "i. c #B828D9F9D490", "p. c #B60ED78EDC30", "a. c #A511C2E9E60B", "s. c #AF21C810E6DB", "d. c #AD48C8D2E847", "f. c #A66FC65EEA95", "g. c #A91BC6B6EE0D", "h. c #AC64CB05ED76", "j. c #B3AECEB7EDC4", "k. c #B7DDD2FAEC06", "l. c #BC1ED44CEDF1", "z. c #AE88CF18F1C4", "x. c #B5E6CE53F0E2", "c. c #B500D3B2F491", "v. c #BBD8D6B6F367", "b. c #BEECD972F575", "n. c #B966D80CF88F", "m. c #BA8ED920F9B0", "M. c #C10BDEDBD704", "N. c #C13CDCE5DD03", "B. c #C226DC35EDB0", "V. c #C487DCBBF617", "C. c #C97BDF51F5E2", "Z. c #C437DE0CF9CC", "A. c #CA0FDFB8FA7D", "S. c #CD73E233F6EC", "D. c #CE5DE350FA67", "F. c #D3F7E5D9F7BD", "G. c #D827E8A9F872", "H. c #D5E5E6E6FA0B", "J. c #D7A9E8F0FA77", "K. c #DC7DEAF1F9CA", "L. c None", /* pixels */ "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.m.n.n.c.c.c.z.z.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.Z.Z.Z.Z.Z.V.V.b.v.v.c.h.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.Z.A.D.H.J.J.G.G.H.F.C.b.j.g.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.Z.A.D.H.K.K.K.K.K.K.K.F.C.k.e.&.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.Z.A.D.J.K.K.G.F.F.F.F.F.H.J.N.>.D m j a y L.L.L.L.L.L.L.L.", "L.L.L.Z.D.H.K.K.G.F.S.S.S.S.S.H.K.M.:.M V m a y L.L.L.L.L.L.L.L.", "L.L.n.Z.F.K.K.G.F.S.S.S.C.C.A.D.H.i.[ l _ T s r L.L.L.L.L.L.L.L.", "L.L.n.V.H.K.G.F.S.S.S.C.C.B.p.u.u.<.A V ` ` d r L.L.L.L.L.L.L.L.", "L.L.c.V.G.K.F.S.S.C.C.C.C.p.>.[ ] A N C ` E g t 8 4 3 3 L.L.L.L.", "L.L.c.b.H.K.F.S.C.C.C.C.Z.t.[ k k z C Y E R B p q 8 4 1 L.L.L.L.", "L.L.z.v.F.K.S.C.C.V.V.V.Z.w.D k Y R R R E T U B g e 4 + L.L.L.L.", "L.L.h.v.F.K.S.C.V.V.V.V.Z.q.S s B T T T T U B g p q 2 o L.L.L.L.", "L.L.g.c.S.G.S.C.V.V.V.V.V.0.' t t i p g B h p 0 5 2 o o L.L.L.L.", "L.L.f.j.V.F.F.S.C.V.V.b.b.r.#.S Z n w e g f 0 3 + o X L.L.L.L.", "L.L.L.h.l.V.F.F.S.V.b.b.v.k.y.t.u.,.v 9 p u 5 O L.L.L.L.L.L.L.L.", "L.L.L.f.d.k.C.S.S.C.V.V.V.V.V.A.A.9.c 3 9 9 + o L.L.L.L.L.L.L.L.", "L.L.L.L.8.a.j.l.C.S.D.D.S.S.S.V.x.%.x + + O o . L.L.L.L.L.L.L.L.", "L.L.L.L.L.8.a.d.k.l.l.l.l.l.k.s.7.@.b 7 7 6 @ # * L.L.L.L.L.L.L.", "L.L.L.L.L.L.6.6.6.6.6.6.6.5.4.1.$.X.P W O.o.L H , = L.L.L.L.L.L.", "L.L.L.L.L.L.L.3.3.2. . .| } } { +...I ( -.;.=./ G > L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.J Q ^ *.-.=.^ G - % L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.< K ~ *.=.) ! ; % L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.> F ! / *.^ : $ L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.: < K ^ ! - $ L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.= ; , : & L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.% % % L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L." }; qosmic-1.6.0/icons/silk/magnifier_zoom_out.xpm000066400000000000000000000130241304321135200215020ustar00rootroot00000000000000/* XPM */ static char *magifier_zoom_out[] = { /* columns rows colors chars-per-pixel */ "32 32 153 2", " c #EBBB12C41D5F", ". c #ECE51A672383", "X c #EE73232D2B21", "o c #ED772BFF3279", "O c #F1612F433565", "+ c #E7FF2FF7368A", "@ c #ECD932C537E8", "# c #EC5E39883D81", "$ c #F36935F63AC2", "% c #95F75D4B1523", "& c #9AD9630B1C24", "* c #9CE166732087", "= c #A5506DD72BA6", "- c #A67270E22EEF", "; c #A7BB72A83115", ": c #A920744E338A", "> c #AD5376E1386B", ", c #ACF17848392E", "< c #B1FA7C3D3E1F", "1 c #ED933E8D4212", "2 c #F52F3DED419C", "3 c #B36E7F2042D4", "4 c #ADF973BB7AA9", "5 c #DE4741714852", "6 c #DB5D4EBC5707", "7 c #EF64427F4541", "8 c #F1D149C24AAB", "9 c #F3C650014F63", "0 c #EED54D525343", "q c #F0714F89501D", "w c #EA525AC5590D", "e c #F395565F5530", "r c #F52D5C8F5A6A", "t c #EB9E61C25F04", "y c #F6D6628D5FA1", "u c #DE385A4264DA", "i c #E3DA5F9B69CC", "p c #E434657C6FD7", "a c #F850669863AB", "s c #F83C68036468", "d c #F8E66BDF68EB", "f c #EA4A759A6F51", "g c #FAA974096E97", "h c #E3EE6E137802", "j c #EC4E7B767404", "k c #EC62706F780D", "l c #FC7D79407372", "z c #B5A382E24800", "x c #B8C6853B4B9D", "c c #B6B985D8512D", "v c #BB708B5053FB", "b c #BD3C981870FD", "n c #C0F18EAB57B7", "m c #C25592D15CFE", "M c #C69A9903663A", "N c #C9E19D0C6A69", "B c #EF2A80D377A0", "V c #EE2782F57A1B", "C c #F0CA852D7AAD", "Z c #F36488EE7DBF", "A c #CCADA1767127", "S c #C247A0B37BE6", "D c #D079A4B0751D", "F c #D0AAA67D789E", "G c #D4C5AA897D2E", "H c #EE007AB580CF", "J c #777C981BC306", "K c #75D09C89CED6", "L c #79CF9FC1D05F", "P c #7D0FA380D2AD", "I c #9DB593C98CB4", "U c #A2B499AA8F42", "Y c #AA0F835B91D5", "T c #B2FCA1C291C4", "R c #B7EBAB0D9E31", "E c #828F93B2AC68", "W c #9A459E1FA6A0", "Q c #AD028F5BAE69", "! c #AF399511AD62", "~ c #9DAEA392AABE", "^ c #8C69A0E3BC71", "/ c #9C15A8A3BB2D", "( c #AF55AB73AB44", ") c #B526A2FBBF2B", "_ c #EC4285E08C1B", "` c #EC6A89648F2E", "' c #F1CF8371874E", "] c #F2C68D838138", "[ c #F8A58F4482D3", "{ c #F18387918B7B", "} c #F0B48C168FE8", "| c #F3E492CB8559", " . c #F556999A8AB7", ".. c #EEC192279614", "X. c #C9CBAD69900D", "o. c #D5BDAD3480C6", "O. c #DA5BB4428B19", "+. c #CEC3B42A99A7", "@. c #DD75B82F90BF", "#. c #DFB2BD0F9740", "$. c #DDEFBF419E7B", "%. c #DD2F9E2DAAC9", "&. c #E381A887B19E", "*. c #8B6FA953CF52", "=. c #9DA4AD9AC135", "-. c #97BFAD87CA12", ";. c #98CEB225CDCB", ":. c #8163A6A6D4F5", ">. c #8593AA30D740", ",. c #8CB9AEACD908", "<. c #8BC2B19EDCC7", "1. c #9E51B83ED852", "2. c #9550B5F2DCE9", "3. c #BDA4A79AC134", "4. c #8CEDB55BE0C9", "5. c #9D51BDBEE40F", "6. c #CF97B982CC21", "7. c #D374B9ADCBFC", "8. c #CDA7BF96D3D1", "9. c #9C25C077E66C", "0. c #A3AEC2C7E62D", "q. c #AE31C79AE54D", "w. c #AD48C8D2E847", "e. c #A6AFC651EA87", "r. c #AC75CA9EEC94", "t. c #B2F6CEDFED86", "y. c #B82DD0F2EC6F", "u. c #BC72D3E3EE58", "i. c #AE88CF18F1C4", "p. c #B500D3B3F493", "a. c #BBD3D6AEF2D2", "s. c #BE84DABCF60A", "d. c #B966D80CF88F", "f. c #BA8ED920F9B0", "g. c #C703C5C9DCC6", "h. c #C975C727DD2D", "j. c #CF49CCCDE008", "k. c #D2F9C3F9D5C0", "l. c #DAAAC43ED336", "z. c #CA22D8CDEEE9", "x. c #C457DD55F617", "c. c #C9C1DF6BF5A1", "v. c #C3F1DE62FA22", "b. c #C857E054FA43", "n. c #C75DE0CAF83F", "m. c #CD4FE242F6E6", "M. c #CD73E429F9DE", "N. c #D421E5E4F7BC", "B. c #D827E8A9F872", "V. c #D556E716F95A", "C. c #D777E950FABD", "Z. c #DC89EB05F98E", "A. c None", /* pixels */ "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.f.d.d.p.p.p.i.i.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.v.v.v.v.v.x.x.s.a.a.p.r.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.v.b.M.V.C.B.B.B.V.N.c.a.t.e.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.v.b.M.V.Z.Z.Z.Z.Z.Z.Z.N.c.a.r.0.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.v.b.M.C.Z.Z.B.V.N.N.N.N.N.V.c.u.w.5.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.v.M.V.Z.Z.B.N.m.m.m.m.m.N.C.N.x.t.9.4.A.A.A.A.A.A.A.A.A.A.", "A.A.d.v.N.Z.Z.B.N.m.m.m.c.c.n.n.M.M.M.a.9.<.A.A.A.A.A.A.A.A.A.A.", "A.A.d.x.V.Z.B.N.m.m.m.c.c.z.j.k.k.l.l.6.) Q A.A.A.A.A.A.A.A.A.A.", "A.A.p.x.B.Z.N.m.m.c.c.c.x.j.&...} { ' H h i 0 2 $ O o X A.A.A.A.", "A.A.p.s.V.Z.N.m.c.c.c.x.v.k...l l l g d s y r e q 7 o X A.A.A.A.", "A.A.i.a.N.Z.m.c.c.x.x.x.v.k.` l [ .| | ] Z V V j t @ . A.A.A.A.", "A.A.r.a.N.Z.m.c.x.x.x.x.s.8._ g Z | ] Z C B j j f w o A.A.A.A.", "A.A.r.p.m.B.m.c.x.x.x.s.s.8.` d a y r e 9 8 7 1 # o . A.A.A.A.", "A.A.e.t.x.N.N.m.c.x.x.s.s.g.%._ H k p u 6 5 + X . A.A.A.A.", "A.A.A.r.u.x.N.N.m.x.s.a.a.u.h.k.l.7.3.! Y 4 A.A.A.A.A.A.A.A.A.A.", "A.A.A.e.r.y.c.m.m.c.x.x.x.x.x.v.x.a.0.;.~ U A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.5.0.t.u.c.m.m.M.M.m.m.x.t.0.2.=.R S v < A.A.A.A.A.A.A.A.", "A.A.A.A.A.5.0.w.y.u.u.u.u.u.y.q.1.-./ ( +.G m x A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.2.2.2.2.2.2.2.<.,.*.^ W T X.$.#.F m < = A.A.A.A.A.A.", "A.A.A.A.A.A.A.>.>.:.P P L K K J E I b D O.#.O.A x > A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.c n N o.@.O.N x - & A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.3 v M o.O.G m ; & A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A., z m A o.N : % A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.: 3 v N m - % A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.= ; , : * A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.& & & A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A." }; qosmic-1.6.0/icons/silk/map.xpm000066400000000000000000000172751304321135200163770ustar00rootroot00000000000000/* XPM */ static char *map[] = { /* columns rows colors chars-per-pixel */ "32 32 254 2", " c #4A7452CC4935", ". c #4E9158D94D92", "X c #508758F64F62", "o c #52E05A5A50E7", "O c #5684623C5583", "+ c #5924625E57BA", "@ c #5BF366915A6F", "# c #5D3669175B72", "$ c #60BA6A595EE5", "% c #627E6B9760D9", "& c #DB9E5FC24995", "* c #DBDE65FE4D98", "= c #CAF378F559AD", "- c #D35E7710559E", "; c #D5197C4C5379", ": c #EDB7748D57E9", "> c #EE877B915B8E", ", c #F79E7A495DB2", "< c #D9937A4B6170", "1 c #EBAB7E666231", "2 c #7703815675B8", "3 c #7840811876A2", "4 c #B9208CA25F04", "5 c #BCC794E05BDE", "6 c #BBF298BB5981", "7 c #BDE3ACE7598F", "8 c #814C8D4B7F0E", "9 c #BA859FD86D3A", "0 c #9DB2B5656B6D", "q c #9AC5BDE2733B", "w c #A9A9A42062BE", "e c #BCFFA4716520", "r c #B6F5A80F6A51", "t c #A64BB48A6BF3", "y c #BD29A6227120", "u c #BCBDAE0673D2", "i c #A6B8B93A75A2", "p c #B198BB6678B9", "a c #C7268B665793", "s c #D3128AB258A6", "d c #C99596F35B4C", "f c #D7B698A85957", "g c #E74485F95972", "h c #ED458B265EE9", "j c #E5869E125BCD", "k c #DC8BAA1B59FA", "l c #C4ECBA9056E8", "z c #D294BF4457A0", "x c #E631A4D45D6D", "c c #C9128DE566A3", "v c #D54E875762A4", "b c #DD2E84266B4C", "n c #CE9E975569A6", "m c #D4098D407041", "M c #F03D86576223", "N c #F7B682B96478", "B c #F7A58ABA682F", "V c #EC629B7C64F4", "C c #EEF399D0694C", "Z c #DCADB8AB69E6", "A c #C96AA8E17B62", "S c #D8A5A692713B", "D c #CC89B09D7D79", "F c #D259BEC170DA", "G c #EC1AA7BA6695", "H c #F62DA2516F12", "J c #E9DEBA6F6A25", "K c #E26EA9D47567", "L c #EB53BC34749D", "P c #F413BB9D786F", "I c #93C9C6B87582", "U c #9BE2C21274A9", "Y c #98F7CB3C7996", "T c #9C32CC327D05", "R c #BAFEC46C6967", "E c #A6A7C95A79D5", "W c #A380CDE17F66", "Q c #A515D09A7E28", "! c #B9C5D6057AFD", "~ c #CE06CE114F56", "^ c #CEC9C62C5E9B", "/ c #D1ADCDBD5FB7", "( c #D31AD47759E8", ") c #C553CB3E68E7", "_ c #DB9DC0536D6E", "` c #CE2FD28E669D", "' c #DA0BD62F6695", "] c #DC0EDCAB640D", "[ c #D681D98A6B72", "{ c #C609CBE47798", "} c #DA16C8B577C2", "| c #CDA0D5EC7A95", " . c #D782D7737A0F", ".. c #E4C7C7E26949", "X. c #E2DADDBD6E63", "o. c #E9EDC92D7414", "O. c #F4C4C58E7BBD", "+. c #E937D987775D", "@. c #F336D0E077E1", "#. c #E32CE47F6B94", "$. c #EAB7EB9D76BC", "%. c #E483E4A07DDF", "&. c #EC58E0FE788C", "*. c #73479C79D57A", "=. c #78D09F27D51A", "-. c #72299D43D973", ";. c #7C8CA2EDD7B6", ":. c #7C77A49CDC04", ">. c #845B8EDA830B", ",. c #85C4906484F4", "<. c #BCB9BAD281E0", "1. c #ABDCB8F0A9D2", "2. c #A64EBAA6BA8F", "3. c #B699BC95B622", "4. c #E288993487C0", "5. c #FD229E96899F", "6. c #C97EB4748A46", "7. c #DC6EB79180F5", "8. c #C150BE0E9168", "9. c #F94DB1758DCE", "0. c #9D62CC96828E", "q. c #A159CDBB86AC", "w. c #A832CBE88903", "e. c #BCF6C68F87F7", "r. c #A301D3898420", "t. c #ABD8D35C88F4", "y. c #AA58D6338BF9", "u. c #B888DB808E70", "i. c #B743C8759713", "p. c #BF0BCCC19CA4", "a. c #A451D24A9099", "s. c #AB88D44C93F6", "d. c #B229D6509B8D", "f. c #B361D8A19E4E", "g. c #B5C3C2F7A1B0", "h. c #B706D796A293", "j. c #BC62DCC4A912", "k. c #ABE3C1ACBC66", "l. c #B7AAC796B0FD", "z. c #BE7FCA19B625", "x. c #BD04CEE7BA76", "c. c #BE4CD0B0BC26", "v. c #C078C8DE8002", "b. c #DA98CB6C8504", "n. c #CB83D364808D", "m. c #C65AD11B8E73", "M. c #D3C4D8C58401", "N. c #C39DC7CF9220", "B. c #CC10D49B9352", "V. c #C6EDDEF7955C", "C. c #D425D8E1950C", "Z. c #F205DF5C8A6F", "A. c #F49FD7B599B3", "S. c #DB4BE66E8B90", "D. c #CE99E55D9685", "F. c #D8A8E55199F3", "G. c #E482E4438318", "H. c #EBD5E5838313", "J. c #EBDBEBF6854E", "K. c #E61DE4BB89AB", "L. c #E63DE9508BC0", "P. c #EBDEEB3A8BDB", "I. c #F372E67588AF", "U. c #F404F0948F96", "Y. c #E3E9E5AC942B", "T. c #E706EA0C92A6", "R. c #ED29ECB59605", "E. c #EE5EED549B3E", "W. c #F37AF33C93B6", "Q. c #F37CF31A9B50", "!. c #C9D5D4CAA728", "~. c #C5B3CC5FB994", "^. c #C08DD115BDF9", "/. c #DD8BD57DB4C0", "(. c #DBFAD989B6DB", "). c #D693DC85BCC6", "_. c #E938CE89BE1B", "`. c #C43DE53FAF90", "'. c #CBB7E615B417", "]. c #CDCBE53FC032", "[. c #DE19EA2CBC30", "{. c #E991ECFDA519", "}. c #F3B7F498A3FE", "|. c #F3A1F457ACE9", " X c #F8CFF546AAA0", ".X c #F985FAB9B37C", "XX c #F7DAF8C1BA39", "oX c #91D2AEC0CDA8", "OX c #82FFA625D6C3", "+X c #89F2AC51D382", "@X c #8189A769DB96", "#X c #865DA93FDAF3", "$X c #8BEDAD82DCA2", "%X c #90E7AEFADA39", "&X c #9293B382D391", "*X c #9023B25DD5F9", "=X c #941BB2CCDDFD", "-X c #9BBBB5D9DC4D", ";X c #9CCEBC4BDB2D", ":X c #AB58BEE0C469", ">X c #A383BB39CCDB", ",X c #A2C3BD6BDCC6", ".>.>.,.,.,.,.>.>.>.>.>.>.,.,.,.,.>.>.>.>.>.>.>.>.>.2 # . ", "O 3 3.jXjXjXjXjXjXjXjXjXjXjXjXjXjXjXjXhXsXsXsXsXsXsXsXsXsX1.2 O ", "@ >.jXPXPXHXCXNXNXNXCXHXHXCXCXVXLXLXKXKXDXSXSXAXAXAXAXSXLXpX>.@ ", "@ >.jXJXMX XA.9.5.9.A.}. XQ.G.C.fXiXyXtXtXtXeX4X4X4X2XeXZXx.8 # ", "# >.jXHX.XI.o.G , N J &.J.$.( R k.3X$X$X1X1X@X:.:.:.-.$XwXx.8 $ ", "# >.jXHX|.H.+.J > : j ..+.#.~ R 1.&X+XOX$X$X;.=.;.=.*.+XwXx.8 $ ", "# >.jXHX|.J.%.o.C > g x +.#.( ) i.2.oX$X=X=X#XOX@X;.=.*XgXx.8 $ ", "# >.jXHX.XW.J.+.O.H > h @.$.] ` m.l.>X3X4X4X2X$X2X.jXHX.XW.J.H.I.P > > P &.] [ | p.>X4XeXeX3X=X2X2X$X;XvXx.8 $ ", "# >.jXHX|.P.%.%.H.o.g : V J ' ( ` e.2.-X4X4X=X%X=X$X#X;XgXx.8 $ ", "# >.jXHX|.P.G.%.J.+.V g h G ..] ( { 2.-X5X5X-X=X-X=X$X,XvXx.8 $ ", "# >.jXHXXXQ.P.P.W.I.o.G N B o.X.] n.l.9XuXuXeX5XeX5X4X0XbXx.8 $ ", "# >.jXJXXXQ.P.P.W.U.H.L B N G o.X. .p.8XuXiXrXrXrXrX5XuXbXx.8 % ", "# >.jXHXXXR.K.G.P.P.%.o.C M h G ..[ v.g.qXuX6X,X6X5X5X0XbXx.8 % ", "# >.jXJXXXE.K.K.P.P.G.+.L C > g ..[ ) e.8XuX9X7X7X7X:X8XnXx.8 % ", "# >.jXJXMX}.R.R.Q.Q.P.H.Z.P 1 1 L .` n.pXfXpX~.!.!.N.!.xXx.>.% ", "# >.jXJXMX}.R.R.Q.Q.L.S.S.b.b < K } / | !.aX!.B.C.M.} b.[.x.8 % ", "# >.jXJXXXE.Y.Y.R.T.M.! ! p 4 = v n l ) B.B.{ ` .} Z 7.(.z.8 % ", "# >.jXJXMX{.Y.Y.Y.S.! E T U w 4 < v 7 R n.| ^ z Z Z S K /.z.8 % ", "# >.jXJXMX|.{.F.D.u.Q T r.Q U r b b e R | .Z k j f d D (.z.8 % ", "# ,.jXJXMX{.F.V.u.y.T Y r.r.Y i m b c e F _ k f f d e <.).x.8 % ", "# ,.jXGX[.V.t.W r.W I I T T I q y c = - s f a 6 r t 0 w.].x.>.% ", "# >.hXFX'.u.T I T T I I T T q 0 r c * & - a 6 w i I I a.kXc.>.% ", "# >.sXBX`.y.0.T r.r.Y Y r.W t w d ; * * v y i q T 0.Y s.lXx.>.% ", "$ >.sXBX`.s.q.q.y.y.0.T w.p r 6 d s - - m A i 0.0.0.0.s.kXx.>.% ", "$ >.sXBX'.d.w.w.s.s.q.E p y 5 5 y u 9 c b m p 0.q.q.0.s.kXx.8 % ", "# >.sXFXxXj.h.h.j.j.f.i.N.6.A D N.p.i.6.4.4.8.d.f.f.d.j.cXx.8 % ", "# >.sXFXmXcXlXlXcXcXlXkXzX).).).zXxXzXdX_._.).kXlXxXxXcXmXx.8 $ ", "+ 3 1.pX^.x.x.x.x.x.x.x.x.c.c.c.c.c.c.^.~.~.z.z.x.x.c.^.c.1.2 @ ", "X # 3 >.8 8 8 8 8 8 >.>.>.>.>.>.>.>.>.>.>.>.8 8 8 >.>.>.8 2 $ o ", " X + # $ % % % % % % % % % % % % % % % % % % % % % % % $ @ o " }; qosmic-1.6.0/icons/silk/monitor.xpm000066400000000000000000000103671304321135200173040ustar00rootroot00000000000000/* XPM */ static char *monitor[] = { /* columns rows colors chars-per-pixel */ "32 32 94 2", " c #655265526552", ". c #6D056D056CFE", "X c #7493748F747A", "o c #7AA87AA47A9A", "O c #48376F21A6D5", "+ c #49EB70AEA7E7", "@ c #4D557449ABAF", "# c #511C7766AE03", "$ c #52A878F3AF3E", "% c #54DA7B60B18B", "& c #59FE7E8FB28D", "* c #5B1881E3B92C", "= c #69A685C5AEA6", "- c #6A7186DFB071", "; c #6E1B8AA1B41C", ": c #612587AEBE6E", "> c #61FA88A2BF39", ", c #70188C54B568", "< c #64D08C20C2B2", "1 c #68C98F54C44F", "2 c #6B2A91AAC75C", "3 c #6D609467CA81", "4 c #70D4971CCB9F", "5 c #734B9983CDEF", "6 c #7B4F9D4ECC8F", "7 c #759C9D30D2BE", "8 c #79BC9EB1D1BA", "9 c #7D26A327D613", "0 c #857D857A8574", "q c #87C087BE882D", "w c #8D208D118D2A", "e c #8FC48FEF9099", "r c #94359401940E", "t c #9BDA9BD19BE3", "y c #A03D9FDB9FB5", "u c #9F229F5CA08E", "i c #879F9D56BD5B", "p c #8B27A0DEC009", "a c #A4ABA472A4C2", "s c #A66FA6E3A844", "d c #AC53AC30AC4E", "f c #B038B038B022", "g c #AFEFB029B137", "h c #A450ADDCBC7D", "j c #AFCFB06CB3A5", "k c #A7B3B0BAC02E", "l c #B436B438B47B", "z c #B839B7EDB86D", "x c #BC72BC4DBD26", "c c #8C69A22FC1E8", "v c #8363A20ACCE5", "b c #8313A677D684", "n c #8671A88AD76A", "m c #8A5EAAA3D777", "M c #8310A7D3D8B6", "N c #872DAA70D9CF", "B c #8CBCAC86D8BE", "V c #9145AEE3D7A3", "C c #9141AFA3DA03", "Z c #950EB24CDA8A", "A c #9934B535DB82", "S c #ABECB51EC4AD", "D c #AF38B846C729", "F c #AE2CB7E5C8BA", "G c #AE80B83CC910", "H c #BFACC019C3DA", "J c #B4B5BE2FCE16", "K c #B94AC030CC4F", "L c #C09CC014C1E6", "P c #BFC1C09EC4B9", "I c #B6C6C07CCFA3", "U c #B70BC0D7D08A", "Y c #BAECC470D38C", "T c #C41EC3EFC4A8", "R c #C529C541C962", "E c #C8DEC7FACA76", "W c #CC1ECC00CC89", "Q c #C1E6C954D3E5", "! c #CE9CCF1CD37F", "~ c #C61DCD5AD922", "^ c #C8B2D03CDBAE", "/ c #C8ABD0BFDC34", "( c #D507D4E0D551", ") c #D546D5DED8E8", "_ c #D892D849D961", "` c #DBC0DB8EDC31", "' c #D9EADC75E0AE", "] c #DFF8E169E446", "[ c #E3AAE3D0E49C", "{ c #E5DEE6D3E957", "} c #EDB5EDD6EEEE", "| c #EF63EFA7F112", " . c #F0AAF0DCF1E4", ".. c None", /* pixels */ "...._ _ ) ( ( ( ( ( W W W E E T T T x x x z z l l f d d d d ....", "...._ _ ` ` ` _ _ ( ( ( ( ( W W W W E E T T T T x x x z d s ....", "....( ` [ { [ ] ` ` ` ` ` ` ` ` ` ` _ _ _ ) ) ( ( _ ` ! l a ....", "....( ` { { / Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y U ~ ] _ l t ....", "....( _ [ ^ c ; ; , , ; ; ; ; ; ; ; ; ; ; ; ; ; ; c ~ ( d t ....", "....( ) ` Y ; O @ # $ $ & & & & & & & & & & & $ + ; U W d t ....", "....W ( ` Y ; @ & > < 2 6 v v v v 6 6 6 6 6 6 1 $ ; J W s r ....", "....W ( ` Y , # : 2 4 6 n V A A Z Z B B m N N 5 & ; J E s r ....", "....E ( ` Y , # : 2 3 4 6 n V Z Z C B m n M M 4 % ; J E a w ....", "....E W ` Y , # : 2 2 3 5 6 n B B B B n b b b 4 % ; J E a w ....", "....T W ` Y ; # : 2 2 3 3 5 8 b n m B m n M b 3 % ; J R t q ....", "....T W _ Y ; # > 2 3 3 3 3 5 8 9 b n N n M b 4 % ; J T t 0 ....", "....x E _ Y ; # > 2 3 3 3 3 4 5 5 8 9 b b b b 4 % ; J T t 0 ....", "....x E _ Y ; # > 3 3 3 3 3 3 4 5 7 8 9 9 9 9 4 % ; J T r 0 ....", "....x T ) Y ; # < 3 3 3 3 3 4 5 5 7 7 7 8 9 9 3 % ; J L r o ....", "....z T ) Y ; @ * < < < < < < < 1 1 1 2 2 2 2 < @ ; J H r o ....", "....l T ) Y ; O @ $ $ $ $ $ $ $ % % % % % % % @ + ; J T r X ....", "....l x _ ~ p ; ; ; ; ; = = - - - - = = - ; - - - i Y T w X ....", "....d x _ ' Q J J J I J S k S G F S h h D J D S S K ) H w X ....", "....d z W ( W W W W W E L x T E R T z z x T x x x x T d 0 . ....", "......d l l l d d d d s a s l l l d y r r r r r w w w q o ......", "........a t t t t r r w w t d l l s w o o o o X X X . . ........", "......................w q t l T W z e X X ......................", "......................t t s x E ! P u w q ......................", "................w r a g z x H R R H x j a r o . ................", "................r u z W ( ( ( ! ! ! ) ( T d q X ................", "................t l ` } } } } } } } | .} ( a 0 ................", "................t d W ` ` _ _ ) ( ( ( _ _ T t 0 ................", "................w r t t t r r r r w w w w q o X ................", "..................o o X X X X . . . ..................", "................................................................", "................................................................" }; qosmic-1.6.0/icons/silk/page_add.xpm000066400000000000000000000154071304321135200173410ustar00rootroot00000000000000/* XPM */ static char *page_add[] = { /* columns rows colors chars-per-pixel */ "32 32 211 2", " c #340068961649", ". c #34B369041928", "X c #346C68C02469", "o c #341D68A42E87", "O c #3EA274E91FA3", "+ c #341968353737", "@ c #3C547250373E", "# c #4466796321DE", "$ c #413C775727B2", "% c #4A4B7D77290B", "& c #413676383608", "* c #4C357E72312C", "= c #47167A9937EA", "- c #33DC67D343FF", "; c #3DEE7376490E", ": c #32F267CB5177", "> c #3C4E718E69DF", ", c #307966447AAE", "< c #466F7D606289", "1 c #4C5E80492C61", "2 c #4CFB84BF37D6", "3 c #51AD824932D3", "4 c #56E08D29351D", "5 c #58E68F432FC7", "6 c #53A48A5C39EA", "7 c #5AFC89703C0C", "8 c #5B71912531C9", "9 c #655098263E85", "0 c #69EE9FF53CBF", "q c #531F874C4A7E", "w c #5CB291FC44F8", "e c #45DF82A25600", "r c #4FD083B75F64", "t c #54148ADC5C4C", "y c #66C290F648E9", "u c #6C6A9DE749A2", "i c #60A78E695352", "p c #6E6297165232", "a c #73069BF45B21", "s c #78BC9E855E5B", "d c #6CFDA1C04191", "f c #6F7EA0C84863", "g c #70CEA1EA48D2", "h c #7558A4925653", "j c #7F9CABEE5C68", "k c #7F62B25553AD", "l c #5A658F736413", "z c #57EB8FCE6C9F", "x c #5B7090B7680D", "c c #799B9FAA64C2", "v c #6B17950B7BC1", "b c #722298DE7AAD", "n c #7E46A2956553", "m c #7D5DA11B7508", "M c #7D36A1A578CF", "N c #80BDAD305C91", "B c #80FFB2965637", "V c #8376B5615997", "C c #8753B8A05DF5", "Z c #800FA44B678B", "A c #8D8CB53A6DD2", "S c #8134A2C073DC", "D c #85D0A94273F0", "F c #82B1A5AD7F9A", "G c #8BC2B24472B0", "H c #921BB7EF729A", "J c #9566BCC9732C", "K c #9749BBE47888", "L c #9C0CBEE27F29", "P c #9B98C5A9777A", "I c #9D90C5387A39", "U c #2CD86422A731", "Y c #2ADA622EB97C", "T c #329F6D58BDDC", "R c #3E1B7BCBB47B", "E c #35E47301BF82", "W c #3F6C77E7BF0C", "Q c #41537A258F5A", "! c #42CC755F9884", "~ c #4CDF7C0EB7A0", "^ c #38F176CDC198", "/ c #3D527C56C494", "( c #436C7514C13A", ") c #407E7E22C378", "_ c #524284CB882F", "` c #6B759CE983FB", "' c #633594A1BBB7", "] c #451584BAC4D6", "[ c #497C87E8C5BB", "{ c #4A098936C74F", "} c #594384BCC500", "| c #5BED86F3C94F", " . c #55468C18CC54", ".. c #5D9F8AD8CAD5", "X. c #5A249185CFA3", "o. c #625B8CA0CC0F", "O. c #661B94A0CE2F", "+. c #6DF19C60CFED", "@. c #620D8FD2DADE", "#. c #6D069D21D282", "$. c #664195C6DB98", "%. c #669A983DDBBA", "&. c #68509897DC43", "*. c #70539F1DD283", "=. c #5FAFADF0C7E6", "-. c #5D20ACF3CC4B", ";. c #776DB981CC4B", ":. c #6CB7A275DCC0", ">. c #74AEA471D39D", ",. c #7828A73ED508", "<. c #79C6A866D5CE", "1. c #7158A2E6DE44", "2. c #6DBEB397D37C", "3. c #587BB702FA08", "4. c #634ABC78FB4D", "5. c #6FD6BF94FCC0", "6. c #7105BF3CF9FA", "7. c #6ED8C3CAFE8A", "8. c #71BAC320FC7F", "9. c #7CC7C659FA4A", "0. c #8A44ACD282E0", "q. c #8E28B2998279", "w. c #9065B20E8B8D", "e. c #8EEDAF7092D6", "r. c #90C3B22E910C", "t. c #8B62AACAAC73", "y. c #94CCB6B5A9D5", "u. c #A13ABF02AB43", "i. c #A19EBEBAB23A", "p. c #A35ACA3B835B", "a. c #A8BECD948686", "s. c #A988CA508C4C", "d. c #ADE1D3368C7F", "f. c #B225CE5C990A", "g. c #BA3ED9DA9C6C", "h. c #BC7FD90DA3DB", "j. c #C012DAC7AA78", "k. c #C0B2DDA8A4D8", "l. c #C20FDF53A85D", "z. c #C714DFE8B084", "x. c #C3F8E06DAAF0", "c. c #CCDFE3D3B751", "v. c #8354B2E0E056", "b. c #89FEB55BDF44", "n. c #8280B30AE4B4", "m. c #8916B791E5D6", "M. c #A46BBD29E19A", "N. c #A859C2FDC94E", "B. c #B5DECE64CF88", "V. c #AE44CB2DD0E2", "C. c #B03FC5EBD7F0", "Z. c #B334CDC6D2D1", "A. c #BA43D249D641", "S. c #B646D0DBD9E2", "D. c #BB1DD841DB0D", "F. c #99E7C592ECDD", "G. c #8518CC20FD8E", "H. c #8ACCCEC2FE04", "J. c #9218CDBAFA8E", "K. c #8D3DD1D9FF6F", "L. c #91C1D243FF68", "P. c #A7ADC84CE615", "I. c #AC41CBF5E3EF", "U. c #A466CB9EEDF3", "Y. c #ACDBCFDFED29", "T. c #B545CB68E7AF", "R. c #B7F6CD25E8F5", "E. c #B996CE84E970", "W. c #BE53D76EE4B5", "Q. c #BD7FD1F1EA76", "!. c #B01BD53AF4E0", "~. c #A02ED67CFCBA", "^. c #B5D0D504F46B", "/. c #BA0FD744F625", "(. c #BD6CDA47F753", "). c #B3EFD96CFCAA", "_. c #C57AD7A0D06E", "`. c #D66DEA6CC413", "'. c #D82DE935CA35", "]. c #D8FAE9AFCAA8", "[. c #DE21ECE9D128", "{. c #E35AF0A0D78B", "}. c #E84DF3FFDD5F", "|. c #C1FBD5C6EBA8", " X c #C6EADA68ED53", ".X c #CA6CDC6BEDDD", "XX c #C398DC21F5E7", "oX c #C91CDF81F655", "OX c #C4A7DE42F9FD", "+X c #C85FE04DFAD3", "@X c #CD4CE29FF575", "#X c #C5B0E290FAE7", "$X c #CCA9E326FBD7", "%X c #CD76E9D2FF7E", "&X c #D1F3E492F715", "*X c #D94EE6B0F54C", "=X c #DC8FE99DF614", "-X c #D51DE713FDAE", ";X c #D6DDE92DFE04", ":X c #DDC0EC18FD9C", ">X c #ECECF4F2E6CE", ",X c #EE97F5E1E8BB", ".<.,.,.,.,.>.>.>.>.,.,.>.>.>.>.>.#.X. .8X8X8X8X8X8X8X8X", "8X8X8X+.T..X.X.X X X X X X X X X X X X XQ.P.v.:.%.$.8X8X8X8X8X8X", "8X8X] >..X6X4X3X3X3X3X3X3X3X3X3X2X2X1X1X1X@XU.n.1.&.8X8X8X8X8X8X", "8X8X] >..X4X:X-X-X-X-X-X-X-X-X&X$X$XoX&X4X2X(.F.n.1.&.@.8X8X8X8X", "8X8X] >..X4X-X#X#X$X$X$X#X#X+XOXOX(./.oX4X4X$X!.F.n.1.%.8X8X8X8X", "8X8X] >..X4X;X$X$X$X$X$X$X$X#XOXOX(./.oX4X4X;X#X(.U.m.1. .8X8X8X", "8X8X] >..X4X;X$X$X$X$X$X$X$X$X+XOXXX/.oX2X4X:X;X;X@XY.b...W 8X8X", "8X8X] >..X4X;X$X$X$X$X$X$X$X$X#XOXXX(.oX=X1X3X3X4X3X=XI.O.) 8X8X", "8X8X] >..X4X:X$X-X-X-X-X$X$X$X$X+XOX(.XX@X*X=X1X1X3X4X|.+.) 8X8X", "8X8X] >..X4X:X-X-X-X-X-X-X$X$X$X#XOXOXXXXXXXXXXXXX&X3X X#.) 8X8X", "8X8X] >. X4X:X-X-X-X-X-X-X-X$X$X$X+XOXXX(./.^.^.^.XX2X X*.) 8X8X", "8X8X] >. X4X:X-X-X-X-X-X-X-X-X$X$X$X+XOXXX(.(././.oX2X X*.) 8X8X", "8X8X] >. X4X:X;X;X;X;X;X-X-X-X-X$X$X$X+XOXOXXX(.(.$X3X X#.) 8X8X", "8X8X] >. X4X:X;X;X;X;X;X;X-X-X-X-X$X$X$X+XOXOXXXXX$X3X X#.) 8X8X", "8X8X] >. X4X:X;X;X;X;X;X;X-X-X-X-X-X$X$X$X#X+XOXOX-X4X X#./ 8X8X", "8X8X] >. X4X:X;X;X;X;X;X;X;X-X-X-X-X-X$X$X$X$X#X#X-X4XXX#./ 8X8X", "8X8X] #. X4X:X;X;X;X;X;X;X;X-X-X-X-X-X$X XW.S.Z.V.B._.N.' R 8X8X", "8X8X) #.|.4X:X;X;X;X;X;X;X;X-X-X-X-X-XoXZ.i.e.F M m S b _ Q 8X8X", "8X8X/ #.|.4X:X;X;X;X;X;X;X;X;X;X-X&X.XA.u.w.D Z n s p i r < 8X8X", "8X8X/ #.|.3X:X;X;X;X;X;X;X;X;X;X;X.XB.u.q.G L s.f.s.A h w 2 $ 8X", "8X8X/ #.|.:X#X).).).).).).).).).).I.y.0.G J a.k.`.c.p.V d 8 # . ", "8X8X/ #.|.$XJ.6.6.6.8.8.6.6.6.6.5.2.` c K a.d.x.}.[.a.C V g % ", "8X8X^ #.|.#X9.3.4.4.4.4.4.4.4.4.4.-.z p I g.l.`.Xj.p.I N 1 ", "8X8X^ O.Q.$XG.7.G.K.H.H.H.H.H.H.H.;.l y L z.{.5X7X7X,X].h.A 3 ", "8X8XE O.Q.$XH.8.H.L.L.L.K.K.K.K.K.;.t 7 H h.'.>X7X7X,X].h.A 3 ", "8X8XT O.E.#XG.4.7.8.8.8.8.7.7.7.7.=.e 3 N P p.h.>X>Xj.p.I N 1 ", "8X8XT o.Q.-X~.G.G.G.G.G.G.G.G.G.G.;.x 7 g k V p.].'.p.V B f % ", "8X8XY o.|.3X-X#X#X#X#X#X#X#X#X#X%XD.r.a 9 0 B P h.h.P B d 5 # . ", "8X8XY | M.|.Q.R.R.T.T.T.T.T.T.E.Q.C.t.v q 6 u j A A j u 4 1 O 8X", "8X8X8X( | o.o.| | | | | | | | | ..} ~ ! > ; = * 3 3 * * & @ 8X8X", "8X8X8X8XY Y Y Y Y Y Y Y Y Y Y Y Y Y Y U , : o . . X + - 8X8X" }; qosmic-1.6.0/icons/silk/page_copy.xpm000066400000000000000000000057361304321135200175670ustar00rootroot00000000000000/* XPM */ static char *page_copy[] = { /* columns rows colors chars-per-pixel */ "32 32 85 1", " c #3F4270BEC5C1", ". c #41197254C662", "X c #459979E2C58F", "o c #49E27AD9C7B4", "O c #46AC77E4C850", "+ c #4CD07DC7CB00", "@ c #51867E70CB54", "# c #4E3C8182C9ED", "$ c #51B4836ACAB6", "% c #59768601CCFC", "& c #55628E2FC999", "* c #5AD08D43C9E2", "= c #5EC995E2CC5B", "- c #58D28ECED1E6", "; c #5ECF9174D3FA", ": c #66789A3ACE88", "> c #68829C9ECFA2", ", c #64E28F5BD146", "< c #68638F93D1C3", "1 c #630A942AD561", "2 c #6D2A93ECD45D", "3 c #6B379BF9D3AE", "4 c #70EB9626D53B", "5 c #75E59D1BD6A9", "6 c #79AB9E88D74E", "7 c #70D9A3A4D4B2", "8 c #7A85A190D7F9", "9 c #7BDAA988D7D9", "0 c #7300A370DEC5", "q c #7B40A202D8C6", "w c #738CA815E0D5", "e c #7B5FAC13E197", "r c #8015A856D72A", "t c #823CAC15DC3A", "y c #85E8B05AD999", "u c #8A18B273DB58", "i c #9296BA3AE00E", "p c #8E52B612E1AA", "a c #8FDDBC03E806", "s c #8B07BAC7EA31", "d c #9117BD70E84F", "f c #9C0ABEF4E644", "g c #9118BE1FEB5A", "h c #9F52C324E722", "j c #9E03C351E9B8", "k c #A221C543E7D9", "l c #A963C0D9E739", "z c #A210C642EB19", "x c #A77EC97CEA9D", "c c #A9C2CA4AEB20", "v c #B423CE9DED0A", "b c #B810D44AEE1A", "n c #BEDDD2FEEDFE", "m c #AB1DD163F33C", "M c #B5FCD5F2F598", "N c #BADDD73CF5ED", "B c #BE0AD9A7F728", "V c #BEFDDACBF8E7", "C c #C338D58DEE02", "Z c #C6C3D89BEE96", "A c #C9FFDA20EF0D", "S c #C5C0D7E2F0F3", "D c #C8FCD84CF196", "F c #C40BDB04F5BF", "G c #CA9CDC46F285", "H c #C4FEDE4FFA6F", "J c #C856DFF1FAD2", "K c #CDB8E18DF552", "L c #C735E172FAB5", "P c #CCF5E309FC9E", "I c #D52AE53CF642", "U c #D94FE831F859", "Y c #DA89E941F7F8", "T c #D416E6B5FE6F", "R c #D724E8EDFF51", "E c #DB5BEADFFEF0", "W c #E208EEF0FD9C", "Q c #E639F24AF691", "! c #EA85F44BF70E", "~ c #E596F1A0FD39", "^ c #EBCDF4BBFE99", "/ c #F158F801FC86", "( c #F264F897FD52", ") c #FAFCFE13FFFF", "_ c None", /* pixels */ "Oo#$$$$$$$$$#oX_________________", "o%5qq8888888551_________________", "+5vIGSSSSSCCZvaw;_______________", "#qI)^~~~~WEW^Yms01______________", "$qG^EPTTPLHP^~Lmge______________", "$8G~THLJHVMFW^ELMj3_____________", "$8G^RPPPJHBFYW~~~Cr*____________", "$8G^EPPPPJHFGKIUYCu3____________", "$8G^ETTPPLHNvcxxxhpt7>>:=&______", "$8G^ETTTPPLNzjccxxckiuuuy93-____", "#8G^ETTTTPPNzcIWUIIIKGGGGbdw;___", "#8G^ETRTTTPNjcW)^WWWWEEW^Yms01__", "#8G^ETRRTTTBjcY^EPTTPLHP~~Lmge;_", "#8G^ERRRRRTBjxU~THLJHVMFW^ELMj3X", "#8G^WREERRRFjxU^TPPPJHBFUW~~Wn5+", "#6G^WEEEEEEFjxY^RPPPPHFFKIY~/A6$", "#6D^WEEEEEEFjxY^ETTPPLHHFFBKWZ8$", "+6Z^WEEEEEEFjxY^ETTTPPJHVNMVEC8$", "+5C!EEEEEEEFjxY^ETTTTPPJHVNHES8$", "+5C!~EWWEWWJzxY^ETRTTTPPLHVLWS8$", "o5Z/^~~~^^^IzxY^ETRRTTTPPLHPWS8$", "o2lDCnCCCCCcpfI^ERRRRTTTPPHP~S8$", "o$2422222222,tG^WREERRRTTPPT^G8$", "ooO...... .o6G^WEEEEERRTTPR^G8$", "____________+6D^WEEEERRRTTPR^G6$", "____________+6Z^WEEEERRRTPPR^Z6@", "____________+5C!EEEEERRRTPPTQZ6@", "____________+5C!~EWWEEEEEERE!Z6@", "____________O5Z/^~~~^^^^^~~^(A6@", "____________. c #B5A1635234D8", ", c #BCFE63F53067", "< c #BC2F68103998", "1 c #C4B44E340463", "2 c #C28E50970417", "3 c #CC6458260332", "4 c #C3DB50510938", "5 c #C85050B608A9", "6 c #C9F158EB07F4", "7 c #D1965AF602DD", "8 c #C53254F5126E", "9 c #D58760E804CC", "0 c #DC20638B02BD", "q c #DC2268510478", "w c #DD8D6C160B13", "e c #D9946C101867", "r c #E6A16BF20055", "t c #E0A669F00A46", "y c #ED6F728F0000", "u c #EFBC789F065C", "i c #F5AD74D60214", "p c #FA3979480E76", "a c #E2A170E816EB", "s c #ECCE795314F1", "d c #CB1560042658", "f c #CE6568D52489", "g c #C54060A727E3", "h c #CBBF63C12B79", "j c #CE1169792BDF", "k c #DC9073C02CED", "l c #C30766263371", "z c #CD0D66F13043", "x c #CB7E6E2039B4", "c c #DB48762C30C6", "v c #DD137E353CA9", "b c #E8BF76D32145", "n c #E16077F92A3C", "m c #95D75C424B41", "M c #81A458AF59D9", "N c #9B7D65274DA2", "B c #8D6862395692", "V c #AB7563BB4114", "C c #A05566DF4AEF", "Z c #BE53699741AB", "A c #B2526EB94EE0", "S c #B19D78485E2F", "D c #81226E417593", "F c #ADE57F176735", "G c #A0D979A16A1B", "H c #C1A16AEE4025", "J c #C23E726142DA", "K c #C52E751549ED", "L c #CDB678E54BEF", "P c #D521798540AB", "I c #C09774AC50A9", "U c #F80680CC24A3", "Y c #EBA486DC3A6B", "T c #F0AB8FF03327", "R c #FD518C9F3333", "E c #F1E594623E19", "W c #FFFF90453ED6", "Q c #AF7289867FCE", "! c #D4FE84AB5518", "~ c #DB90889653B4", "^ c #D2F189645E44", "/ c #E0C484B64A89", "( c #F0968B74446A", ") c #F35A916340A9", "_ c #F5819AB8422C", "` c #FADF9A994335", "' c #F4E29C654CE8", "] c #FF899CD34D69", "[ c #E3298DD25854", "{ c #F06294F75216", "} c #E88F929C5D20", "| c #FF8E968A50E6", " . c #FE269E375383", ".. c #FFFFA24D556F", "X. c #FF54A46A5D41", "o. c #CD9489C0646F", "O. c #C5FD88BE6C05", "+. c #CBDA8ABE6AC9", "@. c #E02894D76825", "#. c #E3E0964E6901", "$. c #EADE9CDF69E9", "%. c #FBA09DC56303", "&. c #FE11A8FB6C8B", "*. c #EB4DA1CF765A", "=. c #ED16A6717D1E", "-. c #F382A3A071F4", ";. c #FC00AAA67114", ":. c #3A506276AA67", ">. c #270C62DCBC64", ",. c #2AC8622DB943", "<. c #329F6D58BDDC", "1. c #35E47301BF82", "2. c #3F6C77E7BF0C", "3. c #60B45FED848C", "4. c #675C68B781BB", "5. c #6322705E9C0F", "6. c #49D4764EAFF8", "7. c #584E7B2FB843", "8. c #38F176CDC198", "9. c #3D087C77C4AD", "0. c #436C7514C13A", "q. c #407E7E22C378", "w. c #71D68D6FB58F", "e. c #451584BAC4D6", "r. c #497C87E8C5BB", "t. c #4A098936C74F", "y. c #5C6E8491C525", "u. c #5BE686F4C94F", "i. c #55468C18CC54", "p. c #5D7D8ADCCAD2", "a. c #5A249185CFA3", "s. c #625B8CA0CC0F", "d. c #661B94A0CE2F", "f. c #6DF19C60CFED", "g. c #726F9F34C1D5", "h. c #620D8FD2DADE", "j. c #6CD69D38D294", "k. c #664195C6DB98", "l. c #669A983DDBBA", "z. c #68509897DC43", "x. c #70539F1DD283", "c. c #7C9DA503C43D", "v. c #7EB6A84CCB18", "b. c #6CB7A275DCC0", "n. c #74AEA471D39D", "m. c #7828A73ED508", "M. c #79C6A866D5CE", "N. c #7158A2E6DE44", "B. c #587BB702FA08", "V. c #5F05BDD1FF46", "C. c #6365BC8EFB08", "Z. c #6F66BF94FC52", "A. c #711EBF4BF9AB", "S. c #6E1AC38AFE65", "D. c #71BAC320FC7F", "F. c #7CC7C659FA4A", "G. c #BD979FB89852", "H. c #B33FA72DAEE4", "J. c #BC69B877BFE9", "K. c #CC54A5199680", "L. c #C843A47F9993", "P. c #D136A8F69338", "I. c #EE02ACC08302", "U. c #EE61AFA38926", "Y. c #FE69B3EC8470", "T. c #FF23BA7B859C", "R. c #FF75BDEA8E38", "E. c #FD22BCE494EE", "W. c #C33BB8F6BEDA", "Q. c #CC4EBE00BEED", "!. c #F92DC9A29BCF", "~. c #FCD3CEB3A5E8", "^. c #FF9FCE49ACCF", "/. c #FFFCD482B91E", "(. c #9267AC45C14E", "). c #91C5B379CD6B", "_. c #8354B2E0E056", "`. c #89FEB55BDF44", "'. c #8280B30AE4B4", "]. c #8916B791E5D6", "[. c #A46BBD29E19A", "{. c #C488BCCAC3E7", "}. c #B578C67BDC57", "|. c #BC8AC4F5D8B7", " X c #99E7C592ECDD", ".X c #8486CBABFD3B", "XX c #8ACCCEC2FE04", "oX c #9218CDBAFA8E", "OX c #854FD113FFFF", "+X c #8C81D22BFF6F", "@X c #91C1D243FF68", "#X c #A7ADC84CE615", "$X c #AFD7CA41E5FE", "%X c #A466CB9EEDF3", "&X c #ACDBCFDFED29", "*X c #B545CB68E7AF", "=X c #B80FCD60E974", "-X c #BA37CF82E8E1", ";X c #BD48D1F7EA73", ":X c #B01BD53AF4E0", ">X c #A02ED67CFCBA", ",X c #B5D0D504F46B", " mXmX", "mXmX9.j.wXzXsX2X2X2X2X2X2X2X2X2X2X}.G.O.! [ -.Y.R.T.&.{ v j 8 . ", "mXmX9.j.wXdXoXA.A.A.D.D.A.A.A.Z.S.v.G K @.-.%.| W R R R Y c 8 . ", "mXmX8.j.wXsXF.B.C.C.C.C.C.C.C.C.V.g.N l *.E.Y.&. .] .. .) n 8 . ", "mXmX8.d.;XdX.XS..X+XXXXXXXXXXXOXOX(.V h =./.qXqX0X0XqX~.' a 5 X ", "mXmX1.d.;XdXXXD.XX@X@X@X+X+X+X+X+X(.V d *.^.9X0X0X0X0X!.E t 1 X ", "mXmX<.d.-XsX.XC.S.D.D.D.D.S.S.S.S.c.C g } ;.X.] ` ` _ T s 0 1 X ", "mXmX<.s.;XkX>X.X.X.X.X.X.X.X.X.X.X).F x / ( U p i i y r 0 7 1 X ", "mXmX,.s.wXvXkXsXsXsXsXsXsXsXsXsXfX8XP.^ P k b s u y r 0 3 2 o X ", "mXmX,.u.[.wX;X=X=X*X*X*X*X*X*X=X;X|.H.Q A , f e w q 9 6 # + mXmX", "mXmXmX0.u.s.s.u.u.u.u.u.u.u.u.u.p.y.7.5. m : * 4 1 @ & ; - mXmX", "mXmXmXmX,.,.,.,.,.,.,.,.,.,.,.,.,.>.>.:.3.M - $ O O + % = mXmXmX" }; qosmic-1.6.0/icons/silk/page_green.xpm000066400000000000000000000112631304321135200177050ustar00rootroot00000000000000/* XPM */ static char *page_green[] = { /* columns rows colors chars-per-pixel */ "32 32 114 2", " c #67A7A3594454", ". c #68BCA3F9446F", "X c #6CF3A7DB48E9", "o c #6D92A83F490A", "O c #7110AB054D1E", "+ c #798AB38C53C8", "@ c #7FDEB25072A0", "# c #80E4B9F35ADB", "$ c #83C0B4017550", "% c #8987B79A7415", "& c #8DC2BA2D7546", "* c #250E5D25B600", "= c #27D25FA1B796", "- c #280D6093B7BB", "; c #2ADD6244B93B", ": c #2ECA68E8BCC8", "> c #32366D2FBE03", ", c #34EB71BBBF68", "< c #3F6C77E7BF0C", "1 c #3FE3704FBE37", "2 c #365173DCC0E1", "3 c #38C976E0C213", "4 c #3CE57BFFC449", "5 c #436D7512C12A", "6 c #407E7E22C378", "7 c #451584BAC4D6", "8 c #497C87E8C5BB", "9 c #4A098936C74F", "0 c #5AF484EEC7AA", "q c #5BCE8738CB5C", "w c #55468C18CC54", "e c #5DFA89A0CC55", "r c #5A249185CFA3", "t c #62358BA3CD0F", "y c #65AF9426CEEE", "u c #6DF19C60CFED", "i c #620D8FD2DADE", "p c #667793D1D116", "a c #696B96C8D0B9", "s c #6C929CAFD2A8", "d c #664195C6DB98", "f c #669A983DDBBA", "g c #68509897DC43", "h c #70539F1DD283", "j c #6CB7A275DCC0", "k c #74AEA471D39D", "l c #7828A73ED508", "z c #79C6A866D5CE", "x c #7158A2E6DE44", "c c #9FD5C55196B7", "v c #A200C7459689", "b c #ACD5CDDB9872", "n c #8354B2E0E056", "m c #89FEB55BDF44", "M c #8280B30AE4B4", "N c #8916B791E5D6", "B c #A46CBD25E17D", "V c #B0E4D21CD035", "C c #B4B8D32BD16A", "Z c #BA1AD5B9D210", "A c #99E7C592ECDD", "S c #AE45C352E3E2", "D c #A7ADC84CE615", "F c #AFD7CA41E5FE", "G c #A466CB9EEDF3", "H c #ACDBCFDFED29", "J c #B06DCAE5E56F", "K c #B63DCC63EC59", "L c #BA2AD027ED25", "P c #BE00D289EDE4", "I c #B01BD53AF4E0", "U c #B5D0D504F46B", "Y c #BA0FD744F625", "T c #BD6CDA47F753", "R c #C674DD48CE71", "E c #CA01DEA9CE77", "W c #C5E1DED5DCF7", "Q c #C970DE9ADD5A", "! c #CBE8E06ACE68", "~ c #CF40E2B5D158", "^ c #D4FBE5E1D235", "/ c #D9CCE915D2C7", "( c #D2EFE50BD9C8", ") c #DEF2EC84DE09", "_ c #E467EFC8DED4", "` c #E6B0F1AADF66", "' c #C21FD571ED94", "] c #C6D5DA2CED32", "[ c #CA7BDBC9EE05", "{ c #C735D635F0C7", "} c #C8CCD754F0D3", "| c #C372DC57F641", " . c #CA05DCC9F48A", ".. c #C4D9DE5BF9EC", "X. c #C85FE04DFAD3", "o. c #D291DEA4F14E", "O. c #CD4CE29FF575", "+. c #C70EE0E1FB0A", "@. c #CCC9E2FDFC4C", "#. c #D1F3E492F715", "$. c #D94EE6B0F54C", "%. c #DC8FE99DF614", "&. c #D4D8E701FE08", "*. c #D76FE92AFE6B", "=. c #DD48EBE8FDF5", "-. c #E69FF0DFF049", ";. c #E41DEE7AF663", ":. c #E53BEF8AF9D2", ">. c #EB3CF45FF477", ",. c #E774F166FAF7", "<. c #EBC6F3CDFBCA", "1. c #FAAAFD6EF676", "2. c #F193F778FD29", "3. c None", /* pixels */ "3.3.3.3.7 8 9 9 9 9 9 9 9 9 9 9 9 9 9 8 8 7 4 3.3.3.3.3.3.3.3.3.", "3.3.3.w k z l l l l k k k k l l k k k k k s r w 3.3.3.3.3.3.3.3.", "3.3.3.u J [ [ [ ] ] ] ] ] ] ] ] ] ] ] ] P D n j f d 3.3.3.3.3.3.", "3.3.7 k [ 2.<.,.,.,.,.,.,.,.,.,.:.:.:.:.;.O.G M x g 3.3.3.3.3.3.", "3.3.7 k [ <.=.&.&.&.&.&.&.&.#.#.@.O.X.#.<.:.T A M x g i 3.3.3.3.", "3.3.7 k [ <.&.+.+.@.@.+.+.+.X.....T Y X.<.<.@.I A M x f 3.3.3.3.", "3.3.7 k [ <.*.@.@.@.@.@.@.+.+.....T Y X.<.<.*.+.T G N x w 3.3.3.", "3.3.7 k [ <.*.@.@.@.@.@.@.@.+.X...| Y X.:.<.=.*.*.O.H m e < 3.3.", "3.3.7 k [ <.*.@.@.@.@.@.@.@.@.+...| T | %.:.,.,.<.,.%.F y 6 3.3.", "3.3.7 k [ <.=.@.&.&.&.&.@.@.@.+.X...T | O.$.%.;.:.,.<.' u 6 3.3.", "3.3.7 k [ <.=.&.&.&.&.&.&.@.@.@.+.....| | | | | | #.,.] s 6 3.3.", "3.3.7 k ] <.=.&.&.&.&.&.&.&.@.@.@.X...| T Y U U U | :.] h 6 3.3.", "3.3.7 k ] <.=.&.&.&.&.&.&.&.&.@.@.@.X...| T T Y Y X.:.] h 6 3.3.", "3.3.7 k ] <.=.*.*.*.*.&.&.&.&.&.@.@.+.X.....| T T @.,.] s 6 3.3.", "3.3.7 k ] <.=.*.*.*.*.*.*.&.&.&.&.@.@.+.X.....| | @.,.] s 6 3.3.", "3.3.7 k ] <.=.*.*.*.*.*.*.&.&.&.&.&.@.@.@.+.......@.,.] s 4 3.3.", "3.3.7 k ] <.=.*.*.*.*.*.*.*.&.&.&.&.&.@.@.@.X.....#.,.' s 4 3.3.", "3.3.7 s ] <.=.*.*.*.*.*.*.*.&.&.&.&.&.@.@.@.+.X.X.&.,.' s 4 3.3.", "3.3.6 s ' <.=.*.*.*.*.*.*.*.&.&.&.&.&.&.@.@.@.+.+.&.<.] s 4 3.3.", "3.3.4 s ' <.=.*.*.*.*.*.*.*.*.&.&.&.&.&.@.@.@.@.@.*.<.] s 3 3.3.", "3.3.4 s ' ,.=.*.*.*.*.*.*.*.*.&.&.&.&.&.@.@.@.@.@.*.2.[ a 2 3.3.", "3.3.4 s ' ;.Q Z Z Z Z Z Z Z Z Z Z Z C C C C C C V W >.[ a , 3.3.", "3.3.4 s ' ( c $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ v ) } p > 3.3.", "3.3.3 a P ! % . o O O O O O O O O O O O O O O o . & / } p : 3.3.", "3.3.3 a P E % o + # # # # # # # # # # # # # # + X & / } t ; 3.3.", "3.3., p P E % X + # # # # # # # # # # # # # # + X & / } t ; 3.3.", "3.3.> y L R % . o O O O O O O O O O O O O O O X & / } t - 3.3.", "3.3.> t P ( v % % % % % % % % % & & & & & & & & & b ` .t * 3.3.", "3.3.: t ' -.( R R R R R R R R E ~ ^ ^ ^ ~ ^ ^ ^ ^ _ 1.[ t * 3.3.", "3.3.: 0 B ' P K K K K K K K K K P ' ' P P ' ' { { } o.S 0 * 3.3.", "3.3.3.5 q t t e q q q q q q q q e e e e e e e t t t t 0 1 3.3.3.", "3.3.3.3.; - ; ; ; ; ; ; ; ; ; ; - - - - - - - = = = * * 3.3.3.3." }; qosmic-1.6.0/icons/silk/page_paste.xpm000066400000000000000000000150551304321135200177240ustar00rootroot00000000000000/* XPM */ static char *page_paste[] = { /* columns rows colors chars-per-pixel */ "32 32 201 2", " c #95CE5F671BBE", ". c #966E60A31D0C", "X c #9840617F1C01", "o c #97B062B52041", "O c #994C64A3225B", "+ c #9EE46C4F2AEA", "@ c #A0986DB22B07", "# c #A7C874EC340B", "$ c #A99275BD34CC", "% c #AC667C2B36C0", "& c #ABB37C5E3B59", "* c #B03A7D853BC8", "= c #84F26B344D84", "- c #8884705B4E4A", "; c #983E7B2658EF", ": c #AD517FDB3FF9", "> c #AF2181743A84", ", c #9BE182E95C36", "< c #AE2781864263", "1 c #B080836C4118", "2 c #B11986B448DB", "3 c #B93E93CE6E68", "4 c #BF4D9DD36D6B", "5 c #BABC972670CE", "6 c #BCD69B3D7457", "7 c #B4F99A0D7C4B", "8 c #BFE5A0D876E2", "9 c #CFA28E1F4BF7", "0 c #D1088F754BC6", "q c #D006921A4FA2", "w c #DEAB9AFA46FA", "e c #D18D93564E21", "r c #DD099CEB4BC3", "t c #C2C795175645", "y c #C60A9C105CAD", "u c #CC15999F5E9B", "i c #D23B95D05271", "p c #D4C99BB55564", "a c #D32A9745597E", "s c #D51E9D4159CC", "d c #E1879B764659", "f c #E0609D1D4AA2", "g c #DC7EA40C576C", "h c #D726A2895B73", "j c #D94DA59B5B94", "k c #DB40A9695DD9", "l c #E346A5474CFA", "z c #E2BDA4F753C3", "x c #E666A9A3575F", "c c #E366A70D5821", "v c #E51FAA545C93", "b c #C43799B164D7", "n c #CBF59D4C639D", "m c #CC05A25264F2", "M c #C659A43C69E7", "N c #CFA7A4E2693F", "B c #D7FCA34F61C0", "V c #D960A5B965AB", "C c #D3BCA8DF66CF", "Z c #DBC7AC4A6333", "A c #DAB2A5416C6D", "S c #D2F1AC236E01", "D c #DCB2AE8F689F", "F c #DD9BB0DC6746", "G c #DCA7BD0D66E5", "H c #DE13B2FE6B8C", "J c #CC87AAA6756B", "K c #C1ABA6327A2B", "L c #C346AA227CC1", "P c #D416AFDD70EB", "I c #DC22ABC972BC", "U c #D616B33574AF", "Y c #DFD0B790718F", "T c #D4E4B6587B45", "R c #DDB0B4577974", "E c #D7AAB84D7C82", "W c #D95AB9227C94", "Q c #E12EB43C6C4E", "! c #E060B6D67018", "~ c #E41BBA5C74AF", "^ c #E0AEB77A7ABD", "/ c #E2D8BD067C08", "( c #DFF9C299739E", ") c #EC4BC47D65AD", "_ c #EF67CAF77492", "` c #E4D4C1787FE2", "' c #F423DAEB7B70", "] c #519277E6B7A3", "[ c #67D97F20A4EA", "{ c #3F2170A0C506", "} c #405771A6C63E", "| c #4E817BF0C929", " . c #51867E70CB54", ".. c #5F788B20B78C", "X. c #69808CF1AC41", "o. c #73DB8E17A4C5", "O. c #78908BE1A7EE", "+. c #7CD19529A875", "@. c #4FAD810AC9A3", "#. c #5806882AC44C", "$. c #52C68368CAFB", "%. c #5A0884AACCE9", "&. c #6BC099FDCF99", "*. c #67E08FE2D240", "=. c #68638F93D1C3", "-. c #623D93CAD3D2", ";. c #6E23943AD4AD", ":. c #6B619948D4E0", ">. c #7027955AD4B4", ",. c #76659D47D5CA", "<. c #7A169E26D727", "1. c #7D72A2ACC774", "2. c #7A8BA0ABD7F9", "3. c #7237A447DDC6", "4. c #79F0A100D890", "5. c #7A2DAA62E043", "6. c #BA2EA9FB85A0", "7. c #89989F0DB97C", "8. c #85EAA1E5B54C", "9. c #8EE2A332B5CE", "0. c #8F7BA310B85B", "q. c #8C54A83FBAB5", "w. c #92B0A605B4F5", "e. c #922CA78ABC0B", "r. c #954BAB72BADE", "t. c #A9E7A96AA08A", "y. c #C19FA49286F1", "u. c #C5DFB087852A", "i. c #D64CBB5183E9", "p. c #DA4CBD5F84D3", "a. c #D9EABF5B8969", "s. c #C753B74A9172", "d. c #E536BF818064", "f. c #DC0AC1F98B9D", "g. c #E69DC4EC849F", "h. c #E9D1C64684D1", "j. c #E4D3CB1C8952", "k. c #EAE3CB8B8CE8", "l. c #F170CA1985A4", "z. c #F4BFD5D28EAB", "x. c #EAC8CED8923A", "c. c #EBD6D12B95B5", "v. c #EE19D5F29CE2", "b. c #EDCBD89E9E85", "n. c #F4D5DBFD9F8F", "m. c #F732E15B8BEA", "M. c #F94EE51290F6", "N. c #EAF4D773A347", "B. c #EFE1DC6EA713", "V. c #F0D3DA9BA478", "C. c #FE14EF6BAE19", "Z. c #FF55F1B1B089", "A. c #880AAA9FCA0A", "S. c #96D5AFA3C0D3", "D. c #8B62AE44DC61", "F. c #8B90B1B3D6CB", "G. c #8CC0B51CDBF4", "H. c #926EB75CE05C", "J. c #8676B471E192", "K. c #8EFBBA6AE528", "L. c #8CACBB27E99C", "P. c #96C9BD86E40D", "I. c #998DBF68E49A", "U. c #9CFBC178E567", "Y. c #AA3BC129E786", "T. c #AD22C4BAE928", "R. c #B585CFE6E7A4", "E. c #BDC2D2B8EDC7", "W. c #A8A2CFF4F32C", "Q. c #ADB1D301F373", "!. c #B57ED5A0F592", "~. c #B969D77CF704", "^. c #BE6BDA31F743", "/. c #BF02DAEEF8DA", "(. c #C38CD541EE8A", "). c #C9CEDA84EE22", "_. c #C55DD799F112", "`. c #C8FCD84CF196", "'. c #C44ADB99F57A", "]. c #CB06DD77F233", "[. c #C4E4DE47FA5F", "{. c #C856DFF1FAD2", "}. c #CE8EE146EE02", "|. c #CEADE2A2F6BD", " X c #C783E196FAB1", ".X c #CD03E315FCF8", "XX c #D54CE606F760", "oX c #D859E82BF863", "OX c #DC43EA64F823", "+X c #D422E6ADFEA1", "@X c #D70DE902FF76", "#X c #DBABEB21FF06", "$X c #E221EF28FD85", "%X c #E727F24EF670", "&X c #EACDF489F757", "*X c #E5B9F197FD66", "=X c #EB4DF463FE91", "-X c #F116F7C1FC84", ";X c #F264F897FD52", ":X c #FA53FDBFFFFF", ">X c None", /* pixels */ ">X>X>X>X>X>XX . . . . o >X>X>X>X>X>X>X>X>X>X>X>X>X>X", ">X>X>X>X>X. O + & 1 > % % > 1 & + O >X>X>X>X>X>X>X>X>X>X>X>X>X>X", ">X>X>X o + 2 T j.( G G ( j.T < O . >X>X>X>X>X>X>X>X>X>X>X", ">X>X& < < & * y b.Z.M.' ' M.Z.v.t $ % & 1 & @ >X>X>X>X>X>X>X>X>X", ". & M i.f.W p Z n.C.m.' ' m.C.n.Z e C U W m $ . >X>X>X>X>X>X>X>X", " & T N.B.k.v v l.z._ ) ) _ z.l.x z ~ h.k.U % >X>X>X>X>X>X>X>X", " < a.B.c.~ z f c v z l l l x z d w g Q h.S % >X>X>X>X>X>X>X>X", " < f.V.h.Q g r r r r p u b b b b b 4 K s.6., - >X>X>X>X>X>X>X>X", " < f.V.g.! F Z Z Z k J t.w.w.w.w.w.w.0.q.8.+.o.X...#.>X>X>X>X>X", " < a.b.g.Y H H H F F u.S.J.P.U.I.P.I.P.G.G.G.F.A.1.&.-.>X>X>X>X", " < p.v.` H H F Z Z Z L r.P.].OXXX|.|.|.].].].].).R.K.3.-.$.>X>X", " : p.v./ H F D Z k k L r.U.OX:X=X$X*X*X$X#XOX$X=XOXQ.L.3.-.>X>X", " & i.c./ H F Z Z k k L r.U.oX=X#X.X+X+X.X X[.|.=X*X XW.L.5.-.$.", " & W x./ D D Z Z k k L r.U.XX*X+X{. X{.[./.!.'.$X=X#X X!.P.:.$.", ". & E x.~ Z Z Z k j j K r.U.XX=X+X.X.X.X{.[.^.'.oX$X*X*X$XE.,.@.", ". & T k.Y Z Z k j j g K r.U.XX=X@X.X.X.X.X{.[.'.|.XXOX*X-X).<.@.", ". & U j.H k k j h h g K r.U.XX=X#X+X+X.X.X X[.[.'.'.^.|.$X(.2.$.", ". & U g.H j j h h s p 8 e.I.XX=X#X+X+X+X.X.X{.[./.~.!.^.OX(.2.$.", ". & U g.H j h h s p p 6 w.I.XX=X#X+X+X+X+X.X.X{.[./.~.[.#X_.4.$.", ". & P g.D h s s p p p 6 w.I.XX=X#X+X+X+X+X+X.X.X X[./. X$X_.4.$.", ". & S d.D s p p p i i 6 w.I.XX=X#X+X@X+X+X+X+X.X.X X[..X$X_.4.$.", ". & S / V p p p i i e 5 w.I.XX=X#X@X@X@X@X+X+X+X.X.X[..X*X_.4.$.", ". % S / V p i i i e e 5 9.P.XX=X$X@X#X#X@X@X@X+X+X.X.X+X=X].2.$.", ". % S ^ B i i i q e 0 3 9.P.XX=X$X#X#X#X#X@X@X@X+X+X.X@X=X].2.$.", ". $ N R h i i q 9 9 9 3 9.P.XX=X$X#X#X#X#X@X@X@X+X+X.X@X=X`.<.$.", ". $ N R V s s a a a i 6 0.P.XX=X#X#X#X#X#X@X@X@X+X.X.X@X=X).<. .", ". % m R I I I I A A A y.e.P.}.%X#X#X#X#X#X@X@X@X+X.X.X+X%X(.<. .", ". $ t n n n n n n u u 7 7.H.}.&X$X#X$X$X#X#X#X#X#X@X@X#X&X).<. .", ">X+ # $ $ $ $ $ # # # ; O.D.].-X=X=X*X*X=X=X=X=X=X*X*X=X;X).<. .", ">X>X>X. . . . . . X X = [ ,.T._.(.E.(.(.(.(.(.(.(.(.(.(.`.Y.;. .", ">X>X>X>X>X>X>X>X>X>X>X>X] $.*.;.;.;.;.;.;.;.;.;.;.;.;.;.>.=.%. .", ">X>X>X>X>X>X>X>X>X>X>X>X} } } { } } } } } } } } } } } } { } | ." }; qosmic-1.6.0/icons/silk/page_save.xpm000066400000000000000000000146221304321135200175450ustar00rootroot00000000000000/* XPM */ static char *page_save[] = { /* columns rows colors chars-per-pixel */ "32 32 194 2", " c #9656CC925D67", ". c #9693CCC460E4", "X c #9E15CCC37A09", "o c #A16BD1D66E6A", "O c #A20BD24C70BB", "+ c #A9FAD65B7AEB", "@ c #BADAE66C7C7D", "# c #2D0C5EA3A661", "$ c #317C6170A71A", "% c #38CA66A1AA30", "& c #3BB4695EAA53", "* c #2B296276B95D", "= c #30606637B9E9", "- c #32866ACCBCA3", "; c #3A8A6E22BCAE", ": c #35E47301BF82", "> c #3F6C77E7BF0C", ", c #472571FDB2E6", "< c #4A9E7471B56B", "1 c #4CFE77F9B83A", "2 c #51B17A13B833", "3 c #52C87C62BB13", "4 c #588E7F83BC2A", "5 c #38E176C1C198", "6 c #3E037B89C2E8", "7 c #444775DFC13A", "8 c #40487CD0C27F", "9 c #4C257B86C166", "0 c #54207F61C058", "q c #5A988265BF01", "w c #632B8592BE7E", "e c #44FC8484C4B8", "r c #4BD686B5C625", "t c #4A08893BC754", "y c #54A68176C427", "u c #5B5484C9C5B2", "i c #5EC48879C749", "p c #5BC086CCC951", "a c #55468C18CC54", "s c #5E568B6ACB10", "d c #5A249185CFA3", "f c #5C6891D0D1CA", "g c #640A8806C72A", "h c #61AD89A5C62D", "j c #605F86BECF08", "k c #632C8CEACC02", "l c #68B28E5CCE37", "z c #665E93FBCE8E", "x c #6B5C9392CE85", "c c #6DEC9C6DCFF3", "v c #6B5787F5D780", "b c #668C893DD825", "n c #6A708BE8D158", "m c #6AFF87C8DB96", "M c #620D8FD2DADE", "N c #69808943DD8E", "B c #64349755D548", "V c #6C6193DDD166", "C c #6C139C01D233", "Z c #664195C6DB98", "A c #669A983DDBBA", "S c #68509897DC43", "D c #70E296AED166", "F c #74519B46D573", "G c #79C89E63D581", "H c #75A39D6EDA0B", "J c #784B9FD7DCA9", "K c #6CB7A275DCC0", "L c #747DA446D388", "P c #7C00A2C0D64A", "I c #79CBA86AD5D0", "U c #7158A2E6DE44", "Y c #7BFCA2B1DCC2", "T c #6B9C8B9EE1AA", "R c #57F2B71BFA06", "E c #5F30BAD2F9E3", "W c #61B8AF2DEE91", "Q c #7C1FA3CBE085", "! c #6ACDB2D5EEF8", "~ c #7645B816EE3A", "^ c #63A1BD2AFB84", "/ c #7ECBBEECF18B", "( c #7112BFF9FA3E", ") c #6DFBC349FDFB", "_ c #7141C2DBFC5A", "` c #7CCBC64CFA49", "' c #A6FAD10A8701", "] c #AC94D3C58F2E", "[ c #AFE4D6799252", "{ c #B0A6D7519331", "} c #B4A6D7EBA395", "| c #B501D8A0A2C3", " . c #BC44DAEAAD8E", ".. c #BEBDDC92B2EB", "X. c #C4B5EAD68B46", "o. c #C9A4EC1D8EF2", "O. c #CAA3ED4493FB", "+. c #81E19CBBCC49", "@. c #86C0A5AACD32", "#. c #8E39A726D006", "$. c #84B4A3BCD59F", "%. c #8B94A777D410", "&. c #8FE0A94DD594", "*. c #832DA737DB4C", "=. c #8572A92EDE39", "-. c #8BFBABC3DB62", ";. c #9177AF86DAED", ":. c #8354B2E0E056", ">. c #89FEB55BDF44", ",. c #955EB267DE11", "<. c #9A00B4FFDCB8", "1. c #848AA67AE2A4", "2. c #82A6A8D9E222", "3. c #8C96AE80E3FA", "4. c #8280B30AE4B4", "5. c #8D24B48DE658", "6. c #9559B566E451", "7. c #99FAB6D3E35B", "8. c #9C7FBAA5E64F", "9. c #97DFB9B9E8F2", "0. c #9D29BB8DEB5E", "q. c #A4B3BDE0E4D7", "w. c #A9BCBF9AE181", "e. c #9C99C47DECA8", "r. c #843DCB88FD02", "t. c #8A3DCF20FE77", "y. c #9281CE27FA8E", "u. c #8E5FD280FFD3", "i. c #910AD21DFF5F", "p. c #A7ADC84CE615", "a. c #AFD7CA41E5FE", "s. c #A5FEC490EBE2", "d. c #ABB0C733ED0D", "f. c #A521CB23ED55", "g. c #ADA4CD9DEE0C", "h. c #B210C75EE474", "j. c #B531CA59E66D", "k. c #B58FCD10EC4B", "l. c #B980CFC7ECA3", "z. c #BD01D1D4E9D6", "x. c #AF9FC728F148", "c. c #B001C953F166", "v. c #B5C4CF28F0FE", "b. c #B9C7CF18F11D", "n. c #B01BD53AF4E0", "m. c #A037D678FCBE", "M. c #BA8BD486F4F8", "N. c #BCCEDA73F723", "B. c #B666DB52FD12", "V. c #C47AD11EDB54", "C. c #CEE6DAC1DF3B", "Z. c #DC70EF90C3E0", "A. c #D248E4FFCBBD", "S. c #D3E9E8A1CDC4", "D. c #DB33EE06CDCA", "F. c #D5E6E925D12F", "G. c #D8ECEBF9D18B", "H. c #EE8BFA7EC678", "J. c #EFCAFB95C8E4", "K. c #C36FD650EC7B", "L. c #C6EADA64ECF8", "P. c #CBAADC9BEE03", "I. c #D09CDD34EF57", "U. c #C4D2DD09F6B4", "Y. c #CA86DF5EF6F9", "T. c #C44DDE23F990", "R. c #C84BDF8FF9C0", "E. c #D0CADF02F301", "W. c #D023E0AAEDBB", "Q. c #D8E8E557E68E", "!. c #D2A7E215EDA6", "~. c #CBD2E2E1F574", "^. c #C600E2C9FA9D", "/. c #CC41E345FBC0", "(. c #D28DE4BBF713", "). c #DCB2E6DAF497", "_. c #DDE4E999F67C", "`. c #D42CE718FD62", "'. c #D6C1E935FE15", "]. c #DC11EAD6FDC3", "[. c #E375EADFE48C", "{. c #E184EC4EEDDC", "}. c #E7B5F375E80F", "|. c #ECFBF535E7E2", " X c #E080E859F467", ".X c #E40EEC85F73E", "XX c #E9DFEF69F78C", "oX c #E423EF4FFAA3", "OX c #E79AF190FA3E", "+X c #EC1CF3E3FC13", "@X c #F225F688FA39", "#X c #F77AF9B1FCA5", "$X c #FE88FF66FFF5", "%X c None", /* pixels */ "%X%Xe t t t t t t t t t t t t t e e 6 %X%X%X%X%X%X%X%X%X%X%X%X%X", "%Xa L I I L L L L L L L L L L L L C d a %X%X%X%X%X%X%X%X%X%X%X%X", "e c h.P.P.L.L.L.L.L.L.L.L.L.L.K.z.p.:.K A Z %X%X%X%X%X%X%X%X%X%X", "e L P.@X+XOXOXOXOXOXOXOXoXoXoXoX.X~.f.4.U S %X%X%X%X%X%X%X%X%X%X", "e L P.+X].`.`.`.`.`.`.(././.Y.(.+XoXN.e.4.U S M %X%X%X%X%X%X%X%X", "e L P.+X`.^.^./.^.^.R.T.T.N.M.R.+X+X/.n.e.4.U A %X%X%X%X%X%X%X%X", "e L P.+X'./././././.^.R.T.N.M.Y.+X+X'.^.N.f.5.U a %X%X%X%X%X%X%X", "e L P.+X'././././././.R.T.T.N.Y.oX+X].'.'.~.g.>.s > %X%X%X%X%X%X", "e L P.+X]././././././.^.T.T.N.U._.XXOXOX+XOX).a.z 8 %X%X%X%X%X%X", "e L P.+X]./.`.`././././.^.T.T.U.(.)._..XoX+X@XK.c 6 %X%X%X%X%X%X", "e L L.+X].`.`.`.`././././.^.T.T.U.U.U.U.U.(.+XL.C 6 %X%X%X%X%X%X", "e L L.+X].`.`.`.`.`.`.R.M.v.k.g.d.s.s.s.e.d.K.h.C r %X%X%X%X%X%X", "e L L.+X].'.`.`.`.`.`.N.6.=.-.-.*.*.-.=.P G $.P c z x x k u %X%X", "e L L.+X].'.'.'.`.'.'.M.*.V P -.-.;.-.-.-.-.-.-.,.<.,.-.G x u %X", "e L L.+X].'.'.'.'.'.'.M.P D 6.k.E.I.j.h.P.).).).)._._.P.q.*.x u ", "e L L.+X].'.'.'.'.'.'.v.G D 9.U.+XXXj.j.XX$X$X$X$X$X$XOXk.3.V i ", "e L L.+X].'.'.'.'.'.'.v.G V 5.M.+X X<.<.).$X$X$X$X$X$X_.d.=.x h ", "e C K.+X].'.'.'.'.].].l.G z 3.M.+X.Xw.w..X$X$X$X$X$X#X_.s.Y l u ", "8 C K.+XoX'.'.].].].].b.G V 3.M.+X#X.X.X#X$X$X$X$X$X$X.Xq.G h y ", "6 C K.oX^.B.B.B.B.B.B.e.F V 3.c.Y._..X X_._.).).).)._.L.7.F i 0 ", "6 C K./.y.( ( _ _ _ ( ! B D 3.0.8.8.8.8.8.7.7.7.7.7.7.,.*.F h q ", "5 C K.^.` R E ^ ^ ^ ^ W B D 3.6.2.Y Y Y Y J H H H H F H H D h q ", "5 z z./.r.) r.t.t.t.t./ C x =.5.2.Q Y Y Y J J H H H H F F x i 4 ", ": z z./.t._ r.i.u.u.u./ B x =.9.9.8.8.8.7.7.6.6.6.6.6.-.P x q 2 ", "- z l.^.r.^ ) _ _ _ ) ! f k =.s.K.!.!.!.P.P.P.P.P.W.!.z.-.x 3 , ", "- k z.`.m.r.r.r.r.r.r.~ f k 1.d.).}.G.A.S.F.F.S.A.G.|.!.,.l 1 & ", "* k K.OX`.^.^.^.^.^.^.f.x s 1.x.).G.[ X ' ] ] ' X { D.!.7.l < & ", "* p q.K.z.k.j.j.j.j.k.<.z k 3.b.{.Z.+ o + + O . + Z.Q.7.n < % ", "= 7 p k k p p p p p p u y V 8.P.|.H.o.@ X.O.O.X.@ O.J.[.q.V 1 & ", "%X%X%X* * * * * * * * - 7 k -.h.C.A. .| ..... .} .A.V.&.g , % ", "%X%X%X%X%X%X%X%X%X%X%X%X; 9 k F $.%.@.@.@.@.@.@.@.@.#.+.w , % $ ", "%X%X%X%X%X%X%X%X%X%X%X%X= ; 9 u j b T T T N N m m v n u < & $ # " }; qosmic-1.6.0/icons/silk/page_white.xpm000066400000000000000000000040041304321135200177200ustar00rootroot00000000000000/* XPM */ static char *page_white[] = { /* columns rows colors chars-per-pixel */ "32 32 38 1", " c #A58AA58AA58A", ". c #A95BA95BA95B", "X c #AB33AB33AB33", "o c #ACE2ACE2ACE2", "O c #ADAFADAFADAF", "+ c #C8ACC8ACC8AC", "@ c #C9DBC9DBC9DB", "# c #CD97CD97CD97", "$ c #D0AED0AED0AE", "% c #D700D700D700", "& c #D809D809D809", "* c #D8A9D8A9D8A9", "= c #DCFEDCFEDCFE", "- c #E2BCE2BCE2BC", "; c #E487E487E487", ": c #E85BE85BE85B", "> c #EA46EA46EA46", ", c #EB16EB16EB16", "< c #EC26EC26EC26", "1 c #ECCDECCDECCD", "2 c #EE0BEE0BEE0B", "3 c #EEEDEEEDEEED", "4 c #F019F019F019", "5 c #F0E6F0E6F0E6", "6 c #F1DBF1DBF1DB", "7 c #F2EDF2EDF2ED", "8 c #F400F400F400", "9 c #F51AF51AF51A", "0 c #F604F604F604", "q c #F708F708F708", "w c #F7F6F7F6F7F6", "e c #F8FFF8FFF8FF", "r c #FA08FA08FA08", "t c #FB00FB00FB00", "y c #FC05FC05FC05", "u c #FCECFCECFCEC", "i c #FE00FE00FE00", "p c None", /* pixels */ "pppppppppppppppppppppppppppppppp", "pppppppppppppppppppppppppppppppp", "pppp%>,,<<<<<<<1111<>*.ppppppppp", "pppp>yyyyuuuuyytttrty2@ pppppppp", "pppp,yewwwweew098747r0;# ppppppp", "pppp,yw00q00097652,2er6-+Xpppppp", "pppp*oppppp", "pppp:2e1pppp", "pppp c #3A1C7EB13389", ", c #3BC87B0C3550", "< c #3B567F6E3493", "1 c #3D437CF737A0", "2 c #3D7C7EBF386F", "3 c #45EC7809406A", "4 c #3E65805238CE", "5 c #3F1383A43823", "6 c #3FC284E2391B", "7 c #44E385533E78", "8 c #479784DB4151", "9 c #456786E2402F", "0 c #457E895B3FC8", "q c #47E08A4C42AE", "w c #4A328A554342", "e c #49B08CEA42B9", "r c #4A768C95443F", "t c #4B298EFD43F2", "y c #4C808CFD46BA", "u c #4A9490C543C0", "i c #549396994E21", "p c #528E99824B4D", "a c #56D89E064EF1", "s c #5CBC9DA656A6", "d c #5E0A9F2B585B", "f c #63609BB25DC3", "g c #6015A129586F", "h c #606CA28D58F7", "j c #61FCA31F5B8A", "k c #6219A72559CB", "l c #652DA2175E28", "z c #62C4A4435C1B", "x c #64D8A7235EB9", "c c #645BAE435A76", "v c #6E9D8D506B73", "b c #7150A8056BCA", "n c #7415AEFB6D2F", "m c #7490AC3D6EAA", "M c #6F61B3AF65CE", "N c #6F8AB09B66F5", "B c #6D6CB59B6429", "V c #6F36B4876634", "C c #70ECB1376B36", "Z c #72ADB24C6AA9", "A c #73E0B3246BC5", "S c #7426B4CE6BB5", "D c #7236B1BF6BF0", "F c #72ADB3066C3A", "G c #7364B3446DB1", "H c #7721B5B66F86", "J c #7480B88B6AC3", "K c #789CBB066EDF", "L c #7855B744711C", "P c #7960B80772B3", "I c #7827B8BF7154", "U c #7BF8BAFB72DA", "Y c #7A61BD5A70F0", "T c #7B7FBD71725D", "R c #7C9ABF57736D", "E c #7C37BB287479", "W c #7E41B9C5763F", "Q c #7EA5BC3A7744", "! c #7F79BD927698", "~ c #8040BD08779C", "^ c #8010BFCE7727", "/ c #822EBF207A2C", "( c #8142C109779F", ") c #81F5C080786B", "_ c #818CC1F2787A", "` c #8335C0E879A2", "' c #832CC2657AAD", "] c #8438C2C17AFB", "[ c #8681C2D87F8D", "{ c #882DC3217FC1", "} c #8C74B765879A", "| c #A58AA58AA58A", " . c #A95BA95BA95B", ".. c #AB33AB33AB33", "X. c #ACE2ACE2ACE2", "o. c #ADAFADAFADAF", "O. c #8761C2828006", "+. c #8B08C59D8364", "@. c #8CCAC310859A", "#. c #8BDEC6BC84D6", "$. c #8E0EC76F8661", "%. c #8EA8C7388798", "&. c #8A69C8E383DD", "*. c #8D62CA11864D", "=. c #8EDFC1F4887D", "-. c #8FF6CA91881C", ";. c #901AC9D286CE", ":. c #9026C65D8940", ">. c #90B1CB568916", ",. c #92DDC9D58BC5", "<. c #91F9CA668A0A", "1. c #931FCC168B4C", "2. c #944FCC4B8B9C", "3. c #92D7CC8A8B90", "4. c #93A3CA7A8CB4", "5. c #966BC9F68F74", "6. c #96ABCBFA8F27", "7. c #9619CCED8D36", "8. c #95FFCE168EC1", "9. c #9716CDFD8E22", "0. c #9702CEFB8FBD", "q. c #9AE2CBF694C6", "w. c #9D40CDA196C3", "e. c #9E0BCED49721", "r. c #9A23D07C92BF", "t. c #9B9AD14F93B2", "y. c #9EABD2BD965B", "u. c #B10FD7C2AC66", "i. c #BAEECF12B8EA", "p. c #B700D630B31E", "a. c #B600DAC0B189", "s. c #B7EEDB4FB2C2", "d. c #B91EDB90B49A", "f. c #B95FDB6BB51A", "g. c #B9A8DBEEB58E", "h. c #C03CDE18BC18", "j. c #C8ACC8ACC8AC", "k. c #C9DBC9DBC9DB", "l. c #CD97CD97CD97", "z. c #D0A1DCFECF43", "x. c #D0AED0AED0AE", "c. c #D700D700D700", "v. c #D7E5D7E5D7E5", "b. c #D8A9D8A9D8A9", "n. c #DCFEDCFEDCFE", "m. c #C3EDE0EEC056", "M. c #C5D9E1DDC21D", "N. c #C6C7E12DC36D", "B. c #D21BE32FD058", "V. c #D324E4BBD143", "C. c #DA8CE9FDD86C", "Z. c #DBC4EC00D996", "A. c #DEE1EE17DCFB", "S. c #E2BCE2BCE2BC", "D. c #E487E487E487", "F. c #E85BE85BE85B", "G. c #E3BDEED9E21B", "H. c #E404EFD0E220", "J. c #E53EF00CE3D8", "K. c #EA46EA46EA46", "L. c #EB0DEB0DEB0D", "P. c #EC24EC25EC24", "I. c #ECCDECCDECCD", "U. c #EE0BEE0BEE0B", "Y. c #EF26EDD9EF4A", "T. c #EEEDEEEDEEED", "R. c #F019F019F019", "E. c #E61FF0B4E44F", "W. c #E5F5F10DE4A1", "Q. c #E6E9F145E587", "!. c #E724F208E5D4", "~. c #E794F206E650", "^. c #EA97F4A0E92B", "/. c #F11DEF0AF152", "(. c #F1B1EF2DF1DD", "). c #F0E6F0E6F0E6", "_. c #F1DBF1DBF1DB", "`. c #F2EDF2EDF2ED", "'. c #F3F8F3F8F3F8", "]. c #F42FF70BF3BF", "[. c #F51AF51AF51A", "{. c #F5EAF4F7F60B", "}. c #F611F611F611", "|. c #F6BFF60DF6D9", " X c #F70AF705F70B", ".X c #F7FAF7F2F7FB", "XX c #F5D8F918F55E", "oX c #F61BF8D9F5A1", "OX c #F71CF966F6D9", "+X c #F7DDFAA7F77E", "@X c #F8C0F740F8F5", "#X c #F902F7E6F92B", "$X c #F8FDF8F9F8FD", "%X c #FA04FA05FA04", "&X c #FA96F982FABA", "*X c #FAEAFAEAFAEA", "=X c #FBD8FB60FBE8", "-X c #FC0EFC0FFC0E", ";X c #FC6CFB51FC90", ":X c #FCD5FC56FCD4", ">X c #FD5DFC47FD83", ",X c #FDECFC41FD94", "XXoXW.m.,.R _ ] ) U Z l 3 qXqXqX", "qXqXqXqXP.4X4X1X1X1X1X1X-X-X-X>X,XH.u.%.^ ( ;.9.2.{ A g w , qXqX", "qXqXqXqXP.4X4X1X1X1X1X1X-X:X:XXXE.h.O.B J ` 7.y.t.$.H h t 5 qXqX", "qXqXqXqXP.4X4X1X1X1X1X1X1X3X3X!.f.:.V c M ! <.r.0.#.P z e < ; = ", "qXqXqXqXP.4X4X1X1X1X1X1X1X3X5X!.g.q.@.W N S +.8.3.[ D s 7 & % - ", "qXqXqXqXP.4X4X1X1X1X1X1X1X2X2XXX!.A.Z.p.n k / 1.-.Q j y * qXqXqX", "qXqXqXqXP.6X6X4X4X4X4X4X4X4X4X4X8X0X0XV.m a E >.*.L i 1 qXqXqXqX", "qXqXqXqXL.4X6X4X4X4X4X4X4X4X4X6X9X0X0XB.b p I *.&.F r @ qXqXqXqX", "qXqXqXqXv.L.P.P.P.P.P.P.P.P.P.P.P.Y./.i.f u x G C d 4 X qXqXqXqX", "qXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXv 8 6 0 q 9 2 # . qXqXqXqX", "qXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqXqX: > - $ + O o qXqXqXqX" }; qosmic-1.6.0/icons/silk/page_white_put.xpm000066400000000000000000000155731304321135200206250ustar00rootroot00000000000000/* XPM */ static char *page_white_put[] = { /* columns rows colors chars-per-pixel */ "32 32 216 2", " c #2896617D23E7", ". c #2B9268162705", "X c #2D3A6BD4287B", "o c #2D7D6A7029E1", "O c #2FCA70862B97", "+ c #332C75922DA3", "@ c #35B8629631C4", "# c #36A0651F32B5", "$ c #3AA56A8F368C", "% c #372371E83226", "& c #396676F33478", "* c #359478943005", "= c #34E179312FF3", "- c #35C779BB3032", "; c #37CD78F6315E", ": c #37F47B6D3196", "> c #38E978E033BA", ", c #3C097A18375F", "< c #3B887D043694", "1 c #41937C153B5B", "2 c #4BAD7A464759", "3 c #3E488091389B", "4 c #4581883C3F0A", "5 c #474487FF4092", "6 c #4D418B7247BB", "7 c #4D528F4E4764", "8 c #4FCC86784AD1", "9 c #4E618D5848DD", "0 c #500F870E4B15", "q c #4BBA941643A7", "w c #4CFF92A94587", "e c #4FEF98DD46CC", "r c #512F940249A1", "t c #503092A349F6", "y c #52C593394C81", "u c #537795AA4D96", "i c #57D1929151E7", "p c #5A4A95A254B3", "a c #586299AC5128", "s c #5E719FFB5851", "d c #60949FC25A5C", "f c #5C30A989524D", "g c #60C0A9D3572F", "h c #607AA19459EB", "j c #616AA0905B2E", "k c #6274A81E5A2D", "l c #6523A3515E4C", "z c #655BA6565E95", "x c #61F4AA955910", "c c #676DABBC5F32", "v c #6805B31E5E07", "b c #66FDB8DF5B1B", "n c #6775A749603A", "m c #6867A8F06138", "M c #689BABCE6041", "N c #6955AB846134", "B c #6B65AF66624B", "V c #6A9FAB216429", "C c #6E84AF0266E8", "Z c #6F89AE8967E0", "A c #712FADDF6A27", "S c #6BFBB51461EF", "D c #6CC7B15B6407", "F c #6EDEB525652E", "G c #6D5EBA3E62A7", "H c #6E7ABB516338", "J c #6FD8B965659E", "K c #6FEDB95165EB", "L c #72BEB49569C2", "P c #7506B3526DE0", "I c #752EB4836EE4", "U c #766BB5AB6FBE", "Y c #7735B6386F06", "T c #72AABC12680E", "R c #7864B9656F7C", "E c #7A8FB0877368", "W c #7B6FB9F87308", "Q c #7D78BA2475A9", "! c #7D84BAD97570", "~ c #7F2ABB027702", "^ c #7FDBB8BA7948", "/ c #823BAA6E7E17", "( c #82C8B4357D71", ") c #80EBBE10793A", "_ c #818CC0237845", "` c #8270BFB57B0C", "' c #848AB9787EA8", "] c #83F1BFDC7C20", "[ c #8411BEF67C62", "{ c #844DBFC07CB9", "} c #8423C0737C7C", "| c #850AC1FE7D39", " . c #86CEC32E7F3A", ".. c #87AEC7707D96", "X. c #875DC44D7F25", "o. c #889AC66A7FD6", "O. c #A58AA58AA58A", "+. c #A95BA95BA95B", "@. c #AB33AB33AB33", "#. c #ACE2ACE2ACE2", "$. c #ADAFADAFADAF", "%. c #8802C43C810C", "&. c #883CC6168017", "*. c #8A77C4EC82A9", "=. c #8A68C5A9835C", "-. c #8C20C53383E6", ";. c #8C6CC2BD8538", ":. c #8EF1C6D28655", ">. c #8E22C7DB8688", ",. c #8AD0C92F8195", "<. c #8AFEC96481FC", "1. c #8E07C857850F", "2. c #8EF8C8AA8704", "3. c #900FC9E3869A", "4. c #8F94C5BB88F0", "5. c #9072CB18889A", "6. c #9366CCC48BDC", "7. c #9425CCC58AAF", "8. c #9662CE818CC5", "9. c #967ECE9E8F3D", "0. c #99B9D0429254", "q. c #9A60CB71943E", "w. c #9B27D115933A", "e. c #9E53D2959602", "r. c #A0D8D3DD9863", "t. c #A3AFD54D9AD7", "y. c #A5FCD63D9D23", "u. c #A833D79D9F40", "i. c #ABE9CFF9A810", "p. c #A938D778A23B", "a. c #B91CD92AB4D6", "s. c #B92FDB70B511", "d. c #B9BDDC03B5AA", "f. c #BEDCD920BC08", "g. c #BE66DC10BB0C", "h. c #C8ACC8ACC8AC", "j. c #C9DBC9DBC9DB", "k. c #CD97CD97CD97", "l. c #C832D95CC5E8", "z. c #CDBFD907CC97", "x. c #D0AED0AED0AE", "c. c #D700D700D700", "v. c #D7E5D7E5D7E5", "b. c #D8A9D8A9D8A9", "n. c #DCFEDCFEDCFE", "m. c #D22EE5CBCFAF", "M. c #D2EEE68CD04F", "N. c #D3B7E710D145", "B. c #D410E7E5D143", "V. c #D617E9FDD323", "C. c #D649EA22D3B0", "Z. c #D659E923D3E3", "A. c #D733E91ED4F1", "S. c #D70FE9BDD4BE", "D. c #D7CAEBB2D4EA", "F. c #DA09EA3ED7E1", "G. c #DD26EC51DB41", "H. c #E096EF4CDE5A", "J. c #E18DF043DF52", "K. c #E2BCE2BCE2BC", "L. c #E487E487E487", "P. c #E85BE85BE85B", "I. c #E3B2EF31E29A", "U. c #EA46EA46EA46", "Y. c #EB0DEB0DEB0D", "T. c #EC23EC23EC22", "R. c #ECCDECCDECCD", "E. c #EE0BEE0BEE0B", "W. c #EEDDEDDEEEED", "Q. c #EF5DEE0CEF7F", "!. c #EEEDEEEDEEED", "~. c #F019F019F019", "^. c #E592F0C9E438", "/. c #E70FF15BE5F9", "(. c #E70BF215E5C9", "). c #E78FF241E64C", "_. c #F2BDF002F307", "`. c #F0E6F0E6F0E6", "'. c #F1DBF1DBF1DB", "]. c #F2EDF2EDF2ED", "[. c #F3F8F3F8F3F8", "{. c #F2CAF778F214", "}. c #F51AF51AF51A", "|. c #F623F4F8F64A", " X c #F611F611F611", ".X c #F4E6F871F479", "XX c #F687F55CF6B0", "oX c #F7A1F670F7CC", "OX c #F700F700F700", "+X c #F7F3F7F3F7F3", "@X c #F6C3F9F5F66B", "#X c #F829FADEF7EB", "$X c #F93BF80BF965", "%X c #F966F786F9A5", "&X c #F979F79BF9BB", "*X c #F8FAF8FAF8FA", "=X c #F9B1F919F9C8", "-X c #FA07FA08FA07", ";X c #FA68F884FAAD", ":X c #FBF6FA2DFC32", ">X c #FAEBFAE4FAEB", ",X c #FC26FAB9FC5D", "X>X>X-X>XXOX`.U.b.#.eXeXeXeXeX", "eXeXeXeXT.3X-X*X=X-X*X+X+XOX}.[.'.~.T.!.*X3X-X=X=XE.x.$.eXeXeXeX", "eXeXeXeXT.3X>X=X-X-X=X*X+X+XOX}.[.~.R.~.*X5X3XX>X>X>X-X=X*X+XOX}.'.!.~. X*X*X+X+X-X5XR.eXeXeXeX", "eXeXeXeXT.5X3XX-X*X+X X[.'.~.`.~.~.E.R.`.>XR.eXeXeXeX", "eXeXeXeXT.5X3XX*XOX X[.'.~.!.R.T.`.-XR.eXeXeXeX", "eXeXeXeXT.5X5X3X3X3X3X3X3X3X3XXR.eXeXeXeX", "eXeXeXeXT.5X5X3X3X3X3X3X3X3X3XX*X+XOX}.[.].'.}.X>X,X:X;X&X%X:XwXW.eXeXeXeX", "eXeXeXeXT.5X5X3X3X3X3X3X3X3X3X3X3X3X1X{.H.V.B.M.m.N.Z.l.eXeXeXeX", "eXeXeXeXT.5X5X3X3X3X3X3X3X3X3X3X3X6X7XJ.p.,.o.X.| } [ E eXeXeXeX", "eXeXeXeXT.5X5X3X3X3X3X3X3X3X3X3X3X8X9XD.<.b H T J v f e eXeXeXeX", "eXeXeXeXT.5X5X3X3X3X3X3X.9.6.%.I s 4 : - = ", "eXeXeXeXT.5X5X3X3X3X3X3X3X3X4X@X(.g.^ k M Y *.6.5.` V u 3 + eXeX", "eXeXeXeXT.5X5X5X5X5X5X5X5X5X5XqXwXI.i.' A Z Q ] ) P j 9 & . eXeX", "eXeXeXeXY.5X5X5X5X5X5X5X5X5X5XqXwX#X/.f.( l n m z d p 0 # eXeXeX", "eXeXeXeXv.Y.T.T.T.T.T.T.T.T.T.T.T.Q._.z./ i y t 7 6 8 2 eXeXeXeX", "eXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeX$ , < > % @ eXeXeXeXeX", "eXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXeXo O X eXeXeXeXeXeX" }; qosmic-1.6.0/icons/silk/paintbrush.xpm000066400000000000000000000131731304321135200177720ustar00rootroot00000000000000/* XPM */ static char *paintbrush[] = { /* columns rows colors chars-per-pixel */ "32 32 158 2", " c #AB19761D170A", ". c #B1357E321335", "X c #B52C83BA13C2", "o c #BA318B1E1213", "O c #B74186FB1C80", "+ c #B63886532333", "@ c #B8AE89AE25F0", "# c #B99E8DD12E39", "$ c #BE739140251B", "% c #BE3D956B2CFF", "& c #AA0E80812FE2", "* c #BCD39AC332B4", "= c #C22D969316D8", "- c #C29C985F23D9", "; c #C1F896C52C10", ": c #C30B98702CC6", "> c #C4DC9B803317", ", c #C1DD9E063F5E", "< c #C7ECA02B35AA", "1 c #CD1BA74E3CBD", "2 c #CD9AA9643C78", "3 c #D21BAD743FB1", "4 c #B59A943A4690", "5 c #BA8997664176", "6 c #B95D9D8D499B", "7 c #B9C09F87571B", "8 c #875588667AF2", "9 c #8A738B377B53", "0 c #A5D9911B6072", "q c #B51DA4A1731F", "w c #B3CDA6877DC7", "e c #C5A6A52141EC", "r c #CFCCAC97427E", "t c #D1C6ADC44181", "y c #D523B2AB4537", "u c #D1D1B075498A", "i c #D8B7B8AA4A84", "p c #DD0DBE4D5040", "a c #C230AA136E57", "s c #D7A6BB3F65A4", "d c #D863BBE767BB", "f c #D8BBBC8E69AC", "g c #C1B2AC827650", "h c #DF3BC1535301", "j c #DDF0C0C85D8C", "k c #E169C503568C", "l c #E1EFC56D5AF8", "z c #E5DFCBBA5F65", "x c #DC88C2B6721A", "c c #DE93C6147AA6", "v c #E23AC74566C9", "b c #E717CDCB6113", "n c #E69FCE2A6E09", "m c #EA19D27764B7", "M c #EE17D7EF69AA", "N c #EE3ED86E6D07", "B c #E416CC66763D", "V c #E1B1C9EC7B98", "C c #EFE5DB7274C8", "Z c #EE01D8957842", "A c #F1E7DF007EAF", "S c #4D85676C8C23", "D c #51746979895F", "F c #5A256F94897B", "G c #5E6974578C8B", "H c #503A6AEE92C9", "J c #5F1677749169", "K c #5658747F9DC6", "L c #5B6F7979A002", "P c #60C77A3094E4", "I c #64887E40984E", "U c #4DF66FF1A222", "Y c #53CE72F0A1F6", "T c #5B757AC6A355", "R c #527A75F7AB68", "E c #570B7CA2B19D", "W c #62227FDCA0DF", "Q c #652C81DE9FA4", "! c #6BB084E99CDF", "~ c #701888F69E47", "^ c #6CDB87CBA6C3", "/ c #6886888CAF72", "( c #79239250A4EA", ") c #797495F4ADDF", "_ c #64788B33BAC8", "` c #687F8D66BED3", "' c #7A909A80B68C", "] c #71129364BD41", "[ c #79F69B7FBDBA", "{ c #55D58173C322", "} c #5993860AC559", "| c #5E138903C7B1", " . c #63748FF1CD40", ".. c #77B89B01C328", "X. c #7B169E7CC3AA", "o. c #742499DDC8F7", "O. c #8A1F94CD96E3", "+. c #B287A99E8D20", "@. c #A5A0A71D9E8A", "#. c #B1E4AC249C19", "$. c #80D5976AA331", "%. c #81539AE9A582", "&. c #83599C7BAB49", "*. c #936F9FC2A526", "=. c #82EA9F23B31D", "-. c #8A91A0E1A621", ";. c #94B5A2EEAAE1", ":. c #8712A2A8B7EF", ">. c #8E05A2D4B0CE", ",. c #84FAA396BB65", "<. c #8E51A62DBBA1", "1. c #959BA7D3B5A1", "2. c #94EFAB14BE1E", "3. c #9CF0AD61B99C", "4. c #ADA1ABE5A1B6", "5. c #A434AAC1ACE8", "6. c #B6D4B364A7E6", "7. c #BE25B927AAE0", "8. c #BDE6C03FBBE9", "9. c #C624B9CA9811", "0. c #C6F1BDE5A4CA", "q. c #C435BD7DAAA0", "w. c #DF23C7A280BA", "e. c #DFF4C8878249", "r. c #DB77CA6E9DA4", "t. c #ED42D9A48783", "y. c #E57DD1058B86", "u. c #E6B3D3229313", "i. c #EE74DD1E94BA", "p. c #ECE8DC1F9ADB", "a. c #F423E2D18250", "s. c #F475E49F928B", "d. c #F450E55AA012", "f. c #F71AE95A99E6", "g. c #CCE4C7CAAFB9", "h. c #EA8AD9CAA2FE", "j. c #EA17DD1AB925", "k. c #F00AE103A730", "l. c #F3A6E5C9A54A", "z. c #F677E991A425", "x. c #F17EE39CA972", "c. c #8728A6D6C4CB", "v. c #8857A9D7C633", "b. c #8186A4C0CB7D", "n. c #943BAE72C1F8", "m. c #9388B2EECB15", "M. c #8A79AFCCD4DF", "N. c #8C9AB171D32D", "B. c #90C2B474D240", "V. c #B377BEE2C49F", "C. c #C676CD4FCB57", "Z. c #D46AD208C4D0", "A. c #D9A3D6F1C2B5", "S. c #D45BD74ACD04", "D. c #DAE6DAAACA48", "F. c #E6B3DF07C6DF", "G. c #EE1CE2F0C33E", "H. c None", /* pixels */ "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.= H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.u 2 - o ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.f c y.x > o ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.e.u.p.V > X ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.f e.h.h.t.j : X ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.e.u.k.i.v t $ X ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.d e.h.k.s.n 1 $ O H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.e.u.x.d.Z p ; . H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.d e.h.x.f.A l 3 $ H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.e.u.x.z.a.z y > H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.d e.h.x.f.a.z y > + H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.w.u.x.z.a.b y > + H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.s w.h.x.f.a.b y : + H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.d w.u.x.z.a.m y > + H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.s w.h.x.f.a.m i > + H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.r x y.x.z.a.m i < + H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.#.q * 2 B i.s.a.N p > + H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.#.#.w 6 e s B C M k r @ H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.#.#.#.#.+.q 7 , 2 h h t > + H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.@.4.6.7.q.0.9.g 5 % 1 1 > # H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.-.*.5.8.Z.F.G.j.r.a 4 # @ + H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.%.&.>.3.V.C.S.D.A.g.+.0 & H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.$.&.n.m.n.2.<.<.1.;.O.8 H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.&.&.:.m.B.c.[ ` _ / ^ ! H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "$.%.&.=.,.v.N.M.b.o. .} E T H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "( ( ( ) ' [ X...] ` | { R U H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "~ ! ! Q Q W T L K K R R Y H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "! ! I P J G G F D S H H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.9 8 H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H." }; qosmic-1.6.0/icons/silk/palette.xpm000066400000000000000000000171121304321135200172460ustar00rootroot00000000000000/* XPM */ static char *palette[] = { /* columns rows colors chars-per-pixel */ "32 32 249 2", " c #96CF5C471048", ". c #9AEF5F8314DC", "X c #9C3760BB1666", "o c #9E4562F91993", "O c #A17165AE1E28", "+ c #A448699C2320", "@ c #A8836BBB2610", "# c #A7926D602922", "$ c #AB2C6EB82A7B", "% c #AB3F70A52D5E", "& c #AE6F7574342D", "* c #B32176D83629", "= c #B4E67A163A9F", "- c #B86A7C7F3D7B", "; c #B67F7EC441C4", ": c #BBA47F3841D2", "> c #F0635A3E5400", ", c #F30E57985000", "< c #EE866BD15CD3", "1 c #F13A67865055", "2 c #F47F6E4F5289", "3 c #F61C652E5C95", "4 c #EC8875D95EDA", "5 c #F6646EEE6C1D", "6 c #EEC770B86031", "7 c #F01279A968AA", "8 c #F6D07D2A675D", "9 c #F2DD72706C74", "0 c #F4B77F2E760D", "q c #F7577CCB78CE", "w c #7FCEBB4E4224", "e c #7CBEAB535FF9", "r c #FE11A7D13893", "t c #FEDEAB293A48", "y c #FCD9B12A3909", "u c #FC0DC54C3AF0", "i c #FF06D6A836CD", "p c #FFC6D8FC3AF6", "a c #BB6081754511", "s c #BDE4856D4B1A", "d c #C03B892E50D5", "f c #8412B70C40B8", "g c #8538BB4A46DD", "h c #8C38B99D464C", "j c #8F46B77E4A80", "k c #97A3B6F54D1D", "l c #9B97B5D24DD5", "z c #9196B91A4A45", "x c #A263B1B64D82", "c c #B9E5AB09578A", "v c #A63CB26E52F6", "b c #ABFCB3DD52B7", "n c #A9FEB3675933", "m c #A1D7B8B25947", "M c #984298117FEE", "N c #BF5B918965D4", "B c #B42D95106EE5", "V c #BF9795A66CC9", "C c #A1DD95377718", "Z c #BAB699577355", "A c #80FCAB6C60AD", "S c #9342A74365DF", "D c #9F79A7F96878", "F c #B1A7A39B6A06", "G c #BF8DAACB755F", "H c #BAFDBEB973E1", "J c #C1CA8193461E", "K c #C0BA86394BF9", "L c #C3CB88DD4F9D", "P c #C86C883A4ED1", "I c #C5A18D30557C", "U c #CC5D8BD653E5", "Y c #C6AB8F445972", "T c #D0118EBC5883", "R c #D1688FD15A0F", "E c #C74591215BCE", "W c #CACD92675CAB", "Q c #D334919D5C95", "! c #F4D882434D88", "~ c #F7089E9A4DE0", "^ c #F911985548BB", "/ c #F73E899F5397", "( c #E15A94B75D45", ") c #C409B78A5ADF", "_ c #D9EAB8C65EE6", "` c #FCD7A6EB4478", "' c #FCCCAC0541D2", "] c #F7E0AA404A72", "[ c #FAC7AC7E4951", "{ c #FDA1B0344A0B", "} c #F6FEBC984E80", "| c #FB0EA658530D", " . c #F519AD7056DB", ".. c #F2F7AC0A59D4", "X. c #FF6CB5B65580", "o. c #FB6BBE07570B", "O. c #FA8EB3B058E3", "+. c #F304BD685D24", "@. c #CC039588623D", "#. c #CF20996D6718", "$. c #CF6F9B5669EA", "%. c #D7379791658F", "&. c #D2CC990E65C9", "*. c #DDB69C5061D4", "=. c #D49D9D9B6CB6", "-. c #D9E19C826C55", ";. c #C6759CF67142", ":. c #CD159EEF7693", ">. c #C4C19FC579F5", ",. c #D7F39F777148", "<. c #DC5B9DE971EE", "1. c #EC6D83A76841", "2. c #E13597C2616E", "3. c #E2F19A6865D0", "4. c #EA0E90B86C8D", "5. c #E4399E046B4D", "6. c #F00D9D066CCB", "7. c #EE4F8DBB73A5", "8. c #F59584947AE4", "9. c #F1E88E187C6A", "0. c #C1E6AE5060E8", "q. c #CEA7AF776E08", "w. c #D58EA2146D9F", "e. c #D197AD756D77", "r. c #D147B16F6718", "t. c #D58CA2E774A2", "y. c #D90EA1B67437", "u. c #D434B02D736C", "i. c #DC9EAFB377B2", "p. c #D7F2A7267A37", "a. c #DBCEA6687A58", "s. c #DAC9A92A7D6B", "d. c #CF82B52D759C", "f. c #E15EA16564A7", "g. c #ED1DAC5D661C", "h. c #E40BA0F06F26", "j. c #E880A0736C52", "k. c #E114B8FB653F", "l. c #F025BE8B65DC", "z. c #EC7AB36F6E8B", "x. c #F437B51F619B", "c. c #F422B3F96A0C", "v. c #E4CCA3C6747A", "b. c #E8D3A4DD7362", "n. c #E60DAC717448", "m. c #E4B5A73E7A61", "M. c #E708AA577E01", "N. c #E8F2A90B7D1C", "B. c #EB41B2AE7433", "V. c #F091B67B7A61", "C. c #8B76C28F5201", "Z. c #94EBC179544E", "A. c #F410C90A44B0", "S. c #FC79CE3243E9", "D. c #F678C39F4EF4", "F. c #F936C9E14C5A", "G. c #FD84D4A34357", "H. c #FF4ED8C64236", "J. c #FC61D35B4A53", "K. c #E5F4C0D65307", "L. c #F4CCC41F5229", "P. c #F694C9A9558F", "I. c #FA4AD1A25384", "U. c #FFB9DDB25476", "Y. c #FE83DBF15A0B", "T. c #F7E3D06D6261", "R. c #FBDCD4AD6564", "E. c #F1A8C09176F7", "W. c #F65DCF4B7044", "Q. c #F467CECA7D8A", "!. c #3A959BF9AC8B", "~. c #31449E34B41E", "^. c #388F9DF2B149", "/. c #45B19DE1936C", "(. c #4C609E149177", "). c #56F8969F97DA", "_. c #5B5E9CE5901B", "`. c #6E9F9E248B85", "'. c #7C21949485FB", "]. c #78C5959A891C", "[. c #754B98E68EC9", "{. c #65B497B19312", "}. c #680597E692F1", "|. c #7EBAA5E5A003", " X c #4B3F9C1CA526", ".X c #40D09DB8AAEE", "XX c #548A9D47A304", "oX c #4574AA71BDCA", "OX c #4E45AA98B90B", "+X c #51A6AA35B731", "@X c #6732A45FA755", "#X c #735CA37AA0C8", "$X c #87DA9C618405", "%X c #929A9B2886D3", "&X c #9DEDA8088ED6", "*X c #A1C5A2F38D33", "=X c #BB03A182816F", "-X c #F79D8BA3821F", ";X c #EEF59B0A83A3", ":X c #F3069E258BAF", ">X c #CCF6A7178361", ",X c #DDFDAD10831B", " < 5XnXVXbXuXuXaXsXiXX7X6X$.& X ", "GXU W #.=.t.s.,X1XtXaXuX,X=.I I #.s.wXqX>.C '.].M =X1XqXp.E & . ", "GXGXGXGXI I I I I @.p.qXtXtXqXqXqXqX7Xm.%.@.N V :.,XtX6X@.a $ GX", "GXGXGXGXGXGXGX= * a E t.uXVXsXiXyX9Xv.3.( ( 3.5.N.7X6Xt.s & GXGX", "GXGXGXGXGXGXGXGXGX= - E qXsX7Xv.h.5.2.( ( 3.N.9X9Xs.#.d & + GXGX", "GXGXGXGXGXGXGXGXGXGX% s s.wXM.h.3.2.3.5.5.v.6X,Xt.@.s * + GXGXGX", "GXGXGXGXGXGXGXGXGXGX$ a $.,XqX7Xv.v.7XwXwX6Xa.@.; % # GXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGX= I $.qXyXM.m.6XqX,Xt.E ; + GXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGX& s p.qX6Xa.t.#.I ; & @ GXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGX+ * E =.=.@.Y s & @ o GXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGX# & * & & & % GXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGXGXo o X X GXGXGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGX", "GXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGX" }; qosmic-1.6.0/icons/silk/photo.xpm000066400000000000000000000173421304321135200167460ustar00rootroot00000000000000/* XPM */ static char *photo[] = { /* columns rows colors chars-per-pixel */ "32 32 256 2", " c #778E6DC3499A", ". c #76246C46548C", "X c #7D0B707654E9", "o c #8616570D1BAE", "O c #874E58331CCB", "+ c #8B135AD71D99", "@ c #90ED5E971E89", "# c #90085F0F203F", "$ c #92355F712547", "% c #9492625E2611", "& c #9A5B66A9258E", "* c #9C6369B1273A", "= c #9636645928D1", "- c #94FB68D52BFF", "; c #9D356B942B0C", ": c #8C9473112CC3", "> c #8668789C2898", ", c #8A4479752E53", "< c #9F706AA1302A", "1 c #8E137B3C306A", "2 c #8084749B3298", "3 c #92F67DFA329C", "4 c #9E6878AB3A51", "5 c #A2006EAC2AD4", "6 c #A469718C2D94", "7 c #AADD76282D95", "8 c #AE9C79202F3D", "9 c #A39B6ED53551", "0 c #A589744331C9", "q c #AA13759632B4", "w c #A46E7A2535A7", "e c #ACAF7B3A342D", "r c #AE3176963C9A", "t c #A3227B6D3B15", "y c #ADC37AA03D75", "u c #A1F276FB3C53", "i c #B3B97DDF336E", "p c #B27A7C873DE5", "a c #8B0775934C05", "s c #A63E7DCF41DD", "d c #B3977CDD41C5", "f c #29E1BD793A56", "g c #3655BF453B46", "h c #68AFD1D63A7A", "j c #2975BAA5429A", "k c #306DBE0842C0", "l c #2CD2BE4B527C", "z c #346EBD7A5A9F", "x c #4026BF68562A", "c c #7222B7635F72", "v c #7A2CBAB159EC", "b c #5BECB2E27666", "n c #6F12AE4F6068", "m c #7560B92A6180", "M c #74EEBA766776", "N c #327DC06742CC", "B c #33A9C2245BD4", "V c #41E6C2AE48C4", "C c #4ACCC69D4A97", "Z c #500FC7194423", "A c #528EC8874572", "S c #57C9CA3649F2", "D c #5B7CCB9B47B5", "F c #4179C45F53A6", "G c #4ADAC5C35960", "H c #5832C7185C60", "J c #5C5ECD535E08", "K c #6C53D1F24C0C", "L c #737AD4D053F9", "P c #7B1FD745545C", "I c #7C74D92559A0", "U c #756AD4135D85", "Y c #5683CA96680D", "T c #5AA6CD196D81", "R c #5184C8AF65BA", "E c #4A37C969723C", "W c #50D9C1B37199", "Q c #6FA7CF206DAA", "! c #7447D26E66D5", "~ c #67D3CCA877A2", "^ c #6AE4CC6D73C1", "/ c #66EBCCB7785B", "( c #96FC81353498", ") c #9F1A88EC3AFD", "_ c #9AE184DB372D", "` c #AE3D83033ACF", "' c #A4568AE43C9C", "] c #ABE38CD73D9F", "[ c #B46D81653645", "{ c #BAB2833A3528", "} c #B59583153A09", "| c #BB0E86783ACD", " . c #BDA98A5C3C9D", ".. c #A4C591993C56", "X. c #A98B92653E9B", "o. c #C1D78DD63DCD", "O. c #C4CD91623E6C", "+. c #9FD990484109", "@. c #9CA3923849E6", "#. c #9D93922F5355", "$. c #AB1D826F469E", "%. c #B628841F4278", "&. c #B9DA868F43BE", "*. c #B56F8C54432A", "=. c #BB628B2A44F7", "-. c #BA1C808F47F0", ";. c #BE638F8C4967", ":. c #A2F692B64367", ">. c #BE2192194908", ",. c #A4EF8AC9578D", "<. c #B8EA8BFB5266", "1. c #B07992D35D6F", "2. c #BF0E96755A27", "3. c #907BA6EB48C9", "4. c #846CBD934298", "5. c #A5FFB5745902", "6. c #9ED98AD06205", "7. c #A3E78E78637A", "8. c #A6FE920463B1", "9. c #A9E1930E66C1", "0. c #AAED94176869", "q. c #BCB2B6116DE8", "w. c #C1D28F603FCD", "e. c #C0D78F4749B2", "r. c #C23C901C4011", "t. c #C7959931468A", "y. c #C33795404B9C", "u. c #C6FD9A544D5E", "i. c #C9EA9DAF4E67", "p. c #C701998351B9", "a. c #CA499EBA5154", "s. c #C1B497375AE4", "d. c #CF92A4DA4FAF", "f. c #CDC0A40951FF", "g. c #D03CA9125546", "h. c #D0A2A76E51F7", "j. c #D127AA585547", "k. c #D366AF405A07", "l. c #D939B9D55A45", "z. c #CDC6B39B61C1", "x. c #CE43B85E6D7E", "c. c #D20EB5E4680B", "v. c #CAFFB1D57AC8", "b. c #CFD1BA897339", "n. c #D287BBA17463", "m. c #8E5AC0F54F8D", "M. c #8B8EC2055110", "N. c #93EDC1AF57CC", "B. c #968EC0E25943", "V. c #9A03C2BE5CA0", "C. c #98EEC8485404", "Z. c #869FDF075282", "A. c #888DDF1B5690", "S. c #88B5DC495B5C", "D. c #846AE13450A7", "F. c #9E6BC6036142", "G. c #9213DF0F6B28", "H. c #90B8DF0063C6", "J. c #A1C5CA1464A1", "K. c #A056C6FF6397", "L. c #8FB8E0ED603B", "P. c #9355E4086369", "I. c #9759E48369F3", "U. c #9D2AE5657305", "Y. c #9CE7E88C732B", "T. c #A046E6C976C7", "R. c #A2DFE6D17999", "E. c #E047C42E6621", "W. c #C7A0C0527890", "Q. c #D9DDD5EE7ACF", "!. c #E44CC86068B4", "~. c #EF48DE2E6F1F", "^. c #E572CB2975AF", "/. c #E4C0CA2474EC", "(. c #EA25DCDB707D", "). c #F08BDF7372F9", "_. c #EC80E06F7B37", "`. c #F801E44678C5", "'. c #FF13E6E17399", "]. c #2EE9BF72803B", "[. c #38E5BF8C8861", "{. c #461FBD5B87EF", "}. c #50C8BE718F00", "|. c #5E73B25C944F", " X c #50D096BBA7AE", ".X c #4E89BF71A1CA", "XX c #5464BB0EB281", "oX c #78B0B6CFBF27", "OX c #3632C29588E1", "+X c #3E2FC278B49D", "@X c #47D6C14787E1", "#X c #5F4FC61D80DB", "$X c #5701C25C8FF6", "%X c #5D0BC1599DB7", "&X c #5145C412A3DA", "*X c #4CADC343C009", "=X c #6160C203B8C6", "-X c #3E94AD74D6B8", ";X c #3547A43AFFFF", ":X c #3ACAA646FCAD", ">X c #49BF9000C925", ",X c #5C319B12C942", ".y.y.p.a.;.0 & ", "{ o.g.k.f.t.O.o.o.o.o.o.o. . .| | { { [ i e e e q e } =.y.=.6 % ", "{ o.f.j.t.>.1.0.0.9.9.8.8.7.7.7.7.6.6.,.*. .=.*.*.} e p ;.=.6 % ", "{ o.f.f.O.1.vXJXHXHXGXGXGXGXGXGXGX5X5XbXW.!./.^.^.z.` 0 =.&.; % ", "{ o.f.d.o.8.oXdXdXsXkXxXxXzXzXjXjXjXjXPXAX_.SXDXDX/.` 5 &.&.; # ", "{ o.f.f.o.#.|.+X+X*XaXgXzXjXjXjXjXjXjXIXBXCX).'.FX/.` ; &.%.; + ", "{ o.f.f.o.@.b OX].[.&XiXfXjXjXjXjXjXjXhXKXMXQ.~.`.E.` ; %.%.; + ", "{ o.f.f.o.:.M E B l z @XpXjXjXjXyXyXyXlXIXLXMXCX(.l.e ; %.%.; + ", "{ o.f.f.o.:.m T F N f z .XpXsXyXyXtXtXyXlXPXLXNXAXq.4 ; %.%.- + ", "{ o.f.a.o.:.m T Y G k j z {.2XeXtXtXtXtXyXuXrXrXhXcXa * %.%.= O ", "{ o.f.a. .:.m T Y G V g g x $X=X2X4X7XwXqX0X0X9X9X,XX & p d = O ", "{ .a.i.| +.c R F V S D A Z S H W }.XX3X6X8X:X;X;X>X. & p d = o ", "{ .i.u.| ..v J C A L I L K h h D H #X%XXX1X % r y % o ", "i | u.y.i X.J.Y.Y.U.T.T.T.U.U.U.I.I.I.P.P.P.P.P.P.m., $ r r % o ", "i | y.y.} ] 5.J.J.K.F.F.V.V.V.V.V.V.B.B.B.B.N.N.N.3.: = r r % o ", "i } y.y.| ` ' ' ' ) ) _ _ ( ( 3 3 3 3 1 1 1 1 , , : - < d r % o ", "8 } y.u.;.} i q q q 6 q $.$.y w w t s u ; = % % $ = < r d r % o ", "8 [ y.p.y.e.=.=.&.&.&.s.mXZXn.z.z.x.VXv.<.r r r r r p d -.r % o ", "7 i =.;.=.=.=.&.&.%.%.2.nXZXb.z.z.x.VXv.<.r r r r r r r r 9 $ o ", "7 7 e e e q q 0 0 6 5 0 s $.t w w t t 4 - % % % % % % % % $ + O ", "7 7 6 5 5 ; * * & & % % @ + + + + O o o o o o o o o o o o o O O ", "UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX", "UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX" }; qosmic-1.6.0/icons/silk/picture.xpm000066400000000000000000000166321304321135200172710ustar00rootroot00000000000000/* XPM */ static char *picture[] = { /* columns rows colors chars-per-pixel */ "32 32 241 2", " c #7C1D90025BA6", ". c #689A98DC5D89", "X c #793D95DF5771", "o c #7ED29CF35D82", "O c #773BA5B154C6", "+ c #78F1A71656EC", "@ c #7AD5A9C25AC8", "# c #7E2ABCD6528E", "$ c #7F0EBB695BD0", "% c #6B889C2B60FD", "& c #7D13918D73DF", "* c #77599E9674C6", "= c #7DA6962A7C0F", "- c #7EE0A529627A", "; c #7759AB136F53", ": c #7DB6AB8E6D58", "> c #7D99B531647E", ", c #7833AD807532", "< c #7945AC547E3A", "1 c #7D64B24274BD", "2 c #9CEC80E73F5E", "3 c #8A0184C54647", "4 c #846281BB4D2E", "5 c #8F6984634A04", "6 c #96628B5D45BB", "7 c #94268A45480E", "8 c #853895E14A68", "9 c #864499444A83", "0 c #9A1F90984518", "q c #80168EB55537", "w c #8299964B5068", "e c #9D4598515567", "r c #ABF088144414", "t c #B5F491934932", "y c #B9EC93E74B13", "u c #A7419E425C61", "i c #B19895D95629", "p c #BE429C485BA7", "a c #8A20A6725C12", "s c #8452AC775C0B", "d c #8D79AA985ED6", "f c #81E3BEA553BD", "g c #878CB0E05A29", "h c #8880B2035C20", "j c #8378BD835BEB", "k c #874F89AE63A7", "l c #806789D068D3", "z c #85CBAC5563B6", "x c #874DB49D63CA", "c c #882CB4976248", "v c #85CBBD9763EF", "b c #888ABED86511", "n c #8024B77D6CB3", "m c #89C2BA426951", "M c #8131A7AC7BC7", "N c #8437B6217663", "B c #8368B6697C09", "V c #950EB9447F1B", "C c #C2159ACB4F0E", "Z c #CD5CA0D65A3A", "A c #D50CA5695CF3", "S c #C8CFA33860CC", "D c #D4F0A8D7633A", "F c #D299AF276DDA", "G c #CEF3B0EB72A6", "H c #8661C0EB5642", "J c #885DC18256CF", "K c #877EC1655C0C", "L c #8D41C42B5B56", "P c #9196C6845DAB", "I c #8C38C2B6622B", "U c #8D9AC2366D24", "Y c #949EC7C5629F", "T c #96E4C93D63BC", "R c #9B41CBA76662", "E c #92D8C6696A94", "W c #97F3C8A26EC0", "Q c #9C37CB7E6B9E", "! c #8FE0C17C77E5", "~ c #91ACC2F27666", "^ c #9D7FCC27769E", "/ c #96E5C69B7D47", "( c #9E7ACBF17A37", ") c #A23DCF716CB0", "_ c #A298CF2C7368", "` c #A444CF4A7B3E", "' c #A587D0867760", "] c #69EB9CC682AE", "[ c #6C179ED88A05", "{ c #6D259AAC93C0", "} c #63CF937E9DAD", "| c #7EE19AE590F2", " . c #73C4A4B1892B", ".. c #771BAB3C8DFC", "X. c #6D5FA0999CEA", "o. c #700FA0BE962C", "O. c #7B1EAC7A90E0", "+. c #7EE7AAA49D52", "@. c #663494E3A2CE", "#. c #6FB09F42A33E", "$. c #6ADA9798ACC2", "%. c #70119CA2A04C", "&. c #7BA79C6EA61F", "*. c #70979ADEAD84", "=. c #6CC49A79B468", "-. c #74569D9FB0C4", ";. c #72DB9B99B89F", ":. c #7CFFA554ACE1", ">. c #7EFFA54CB514", ",. c #6E589985C285", "<. c #73F29C81C71F", "1. c #73589B87CBD4", "2. c #7BEDA1ADC55B", "3. c #7CBCA2A9CA9D", "4. c #7DAFA2BAD15F", "5. c #89F9AFAD8558", "6. c #83A0B4928636", "7. c #86D0B8B581DC", "8. c #8B93BCD08442", "9. c #809DB1E18D6C", "0. c #8712A39298F7", "q. c #878DBAD297AE", "w. c #87ADB94B9BF1", "e. c #8AD1BC919B77", "r. c #9D7FBFAB9241", "t. c #876BA885AFBF", "y. c #8222B139A5BD", "u. c #892EB7E0A5AD", "i. c #85DDB7A9AC86", "p. c #8C90BCE0A9B2", "a. c #9374BABFAEFD", "s. c #8185A780B648", "d. c #8453AF64B9F4", "f. c #84D8B473B4C7", "g. c #8BF8B464B3D1", "h. c #8AFAB99EB4C5", "j. c #8A88B450BDC6", "k. c #92BEB597BE54", "l. c #CF9AB98580EC", "z. c #C2A8BE818F49", "x. c #CAC9BE948AD7", "c. c #9A2EC89C865E", "v. c #94C0C3928C54", "b. c #9C8CC99E8CE4", "n. c #9C5DC83597B8", "m. c #9BBAC89D9062", "M. c #A3CFCEA284C8", "N. c #A41EC5D289FE", "B. c #ABC3CC949DE1", "V. c #B883C25F9539", "C. c #BA86C8089E5A", "Z. c #B170CB659E63", "A. c #9355C172A188", "S. c #AF66CFF1A15A", "D. c #A4B3C917A98A", "F. c #B161D361A531", "G. c #BC05DAD6A1CF", "H. c #B979D91EAA0C", "J. c #A32BCA16B932", "K. c #B082D34CB100", "L. c #BAC0D4DEB3C5", "P. c #CB31C23C8F74", "I. c #C8E5C8CC9BFC", "U. c #C57FD2F0AD9C", "Y. c #C4C4D5F0B2E8", "T. c #C0D4D99DB77C", "R. c #C2EBDBEDBDA7", "E. c #8BC1A4EDCC50", "W. c #90E0A80ACC5E", "Q. c #91FFA956CD95", "!. c #99D2ADF7CE5A", "~. c #88AFB4A8C450", "^. c #8DF2B4B5C85D", "/. c #94AEB679C0DB", "(. c #9A5AB8D1C5FD", "). c #9176B499CCFF", "_. c #9E1BB0FDCEE0", "`. c #82BFA5EFD52D", "'. c #87BEAA3AD82F", "]. c #8655A844DC94", "[. c #8ABFABBEE006", "{. c #8AE2B2B3D11A", "}. c #8F84B282DC29", "|. c #9227B53DD4CD", " X c #9EDEB303D0D3", ".X c #9400B482DBDD", "XX c #990CB8C4DEDD", "oX c #A2F8B51BD1AD", "OX c #A636B96ED72A", "+X c #ABEEBCD8D6F7", "@X c #A783BAF4D90E", "#X c #AA6BBCC2D97F", "$X c #89E2AB16E188", "%X c #965DB410E137", "&X c #9A20B72CE351", "*X c #9C69B98DE3C8", "=X c #9ED7BB88E9D0", "-X c #A1CABC54E6AF", ";X c #9F3FC555C514", ":X c #AD75C79FCFA0", ">X c #A504C554D433", ",X c #A8B7C4C3DF24", "X;XJ.K.H.G.G.G.G.F.D.a.j.).|..X2XkXgX#XQ.BXBX", "BXBXW.+XgXkX3X}.{.~.i.e.b.M.` ` ` ( / 8...X.=.,.1..XpXgX#XQ.BXBX", "BXBXE.#XgXlX3X}.~.h.A.m.M._ _ Q Q Q W ~ 7.O.#.=.1.%XpXfX#XQ.BXBX", "BXBXE.#XgXnX4X|.j.p.n.M.' ) R T Y Y Y E ! 6.o.$.1.%XpXfX#XQ.BXBX", "BXBXE.#XgXlX4X|.f.e.b.` Q R Y P L L L I U B [ @.<.&XpXfX#XQ.BXBX", "BXBXE.#XgXlX4X|.f.q.c.` Q Y P L J J H K U N ] } <.&XpXfX#XQ.BXBX", "BXBXE.@XgXlX4X|.f.q.c.^ T L L J H f f j b 1 ] } <.&XpXfX#XQ.BXBX", "BXBXE.@XgXlX5X|.f.w.v.^ Y L J f f # # j v 1 ] @.<.*XpXfX#XQ.BXBX", "BXBXE.@XgXlX5X.Xj.u.v./ E L H # # # # $ n < { $.3.*XpXfX#XQ.BXBX", "BXBXE.@XgXlX5XXX^.g.e.8.U I j f # # $ > , .%.;.4.*XpXiX#XQ.BXBX", "BXBXE.@XgXlX5X&X|.j.y.9.N m b v j j > ; ] { -.2.`.-XpXiX#XQ.BXBX", "BXBXE.@XgXlX5X*XXX).d.+.M z z h g s - * { *.2.`.].-XpXiX#XQ.BXBX", "BXBXE.@XfXlX5X=X=X&X|.t.= w 9 9 8 q & &.3.'.[.$X-XjXiX#XQ.BXBX", "BXBXE.@XfXgX:X/./.k.g.0.l 4 7 0 0 6 5 k | :.s.s.>.(.uXfX#XQ.BXBX", "BXBXE.@XjXwXr.: : : : o 3 2 t C C y r 7 X % % % . 5.8XjX#XQ.BXBX", "BXBXE.@XjX0XN.c c x x d e i S D A Z p u a @ @ + O V 8XpX#XQ.BXBX", "BXBXE.@XfXzXT.B.S.S.S.Z.V.z.x.l.F G z.C.Z.B.B.B.B.L.dXiX#XQ.BXBX", "BXBXE.OXiXxX9X7X7X7X7XR.T.Y.U.I.x.P.U.7X7X7X7X7X7X9XhXiX@XW.BXBX", "BXBXE.OXiXxX9XR.R.R.R.R.R.R.T.Y.U.U.T.R.7X7X7XR.R.9XhXiX@XW.BXBX", "BXBXE.@XfXcXqX9X9X9X9X9X9X9X9X9X9X9X9X9X9X9X9X9X9XwXxXiX#XQ.BXBX", "BXBXW.+XfXNXbXcXvXvXvXvXvXvXvXxXvXvXxXxXxXxXxXxXxXbXNXfX#XQ.BXBX", "BXBXQ.+XyXgXgXgXgXgXgXgXgXgXgXgXgXgXgXgXgXgXgXgXgXgXfXtX@X!.BXBX", "BXBXBXoX+X1X+X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X+X+XoXBXBXBX", "BXBXBXBX!.Q.Q.Q.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.Q.Q.!.BXBXBXBX", "BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX", "BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX" }; qosmic-1.6.0/icons/silk/picture_save.xpm000066400000000000000000000173511304321135200203060ustar00rootroot00000000000000/* XPM */ static char *picture_save[] = { /* columns rows colors chars-per-pixel */ "32 32 256 2", " c #747D7E656BD5", ". c #83917BB95C44", "X c #71608AD97918", "o c #67F09BCD7FA5", "O c #7E9896937923", "+ c #7DB6AB8E6D58", "@ c #7A27B32D6FBB", "# c #7DFEB4E2724F", "$ c #8C5E8532436A", "% c #804F9D375BB5", "& c #9FFD99105311", "* c #8F2FAB105D5E", "= c #8279BF7D5237", "- c #81D98A0D65C9", "; c #94AE8D4C6D7C", ": c #874DB49D63CA", "> c #867FB78068BF", ", c #8214A8927934", "< c #8339B6A2747A", "1 c #8634B9DC78B8", "2 c #8650C1485389", "3 c #8A72C31655BC", "4 c #8DDCC47E5AD8", "5 c #87A2C1DB5A5A", "6 c #9128C65C5CC8", "7 c #9656CC925D67", "8 c #8B7BC265643F", "9 c #8E99C2806DCC", "0 c #944EC7BE6345", "q c #96CFCA1E630B", "w c #9B41CBA76662", "e c #9C37CB7D6BA0", "r c #95B2C7756CEF", "t c #8FE0C17C77E5", "y c #9D85CC377668", "u c #96FEC6D37C8C", "i c #9E36CC7D7A19", "p c #91ACC2F27666", "a c #A23DCF716CB0", "s c #A16BD1D66E6A", "d c #A298CF2C7368", "f c #A444CF4A7B3F", "g c #A3C9D169740D", "h c #A9FAD65B7AEB", "j c #BADAE66C7C7D", "k c #2D0C5EA3A661", "l c #317C6170A71A", "z c #38CA66A1AA30", "x c #3BB4695EAA53", "c c #3B6E6EDCBCF4", "v c #30606637B9E9", "b c #472571FDB2E6", "n c #4A9E7471B56B", "m c #4CFE77F9B83A", "M c #54587CA8BA7B", "N c #4BE47B9BC202", "B c #54207F61C058", "V c #6AAC9E0285FE", "C c #79F89F188109", "Z c #63F193B39D26", "A c #677797DF9364", "S c #7984AC2B8C08", "D c #6D5FA0999CEA", "F c #78E1A8249640", "G c #5A988265BF01", "H c #62428519AB93", "J c #6B9B8623A81B", "K c #688B972EA70C", "L c #632B8592BE7E", "P c #6D5899C2B560", "I c #69779202B73D", "U c #75949AFEBAE5", "Y c #7ADFAA65A17E", "T c #74DFA139B479", "R c #7950A3C5B4E0", "E c #7CEFA54DBB42", "W c #5579820BC3E2", "Q c #5BB08500C559", "! c #5F7489D9CBB5", "~ c #5EC48879C749", "^ c #62C18AF8C575", "/ c #63DB8D72CC01", "( c #68B28E5CCE37", ") c #62348762CB19", "_ c #6A8D9238CE13", "` c #6E589985C285", "' c #73499BA5C752", "] c #79E59E4EC563", "[ c #728C9764CDFC", "{ c #72059A9ACCD4", "} c #79A39CA5CB1B", "| c #6A708BE8D158", " . c #6AFF87C8DB96", ".. c #69808943DD8E", "X. c #68F18899D7D3", "o. c #6CD594C6D31B", "O. c #74999B45D5D3", "+. c #794E9E6AD5D8", "@. c #75379CBCDA1E", "#. c #74489B59D711", "$. c #7D8FA0FAD555", "%. c #7B49A2BBDDBD", "&. c #6B9C8B9EE1AA", "*. c #7C1FA3CBE085", "=. c #80EDAE018398", "-. c #840BB607823F", ";. c #8BBEBD218354", ":. c #83F4B5A586D2", ">. c #87FCA3B8970D", ",. c #8AD1BC919B77", "<. c #879DBA0E99CF", "1. c #9D7FBFAB9241", "2. c #A618B1189E11", "3. c #8803A8C7ADE8", "4. c #876FB769A868", "5. c #9374BABFAEFD", "6. c #8453AF64B9F4", "7. c #84D8B473B4C7", "8. c #8BF8B464B3D1", "9. c #8A88B450BDC6", "0. c #8AFAB99EB4C5", "q. c #92BEB597BE54", "w. c #94C0C3928C54", "e. c #9C8CC99E8CE4", "r. c #9A2EC89C865E", "t. c #9C0CC869940D", "y. c #A3CFCEA284C8", "u. c #A41EC5D289FE", "i. c #A6FAD10A8701", "p. c #AC94D3C58F2E", "a. c #AF24CF929FF5", "s. c #B75DC7D5982F", "d. c #AFE4D6799252", "f. c #B0A6D7519331", "g. c #9355C172A188", "h. c #AF66CFF1A15A", "j. c #A4B3C917A98A", "k. c #B303D5A6A463", "l. c #BC05DAD6A1CF", "z. c #BBB5DA8EACDB", "x. c #B501D8A0A2C3", "c. c #AC38C657BC8E", "v. c #A32BCA16B932", "b. c #BEBDDC92B2EB", "n. c #B082D34CB100", "m. c #C4B5EAD68B46", "M. c #C9A4EC1D8EF2", "N. c #CAA3ED4493FB", "B. c #C40EDA45B7C0", "V. c #C386DD36BEFC", "C. c #81E19CBBCC49", "Z. c #8689A53ACD37", "A. c #8BD2A4FCCC69", "S. c #90E0A80ACC5E", "D. c #92C3A9CACDA1", "F. c #9978ADC7CE16", "G. c #88AFB4A8C450", "H. c #8DF2B4B5C85D", "J. c #94AEB679C0DB", "K. c #9176B499CCFF", "L. c #9E1BB0FDCEE0", "P. c #8649A54DD5C1", "I. c #8CB6A958D63A", "U. c #82EDA624DD34", "Y. c #8470A8F6DF6D", "T. c #8D86AC27DC37", "R. c #8B94A777D410", "E. c #91D3AF59DD93", "W. c #9442AD6CD3C6", "Q. c #8F84B282DC29", "!. c #8AE2B2B3D11A", "~. c #9227B53DD4CD", "^. c #9D10B338D3A2", "/. c #9487B396DCE0", "(. c #99E0B3F6DBA6", "). c #990CB8C4DEDD", "_. c #A0E7B321CECD", "`. c #A43AB5C8D1A2", "'. c #A636B96ED72A", "]. c #AC58BD16D712", "[. c #A783BAF4D90E", "{. c #AA56BCA0D96C", "}. c #83E4A6EDE220", "|. c #8431A9B6E1BD", " X c #8C63ADD2E3E1", ".X c #8DAAB15CE775", "XX c #95C5B50EE39A", "oX c #99DEB6CFE350", "OX c #9C2EBA41E56D", "+X c #91F0B48AE8A7", "@X c #9CFABB51EA86", "#X c #A4A4BD1DE542", "$X c #A9BCBF9AE181", "%X c #9F3FC555C514", "&X c #AD75C79FCFA0", "*X c #B31ACD5CCC75", "=X c #A6DEC50CD9AC", "-X c #B1F7C093D74E", ";X c #B14DC0C8D9CA", ":X c #AB38C413E5D2", ">X c #A5BCC1A8EB77", ",X c #AD58C5D1EBFB", ".- H o..X0XKXHX$X$XHXIXIXIXIXIXPXVX>X%.( Q ", "A.[.MXpX1.+ + + + % $ . J o..X0XKXPXHXHXPXIXIXIXIXIXIXHX#X+.) W ", "A.[.MXpXu.: : : : * & ; J o..X8XkXBXHXGXBXBXBXNXNXNXBXgXoXO.~ B ", "A.[.bXCXB.a.h.h.h.a.s.2.U o. X@XOXOXOXOXOXOXoXoXoXoXoX/.U.O.^ G ", "A.'.jXZXeXqXqXqXqXV.B.c.] o. X+X|.%.%.%.%.@.@.@.@.@.#.#.@.[ ^ G ", "A.'.jXZXeXV.V.V.V.V.V.c.] o.|..X|.*.%.%.%.@.@.@.@.@.#.#.#._ ~ M ", "A.[.bXAXpXeXeXeXeXtXtX*X} _ Y.XXOXOXOXOXoXoXXXXXXXXXXXT.$._ G M ", "S.].vXLXDXAXDXDXAXDXDXdX} / }.>XgXbXbXbXhXhXhXhXhXxXbX7XT._ M b ", "D.].fXnXnXnXnXnXnXNXNX3X[ ! }.,XNXFXiXtXuXuXuXtXtXiXSXbX(.( m x ", "F.`.].;X].{.{.{.{.{.].W.^ ! }.8XNXiXd.i i.p.p.i.i f.yXbXoX( n x ", "UXUXF.D.D.S.S.S.S.D.D.} Q / X9XZXrXh 7 s h h g q h rXvXoX| n z ", "UXUXUXUXUXUXUXUXUXUXUXUXW o.OXgXSXaXM.j m.N.N.m.j N.aXCX#Xo.m x ", "UXUXUXUXUXUXUXUXUXUXUXUXN / T.1XwXtXz.x.z.b.b.z.x.z.tXwXI.^ b z ", "UXUXUXUXUXUXUXUXUXUXUXUXc N / O.P.R.Z.Z.Z.Z.Z.Z.Z.Z.A.C.L b z l ", "UXUXUXUXUXUXUXUXUXUXUXUXv c N Q ) X.&.&.&..... . .X.| Q n x l k " }; qosmic-1.6.0/icons/silk/pictures.xpm000066400000000000000000000137311304321135200174510ustar00rootroot00000000000000/* XPM */ static char *pictures[] = { /* columns rows colors chars-per-pixel */ "32 32 174 2", " c #557C9FCB3CDA", ". c #6B668B1239BB", "X c #71D68B8031EF", "o c #69919C543DB1", "O c #73D59F2F300A", "+ c #79E392EE3844", "@ c #62E6AABA35C2", "# c #7E32A62B37EF", "$ c #6B36B1973669", "% c #7169B34A3477", "& c #740CB5623BC1", "* c #7B6BB7CE3BC4", "= c #5D718DF44EF7", "- c #672591514E1B", "; c #7B869A3E46DF", ": c #618F91C25455", "> c #716CAD934FC6", ", c #7FADAA164E99", "< c #726FB1F742BF", "1 c #7AE4B37947C3", "2 c #6ED5AC0F5639", "3 c #654EA53A5992", "4 c #794AA03B5752", "5 c #76DBA0B35BDC", "6 c #7C31A2D35A99", "7 c #7803B1A25A42", "8 c #5D0E9E3865B2", "9 c #61489E1C605A", "0 c #740EA4536463", "q c #7FEBA68F5FF7", "w c #7CF0B3506207", "e c #7FC0B2886EED", "r c #797BAB1072B4", "t c #9AA981F830DD", "y c #9BFA892F3155", "u c #ACFA92543DE2", "i c #AF11995F3EE0", "p c #8D4B86F54EA7", "a c #8D5D8D5F513F", "s c #856FBDE143CB", "d c #8B08BF6445A2", "f c #831FAAFD6581", "g c #861DAE5168FA", "h c #8B1CB2BB6AD6", "j c #8ED4BDF56C07", "k c #816CA6D07991", "l c #80F7B2987A4F", "z c #AC27A231644C", "x c #AE34A80E6826", "c c #8D1CC25B4815", "v c #91C7C4014491", "b c #990DC75445A0", "n c #9B6CC8DE4637", "m c #9534C4154EE0", "M c #9B52C75D4A7D", "N c #9D22C9E54C1E", "B c #9D8ACA7652E8", "V c #A317CCDE5302", "C c #9AC1C6666774", "Z c #9D1BC49A79B3", "A c #A30BCAC36B76", "S c #A5B5CB8B71F6", "D c #AC23CDC47E7E", "F c #B2A4D45B73BF", "G c #67DCA2C68C70", "H c #758A9209BEF4", "J c #78859537BFA8", "K c #7BA8A7E8A799", "L c #7AE0A712AD74", "P c #7E34AAEABED0", "I c #74B692B3C19F", "U c #79F4965DC2C5", "Y c #7D689911C381", "T c #9722B53D80CE", "R c #9673BACF8AC4", "E c #868BA047928B", "W c #8559A5359A3B", "Q c #9891AF629E74", "! c #82F2B1AE9D4B", "~ c #819CAB9DA65F", "^ c #8A96B209AA2F", "/ c #9A22B35AA7AC", "( c #92EBB7BAAFB3", ") c #8056AAF2B263", "_ c #8DFCB536B6F5", "` c #8D62B549BA23", "' c #9BAFBD4CB762", "] c #9A14B0A8BE9C", "[ c #9888B906BDC3", "{ c #A8FEC6DF90D7", "} c #A140C538988F", "| c #B4C6D0EA9E89", " . c #A142C18DBFA4", ".. c #AA26C7F4BB8E", "X. c #B289CDE0BB6D", "o. c #B9CDD2D4BED9", "O. c #80B099E2C1ED", "+. c #89379FC6C231", "@. c #8FD4A9ECC46B", "#. c #8E38A6BFCB70", "$. c #93E6AD55C3DF", "%. c #9B8BAFABC3DE", "&. c #9151A78ACAAA", "*. c #9476ABD6CD74", "=. c #999EAE66CD9D", "-. c #836CB167C721", ";. c #95C2B043C06B", ":. c #9C26B13FC38A", ">. c #9CC2B1B9CE3D", ",. c #9360BA7FCEEB", "<. c #9D0BBE95CBC5", "1. c #96AEAD9DD135", "2. c #991AAEEFD247", "3. c #88C7B193D477", "4. c #9B3BB0D6D2F1", "5. c #9CA1BE7EDBC4", "6. c #A387B63AC77A", "7. c #A1ECB518CB74", "8. c #A4BAB8DFCF46", "9. c #ACC3BEDDCF3A", "0. c #A128B543D2CA", "q. c #A7EBBA13D4CF", "w. c #ADB2BF59D402", "e. c #A3A8BE1EDC6E", "r. c #A925C640C6A1", "t. c #BB67CD44CE18", "y. c #BC40D3C5C3AE", "u. c #AC19C3BFDE27", "i. c #C02BCB4CD7AE", "p. c #BBF6CA8FDE8F", "a. c #A4B5C1DAE1D9", "s. c #B58CCC3FE4AF", "d. c #BCB9D060E515", "f. c #BE59D2CEE9C5", "g. c #CCDEDBA3C5EF", "h. c #CF5FDF09CA95", "j. c #C2ADCE00DCCB", "k. c #CC69DA92D3C4", "l. c #CE52DAE0E021", "z. c #D12DDE65D29A", "x. c #D2ADDD71DDC7", "c. c #D265E167CBB3", "v. c #DEAFEAC7CE99", "b. c #D4E5E1C6D3BB", "n. c #DB7DE734D4F6", "m. c #E006EADBD281", "M. c #DCC4E845DACC", "N. c #E21DED02CECB", "B. c #E2E7EBF9DCE8", "V. c #C456D099E121", "C. c #CD57D800E6C5", "Z. c #CE86DAD9E543", "A. c #C402D616EA0B", "S. c #CF19DB7DEAF3", "D. c #D3C7DCE2E529", "F. c #D423DDC1EB6C", "G. c #D8D7DFA6ED11", "H. c #D816E112E108", "J. c #DA8CE2C1E4F8", "K. c #D5E6E0A8F010", "L. c #DA09E19BECD2", "P. c #D684E1ECF0E8", "I. c #DAA0E4C9F201", "U. c #DE87E8E2F420", "Y. c #E104E7FAE371", "T. c #E204E874E4A8", "R. c #E889ECC0E31D", "E. c #E604EB70ED60", "W. c #EAF4EFDEECA9", "Q. c #E464EC8DF556", "!. c #EC9BEFC6F2AC", "~. c #EC3BF1E6F75D", "^. c #F116F2C3F4D9", "/. c None", /* pixels */ "/./././././././././././././././././././././././././././././././.", "/./././././././././././././././././././././././././././././././.", "/././././.Y I I I I I I I I I I I I I H /./././././././././././.", "/././.+.=.>.=.1.1.2.1.1.2.2.2.2.2.1.=.#.Y /././././././././././.", "/././.=.j.D.G.L.L.L.L.L.L.L.L.L.L.L.F.p.&.J /./././././././././.", "/./.O.>.D.!.E.L.J.D.D.D.D.D.D.D.F.F.F.p.#.I /./././././././././.", "/./.U 2.G.E.V.w.6.:.$.$.$.$.$.&.*.1.2.&.Y I I H /./././././././.", "/./.I 1.L.L.w.=.%.] ] $.;.$.$.*.=.4.4.4.2.*.*.#.Y /././././././.", "/./.I 1.G.L.q.7.t.k.x.x.x.x.x.D.D.F.L.L.F.F.F.p.&.J /./././././.", "/./.I 1.F.F.0.7.x.R.T.J.H.x.x.l.D.F.F.F.F.F.S.p.#.I /./././././.", "/./.I 1.G.F.4.>.x.Y.j.9.6.:.$.$.$.*.*.*.*.*.*.#.Y I I H /./././.", "/./.I 1.G.F.1.>.D.J.w.$.%.%.$.*.*.*.1.1.1.2.2.2.1.*.*.#.Y /././.", "/./.I 1.F.S.*.=.Z.D.8.>.i.D.D.F.G.G.G.G.G.G.G.G.G.F.F.p.&.J /./.", "/./.I 1.F.S.*.=.Z.D.>.>.D.^.^.W.B.m.N.N.N.v.n.M.E.!.~.F.=.U /./.", "/./.I 1.F.S.1.1.S.S.=.=.F.^.Q.k.| D F F F S Z } t.S.Q.F.4.U /./.", "/./.I 1.F.S.*.*.Z.Z.*.*.F.~.P.y.Z m M N b d 1 e ' d.U.F.4.Y /./.", "/./.I 1.F.Z.@.$.l.Z.*.*.F.~.P.y.S M V V N v * w ( s.I.S.4.Y /./.", "/./.I =.F.Z.$.$.Z.Z.*.*.F.~.K.o.A n V V B c * 7 ^ u.P.S.4.Y /./.", "/./.H =.F.D.*.>.F.F.*.1.F.Q.S.X.C v M B m s % 2 ~ e.K.F.4.Y /./.", "/././.&.j.p.#.2.F.F.*.*.F.Q.A...j s d c s & @ 3 K e.K.F.4.U /./.", "/././.O.*.&.Y 1.S.C.&.*.F.Q.A. .l > < & $ @ 8 L e.P.F.4.U /./.", "/././././.H I *.S.C.&.*.F.Q.f.<.! r , # O o 9 G P a.P.S.4.Y /./.", "/./././././.H =.D.Z.&.*.F.U.s.5.,./ x i y a W -.3.a.P.S.4.Y /./.", "/./././././.H &.j.p.#.1.F.J.r._ ` Q z u t p E ) L [ Z.S.2.Y /./.", "/././././././.O.*.&.Y 1.F.b.R 0 0 5 ; + X . - : = k k.S.2.Y /./.", "/././././././././.H I 1.F.n.{ h h h h g f f q 6 4 T z.F.2.U /./.", "/./././././././././.H =.D.W.n.c.c.c.c.h.h.h.g.g.g.b.E.F.2.U /./.", "/./././././././././.H &.j.G.L.P.P.K.G.G.G.K.K.P.P.G.F.p.&.U /./.", "/././././././././././.Y *.4.4.4.4.4.4.4.4.4.4.4.4.4.=.&.O./././.", "/./././././././././././.H U U U U U U U U U U U U U U J /./././.", "/./././././././././././././././././././././././././././././././.", "/./././././././././././././././././././././././././././././././." }; qosmic-1.6.0/icons/silk/rainbow.xpm000066400000000000000000000147501304321135200172560ustar00rootroot00000000000000/* XPM */ static char *rainbow[] = { /* columns rows colors chars-per-pixel */ "32 32 198 2", " c #DB4D016A0000", ". c #DCA20AAA063E", "X c #DCE40C6F08E6", "o c #DDFB13FA0DE5", "O c #DE5F1632112C", "+ c #DEBC19681395", "@ c #DF731E78182E", "# c #E2241D1D0000", "$ c #DFDF21AA1AE4", "% c #E6353B301C22", "& c #E0E5289520A9", "* c #E30B35F52C64", "= c #E3D43BE93246", "- c #F0E559440000", "; c #F91777F60000", ": c #F9F3784E0000", "> c #F3056F3A1DFF", ", c #E41E402C35E2", "< c #E50146393BD6", "1 c #E58148EA3EED", "2 c #E5F849F44000", "3 c #E683515A462D", "4 c #E77054FC48EC", "5 c #E7DB599F4DFA", "6 c #E83A5E7B52C6", "7 c #E90B5E96510A", "8 c #F1D87DD746F9", "9 c #F1137D454CE8", "0 c #E933620F553C", "q c #EB2D6D7F5CDE", "w c #EEBB789C55AF", "e c #ECE072645C24", "r c #F12E7FED5352", "t c #ECB774EE6143", "y c #EDE17B0B628D", "u c #0E119AE10000", "i c #2DEAA8441C1C", "p c #314DA8B61CED", "a c #1D0C90AF2738", "s c #1D0B90AF2A23", "d c #4CADA7F50AA0", "f c #4BCBAF6B3E4F", "g c #4CF0B0373D3A", "h c #5194B4833288", "j c #5B30B66B362F", "k c #53DEB32C398B", "l c #665FB3FD2A48", "z c #66DAB8B039F9", "x c #69AAB9033BA9", "c c #7328BB0C3CF5", "v c #3B679F844399", "b c #4C28ADC74404", "n c #4B94AB9F48E3", "m c #5168A9A756C7", "M c #544CA9B85CD1", "N c #6083BB364659", "B c #79FABCF04083", "V c #75EABF614CCE", "C c #562DA3B76D7F", "Z c #5F0BB2EA6036", "A c #5A4DA0A279BD", "S c #65F9A9B67F24", "D c #746DBB6F78CB", "F c #6C81C1BC5CD7", "G c #71B4C29D5E66", "H c #7ED8C8A86C6D", "J c #F8738D390A1A", "K c #FA6E89F21E52", "L c #F9789C68299D", "P c #F628857E361B", "I c #F779899933DF", "U c #F8B78EA333E6", "Y c #F4BC83EE3E9B", "T c #F68689C73DCC", "R c #F9258F9A38A0", "E c #F9D9935735B9", "W c #F9A892993962", "Q c #FA839C6539EC", "! c #F545B76623FF", "~ c #FA5BA2AB3D85", "^ c #BEACC1492596", "/ c #F6E0CE2F328C", "( c #F8D7CEE93397", ") c #838BBE8341EA", "_ c #8882BFD34297", "` c #F40B853E45F6", "' c #F6EC8D66428E", "] c #F2CF83734CC1", "[ c #F7DE92FB463D", "{ c #F90693F34172", "} c #F8C7974F493B", "| c #FAC49D8C4919", " . c #F2EF85D65014", ".. c #F4B18C8D519D", "X. c #F15085E65CF2", "o. c #F620926E53DC", "O. c #F59593465B65", "+. c #F70998A35D54", "@. c #FA0DA6B040D6", "#. c #F9BCACB9449D", "$. c #F93CB4DE4A0E", "%. c #F8D9BA514D80", "&. c #FAE3ACCD5166", "*. c #FC19AB4D5F93", "=. c #F982BE2A5034", "-. c #EF8A82DA6470", ";. c #EF1782876C76", ":. c #F03B884D6A23", ">. c #F1F58B7766F5", ",. c #F0E187C3682C", "<. c #F3D794D36BDD", "1. c #F53E98206991", "2. c #F0408ADB71C5", "3. c #F0D68D507311", "4. c #F18B90227498", "5. c #FB76AFFC6F55", "6. c #FB63B8E5679E", "7. c #FC5DB32C6F74", "8. c #F7DCA5197209", "9. c #FBE8BF0B765E", "0. c #8F6AC10C4510", "q. c #937AC22F470D", "w. c #A013C55A4A0F", "e. c #A49BC5D54AF5", "r. c #B0A5C89C4F03", "t. c #A084C8AE599C", "y. c #B721CA3D5031", "u. c #BA6ECB125142", "i. c #8A14CAC76FE3", "p. c #974FCAC368C2", "a. c #ABD4D2317A03", "s. c #C7FBC9D34279", "d. c #CD48CF695687", "f. c #DE2AD3615AB8", "g. c #F6B5C0AD40B7", "h. c #F810D4704DCD", "j. c #F9C1D5644EEE", "k. c #F826C4C6547E", "l. c #F90FC4025412", "z. c #F807C862571E", "x. c #F96ECB0F57C7", "c. c #F81DCBC65913", "v. c #F8B5CF145B73", "b. c #E335D4A25C29", "n. c #EC44D5DD5E3E", "m. c #F4ABD4D75E95", "M. c #F91FD26E5D2D", "N. c #DC52D6936967", "B. c #D9AFD9EE79BD", "V. c #F950C48160DD", "C. c #F09CD7635FF3", "Z. c #F9B8D6A36073", "A. c #F9FCD45A6B6B", "S. c #FAA3DAD26FA1", "D. c #F96DD1F0777F", "F. c #3AAA7CA48401", "G. c #49A47431AEF1", "H. c #4B0F742DB190", "J. c #52AC7B0FB2F9", "K. c #58347F62B56F", "L. c #5BA19F6F807A", "P. c #54F68E4E935E", "I. c #636DA61D801F", "U. c #69EAA61C8D1A", "Y. c #6CF5A32998C6", "T. c #709CA70C9929", "R. c #5B40819AB6DC", "E. c #61D585E7BB2B", "W. c #65BA8991BBA9", "Q. c #6EEA9066BFFC", "!. c #7277A210A4E4", "~. c #76EBA2F4AD3E", "^. c #7E37A814AFDC", "/. c #73FB9481C1C5", "(. c #7C2D9ACBC5E2", "). c #86E6AF91B28A", "_. c #845EA60ABFE9", "`. c #8670A8AEBF93", "'. c #908FB89DB348", "]. c #81ABC28E83A0", "[. c #E0E2DE908808", "{. c #FA5CD3A38389", "}. c #FA50E00280CC", "|. c #FB02E0448BE8", " X c #FB79E1848229", ".X c #FBCFE39E8E4B", "XX c #819A9F18C7F2", "oX c #89E1A51ACC1B", "OX c #8F70A955CE8A", "+X c #90FBAFACC561", "@X c #919EAB8DCEB4", "#X c #963FB574C54E", "$X c #97ECB16ECFFC", "%X c #9A26B423CEA5", "&X c #94E4ADDAD0AD", "*X c #9BC4B352D356", "=X c #A496BA6AD6DA", "-X c None", /* pixels */ "-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X ", "-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X. + $ $ $ $ $ $ + . ", "-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X O = 4 5 6 6 0 0 1 + ", "-X-X-X-X-X-X-X-X-X-X-X-X-X-X-X-Xo + @ $ $ * 7 t y y -.:.4.e % # ", "-X-X-X-X-X-X-X-X-X-X-X-X-X-X X $ = 3 6 0 q ;.,.r 8 ` o.8.+.> - ", "-X-X-X-X-X-X-X-X-X-X-X-X-X. O & , 4 q y -.>.<.O.` P P } 5.*.K ; ", "-X-X-X-X-X-X-X-X-X-X-X O = 5 q t w 9 ` ' [ { W E E | 7.*.K : ", "-X-X-X-X-X-X-X-X-X-X . + * 7 y -.X.] Y I U E Q Q ~ ~ &.9.6.L J ", "-X-X-X-X-X-X-X-X-X + 1 q ;.>.] Y T R E E Q ~ #.$.%.V.{.D.g.! ", "-X-X-X-X-X-X-X-X . + = q 3.<.O.T I E Q Q @.#.$.=.l.x.A.|.}.h./ ", "-X-X-X-X-X-X-X + 2 e 2.<.o.' W E Q @.$.%.k.c.M.M.M.S..X Xj.( ", "-X-X-X-X-X-X . + = e 3.<.+.{ E Q ~ #.%.l.c.m.m.n.b.f.N.[.B.s.^ ", "-X-X-X-X-X-X + 1 q 2.<.o.{ W Q @.$.l.c.M.m.n.b.d.y.e.t.a.p.l d ", "-X-X-X-X-X. O * q 3.<.+.{ E Q @.$.l.v.m.n.f.d.u.w._ c V i.G p u ", "-X-X-X-X + = 7 ;.<.o.{ W Q #.%.z.M.Z.n.d.r.q.B x j h N H F i u ", "-X-X-X-X @ 4 y >.O.' E Q @.%.z.m.C.b.d.e.) z k f b n Z ].D v a ", "-X-X-X $ 0 -. .T W Q @.$.z.m.m.f.u.q.c j h g m C L.T.'.).P.F.", "-X-X . + = t >.` I E ~ $.l.M.C.f.u.0.x k f n M S T.~.`.%XOXE.H.", "-X-X + < q 3.1.[ E Q #.l.v.Z.b.u.0.z k b m A Y.).#X%X*X=XOXE.H.", "-X-X $ 6 ;.<.+.{ Q @.%.c.m.n.d.q.x k b M I.!._.$X*X*X&X@X(.R.G.", "-X-X $ 0 ,...' W Q $.l.M.n.d.e.c k b M U.^.+X$X&XoX(.Q.W.R.J.G.", "-X. o * q >.' U E @.%.c.m.f.r.) j f m I.^.@X*X@XXX/.W.R.H.G.G.G.", " + = 7 ;.<.[ E Q #.k.m.n.d.q.z h n A !.+X*XoX/.E.K.K.-X-X-X-X-X", " $ 4 t ,.O.{ Q ~ $.c.m.b.u.B k g M Y._.$X@X/.R.J.G.-X-X-X-X-X-X", " $ 5 y r ` W Q #.=.M.n.d.w.x f m S ).$X&XXXE.J.-X-X-X-X-X-X-X-X", " $ 6 y 8 P E ~ $.l.M.b.y._ j b C T.#X*XoX/.K.G.-X-X-X-X-X-X-X-X", " $ 6 -.` P E ~ %.x.M.f.e.c h n L.~.%X*X(.W.K.-X-X-X-X-X-X-X-X-X", " $ 0 :.o.} | &.V.A.S.N.t.V N Z T.`.*X&XQ.R.-X-X-X-X-X-X-X-X-X-X", " $ 0 4.8.5.7.9.{.|..X[.a.i.H ].'.%X=X@XW.H.-X-X-X-X-X-X-X-X-X-X", " + 1 e +.*.*.6.D.}. XB.p.G F D ).OXOX(.R.G.-X-X-X-X-X-X-X-X-X-X", " . + % > K K L g.h.j.s.l p i v P.E.E.R.J.G.-X-X-X-X-X-X-X-X-X-X", " # - ; : J ! / ( ^ d u u s F.H.H.G.G.G.-X-X-X-X-X-X-X-X-X-X" }; qosmic-1.6.0/icons/silk/script.xpm000066400000000000000000000140311304321135200171110ustar00rootroot00000000000000/* XPM */ static char *script[] = { /* columns rows colors chars-per-pixel */ "32 32 177 2", " c #2B9D56C38D3C", ". c #2D0F57E38E5E", "X c #32735DAD9372", "o c #39EB63069655", "O c #3F1767A899B7", "+ c #36A067F59DD4", "@ c #36E96AEFA15E", "# c #3C9C6ED3A3F3", "$ c #3C3E7485ABCF", "% c #3EA47954B0EA", "& c #44C36C2C9D44", "* c #420A71A5A570", "= c #4BA97435A44A", "- c #4F9B78B5A81E", "; c #4CA67B8FADF0", ": c #51A376E6A51A", "> c #559379FCA76E", ", c #55D07CCAAA89", "< c #5B0B7E2AA9D3", "1 c #409E7CECB3FB", "2 c #5ADD828AAF5F", "3 c #463981CAB7C8", "4 c #4CD281E8B63C", "5 c #461E845ABACD", "6 c #4B258755BD48", "7 c #554F82E8B3B3", "8 c #5CFD85FBB2CB", "9 c #5CC98B2ABB94", "0 c #624782B9AC24", "q c #680A876DAF3B", "w c #64ED86DBB108", "e c #605289F1B5BA", "r c #6B7D8D3EB51D", "t c #63718D80B8A4", "y c #6E1A901FB81C", "u c #664B90A9BB8A", "i c #68E793F1BE90", "p c #715A9038B72D", "a c #745A9448BAFF", "s c #791997FFBDBC", "d c #743C9833BED6", "f c #7DAB9AD8BF32", "g c #4B938C98C3A9", "h c #4EC78FB6C8FB", "j c #51B38FE3C699", "k c #53008E22C964", "l c #4E7292C8CA11", "z c #500E9721CEDD", "x c #5FA394D2CDB1", "c c #5D8E9D16D002", "v c #6DEB9781C38A", "b c #6DB09A92C46C", "n c #71D09CADC74A", "m c #67C09F3FD14A", "M c #6E949FFDDC23", "N c #5F47A08FD3CA", "B c #573AA2E1DA61", "V c #58DCA6B9DE58", "C c #746FA297CB7B", "Z c #7AC9A398CAA9", "A c #6B2BA5C1D4B6", "S c #6F9DA08BDCE8", "D c #6386A983DD63", "F c #742AA5FFD346", "G c #72A8A960D6DD", "H c #7E31ABEBD462", "J c #7404A38FDED3", "K c #7B85A6C6DDED", "L c #71BFAD19DC59", "P c #7C53ACD4DD73", "I c #7AD6B2AADE09", "U c #6D839F16E0A2", "Y c #5B33AA98E22A", "T c #6466AE3DE3D7", "R c #6CC8AF62E0D4", "E c #7CA2AA03E2DD", "W c #66F4B036E4CF", "Q c #6C70B102E3FE", "! c #71F2B3CCE4AB", "~ c #7B0BB971E7C0", "^ c #76D9B767E8C9", "/ c #7DEBBBA1E90F", "( c #82C49FAFC304", ") c #85CCA34DC5FD", "_ c #8AC9AA28CCB4", "` c #934BACB0CCD6", "' c #93A2B039D006", "] c #816EAB52D7CF", "[ c #8577AC7BDBCF", "{ c #8015B3F6DCFD", "} c #8E5FB1DCDBC8", "| c #92F0B312D7AF", " . c #9CF1B5BCD2B8", ".. c #92C2B4B0DDE6", "X. c #9CB3BA59DB53", "o. c #A0C5B7E1D3B0", "O. c #A63FBC1FD619", "+. c #ABAFBFB0D84E", "@. c #A592BD99D866", "#. c #8549AD89E13F", "$. c #889BAFBCE18B", "%. c #8CF5B2DFE35E", "&. c #8419BAFFE50E", "*. c #89B5BE1FE5C9", "=. c #8606B067E904", "-. c #8305BE60E925", ";. c #8C19BF50E8F0", ":. c #92A3B637E21B", ">. c #96BDBE46E130", ",. c #98C7B9F9E32A", "<. c #9170B6DFE962", "1. c #9577BCE2EECF", "2. c #981DBF82EF7F", "3. c #AC5CC2D4DCB4", "4. c #B264C49EDBDD", "5. c #BC49CB87DF7A", "6. c #865FC0C1E9FE", "7. c #8D16C3CDEBAE", "8. c #94D2C1E6E80F", "9. c #9AF5C444E6D8", "0. c #93E3C547EC13", "q. c #9C01C258F002", "w. c #9CA3CA45EDBF", "e. c #9E3AC410F0FB", "r. c #A55BC691EB24", "t. c #AAEEC7AEEDEC", "y. c #A6C6C9BBEE15", "u. c #AD56CD40ECBB", "i. c #B50DCB02E25B", "p. c #B4FECE26EFF9", "a. c #AB86D164F001", "s. c #BD5BD0D2E5CE", "d. c #B62FD1DBEA5D", "f. c #BB27D3ECEC4E", "g. c #A1A4C5C9F10F", "h. c #AA4ACCB8F126", "j. c #ABE5CEC2F94B", "k. c #B3DFD4B9F1FC", "l. c #BB24D680F375", "z. c #B827D8E9F3B9", "x. c #BCDADADAF335", "c. c #B2EFD3BBF993", "v. c #B8A8D7A5FA79", "b. c #BEB1DBE3FA00", "n. c #C210D00CE1D4", "m. c #C341D384E5E2", "M. c #C9FBD668E563", "N. c #CD59D883E5CB", "B. c #C4D8D4A2E8DF", "V. c #C56CDA3FECCB", "C. c #CC22DCD5EC86", "Z. c #D242DF59EE10", "A. c #C335DBD9F4CC", "S. c #CC17DDA5F34B", "D. c #C2D2DD9CFA54", "F. c #C84EE03BFB80", "G. c #D322E113EECB", "H. c #C7A2E209F59E", "J. c #CE1DE2EBF5CE", "K. c #C6CBE120FAFC", "L. c #CBCEE2B3FB66", "P. c #D428E445F487", "I. c #DA92E6A6F4A5", "U. c #D366E8B5F7E7", "Y. c #DDDDE9FCF6ED", "T. c #D389E68AFB98", "R. c #D98CE734F9BC", "E. c #D6D7E976FCD9", "W. c #DC41EC10FC33", "Q. c #E3C2EBBAF585", "!. c #E2A1EEB1FC57", "~. c #E634F1B5FCE5", "^. c #EC66F4FDFDD6", "/. c #F26FF748FD35", "(. c #F43DF98CFEED", "). c #FC46FE1FFFC3", "_. c None", /* pixels */ "_._._._._._.Y W ^ ~ ^ ! Q T T T Y Y Y Y Y Y Y Y Y Y Y Y _._._._.", "_._._._._._.W ~ 0.w.w.0.0.7.7.7.6.-.-.-.-.-./ / / ~ ^ ! T _._._.", "_._._._._.Q ~ w.H.!.W.W.W.W.W.R.U.J.J.H.A.x.x.z.k.a.w.*.R V _._.", "_._._._._.Q -.a.~.).).).).).).).).(./.^.~.!.!.W.R.P.A.u.*.Q D _.", "_._._._._.! ;.k.~.)./.^.^./././././././././.(.(.(./.^.R.z.0.R B ", "_._._._._.L 8.k.~.).~.W.!.!.!.~.^.^.^.^.(.(.(.).).(.!.R.T.z.&.D ", "_._._._._.L 8.l.~.(.~.E.W.W.W.!.!.~.~.~.^.^.^./.).!.t.r.R.U.9.I ", "_._._._._.L 9.x.~.(.W.T.E.E.E.E.W.W.W.W.!.!.!.^.).I.%.%.P.P.9.P ", "_._._._._.L 9.A.!.^.E.L.L.T.T.T.E.E.E.W.W.W.W.~.).I...[ f.f.{ N ", "_._._._._.G r.A.!.~.T.F.K.L.L.L.L.T.T.T.E.E.E.~.).I.} F >.>.A z ", "_._._._.l G r.S.W.W.L.D.D.F.F.K.L.L.L.L.L.T.T.W.(.I.[ x m A c _.", "_._._._.h G u.J.R.E.F.b.b.D.D.D.F.K.K.K.L.L.L.W.(.P.] k h l _._.", "_._._._.g F d.U.R.T.D.b.b.b.b.D.D.D.D.D.F.F.K.E.(.P.H j _._._._.", "_._._._.g F f.Y.T.L.D.b.b.b.b.D.D.D.D.D.D.D.F.E.(.P.H j _._._._.", "_._._._.5 C V.~.T.F.b.b.b.b.D.D.D.D.D.D.D.D.F.E.(.P.H g _._._._.", "_._._._.5 C C.^.T.D.b.b.b.b.D.D.D.D.D.D.D.D.F.E.(.G.Z 6 _._._._.", "_._._._.3 C C.^.T.D.b.b.b.b.D.D.D.D.D.D.D.D.K.E./.C.C 3 _._._._.", "_._._._.3 C C.^.T.b.b.b.b.D.D.D.D.D.D.D.D.F.L.E.^.V.n 1 _._._._.", "_._._._.4 Z Z.^.T.b.b.b.D.D.D.D.D.D.D.D.D.F.L.W.~.m.b % _._._._.", "_._._._.4 Z G./.T.b.b.b.D.D.D.D.D.D.D.D.D.F.T.W.Y.s.v $ _._._._.", "_._._._.4 Z G.(.T.D.b.D.D.D.D.D.D.D.D.D.D.K.E.W.I.i.i $ _._._._.", "_._._._.9 _ G.^.L.v.v.b.b.b.D.D.D.D.D.D.F.L.W.Y.G.3.u # _._._._.", "_._._.7 n X.P.!.b.j.c.c.v.b.b.D.D.K.K.K.L.E.~.!.C.@.t @ _._._._.", "_._.@ ; v | d.l.g.1.2.q.e.g.g.y.y.y.h.h.k.A.W.Y.B. .e @ _._._._.", "_._.+ * 7 v [ %.E J J J J J J J S M M J E 1.A.J.i.' 8 _._._._._.", "_.# = 2 d _ ..,.:.:.%.%.$.#.[ K K K K J U =.l.S.3._ 2 _._._._._.", "_.= r _ m.I.Y.Y.Y.Y.Y.I.I.P.P.J.S.S.S.p.%.<.A.S.3.) , _._._._._.", "X - d .Z././././.(.).).).).).).).).).!.p.t.T.S.@.( , _._._._._.", "_.= r ) 3.m.B.C.Z.I.Q.Q.^./.(.).).).)./.R.T.!.Z. .s > _._._._._.", "_._.2 y ) ` ` .o.O.+.4.4.5.5.n.m.M.N.M.m.s.B.4.( w = _._._._._.", "_._.& = : > > > < < < < < < < 0 0 q r r p a f p > & _._._._._._.", "_._._.. . X X o O & = , : o . _._._._._._." }; qosmic-1.6.0/icons/silk/shading.xpm000066400000000000000000000024141304321135200172240ustar00rootroot00000000000000/* XPM */ static char *shading[] = { /* columns rows colors chars-per-pixel */ "32 32 2 1", " c #6C6C9A9AC7C7", ". c None", /* pixels */ ".... ... ... ... .... ...", "... ... ... ... ... ....", ".. ... ... ... .... ....", " .. .. .. .. ....", " ... ... ... ... .... ", " .. .. .. .. ... ", "... ... ... ... ... ..", ".. .. .. .. .. ..", ".. ... ... ... ... ....", " .. .. .. .. .. ", " ... ... ... ... .... ", " .. .. .. .. .. ", "... ... ... ... ... ..", ".. .. .. .. .. ..", ".. ... ... ... ... ....", " .. .. .. .. .. ", " ... ... ... ... .... ", " .. .. .. .. .. ", "... ... ... ... ... ..", ".. .. .. .. .. ..", ".. ... ... ... ... ....", " .. .. .. .. .. ", " ... ... ... ... .... ", " .. .. .. .. .. ", "... ... ... ... ... ..", "... .. .. .. .. ..", ".. ... ... ... ... ....", ". .. .. .. .. ... ", "...... ... ... ... ......", "..... ... ... ... ......", ".... ... ... .... ........", ".... ... ... ... ... ..." }; qosmic-1.6.0/icons/silk/shape_final_triangle.xpm000066400000000000000000000031471304321135200217510ustar00rootroot00000000000000/* XPM */ static char * shape_final_triangle_xpm[] = { "32 32 28 1", " c None", ". c #7DA5E1", "+ c #8CB3E6", "@ c #7FA8E3", "# c #76A0DE", "$ c #9DBCE9", "% c #94B4E5", "& c #99B9E8", "* c #739BDD", "= c #98B7E7", "- c #8CACE2", "; c #7DA1DF", "> c #000000", ", c #7A9DDD", "' c #6E98DC", ") c #6B93DA", "! c #85ABE3", "~ c #85A6E0", "{ c #90AFE4", "] c #7097DB", "^ c #6690D8", "/ c #648ED8", "( c #84A5DF", "_ c #638CD7", ": c #5F88D5", "< c #688FD7", "[ c #5A84D4", "} c #688FD8", " ", " ", " ", " ", " . ", " .. ", " +@# ", " $%@# ", " &&+.* ", " &==-;* ", " >>>>>>>>=%-;* ", " >>>>>>>>%%-,' ", " >> =%%%%%-*) ", " >> =%%%%%%!*) ", " >>%%%%%%%%~*) ", " >>>>>>>{--~]^ ", " >>>>>>>---~]/ ", " %>>%{{-----()_ ", " %%>>--------()_ ", " %%%>>--------;)_ ", " %%{->>-----~~~,^: ", " %%{-->>----~~~(,<: ", " %{---->>--~~~(((,<[ ", " %{-------~~~~~(((,/[ ", " %{-------~~~~~((((,_[ ", " ;~~~~((;;;;,,,,,,,,)_[ ", " ']]]'')))))^} c #65859289D4DC", ", c #660C92BCD55F", "< c #652093C1D67A", "1 c #64A89392D77E", "2 c #6759944ED647", "3 c #6700949BD69D", "4 c #66A9953BD7DC", "5 c #688C9529D657", "6 c #69E59693D761", "7 c #6A979724D81B", "8 c #6E019775D75E", "9 c #681396B1D969", "0 c #6ABC9755D8B6", "q c #69C19873DAB6", "w c #6BB49A76DBB6", "e c #6E8F99EDD9D2", "r c #6DA59C31DCB5", "t c #6F8B9D9DDDB7", "y c #70459B76DAF4", "u c #74CD9BAFD98A", "i c #73C69C3FD9E8", "p c #737E9D07DAF6", "a c #72D09DF4DC11", "s c #75CE9C89D9E2", "d c #76349D22DA1B", "f c #74699D7EDACC", "g c #77C89E31DA8D", "h c #77E59F2ADB2B", "j c #72D79DC3DC95", "k c #714F9F21DEC1", "l c #757BA007DD91", "z c #73FC9FF1DE6C", "x c #72FAA0BCDFCF", "c c #7B6EA1E9DC81", "v c #7863A24CDEA2", "b c #7C5CA1B2DC79", "n c #7E90A262DC9D", "m c #7F35A2AEDC95", "M c #7F51A3D1DD1E", "N c #7A98A464E015", "B c #7B9FA4C2DFC1", "V c #7F8FA43ADDF7", "C c #7F92A6CCDFD4", "Z c #7588A253E0CC", "A c #77B1A383E12D", "S c #7732A34CE16D", "D c #7975A4B4E1EC", "F c #7BF4A676E1D9", "G c #78D0A4CDE282", "H c #7A6DA5B8E316", "J c #7AC5A677E38D", "K c #7B86A6CEE3E7", "L c #7D08A612E0C8", "P c #7C67A655E1AE", "I c #7D23A6EAE192", "U c #7F84A746E0A5", "Y c #7C4BA79AE445", "T c #7CDDA812E497", "R c #7D92A8BCE4EC", "E c #80A8A39DDCE3", "W c #825CA571DD59", "Q c #82D0A528DD92", "! c #8327A69BDDF1", "~ c #80E8A68ADF27", "^ c #8282A6A2DED9", "/ c #8508A700DDF5", "( c #86DEA841DEEA", ") c #86DBA988E022", "_ c #8893A9DCDF32", "` c #8ABFAB20E01F", "' c #8607AB24E199", "] c #873CAD3BE34B", "[ c #8A01AD14E1E8", "{ c #8B83AC91E105", "} c #8C01AD6BE19C", "| c #8873ADA1E308", " . c #8EE1AE05E14A", ".. c #8EA9B14CE3FA", "X. c #9082B067E2CD", "o. c #908CB217E3D9", "O. c #91ACB1FEE3B3", "+. c #92B0B0E5E277", "@. c #9586B3C5E3D2", "#. c #858EB2A6F420", "$. c #85E2B2BCF493", "%. c #865FB360F4AD", "&. c #8749B420F528", "*. c #8790B45CF4CF", "=. c #88C9B4F5F4EE", "-. c #89FBB5F3F551", ";. c #8A5FB599F4C5", ":. c #8BFEB68FF515", ">. c #8B79B6F1F58D", ",. c #8CF1B7E9F60F", "<. c #8DA4B7F9F5AE", "1. c #8EA7B8DAF64B", "2. c #8F5FB8D9F5C2", "3. c #8FA5B956F5F4", "4. c #90B9B9FBF608", "5. c #915FBA1FF5FF", "6. c #9214BA84F602", "7. c #9315BADEF62F", "8. c #93FBBBB3F62A", "9. c #92C2BB1DF67E", "0. c #9432BBB7F62B", "q. c #957ABC36F61A", "w. c #957CBC89F625", "e. c #96DBBD08F627", "r. c #9735BDA1F662", "t. c #9510BCC8F706", "y. c #9616BDEAF6E5", "u. c #9778BE8CF794", "i. c #9870BE35F69B", "p. c #98E2BECCF6E9", "a. c #9B10C013F72D", "s. c #99F2C05AF821", "d. c #9C10C162F761", "f. c #9C05C1A6F80A", "g. c #9D03C104F719", "h. c #9DA1C169F72B", "j. c #9CFCC254F81B", "k. c #9DB4C28CF7ED", "l. c #9EE2C246F74B", "z. c #9E77C272F791", "x. c #9FB3C3C0F7FC", "c. c #9C3CC20FF8AB", "v. c #9DF2C325F8B5", "b. c #9E91C384F8E3", "n. c #9FE0C45CF900", "m. c #A145C376F7B2", "M. c #A116C4CFF830", "N. c #A348C62DF870", "B. c #A45DC657F81B", "V. c #A5EDC731F84A", "C. c #A768C6ECF809", "Z. c #A093C4BFF936", "A. c #A1AFC54DF8FF", "S. c #A293C5DDF92E", "D. c #A3FBC65BF890", "F. c #A60DC7F9F8A5", "G. c #A8BDC934F8E3", "H. c #ABAEC9B8F8C9", "J. c #AA89CA77F8EE", "K. c #ACC8CA9CF8CB", "L. c #AD86CAAFF8BE", "P. c #AD59CBACF8DE", "I. c #AEACCB3CF8CA", "U. c #AEF3CB99F8F4", "Y. c #AFD9CC38F906", "T. c #ADCFCC76F94A", "R. c #AEC3CCC5F93F", "E. c #B0E9CD0CF97C", "W. c #B1E7CE6EF967", "Q. c #B2B6CEDEF964", "!. c #B3D4CED9F9C5", "~. c #B402CFE1F9BF", "^. c #B4ADCFBAF989", "/. c #B686D0FBF9CB", "(. c #B75CD0CFF9C7", "). c #B73FD197F9A1", "_. c #B86ED23DFA2A", "`. c #B962D1F0FA19", "'. c #BA15D2B6F9FD", "]. c #BA3DD286FA2B", "[. c #BB4FD30EFA29", "{. c #BB66D3D6FA4D", "}. c #BC6FD401FA37", "|. c #BCBDD49CFA46", " X c #BD52D49AFAB5", ".X c #BE70D566FADA", "XX c #BF6DD602FAB4", "oX c None", /* pixels */ "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXS.oXoXoXoXR oXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXA.S.oXoXY T oXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXZ.n.Z.oXoXK K J oXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXb.v.b.oXoXH H G oXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXk.j.f.c.oXoXD D S Z oXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXN.M.f.s.oXoXA D P P oXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXD.T.J.k.u.oXoXZ F ] | N oXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXx.G./.W.z.t.oXoXx I ..o.U z oXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXF.R.|./.l.9.oXoXk L O.@.' B oXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXM.J.~.XX(.h.4.oXoXt B X.@.[ C a oXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXy.x.R._..X!.a.1.oXoXr v { +.} ~ y 1 oXoXoXoXoXoXoXoX", "oXoXoXoXoXoXd.B.Q.{. XE.p.,.oXoXw l ) .{ ^ p 0 oXoXoXoXoXoXoXoX", "oXoXoXoXoXz.V.P.).|.}.U.r.>.oXoXq j ^ ` _ ! c f 6 oXoXoXoXoXoXoX", "oXoXoXoXoXz.K.^.'.}.[.L.w.-.oXoX9 y V ( / W M h 5 oXoXoXoXoXoXoX", "oXoXoXoX6.g.Y.`.].].`.H.0.=.oXoX4 e b Q E m n d > + oXoXoXoXoXoX", "oXoXoXoX4.i.C.I.K.H.H.m.2.&.oXoX< 7 i g s u u 8 % X oXoXoXoXoXoX", "oXoXoX4.3.5.q.e.w.8.7.2.=.%.oXoX; < 3 2 , : * % @ . oXoXoXoXoX", "oXoXoX4.2.<.:.;.=.*.%.$.#.%.oXoX= - & $ # @ O o . . oXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX", "oXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoXoX" }; qosmic-1.6.0/icons/silk/shape_flip_vertical.xpm000066400000000000000000000137441304321135200216220ustar00rootroot00000000000000/* XPM */ static char *shape_flip_vertical[] = { /* columns rows colors chars-per-pixel */ "32 32 174 2", " c #57028834CF2A", ". c #57D48910CF85", "X c #588B899FD00F", "o c #59A58A64D0F8", "O c #5B728B87D136", "+ c #5A978B35D196", "@ c #5B068B99D1BD", "# c #5C778D15D233", "$ c #5E258E8CD331", "% c #60A08ED8D333", "& c #600B8FF7D4BA", "* c #622B91B6D624", "= c #63829373D776", "- c #64779190D4A1", "; c #66199315D516", ": c #648793CDD749", "> c #67C7946AD5E7", ", c #65B994D5D7BB", "< c #688F950BD627", "1 c #691395E8D6C1", "2 c #6B849735D7B4", "3 c #6DB49729D74B", "4 c #67A89681D89E", "5 c #680E9629D85B", "6 c #69CF972CD8A0", "7 c #6B42978BD872", "8 c #69B59827D99C", "9 c #6BAC999EDAA0", "0 c #6D5B9B17DBA2", "q c #6F5C9B21DA75", "w c #6EC89C93DCA6", "e c #70549BD6DAC3", "r c #73EE9D83DAF0", "t c #73BF9E6FDC1B", "y c #75D69CCDDA08", "u c #75FB9C99D9DC", "i c #74929EC1DC19", "p c #77989EE5DB04", "a c #70769E08DDF4", "s c #72679F79DF81", "d c #78B39EB0DAA8", "f c #7557A0C1DE50", "g c #76FAA091DD16", "h c #7CB7A1A3DBDE", "j c #7911A247DE0A", "k c #7B10A407DF09", "l c #7CA4A2C7DCEB", "z c #7D83A5FEE058", "x c #7E0FA5BADF9B", "c c #743FA10BE088", "v c #75FCA2BBE109", "b c #77DDA440E1E6", "n c #7924A532E2A2", "m c #7A02A593E300", "M c #7AC9A668E398", "N c #7B5EA6AEE3C8", "B c #7D04A602E0C2", "V c #7C27A6EDE355", "C c #7C84A7C3E456", "Z c #7C83A7B8E46C", "A c #7EF9A871E32B", "S c #7F4EA889E2F7", "D c #7CE4A82FE48A", "F c #7D6DA898E4DD", "G c #8029A37DDD15", "H c #80C3A4C6DD9A", "J c #81AFA53ADD74", "K c #822EA7EBDFF4", "L c #8453A643DE1B", "P c #8392A869DFB1", "I c #8531A8E1DF77", "U c #8704A894DEE0", "Y c #8717A954DF44", "T c #89BEAA05DF77", "R c #881AAA44DFD5", "E c #804FA818E1E9", "W c #82B1A92EE149", "Q c #8163A964E2F4", "! c #8B61ACC1E0C7", "~ c #8A51AD9DE248", "^ c #8DA7ACF6E066", "/ c #8FC2AE5DE110", "( c #8E3BAEEFE1AA", ") c #8BA3AFB7E4EC", "_ c #8CD6B00DE485", "` c #9053AF47E157", "' c #8F20B049E2CF", "] c #9398B145E1FE", "[ c #918CB162E2CB", "{ c #9239B13AE26D", "} c #9517B411E3FE", "| c #96B5B3B3E2E3", " . c #94D4B50CE608", ".. c #968CB5AFE5AA", "X. c #99CAB613E3EE", "o. c #995EB788E5F1", "O. c #9C93B85BE4F9", "+. c #9CE3B985E631", "@. c #9EC4BA57E5F1", "#. c #84BBB1B4F3D6", "$. c #8579B242F441", "%. c #87C6B39EF443", "&. c #850DB23CF484", "*. c #8659B2CAF485", "=. c #8799B390F4CC", "-. c #88D0B44EF4CC", ";. c #8963B4D3F54B", ":. c #8A93B589F503", ">. c #8C67B6C3F50A", ",. c #8DFBB764F4FE", "<. c #8C9EB707F578", "1. c #8E99B88BF5F6", "2. c #8F20B8B1F5A1", "3. c #921CB9E2F596", "4. c #919BBA86F63C", "5. c #936ABAE8F60F", "6. c #90BBBA21F67C", "7. c #92F0BBB2F6D8", "8. c #9372BBE7F6B2", "9. c #94DBBB94F624", "0. c #956FBBF3F639", "q. c #967ABCD4F63D", "w. c #9767BD33F65B", "e. c #9418BC98F70C", "r. c #9562BD86F792", "t. c #9721BED8F7DB", "y. c #97D6BF53F81F", "u. c #9872BE28F661", "i. c #9AC3BFE0F725", "p. c #9A2BC09BF816", "a. c #9B8DC123F7C7", "s. c #9BBFC162F808", "d. c #9C35C0D4F751", "f. c #9C5DC1A5F804", "g. c #9D8CC29AF841", "h. c #9F7EC245F74E", "j. c #9F3AC306F813", "k. c #9FA3C3CDF83C", "l. c #9E31C2F4F88E", "z. c #9F92C3F6F8B1", "x. c #A05AC416F841", "c. c #A0A6C472F877", "v. c #A1EAC522F86F", "b. c #A08DC4B8F90C", "n. c #A316C5B7F890", "m. c #A519C715F8A8", "M. c #A643C80EF8A2", "N. c #A708C851F896", "B. c #A7CFC898F8E7", "V. c #A9C4C889F8AF", "C. c #AAE3C8D0F8B6", "Z. c #ABAEC977F8B2", "A. c #AAF5CACAF905", "S. c #ABB5CAF8F949", "D. c #AD94CAD1F8D1", "F. c #ADF6CC3BF945", "G. c #AE12CC6AF904", "H. c #AEC7CC9DF965", "J. c #B000CCA8F8F8", "K. c #B06ECC52F961", "L. c #B261CE21F9DF", "P. c #B2EDCEBEF99D", "I. c #B363CF65F9F1", "U. c #B5E7D0BAF9B5", "Y. c #B7A2D101FA3D", "T. c #B773D1C5F9D1", "R. c #B92CD1B5FA31", "E. c #B9B7D237FA23", "W. c #B937D27DFA6A", "Q. c #BA9ED302FA2F", "!. c #BAADD370FA19", "~. c #BBD7D3EBFA1C", "^. c #BB8DD399FA8B", "/. c None", /* pixels */ "/./././././././././././././././././././././././././././././././.", "/./././././././././././././././././././././././././././././././.", "/./././././././././././././././././././././././././././././././.", "/./././././././././././././././././././././././.8.8././././././.", "/./././././././././././././././././././././.e.7.4.4././././././.", "/./././././././././././././././././././.k.x.j.i.5.2././././././.", "/./././././././././././././././././.t.g.N.F.L.V.q.>././././././.", "/././././././././././././././././.v.c.m.G.U.^.K.w.:././././././.", "/././././././././././././././.k.M.A.H.P.T.!.Q.D.0.-././././././.", "/./././././././././././././.n.B.F.P.T.!.~.~.E.Z.5.=././././././.", "/./././././././././././.f.v.S.I.W.^.!.Q.E.R.Y.V.3.$././././././.", "/./././././././././.z.g.s.k.B.H.P.P.J.D.Z.C.V.h.,.#././././././.", "/./././././././.b.z.g.f.p.p.a.d.d.i.u.q.9.5.3.,.%.#././././././.", "/././././././././.b.l.f.p.y.r.7.6.1.<.:.;.=.*.$.$.&././././././.", "/./././././././././././././././././././././././././././././././.", "/./././././././././././././././././././././././././././././././.", "/./././././././.D D D C N m b v c s a w 0 9 8 4 , : /./././././.", "/./././././././.F F F Z N V S Q Q E z k j g i q 5 : /./././././.", "/./././././././././.Z M n A ) .o.o.} [ ( ! R l 7 * /./././././.", "/./././././././././././.b S _ ..+.@.O.X.| ] / J 2 & /./././././.", "/./././././././././././././.B W ~ ' [ { ` ^ T h < $ /./././././.", "/././././././././././././././.f x K P I Y U L d ; # /./././././.", "/././././././././././././././././.t e r l H G u - @ /./././././.", "/./././././././././././././././././.= 6 r p y 3 % o /./././././.", "/./././././././././././././././././././.1 > - % O X /./././././.", "/./././././././././././././././././././././.+ o X . /./././././.", "/./././././././././././././././././././././././. /./././././.", "/./././././././././././././././././././././././././././././././.", "/./././././././././././././././././././././././././././././././.", "/./././././././././././././././././././././././././././././././.", "/./././././././././././././././././././././././././././././././.", "/./././././././././././././././././././././././././././././././." }; qosmic-1.6.0/icons/silk/shape_group.xpm000066400000000000000000000054161304321135200201300ustar00rootroot00000000000000/* XPM */ static char *shape_group[] = { /* columns rows colors chars-per-pixel */ "32 32 75 1", " c #066206620662", ". c #0D010CE10C9F", "X c #132E132F1330", "o c #1914190018D6", "O c #17E41C1A246B", "+ c #249827532D98", "@ c #2BDB2BD02BB6", "# c #3515356A3639", "$ c #3A813A813A81", "% c #2982359D4D65", "& c #3E7F546F7E6D", "* c #442F442F442F", "= c #4D0E4D0E4D0E", "- c #541D541D541D", "; c #5D0A5D0A5D0A", ": c #62DD62DD62DD", "> c #6AD86ADA6AE1", ", c #743374337433", "< c #474B6768A2D2", "1 c #48016755A2D0", "2 c #58927B0BBB78", "3 c #5D0F86F6D574", "4 c #5EAF895BD6A8", "5 c #5C1D8781D8F8", "6 c #63458CBCD7F6", "7 c #65428EB3D968", "8 c #6F1A91D9D268", "9 c #67279147D962", "0 c #6BE19435DA6F", "q c #6FCC998CDC07", "w c #74669C40DD40", "e c #7C399F26DE1D", "r c #77D2A07CDF6B", "t c #7B8CA114DF15", "y c #7CA4A440E17C", "u c #7E9EA82EE27C", "i c #862D861B85FF", "p c #869789B38E9C", "a c #8B418B3D8B37", "s c #8B9C8E4092D3", "d c #95DE96049648", "f c #9A1C9A1C9A1D", "g c #8F61983BA62B", "h c #B4E4B4EDB4FC", "j c #9BB2AB04C29C", "k c #8120A355DFB6", "l c #A365B893D89A", "z c #8526A6C4E0F9", "x c #8510AACCE3A6", "c c #8BF8ACB8E32D", "v c #90E9AFC8E417", "b c #8D81B349E6C3", "n c #9476B420E5EA", "m c #98C7B79EE779", "M c #976AB893E801", "N c #9A47B8FDE7E9", "B c #9188B647EB36", "V c #9542B9B9EA99", "C c #9C87BBE6E961", "Z c #9BA2BDBEF49F", "A c #A126BF38EAC3", "S c #9FBEC0BAF5EF", "D c #AC2BC34AE629", "F c #A364C19AEC3D", "G c #A3D2C310F5C8", "H c #A9D9C70BF530", "J c #ADAAC9DBF603", "K c #B026CD7AF8F8", "L c #B424CE2AF70C", "P c #B61FCF7DF882", "I c #B7BCD0C6F84C", "U c #BBA9D318F803", "Y c #B7C5D0E1F87F", "T c #C0FCD679F803", "R c None", /* pixels */ "aiiiiiRRRRRRRRRRRRRRRRRRRR>::;;;", "aaddaiRRRRRRRRRRRRRRRRRRRR:>,,:;", "ifhhdiRRRRRRRRRRRRRRRRRRRR;,ff>-", "idhhdpRRRRRRRRRRRRRRRRRRRR;,fd>-", "iaddsglKKJJJHHHHHGGGGGRRRR-;>>;=", "iiipgjDLLLLLLJJJJJHHGGRRRRR--===", "RRRRlDLUUUUUIIPPPPLJGSRRRRRRRRRR", "RRRRKLUTTUUUUUUUUUYLGZRRRRRRRRRR", "RRRRJLUTUUUUUUUYYIPKGZRRRRRRRRRR", "RRRRJLUUUUUUUUYYIIPJGZRRRRRRRRRR", "RRRRHLIUUUUUUYYIPPPJGZRRRRRRRRRR", "RRRRHJIUUILJJJHHHHHGZBRRRRRRRRRR", "RRRRHJPUULFVVVVVBBBbcxxyyyreRRRR", "RRRRHJPUUJVbbBbbbbbccxxxxyrwRRRR", "RRRRGHLUUJVbCCCCCNMMMnnnnctwRRRR", "RRRRGHLYYJVbCFFFAACCCNNmmctqRRRR", "RRRRGHLYYHBbCFFAACCCNmmnncw0RRRR", "RRRRGGJLKGBbCAACCCNNmmnnnxw0RRRR", "RRRRGGGGGZbbNACCCNmmnnnnnzw9RRRR", "RRRRSZZZZBxcMCCCNmmnnnnnczq7RRRR", "RRRRRRRRRRxcMCCNmmnnnvccck06RRRR", "RRRRRRRRRRuxnNNmnnnnvcccck06RRRR", "RRRRRRRRRRyxnmmnnnncccccct94RRRR", "RRRRRRRRRRyxnmnnnnccccccze94RRRR", "RRRRRRRRRRrubnnnnvcccczzze75RRRR", "RRRRRRRRRRwtzccxzzzktteee821RRRR", "-==**RRRRRwwwwwwwq00997772&%O...", "=-:;=*RRRRwwq009976643355<%+#@o.", "*:aa;$RRRRRRRRRRRRRRRRRRRRO#>>@ ", "*;ai-$RRRRRRRRRRRRRRRRRRRR.@>>@ ", "*=--*$RRRRRRRRRRRRRRRRRRRR.o@@X ", "*$$###RRRRRRRRRRRRRRRRRRRR.. " }; qosmic-1.6.0/icons/silk/shape_move_forwards.xpm000066400000000000000000000044111304321135200216430ustar00rootroot00000000000000/* XPM */ static char *shape_move_forwards[] = { /* columns rows colors chars-per-pixel */ "32 32 50 1", " c #53A27FD5D199", ". c #5AB984E2D36F", "X c #63238B76D6EA", "o c #68158FA2D88F", "O c #67AC906DD856", "+ c #66F091BAD97E", "@ c #6C739492DA40", "# c #6FA09960DC42", "$ c #713097DCDBED", "% c #749A9BDFDD3D", "& c #7B739DC1DC60", "* c #7C42A126DF15", "= c #7C97A4DDE19E", "- c #7EE3A865E26E", "; c #838EA39CDE80", ": c #859AA6C6E0F6", "> c #88A8A7FCE0F3", ", c #84D8ABE3E3EE", "< c #8C37AC7FE2F1", "1 c #90B2AFEDE41E", "2 c #87EFB180E5B9", "3 c #8C52B323E69C", "4 c #9433B471E622", "5 c #9936B775E714", "6 c #9766B8BDE81F", "7 c #99DFB8E4E7FA", "8 c #9CC4BC4CE96D", "9 c #A117BF77EAC2", "0 c #B6DFC360D976", "q c #B8D2C57BDB91", "w c #A009C064EB4B", "e c #A3AAC232EBC5", "r c #C64AC64AC64A", "t c #CBFDCBFDCBFD", "y c #D4E3D4E3D4E3", "u c #DA7FD9AED83E", "i c #DBA1DB85DB54", "p c #C3DACE0FE067", "a c #C638D060E249", "s c #D1E4DC47EF60", "d c #D413DE5EF1A0", "f c #D792E1A9F444", "g c #DC3EE429F2AE", "h c #E5ABE519E403", "j c #EDAEEDAEEDAE", "k c #F067F2ECF78A", "l c #F23CF231F212", "z c #F8C7F7D4F60D", "x c #FF52FEC9FDA5", "c c None", /* pixels */ "cccccccccccccccccccccccccccccccc", "cccccccccccccccccccccccccccccccc", "cccccccccccccccccccccccccccccccc", "cccccccccccccccccccccccccccccccc", "cc33333322,,,,,,,-====*%cccccccc", "cc3344444333332<,,,,,=*%cccccccc", "cc348e888888876664444<*%cccccccc", "cc34weeeeee9988887755<*$cccccccc", "cc248eeeee98888775544<&#cccccccc", "cc238eee9888877554444>%@cccccccc", "cc,38e998888775544444>%@cccccccc", "cc,38998887755444444<:$@cccccccc", "cc,378888775544441<<<;@&0iuuyycc", "cc,<6887755444441<<<<*+;phhiuycc", "cc-,68775544444<<<<<<*o;szzjiycc", "cc=,477544444<<<<<<>>&o;fxxliycc", "cc=,45544441<<<<<>>>>&X;dxxliycc", "cc=:3544441<<<<<>>>>;&X;dxxlitcc", "cc%=<44441<<<<<>>>:;;%X;dxxlitcc", "cc%*:<>>:::;**&&&&%%%@.&dxxlutcc", "cc%%%%%%$#@@OOoXXXXXX. &sxxlutcc", "cc$#@@@++@&;;;;;;;;*&&&5gxxlutcc", "ccccccccccqasfdddddddssgkxxlytcc", "ccccccccccihzxxxxxxxxxxxxxxlyrcc", "ccccccccccihzxxxxxxxxxxxxxxlyrcc", "ccccccccccuijllllllllllljllhyrcc", "ccccccccccuiiiiiiiiuuuuyyyyytrcc", "ccccccccccuuyyyyytttttttrrrrrrcc", "cccccccccccccccccccccccccccccccc", "cccccccccccccccccccccccccccccccc", "cccccccccccccccccccccccccccccccc", "cccccccccccccccccccccccccccccccc" }; qosmic-1.6.0/icons/silk/shape_move_front.xpm000066400000000000000000000051011304321135200211410ustar00rootroot00000000000000/* XPM */ static char *shape_move_front[] = { /* columns rows colors chars-per-pixel */ "32 32 65 1", " c #539D7FFFD255", ". c #5AD58551D4BB", "X c #629B8B99D726", "o c #68939001D63F", "O c #66288F65D890", "+ c #676D91F0D9CF", "@ c #6BB59474DA86", "# c #6F0F9897DC42", "$ c #75C897FBD626", "% c #7C439CAED83B", "& c #70B496A7DA6B", "* c #73AF9BBDDD5E", "= c #7BAF9E04DCCD", "- c #77DAA085DF68", "; c #7C45A194DF00", ": c #7D2CA59CE197", "> c #7F68A8F7E33F", ", c #838AA420DEF2", "< c #85A9AA35E05D", "1 c #900BAFC3DE5D", "2 c #B37DC01ED718", "3 c #85D4A6D9E0CE", "4 c #8542AAAEE355", "5 c #8BE1AC95E318", "6 c #9098AFDFE43E", "7 c #8CEAB36EE6DF", "8 c #9464B431E5C3", "9 c #9943B755E709", "0 c #9771B85CE82A", "q c #9AFAB9AFE767", "w c #9783B915E86C", "e c #9CB4BC5EE98B", "r c #A0EEBF36EAA1", "t c #B4A9C05DD18E", "y c #BC2CC85DD81E", "u c #BBABC829DDDC", "i c #A459C2B5EB55", "p c #BBD3D25BEFD1", "a c #C565C565C565", "s c #CCE5CCD0CCB1", "d c #C21CCC00DC5B", "f c #C909D303DF7D", "g c #D4E5D4D5D4C1", "h c #D88BD7B8D639", "j c #DA5CD93FD764", "k c #DBACDB9CDB85", "l c #E26BE166DFB1", "z c #C85AD285E41C", "x c #CE7BD900EC56", "c c #D4DCDEB2EE78", "v c #D402DE75F207", "b c #D968E31EEFA0", "n c #D73DE190F428", "m c #DD4CE5F1F3F5", "M c #DFA2E969F62A", "N c #E463E457E442", "B c #E882E7F5E6E0", "V c #EA13E956E7C8", "C c #EC97EC97EC97", "Z c #E472ECDFF7E5", "A c #F4AAF49DF48A", "S c #F8C4F88AF747", "D c #F573F7BAFAB5", "F c #FDC2FD7AFCF5", "G c None", /* pixels */ "VBBNNNNNNkkkkkjhggggGGGGGGGGGGGG", "BVCCCVVVBBNNNNNNNkggGGGGGGGGGGGG", "BCASSSSSSSAAAAAAACjgGGGGGGGGGGGG", "NCSFFFFFFFFFFFFFFAksGGGGGGGGGGGG", "NVSFFFFFFFFFFFFFFAjsGGGGGGGGGGGG", "NVSFFFFFFFFFFFFFFAjsGGGGGGGGGGGG", "NBSFFFFFFFFFFFFFFAjsGGGGGGGGGGGG", "kBSFFDZMMMMMMMMMMcdtGGGGGGGGGGGG", "kBAFFZpiiiiiiiiiie81<:::--GGGGGG", "kNAFFZi7788777775554444>;=GGGGGG", "kNAFFZi7weeeeeeww0008885;*GGGGGG", "kNCAAbi7eiiiiirreeeqq995;&GGGGGG", "jkkkkfq7eiiiireeeqq99885*#GGGGGG", "jhgggy87eiirreeeq9988884*@GGGGGG", "GGGGGG57eireeeqq90888883*+GGGGGG", "GGGGGG47weeeqq9988888653#OGGGGGG", "GGGGGG450eeq99088885555,@XGGGGGG", "GGGGGG>48eq998888655555;+oGGGGGG", "GGGGGG:4899988885555553=O$2jhggg", "GGGGGG:4898888855555333=X%dNNkgg", "GGGGGG-:78888655555333,=X=xSACjg", "GGGGGG*;354333,;;=====*@.;vFFAks", "GGGGGG******#@@+OOXXXXX. =vFFAjs", "GGGGGG&#@@+&=,<3,,,,,;===9mFFAjs", "GGGGGGGGGGGGuzcnnvvvvvvvvmAFFAhs", "GGGGGGGGGGGGlVSFFFFFFFFFFFSFFAhs", "GGGGGGGGGGGGkBSFFFFFFFFFFFSFFCga", "GGGGGGGGGGGGkNAFFFFFFFFFFFFFFCga", "GGGGGGGGGGGGkNAFFFFFFFFFFFFFFCga", "GGGGGGGGGGGGkNCAAAAAAAAACCCCCNsa", "GGGGGGGGGGGGjkkkkkkkkjjhhggggsaa", "GGGGGGGGGGGGjhggggssssssaaaaaaaa" }; qosmic-1.6.0/icons/silk/shape_post_triangle.xpm000066400000000000000000000035071304321135200216450ustar00rootroot00000000000000/* XPM */ static char * shape_post_triangle_xpm[] = { "32 32 43 1", " c None", ". c #7DA5E1", "+ c #8CB3E6", "@ c #7FA8E3", "# c #76A0DE", "$ c #9DBCE9", "% c #94B4E5", "& c #99B9E8", "* c #739BDD", "= c #98B7E7", "- c #8CACE2", "; c #7DA1DF", "> c #000000", ", c #576884", "' c #667C9E", ") c #7A9DDD", "! c #6E98DC", "~ c #829DC6", "{ c #354052", "] c #1F2631", "^ c #6B93DA", "/ c #89A7D4", "( c #050608", "_ c #85ABE3", ": c #8AA8D5", "< c #85A6E0", "[ c #87A5D2", "} c #374355", "| c #1F2531", "1 c #7097DB", "2 c #6690D8", "3 c #60769B", "4 c #648ED8", "5 c #060709", "6 c #202835", "7 c #62789E", "8 c #84A5DF", "9 c #638CD7", "0 c #90AFE4", "a c #5F88D5", "b c #688FD7", "c c #5A84D4", "d c #688FD8", " ", " ", " ", " ", " . ", " .. ", " +@# ", " $%@# ", " &&+.* ", " &==-;* ", " >>>>>>,==%-;* ", " >>>>>>>'%%-)! ", " >> ~{>]%%-*^ ", " >> =%/>(%%_*^ ", " >>%%%:>(%%<*^ ", " >>%%[}>|--<12 ", " >>>>>>>3--<14 ", " %>>>>567---8^9 ", " %%>>--------8^9 ", " %%%>>--------;^9 ", " %%0->>-----<<<)2a ", " %%0-->>----<<<8)ba ", " %0---->>--<<<888)bc ", " %0-------<<<<<888)4c ", " %0-------<<<<<8888)9c ", " ;<<<<88;;;;))))))))^9c ", " !111!!^^^^^2db4499999cc ", " ^^222449999aaacccccccccc ", " ", " ", " ", " "}; qosmic-1.6.0/icons/silk/shape_rotate_anticlockwise.xpm000066400000000000000000000103641304321135200232070ustar00rootroot00000000000000/* XPM */ static char *shape_rotate_anticlockwise[] = { /* columns rows colors chars-per-pixel */ "32 32 93 2", " c #1E625BD01B58", ". c #20705E961CD1", "X c #21A961401EC1", "o c #2477643F211E", "O c #29416A7E251C", "+ c #2CC96C9F28F0", "@ c #329674DB2DFB", "# c #369477203265", "$ c #36FA7BE830C7", "% c #3A0B7C183599", "& c #416D860F3B72", "* c #44408C203CAC", "= c #44F786F2409B", "- c #4BAD8E6E45F2", "; c #4D3A92E74611", ": c #517794BE4BC9", "> c #56B29BC04F08", ", c #566D98FA514C", "< c #5A639D485366", "1 c #592FA7174F60", "2 c #5D37A51954A8", "3 c #5B5DAA735224", "4 c #5EF0A2595A09", "5 c #6338A5FF5CF7", "6 c #65D1AD105BD4", "7 c #6708B3105D92", "8 c #68CAB0515F72", "9 c #64DCA9126036", "0 c #6C4AACF064D8", "q c #6CC7B37B6377", "w c #6CE7BC4C6084", "e c #6EF8B0CB6948", "r c #7140BD7D65C9", "t c #761BB5A96EE9", "y c #7543BC2A6BDD", "u c #77F1B789718C", "i c #788FB77370E5", "p c #7C0ABB5B7501", "a c #7E7EBF5478E8", "s c #6E5DC0D0623B", "d c #758FC2E86A8A", "f c #7DFBC3BF742F", "g c #81CCBEF779A6", "h c #80C5C35D76B3", "j c #8487C3347DA0", "k c #890DC5D77FB2", "l c #8945C98E7F52", "z c #56088769CF06", "x c #57798898CFB5", "c c #58C38987D031", "v c #5BF98C56D220", "b c #61218F15D373", "n c #63899240D5A9", "m c #6B679613D751", "M c #67C29685D8C8", "N c #6DDC9AE0DB1E", "B c #72819CF7DBCD", "V c #79E49EAADB50", "C c #7476A0A1DC65", "Z c #7CA8A2C0DD1B", "A c #87A1C55D8089", "S c #8AA3C6938313", "D c #8D56C9AC841D", "F c #9062C9A2873F", "G c #94EDCCC98C90", "H c #9918CEB08FDF", "J c #98FFD0818F86", "K c #9A20CFCC910F", "L c #9E40D20D9525", "P c #A403D4E69AFC", "I c #81EFA5A4DDFA", "U c #8679A959DF78", "Y c #8A9AAB6CE022", "T c #8AB2AC44E098", "R c #8600B27FF414", "E c #8AEBB5ADF4EE", "W c #935DBB82F65E", "Q c #9982BF89F759", "! c #9C7BC165F7A3", "~ c #9EBCC386F8BA", "^ c #A25FC51AF828", "/ c #A3EEC6ADF931", "( c #A6C1C8F9F9FE", ") c #AC3CCC3BFA8F", "_ c #B29FCF7AFA46", "` c #B5C5D13FFA66", "' c #BC7DD4E3FA6E", "] c #C0ECD735FACC", "[ c #C4E6DA1FFB42", "{ c #CBBADDCCFBA2", "} c #CF8FE0A5FBE3", "| c #D05DE0F6FC07", " . c None", /* pixels */ " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", " . . . . . . . . . . . . . . . . .s w w . . . . . . . . . . . .", " . . . . . . . . . . . . . . . .d d r r . . . . . . . . . . . .", " . . . . . . . . . . . . . . .d f h f y 7 3 1 . . . . . . . . .", " . . . . . . . . . . . . . .d f D D D j y q 8 6 2 2 . . . . . .", " . . . . . . . . . . . . .d f l J L L H F k g t 0 5 ; . . . . .", " . . . . . . . . . . . . .r f D L P P L L G S g i 0 < ; . . . .", " . . . . . . . . . . . . .r f k L P K G H G D A j p 0 < & . . .", " . . . . . . . . . . . . .w y h D G F D D S S S S j u 5 - % . .", " . . . . . . . . . .B C . .6 q i g A j p p g j A j a e , = . .", " . . . . . . . . . .B B . . .2 6 0 t t 0 9 0 t a j h t 4 - # .", " . . . . . . . . .B B B . . . .> > > > : - - , e p f t 9 : # . ", " . . . . . . . . .N N N . . . . .* * & .$ @ & , 5 5 4 , = + . ", " . . . . . . . .N N N N . . . . . . . . . .@ @ % % % # @ + o ", " . . . . . . . .C B N M . . . . . . . . . . .+ O o o X . ", " . . . . . . .C I Z N M . . . . . . . . . . . . . . . . . . . .", " . . . . . .B Z U I B n . .) ) . . . . . . . . . . . . . . . .", " . . . . . .Z I T U N n . .) ) ) ) . . . . . . . . . . . . . .", " . . . . .B Z U Y I N n . .) ) _ ` _ ) . . . . . . . . . . . .", " . . . .M B Z U U Z m v . .) _ ] [ ' ` ( ~ . . . . . . . . . .", " . . . .N B I U I V M v . .) ` { } [ ' ) ( / . . . . . . . . .", " . . .B C Z I I Z B n v . .( _ [ | { [ ' _ ) / ! . . . . . . .", " . . .N Z I I Z V B n v . .( _ [ { { { [ ' _ ) ^ Q . . . . . .", " . .n m Z I Z V V m b c . .( ) ] { { [ [ ] ' ` ) ^ W E . . . .", " . .n M B V B B m m v x . ./ ) ` ' ' ` ` ` _ _ ( ! W E E R . .", "n n n n n n n b b v v z . ./ / / ( / ^ ^ ~ ! Q W W E E R R R R ", "n n n v v v v v v v x z . .^ ~ ! ! Q Q W W W E E E E E R R R R ", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ." }; qosmic-1.6.0/icons/silk/shape_rotate_clockwise.xpm000066400000000000000000000057261304321135200223410ustar00rootroot00000000000000/* XPM */ static char *shape_rotate_clockwise[] = { /* columns rows colors chars-per-pixel */ "32 32 84 1", " c #2B5A6CEA25D5", ". c #2DC06FBB2819", "X c #2F7571EF29E9", "o c #363079B530DC", "O c #39257C6D327E", "+ c #3D3081AA369E", "@ c #421684B43C63", "# c #43BC8A593CEA", "$ c #45C687BB4058", "% c #47458A274181", "& c #494D8C7542B9", "* c #4C2D934B44C8", "= c #4F5E99AA475B", "- c #4F96927B48F0", "; c #5348965E4D30", ": c #540E9BB64BFE", "> c #57A999215237", ", c #59969CED5310", "< c #570FA4474E26", "1 c #58B8A66C4EC8", "2 c #5CB5A5755452", "3 c #5C91A96552D8", "4 c #60A0AA605740", "5 c #6360A4FA5C9C", "6 c #6689ADF65D74", "7 c #6873AEA55FA9", "8 c #66D4B27B5D0C", "9 c #691DB2565F8F", "0 c #66A5A7C560B3", "q c #6739A8DF60F6", "w c #6AE8AE5162E1", "e c #6F53AF5F68F6", "r c #71BEAFBD6A2B", "t c #6CF8B505637C", "y c #74E3B5B36D39", "u c #746DBA126AA6", "i c #780AB9216EFA", "p c #7911B6FB710C", "a c #7C2FBB7F744F", "s c #80BBC007772B", "d c #806FBEA979AB", "f c #85DEC3187D50", "g c #574F887ACFC9", "h c #580B893AD025", "j c #5B588BDCD1C5", "k c #61258F60D363", "l c #64AB92DFD5DA", "z c #6AC29695D74C", "x c #696C9709D910", "c c #6D129AF5DBBE", "v c #74209D6FDB5C", "b c #7328A0DFDFE9", "n c #7CB5A3D6DE0E", "m c #7634A2BEE114", "M c #7B64A619E277", "N c #7DDBA8DCE626", "B c #87BBC4248044", "V c #8AD1C5D782B8", "C c #8F43C972872E", "Z c #8F94C9408826", "A c #935DCB8F8B07", "S c #997FCEDC9121", "D c #827EA5F4DE12", "F c #86DDA8E4DF86", "G c #89A9AA7EDFA9", "H c #86A2AC30E272", "J c #8B65AD37E1A6", "K c #8EA9B14CE3FA", "L c #92BEB227E368", "P c #860EB29FF459", "I c #8BD9B655F522", "U c #8FB6B934F617", "Y c #9416BBDCF688", "T c #99E0BF88F729", "R c #9D25C215F7FC", "E c #9F96C3F9F8B2", "W c #A135C4B3F865", "Q c #A335C621F8C6", "! c #A78DC881F8CC", "~ c #AC8FCAB8F8F7", "^ c #B28ECE67F9AA", "/ c #B71CD152F9E5", "( c #BA9BD313FA38", ") c None", /* pixels */ "))))))))))))))))))))))))))))))))", "))))))))))))))))))))))))))))))))", "))))))))))))))))))))))))))))))))", "))))))))))))))))))))))))))))))))", "))))))))))))33<)))))))))))))))))", "))))))))))))4422))))))))))))))))", ")))))))))3137ww5:)))))))))))))))", "))))))tttt9tipyw,*))))))))))))))", ")))))9uasfffVVBa5;#)))))))))))))", "))))tusfVCAAAZCdq;@)))))))))))))", ")))tafAAAZACffVa5-+)))))))))))))", "))8ufASSAVBfaaae,%O)))))))))))))", "))uaCSSACfpypy0>$o))nN))))))))))", ")9ifASAVar5505;$o)))NN))))))))))", "<6aBAAZa5-&%$@Oo))))MMM)))))))))", ":2tpaay5&Oo)X. )))))MMM)))))))))", ":::::;-&+o))))))))))MMmm))))))))", "==*##++Oo)))))))))))mMMM))))))))", "))))))))))))))))))))mMHHn)))))))", "))))))))))))))))YY))bMKLMv))))))", "))))))))))))))YYYY))vMLLHn))))))", "))))))))))))EWETYU))cnLLJnv)))))", "))))))))))TR!~^!YI))cnJLJDvl))))", ")))))))))WWQ~/(^TI))cvFJJDvx))))", ")))))))E!~~^/((~YI))xvDGGDnvz)))", "))))))Q!~^/((((~YP))xvnFDDnvz)))", "))))RW~^((((((/!YP))xcnDDnnvlj))", "))ERRE!~^^~~~~!EIP))lzvvvvvzkj))", "WERRRRRRRTTYYYYIPP))lllllllkjjhg", "WERRTTYYYUIIPPPPPP))llljjjjjjjhg", "))))))))))))))))))))))))))))))))", "))))))))))))))))))))))))))))))))" }; qosmic-1.6.0/icons/silk/shape_square_add.xpm000066400000000000000000000116531304321135200211040ustar00rootroot00000000000000/* XPM */ static char *shape_square_add[] = { /* columns rows colors chars-per-pixel */ "32 32 125 2", " c #343068B21654", ". c #352D694217AE", "X c #3F1C75761C4B", "o c #3A246CF42E9C", "O c #415C77171F18", "+ c #441C793221E6", "@ c #4A247D572908", "# c #3F4C70E64500", "$ c #4675766C4E43", "% c #50957D5849F2", "& c #520C7F625532", "* c #494D81C32167", "= c #4E81814F2D14", "- c #58138EE22F01", "; c #5292831733AF", ": c #58988EF12FE9", "> c #5DED8B6A3F55", ", c #5B1390D93326", "< c #5F81941338B2", "1 c #6AACA04E3F78", "2 c #5BD386C55D1C", "3 c #61568E3B4702", "4 c #6E079FB2465C", "5 c #67469233498D", "6 c #6D4796B2528F", "7 c #78BD9EB75F29", "8 c #6CC0A189426C", "9 c #6F9CA0D748F7", "0 c #76DAA5B55309", "q c #7F4DB23054B2", "w c #58A983A163B9", "e c #5F6688EA6C15", "r c #630A8C006676", "t c #68558FF26EE3", "y c #73A99B426268", "u c #6F0295327313", "i c #6C8992F67B88", "p c #75759B157ABD", "a c #7F7EA3E666D1", "s c #7F04A3B87164", "d c #7E33A5607C27", "f c #8098AD015C76", "g c #80A3B2355635", "h c #830FB4E1599B", "j c #874AB8985E2F", "k c #8574AD4A6EFA", "l c #8D02B4BC6D3F", "z c #87E2AEEB7259", "x c #8FE2B7647037", "c c #9499BB47738A", "v c #957DBAE27811", "b c #9B64BEA37F19", "n c #9B8CC5A97770", "m c #9D80C5497A49", "M c #52DB7FD5A34D", "N c #784B9C3F8A0C", "B c #78539BBC9C0F", "V c #7E33A2AB83DA", "C c #7E20A2109C8B", "Z c #5D3487AEABE8", "A c #607B89BAB05B", "S c #6C3292F1B4B7", "D c #79C99D50B68A", "F c #7AE59E5BBACF", "G c #7F14A12FA419", "H c #5FA08953DA80", "J c #61668B5BD6BD", "K c #63CA8D47D975", "L c #662790A7D8FF", "P c #6B949413DAC6", "I c #6ED798BBDC7C", "U c #7059974BDD3D", "Y c #73CF9BD5DD9C", "T c #782E9EEADED5", "R c #76A6A0A7DE87", "E c #7C95A245DF9A", "W c #7DD6A50AE195", "Q c #7F5BA897E33A", "! c #809EA40B9F88", "~ c #83A2A50ABE0C", "^ c #A360CA40835C", "/ c #A94DCE1086C6", "( c #A9FECAC08C94", ") c #AE27D3728C9D", "_ c #B2E7CF0D9963", "` c #BA34D9D69C6F", "' c #BC7DD90BA3DA", "] c #C012DAC7AA78", "[ c #C0BFDDB2A4DB", "{ c #C209DF50A85F", "} c #C70FDFE5B084", "| c #C401E073AAF1", " . c #CCEDE3DDB74E", ".. c #8477A620C321", "X. c #85E9A681CC5C", "o. c #89C7AA00CFD4", "O. c #8A62AA55D712", "+. c #80F2A3A3DFAE", "@. c #8BDDABC9D93A", "#. c #8367A62EE211", "$. c #84EAAC02E406", "%. c #8D07AD6EE40F", "&. c #908EAFABE52C", "*. c #87EDB177E5B7", "=. c #8C6FB31CE683", "-. c #942BB42FE600", ";. c #98A7B7A4E766", ":. c #99EAB902E809", ">. c #97F5B8E4E899", ",. c #9D02BC61E979", "<. c #A106BF69EAE4", "1. c #9FDAC0BAEAE9", "2. c #A3ADC22CEBBC", "3. c #D66EEA6CC413", "4. c #D828E934CA30", "5. c #D8F9E9AFCAA9", "6. c #DE2AECF0D127", "7. c #E358F09FD78B", "8. c #E84EF400DD5F", "9. c #ECECF4F2E6CE", "0. c #EE97F5E1E8BB", "q. c #F458FA13EF97", "w. c #F577FAB9F114", "e. c #FBABFD8EFA3B", "r. c None", /* pixels */ "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.", "r.r.r.r.=.=.=.=.=.=.=.*.*.*.$.$.$.$.$.$.$.$.#.Q Q W W W r.r.r.r.", "r.r.r.r.=.=.-.-.-.-.-.-.=.=.=.=.=.=.=.=.%.%.$.$.$.$.W W r.r.r.r.", "r.r.r.r.=.-.,.2.1.,.,.,.,.,.,.,.,.:.:.>.>.>.>.;.-.=.Q R r.r.r.r.", "r.r.r.r.=.-.2.2.2.2.2.2.2.2.2.2.<.<.,.,.,.,.,.,.,.-.Q R r.r.r.r.", "r.r.r.r.*.-.,.2.2.2.2.2.2.2.<.<.,.,.,.,.,.,.:.:.:.=.W Y r.r.r.r.", "r.r.r.r.*.=.,.2.2.2.2.<.<.<.<.,.,.,.,.,.:.:.:.;.;.%.E Y r.r.r.r.", "r.r.r.r.$.=.,.2.2.2.<.<.,.,.,.,.,.,.:.:.:.;.;.;.-.%.E U r.r.r.r.", "r.r.r.r.$.=.,.2.2.<.<.,.,.,.,.,.:.:.:.;.;.;.-.-.-.%.T I r.r.r.r.", "r.r.r.r.$.=.,.2.<.,.,.,.,.,.,.:.:.;.;.;.-.-.-.-.-.$.T P r.r.r.r.", "r.r.r.r.$.=.:.<.,.,.,.,.,.:.:.:.;.;.;.-.-.-.-.-.-.$.Y P r.r.r.r.", "r.r.r.r.$.%.>.,.,.,.,.:.:.:.;.;.;.-.-.-.-.-.-.-.-.#.Y P r.r.r.r.", "r.r.r.r.#.$.>.,.,.:.:.:.;.;.;.-.-.-.-.-.-.-.&.&.&.#.U L r.r.r.r.", "r.r.r.r.Q $.-.,.:.:.;.;.;.;.-.-.-.-.-.-.&.&.%.%.%.#.U K r.r.r.r.", "r.r.r.r.W $.-.:.:.;.;.;.-.-.-.-.-.-.&.%.@.o.....~ F S A r.r.r.r.", "r.r.r.r.W #.-.:.;.;.-.-.-.-.-.-.-.&.%.@.~ G N p u t e w % r.r.r.", "r.r.r.r.W #.-.;.;.-.-.-.-.-.-.-.%.%.@...! V s a a 7 6 3 ; r.r.r.", "r.r.r.r.T W %.-.-.-.-.-.-.&.%.%.%.O.~ C d z b ( _ ( x 0 < = O r.", "r.r.r.r.Y E %.-.-.-.-.-.&.%.%.%.%.X.B p k c / [ 3. .^ h 8 , + . ", "r.r.r.r.Y E %.-.-.-.&.%.%.%.%.%.%...i y v / ) | 8.6./ j h 9 @ ", "r.r.r.r.Y E %.-.-.&.%.%.%.%.%.%.%.F r 6 m ` { 3.q.9.] ^ m f = ", "r.r.r.r.I T $.-.&.%.%.%.%.%.%.%.%.D 2 5 b } 7.w.e.e.0.5.' l ; ", "r.r.r.r.I Y E #.#.#.#.+.+.E E W W S & > c ' 4.9.e.e.0.5.' l ; ", "r.r.r.r.P I U U U I P P P P P P P Z $ ; f n ^ ' 9.9.] ^ m f = ", "r.r.r.r.P P L L L K K K J J J J H M # @ 4 q h ^ 5.5.^ h g 9 @ ", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.o + - 1 g n ' ' n g 8 : + . ", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.X * : 4 f l l f 4 : * X r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.X + @ = ; ; = @ + X r.r.", "r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.. . r.r.r." }; qosmic-1.6.0/icons/silk/shape_square_delete.xpm000066400000000000000000000127241304321135200216160ustar00rootroot00000000000000/* XPM */ static char *shape_square_delete[] = { /* columns rows colors chars-per-pixel */ "32 32 150 2", " c #B80E419D00C8", ". c #B94F42CE0305", "X c #BC2549CA0366", "o c #BFCD4F8912B0", "O c #AAA34E2F2204", "+ c #B05057C72DFD", "@ c #A9745771395B", "# c #AD175A263A98", "$ c #C4204DFE035A", "% c #C53050580498", "& c #CE1F5864024E", "* c #C57552A70BE3", "= c #C84D50B608AB", "- c #D1A95B0402E3", "; c #C51954FA1285", ": c #C2FF58681A3C", "> c #D81760C801F6", ", c #DC19639102B2", "< c #DD046855038E", "1 c #DEBF6C2C09FA", "2 c #DD4A6C3A150B", "3 c #D76C69741CD5", "4 c #E6676BF30056", "5 c #E09E69EE0A4C", "6 c #ED4A728D0000", "7 c #EF9E789F0680", "8 c #F59A74D6021D", "9 c #F9F979440EB0", "0 c #E29A70E716F1", "q c #EC9979511523", "w c #C4715E392353", "e c #C35D5FA92886", "r c #C60160252154", "t c #CD2563F120BA", "y c #C514630F2D41", "u c #CB8462532A97", "i c #CF2C6B762C92", "p c #DA9C73BC2E6A", "a c #C70965C63279", "s c #CDB266E03074", "d c #CC0D6B04379B", "f c #D02470F43476", "g c #DABB7630313D", "h c #DD0E7E6C3CDF", "j c #E7BC772222AF", "k c #E15577F72A45", "l c #9EDB589540E7", "z c #A0965A224311", "x c #A956602A4568", "c c #AF2D655A4983", "v c #BF836CE44499", "b c #BBC77AB95D53", "n c #A56B6E14603D", "m c #AB257371645B", "M c #B5CE77DB6166", "N c #B76E79C2627C", "B c #C48C71364819", "V c #CE817ED6523D", "C c #F75F80E42555", "Z c #EB2F86EC3AE0", "A c #F0A88FF03329", "S c #FD638CBD3347", "D c #F1DD94603E1F", "F c #FFFF904D3ED9", "G c #DE62801F4571", "H c #DF1A87BB4F78", "J c #EF5A8B5D4538", "K c #F34F916140B2", "L c #F5829AB8422C", "P c #FADF9A994335", "I c #F4DB9C644CEF", "U c #FF899CD34D69", "Y c #E32E8DB35841", "T c #E890929F5D9B", "R c #F0A3953C5239", "E c #FFA1969D50EF", "W c #FE249E375384", "Q c #FFFFA24D556F", "! c #FF55A4765D45", "~ c #DF1F92E96703", "^ c #E14B941967E1", "/ c #E8E79BAA69DF", "( c #FBBE9DF1631E", ") c #FE38A9186C94", "_ c #EBE9A21076A4", "` c #ED3FA6807D34", "' c #F3B3A3CF720F", "] c #FC02AABC711E", "[ c #73B677A5A215", "{ c #78E77C5BA5C9", "} c #7E3381CDAA3A", "| c #5D4089D7D9A4", " . c #61668B5BD6BD", ".. c #642F8EAAD889", "X. c #6648910CDB42", "o. c #6BE994B1DAF3", "O. c #6ED798BBDC7C", "+. c #703097FDDBA3", "@. c #73B99BE4DDA9", "#. c #782E9EEADED5", "$. c #76A6A0A7DE87", "%. c #7C95A245DF9A", "&. c #7D90A52AE1AB", "*. c #7F5BA897E33A", "=. c #A2D684788A4E", "-. c #A90487C788C7", ";. c #8ADC87FBA893", ":. c #8E558B36AA76", ">. c #93EB8EB3AAF8", ",. c #954491B5ADEE", "<. c #97BD95C6B1CB", "1. c #9B25972FB1CB", "2. c #929796A5B859", "3. c #96D69AD1BAE6", "4. c #9A1A9B26B887", "5. c #EDD5ACAA834A", "6. c #EF04AFFD8963", "7. c #FE71B400847C", "8. c #FF3BBA9185A1", "9. c #FF81BDF98E3E", "0. c #FD06BCF394FF", "q. c #F92BC9A19BD1", "w. c #FCD1CEB3A5EA", "e. c #FFA0CE51ACCE", "r. c #FFF4D48CB923", "t. c #92ED9ECFC682", "y. c #954DA163C7D9", "u. c #80F2A3A3DFAE", "i. c #8F9FACDDDFF9", "p. c #9234A760D542", "a. c #82D9A6A2E27F", "s. c #8507ABFCE41F", "d. c #8C8BAD97E41A", "f. c #8C9FAFD3E897", "g. c #90A5AF3DE3B8", "h. c #87EDB177E5B7", "j. c #8CE1B2A5E68F", "k. c #8D3AB03AE881", "l. c #9415B420E603", "z. c #98A7B7A4E766", "x. c #99EAB902E809", "c. c #97F5B8E4E899", "v. c #9D02BC61E979", "b. c #A106BF69EAE4", "n. c #9FDAC0BAEAE9", "m. c #A3ADC22CEBBC", "M. c #FFFFDDD6C34E", "N. c #FEF9E378CBD6", "B. c #FFFFE57CD2F0", "V. c None", /* pixels */ "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.j.j.j.j.j.j.h.h.h.h.s.s.s.s.s.s.s.s.a.*.*.&.&.&.V.V.V.V.", "V.V.V.V.j.j.l.l.l.l.l.l.j.j.j.j.j.j.j.j.d.d.s.s.s.s.&.&.V.V.V.V.", "V.V.V.V.j.l.v.m.n.v.v.v.v.v.v.v.v.x.x.c.c.c.c.z.l.j.*.$.V.V.V.V.", "V.V.V.V.j.l.m.m.m.m.m.m.m.m.m.m.b.b.v.v.v.v.v.v.v.l.*.$.V.V.V.V.", "V.V.V.V.h.l.v.m.m.m.m.m.m.m.b.b.v.v.v.v.v.v.x.x.x.j.&.@.V.V.V.V.", "V.V.V.V.h.j.v.m.m.m.m.b.b.b.b.v.v.v.v.v.x.x.x.z.z.d.%.@.V.V.V.V.", "V.V.V.V.s.j.v.m.m.m.b.b.v.v.v.v.v.v.x.x.x.z.z.z.l.d.%.+.V.V.V.V.", "V.V.V.V.s.j.v.m.m.b.b.v.v.v.v.v.x.x.x.z.z.z.l.l.l.d.#.O.V.V.V.V.", "V.V.V.V.s.j.v.m.b.v.v.v.v.v.v.x.x.z.z.z.l.l.l.l.l.s.#.o.V.V.V.V.", "V.V.V.V.s.j.x.b.v.v.v.v.v.x.x.x.z.z.z.l.l.l.l.l.l.s.@.o.V.V.V.V.", "V.V.V.V.s.d.c.v.v.v.v.x.x.x.z.z.z.l.l.l.l.l.l.l.l.a.@.o.V.V.V.V.", "V.V.V.V.a.s.c.v.v.x.x.x.z.z.z.l.l.l.l.l.l.l.k.k.k.a.+.X.V.V.V.V.", "V.V.V.V.*.s.l.v.x.x.z.z.z.z.l.l.l.l.l.l.l.k.k.k.f.a.O.X.V.V.V.V.", "V.V.V.V.&.s.l.x.x.z.z.z.l.l.l.l.l.l.l.g.p.y.3.<.,.:.} { V.V.V.V.", "V.V.V.V.&.a.l.x.z.z.l.l.l.l.l.l.l.j.f.p.1.=.m c # @ z l O V.V.V.", "V.V.V.V.&.a.l.z.z.l.l.l.l.l.l.l.d.i.p.4.-.N B d s u y e : V.V.V.", "V.V.V.V.#.&.d.l.l.l.l.l.l.g.d.d.d.p.1.-.b V ^ ` 6.5./ H f r V.V.", "V.V.V.V.@.%.d.l.l.l.l.l.g.d.d.d.d.t.=.M V Y ' 7.9.8.) R h i ; ", "V.V.V.V.@.%.d.l.l.l.g.d.d.d.d.d.d.2.n v ~ ' ( E F S S S Z g ; ", "V.V.V.V.@.%.d.l.l.g.d.d.d.d.d.d.s.,.x a _ 0.7.) W U Q W K k ; ", "V.V.V.V.O.#.s.l.g.d.d.d.d.d.d.s.s.>.# u ` r.B.B.N.N.B.w.I 0 = . ", "V.V.V.V.O.@.%.a.a.a.a.u.u.%.%.&.&.;.@ u _ e.M.N.N.N.N.q.D 5 $ . ", "V.V.V.V.o.o.+.+.+.O.o.o.o.o.o.X.X.{ l e T ] ! U P P L A q , $ . ", "V.V.V.V.o.o.X.X.X....... . . .| | [ l e G J C 9 8 8 6 4 , - $ . ", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.+ w i p j q 7 6 4 , & % X . ", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.w t 3 2 1 < > & $ X V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.: * = % $ $ $ X V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.o . . . . . . . V.V.V." }; qosmic-1.6.0/icons/silk/shape_square_go.xpm000066400000000000000000000116241304321135200207570ustar00rootroot00000000000000/* XPM */ static char *shape_square_go[] = { /* columns rows colors chars-per-pixel */ "32 32 124 2", " c #1BD17A270074", ". c #1F727BDA0F80", "X c #22767E2400C8", "o c #24687F120CA0", "O c #261D806A0269", "+ c #2C8E83F90CDA", "@ c #327185D30386", "# c #316786E90C95", "$ c #355388EE0B94", "% c #39318A3A0CBA", "& c #2C6183C6101E", "* c #2E7984B71A87", "= c #3DA78CBC11D6", "- c #43388EBA1564", "; c #4A89936319EA", ": c #40538F2E22EA", "> c #417F8FEB2C6B", ", c #441591E622CD", "< c #4A5D94C023C3", "1 c #45A092812A8A", "2 c #48A6943B2CF6", "3 c #56069A28243C", "4 c #547C99F22C74", "5 c #584A9B892CEC", "6 c #5BB09D7E335A", "7 c #6565A2723538", "8 c #6970A351338E", "9 c #6038A1563DEA", "0 c #6885A42B38EC", "q c #707DA6A53878", "w c #4B278E09439E", "e c #52C393C7424A", "r c #559D953F4E34", "t c #5A7E97D14C62", "y c #62639F7340B7", "u c #64219DB9539E", "i c #5F9EA24041D7", "p c #63C6A3DF4513", "a c #6F9EA7F54062", "s c #61E1A31E48BC", "d c #6909A1BF4E9E", "f c #6CE4A84648D0", "g c #74CEAA854526", "h c #78B0AB5E43DC", "j c #721EA81B4E84", "k c #74B6AB184C96", "l c #7A7FAD3649C3", "z c #6D05A2E1558B", "x c #6D6EA2CD5A83", "c c #7000A5185328", "v c #7A08AEE552EE", "b c #7311A5E95DD3", "n c #7957AFB35B4E", "m c #641B995274BA", "M c #728AA5B561E6", "N c #7701A8676198", "B c #7E3DB3A964E3", "V c #77E9A6F47C51", "C c #82A8B3C95C47", "Z c #8300B57465EC", "A c #8690B7CF6BB7", "S c #8A06B9446D48", "D c #91A1BC246CB9", "F c #8D9BBBE173D3", "G c #8FEABDC67827", "H c #92B3BDC6756A", "J c #937BBF487A57", "K c #97D8C1DE7EE4", "L c #9B0AC26D7BD8", "P c #A077C4C57E99", "I c #5C2E9139870B", "U c #7F20ABFA8573", "Y c #7B4BA7A6928B", "T c #7DCBA88499D8", "R c #5D078DF2A7D3", "E c #5EE89017AC9B", "W c #671095FBAE9C", "Q c #66299270B8CD", "! c #76CFA15AB284", "~ c #7ACFA295BE8D", "^ c #657A8EA1DC10", "/ c #6F3396EAD2A6", "( c #662790A7D8FF", ") c #6BC494C4DB96", "_ c #6ED798BBDC7C", "` c #703097FDDBA3", "' c #73F49C17DDCA", "] c #782E9EEADED5", "[ c #76A6A0A7DE87", "{ c #7BC3A262DFCB", "} c #7DADA59BE18C", "| c #7F5BA897E33A", " . c #82C9A9C2B69C", ".. c #86E3AC8EB9D8", "X. c #8987AF01BB08", "o. c #8C34B112BC44", "O. c #9D52C43F82C2", "+. c #A0B6C5DA878C", "@. c #A2C5C7D18921", "#. c #A5B0C8E48C19", "$. c #AB13CC0591FB", "%. c #B0E5CF5A9817", "&. c #89BEAE3BC362", "*. c #8E6EB246C76B", "=. c #8FE5B100DB31", "-. c #93F6B4F3DCB8", ";. c #8321A631E30A", ":. c #84D3AC17E438", ">. c #8B7EADB6E468", ",. c #90C3AF58E6AA", "<. c #91C3B00EE878", "1. c #87EDB177E5B7", "2. c #8C6FB31CE683", "3. c #9486B54FE6F5", "4. c #98AAB7A1E78F", "5. c #99FBB912E806", "6. c #95F4B4A9E9E2", "7. c #987DB728E9A2", "8. c #97F5B8E4E899", "9. c #9CECBC48E977", "0. c #A106BF69EAE4", "q. c #9FDAC0BAEAE9", "w. c #A3ADC22CEBBC", "e. c None", /* pixels */ "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.2.2.2.2.2.2.2.1.1.1.:.:.:.:.:.:.:.:.;.| | } } } e.e.e.e.", "e.e.e.e.2.2.3.3.3.3.3.3.2.2.2.2.2.2.2.2.>.>.>.:.:.:.} } e.e.e.e.", "e.e.e.e.2.3.9.w.q.9.9.9.9.9.9.9.9.5.5.8.8.8.8.3.3.2.| { e.e.e.e.", "e.e.e.e.2.3.w.w.w.w.w.w.w.w.w.w.0.0.9.9.9.9.9.9.9.3.| [ e.e.e.e.", "e.e.e.e.1.3.9.w.w.w.w.w.w.w.0.0.9.9.9.9.9.9.5.5.5.2.} ' e.e.e.e.", "e.e.e.e.1.2.9.w.w.w.w.0.0.0.0.9.9.9.9.9.5.5.5.4.4.>.{ ' e.e.e.e.", "e.e.e.e.:.2.9.w.w.w.0.0.9.9.9.9.9.9.5.5.5.4.4.4.3.>.{ ` e.e.e.e.", "e.e.e.e.:.2.9.w.w.0.0.9.9.9.9.9.5.5.5.4.7.7.6.6.3.>.] _ e.e.e.e.", "e.e.e.e.:.2.9.w.0.9.9.9.9.9.9.5.5.4.4.4.6.6.6.6.3.>.] ) e.e.e.e.", "e.e.e.e.:.2.5.0.9.9.9.9.9.5.5.5.4.4.4.-.*.X.X.&.=.:.' ) e.e.e.e.", "e.e.e.e.:.>.8.9.9.9.9.5.5.5.4.4.3.6.6.*.U b b V &.:.' ) e.e.e.e.", "e.e.e.e.;.:.8.9.9.5.5.5.7.7.7.6.6.6.6.X.M 8 8 c Y ~ / ( e.e.e.e.", "e.e.e.e.| :.3.9.5.5.4.4.7.7.6.6.6.6.6.X.M 0 g k d m Q ^ e.e.e.e.", "e.e.e.e.} :.3.5.5.4.4.-.*.o.X.X.......T x g C C 0 t I R e.e.e.e.", "e.e.e.e.} ;.3.5.4.7.6.*.U N b b b x x z j C L H v y e w e.e.e.e.", "e.e.e.e.} ;.3.4.3.6.6.X.N q h l l g g k C D O.O.S k 5 ; e.e.e.e.", "e.e.e.e.] } >.3.3.3.6.X.b h D P L L L L O.O.K K K S f 4 = @ e.e.", "e.e.e.e.' { >.3.3.3.6...b l L %.$.#.#.@.@.O.H F K J Z p < = e.e.", "e.e.e.e.' { >.3.3.3.<. .x g L $.O.J H H F S Z Z S F G Z p < # X ", "e.e.e.e.` { >.3.3.,.<. .x g L $.O.H H F F S Z Z A F G B i , + X ", "e.e.e.e._ ] >.3.,.>.>. .u a L $.#.+.O.O.O.J S A G F B p , + O e.", "e.e.e.e._ ' { ;.;.;.;.! u 7 C H F S S S F F F F F B s 2 & e.e.", "e.e.e.e.) ) ` ` ` _ _ W t 3 6 6 6 6 4 6 p n F F B s > * o e.e.e.", "e.e.e.e.) ) ( ( ( ^ ^ E r ; ; - - = % = < 9 B B p 1 * . e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.$ , p p : + o e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.O # , 1 & e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.X X + & e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.X X e.e.e.e.e.e.e.e." }; qosmic-1.6.0/icons/silk/shape_triangle.xpm000066400000000000000000000031221304321135200205710ustar00rootroot00000000000000/* XPM */ static char * shape_triangle_xpm[] = { "32 32 27 1", " c None", ". c #7DA5E1", "+ c #8CB3E6", "@ c #7FA8E3", "# c #76A0DE", "$ c #9DBCE9", "% c #94B4E5", "& c #99B9E8", "* c #739BDD", "= c #98B7E7", "- c #8CACE2", "; c #7DA1DF", "> c #7A9DDD", ", c #6E98DC", "' c #6B93DA", ") c #85ABE3", "! c #85A6E0", "~ c #90AFE4", "{ c #7097DB", "] c #6690D8", "^ c #648ED8", "/ c #84A5DF", "( c #638CD7", "_ c #5F88D5", ": c #688FD7", "< c #5A84D4", "[ c #688FD8", " ", " ", " ", " ", " . ", " .. ", " +@# ", " $%@# ", " &&+.* ", " &==-;* ", " ===%-;* ", " ==%%%->, ", " =%%%%%-*' ", " =%%%%%%)*' ", " %%%%%%%%!*' ", " %%%%%%~--!{] ", " %%%%%~----!{^ ", " %%%%~~-----/'( ", " %%%%--------/'( ", " %%%%---------;'( ", " %%~--------!!!>]_ ", " %%~--------!!!/>:_ ", " %~--------!!!///>:< ", " %~-------!!!!!///>^< ", " %~-------!!!!!////>(< ", " ;!!!!//;;;;>>>>>>>>'(< ", " ,{{{,,'''''][:^^(((((<< ", " '']]]^^((((___<<<<<<<<<< ", " ", " ", " ", " "}; qosmic-1.6.0/icons/silk/shape_triangle_add.xpm000066400000000000000000000100421304321135200214000ustar00rootroot00000000000000/* XPM */ static char * shape_triangle_add_xpm[] = { "32 32 118 2", " c None", ". c #7DA5E1", "+ c #8CB3E6", "@ c #7FA8E3", "# c #76A0DE", "$ c #9DBCE9", "% c #94B4E6", "& c #99B9E8", "* c #739BDD", "= c #98B7E7", "- c #8DADE4", "; c #7CA2DF", "> c #7097DD", ", c #789EDE", "' c #6E98DC", ") c #84ACE4", "! c #6B94DA", "~ c #83A6E2", "{ c #90AFE5", "] c #6690D8", "^ c #638DD9", "/ c #8BABD9", "( c #89AACF", "_ c #84A6C3", ": c #83A5BE", "< c #7A9EBA", "[ c #6C92B4", "} c #6089B0", "| c #7FA1A4", "1 c #789C8A", "2 c #759B7A", "3 c #6F9573", "4 c #688F6E", "5 c #5F886C", "6 c #588363", "7 c #507D49", "8 c #80A49F", "9 c #7EA283", "0 c #7FA371", "a c #7FA366", "b c #789E5F", "c c #6D9652", "d c #618E47", "e c #528333", "f c #8AAAD7", "g c #7EA29C", "h c #7EA57C", "i c #87AE72", "j c #9BBE7F", "k c #A9CA8C", "l c #B2CF99", "m c #8FB770", "n c #76A553", "o c #5F9438", "p c #4E812D", "q c #41771F", "r c #85A6CC", "s c #789B9C", "t c #85AD6E", "u c #94BB73", "v c #A9CE86", "w c #C0DDA4", "x c #D6EAC4", "y c #CCE3B7", "z c #A3CA83", "A c #83B459", "B c #6CA142", "C c #5B9033", "D c #447921", "E c #356917", "F c #6C927B", "G c #739B62", "H c #95BA78", "I c #AED38C", "J c #C4E0AA", "K c #E8F4DD", "L c #DEECD1", "M c #87B85E", "N c #6FA048", "O c #4A7D29", "P c #346816", "Q c #638C66", "R c #9DC57A", "S c #BAD99C", "T c #C2DFA8", "U c #F4FAEF", "V c #ECF4E6", "W c #C0DAAA", "X c #80AD5C", "Y c #799DB6", "Z c #5B865D", "` c #679249", " . c #C7DFB0", ".. c #E3F0D7", "+. c #F5FAF1", "@. c #FBFDFA", "#. c #EEF5E8", "$. c #D8E9CA", "%. c #BCD9A3", "&. c #8DB46D", "*. c #80A3DF", "=. c #527F55", "-. c #5D8B3F", ";. c #5D87AB", ">. c #46764E", ",. c #9BC577", "'. c #618BD6", "). c #5F89DA", "!. c #527FA3", "~. c #3F7045", "{. c #6E9F46", "]. c #7FB254", "^. c #80B256", "/. c #3A6C2E", "(. c #588E2F", "_. c #6AA03F", ":. c #3F751C", "<. c #498121", " ", " ", " ", " ", " . ", " . . ", " + @ # ", " $ % @ # ", " & & + . * ", " & = = - ; * ", " = = = % - ; > ", " = = % % % - , ' ", " = % % % % % ) , ! ", " = % % % % % % ) * ! ", " % % % % % % % % ~ * ! ", " % % % % % % { { { ~ > ] ", " % % % % % { { - - - ~ > ^ ", " % % % % { - / ( _ _ : < [ } ", " % % % % { - / : | 1 2 3 4 5 6 7 ", " % % % % - - / _ 8 9 0 a a b c d e ", " % % { - - - f : g h i j k l k m n o p q ", " % % { - - - - r s 2 t u v w x y z A B C D E ", " % { - - - - - - _ F G H v I J K L v M A N O P ", " % { - - - - - - - < Q c R S T x U V W z R X p P ", " % { - - - - - - - - Y Z ` j ...+.@.@.#.$.%.&.e P ", " ; ~ ~ ~ ~ *.*.; ; . . [ =.-.u %.$.V @.@.#.$.%.&.e P ", " ' > > > ' ! ! ! ! ! ! ! ;.>.e X ,.z %.V V W z R X p P ", " ! ! ] ] ] ^ ^ ^ '.'.'.'.).!.~.O {.].A z $.$.z A ^.N O P ", " /.D (._.^.,.%.%.,.^.B (.D E ", " :.<.(.{.X &.&.X {.(.<.:. ", " :.D O p e e p O D :. ", " E P P P P P P E "}; qosmic-1.6.0/icons/silk/shape_triangle_delete.xpm000066400000000000000000000107251304321135200221220ustar00rootroot00000000000000/* XPM */ static char * shape_triangle_delete_xpm[] = { "32 32 145 2", " c None", ". c #7DA5E1", "+ c #8CB2E6", "@ c #7FA8E3", "# c #76A0DE", "$ c #9DBCE9", "% c #94B4E6", "& c #99B9E8", "* c #739BDD", "= c #98B7E7", "- c #8CADE4", "; c #7CA2DF", "> c #7097DB", ", c #789EDE", "' c #6E98DC", ") c #85ABE4", "! c #6B94DA", "~ c #82A6E2", "{ c #8DB0E8", "] c #6691DB", "^ c #8CAFE8", "/ c #90AFE3", "( c #92A7D5", "_ c #95A1C7", ": c #969ABA", "< c #9795B1", "[ c #9591AD", "} c #8E8BAA", "| c #7E81AA", "1 c #787CA5", "2 c #9B97B1", "3 c #A2848A", "4 c #AB7364", "5 c #AF6549", "6 c #AD5A3A", "7 c #A95739", "8 c #A05A43", "9 c #9E5840", "0 c #AA4E22", "a c #8FACDF", "b c #9A9BB8", "c c #A98788", "d c #B77962", "e c #C47148", "f c #CC6B37", "g c #CD6630", "h c #CB622A", "i c #C5632D", "j c #C35F28", "k c #C2581A", "l c #BB7A5D", "m c #CE7E52", "n c #E19467", "o c #EDA67D", "p c #EFAF89", "q c #EDAC83", "r c #E89B69", "s c #DF874F", "t c #D07034", "u c #C66021", "v c #929EC6", "w c #B57761", "x c #E38D58", "y c #F3A372", "z c #FEB484", "A c #FFBD8E", "B c #FFBA85", "C c #FEA96C", "D c #F09552", "E c #DD7E3C", "F c #CF6B2C", "G c #C55412", "H c #B84100", "I c #9296B8", "J c #A56E60", "K c #BF6C44", "L c #DF9267", "M c #FB9D63", "N c #FF9650", "O c #FF903E", "P c #FD8C33", "Q c #EB863A", "R c #DA7631", "S c #A96045", "T c #C76532", "U c #EBA276", "V c #FDBC94", "W c #FE9E53", "X c #FF9C4D", "Y c #FFA255", "Z c #F39140", "` c #E1772A", " . c #938EAA", ".. c #FFD4B9", "+. c #FFE5D2", "@. c #FEE3CB", "#. c #FCCEA5", "$. c #F49C4C", "%. c #E27016", "&. c #C85008", "*. c #B94203", "=. c #80A3DF", "-. c #8A87A8", ";. c #FFCEAC", ">. c #FFDDC3", ",. c #F9C99B", "'. c #F1943E", "). c #E0690A", "!. c #C44D03", "~. c #E8925D", "{. c #FCAA71", "]. c #FFA45D", "^. c #FA9A43", "/. c #F59A42", "(. c #F08F33", "_. c #EC7915", ":. c #DC6302", "<. c #648ED8", "[. c #618BD6", "}. c #5D89D9", "|. c #7377A2", "1. c #DE8045", "2. c #EF8B45", "3. c #F78025", "4. c #F9790E", "5. c #F57402", "6. c #ED7200", "7. c #E66B00", "8. c #D15B02", "9. c #B0572D", "0. c #C45E23", "a. c #DA732E", "b. c #E77722", "c. c #EF7806", "d. c #CE5802", "e. c #C55004", "f. c #BC4903", "g. c #CD6320", "h. c #D7691C", "i. c #DD6C15", "j. c #DE6C09", "k. c #DD6803", "l. c #D86001", "m. c #C5520B", "n. c #BF4F12", " ", " ", " ", " ", " . ", " . . ", " + @ # ", " $ % @ # ", " & & + . * ", " & = = - ; * ", " = = = % - ; > ", " = = % % % - , ' ", " = % % % % % ) , ! ", " = % % % % % % ) * ! ", " % % % % % % % % ~ * ! ", " % % % % % % { { { ~ > ] ", " % % % % % % { { { ^ ~ ' ] ", " % % % % % / ( _ : < [ } | 1 ", " % % % % + ^ ( 2 3 4 5 6 7 8 9 0 ", " % % % % - a ( b c d e f g h i j k ", " % % / - - - ( 2 c l m n o p q r s t u ", " % % / - - - - v 3 w m x y z A B C D E F G H ", " % / - - - - - - I J K L y M N O P P P Q R G H ", " % / - - - - - - ) [ S T U V z C W X Y W Z ` G H ", " % / - - - - - - ) ) .6 h o ..+.+.@.@.+.#.$.%.&.*.", " ; ~ ~ ~ ~ =.=.; ; . . -.7 h U ;.>.@.@.@.@.,.'.).!.*.", " ! > > > ' ! ! ! ! ! ] ] 1 9 j ~.{.].X ^.^./.(._.:.!.*.", " ! ! ] ] ] <.<.<.[.[.[.}.}.|.9 j 1.2.3.4.5.5.6.7.:.8.!.*.", " 9.0.F a.b._.c.6.7.:.d.e.f.*.", " 0.g.h.i.j.k.l.d.!.f. ", " k m.&.e.!.!.!.f. ", " n.*.*.*.*.*.*.*. "}; qosmic-1.6.0/icons/silk/shape_triangle_go.xpm000066400000000000000000000100411304321135200212540ustar00rootroot00000000000000/* XPM */ static char * shape_triangle_go_xpm[] = { "32 32 118 2", " c None", ". c #7DA5E1", "+ c #8CB3E6", "@ c #7FA8E3", "# c #7BA2DF", "$ c #9CBCE9", "% c #94B5E6", "& c #76A0DE", "* c #99B9E8", "= c #739CDD", "- c #98B7E7", "; c #8BADE4", "> c #7097DB", ", c #98B7E9", "' c #95B4E9", ") c #789EDE", "! c #6E98DC", "~ c #6B94DB", "{ c #93B4DC", "] c #8EB2C7", "^ c #89AFBB", "/ c #89AEC3", "( c #8FB1DB", "_ c #84ACE4", ": c #7FAB85", "< c #73A55D", "[ c #77A67C", "} c #72A561", "| c #69A333", "1 c #70A553", "2 c #7BA792", "3 c #7AA2BE", "4 c #6F96D2", "5 c #6690D8", "6 c #68A438", "7 c #74AA45", "8 c #74AB4C", "9 c #69A14E", "0 c #649974", "a c #6692B8", "b c #658EDC", "c c #86ACB9", "d c #7DA899", "e c #6DA25A", "f c #82B35C", "g c #5A974C", "h c #5C9187", "i c #5D8DA7", "j c #77A861", "k c #6DA255", "l c #72A84E", "m c #9BC27B", "n c #92BD75", "o c #7AAE52", "p c #629F40", "q c #529342", "r c #4B8E43", "s c #70A638", "t c #78AB43", "u c #7AAD49", "v c #91BC6C", "w c #9DC482", "x c #8AB96D", "y c #589B2C", "z c #4A9319", "A c #A0C47E", "B c #97C17E", "C c #6CA848", "D c #54992C", "E c #3D8C11", "F c #328503", "G c #B0CF98", "H c #ABCC91", "I c #A5C88C", "J c #A2C789", "K c #8DBB73", "L c #93BF7A", "M c #83B565", "N c #63A345", "O c #4A9423", "P c #91B0E8", "Q c #82A9B6", "R c #8FBD78", "S c #31860C", "T c #227E00", "U c #90AFE6", "V c #86B76B", "W c #7EB364", "X c #5FA241", "Y c #449122", "Z c #2C830C", "` c #649D53", " . c #6FA740", ".. c #A0C587", "+. c #268002", "@. c #83A6E3", "#. c #76A1B2", "$. c #65A235", "%. c #61A348", "&. c #48942C", "*. c #2C8310", "=. c #1B7A00", "-. c #6795AE", ";. c #569A24", ">. c #5B9D33", ",. c #79AF5B", "'. c #418F2C", "). c #2E841A", "!. c #247F0C", "~. c #5E90AC", "{. c #55954E", "]. c #438E15", "^. c #398A0C", "/. c #60A13D", "(. c #45922A", "_. c #1F7B0F", ":. c #35880B", "<. c #408F22", " ", " ", " ", " ", " . ", " . . ", " + @ # ", " $ % @ & ", " * * + . = ", " * - - ; # = ", " - - - % ; # > ", " , , ' ' % ; ) ! ", " - ' ' ' ' % ; ) ~ ", " - { ] ^ ^ / ( _ = ~ ", " ' ' ] : < < [ / _ = ~ ", " ' ' ' ^ } | | 1 2 3 4 5 ", " ' ' ' ' ^ } 6 7 8 9 0 a b ", " ^ ^ c c c d e 7 f f 6 g h i ", " j < < < e e k l f m n o p q r ", " j s t u u 7 7 8 f v w w x 8 y z ", " ^ < t v A m m m m w w B B B x C D E F ", " ' c < u m G H I I J J w n K B L M N O E ", " % P Q e 7 m H w L n n K x M M x K R M N O S T ", " % U P Q e 7 m H w n n K K x M M V K R W X Y Z T ", " % U ; ; Q ` .m H I ..w w w L x V R K W N Y Z +. ", " # @.@.@.@.#.` $.f n K x x x K K K K K W %.&.*.=. ", " ~ > > > ! ! -.g ;.>.>.>.>.D >.N ,.K K W %.'.).!. ", " ~ ~ 5 5 5 b b ~.{.z z ].].E ^.E O /.W W N (.)._. ", " :.Y N N <.Z !. ", " +.S Y (.*.=. ", " T T Z *. ", " T T =.=. "}; qosmic-1.6.0/icons/silk/star.xpm000066400000000000000000000051121304321135200165560ustar00rootroot00000000000000/* XPM */ static char *star[] = { /* columns rows colors chars-per-pixel */ "32 32 66 1", " c #CDCF83B70D58", ". c #CF4A865D1039", "X c #CFCF88F910F4", "o c #D29B8D5A15E6", "O c #D2CB903B15ED", "+ c #D605945D1BD5", "@ c #D6D59A571C2B", "# c #D85F9B121E84", "$ c #D8BAA0371F9C", "% c #EA3FB6371D71", "& c #EADAB8AD1F0B", "* c #DA8E9D17241B", "= c #DC0AA5772539", "- c #DCE7A99326A6", "; c #DE69A5832AF7", ": c #DF10AC042ACD", "> c #E023B0BB2B9D", ", c #E0F5ADE82EC8", "< c #EA54B5D82381", "1 c #EC45BCBB22FF", "2 c #E10BB27A2D35", "3 c #EA3AB63F2BC3", "4 c #EC42BC122A68", "5 c #E1C3A789319D", "6 c #E34BAD143441", "7 c #E64DAFEE39EB", "8 c #E38BB33F33DB", "9 c #EA23B65E32A5", "0 c #E557BBFE35DD", "q c #EB3DB9FB3429", "w c #E6DAB5583AA4", "e c #E976B5F73D2D", "r c #E6C3BBD13A4C", "t c #EA76BB1D3DCC", "y c #EE1DC1F12613", "u c #EF22C5952A3D", "i c #F055C95B2CCA", "p c #F154CC3B2DCD", "a c #E661C0B535D1", "s c #EED5C5723328", "d c #F040CA8730D2", "f c #E7B9C1F73AF6", "g c #EADAC65B3BEB", "h c #EA69C9C13D4F", "j c #F149CC9733AB", "k c #F19CCE103B40", "l c #F347D12735B2", "z c #F33FD1AB3C01", "x c #EAC2BD73421D", "c c #EC02C4794367", "v c #EC47CC7D43C5", "b c #ED85C5A44990", "n c #EEADCCA24C13", "m c #F1AACDB3451E", "M c #F132CD334B51", "N c #ED74D0C64622", "B c #EF31D25E4C53", "V c #F416D4F5448B", "C c #F32BD38C4C6D", "Z c #F59DDA9A4EB7", "A c #F170CE45510E", "S c #F2D3D56F53C6", "D c #F2E0D97A554F", "F c #F3CBD79D5A09", "G c #F4F5DBEC5B31", "H c None", /* pixels */ "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH", "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH", "HHHHHHHHHHHHHHhhggHHHHHHHHHHHHHH", "HHHHHHHHHHHHHHhhhhHHHHHHHHHHHHHH", "HHHHHHHHHHHHHHvvvvgHHHHHHHHHHHHH", "HHHHHHHHHHHHHvnBBngHHHHHHHHHHHHH", "HHHHHHHHHHHHgvBSSng0HHHHHHHHHHHH", "HHHHHHHHHHHHhvSFFSc0HHHHHHHHHHHH", "HHHHHHHHHHHhvnSGFSvf0HHHHHHHHHHH", "HHHHHHHHHHhvnSDFSCncr0HHHHHHHHHH", "HHHHHgggfgvnSDSCmmMncr822>:HHHHH", "HHHNvvvvvvBSDSVkjkMnbxr08888,:HH", "hvNBDDDDDFFFSVkdisgcbbbxxtww8,-=", "hvNBDGGGGGDSVkjuuuusccccxxtw8:-=", "HHhvBDGGZVVzjjiuyy14444qxxe8:-HH", "HHHhvBFGZVlppiuuy111&%<9tx8,-=HH", "HHHHgvBSDZzppiuyy11&%0bnnbbxtw88weeee6#oHHHHHH", "HHHHHH:0bncr8,:::;=;;675+XHHHHHH", "HHHHHH:8xcr8-==HHH@#*;;*o HHHHHH", "HHHHHH::28::HHHHHHHHH++o. HHHHHH", "HHHHHH:---HHHHHHHHHHHH HHHHHH", "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH", "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH" }; qosmic-1.6.0/icons/silk/stop.xpm000066400000000000000000000114611304321135200165760ustar00rootroot00000000000000/* XPM */ static char *stop[] = { /* columns rows colors chars-per-pixel */ "32 32 120 2", " c #D4F23B8632A8", ". c #D72D44AE3C82", "X c #D9A047EE3EE7", "o c #FD0444C7273F", "O c #FE554AD72D54", "+ c #FFC84F813107", "@ c #FF95525E347B", "# c #FEBB56533953", "$ c #FFCE59DC3C79", "% c #D83D4714403A", "& c #D8214820406B", "* c #D9B84B5E437F", "= c #DC9B50F74708", "- c #DBAA52F94A17", "; c #DFE158924E0C", ": c #DB6A57AD4FF5", "> c #DD7D5B67536C", ", c #E08D5A2A4FB0", "< c #FF505DD24115", "1 c #E16A5CC75310", "2 c #DEDD64735D43", "3 c #FFFD62A044F1", "4 c #FE7466494AF8", "5 c #FFDA6ADF4CCF", "6 c #E265606C56CC", "7 c #E2A2636259DA", "8 c #E384684C5ED2", "9 c #FF806DD25272", "0 c #FFFF73305424", "q c #FFF276C05974", "w c #FFFE7B695C82", "e c #DFDD696A62BF", "r c #E51F6CE762FB", "t c #E73970CA66E2", "y c #E8C372EF674F", "u c #E58F74E76C24", "i c #EA537511695A", "p c #E83579386F8F", "a c #EEBD7B1F6EA0", "s c #F664741B60DC", "d c #FECC7DE76214", "f c #F0C27D046E5F", "g c #FA847ECC6B2E", "h c #E62D7B3872FD", "j c #EC297D147138", "k c #E4937FE1793C", "l c #F1867F02709F", "z c #FFFF83916456", "x c #FF2285246AF3", "c c #FFFE8C2C6C57", "v c #ED4F810F760A", "b c #E5C683F67D5E", "n c #EA0786267D2F", "m c #EB4889457FDC", "M c #F4AE833D741E", "N c #FE6D859770EC", "B c #FFE18C867418", "V c #F56586B7788B", "C c #F6928A9C7C24", "Z c #FD368D6D7B60", "A c #FFFF9464745C", "S c #FFFF9845768D", "D c #FF1D94707C9B", "F c #FFFA9C777BBC", "G c #FFFFA1887F3C", "H c #E5CD8741823C", "J c #E7708A3B846D", "K c #ECBF8CC08284", "L c #E6CE8E1088C2", "P c #F7D48F6080C2", "I c #EBEF90A38683", "U c #E79F91BA8C1E", "Y c #EAC694818D30", "T c #F6A793AD8556", "R c #FFFF970E8205", "E c #FF1D9D7F8613", "W c #F17D95BE89FB", "Q c #F59D9B7E8E49", "! c #FAAD9CA48B97", "~ c #EA1097AC923C", "^ c #EC019A76939E", "/ c #EAE99E9299B7", "( c #F42C9E4591BC", ") c #FFFFA521836E", "_ c #FFFFAA648746", "` c #FF0FA2E28BBA", "' c #FFFFAD388BC4", "] c #FFF8B0F18E70", "[ c #EE4DA10797CF", "{ c #ED88A3E29D44", "} c #EFB3A84F9FDC", "| c #FB10A5179442", " . c #FFE0AE5E943B", ".. c #F322A75B9C52", "X. c #F670AA259D49", "o. c #FC6BAD579A71", "O. c #FFF6B3DF945E", "+. c #FFFFB87696A1", "@. c #FDEBB3109E36", "#. c #FFDABBC79D07", "$. c #ED68A6EBA10B", "%. c #EF3BAB4BA3C6", "&. c #F1ADAE8AA552", "*. c #F533B2E8A7BB", "=. c #FA1DB432A48B", "-. c #FF29BAE1A2D1", ";. c #F227B3E4AAE9", ":. c #FA3FB817A891", ">. c #F60FBC16B015", ",. c #FA91BD2CACA2", "<. c #F634BE45B22A", "1. c #FFB0C28BA504", "2. c #FF71C58AADAB", "3. c #F71CC306B6A9", "4. c #FAB3C467B41B", "5. c #FEDCCB14B41E", "6. c #F79FC6A3BA91", "7. c #FB36CB24BA6B", "8. c #FEBAD0F9BB09", "9. c None", /* pixels */ "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.{ { { { { { / / / ^ ~ Y 9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.%.%.;.;.;.&.&.&.&.%.%.} { ^ 9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.%.;.3.7.7.7.7.4.4.4.4.4.4.:.{ ~ 9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.%.;.3.7.8.5.5.5.5.2.2.2.2.2.,.&.[ U 9.9.9.9.9.9.9.", "9.9.9.9.9.9.$.;.6.7.5.1.#.+.+.O.O.O.' .O.-.,.*.^ J 9.9.9.9.9.9.", "9.9.9.9.9.$.;.<.7.5.1.+.] _ _ ) ) G F F ) .-.:...^ J 9.9.9.9.9.", "9.9.9.9.$.;.3.7.2.1.O.' _ _ ) ) G F F S S F ` o.=.X.Y b 9.9.9.9.", "9.9.9.{ *.>.7.5.-.O._ ) ) ) ) F F S S A c A S E o.X.( K h 9.9.9.", "9.9.~ } <.4.2.#.] _ ) ) G F F F S A A B c c x c F ` | Q h e 9.9.", "9.9.~ } 4.5.#.' ) G G F F F S A A B c c x z w z x D | ( h e 9.9.", "9.9.~ } 4.2.O.) G F F F S A A c c c x z z d w q q x ` Q h e 9.9.", "9.9.Y { ,.1._ F F F S A A c c c x z z d w w q 0 5 w E ! p 2 9.9.", "9.9.U [ ,.-.) S S A A c c c x z z d w w q 0 0 5 5 q R T u 2 9.9.", "9.9.L ^ :.-.) A A c c c x z z d w w q q 0 9 5 4 3 q D T t > 9.9.", "9.9.J ^ =.@.F c c c x z z d w w q q 0 0 5 5 4 3 < 9 Z P r > 9.9.", "9.9.H Y =.@.S x z z z d w w q q 0 0 5 5 4 3 3 < $ 5 B C r : 9.9.", "9.9.b Y @. .A z z z w w q 0 0 9 5 5 4 4 3 < $ # @ 4 B C 8 - 9.9.", "9.9.k I o. .A w w q q 0 0 9 5 5 4 3 3 3 < $ # @ @ 4 B C 7 = 9.9.", "9.9.h K X.o.D z q 0 0 0 5 5 4 3 3 3 < $ $ # + @ $ 9 Z V 6 & 9.9.", "9.9.u n ( | E B w 0 5 5 4 3 3 3 < $ $ # @ @ + $ 9 d M a 1 . 9.9.", "9.9.9.h m W | E x q 4 3 3 3 < $ $ # @ @ O O # 9 x V i 7 * 9.9.9.", "9.9.9.9.h n Q ! D z 9 < $ $ # @ @ + O O O # 5 d V v 8 - 9.9.9.9.", "9.9.9.9.9.u v K ! D d 4 # @ @ + O O o O @ 4 g M i 7 - 9.9.9.9.9.", "9.9.9.9.9.9.r h T T N w 5 3 3 < < $ # < 4 s M j 6 * 9.9.9.9.9.9.", "9.9.9.9.9.9.9.8 p v C Z B N x x g g g g M f r 6 * 9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.7 t v V V V M M M l l j j y 1 * 9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.: 1 6 6 6 1 1 1 1 , ; - = X 9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.% * * * * & X . . . 9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9." }; qosmic-1.6.0/icons/silk/table.xpm000066400000000000000000000104131304321135200166740ustar00rootroot00000000000000/* XPM */ static char *table[] = { /* columns rows colors chars-per-pixel */ "32 32 95 2", " c #45227A09BD7D", ". c #48F87C1BBE2C", "X c #4BB67F8CC10B", "o c #4E4381AEC275", "O c #532584F8C53B", "+ c #56A588DEC832", "@ c #5A318924C5D2", "# c #5B5F8C72CAEE", "$ c #626E922BCF0A", "% c #6CCE9641CBB5", "& c #72859B25CEB5", "* c #66A19510D136", "= c #696696CDD279", "- c #6D3B9A54D49D", "; c #73449E23D4C7", ": c #797B9FC9D1CE", "> c #7582A157D842", ", c #7C0EA209D2E9", "< c #77D3A2AAD9CB", "1 c #7B74A568DC3B", "2 c #7FFEA996DF42", "3 c #96ADCBA89227", "4 c #9A86CE38954C", "5 c #9D91CFA19955", "6 c #9EF8D0AE99D3", "7 c #A2BCD2E59CEE", "8 c #A6AFD512A117", "9 c #AAE4D713A4AC", "0 c #ADC1D8D4A650", "q c #AF47D973A89C", "w c #B0E7D857ADA2", "e c #B428DBE6AD22", "r c #B8D6DF32B041", "t c #8191A781D742", "y c #8439AA26DB52", "u c #8AAEAE3EDBF9", "i c #8E87B16ADF27", "p c #92B9B4AEE04B", "a c #A04CBACDDD80", "s c #8433AC8FE168", "d c #883BAF4BE328", "f c #8CA5B2C1E574", "g c #929EB5C2E456", "h c #9783B89DE264", "j c #9C2CBBDCE5C6", "k c #93CFB810E8D4", "l c #9687BA26EA6A", "z c #9C44BDF3EC5F", "x c #A03ABEFDE796", "c c #A176BFC6E985", "v c #9FA5C06CEEC4", "b c #A49EC257EB09", "n c #AA96C679EC17", "m c #AEA4C982EDAC", "M c #B696CACFE560", "N c #B9CFCD22E699", "B c #B44DCCE2EC38", "V c #B969CFAFEC43", "C c #BC8CD231EDFE", "Z c #A9BFC6BDF0BA", "A c #B407CD69F1DF", "S c #BC3DD1FFF0A9", "D c #C842E538C3D0", "F c #CA46E6BBC4AC", "G c #D828EAD8D9DA", "H c #DBBFECDBDD6B", "J c #E055F0D4DCDE", "K c #E25CF1FDDF0F", "L c #C2EDD629EE37", "P c #C6E5D922EF9B", "I c #CB30DB60EF68", "U c #C7E5D923F09F", "Y c #CC30DC51F150", "T c #D258DFD8F180", "R c #DFA6EED7E110", "E c #D5C5E261F313", "W c #DB8FE702F645", "Q c #DEBAE960F73B", "! c #DD17E7A0F8F5", "~ c #DF46E960F9AD", "^ c #E19CEFD9E2F2", "/ c #E5F6F3A6E304", "( c #E9C1F5FBE5B0", ") c #EA63F492EAE5", "_ c #E3B2EBEAF680", "` c #E991EF69F768", "' c #E2E8EBFDF9D6", "] c #E98BF03DF92B", "[ c #ED7BF340FB65", "{ c #F36CF85DF5D6", "} c #F4ACF907F755", "| c #F1BFF606FB81", " . c #F63AF8E7FD6A", ".. c #FB8DFC76FDEF", "X. c None", /* pixels */ "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.b z z z z z l l k k k f f f f d d s s 2 2 1 1 1 1 X.X.X.", "X.X.X.Z A A A A A A A A m m m n n n b b b b c z j j j g y < X.X.", "X.X.v A E ' ' ' ' ' ~ ~ ~ ~ ~ ~ ! ! ! ! ! ! W W W W W C i ; X.X.", "X.X.z A ' { ) ^ ^ ^ ^ R R R H H H H H H H H G G G ^ { E g - X.X.", "X.X.z A ' ) D e e e e w q 0 9 9 8 8 7 7 6 5 5 4 3 w / E p - X.X.", "X.X.z A ~ ) F r e e e e e q 0 9 9 8 7 7 7 7 6 4 4 w ^ E i = X.X.", "X.X.z B Q } ) ( ( ( ( ( ( / / / / / / K K K K K J / { T u * X.X.", "X.X.l B Q .[ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ .T u $ X.X.", "X.X.l m Q [ Y C C C S S S C C S S S S S S S S S S Y [ T u $ X.X.", "X.X.k m Q _ V n B B n n B C C C C B n n B C C C C Y ] I y # X.X.", "X.X.k m Q _ V B W W V B W [ [ [ [ W V V W [ [ [ [ [ | I t # X.X.", "X.X.g n Q _ C V W Q V V W [ [ [ [ W C C W [ [ [ [ [ [ L , # X.X.", "X.X.f n W _ C m V C B B C L L L L C B B C L L L P I Q L , + X.X.", "X.X.f b W _ C m C C B B C L L L L C B B C L L L P I W N : O X.X.", "X.X.f b W _ C C Q Q C C W [ [ [ [ W C C W [ [ [ [ [ _ N ; O X.X.", "X.X.d b W _ C C Q Q C C Q [ [ [ | Q C C W [ [ [ [ [ _ N & O X.X.", "X.X.s b E _ L B L L V V L P P P P L B B C L L L L I E N & O X.X.", "X.X.s x E _ L V L L C V L P P P P L B B V C L L L P E N & O X.X.", "X.X.y j E _ L L _ _ P P _ [ [ [ [ _ L L E _ [ [ [ ] _ N , @ X.X.", "X.X.2 j E _ P P _ _ P P _ | | | | _ P L W ] [ [ [ [ _ N , @ X.X.", "X.X.1 j E _ P C P P C C P Y Y Y Y P C V L P P P P Y E N : @ X.X.", "X.X.1 h E _ I C P P C C P Y Y Y Y P V V L P P P P Y E N : @ X.X.", "X.X.< h E _ I P _ _ I P _ | [ | | Q C C Q [ [ [ [ [ _ N , @ X.X.", "X.X.> h E ] E E | | E E [ ........] U U ] ........| _ N , @ X.X.", "X.X.; p E [ ` ` [ [ _ _ ` ` ` ` ` _ E E _ _ _ _ _ _ _ N , @ X.X.", "X.X.; u V I I I P L L L C N N N M M M M M M M M M M N a % O X.X.", "X.X.; < u u u y y t , , , : : ; & & & & & & & & & & & % O . X.X.", "X.X.X.; - = * $ $ # # # + + O O o o o o o o o o o o o X X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.", "X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X." }; qosmic-1.6.0/icons/silk/text_columns.xpm000066400000000000000000000106371304321135200203410ustar00rootroot00000000000000/* XPM */ static char *text_columns[] = { /* columns rows colors chars-per-pixel */ "32 32 102 2", " c #02CD02CD02CD", ". c #03D003D003D0", "X c #05D405D405D4", "o c #07EF07EF07EF", "O c #09F009F009F0", "+ c #0BE50BE50BE5", "@ c #0D220D220D22", "# c #0DEB0DEB0DEB", "$ c #0F740F740F74", "% c #102910291029", "& c #124D124D124D", "* c #12D712D712D7", "= c #141E141E141E", "- c #14D014D014D0", "; c #175317531753", ": c #17EE17EE17EE", "> c #192E192E192E", ", c #19D719D719D7", "< c #1B711B711B71", "1 c #1C161C161C16", "2 c #1CB81CB81CB8", "3 c #1E571E571E57", "4 c #1EF21EF21EF2", "5 c #204320432043", "6 c #215F215F215F", "7 c #21E321E321E3", "8 c #23F123F123F1", "9 c #24F324F324F3", "0 c #266826682668", "q c #271D271D271D", "w c #27C127C127C1", "e c #295F295F295F", "r c #2A342A342A34", "t c #2C792C792C79", "y c #2D452D452D45", "u c #2E5B2E5B2E5B", "i c #2F6B2F6B2F6B", "p c #305730573057", "a c #322632263226", "s c #333733373337", "d c #340634063406", "f c #351F351F351F", "g c #362436243624", "h c #370537053705", "j c gray22", "k c #394F394F394F", "l c #3A603A603A60", "z c #3B513B513B51", "x c #3C533C533C53", "c c #3D563D563D56", "v c #3E033E033E03", "b c #3F7A3F7A3F7A", "n c #402740274027", "m c #412941294129", "M c #423242324232", "N c #436043604360", "B c #441644164416", "V c gray27", "C c #467F467F467F", "Z c #473547354735", "A c #485E485E485E", "S c #497649764976", "D c #4A444A444A44", "F c #4B574B574B57", "G c #4D294D294D29", "H c #4E124E124E12", "J c #4F4E4F4E4F4E", "K c #505050505050", "L c #511651165116", "P c #525B525B525B", "I c #537753775377", "U c #544054405440", "Y c #554255425542", "T c #567056705670", "R c #574857485748", "E c #586658665866", "W c #597D597D597D", "Q c #5B665B665B66", "! c #5C1B5C1B5C1B", "~ c #5D7C5D7C5D7C", "^ c #5E245E245E24", "/ c #5FC85FC85FC8", "( c #606360636063", ") c #610061006100", "_ c #62A762A762A7", "` c #634A634A634A", "' c #648E648E648E", "] c #652A652A652A", "[ c #67B167B167B1", "{ c #686568656865", "} c #696869686968", "| c #6A376A376A37", " . c #6B6D6B6D6B6D", ".. c #6C946C946C94", "X. c #6D876D876D87", "o. c #6E986E986E98", "O. c #6F906F906F90", "+. c #719071907190", "@. c #739673967396", "#. c #752275227522", "$. c #765B765B765B", "%. c None", /* pixels */ "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.$.$.#.@.+.O.X. .} { %.%.%.%.W E Y P J G S C N M %.%.%.%.", "%.%.%.%.$.$.#.@.+.O.X. .} { %.%.%.%.W E Y P K G D Z B M %.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.O.o...| [ ] _ / ~ ! %.%.%.%.F S C N n c l h d s %.%.%.%.", "%.%.%.%.O.o...| [ ] _ ( ~ ! %.%.%.%.F D Z B m v z j f s %.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.' ` ( ^ Q E Y P K J %.%.%.%.c z j f a i t e 0 9 %.%.%.%.", "%.%.%.%.' ` ) ^ ! W T I K J %.%.%.%.v x k g s p y e 0 9 %.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.E T I K G D Z B m n %.%.%.%.u t e 0 8 6 3 < > : %.%.%.%.", "%.%.%.%.E R U L H F A V M n %.%.%.%.u y r q 9 7 4 1 > : %.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.D A V M b x k g s a %.%.%.%.5 4 1 , ; - & $ @ + %.%.%.%.", "%.%.%.%.D S C N n c l h d a %.%.%.%.5 4 2 , ; - & % @ + %.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.x l h s p y r q 9 8 %.%.%.%.= * % # + O o X . %.%.%.%.", "%.%.%.%.x l h s p y r w 9 8 %.%.%.%.= * % # + O o X . %.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.", "%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%." }; qosmic-1.6.0/icons/silk/wand.xpm000066400000000000000000000122121304321135200165350ustar00rootroot00000000000000/* XPM */ static char *wand[] = { /* columns rows colors chars-per-pixel */ "32 32 136 2", " c #11D511E11203", ". c #1D071D241D79", "X c #39272ECE1036", "o c #380A317D1DA6", "O c #260E262E268E", "+ c #2DA22DC12E1C", "@ c #34EF34F93516", "# c #3DB33C203768", "$ c #3C8A3C8A3C8A", "% c #54F44ECA3C3C", "& c #42E042DF42DD", "* c #4C904CAA4CFB", "= c #53F7540F545A", "- c #548F557E5870", "; c #5B795BB25C65", ": c #644A5D8C47BF", "> c #60305EB559E0", ", c #6DB26320413E", "< c #675860BB4B46", "1 c #69EB629B4BAC", "2 c #6475626E5C1F", "3 c #5A4D5BD36086", "4 c #639E639D639B", "5 c #672168B06DAD", "6 c gray42", "7 c #6D946E5B70D6", "8 c #7250724F724C", "9 c #836B696A1AC7", "0 c #851973663AE2", "q c #8CB8793F3DE2", "w c #8A9D791F40AB", "e c #805E77EC5D80", "r c #865D7E1363C0", "t c #ACFD82B40600", "y c #9EDD8538324B", "u c #A115867D32F0", "i c #CEEDA0B916D2", "p c #F248B44C0126", "a c #F1CDBA590241", "s c #FD81BC550000", "d c #F289B69709E0", "f c #F426BA710E8D", "g c #EB99B4DA1385", "h c #F3B1BCB01321", "j c #F45BBF8A19E7", "k c #C6A89F852237", "l c #CB88A3AA2407", "z c #D731B0D63B50", "x c #E9BEBCBB2D8F", "c c #F3ADC07016F6", "v c #F4C8C0E11D0A", "b c #F5B3C20024C2", "n c #F5E6C4452B98", "m c #F5BBC6123364", "M c #F8C9C811318C", "N c #F6DBC7CA395B", "B c #F71CC9543AF6", "V c #B64E9DF4545C", "C c #9C0594A97E74", "Z c #BA83AA2A79E8", "A c #C55EA8D34FB6", "S c #D1E7B0104882", "D c #D45EB2DC46F2", "F c #CC1CAEF5554E", "G c #CFFDB0EB5504", "H c #D799B75F568B", "J c #D9C3B970552F", "K c #D487B6265B03", "L c #D983BAAF5D28", "P c #C54CAD1B6416", "I c #CB34B2D56B72", "U c #DB45BCEB61BE", "Y c #D8C8BDB06DA4", "T c #C723B0CB70B0", "R c #D523BD767680", "E c #D1E2BBA07B7A", "W c #ECBBC3714291", "Q c #F1F8C78442B0", "! c #F78CCB7B439C", "~ c #F99FCDA344D0", "^ c #F7A5CD864A4A", "/ c #FB6BD09D489A", "( c #E87AC4E65777", ") c #F002C9EB5385", "_ c #EE39CA775AC8", "` c #F446CD17532C", "' c #F81DD15F54F7", "] c #F8ABD16756C1", "[ c #F748D18559B1", "{ c #F8F9D2D85B55", "} c #E033C06A6005", "| c #DEFEC2E46CB4", " . c #D997C1C07C28", ".. c #E0BAC18562BD", "X. c #EE59CCAC62BC", "o. c #EC99CDAA6AC4", "O. c #F009D1136D44", "+. c #F5B8D29B65ED", "@. c #F9D4D6BB66C0", "#. c #F94AD7E36AB4", "$. c #E43ACA0076F5", "%. c #ED58CFF770F7", "&. c #EF83D182723C", "*. c #FA30D9E37128", "=. c #7F057FA08177", "-. c #84E784E784E7", ";. c #8B8D8C708F24", ":. c #977E977E977E", ">. c #9BC09BC09BC0", ",. c #B253AAF094A2", "<. c #A015A144A4F7", "1. c #A6FBA79FA987", "2. c #AAEDAAEDAAED", "3. c #BDA4B87EA956", "4. c #B7B3B850BA1F", "5. c #BCE0BCE0BCE0", "6. c #C9C8BD4A98AA", "7. c #D785C0DD807E", "8. c #D16FC0FB908A", "9. c #D1A7CCFEBF3C", "0. c #D6F4D0A2BEA3", "q. c #E3A3D74CB2DD", "w. c #EB4CDEE1BADD", "e. c #C47AC47AC47A", "r. c #CA04CAA0CC70", "t. c #D7CDD299C358", "y. c #DEB4DF06DFF8", "u. c #E08FDF3CDB51", "i. c #EC73E629D42A", "p. c #EDE9E935DB61", "a. c #F314ECA1DA81", "s. c #E7A9E975EEAF", "d. c #F0D3EF7AEB87", "f. c #F5E3F720FABA", "g. c #FA8DFC7EFFFF", "h. c None", /* pixels */ "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.n n h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.n m m h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.m n n b b m ! ! h.h.j j h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.n m m N B ~ ] ] ! b j h h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.N ^ ` { @.*.#.' m v h h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.m ^ { +.X.o.%.o._ Q n j h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.n b n ! ] *.&.L G K U ..( Q n h a a h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.b b n ~ [ O.$.R E 7. .Y } ) B c a a h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.b M / ` J R q.i.a.w. .L X.^ v a h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.x D F P 8.p.g.g.i.E K o.] v p h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.l w r ,.t.d.f.s.0.T F o.{ j p h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.l y : 5 <.r.y.u.9.6.I H _ ! h p h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.l 0 < > 7 ;.1.4.3.Z P | _ m h d p p h.h.h.", "h.h.h.h.h.h.h.h.h.h.k u 1 - ; 4 8 =.;.C V S _ ^ j p p p h.h.h.h.", "h.h.h.h.h.h.h.h.h.h., 1 2 ; * & * - 3 e A W m b h d h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.= - ; = & @ @ # % q z M v h d d h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.* = ; ; * & & @ O o 9 i g h f d p p h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.; ; ; = & @ @ + . X t s p p h.h.h.p h.h.h.h.h.h.", "h.h.h.h.h.h.= 4 8 6 = & $ @ O . h.h.h.h.p p h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.4 6 8 4 & @ @ + . h.h.h.h.p h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.& = 8 8 - & & @ O . h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.= ; 6 4 & @ @ + . h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.$ * 6 6 = & $ @ O . h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.6 6 6 4 & @ @ + . h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "4 -.2.>.4 & & # O . h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "4 -.e.5.6 & $ @ . h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "4 -.5.e.:.4 @ . h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "4 8 :.>.-.4 @ h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "= ; ; = & @ h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.& $ @ . h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h." }; qosmic-1.6.0/qosmic.desktop000066400000000000000000000005441304321135200156740ustar00rootroot00000000000000[Desktop Entry] Version=1.0 Type=Application Name=Qosmic GenericName=Flam3 Fractal Editor GenericName[ru]=Редактор фракталов Flam3 Comment=A cosmic recursive flame fractal editor written in Qt Comment[ru]=РекурÑивный фрактальный редактор Exec=qosmic Icon=qosmicicon Terminal=false Categories=Qt;KDE;Graphics; qosmic-1.6.0/qosmic.pro000066400000000000000000000205151304321135200150230ustar00rootroot00000000000000################################################################################ #################### qmake project file for qosmic application ################# ################################################################################ ## Installation prefix on *nix/osx. Binaries are installed in $$PREFIX/bin PREFIX = /usr ################################################################################ ## The shared resources directory SHARED = $$PREFIX/share ################################################################################ ## Icons are installed in $$SHARED/pixmaps ICONSDIR = $$SHARED/pixmaps ################################################################################ ## Qosmic Lua scripts are installed in $$SHARED/scripts SCRIPTSDIR = $$SHARED/qosmic/scripts ################################################################################ ## Install the qosmic.desktop file here. DESKDIR = $$SHARED/applications ################################################################################ ## Uncomment to install the qosmic.desktop file, application icons, and scripts. CONFIG += install_icons install_desktop install_scripts ################################################################################ ## Add linked libs and paths for headers and palettes here using pkg-config. ## If your system doesn't support pkg-config then comment out the next line and ## set these values below. #CONFIG += link_pkgconfig link_pkgconfig { message("Config using pkg-config version "$$system(pkg-config --version)) PKGCONFIG = flam3 lua } else { message("Config not using pkg-config") ## Adjust these variables to set paths and libs without using pkg-config. ## Point to the flam3-3.1.1 source directory FLAM3_SRC_DIR = $$system(readlink -e ../flam3-3.1.1) INCLUDEPATH += $$FLAM3_SRC_DIR /usr/include/libxml2 LIBS += -L$$FLAM3_SRC_DIR/.libs LIBS += -L/usr/lib/libxml2 -lflam3 -lm -ljpeg -lxml2 -llua } ################################################################################ ## Build style flags. Adding debug enables more verbose logging. CONFIG += release warn_off #CONFIG += debug warn_on ################################################################################ ## Set cflags here if needed. #CONFIG(release, debug|release) { # QMAKE_CFLAGS="-march=native -O2 -pipe -Wl,-t" # QMAKE_CXXFLAGS=$$QMAKE_CFLAGS #} ################################################################################ ## qosmic app version VERSION = 1.6.0 ################################################################################ ## Check for correct package versions system(test $$QT_MAJOR_VERSION -lt 5 -o $$QT_MINOR_VERSION -lt 5) { error("Using Qt $$[QT_VERSION]. " \ "Qosmic $$VERSION requires at least version 5.5 of Qt to build.") } link_pkgconfig { ! system(pkg-config --atleast-version 3.1.1 flam3) { error("Qosmic $$VERSION requires at least version 3.1.1 of flam3 to build.") } } ################################################################################ DEFINES += VERSION='\'"$$VERSION"\'' DEFINES += SCRIPTSDIR='\'"$$SCRIPTSDIR"\'' CONFIG += qt thread QT += widgets RESOURCES = qosmic.qrc INCLUDEPATH += src ## packagers may define ROOT for install sandboxes #ROOT = /tmp ## add the qosmic program to the install set qosmic.files = qosmic qosmic.path = $$clean_path($$ROOT/$$PREFIX/bin) INSTALLS = qosmic ## add icons to the install set install_icons { icons.files = icons/qosmicicon.xpm icons.path = $$clean_path($$ROOT/$$ICONSDIR) INSTALLS += icons } ## add the qosmic.desktop file to the install set install_desktop { desktop.files = qosmic.desktop desktop.path = $$clean_path($$ROOT/$$DESKDIR) INSTALLS += desktop } ## add the scripts to the install set install_scripts { scripts.files = scripts/* scripts.path = $$clean_path($$ROOT/$$SCRIPTSDIR) INSTALLS += scripts } message(Generating Makefile for Qosmic $$VERSION) message(Qt version : $$[QT_VERSION]) ! link_pkgconfig { message(Include header paths : $$INCLUDEPATH) message(Include libraries : $$LIBS) } CONFIG(debug, debug|release) { ## enable more verbose logging message(Building debug version) DEFINES += LOGGING } FORMS += \ ui/mainwindow.ui \ ui/mainviewer.ui \ ui/paletteeditor.ui \ ui/camerasettingswidget.ui \ ui/colorsettingswidget.ui \ ui/imgsettingswidget.ui \ ui/mainpreviewwidget.ui \ ui/trianglecoordswidget.ui \ ui/triangledensitywidget.ui \ ui/variationswidget.ui \ ui/mutationwidget.ui \ ui/colorbalancewidget.ui \ ui/directoryviewwidget.ui \ ui/statuswidget.ui \ ui/scripteditwidget.ui \ ui/colordialog.ui \ ui/selectgenomewidget.ui \ ui/genomevectorlistmodelitemeditor.ui \ ui/selectgenomeconfigdialog.ui \ ui/mutationconfigdialog.ui \ ui/viewerpresetswidget.ui \ ui/selecttrianglewidget.ui \ ui/renderdialog.ui \ ui/renderprogressdialog.ui \ ui/adjustscenewidget.ui \ ui/editmodeselectorwidget.ui \ ui/chaoswidget.ui \ ui/sheeploopwidget.ui \ ui/scripteditconfigdialog.ui HEADERS += \ src/qosmic.h \ src/flam3util.h \ src/mainwindow.h \ src/xfedit.h \ src/basistriangle.h \ src/triangle.h \ src/nodeitem.h \ src/mainviewer.h \ src/renderthread.h \ src/colorselector.h \ src/genomecolorselector.h \ src/paletteeditor.h \ src/mutationwidget.h \ src/colorlabel.h \ src/doublevalueeditor.h \ src/intvalueeditor.h \ src/camerasettingswidget.h \ src/colorsettingswidget.h \ src/imgsettingswidget.h \ src/mainpreviewwidget.h \ src/trianglecoordswidget.h \ src/variationswidget.h \ src/logger.h \ src/colorbalancewidget.h \ src/gradientlistmodel.h \ src/varstablewidget.h \ src/directoryviewwidget.h \ src/flamfileiconprovider.h \ src/directorylistview.h \ src/snapslider.h \ src/statuswidget.h \ src/scripteditwidget.h \ src/wheelvalueeditor.h \ src/genomevector.h \ src/lua/lunar.h \ src/lua/frame.h \ src/lua/xform.h \ src/lua/genome.h \ src/lua/luathread.h \ src/colordialog.h \ src/selectgenomewidget.h \ src/viewerpresetsmodel.h \ src/viewerpresetswidget.h \ src/coordinatemark.h \ src/lua/luathreadadapter.h \ src/lua/highlighter.h \ src/lua/luaeditor.h \ src/lua/luatype.h \ src/selecttrianglewidget.h \ src/triangledensitywidget.h \ src/undoring.h \ src/triangleselection.h \ src/posttriangle.h \ src/qosmicwidget.h \ src/renderdialog.h \ src/renderprogressdialog.h \ src/adjustscenewidget.h \ src/gradientstopseditor.h \ src/editmodeselectorwidget.h \ src/genomevectorlistview.h \ src/chaoswidget.h \ src/transformablegraphicsitem.h \ src/transformablegraphicsguide.h \ src/sheeploopwidget.h \ src/flam3filestream.h \ src/checkersbrush.h SOURCES += \ src/qosmic.cpp \ src/mainwindow.cpp \ src/xfedit.cpp \ src/basistriangle.cpp \ src/triangle.cpp \ src/nodeitem.cpp \ src/flam3util.cpp \ src/mainviewer.cpp \ src/renderthread.cpp \ src/colorselector.cpp \ src/genomecolorselector.cpp \ src/paletteeditor.cpp \ src/logger.cpp \ src/mutationwidget.cpp \ src/colorlabel.cpp \ src/doublevalueeditor.cpp \ src/intvalueeditor.cpp \ src/camerasettingswidget.cpp \ src/colorsettingswidget.cpp \ src/imgsettingswidget.cpp \ src/mainpreviewwidget.cpp \ src/trianglecoordswidget.cpp \ src/variationswidget.cpp \ src/colorbalancewidget.cpp \ src/gradientlistmodel.cpp \ src/varstablewidget.cpp \ src/directoryviewwidget.cpp \ src/flamfileiconprovider.cpp \ src/directorylistview.cpp \ src/snapslider.cpp \ src/statuswidget.cpp \ src/scripteditwidget.cpp \ src/wheelvalueeditor.cpp \ src/lua/frame.cpp \ src/lua/genome.cpp \ src/lua/xform.cpp \ src/lua/luathread.cpp \ src/colordialog.cpp \ src/selectgenomewidget.cpp \ src/genomevector.cpp \ src/viewerpresetsmodel.cpp \ src/viewerpresetswidget.cpp \ src/coordinatemark.cpp \ src/lua/luathreadadapter.cpp \ src/lua/highlighter.cpp \ src/lua/luaeditor.cpp \ src/lua/luatype.cpp \ src/selecttrianglewidget.cpp \ src/triangledensitywidget.cpp \ src/undoring.cpp \ src/triangleselection.cpp \ src/posttriangle.cpp \ src/qosmicwidget.cpp \ src/renderdialog.cpp \ src/renderprogressdialog.cpp \ src/adjustscenewidget.cpp \ src/gradientstopseditor.cpp \ src/editmodeselectorwidget.cpp \ src/genomevectorlistview.cpp \ src/chaoswidget.cpp \ src/transformablegraphicsitem.cpp \ src/transformablegraphicsguide.cpp \ src/sheeploopwidget.cpp \ src/flam3filestream.cpp \ src/checkersbrush.cpp TRANSLATIONS = ts/qosmic_fr.ts \ ts/qosmic_cs.ts \ ts/qosmic_ru.ts MOC_DIR = .moc OBJECTS_DIR = .obj RCC_DIR = .res UI_DIR = .ui qosmic-1.6.0/qosmic.qrc000066400000000000000000000110321304321135200150020ustar00rootroot00000000000000 icons/editcopy.xpm icons/editcut.xpm icons/filenew.xpm icons/fileopen.xpm icons/editpaste.xpm icons/filesave.xpm icons/qosmicicon.xpm icons/qosmic.xpm icons/silk/add.xpm icons/silk/arrow_updown.xpm icons/silk/arrow_left_right.xpm icons/silk/arrow_inout.xpm icons/silk/arrow_undo.xpm icons/silk/arrow_redo.xpm icons/silk/arrow_refresh.xpm icons/silk/arrow_rotate_clockwise.xpm icons/silk/application.xpm icons/silk/application_go.xpm icons/silk/application_get.xpm icons/silk/application_home.xpm icons/silk/application_view_list.xpm icons/silk/application_view_tile.xpm icons/silk/bullet_toggle_minus.xpm icons/silk/bullet_toggle_plus.xpm icons/silk/bullet_arrow_right.xpm icons/silk/bullet_arrow_left.xpm icons/silk/bullet_arrow_down.xpm icons/silk/bullet_arrow_up.xpm icons/silk/bullet_black.xpm icons/silk/bullet_add.xpm icons/silk/bullet_delete.xpm icons/silk/bullet_wrench.xpm icons/silk/bullet_go.xpm icons/silk/camera.xpm icons/silk/chart_bar.xpm icons/silk/clock.xpm icons/silk/color_swatch.xpm icons/silk/color_wheel.xpm icons/silk/contrast.xpm icons/silk/cross.xpm icons/silk/cut.xpm icons/silk/delete.xpm icons/silk/disk_multiple.xpm icons/silk/disk.xpm icons/silk/film.xpm icons/silk/folder.xpm icons/silk/folder_explore.xpm icons/silk/folder_find.xpm icons/silk/folder_image.xpm icons/silk/folder_picture.xpm icons/silk/help.xpm icons/silk/images.xpm icons/silk/image_edit.xpm icons/silk/information.xpm icons/silk/layers.xpm icons/silk/link.xpm icons/silk/monitor.xpm icons/silk/magnifier_zoom_in.xpm icons/silk/magnifier_zoom_out.xpm icons/silk/palette.xpm icons/silk/page_add.xpm icons/silk/page_delete.xpm icons/silk/page_green.xpm icons/silk/page_copy.xpm icons/silk/page_save.xpm icons/silk/page_paste.xpm icons/silk/page_white.xpm icons/silk/page_white_get.xpm icons/silk/page_white_put.xpm icons/silk/photo.xpm icons/silk/picture.xpm icons/silk/pictures.xpm icons/silk/picture_save.xpm icons/silk/script.xpm icons/silk/shape_flip_vertical.xpm icons/silk/shape_flip_horizontal.xpm icons/silk/shape_triangle_add.xpm icons/silk/shape_triangle_delete.xpm icons/silk/shape_triangle_go.xpm icons/silk/shape_post_triangle.xpm icons/silk/shape_final_triangle.xpm icons/silk/shape_group.xpm icons/silk/shape_rotate_anticlockwise.xpm icons/silk/shape_rotate_clockwise.xpm icons/silk/shape_move_forwards.xpm icons/silk/shape_square_add.xpm icons/silk/shape_square_go.xpm icons/silk/shading.xpm icons/silk/star.xpm icons/silk/stop.xpm icons/silk/table.xpm icons/silk/text_columns.xpm icons/silk/wand.xpm ts/qosmic_fr.qm ts/qosmic_cs.qm ts/qosmic_ru.qm qosmic-1.6.0/scripts/000077500000000000000000000000001304321135200144725ustar00rootroot00000000000000qosmic-1.6.0/scripts/animate-genomes.lua000066400000000000000000000075141304321135200202550ustar00rootroot00000000000000-- ============================================================= -- Linearly interpolate genomes 'A' through genome 'B' and save -- into genome 'C'. -- -- A is the starting genome index -- B is the ending genome index (> A) -- C is the interpolated genome index (> B) -- -- LIN_STEPS is the number of linear interpolation steps -- ROT_STEPS is the number of rotational steps (degrees) -- ROT_LOOPS is the number of rotational loops per genome -- A, B, C = 0, 1, 2 LIN_STEPS = 36 ROT_STEPS = 36 ROT_LOOPS = 1 -- ============================================================= function init_xf(ga) ga.x, ga.y = 0, 0 ga.scale = 100 ga.ax, ga.ay = 0, 0 ga.bx, ga.cy = 1, 1 ga.cx, ga.by = 0, 0 ga.apx, ga.apy = 0, 0 ga.bpx, ga.cpy = 1, 1 ga.cpx, ga.bpy = 0, 0 ga.color, ga.density = 0, 0 ga.default = true end function interp_genomes_to(genomea, genomeb, genomec, t) local ga, gb = {}, {} ga.nxforms = genomea:num_xforms() gb.nxforms = genomeb:num_xforms() for n = 0, (nxf - 1) do init_xf(ga) init_xf(gb) if n < ga.nxforms then local xf = genomea:get_xform(n) ga.ax, ga.ay = xf:a() ga.bx, ga.by = xf:b() ga.cx, ga.cy = xf:c() ga.apx, ga.apy = xf:ap() ga.bpx, ga.bpy = xf:bp() ga.cpx, ga.cpy = xf:cp() ga.density = xf:density() ga.color = xf:color() ga.default = false; end if n < gb.nxforms then local xf = genomeb:get_xform(n) gb.ax, gb.ay = xf:a() gb.bx, gb.by = xf:b() gb.cx, gb.cy = xf:c() gb.apx, gb.apy = xf:ap() gb.bpx, gb.bpy = xf:bp() gb.cpx, gb.cpy = xf:cp() gb.density = xf:density() gb.color = xf:color() gb.default = false; end local xf = genomec:get_xform(n) local x,y x = ga.ax + t * (gb.ax - ga.ax) y = ga.ay + t * (gb.ay - ga.ay) xf:a(x, y) x = ga.bx + t * (gb.bx - ga.bx) y = ga.by + t * (gb.by - ga.by) xf:b(x, y) x = ga.cx + t * (gb.cx - ga.cx) y = ga.cy + t * (gb.cy - ga.cy) xf:c(x, y) x = ga.apx + t * (gb.apx - ga.apx) y = ga.apy + t * (gb.apy - ga.apy) xf:ap(x, y) x = ga.bpx + t * (gb.bpx - ga.bpx) y = ga.bpy + t * (gb.bpy - ga.bpy) xf:bp(x, y) x = ga.cpx + t * (gb.cpx - ga.cpx) y = ga.cpy + t * (gb.cpy - ga.cpy) xf:cp(x, y) for j = 0, NUM_VARS do local va, vb = 0, 0 if ga.default then va = 0 else va = genomea:get_xform(n):var(j) end if gb.default then vb = 0 else vb = genomeb:get_xform(n):var(j) end xf:var(j, va + t * (vb - va)) end xf:color(ga.color + t *(gb.color - ga.color)) xf:density(ga.density + t *(gb.density - ga.density)) end for k = 0, 255 do local ar,ag,ab = genomea:palette(k) local br,bg,bb = genomeb:palette(k) local r = ar + t * (br - ar) local g = ag + t * (bg - ag) local b = ab + t * (bb - ab) genomec:palette(k, r, g, b) end ga.x, ga.y = genomea:center() gb.x, gb.y = genomeb:center() local x = ga.x + t*(gb.x - ga.x) local y = ga.y + t*(gb.y - ga.y) genomec:center(x, y) ga.scale = genomea:scale() gb.scale = genomeb:scale() genomec:scale(ga.scale + t*(gb.scale - ga.scale)) end --- BEGIN --- num_genomes = frame:num_genomes() if A == nil then A = 0 end if B == nil then B = num_genomes - 1 end if C == nil then C = num_genomes - 0 end for n = A, B - 1 do genomeA = frame:get_genome(n) genomeB = frame:get_genome(n+1) frame:copy_genome(n, C) genomeC = frame:get_genome(C) local deg = -360. / ROT_STEPS for k = 0, ROT_STEPS * ROT_LOOPS do for i = 0, genomeC:num_xforms() - 1 do local xf = genomeC:get_xform(i) if xf:symmetry() == 0.0 then xf:rotate(deg, 0, 0); end end frame:render(C) end a_nxf = genomeA:num_xforms() b_nxf = genomeB:num_xforms() nxf = a_nxf if b_nxf > a_nxf then nxf = b_nxf end if nxf > a_nxf then genomeC:add_xform(nxf - a_nxf) end for i = 0, LIN_STEPS do local t = i / LIN_STEPS interp_genomes_to(genomeA, genomeB, genomeC, t) frame:render(C) end frame:del_genome(C) end qosmic-1.6.0/scripts/batch-render-files.lua000066400000000000000000000011251304321135200206320ustar00rootroot00000000000000-- This script scans the directory given by path for flam3 xml files without -- a cooresponding png image file, and then generates one. It requires -- luafilesystem (luaforge.net). require"lfs" path="/home/user/flam3 images" for file in lfs.dir(path) do if string.match(file, "\.flam3$") then local f = path..'/'..file local attr = lfs.attributes(f) if attr.mode == "file" then i = string.gsub(f, "\.flam3$", ".png") local imgattr = lfs.attributes(i) if (imgattr == nil) then print ('rendering ' .. i) frame:load(f) frame:render(0, i) end end end end qosmic-1.6.0/scripts/example.lua000066400000000000000000000024571304321135200166400ustar00rootroot00000000000000-- Here are some examples of how to use lua scripts with qosmic. Be sure to -- also examine the functions.lua script. -- load and save functions -- frame:load('sparkler.flam3') -- frame:save('sparkler.flam3') g = frame:get_genome() ; -- set g to refer to the first genome r = frame:get_genome(1) ; -- both g and r point to the same genome n = frame:get_genome(2) ; -- the second genome, create a new genome if necessary xf = g:get_xform(1) ; -- set xf to point at the first xform in r density = xf:density() -- get the density xf:density(1.0 + density) ; -- add one to the xform density xf:var(LINEAR, 2.0) ; -- set the linear variation to 2.0 (a, b, c) = xf:a(), xf:b(), xf:c() ; -- coordinates (x,y) = xf:pos(-1.0,1.2) ; -- position the center of the triangle at (-1.0, 1.2) xf_2 = g:add_xform() ; -- set xf_2 to point at a new xform xf_2:translate(1.0, 0.0) ; -- move the xform xf_2:rotate(60) ; -- rotate (in degrees) the xform ngenomes = frame:num_genomes() ; frame:render() ; -- render the first genome, and update the preview image frame:render(2, "image.png") ; -- render the second genome, and save to a file frame:render(n) ; -- render the second genome frame:copy_genome(1, 2) ; -- copy genome 1 to genome 2 frame:del_genome(2) ; -- delete genome 2 qosmic-1.6.0/scripts/functions.lua000066400000000000000000000040361304321135200172100ustar00rootroot00000000000000function dump_xform(xf) print(xf) print('index=',xf:index()) print('pos=',xf:pos()) print('color=',xf:color()) print('density=',xf:density()) print('color_speed=',xf:color_speed()) print('opacity=',xf:opacity()) print('a=',xf:a()) print('b=',xf:b()) print('c=',xf:c()) for _, v in ipairs(VARIATIONS) do val, vars = xf:var(_) if val ~= 0 then print(v .. '=', val) for _, v in pairs(vars) do print(' ' .. _ .. '=', v) end end end end function dump_genome(g) print(g) nxf = g:num_xforms() print('num_xforms=',nxf) print('size=',g:width(),g:height()) print('time=',g:time()) print('final_xform_index=',g:final_xform_index()) print('center=',g:center()) print('rotate=',g:rotate()) print('zoom=',g:zoom()) print('nbatches=',g:nbatches()) print('estimator=',g:estimator()) print('estimator_curve=',g:estimator_curve()) print('estimator_minimum=',g:estimator_minimum()) print('sample_density=',g:sample_density()) print('scale=',g:pixels_per_unit()) print('background=', g:background()) print() if (nxf > 0) then for n = 1, nxf do dump_xform(g:get_xform(n)) print() end end end function set_low_quality(g) g:spatial_filter_radius(0) g:sample_density(40) -- quality g:ntemporal_samples(1) g:estimator(0) g:nbatches(1) -- passes end function modify_xf_test(xf,d) for n=1,100 do xf:translate(d*0.05,0) xf:rotate(3.6) xf:scale(0.95) frame:render() end end function rotate_xf_test(xf) for n=1,360 do xf:rotate(1) frame:update() -- update the widgets' data end end function spread_colors(g) -- Spreads the color parameters evenly over all -- xforms in genome local num_xf = g:num_xforms() for i = 1, num_xf do g:get_xform(i):color(i / num_xf); end end function spread_density(g) -- Spreads the xform density parameters evenly over 1.0 local num_xf = g:num_xforms() for i = 1, num_xf do g:get_xform(i):density(1.0 / num_xf); end end function bw_palette(g) -- Creates a white to black gradient in the palette for genome g for i = 1,256 do v = (256-i)/256 g:palette(i, v,v,v) end end qosmic-1.6.0/scripts/normalize-densities.lua000066400000000000000000000006631304321135200211670ustar00rootroot00000000000000-- This script will normalize the xform densities to one. -- Running the script will have no effect on the flam3 image, -- since the densities are relative probabilities. sumq = 0 g = frame:get_genome() for it = 0, g:num_xforms() - 1 do local xf = g:get_xform(it) sumq = sumq + xf:density()^2 end sumq = math.sqrt(sumq) for it = 0, g:num_xforms() - 1 do local xf = g:get_xform(it) xf:density(xf:density() / sumq) end qosmic-1.6.0/scripts/pseudorandom-walk.lua000066400000000000000000000014371304321135200206360ustar00rootroot00000000000000-- -- Perform a random walk on the nodes of each non-symmetry transform. -- PI=3.14159265434 LENGTH_MULT=0.01 g = frame:get_genome() while true do for i = 0, g:num_xforms() - 1 do local xf = g:get_xform(i) if xf:symmetry() == 0.0 then xf:rotate(-4.0, 0, 0); local x, y local a = math.random() * PI local l = math.random() * LENGTH_MULT dy = l*math.sin(a) dx = l*math.cos(a) x, y = xf:a() x, y = x+dx, y+dy xf:a(x, y) a = math.random() * PI l = math.random() * LENGTH_MULT dy = l*math.sin(a) dx = l*math.cos(a) x, y = xf:b() x, y = x+dx, y+dy xf:b(x, y) a = math.random() * PI l = math.random() * LENGTH_MULT dy = l*math.sin(a) dx = l*math.cos(a) x, y = xf:c() x, y = x+dx, y+dy xf:c(x, y) end end frame:render() end qosmic-1.6.0/scripts/rotate-palette.lua000066400000000000000000000006241304321135200201310ustar00rootroot00000000000000-- This script simply rotates the genome color palette. gid = 1 -- rotate the palette for this genome step = 4 -- step over this many palette entries each loop gen = frame:get_genome(gid) while true do r, g, b = gen:palette( (1 + step) % 255 ) for n = 2, 256 do local r, g, b = gen:palette( (n + step) % 255 ) gen:palette(n - 1, r, g, b) end gen:palette(256, r, g, b) frame:render(gid) end qosmic-1.6.0/scripts/sheep-loop-to-png.lua000066400000000000000000000006251304321135200204550ustar00rootroot00000000000000-- Rotate each transform around the origin and render to -- png files. The png files can be combined into a movie. g = frame:get_genome() n=10 while true do local name = "/tmp/flam-img0" .. n .. ".png" for i = 0, g:num_xforms() - 1 do local xf = g:get_xform(i) if xf:symmetry() == 0.0 then xf:rotate(-4.0, 0, 0); end end print("rendering " .. name) frame:render(0, name) n = n+1 end qosmic-1.6.0/scripts/sheep-loop.lua000066400000000000000000000006001304321135200172440ustar00rootroot00000000000000-- -- Electric sheep looping animation script. -- Rotate each non-symmetry transform around the origin and render a preview. -- GENOME_IDX = 1 -- animate the genome at this index g = frame:get_genome(GENOME_IDX) while true do for i = 1, g:num_xforms() do local xf = g:get_xform(i) if xf:animate() > 0.0 then xf:rotate(-4.0, 0, 0); end end frame:render(GENOME_IDX) end qosmic-1.6.0/scripts/sierpinsky.lua000066400000000000000000000007531304321135200174020ustar00rootroot00000000000000-- this script generates a sierpinski gasket g = frame:get_genome(); g:clear_xforms(); g:width(640); g:height(480); g:scale(240); g:center(1.80, -0.20); xf = g:add_xform(); xf:scale(0.5); xf = g:add_xform(); xf:translate(1.28, 0); xf:scale(0.5) xf = g:add_xform(); xf:translate(0.64, -0.8); xf:scale(0.5); nxforms = g:num_xforms(); for i = 0, nxforms - 1 do local xf = g:get_xform(i); xf:density(1 / nxforms); xf:color(i / (nxforms - 1)); xf:var(LINEAR, 1.0) end frame:render() qosmic-1.6.0/src/000077500000000000000000000000001304321135200135725ustar00rootroot00000000000000qosmic-1.6.0/src/adjustscenewidget.cpp000066400000000000000000000074701304321135200200220ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "adjustscenewidget.h" AdjustSceneWidget::AdjustSceneWidget(FigureEditor* e, QWidget* parent) : QDialog(parent), editor(e) { setupUi(this); m_labelsCheckBox->setChecked(editor->labelsVisible()); m_gridCheckBox->setChecked(editor->gridVisible()); m_guideCheckBox->setChecked(editor->guideVisible()); m_guideColorButton->setEnabled(editor->guideVisible()); m_previewCheckBox->setChecked(editor->previewVisible()); m_previewFrame->setEnabled(editor->previewVisible()); m_previewDensityEditor->updateValue(editor->previewDensity()); m_previewDepthEditor->updateValue(editor->previewDepth()); connect(m_previewDensityEditor, SIGNAL(valueUpdated()), this, SLOT(previewUpdatedAction())); connect(m_previewDepthEditor, SIGNAL(valueUpdated()), this, SLOT(previewUpdatedAction())); connect(m_previewCheckBox, SIGNAL(toggled(bool)), this, SLOT(togglePreviewAction(bool))); connect(m_gridCheckBox, SIGNAL(toggled(bool)), this, SLOT(toggleGridAction(bool))); connect(m_labelsCheckBox, SIGNAL(toggled(bool)), this, SLOT(toggleLabelsAction(bool))); connect(m_gridColorButton, SIGNAL(clicked(bool)), this, SLOT(gridColorSelectAction())); connect(m_guideCheckBox, SIGNAL(toggled(bool)), this, SLOT(toggleGuideAction(bool))); connect(m_guideColorButton, SIGNAL(clicked(bool)), this, SLOT(guideColorSelectAction())); connect(m_bgColorButton, SIGNAL(clicked(bool)), this, SLOT(bgColorSelectAction())); } void AdjustSceneWidget::toggleLabelsAction(bool checked) { editor->setLabelsVisible(checked); } void AdjustSceneWidget::previewUpdatedAction() { editor->setPreviewDensity(m_previewDensityEditor->value()); editor->setPreviewDepth(m_previewDepthEditor->value()); editor->updatePreview(); } void AdjustSceneWidget::togglePreviewAction(bool checked) { editor->setPreviewVisible(checked); m_previewFrame->setEnabled(checked); } void AdjustSceneWidget::toggleGridAction(bool checked) { editor->setGridVisible(checked); } void AdjustSceneWidget::gridColorSelectAction() { QColor c = QColorDialog::getColor(editor->gridColor(), this); if (c.isValid()) editor->setGridColor(c); } void AdjustSceneWidget::toggleGuideAction(bool checked) { editor->setGuideVisible(checked); m_guideColorButton->setEnabled(checked); } void AdjustSceneWidget::guideColorSelectAction() { QColor c = QColorDialog::getColor(editor->guideColor(), this); if (c.isValid()) editor->setGuideColor(c); } void AdjustSceneWidget::bgColorSelectAction() { QColor c = QColorDialog::getColor(editor->bgColor(), this); if (c.isValid()) editor->setbgColor(c); } qosmic-1.6.0/src/adjustscenewidget.h000066400000000000000000000035471304321135200174700ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef ADJUSTSCENEWIDGET_H #define ADJUSTSCENEWIDGET_H #include "ui_adjustscenewidget.h" #include "xfedit.h" class AdjustSceneWidget : public QDialog, private Ui::AdjustSceneWidget { Q_OBJECT public: AdjustSceneWidget(FigureEditor*, QWidget* parent=0); protected slots: void toggleLabelsAction(bool); void toggleGridAction(bool); void gridColorSelectAction(); void toggleGuideAction(bool); void guideColorSelectAction(); void bgColorSelectAction(); void togglePreviewAction(bool); void previewUpdatedAction(); private: FigureEditor* editor; }; #endif qosmic-1.6.0/src/basistriangle.cpp000066400000000000000000000102261304321135200171260ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "basistriangle.h" #include "xfedit.h" BasisTriangle::BasisTriangle(FigureEditor* xfedit, QTransform& t) : coordinateTransform(t), canvas(xfedit) { QPolygonF p; p << QPointF(0.0,0.0) << QPointF(1.0,0.0) << QPointF(0.0,1.0); setPoints(p); setZValue(0); setPen( QPen(Qt::gray) ); setTransform(t); } BasisTriangle::~BasisTriangle() { } void BasisTriangle::scale(double dx, double dy) { coordinateTransform.scale(dx,dy); setTransform(coordinateTransform); } const QTransform& BasisTriangle::coordTransform() const { return coordinateTransform; } void BasisTriangle::setCoordTransform(QTransform t) { coordinateTransform = t; setTransform(coordinateTransform); } int BasisTriangle::type() const { return Type; } void BasisTriangle::setPoints(QPolygonF pa) { A = pa[0]; B = pa[1]; C = pa[2]; QGraphicsPolygonItem::setPolygon(pa); } void BasisTriangle::setPoints(QPointF a, QPointF b, QPointF c) { A = a; B = c; C = c; QPolygonF pa; pa << a << b << c; QGraphicsPolygonItem::setPolygon(pa); } void BasisTriangle::applyTransform(TriangleCoords& cList, double coords[3][2]) { double Ax = cList[0].x(); double Bx = cList[1].x(); double Cx = cList[2].x(); double Ay = cList[0].y(); double By = cList[1].y(); double Cy = cList[2].y(); double bAx = A.x(); double bAy = A.y(); double bBx = B.x(); double bBy = B.y(); double bCx = C.x(); double bCy = C.y(); double a = (Ax*bBy - Ax*bCy - bAy*Bx + bCy*Bx + bAy*Cx - bBy*Cx) / ((-bAy)*bBx + bAx*bBy + bAy*bCx - bBy*bCx - bAx*bCy + bBx*bCy ); double b = ((-Ax)*bBx + Ax*bCx + bAx*Bx - bCx*Bx - bAx*Cx + bBx*Cx) / ((-bAy)*bBx + bAx*bBy + bAy*bCx - bBy*bCx - bAx*bCy + bBx*bCy); double c = ((-Ax)*bBy*bCx + Ax*bBx*bCy + bAy*bCx*Bx - bAx*bCy*Bx - bAy*bBx*Cx + bAx*bBy*Cx) / ((-bAy)*bBx + bAx*bBy + bAy*bCx - bBy*bCx - bAx*bCy + bBx*bCy); double d = (Ay*bBy - Ay*bCy - bAy*By + bCy*By + bAy*Cy - bBy*Cy) / ((-bAy)*bBx + bAx*bBy + bAy*bCx - bBy*bCx - bAx*bCy + bBx*bCy ); double e = ((-Ay)*bBx + Ay*bCx + bAx*By - bCx*By - bAx*Cy + bBx*Cy) / ((-bAy)*bBx + bAx*bBy + bAy*bCx - bBy*bCx - bAx*bCy + bBx*bCy); double f = ((-Ay)*bBy*bCx + Ay*bBx*bCy + bAy*bCx*By - bAx*bCy*By - bAy*bBx*Cy + bAx*bBy*Cy) / ((-bAy)*bBx + bAx*bBy + bAy*bCx - bBy*bCx - bAx*bCy + bBx*bCy); coords[0][0] = a; coords[0][1] = -d; coords[1][0] = -b; coords[1][1] = e; coords[2][0] = c; coords[2][1] = -f; } TriangleCoords BasisTriangle::getCoords(double coords[3][2]) { double a = coords[0][0]; double d = -coords[0][1]; double b = -coords[1][0]; double e = coords[1][1]; double c = coords[2][0]; double f = -coords[2][1]; double Nx, Ny; QPolygonF cList; Nx = (A.x()*a + A.y()*b + c); Ny = (A.x()*d + A.y()*e + f); cList << QPointF(Nx, Ny); Nx = (B.x()*a + B.y()*b + c); Ny = (B.x()*d + B.y()*e + f); cList << QPointF(Nx, Ny); Nx = (C.x()*a + C.y()*b + c); Ny = (C.x()*d + C.y()*e + f); cList << QPointF(Nx, Ny); return cList; } qosmic-1.6.0/src/basistriangle.h000066400000000000000000000041741304321135200166000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef BASISTRIANGLE_H #define BASISTRIANGLE_H #include #include #include #include #include typedef QPolygonF TriangleCoords; typedef QList::iterator TriangleCoordsIterator; class FigureEditor; class BasisTriangle : public QGraphicsPolygonItem { protected: QTransform coordinateTransform; FigureEditor* canvas; public: QPointF A, B, C; enum { Type = UserType + 1 }; BasisTriangle(FigureEditor* xfedit, QTransform& m); ~BasisTriangle(); int type() const; void setPoints(QPolygonF); void setPoints(QPointF, QPointF, QPointF); const QTransform& coordTransform() const; void setCoordTransform(QTransform); void scale(double, double); TriangleCoords getCoords(double c[3][2]); void applyTransform(TriangleCoords&, double[3][2]); }; #endif qosmic-1.6.0/src/camerasettingswidget.cpp000066400000000000000000000102071304321135200205130ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "camerasettingswidget.h" CameraSettingsWidget::CameraSettingsWidget(GenomeVector* gen, QWidget* parent) : QWidget(parent), genome(gen) { setupUi(this); // restore (Double/Int)ValueEditor settings m_zoomLineEdit->restoreSettings(); m_xposLineEdit->restoreSettings(); m_yposLineEdit->restoreSettings(); m_scaleLineEdit->restoreSettings(); m_rotateLineEdit->restoreSettings(); m_sizewLineEdit->restoreSettings(); m_sizehLineEdit->restoreSettings(); connect(m_zoomLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_zoomLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_xposLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_xposLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_yposLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_yposLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_scaleLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_scaleLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_rotateLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_rotateLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_sizewLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_sizewLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_sizehLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_sizehLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); } void CameraSettingsWidget::reset() { updateFormData(); } #define genome_ptr (genome->selectedGenome()) void CameraSettingsWidget::updateFormData() { m_zoomLineEdit->updateValue(genome_ptr->zoom); m_scaleLineEdit->updateValue(genome_ptr->pixels_per_unit); m_xposLineEdit->updateValue(genome_ptr->center[0]); m_yposLineEdit->updateValue(genome_ptr->center[1]); m_rotateLineEdit->updateValue(genome_ptr->rotate); m_sizewLineEdit->updateValue(genome_ptr->width); m_sizehLineEdit->updateValue(genome_ptr->height); } void CameraSettingsWidget::fieldEditedAction() { int width = m_sizewLineEdit->value(); if (genome_ptr->width != width) { // this "autoscales" the image scale to maintain the camera // when changing the image size genome_ptr->pixels_per_unit *= (double)(width) / (genome_ptr->width); m_scaleLineEdit->updateValue(genome_ptr->pixels_per_unit); } else genome_ptr->pixels_per_unit = m_scaleLineEdit->value(); genome_ptr->zoom = m_zoomLineEdit->value(); genome_ptr->center[0] = m_xposLineEdit->value(); genome_ptr->center[1] = m_yposLineEdit->value(); genome_ptr->rotate = m_rotateLineEdit->value(); genome_ptr->width = m_sizewLineEdit->value(); genome_ptr->height = m_sizehLineEdit->value(); emit dataChanged(); } qosmic-1.6.0/src/camerasettingswidget.h000066400000000000000000000034171304321135200201650ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef CAMERASETTINGSWIDGET_H #define CAMERASETTINGSWIDGET_H #include #include "ui_camerasettingswidget.h" #include "genomevector.h" class CameraSettingsWidget : public QWidget, private Ui::CameraSettingsWidget { Q_OBJECT public: CameraSettingsWidget(GenomeVector*, QWidget* parent=0); void reset(); signals: void dataChanged(); void undoStateSignal(); public slots: void fieldEditedAction(); void updateFormData(); private: GenomeVector* genome; }; #endif qosmic-1.6.0/src/chaoswidget.cpp000066400000000000000000000167011304321135200166040ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include #include "chaoswidget.h" #include "flam3util.h" ChaosWidget::ChaosWidget(GenomeVector* g, QWidget* parent) : QWidget(parent), genomes(g) { setupUi(this); model = new QStandardItemModel(1, 1); m_chaosTable->setModel(model); m_chaosTable->restoreSettings(); m_chaosTable->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); connect(m_chaosTable, SIGNAL(valueUpdated(int)), this, SLOT(chaosEditedSlot(int))); connect(m_chaosTable, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_chaosTable, SIGNAL(precisionChanged()), this, SLOT(updateFormData())); } ChaosWidget::~ChaosWidget() { delete model; } void ChaosWidget::updateFormData() { flam3_genome* genome = genomes->selectedGenome(); if (genome->final_xform_enable == 1 && genome->final_xform_index == selectedTriangle->index()) // Disallow editing chaos values for the final xform since they don't exist. m_chaosTable->setEnabled(false); else { QLocale l; int precision = m_chaosTable->precision(); int xform_idx = selectedTriangle->index(); int rows = genome->num_xforms; if (genome->final_xform_enable == 1) // The chaos array for an xform_idx holds a positive multiplier for // each non-final xform. rows -= 1; model->setRowCount(rows); for (int n = 0; n < rows ; n++) { QModelIndex idx = model->index(n, 0); double value = genome->chaos[xform_idx][n]; model->setData(idx, l.toString(value, 'f', precision)); } m_chaosTable->setEnabled(true); } } void ChaosWidget::chaosEditedSlot(int row) { int xform_idx = selectedTriangle->index(); QVariant data = model->data(model->index(row, 0)); flam3_genome* genome = genomes->selectedGenome(); genome->chaos[xform_idx][row] = data.toDouble(); emit dataChanged(); } void ChaosWidget::triangleSelectedSlot(Triangle* t) { selectedTriangle = t; updateFormData(); } /** * For some reason the wheelEvent occuring over the table headers is handled * here. Throwing it down to the handler for the tablewidget causes an * infinite loop. */ void ChaosWidget::wheelEvent(QWheelEvent* e) { QAbstractSlider::SliderAction a = QAbstractSlider::SliderSingleStepSub; if (e->delta() < 0) { if (e->modifiers() & Qt::ControlModifier) a = QAbstractSlider::SliderPageStepAdd; else a = QAbstractSlider::SliderSingleStepAdd; } else if (e->modifiers() & Qt::ControlModifier) a = QAbstractSlider::SliderPageStepSub; if (m_chaosTable->isVisible()) m_chaosTable->verticalScrollBar()->triggerAction(a); e->accept(); } ChaosTableView::ChaosTableView(QWidget* parent) : QTableView(parent) { step = 0.1; start_value = 0.0; vars_precision = 4; setEditTriggers(QAbstractItemView::DoubleClicked); setSelectionMode(QAbstractItemView::SingleSelection); setSelectionBehavior(QAbstractItemView::SelectItems); setAutoScroll(false); horizontalHeader()->setStretchLastSection(true); horizontalHeader()->setSectionsMovable(false); } void ChaosTableView::restoreSettings() { QSettings s; step = s.value(QString("chaostableview/%1/step") .arg(objectName()), step).toDouble(); vars_precision = s.value(QString("chaostableview/%1/precision") .arg(objectName()), vars_precision).toInt(); } void ChaosTableView::keyPressEvent(QKeyEvent* e) { switch (e->key()) { case Qt::Key_BracketLeft: step *= 10.0; QSettings().setValue(QString("chaostableview/%1/step").arg(objectName()), step); break; case Qt::Key_BracketRight: step *= 0.10; QSettings().setValue(QString("chaostableview/%1/step").arg(objectName()), step); break; case Qt::Key_Return: emit valueUpdated(0); break; case Qt::Key_Plus: if (e->modifiers() & Qt::ControlModifier) { setPrecision(precision() + 1); QSettings().setValue(QString("chaostableview/%1/precision").arg(objectName()), precision()); } break; case Qt::Key_Minus: if (e->modifiers() & Qt::ControlModifier) { setPrecision(precision() - 1); QSettings().setValue(QString("chaostableview/%1/precision").arg(objectName()), precision()); } break; default: QTableView::keyPressEvent(e); } } void ChaosTableView::mousePressEvent(QMouseEvent* e) { switch (e->button()) { case Qt::LeftButton: { QModelIndex idx( indexAt(e->pos()) ); if (idx.column() == 0) { start_item = idx; last_pos = e->localPos(); start_value = start_item.data().toDouble(); e->accept(); } else start_item = QModelIndex(); break; } case Qt::MidButton: { QModelIndex idx( indexAt(e->pos()) ); if (idx.column() == 0) { model()->setData(idx, QLocale().toString(1.0, 'f', vars_precision)); emit valueUpdated(idx.row()); } break; } default: ; } QTableView::mousePressEvent(e); } void ChaosTableView::mouseMoveEvent(QMouseEvent* e) { if ((e->buttons() & Qt::LeftButton) && start_item.isValid()) { double item_data = start_item.data().toDouble(); double nstep = step; if (e->modifiers() & Qt::ShiftModifier) nstep *= 0.10; else if (e->modifiers() & Qt::ControlModifier) nstep *= 10.0; double dy = e->y() - last_pos.y(); last_pos = e->localPos(); if (dy == 0.0) return; if (dy > 0) nstep *= -1.0; double inc_value = qMax(0.0, item_data + nstep); model()->setData(start_item, QLocale().toString(inc_value, 'f', vars_precision)); emit valueUpdated(start_item.row()); e->accept(); } } void ChaosTableView::mouseReleaseEvent(QMouseEvent* e) { if ((e->button() == Qt::LeftButton) && start_item.isValid() && start_value != start_item.data().toDouble()) { start_item = QModelIndex(); e->accept(); emit undoStateSignal(); } } int ChaosTableView::precision() { return vars_precision; } void ChaosTableView::setPrecision(int n) { if (vars_precision != n) { vars_precision = qMax(1, n); emit precisionChanged(); } } void ChaosTableView::commitData(QWidget* editor) { QModelIndex idx(currentIndex()); bool ok; double current_value(idx.data().toDouble()); double editor_value(qMax(0.0, qobject_cast(editor)->text().toDouble(&ok))); if (ok && current_value != editor_value) { model()->setData(idx, QLocale().toString(editor_value, 'f', vars_precision)); emit valueUpdated(idx.row()); } } qosmic-1.6.0/src/chaoswidget.h000066400000000000000000000050551304321135200162510ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef CHAOSWIDGET_H #define CHAOSWIDGET_H #include #include #include #include #include "genomevector.h" #include "triangle.h" class ChaosTableView : public QTableView { Q_OBJECT public: ChaosTableView(QWidget* =0); void setPrecision(int); int precision(); void restoreSettings(); signals: void valueUpdated(int); void undoStateSignal(); void precisionChanged(); protected: void mousePressEvent(QMouseEvent*); void mouseMoveEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); void keyPressEvent(QKeyEvent*); protected slots: void commitData(QWidget*); private: double step; double start_value; QModelIndex start_item; QPointF last_pos; int vars_precision; }; #include "ui_chaoswidget.h" class ChaosWidget : public QWidget, private Ui::ChaosWidget { Q_OBJECT public: ChaosWidget(GenomeVector*, QWidget* parent=0); ~ChaosWidget(); public slots: void triangleSelectedSlot(Triangle* t); void updateFormData(); signals: void dataChanged(); void undoStateSignal(); protected: void wheelEvent(QWheelEvent*); protected slots: void chaosEditedSlot(int); private: GenomeVector* genomes; Triangle* selectedTriangle; QStandardItemModel* model; }; #endif qosmic-1.6.0/src/checkersbrush.cpp000066400000000000000000000031541304321135200171340ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include "checkersbrush.h" CheckersBrush::CheckersBrush(int d) : QBrush() { QImage img(d, d, QImage::Format_RGB32); QPainter p(&img); p.fillRect(0, 0, d, d, Qt::white); p.fillRect(0, 0, d/2, d/2, Qt::black); p.fillRect(d/2, d/2, d, d, Qt::black); setTexture(QPixmap::fromImage(img)); } qosmic-1.6.0/src/checkersbrush.h000066400000000000000000000027171304321135200166050ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef CHECKERSBRUSH_H #define CHECKERSBRUSH_H #include class CheckersBrush : public QBrush { public: explicit CheckersBrush(int); }; #endif // CHECKERSBRUSH_H qosmic-1.6.0/src/colorbalancewidget.cpp000066400000000000000000000124601304321135200201310ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "colorbalancewidget.h" #include "renderthread.h" #include "logger.h" ColorBalanceWidget::ColorBalanceWidget(GenomeVector* g, QWidget* parent) : QWidget(parent), genome(g) { setupUi(this); m_contrastEditor->restoreSettings(); m_brightnessEditor->restoreSettings(); m_gammaEditor->restoreSettings(); m_vibrancyEditor->restoreSettings(); m_hueEditor->restoreSettings(); m_highlightPowerEditor->restoreSettings(); connect(m_contrastEditor, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_brightnessEditor, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_gammaEditor, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_vibrancyEditor, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_hueEditor, SIGNAL(valueUpdated()), this, SLOT(hueEditedAction())); connect(m_alphaComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setImageFormat(int))); connect(m_clipCheckBox, SIGNAL(toggled(bool)), this, SLOT(setEarlyClip(bool))); connect(m_highlightPowerEditor, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); } #define genome_ptr (genome->selectedGenome()) void ColorBalanceWidget::reset() { palette.clear(); for (int n = 0 ; n < 256 ; n++ ) { double rc, gc, bc, ac; rc = genome_ptr->palette[n].color[0]; gc = genome_ptr->palette[n].color[1]; bc = genome_ptr->palette[n].color[2]; ac = genome_ptr->palette[n].color[3]; if (rc < 0.0 || rc > 1.0 || bc < 0.0 || bc > 1.0 || gc < 0.0 || gc > 1.0) return; palette << QColor::fromRgbF(rc ,gc, bc, ac); } updateFormData(); } void ColorBalanceWidget::updateFormData() { m_contrastEditor->updateValue(genome_ptr->contrast); m_brightnessEditor->updateValue(genome_ptr->brightness); m_gammaEditor->updateValue(genome_ptr->gamma); m_vibrancyEditor->updateValue(genome_ptr->vibrancy); m_hueEditor->updateValue(genome_ptr->hue_rotation); m_highlightPowerEditor->updateValue(genome_ptr->highlight_power); logFine(QString("ColorBalanceWidget::updateFormData : cont %1 brite %2 gamma %3 hue %4") .arg(genome_ptr->contrast).arg(genome_ptr->brightness).arg(genome_ptr->gamma) .arg(genome_ptr->hue_rotation)); } void ColorBalanceWidget::fieldEditedAction() { genome_ptr->contrast = m_contrastEditor->value(); genome_ptr->brightness = m_brightnessEditor->value(); genome_ptr->gamma = m_gammaEditor->value(); genome_ptr->vibrancy = m_vibrancyEditor->value(); genome_ptr->hue_rotation = m_hueEditor->value(); static double last_power = -2.0; double power = m_highlightPowerEditor->value(); if (last_power != power) { if (last_power == -1.0) { last_power = power = 0.0; m_highlightPowerEditor->updateValue(power); } else if (power < 0.0) { last_power = power = -1.0; m_highlightPowerEditor->updateValue(power); } genome_ptr->highlight_power = power; } logFine(QString("ColorBalanceWidget::fieldEditedAction : cont %1 brite %2 gamma %3 hue %4 vib %5 ") .arg(genome_ptr->contrast).arg(genome_ptr->brightness) .arg(genome_ptr->gamma).arg(genome_ptr->hue_rotation) .arg(genome_ptr->vibrancy)); emit dataChanged(); } void ColorBalanceWidget::hueEditedAction() { genome_ptr->hue_rotation = m_hueEditor->value(); logFine(QString("ColorBalanceWidget::hueEditedAction : hue %1") .arg(genome_ptr->hue_rotation)); int n = 0; foreach(QColor c, palette) { double hue, saturation, value; c.getHsvF( &hue, &saturation, &value ); hue = qMax(0.0, hue); hue += genome_ptr->hue_rotation; hue = hue >= 1.0 ? hue - 1.0 : hue ; c.setHsvF( hue , saturation, value ); c.getRgbF( &genome_ptr->palette[n].color[0], &genome_ptr->palette[n].color[1], &genome_ptr->palette[n].color[2], &genome_ptr->palette[n].color[3]); n++; } genome_ptr->hue_rotation = 0.0; emit paletteChanged(); } void ColorBalanceWidget::setImageFormat(int format) { RenderThread::getInstance()->setFormat(static_cast(format)); emit dataChanged(); } void ColorBalanceWidget::setEarlyClip(bool flag) { RenderThread::getInstance()->setEarlyClip(flag); emit dataChanged(); } qosmic-1.6.0/src/colorbalancewidget.h000066400000000000000000000035661304321135200176050ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef COLORBALANCEWIDGET_H #define COLORBALANCEWIDGET_H #include #include "ui_colorbalancewidget.h" #include "genomevector.h" class ColorBalanceWidget : public QWidget, private Ui::ColorBalanceWidget { Q_OBJECT public: ColorBalanceWidget(GenomeVector*, QWidget* parent=0); void updateFormData(); void reset(); signals: void dataChanged(); void paletteChanged(); protected slots: void fieldEditedAction(); void hueEditedAction(); void setImageFormat(int format); void setEarlyClip(bool); private: GenomeVector* genome; QList palette; }; #endif qosmic-1.6.0/src/colordialog.cpp000066400000000000000000000130521304321135200165750ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "colordialog.h" ColorDialog::ColorDialog(QWidget* parent) : QDialog(parent) { setupUi(this); setSelectedColor(QColor(Qt::white)); connect(m_hsLabel, SIGNAL(colorSelected(QPoint)), this, SLOT(indexSelected(QPoint))); connect(m_vLabel, SIGNAL(colorSelected(QPoint)), this, SLOT(indexSelected(QPoint))); connect(m_okButton, SIGNAL(pressed()), this, SLOT(accept())); connect(m_cancelButton, SIGNAL(pressed()), this, SLOT(reject())); connect(m_rSpinBox, SIGNAL(valueChanged(int)), this, SLOT(rgbSpinValueChanged())); connect(m_gSpinBox, SIGNAL(valueChanged(int)), this, SLOT(rgbSpinValueChanged())); connect(m_bSpinBox, SIGNAL(valueChanged(int)), this, SLOT(rgbSpinValueChanged())); connect(m_aSpinBox, SIGNAL(valueChanged(int)), this, SLOT(rgbSpinValueChanged())); connect(m_hSpinBox, SIGNAL(valueChanged(int)), this, SLOT(hsvSpinValueChanged())); connect(m_sSpinBox, SIGNAL(valueChanged(int)), this, SLOT(hsvSpinValueChanged())); connect(m_vSpinBox, SIGNAL(valueChanged(int)), this, SLOT(hsvSpinValueChanged())); } ColorDialog::~ColorDialog() { } void ColorDialog::indexSelected(QPoint /*p*/) { QPoint hs_pos(m_hsLabel->selectedIndex()); QPoint v_pos(m_vLabel->selectedIndex()); int h = qBound(0, hs_pos.x(), 359); int s = qBound(0, hs_pos.y(), 255); int v = qBound(0, v_pos.y(), 255); setSelectedColor(QColor::fromHsv(h, s, v, m_aSpinBox->value())); emit colorSelected(selectedColor); } QColor ColorDialog::getSelectedColor() { return selectedColor; } void ColorDialog::setSelectedColor(QColor c) { selectedColor = c; m_selectedColorLabel->setColor(selectedColor); m_vLabel->setSelectedIndex(c); m_hsLabel->setSelectedIndex(c); m_rSpinBox->blockSignals(true); m_gSpinBox->blockSignals(true); m_bSpinBox->blockSignals(true); m_aSpinBox->blockSignals(true); m_hSpinBox->blockSignals(true); m_sSpinBox->blockSignals(true); m_vSpinBox->blockSignals(true); m_rSpinBox->setValue(selectedColor.red()); m_gSpinBox->setValue(selectedColor.green()); m_bSpinBox->setValue(selectedColor.blue()); m_aSpinBox->setValue(selectedColor.alpha()); m_hSpinBox->setValue(selectedColor.hue()); m_sSpinBox->setValue(selectedColor.saturation()); m_vSpinBox->setValue(selectedColor.value()); m_rSpinBox->blockSignals(false); m_gSpinBox->blockSignals(false); m_bSpinBox->blockSignals(false); m_aSpinBox->blockSignals(false); m_hSpinBox->blockSignals(false); m_sSpinBox->blockSignals(false); m_vSpinBox->blockSignals(false); } void ColorDialog::setAlphaEnabled(bool flag) { label_7->setEnabled(flag); m_aSpinBox->setEnabled(flag); } void ColorDialog::rgbSpinValueChanged() { setSelectedColor(QColor(m_rSpinBox->value(), m_gSpinBox->value(), m_bSpinBox->value(), m_aSpinBox->value())); } void ColorDialog::hsvSpinValueChanged() { setSelectedColor(QColor::fromHsv(m_hSpinBox->value(), m_sSpinBox->value(), m_vSpinBox->value(), m_aSpinBox->value())); } ValSelector::ValSelector(QWidget* parent) : ColorSelector(parent) { QSize s = size(); background = QImage(s.width(), 256, QImage::Format_RGB32); QPainter p(&background); for (int i = 0 ; i < 256 ; i++) { p.setPen(QPen(qRgb(i, i, i))); p.drawLine(0, i, s.width(), i); } repaintLabel(); } void ValSelector::setSelectedIndex(QColor c) { ColorSelector::setSelectedIndex(QPoint(0, c.value())); } void ValSelector::repaintLabel() { QImage label(background); QPainter p(&label); int last_y = last_pos.y(); p.setPen(QPen(qRgb(0, 255 - last_y, 255 - last_y))); p.drawLine(0, last_y, size().width(), last_y); setPixmap(QPixmap::fromImage( label )); } HueSatSelector::HueSatSelector(QWidget* parent) : ColorSelector(parent), value(0) { background = QImage(360, 256, QImage::Format_RGB32); setSelectedIndex(Qt::white); } void HueSatSelector::setSelectedIndex(QColor c) { if (value != c.value()) { value = c.value(); for (int i = 0 ; i < 360 ; i++) for (int j = 0 ; j < 256 ; j++) background.setPixel(i, j, QColor::fromHsv(i, j, value).rgb()); } ColorSelector::setSelectedIndex(QPoint(c.hue(),c.saturation())); } void HueSatSelector::repaintLabel() { QImage label(background); QPainter p(&label); p.setPen(QPen(qRgb(255 - value, 255 - value, 255 - value))); p.drawEllipse(qBound(0, last_pos.x(), 359) - 5, qBound(0, last_pos.y(), 255) - 5, 10, 10); setPixmap(QPixmap::fromImage( label )); } qosmic-1.6.0/src/colordialog.h000066400000000000000000000041451304321135200162450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef COLORDIALOG_H #define COLORDIALOG_H #include "colorselector.h" class HueSatSelector : public ColorSelector { int value; public: HueSatSelector(QWidget* parent=0); void setSelectedIndex(QColor); void repaintLabel(); }; class ValSelector : public ColorSelector { public: ValSelector(QWidget* parent=0); void setSelectedIndex(QColor); void repaintLabel(); }; #include "ui_colordialog.h" class ColorDialog : public QDialog, private Ui::ColorDialog { Q_OBJECT public: ColorDialog(QWidget* parent=0); ~ColorDialog(); QColor getSelectedColor(); void setSelectedColor(QColor); void setAlphaEnabled(bool); private slots: void indexSelected(QPoint); void rgbSpinValueChanged(); void hsvSpinValueChanged(); signals: void colorSelected(QColor); private: QColor selectedColor; }; #endif qosmic-1.6.0/src/colorlabel.cpp000066400000000000000000000046601304321135200164220ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include #include #include "colorlabel.h" #include "colordialog.h" #include "checkersbrush.h" ColorLabel::ColorLabel(QWidget* parent) : QLabel(parent), lastcolor(Qt::black) { } void ColorLabel::mousePressEvent(QMouseEvent* /*e*/) { static QColor c; if (objectName() == "m_backgroundLabel") { ColorDialog d(this); d.setSelectedColor(lastcolor); d.setAlphaEnabled(false); connect(&d, SIGNAL(colorSelected(QColor)), this, SIGNAL(colorSelected(QColor))); if (d.exec() == QDialog::Accepted) { c = d.getSelectedColor(); if (c.isValid() && lastcolor != c) setColor(c); emit undoStateSignal(); } else if (d.getSelectedColor() != lastcolor) emit colorSelected(lastcolor); disconnect(&d); } else if (objectName() == "m_colorLabel") { } } void ColorLabel::setColor(QColor c) { QSize s = maximumSize(); QImage label(s.width(), s.height(), QImage::Format_RGB32); QPainter p(&label); if (c.alpha() < 255) p.fillRect(label.rect(), CheckersBrush(15)); p.fillRect(label.rect(), QBrush(c)); setPixmap(QPixmap::fromImage( label )); lastcolor = c; } qosmic-1.6.0/src/colorlabel.h000066400000000000000000000032141304321135200160610ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef COLORLABEL_H #define COLORLABEL_H #include #include #include class ColorLabel : public QLabel { Q_OBJECT public: ColorLabel(QWidget* parent=0); void setColor(QColor); void mousePressEvent (QMouseEvent*); signals: void colorSelected(QColor); void undoStateSignal(); private: QColor lastcolor; }; #endif qosmic-1.6.0/src/colorselector.cpp000066400000000000000000000037511304321135200171630ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "colorselector.h" ColorSelector::ColorSelector(QWidget* parent) : QLabel(parent), last_pos(0,0) { repaintLabel(); } void ColorSelector::repaintLabel() { } void ColorSelector::mousePressEvent(QMouseEvent* e) { last_pos = e->pos(); repaintLabel(); emit colorSelected(last_pos); } void ColorSelector::mouseMoveEvent(QMouseEvent* e) { if (e->buttons() & Qt::LeftButton) { last_pos = e->pos(); repaintLabel(); emit colorSelected(last_pos); } } void ColorSelector::mouseReleaseEvent(QMouseEvent* e) { last_pos = e->pos(); repaintLabel(); } void ColorSelector::setSelectedIndex(QPoint p) { last_pos = p; repaintLabel(); } QPoint ColorSelector::selectedIndex() { return last_pos; } qosmic-1.6.0/src/colorselector.h000066400000000000000000000034451304321135200166300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef COLORSELECTOR_H #define COLORSELECTOR_H #include #include #include class ColorSelector : public QLabel { Q_OBJECT public: ColorSelector(QWidget* parent=0); void mousePressEvent(QMouseEvent*); void mouseMoveEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); void setSelectedIndex(QPoint); QPoint selectedIndex(); signals: void colorSelected(QPoint); protected: virtual void repaintLabel(); QPoint last_pos; QImage background; }; #endif qosmic-1.6.0/src/colorsettingswidget.cpp000066400000000000000000000110531304321135200204010ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "colorsettingswidget.h" #include "logger.h" ColorSettingsWidget::ColorSettingsWidget(GenomeVector* g, QWidget* parent) : QWidget(parent), genome(g) { setupUi(this); m_colorSelector->setGenomeVector(genome); m_colorLineEdit->setWheelEventUpdate(true); m_colorLineEdit->restoreSettings(); connect(m_colorLineEdit, SIGNAL(valueUpdated()), this, SLOT(colorChangedAction())); connect(m_colorLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); m_speedLineEdit->setWheelEventUpdate(true); m_speedLineEdit->restoreSettings(); connect(m_speedLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_speedLineEdit, SIGNAL(valueUpdated()), m_colorSelector, SLOT(repaintLabel())); connect(m_speedLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); m_opacityLineEdit->setWheelEventUpdate(true); m_opacityLineEdit->restoreSettings(); connect(m_opacityLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_backgroundLabel, SIGNAL(colorSelected(QColor)), this, SLOT(changeBackground(QColor))); connect(m_backgroundLabel, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_colorSelector, SIGNAL(colorSelected(double)), this, SLOT(colorSelectedAction(double))); connect(m_colorSelector, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); } void ColorSettingsWidget::reset() { updateFormData(); } #define genome_ptr (genome->selectedGenome()) void ColorSettingsWidget::updateFormData() { logFiner("ColorSettingsWidget::updateFormData : updating color settings"); m_speedLineEdit->updateValue(selectedTriangle->xform()->color_speed); m_opacityLineEdit->updateValue(selectedTriangle->xform()->opacity); m_backgroundLabel->setColor( QColor::fromRgbF(genome_ptr->background[0], genome_ptr->background[1], genome_ptr->background[2])); updateColorLabel(); } void ColorSettingsWidget::updateColorLabel() { QColor color = Util::get_xform_color(genome_ptr, selectedTriangle->xform()); QSize size = m_colorLabel->maximumSize(); QImage im(size, QImage::Format_RGB32); QPainter p(&im); p.fillRect(im.rect(), QBrush(color)); m_colorLabel->setPixmap(QPixmap::fromImage( im )); m_colorLineEdit->updateValue(selectedTriangle->xform()->color); m_colorSelector->setSelectedIndex((int)(m_colorLineEdit->value() * 255.0)); } void ColorSettingsWidget::fieldEditedAction() { selectedTriangle->xform()->color_speed = m_speedLineEdit->value(); selectedTriangle->xform()->opacity = m_opacityLineEdit->value(); emit dataChanged(); } // called when the spinbox is modified void ColorSettingsWidget::colorChangedAction() { colorSelectedAction(m_colorLineEdit->value()); } // called when the button is held void ColorSettingsWidget::colorSelectedAction(double idx) { selectedTriangle->xform()->color = idx; updateColorLabel(); emit colorSelected(idx); emit dataChanged(); } void ColorSettingsWidget::changeBackground(QColor c) { genome_ptr->background[0] = c.redF(); genome_ptr->background[1] = c.greenF(); genome_ptr->background[2] = c.blueF(); emit dataChanged(); } void ColorSettingsWidget::triangleSelectedSlot(Triangle* t) { selectedTriangle = t; updateFormData(); } void ColorSettingsWidget::showEvent(QShowEvent* e) { if (!e->spontaneous()) updateFormData(); } qosmic-1.6.0/src/colorsettingswidget.h000066400000000000000000000041571304321135200200550ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef COLORSETTINGSWIDGET_H #define COLORSETTINGSWIDGET_H #include #include #include "ui_colorsettingswidget.h" #include "genomevector.h" #include "triangle.h" class ColorSettingsWidget : public QWidget, private Ui::ColorSettingsWidget { Q_OBJECT public: ColorSettingsWidget(GenomeVector*, QWidget* parent=0); void updateFormData(); void updateColorLabel(); signals: void dataChanged(); void colorChanged(double); void colorSelected(double); void undoStateSignal(); public slots: void triangleSelectedSlot(Triangle*); void reset(); protected slots: void fieldEditedAction(); void colorChangedAction(); void colorSelectedAction(double); void changeBackground(QColor); protected: void showEvent(QShowEvent*); private: GenomeVector* genome; Triangle* selectedTriangle; }; #endif qosmic-1.6.0/src/coordinatemark.cpp000066400000000000000000000041531304321135200173030ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "coordinatemark.h" CoordinateMark::CoordinateMark(QGraphicsItem* parent) : QGraphicsPolygonItem(QRectF(0.,0.,10.,10.),parent) { m_path.moveTo(4.0, 0.0); m_path.lineTo(4.0, 4.0); m_path.lineTo(0.0, 4.0); m_path.moveTo(0.0, 6.0); m_path.lineTo(4.0, 6.0); m_path.lineTo(4.0, 10.0); m_path.moveTo(6.0, 10.0); m_path.lineTo(6.0, 6.0); m_path.lineTo(10.0, 6.0); m_path.moveTo(10.0, 4.0); m_path.lineTo(6.0, 4.0); m_path.lineTo(6.0, 0.0); } void CoordinateMark::paint(QPainter* painter, const QStyleOptionGraphicsItem* /*option*/, QWidget* /*widget*/) { painter->setPen(pen()); painter->drawPath(m_path); } int CoordinateMark::type() const { return Type; } QPointF CoordinateMark::center() const { return pos() + QPointF(5.,5.); } void CoordinateMark::centerOn(const QPointF& p) { setPos(p + QPointF(-5.,-5.)); } qosmic-1.6.0/src/coordinatemark.h000066400000000000000000000034221304321135200167460ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef COORDINATEMARK_H #define COORDINATEMARK_H #include #include #include #include class CoordinateMark : public QGraphicsPolygonItem { QPainterPath m_path; public: enum { Type = UserType + 6 }; CoordinateMark(QGraphicsItem* parent =0); int type() const; QPointF center() const; void centerOn(const QPointF&); protected: void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget* =0); }; #endif qosmic-1.6.0/src/directorylistview.cpp000066400000000000000000000077041304321135200201010ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include #include "directorylistview.h" #include "logger.h" DirectoryListView::DirectoryListView(QWidget* parent) : QListView(parent), viewer(0), viewerSize(320,200) { } DirectoryListView::~DirectoryListView() { if (viewer) delete viewer; } void DirectoryListView::mousePressEvent(QMouseEvent* event) { if (event->button() == Qt::RightButton) { QModelIndex idx = indexAt(event->pos()); if (idx.isValid()) { QFileSystemModel* m = qobject_cast(model()); QFileInfo file( m->fileInfo(idx) ); if (file.isFile()) { QString s( file.absoluteFilePath() ); s.replace(QRegExp("flam(3|e)?$"), "png"); logFine(QString("DirectoryListView::mousePressEvent : showing %1").arg(s)); viewerImage = QImage(s); if (viewerImage.isNull()) logWarn(QString("DirectoryListView::mousePressEvent : null image %1").arg(s)); else if (!viewer) { viewer = new MainViewer(0, "FileViewer"); connect(viewer, SIGNAL(viewerResized(const QSize&)), this, SLOT(viewerResizedAction(const QSize&))); viewer->setPixmap(QPixmap::fromImage(viewerImage),false); viewer->show(); viewer->raise(); viewer->scaleResetAction(); } else { viewer->setPixmap(QPixmap::fromImage(viewerImage),false); viewer->show(); viewer->raise(); } } } } else if (event->button() == Qt::MidButton) { // toggle showing hidden files in the model QFileSystemModel* fsm = qobject_cast(model()); fsm->setFilter( fsm->filter() ^ QDir::Hidden ); } else { QListView::mousePressEvent(event); dragStartIndex = indexAt(event->pos()); } } void DirectoryListView::startDrag(Qt::DropActions supportedActions) { if (dragStartIndex.isValid()) { QFileSystemModel* m = qobject_cast(model()); QFileInfo file( m->fileInfo(dragStartIndex) ); if (file.isFile()) { QDrag* drag = new QDrag(this); QMimeData* mimeData = new QMimeData; QList urlList; urlList.append(QUrl::fromLocalFile(file.absoluteFilePath())); mimeData->setUrls(urlList); drag->setMimeData(mimeData); drag->setPixmap(m->fileIcon(dragStartIndex).pixmap(iconSize())); drag->exec(supportedActions); } } } void DirectoryListView::wheelEvent(QWheelEvent* e) { if (e->modifiers() & Qt::ControlModifier) { int dx( 8 * ( e->delta() > 0 ? 1 : -1 ) ); QSize s(iconSize() + QSize(dx, dx)); if (s.width() >= 8 && s.width() <= 128) setIconSize(s); } else QListView::wheelEvent(e); } void DirectoryListView::viewerResizedAction(const QSize& /*s*/) { if (viewer->isVisible()) viewer->rescalePixmap(); } qosmic-1.6.0/src/directorylistview.h000066400000000000000000000035321304321135200175410ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef DIRECTORYLISTVIEW_H #define DIRECTORYLISTVIEW_H #include #include #include #include "mainviewer.h" class DirectoryListView : public QListView { Q_OBJECT QModelIndex dragStartIndex; public: DirectoryListView(QWidget* parent=0); ~DirectoryListView(); public slots: void viewerResizedAction(const QSize&); protected: void startDrag(Qt::DropActions); void mousePressEvent(QMouseEvent*); void wheelEvent(QWheelEvent*); private: MainViewer* viewer; QImage viewerImage; QSize viewerSize; }; #endif qosmic-1.6.0/src/directoryviewwidget.cpp000066400000000000000000000337371304321135200204160ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include "directoryviewwidget.h" #include "logger.h" DirectoryViewWidget::DirectoryViewWidget(QWidget* parent) : QWidget(parent) { setupUi(this); QSettings s; s.beginGroup("directoryview"); int icon_size = s.value("iconsize", 48).toInt(); path = s.value("lastdirectory", QDir::homePath()).toString(); histEntries = s.value("dirhistory", QStringList() << path).toStringList(); sort_type = (SortType)s.value("sorttype", NAME).toInt(); sort_order = (Qt::SortOrder)s.value("sortorder", Qt::AscendingOrder).toInt(); bool show_hidden = s.value("showhidden", false).toBool(); view_type = (ViewType)s.value("viewtype", SHORT).toInt(); QStringList filters; filters << "*.flam3" << "*.flam" << "*.flame" << "*.lua"; model = new QFileSystemModel(); model->setNameFilters(filters); model->setFilter(QDir::AllEntries | QDir::AllDirs | QDir::NoDotAndDotDot); model->setNameFilterDisables(false); iconProvider = new FlamFileIconProvider; model->setIconProvider(iconProvider); model->setRootPath(path); m_dirListView->setIconSize(QSize(icon_size, icon_size)); m_dirListView->setSpacing(2); m_dirListView->setModel(model); m_dirListView->setRootIndex(model->index(path)); m_treeView->setModel(model); m_treeView->setRootIndex(model->index(path)); comboListModel = new QStringListModel(histEntries); m_dirComboBox->setModel(comboListModel); m_dirComboBox->setCurrentIndex(m_dirComboBox->findText(path)); histEntries.clear(); histEntries << path; currHistEntry = 0; m_backButton->setEnabled(currHistEntry > 0); m_forwardButton->setEnabled(currHistEntry < histEntries.size() - 1); connect(m_openButton, SIGNAL(clicked(bool)), this, SLOT(openDirectoryAction(bool))); connect(m_upButton, SIGNAL(clicked()), this, SLOT(upButtonClicked())); connect(m_forwardButton, SIGNAL(clicked()), this, SLOT(forwardButtonClicked())); connect(m_backButton, SIGNAL(clicked()), this, SLOT(backButtonClicked())); connect(m_dirComboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(historyIndexChanged(const QString&))); connect(m_dirComboBox, SIGNAL(editTextChanged(const QString&)), this, SLOT(historyIndexChanged(const QString&))); connect(m_dirListView, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(selectFileAction(const QModelIndex&))); connect(m_treeView, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(selectFileAction(const QModelIndex&))); connect(m_treeView->header(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)), this, SLOT(detailedViewSortTypeChanged(int,Qt::SortOrder))); connect(m_zoomInButton, SIGNAL(clicked()), this, SLOT(zoomInButtonClicked())); connect(m_zoomOutButton, SIGNAL(clicked()), this, SLOT(zoomOutButtonClicked())); connect(m_configButton, SIGNAL(clicked()), this, SLOT(configButtonClicked())); configmenu = new QMenu(this); sortmenu = configmenu->addMenu(tr("Sort by")); nameaction = sortmenu->addAction(model->headerData(NAME, Qt::Horizontal).toString()); sizeaction = sortmenu->addAction(model->headerData(SIZE, Qt::Horizontal).toString()); typeaction = sortmenu->addAction(model->headerData(TYPE, Qt::Horizontal).toString()); dateaction = sortmenu->addAction(model->headerData(DATE, Qt::Horizontal).toString()); nameaction->setCheckable(true); sizeaction->setCheckable(true); typeaction->setCheckable(true); dateaction->setCheckable(true); nameaction->setData(NAME); sizeaction->setData(SIZE); typeaction->setData(TYPE); dateaction->setData(DATE); sortactions = new QActionGroup(this); sortactions->addAction(nameaction); sortactions->addAction(sizeaction); sortactions->addAction(typeaction); sortactions->addAction(dateaction); sortmenu->addSeparator(); orderaction = sortmenu->addAction(tr("Descending")); orderaction->setCheckable(true); viewmenu = configmenu->addMenu(tr("View")); viewactions = new QActionGroup(this); shortaction = viewactions->addAction(viewmenu->addAction(tr("Short View"))); detailaction = viewactions->addAction(viewmenu->addAction(tr("Detailed View"))); shortaction->setCheckable(true); detailaction->setCheckable(true); configmenu->addSeparator(); hiddenaction = configmenu->addAction(tr("Show Hidden Files")); hiddenaction->setCheckable(true); connect(configmenu, SIGNAL(triggered(QAction*)), this, SLOT(configMenuTriggered(QAction*))); connect(viewmenu, SIGNAL(triggered(QAction*)), this, SLOT(viewMenuTriggered(QAction*))); connect(sortmenu, SIGNAL(triggered(QAction*)), this, SLOT(sortMenuTriggered(QAction*))); showHiddenFiles(show_hidden); sortBy(sort_type); setViewType(view_type); } void DirectoryViewWidget::openDirectoryAction(bool /*t*/) { QString openDir = QFileDialog::getExistingDirectory(this, tr("Select a directory"), path, QFileDialog::ShowDirsOnly); if (!openDir.isEmpty()) setCurrentPath(openDir); } void DirectoryViewWidget::selectFileAction(const QModelIndex& idx) { if (model->isDir(idx)) { QString path(model->fileInfo(idx).canonicalFilePath()); setCurrentPath(path); updateHistEntries(path); } else { QFileInfo info(model->fileInfo(idx)); QString suffix(info.suffix()); if (suffix.contains(QRegExp("^flam[e3]?$"))) { // Check for a contol modifier if (QApplication::keyboardModifiers() & Qt::ControlModifier) { logInfo("DirectoryViewWidget::selectFileAction : file appended"); emit flam3FileAppended(info.absoluteFilePath()); } else { logInfo("DirectoryViewWidget::selectFileAction : file selected"); emit flam3FileSelected(info.absoluteFilePath()); } } else if (suffix.contains(QRegExp("^lua$"))) { logInfo("DirectoryViewWidget::selectFileAction : script selected"); emit luaScriptSelected(info.absoluteFilePath()); } else logWarn(QString("DirectoryViewWidget::openDirectoryAction : unknown filetype '%1'").arg(info.fileName())); } } DirectoryViewWidget::~DirectoryViewWidget() { delete iconProvider; delete model; delete comboListModel; } void DirectoryViewWidget::setCurrentPath(QString p) { if (p.isEmpty()) return; QFileInfo info(p); if (info.exists() && info.isDir()) { if (info.isHidden() && ((model->filter() & QDir::Hidden) == 0)) showHiddenFiles(true); QModelIndex i = model->index(p); path = p; logFine(QString("DirectoryViewWidget::setCurrentPath : dir selected %1").arg(path)); model->setRootPath(path); m_dirListView->setRootIndex(i); m_treeView->setRootIndex(i); int hist_idx = m_dirComboBox->findText(path); if (hist_idx != -1) { m_dirComboBox->blockSignals(true); m_dirComboBox->setCurrentIndex(hist_idx); m_dirComboBox->blockSignals(false); } else { QStringList list; QFileInfo path_info(path); foreach (QString s, comboListModel->stringList()) { QFileInfo info(s); if (info.exists() && info.isDir() && (path_info != info)) list.append(info.canonicalFilePath()); } qSort(list.begin(), list.end(), qGreater()); list.push_front(path); m_dirComboBox->blockSignals(true); comboListModel->setStringList(list); m_dirComboBox->setCurrentIndex(0); m_dirComboBox->blockSignals(false); } } } QString DirectoryViewWidget::currentPath() { return path; } void DirectoryViewWidget::saveDetailedViewState() const { QSettings().setValue("directoryview/detailedviewstate", m_treeView->header()->saveState()); } void DirectoryViewWidget::restoreDetailedViewState() { QByteArray h_state = QSettings().value("directoryview/detailedviewstate", QByteArray()).toByteArray(); QHeaderView* header = m_treeView->header(); if (!header->restoreState(h_state)) { logInfo("DirectoryViewWidget::restoreDetailedViewState : setting default state"); header->resizeSection(NAME, 300); } } void DirectoryViewWidget::showEvent(QShowEvent* event) { QWidget::showEvent(event); if (!event->spontaneous()) { if (view_type == DETAILED) restoreDetailedViewState(); } } void DirectoryViewWidget::hideEvent(QHideEvent* /*event*/) { if (view_type == DETAILED) saveDetailedViewState(); } void DirectoryViewWidget::closeEvent(QCloseEvent* /*e*/) { logInfo("DirectoryViewWidget::closeEvent : saving settings"); QSettings s; s.beginGroup("directoryview"); s.setValue("lastdirectory", path); s.setValue("iconsize", m_dirListView->iconSize().width()); s.setValue("dirhistory", comboListModel->stringList()); s.setValue("sortorder", sort_order); s.setValue("sorttype", sort_type); s.setValue("viewtype", view_type); s.setValue("showhidden", (model->filter() & QDir::Hidden) != 0); s.setValue("detailedviewstate", m_treeView->header()->saveState()); s.endGroup(); } void DirectoryViewWidget::upButtonClicked() { QDir dir(model->rootDirectory()); if (dir.cdUp()) { QString path(dir.canonicalPath()); setCurrentPath(path); updateHistEntries(path); } } void DirectoryViewWidget::forwardButtonClicked() { if (currHistEntry < (histEntries.size() - 1)) { setCurrentPath(histEntries.at(++currHistEntry)); m_backButton->setEnabled(currHistEntry > 0); m_forwardButton->setEnabled(currHistEntry < histEntries.size() - 1); } } void DirectoryViewWidget::backButtonClicked() { if (currHistEntry > 0) { setCurrentPath(histEntries.at(--currHistEntry)); m_backButton->setEnabled(currHistEntry > 0); m_forwardButton->setEnabled(currHistEntry < histEntries.size() - 1); } } void DirectoryViewWidget::historyIndexChanged(const QString& path) { setCurrentPath(path); updateHistEntries(path); } void DirectoryViewWidget::updateHistEntries(const QString& path) { QFileInfo path_info(path); if (path_info.exists() && path_info.isDir() && (path_info != QFileInfo(histEntries.at(currHistEntry)))) { QStringList::iterator begin = histEntries.begin() + currHistEntry + 1; QStringList::iterator end = histEntries.end(); if (begin < end) histEntries.erase(begin, end); histEntries.append(path); currHistEntry = histEntries.size() - 1; m_backButton->setEnabled(currHistEntry > 0); m_forwardButton->setEnabled(currHistEntry < histEntries.size() - 1); } } void DirectoryViewWidget::configButtonClicked() { sortactions->actions().at(sort_type)->setChecked(true); viewactions->actions().at(view_type)->setChecked(true); orderaction->setChecked(sort_order == Qt::DescendingOrder); hiddenaction->setChecked((model->filter() & QDir::Hidden) != 0); configmenu->exec(m_configButton->mapToGlobal(QPoint(0,0))); } void DirectoryViewWidget::sortMenuTriggered(QAction* action) { SortType type = sort_type; if (action == orderaction) sort_order = action->isChecked() ? Qt::DescendingOrder : Qt::AscendingOrder; else type = (SortType)action->data().toInt(); sortBy(type); } void DirectoryViewWidget::viewMenuTriggered(QAction* /* action */) { setViewType(shortaction->isChecked() ? SHORT : DETAILED); } void DirectoryViewWidget::configMenuTriggered(QAction* action) { if (action == hiddenaction) showHiddenFiles(action->isChecked()); } void DirectoryViewWidget::showHiddenFiles(bool flag) { if (model) { if (flag) model->setFilter( model->filter() | QDir::Hidden ); else model->setFilter( model->filter() & ~QDir::Hidden ); } } void DirectoryViewWidget::sortBy(SortType type) { sort_type = type; if (view_type == DETAILED) m_treeView->sortByColumn(sort_type, sort_order); else if (model) model->sort(sort_type, sort_order); } DirectoryViewWidget::SortType DirectoryViewWidget::sortType() const { return sort_type; } Qt::SortOrder DirectoryViewWidget::sortOrder() const { return sort_order; } void DirectoryViewWidget::setSortOrder(Qt::SortOrder order) { sort_order = order; sortBy(sort_type); } void DirectoryViewWidget::setViewType(DirectoryViewWidget::ViewType type) { view_type = type; switch (view_type) { case SHORT: saveDetailedViewState(); m_dirListView->setVisible(true); m_dirListView->blockSignals(false); m_treeView->setVisible(false); m_treeView->blockSignals(true); sortBy(sort_type); break; case DETAILED: m_treeView->setVisible(true); m_treeView->blockSignals(false); m_dirListView->setVisible(false); m_dirListView->blockSignals(true); restoreDetailedViewState(); break; default: ; } } DirectoryViewWidget::ViewType DirectoryViewWidget::viewType() const { return view_type; } void DirectoryViewWidget::detailedViewSortTypeChanged(int section, Qt::SortOrder order) { sort_order = order; sort_type = (SortType)section; } void DirectoryViewWidget::fileImageRendered(const QString& /*path*/) { model->setIconProvider( model->iconProvider() ); } void DirectoryViewWidget::zoomInButtonClicked() { int dx( 8 ); QAbstractItemView* view = m_dirListView; if (view_type == DETAILED) view = m_treeView; QSize s(view->iconSize() + QSize(dx, dx)); if (s.width() <= 128) view->setIconSize(s); } void DirectoryViewWidget::zoomOutButtonClicked() { int dx( -8 ); QAbstractItemView* view = m_dirListView; if (view_type == DETAILED) view = m_treeView; QSize s(view->iconSize() + QSize(dx, dx)); if (s.width() >= 8) view->setIconSize(s); } qosmic-1.6.0/src/directoryviewwidget.h000066400000000000000000000067751304321135200200650ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef DIRECTORYVIEWWIDGET_H #define DIRECTORYVIEWWIDGET_H #include #include #include #include "ui_directoryviewwidget.h" #include "flamfileiconprovider.h" class DirectoryViewWidget : public QWidget, private Ui::DirectoryViewWidget { Q_OBJECT public: // these enum values are found by looking it the QFileSystemModel source enum SortType { NAME, SIZE, TYPE, DATE }; enum ViewType { SHORT, DETAILED }; public: DirectoryViewWidget(QWidget* parent=0); ~DirectoryViewWidget(); void setCurrentPath(QString); QString currentPath(); SortType sortType() const; Qt::SortOrder sortOrder() const; void setSortOrder(Qt::SortOrder); void setViewType(ViewType); ViewType viewType() const; void fileImageRendered(const QString&); signals: void flam3FileSelected(const QString&); void flam3FileAppended(const QString&); void luaScriptSelected(const QString&); protected: void closeEvent(QCloseEvent*); void showEvent(QShowEvent*); void hideEvent(QHideEvent*); void updateHistEntries(const QString &path); void saveDetailedViewState() const; void restoreDetailedViewState(); protected slots: void openDirectoryAction(bool); void selectFileAction(const QModelIndex&); void upButtonClicked(); void forwardButtonClicked(); void backButtonClicked(); void historyIndexChanged(const QString&); void configButtonClicked(); void configMenuTriggered(QAction*); void viewMenuTriggered(QAction*); void sortMenuTriggered(QAction*); void showHiddenFiles(bool); void sortBy(SortType); void detailedViewSortTypeChanged(int, Qt::SortOrder); void zoomInButtonClicked(); void zoomOutButtonClicked(); private: QFileSystemModel* model; QStringListModel* comboListModel; FlamFileIconProvider* iconProvider; int currHistEntry; QStringList histEntries; QString path; ViewType view_type; SortType sort_type; Qt::SortOrder sort_order; QMenu* configmenu; QMenu* sortmenu; QMenu* viewmenu; QAction* nameaction; QAction* dateaction; QAction* sizeaction; QAction* typeaction; QAction* orderaction; QAction* shortaction; QAction* detailaction; QAction* hiddenaction; QActionGroup* sortactions; QActionGroup* viewactions; }; #endif qosmic-1.6.0/src/doublevalueeditor.cpp000066400000000000000000000123531304321135200200200ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "doublevalueeditor.h" #include "logger.h" DoubleValueEditor::DoubleValueEditor(QWidget* parent) : QDoubleSpinBox(parent), wheelEventSignal(true), last_press(0) { setKeyboardTracking(false); connect(this, SIGNAL(valueChanged(double)), this, SIGNAL(valueUpdated())); } void DoubleValueEditor::restoreSettings() { QSettings settings; if (objectName().isEmpty()) logWarn("DoubleValueEditor::restoreSettings : nameless object found"); setSingleStep(settings.value( QString("doublevalueeditor/%1/singlestep").arg(objectName()), singleStep()).toDouble()); setDecimals(settings.value( QString("doublevalueeditor/%1/decimals").arg(objectName()), decimals()).toInt()); default_step = singleStep(); } void DoubleValueEditor::updateValue(double v) { if (value() == v) return; blockSignals(true); QDoubleSpinBox::setValue(v); blockSignals(false); } void DoubleValueEditor::keyPressEvent(QKeyEvent* e) { switch (e->key()) { case Qt::Key_BracketLeft: setSingleStep(singleStep() * 10.0); QSettings().setValue(QString("doublevalueeditor/%1/singlestep").arg(objectName()), singleStep()); break; case Qt::Key_BracketRight: setSingleStep(singleStep() * 0.10); QSettings().setValue(QString("doublevalueeditor/%1/singlestep").arg(objectName()), singleStep()); break; case Qt::Key_Return: QDoubleSpinBox::keyPressEvent(e); emit undoStateSignal(); break; case Qt::Key_Backslash: WheelValueEditor::WHEEL_EVENTS_ENABLED = ! WheelValueEditor::WHEEL_EVENTS_ENABLED; break; case Qt::Key_Plus: if (e->modifiers() & Qt::ControlModifier) { setDecimals(decimals() + 1); QSettings().setValue(QString("doublevalueeditor/%1/decimals").arg(objectName()), decimals()); } break; case Qt::Key_Minus: if (e->modifiers() & Qt::ControlModifier) { setDecimals(qMax(1, decimals() - 1)); QSettings().setValue(QString("doublevalueeditor/%1/decimals").arg(objectName()), decimals()); } break; default: QDoubleSpinBox::keyPressEvent(e); } } void DoubleValueEditor::wheelEvent(QWheelEvent* e) { if (!QDoubleSpinBox::isActiveWindow()) QDoubleSpinBox::activateWindow(); QDoubleSpinBox::setFocus(Qt::MouseFocusReason); double step = default_step = singleStep(); if (e->modifiers() & Qt::ShiftModifier) setSingleStep(step /= 10.0); else if (e->modifiers() & Qt::ControlModifier) setSingleStep(step *= 10.0); if (e->delta() > 0) stepUp(); else stepDown(); if (step != default_step) setSingleStep(default_step); if (wheelEventSignal && WheelValueEditor::WHEEL_EVENTS_ENABLED) emit valueUpdated(); } void DoubleValueEditor::mousePressEvent(QMouseEvent* e) { if (e->button() == Qt::LeftButton) { start_pos = last_pos = e->localPos(); start_value = value(); last_press = e; } } void DoubleValueEditor::mouseMoveEvent(QMouseEvent* e) { if (e->buttons() & Qt::LeftButton) { double dy = e->y() - last_pos.y(); double step = default_step = singleStep(); last_pos = e->localPos(); last_press = 0; if (e->modifiers() & Qt::ShiftModifier) setSingleStep(step /= 10.0); else if (e->modifiers() & Qt::ControlModifier) setSingleStep(step *= 10.0); if (dy < 0) { stepUp(); emit valueUpdated(); } else if (dy > 0) { stepDown(); emit valueUpdated(); } if (step != default_step) setSingleStep(default_step); } } void DoubleValueEditor::mouseReleaseEvent(QMouseEvent* e) { if (e->button() == Qt::LeftButton) { if (last_press && start_pos == e->localPos()) { QDoubleSpinBox::mousePressEvent(last_press); QDoubleSpinBox::mouseReleaseEvent(e); last_press = 0; } if (start_value != value()) emit undoStateSignal(); } } void DoubleValueEditor::setWheelEventUpdate(bool value) { wheelEventSignal = value; } // redefine these since the qdoublespinbox versions also activate the selection void DoubleValueEditor::stepUp() { updateValue(value() + singleStep()); } void DoubleValueEditor::stepDown() { updateValue(value() - singleStep()); } qosmic-1.6.0/src/doublevalueeditor.h000066400000000000000000000041511304321135200174620ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef DOUBLEVALUEEDITOR_H #define DOUBLEVALUEEDITOR_H #include #include #include #include "wheelvalueeditor.h" class DoubleValueEditor : public QDoubleSpinBox { Q_OBJECT public: DoubleValueEditor(QWidget* parent=0); void updateValue(double); void setWheelEventUpdate(bool); bool wheelEventUpdate() const; void restoreSettings(); void stepUp(); void stepDown(); signals: void valueUpdated(); void undoStateSignal(); protected: void keyPressEvent(QKeyEvent*); void wheelEvent(QWheelEvent*); void mousePressEvent(QMouseEvent*); void mouseMoveEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); private: bool wheelEventSignal; double start_value; double default_step; QPointF start_pos; QPointF last_pos; QMouseEvent* last_press; }; #endif qosmic-1.6.0/src/editmodeselectorwidget.cpp000066400000000000000000000314671304321135200210500ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "editmodeselectorwidget.h" #include "adjustscenewidget.h" #include "logger.h" EditModeSelectorWidget::EditModeSelectorWidget(FigureEditor* e, QWidget* parent) : QWidget(parent), m_xfeditor(e) { setupUi(this); m_buttonGroup.addButton(m_moveButton, FigureEditor::Move); m_buttonGroup.addButton(m_rotateButton, FigureEditor::Rotate); m_buttonGroup.addButton(m_scaleButton, FigureEditor::Scale); m_buttonGroup.addButton(m_flipButton, FigureEditor::Flip); connect(&m_buttonGroup, SIGNAL(buttonPressed(int)), this, SLOT(groupButtonPressedSlot(int))); // restore (Double/Int)ValueEditor settings m_multiplierEditor->restoreSettings(); m_rotateEditor->restoreSettings(); m_scaleEditor->restoreSettings(); reset(); QSettings settings; settings.beginGroup("editmodselectorwidget"); m_multiplierEditor->updateValue(settings.value("movemultiplier", 1.0).toDouble()); // set the dropdown menu index for the triangle selection type int selection_type = m_xfeditor->selection()->selectedType(); if (selection_type == Triangle::Type) m_selectionItemsSelector->setCurrentIndex(0); else m_selectionItemsSelector->setCurrentIndex(1); // restore the edit mode button state setSelectedButton(m_xfeditor->mode()); // set the dropdown menu index for the scene editing origin m_sceneAxesSelector->setCurrentIndex((int)m_xfeditor->transformLocation() - 1); connect(m_rotateEditor, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_rotateEditor, SIGNAL(valueUpdated()), this, SLOT(triangleRotateAction())); connect(m_scaleUpButton, SIGNAL(released()), this, SIGNAL(undoStateSignal())); connect(m_scaleUpButton, SIGNAL(pressed()), this, SLOT(triangleScaleUpAction())); connect(m_scaleDownButton, SIGNAL(released()), this, SIGNAL(undoStateSignal())); connect(m_scaleDownButton, SIGNAL(pressed()), this, SLOT(triangleScaleDownAction())); connect(m_rotateLeftButton, SIGNAL(released()), this, SIGNAL(undoStateSignal())); connect(m_rotateLeftButton, SIGNAL(pressed()), this, SLOT(triangleRotateCCWAction())); connect(m_rotateRightButton, SIGNAL(released()), this, SIGNAL(undoStateSignal())); connect(m_rotateRightButton, SIGNAL(pressed()), this, SLOT(triangleRotateCWAction())); connect(m_moveLeftButton, SIGNAL(pressed()), this, SLOT(moveTriangleLeftAction())); connect(m_moveLeftButton, SIGNAL(released()), this, SLOT(buttonReleasedSlot())); connect(m_moveRightButton, SIGNAL(pressed()), this, SLOT(moveTriangleRightAction())); connect(m_moveRightButton, SIGNAL(released()), this, SLOT(buttonReleasedSlot())); connect(m_moveUpButton, SIGNAL(pressed()), this, SLOT(moveTriangleUpAction())); connect(m_moveUpButton, SIGNAL(released()), this, SLOT(buttonReleasedSlot())); connect(m_moveDownButton, SIGNAL(pressed()), this, SLOT(moveTriangleDownAction())); connect(m_moveDownButton, SIGNAL(released()), this, SLOT(buttonReleasedSlot())); connect(m_sceneAxesSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(sceneAxesSelected(int))); connect(m_selectionItemsSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionItemsChangedAction(int))); connect(m_hFlipButton, SIGNAL(pressed()), m_xfeditor, SLOT(flipTriangleHAction())); connect(m_vFlipButton, SIGNAL(pressed()), m_xfeditor, SLOT(flipTriangleVAction())); connect(m_postTriangleButton, SIGNAL(clicked(bool)), m_xfeditor, SLOT(editPostTriangle(bool))); connect(m_resetTriangleButton, SIGNAL(pressed()), m_xfeditor, SLOT(resetTriangleCoordsAction())); connect(m_addTriangleButton, SIGNAL(pressed()), m_xfeditor, SLOT(addTriangleAction())); connect(m_delTriangleButton, SIGNAL(pressed()), m_xfeditor, SLOT(removeTriangleAction())); connect(m_xfeditor, SIGNAL(editModeChangedSignal(FigureEditor::EditMode)), this, SLOT(setSelectedButton(FigureEditor::EditMode))); connect(sceneScaleSlider, SIGNAL(valueChanged(int)), this, SLOT(sceneScaledSlot())); connect(sceneCenterSelector, SIGNAL(activated(int)), this, SLOT(sceneCenteredSlot(int))); connect(sceneConfigButton, SIGNAL(clicked(bool)), this, SLOT(sceneConfigSlot())); connect(autoScaleButton, SIGNAL(clicked(bool)), m_xfeditor, SLOT(autoScale())); connect(m_xfeditor, SIGNAL(triangleSelectedSignal(Triangle*)), this, SLOT(triangleSelectedSlot(Triangle*))); connect(this, SIGNAL(buttonPressed(FigureEditor::EditMode)), m_xfeditor, SLOT(setMode(FigureEditor::EditMode))); } void EditModeSelectorWidget::setSelectedButton(FigureEditor::EditMode id) { if (m_buttonGroup.checkedId() != id) { blockSignals(true); m_buttonGroup.button(id)->setChecked(true); m_stackedWidget->setCurrentIndex(id); blockSignals(false); } } int EditModeSelectorWidget::selectedButton() { return m_buttonGroup.checkedId(); } void EditModeSelectorWidget::groupButtonPressedSlot(int id) { emit buttonPressed((FigureEditor::EditMode)id); } void EditModeSelectorWidget::closeEvent(QCloseEvent* /*e*/) { logInfo("EditModeSelectorWidget::closeEvent : saving settings"); QSettings settings; settings.beginGroup("editmodeselectorwidget"); settings.setValue("movemultiplier", m_multiplierEditor->value()); } void EditModeSelectorWidget::triangleScaleUpAction() { double scale = (100.0 + m_scaleEditor->value()) / 100.0; if (scale == 0.0 || scale == 1.0) return; if (m_xfeditor->hasSelection()) m_xfeditor->scaleSelection(scale, scale, m_xfeditor->selectionTransformPos()); else if (m_xfeditor->postEnabled()) m_xfeditor->scaleTriangle(m_xfeditor->post(), scale, scale, m_xfeditor->triangleTransformPos()); else m_xfeditor->scaleTriangle(m_xfeditor->getSelectedTriangle(), scale, scale, m_xfeditor->triangleTransformPos()); } void EditModeSelectorWidget::triangleScaleDownAction() { double scale = (100.0 - m_scaleEditor->value()) / 100.0; if (scale == 0.0 || scale == 1.0) return; if (m_xfeditor->hasSelection()) m_xfeditor->scaleSelection(scale, scale, m_xfeditor->selectionTransformPos()); else if (m_xfeditor->postEnabled()) m_xfeditor->scaleTriangle(m_xfeditor->post(), scale, scale, m_xfeditor->triangleTransformPos()); else m_xfeditor->scaleTriangle(m_xfeditor->getSelectedTriangle(), scale, scale, m_xfeditor->triangleTransformPos()); } void EditModeSelectorWidget::triangleRotateAction() { double value = m_rotateEditor->value(); double dx = value - lastRotateValue; if (dx == 0.0) return; if (m_xfeditor->hasSelection()) m_xfeditor->rotateSelection(dx, m_xfeditor->selectionTransformPos()); else if (m_xfeditor->postEnabled()) m_xfeditor->rotateTriangle(m_xfeditor->post(), dx, m_xfeditor->triangleTransformPos()); else m_xfeditor->rotateTriangle(m_xfeditor->getSelectedTriangle(), dx, m_xfeditor->triangleTransformPos()); lastRotateValue = value; } void EditModeSelectorWidget::triangleRotateCCWAction() { double deg = qAbs(m_rotateEditor->value()); if (deg == 0.0) return; if (m_xfeditor->hasSelection()) m_xfeditor->rotateSelection(deg, m_xfeditor->selectionTransformPos()); else if (m_xfeditor->postEnabled()) m_xfeditor->rotateTriangle(m_xfeditor->post(), deg, m_xfeditor->triangleTransformPos()); else m_xfeditor->rotateTriangle(m_xfeditor->getSelectedTriangle(), deg, m_xfeditor->triangleTransformPos()); } void EditModeSelectorWidget::triangleRotateCWAction() { double deg = qAbs(m_rotateEditor->value()) * -1.0; if (deg == 0.0) return; if (m_xfeditor->hasSelection()) m_xfeditor->rotateSelection(deg, m_xfeditor->selectionTransformPos()); else if (m_xfeditor->postEnabled()) m_xfeditor->rotateTriangle(m_xfeditor->post(), deg, m_xfeditor->triangleTransformPos()); else m_xfeditor->rotateTriangle(m_xfeditor->getSelectedTriangle(), deg, m_xfeditor->triangleTransformPos()); } void EditModeSelectorWidget::triangleSelectedSlot(Triangle* t) { selectedTriangle = t; reset(); } // Call this slot when the move buttons are released(), and emit an // undo signal when the button is no longer pressed. void EditModeSelectorWidget::buttonReleasedSlot() { if (QApplication::mouseButtons() == Qt::NoButton) emit undoStateSignal(); } void EditModeSelectorWidget::moveTriangleLeftAction() { if (m_xfeditor->hasSelection()) m_xfeditor->moveSelectionBy(m_multiplierEditor->value()*(-1.0), 0.0); else if (m_xfeditor->postEnabled()) m_xfeditor->moveTriangleBy(m_xfeditor->post(), m_multiplierEditor->value()*(-1.0), 0.0); else m_xfeditor->moveTriangleBy(m_xfeditor->getSelectedTriangle(), m_multiplierEditor->value()*(-1.0), 0.0); } void EditModeSelectorWidget::moveTriangleRightAction() { if (m_xfeditor->hasSelection()) m_xfeditor->moveSelectionBy(m_multiplierEditor->value(),0.0); else if (m_xfeditor->postEnabled()) m_xfeditor->moveTriangleBy(m_xfeditor->post(), m_multiplierEditor->value(), 0.0); else m_xfeditor->moveTriangleBy(m_xfeditor->getSelectedTriangle(), m_multiplierEditor->value(),0.0); } void EditModeSelectorWidget::moveTriangleUpAction() { if (m_xfeditor->hasSelection()) m_xfeditor->moveSelectionBy(0.0, m_multiplierEditor->value()); else if (m_xfeditor->postEnabled()) m_xfeditor->moveTriangleBy(m_xfeditor->post(), 0.0, m_multiplierEditor->value()); else m_xfeditor->moveTriangleBy(m_xfeditor->getSelectedTriangle(), 0.0, m_multiplierEditor->value()); } void EditModeSelectorWidget::moveTriangleDownAction() { if (m_xfeditor->hasSelection()) m_xfeditor->moveSelectionBy(0.0, m_multiplierEditor->value()*(-1.0)); else if (m_xfeditor->postEnabled()) m_xfeditor->moveTriangleBy(m_xfeditor->post(), 0.0, m_multiplierEditor->value()*(-1.0)); else m_xfeditor->moveTriangleBy(m_xfeditor->getSelectedTriangle(), 0.0, m_multiplierEditor->value()*(-1.0)); } void EditModeSelectorWidget::rotateTextEditedSlot() { double deg = m_rotateEditor->value(); if (deg == 0.0) return; if (m_xfeditor->hasSelection()) m_xfeditor->rotateSelection(deg, m_xfeditor->selectionTransformPos()); else if (m_xfeditor->postEnabled()) m_xfeditor->rotateTriangle(m_xfeditor->post(), deg, m_xfeditor->triangleTransformPos()); else m_xfeditor->rotateTriangle(m_xfeditor->getSelectedTriangle(), deg, m_xfeditor->triangleTransformPos()); } void EditModeSelectorWidget::toggleMarkAction(bool flag) { m_xfeditor->setMarkVisible(flag); } void EditModeSelectorWidget::selectionItemsChangedAction(int idx) { TriangleSelection* selection = m_xfeditor->selection(); if (idx == 0) selection->setSelectedType(Triangle::Type); else selection->setSelectedType(NodeItem::Type); if (selection->isVisible()) { selection->clear(); selection->selectCoveredItems(); } } void EditModeSelectorWidget::reset() { m_rotateEditor->updateValue(0.0); lastRotateValue = 0.0; m_postTriangleButton->setChecked(m_xfeditor->postEnabled()); } void EditModeSelectorWidget::sceneAxesSelected(int idx) { idx++; // FigureEditor::SceneLocation enum contains plus one item toggleMarkAction(idx == (int)FigureEditor::Mark); m_xfeditor->setTransformLocation((FigureEditor::SceneLocation)idx); m_xfeditor->update(); reset(); } void EditModeSelectorWidget::sceneScaledSlot() { int value = sceneScaleSlider->dx(); Qt::KeyboardModifiers mods = QApplication::keyboardModifiers(); double scale; if (value > 0) { if (mods & Qt::ShiftModifier) scale = 1.01; else if (mods & Qt::ControlModifier) scale = 1.10; else scale = 1.05; } else if (value < 0) { if (mods & Qt::ShiftModifier) scale = 0.99; else if (mods & Qt::ControlModifier) scale = 0.9090; else scale = 0.9523; } else return; m_xfeditor->scaleBasis(scale, scale); } void EditModeSelectorWidget::sceneCenteredSlot(int idx) { m_xfeditor->setCenteredScaling(static_cast(idx)); } void EditModeSelectorWidget::sceneConfigSlot() { AdjustSceneWidget dialog(m_xfeditor, this); dialog.move(QCursor::pos() + QPoint(0, -dialog.height())); dialog.exec(); } qosmic-1.6.0/src/editmodeselectorwidget.h000066400000000000000000000051421304321135200205040ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef EDITMODESELECTORWIDGET_H #define EDITMODESELECTORWIDGET_H #include #include "ui_editmodeselectorwidget.h" #include "xfedit.h" class EditModeSelectorWidget : public QWidget, private Ui::EditModeSelectorWidget { Q_OBJECT FigureEditor* m_xfeditor; Triangle* selectedTriangle; QButtonGroup m_buttonGroup; double lastRotateValue; public: EditModeSelectorWidget(FigureEditor*, QWidget* parent=0); void setFigureEditor(FigureEditor*); int selectedButton(); void reset(); public slots: void setSelectedButton(FigureEditor::EditMode); void triangleSelectedSlot(Triangle*); signals: void buttonPressed(FigureEditor::EditMode); void undoStateSignal(); private slots: void groupButtonPressedSlot(int); void triangleRotateAction(); void triangleRotateCWAction(); void triangleRotateCCWAction(); void moveTriangleLeftAction(); void moveTriangleRightAction(); void moveTriangleUpAction(); void moveTriangleDownAction(); void rotateTextEditedSlot(); void toggleMarkAction(bool); void triangleScaleUpAction(); void triangleScaleDownAction(); void sceneAxesSelected(int); void selectionItemsChangedAction(int); void sceneScaledSlot(); void sceneCenteredSlot(int); void sceneConfigSlot(); void buttonReleasedSlot(); protected: void closeEvent(QCloseEvent*); }; #endif qosmic-1.6.0/src/flam3filestream.cpp000066400000000000000000000103171304321135200173560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "qosmic.h" #include "flam3filestream.h" #include "logger.h" Flam3FileStream::Flam3FileStream(QFile* f) : m_file(f) { } QFile* Flam3FileStream::file() const { return m_file; } void Flam3FileStream::setFile(QFile* f) { m_file = f; } bool Flam3FileStream::read(GenomeVector* genomes) { int ncps(0); flam3_genome* in; if (read(&in, &ncps)) { genomes->setData(in, ncps); return true; } return false; } Flam3FileStream& Flam3FileStream::operator>>(GenomeVector* genomes) { int ncps(0); flam3_genome* in; if (read(&in, &ncps)) genomes->insertRows(genomes->size(), ncps, in); return *this; } bool Flam3FileStream::read(flam3_genome** in, int* ncps) { if (!m_file->open(QIODevice::ReadOnly)) return false; FILE* fd = fdopen(m_file->handle(), "r"); // 'in' points to a static defined in flam3.c *in = Util::read_from_file(fd, m_file->fileName().toLatin1().data(), 1, ncps); fclose(fd); m_file->close(); if (*ncps < 1) return false; // sanitize the genomes to avoid strange behavior and problems with libflam3 for (int n = 0 ; n < *ncps ; n++) { flam3_genome* g = *in + n; g->symmetry = 1; // clear genome symmetry flag g->ntemporal_samples = 1; // temporal_samples is only for animations g->interpolation = flam3_interpolation_linear; // animation interp } return true; } bool Flam3FileStream::write(GenomeVector* genomes) { return write(genomes->data(), genomes->size()); } Flam3FileStream& Flam3FileStream::operator<<(GenomeVector* genomes) { write(genomes); return *this; } bool Flam3FileStream::write(flam3_genome* genomes, int ngenomes) { if (ngenomes < 1) { logWarn("Flam3FileStream::write : cannot write < 1 genome"); return false; } if (!m_file->open(QIODevice::WriteOnly)) return false; logInfo(QString("Flam3FileStream::write : writing %1 genomes to '%2'") .arg(ngenomes).arg(m_file->fileName())); FILE* fd = fdopen(m_file->handle(), "w"); // check for error again? if (ngenomes > 1) { char attrs[] = ""; fprintf(fd, "\n"); for (int i = 0 ; i < ngenomes ; i++) { flam3_genome* g = genomes + i; int n = g->symmetry; g->symmetry = 0; Util::write_to_file(fd, g, attrs, 0); g->symmetry = n; } fprintf(fd, "\n"); } else { // always clear the genome symmetry since the parser modifies the // genome when reading this tag. char attrs[] = ""; int n = genomes[0].symmetry; genomes[0].symmetry = 0; Util::write_to_file(fd, genomes, attrs, 0); genomes[0].symmetry = n; } int rv = fclose(fd); m_file->close(); return rv == 0; } /** * A static method that saves the given genome to the autosave file. * The type argument gives the conditions for performing a save, and they * must match the current settings for the GenomeVector as set by the user. */ void Flam3FileStream::autoSave(GenomeVector* genomes, int type) { if (genomes->autoSave() & type) { QFile file(QOSMIC_AUTOSAVE); Flam3FileStream s(&file); s.write(genomes); } } qosmic-1.6.0/src/flam3filestream.h000066400000000000000000000034751304321135200170320ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef FLAM3FILESTREAM_H #define FLAM3FILESTREAM_H #include #include "genomevector.h" class Flam3FileStream { QFile* m_file; public: Flam3FileStream(QFile*); bool read(GenomeVector*); bool read(flam3_genome**, int*); bool write(GenomeVector*); bool write(flam3_genome*, int); void setFile(QFile*); QFile* file() const; Flam3FileStream& operator>>(GenomeVector*); Flam3FileStream& operator<<(GenomeVector*); static void autoSave(GenomeVector*, int =GenomeVector::AlwaysSave); }; #endif // FLAM3FILESTREAM_H qosmic-1.6.0/src/flam3util.cpp000066400000000000000000000625041304321135200162050ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include #include #include "logger.h" #include "flam3util.h" namespace Util { static QMap variation_map; const QMap& flam3_variations() { return variation_map; } static QStringList variation_name_list; const QStringList& variation_names() { return variation_name_list; } int variation_number(const char* var) { QString s(var); return variation_number( s ); } int variation_number(const QString& s) { // reverse map variations, if (!variation_map.contains(s)) return -1; return variation_map.value( s ); } QColor get_xform_color(flam3_genome* g, flam3_xform* xform) { int idx = (int)(xform->color * 255.0); flam3_palette_entry p = g->palette[idx]; return QColor::fromRgbF(p.color[0], p.color[1], p.color[2]); } QTextStream& operator<<( QTextStream& os, flam3_genome& g ) { os << "symmetry: " << g.symmetry << "\ntime: " << g.time << "\nwidth, height: " << g.width << ", " << g.height << "\ngenome has " << g.num_xforms << " xforms" << "\nsample_density: " << g.sample_density << "\nspatial_oversample: " << g.spatial_oversample << "\nspatial_filter_radius: " << g.spatial_filter_radius << "\ncenter: " << g.center[0] << ", " << g.center[1] << "\nzoom: " << g.zoom; for (int n = 0 ; n < g.num_xforms ; n++) os << "\nxform " << n << " density: " << g.xform[n].density; os << endl; return os; } QTextStream& operator<<( QTextStream& os, flam3_frame& f ) { os << "ngenomes: " << f.ngenomes << "\nbits: " << f.bits << "\npixel_aspect_ratio: " << f.pixel_aspect_ratio << "\nverbose: " << f.verbose << "\n--genome--\n" << f.genomes; return os; } struct xform_variable_accessor { xform_variable_accessor() {} virtual double get_var(flam3_xform*)=0; virtual void set_var(flam3_xform*, double)=0; }; static QHash xform_variable_accessors; #define create_xform_variable_accessor(name) \ struct xform_variable_accessor_##name : public xform_variable_accessor \ {\ xform_variable_accessor_##name() {} \ double get_var(flam3_xform* xform) { return xform->name; } \ void set_var(flam3_xform* xform, double value) { xform->name = value; } \ }; create_xform_variable_accessor(blob_low) create_xform_variable_accessor(blob_high) create_xform_variable_accessor(blob_waves) create_xform_variable_accessor(pdj_a) create_xform_variable_accessor(pdj_b) create_xform_variable_accessor(pdj_c) create_xform_variable_accessor(pdj_d) create_xform_variable_accessor(fan2_x) create_xform_variable_accessor(fan2_y) create_xform_variable_accessor(rings2_val) create_xform_variable_accessor(perspective_angle) create_xform_variable_accessor(perspective_dist) create_xform_variable_accessor(julian_power) create_xform_variable_accessor(julian_dist) create_xform_variable_accessor(juliascope_power) create_xform_variable_accessor(juliascope_dist) create_xform_variable_accessor(radial_blur_angle) create_xform_variable_accessor(pie_slices) create_xform_variable_accessor(pie_rotation) create_xform_variable_accessor(pie_thickness) create_xform_variable_accessor(ngon_sides) create_xform_variable_accessor(ngon_power) create_xform_variable_accessor(ngon_circle) create_xform_variable_accessor(ngon_corners) create_xform_variable_accessor(curl_c1) create_xform_variable_accessor(curl_c2) create_xform_variable_accessor(rectangles_x) create_xform_variable_accessor(rectangles_y) create_xform_variable_accessor(amw_amp) create_xform_variable_accessor(disc2_rot) create_xform_variable_accessor(disc2_twist) create_xform_variable_accessor(super_shape_rnd) create_xform_variable_accessor(super_shape_m) create_xform_variable_accessor(super_shape_n1) create_xform_variable_accessor(super_shape_n2) create_xform_variable_accessor(super_shape_n3) create_xform_variable_accessor(super_shape_holes) create_xform_variable_accessor(flower_petals) create_xform_variable_accessor(flower_holes) create_xform_variable_accessor(conic_eccentricity) create_xform_variable_accessor(conic_holes) create_xform_variable_accessor(parabola_height) create_xform_variable_accessor(parabola_width) create_xform_variable_accessor(bent2_x) create_xform_variable_accessor(bent2_y) create_xform_variable_accessor(bipolar_shift) create_xform_variable_accessor(cell_size) create_xform_variable_accessor(cpow_r) create_xform_variable_accessor(cpow_i) create_xform_variable_accessor(cpow_power) create_xform_variable_accessor(curve_xamp) create_xform_variable_accessor(curve_yamp) create_xform_variable_accessor(curve_xlength) create_xform_variable_accessor(curve_ylength) create_xform_variable_accessor(escher_beta) create_xform_variable_accessor(lazysusan_spin) create_xform_variable_accessor(lazysusan_space) create_xform_variable_accessor(lazysusan_twist) create_xform_variable_accessor(lazysusan_x) create_xform_variable_accessor(lazysusan_y) create_xform_variable_accessor(modulus_x) create_xform_variable_accessor(modulus_y) create_xform_variable_accessor(oscope_separation) create_xform_variable_accessor(oscope_frequency) create_xform_variable_accessor(oscope_amplitude) create_xform_variable_accessor(oscope_damping) create_xform_variable_accessor(popcorn2_x) create_xform_variable_accessor(popcorn2_y) create_xform_variable_accessor(popcorn2_c) create_xform_variable_accessor(separation_x) create_xform_variable_accessor(separation_xinside) create_xform_variable_accessor(separation_y) create_xform_variable_accessor(separation_yinside) create_xform_variable_accessor(split_xsize) create_xform_variable_accessor(split_ysize) create_xform_variable_accessor(splits_x) create_xform_variable_accessor(splits_y) create_xform_variable_accessor(stripes_space) create_xform_variable_accessor(stripes_warp) create_xform_variable_accessor(wedge_angle) create_xform_variable_accessor(wedge_hole) create_xform_variable_accessor(wedge_count) create_xform_variable_accessor(wedge_swirl) create_xform_variable_accessor(wedge_julia_angle) create_xform_variable_accessor(wedge_julia_count) create_xform_variable_accessor(wedge_julia_power) create_xform_variable_accessor(wedge_julia_dist) create_xform_variable_accessor(wedge_sph_angle) create_xform_variable_accessor(wedge_sph_count) create_xform_variable_accessor(wedge_sph_hole) create_xform_variable_accessor(wedge_sph_swirl) create_xform_variable_accessor(whorl_inside) create_xform_variable_accessor(whorl_outside) create_xform_variable_accessor(waves2_freqx) create_xform_variable_accessor(waves2_scalex) create_xform_variable_accessor(waves2_freqy) create_xform_variable_accessor(waves2_scaley) create_xform_variable_accessor(auger_sym) create_xform_variable_accessor(auger_weight) create_xform_variable_accessor(auger_freq) create_xform_variable_accessor(auger_scale) create_xform_variable_accessor(flux_spread) create_xform_variable_accessor(mobius_re_a) create_xform_variable_accessor(mobius_im_a) create_xform_variable_accessor(mobius_re_b) create_xform_variable_accessor(mobius_im_b) create_xform_variable_accessor(mobius_re_c) create_xform_variable_accessor(mobius_im_c) create_xform_variable_accessor(mobius_re_d) create_xform_variable_accessor(mobius_im_d) #define add_xform_variable_accessor(name) \ xform_variable_accessors.insert(QString(#name), new xform_variable_accessor_##name) void init_xform_variable_accessors() { add_xform_variable_accessor(blob_low); add_xform_variable_accessor(blob_high); add_xform_variable_accessor(blob_waves); add_xform_variable_accessor(pdj_a); add_xform_variable_accessor(pdj_b); add_xform_variable_accessor(pdj_c); add_xform_variable_accessor(pdj_d); add_xform_variable_accessor(fan2_x); add_xform_variable_accessor(fan2_y); add_xform_variable_accessor(rings2_val); add_xform_variable_accessor(perspective_angle); add_xform_variable_accessor(perspective_dist); add_xform_variable_accessor(julian_power); add_xform_variable_accessor(julian_dist); add_xform_variable_accessor(juliascope_power); add_xform_variable_accessor(juliascope_dist); add_xform_variable_accessor(radial_blur_angle); add_xform_variable_accessor(pie_slices); add_xform_variable_accessor(pie_rotation); add_xform_variable_accessor(pie_thickness); add_xform_variable_accessor(ngon_sides); add_xform_variable_accessor(ngon_power); add_xform_variable_accessor(ngon_circle); add_xform_variable_accessor(ngon_corners); add_xform_variable_accessor(curl_c1); add_xform_variable_accessor(curl_c2); add_xform_variable_accessor(rectangles_x); add_xform_variable_accessor(rectangles_y); add_xform_variable_accessor(amw_amp); add_xform_variable_accessor(disc2_rot); add_xform_variable_accessor(disc2_twist); add_xform_variable_accessor(super_shape_rnd); add_xform_variable_accessor(super_shape_m); add_xform_variable_accessor(super_shape_n1); add_xform_variable_accessor(super_shape_n2); add_xform_variable_accessor(super_shape_n3); add_xform_variable_accessor(super_shape_holes); add_xform_variable_accessor(flower_petals); add_xform_variable_accessor(flower_holes); add_xform_variable_accessor(conic_eccentricity); add_xform_variable_accessor(conic_holes); add_xform_variable_accessor(parabola_height); add_xform_variable_accessor(parabola_width); add_xform_variable_accessor(bent2_x); add_xform_variable_accessor(bent2_y); add_xform_variable_accessor(bipolar_shift); add_xform_variable_accessor(cell_size); add_xform_variable_accessor(cpow_r); add_xform_variable_accessor(cpow_i); add_xform_variable_accessor(cpow_power); add_xform_variable_accessor(curve_xamp); add_xform_variable_accessor(curve_yamp); add_xform_variable_accessor(curve_xlength); add_xform_variable_accessor(curve_ylength); add_xform_variable_accessor(escher_beta); add_xform_variable_accessor(lazysusan_spin); add_xform_variable_accessor(lazysusan_space); add_xform_variable_accessor(lazysusan_twist); add_xform_variable_accessor(lazysusan_x); add_xform_variable_accessor(lazysusan_y); add_xform_variable_accessor(modulus_x); add_xform_variable_accessor(modulus_y); add_xform_variable_accessor(oscope_separation); add_xform_variable_accessor(oscope_frequency); add_xform_variable_accessor(oscope_amplitude); add_xform_variable_accessor(oscope_damping); add_xform_variable_accessor(popcorn2_x); add_xform_variable_accessor(popcorn2_y); add_xform_variable_accessor(popcorn2_c); add_xform_variable_accessor(separation_x); add_xform_variable_accessor(separation_xinside); add_xform_variable_accessor(separation_y); add_xform_variable_accessor(separation_yinside); add_xform_variable_accessor(split_xsize); add_xform_variable_accessor(split_ysize); add_xform_variable_accessor(splits_x); add_xform_variable_accessor(splits_y); add_xform_variable_accessor(stripes_space); add_xform_variable_accessor(stripes_warp); add_xform_variable_accessor(wedge_angle); add_xform_variable_accessor(wedge_hole); add_xform_variable_accessor(wedge_count); add_xform_variable_accessor(wedge_swirl); add_xform_variable_accessor(wedge_julia_angle); add_xform_variable_accessor(wedge_julia_count); add_xform_variable_accessor(wedge_julia_power); add_xform_variable_accessor(wedge_julia_dist); add_xform_variable_accessor(wedge_sph_angle); add_xform_variable_accessor(wedge_sph_count); add_xform_variable_accessor(wedge_sph_hole); add_xform_variable_accessor(wedge_sph_swirl); add_xform_variable_accessor(whorl_inside); add_xform_variable_accessor(whorl_outside); add_xform_variable_accessor(waves2_freqx); add_xform_variable_accessor(waves2_scalex); add_xform_variable_accessor(waves2_freqy); add_xform_variable_accessor(waves2_scaley); add_xform_variable_accessor(auger_sym); add_xform_variable_accessor(auger_weight); add_xform_variable_accessor(auger_freq); add_xform_variable_accessor(auger_scale); add_xform_variable_accessor(flux_spread); add_xform_variable_accessor(mobius_re_a); add_xform_variable_accessor(mobius_im_a); add_xform_variable_accessor(mobius_re_b); add_xform_variable_accessor(mobius_im_b); add_xform_variable_accessor(mobius_re_c); add_xform_variable_accessor(mobius_im_c); add_xform_variable_accessor(mobius_re_d); add_xform_variable_accessor(mobius_im_d); } double get_xform_variable ( flam3_xform* xform, QString name ) { QString lookup(name.replace(QChar(' '),QString("_")).toLower()); xform_variable_accessor* accessor = xform_variable_accessors.value(lookup); if (accessor) return accessor->get_var(xform); else logError(QString("Util::get_xform_variable : Unknown variable '%1'").arg(lookup)); return 0.; } void set_xform_variable ( flam3_xform* xform, QString name, double value ) { QString lookup(name.replace(QChar(' '),QString("_")).toLower()); xform_variable_accessor* accessor = xform_variable_accessors.value(lookup); if (accessor) accessor->set_var(xform, value); else logError(QString("Util::set_xform_variable : Unknown variable '%1'").arg(lookup)); } QStringList& get_variable_names() { static QStringList var_names = (QStringList() << "blob_low" << "blob_high" << "blob_waves" << "pdj_a" << "pdj_b" << "pdj_c" << "pdj_d" << "fan2_x" << "fan2_y" << "rings2_val" << "perspective_angle" << "perspective_dist" << "julian_power" << "julian_dist" << "juliascope_power" << "juliascope_dist" << "radial_blur_angle" << "pie_slices" << "pie_rotation" << "pie_thickness" << "ngon_sides" << "ngon_power" << "ngon_circle" << "ngon_corners" << "curl_c1" << "curl_c2" << "rectangles_x" << "rectangles_y" << "amw_amp" << "disc2_rot" << "disc2_twist" << "super_shape_rnd" << "super_shape_m" << "super_shape_n1" << "super_shape_n2" << "super_shape_n3" << "super_shape_holes" << "flower_petals" << "flower_holes" << "conic_eccentricity" << "conic_holes" << "parabola_height" << "parabola_width" << "bent2_x" << "bent2_y" << "bipolar_shift" << "cell_size" << "cpow_r" << "cpow_i" << "cpow_power" << "curve_xamp" << "curve_yamp" << "curve_xlength" << "curve_ylength" << "escher_beta" << "lazysusan_spin" << "lazysusan_space" << "lazysusan_twist" << "lazysusan_x" << "lazysusan_y" << "modulus_x" << "modulus_y" << "oscope_separation" << "oscope_frequency" << "oscope_amplitude" << "oscope_damping" << "popcorn2_x" << "popcorn2_y" << "popcorn2_c" << "separation_x" << "separation_xinside" << "separation_y" << "separation_yinside" << "split_xsize" << "split_ysize" << "splits_x" << "splits_y" << "stripes_space" << "stripes_warp" << "wedge_angle" << "wedge_hole" << "wedge_count" << "wedge_swirl" << "wedge_julia_angle" << "wedge_julia_count" << "wedge_julia_power" << "wedge_julia_dist" << "wedge_sph_angle" << "wedge_sph_count" << "wedge_sph_hole" << "wedge_sph_swirl" << "whorl_inside" << "whorl_outside" << "waves2_freqx" << "waves2_scalex" << "waves2_freqy" << "waves2_scaley" << "auger_sym" << "auger_weight" << "auger_freq" << "auger_scale" << "flux_spread" << "mobius_Re a" << "mobius_Im a" << "mobius_Re b" << "mobius_Im b" << "mobius_Re c" << "mobius_Im c" << "mobius_Re d" << "mobius_Im d" ); return var_names; } char* setup_C_locale() { // force use of "C" locale when reading/writing reals. // first save away the current settings. char* locale = NULL; char* lorig = setlocale(LC_NUMERIC, NULL); if (lorig == NULL) logError("Util::setup_C_locale : couldn't get current locale"); else { int slen = strlen(lorig) + 1; locale = (char*)malloc(slen); if (locale != NULL) memcpy(locale, lorig, slen); } if (setlocale(LC_NUMERIC, "C") == NULL) logError("Util::setup_C_locale : couldn't set C locale"); return locale; } void replace_C_locale(char* locale) { if (locale != NULL) { if (setlocale(LC_NUMERIC, locale) == NULL) logError("Util::replace_Ct_locale : couldn't replace locale settings"); free(locale); } } void write_to_file(FILE* fd, flam3_genome* genome, char* attrs, int edits) { char* locale = setup_C_locale(); flam3_print(fd, genome, attrs, edits); replace_C_locale(locale); } flam3_genome* read_from_file(FILE* fd, char* fn, int default_flag, int* ncps) { char* locale = setup_C_locale(); flam3_genome* g = flam3_parse_from_file(fd, fn, default_flag, ncps); replace_C_locale(locale); return g; } flam3_genome* read_xml_string(QString xml, int* ncps) { char* locale = setup_C_locale(); flam3_genome* g = flam3_parse_xml2(xml.toLatin1().data(), QString("stdin").toLatin1().data(), 1, ncps); replace_C_locale(locale); return g; } // set reasonable defaults for a new flam3_genome void init_genome(flam3_genome* g) { clear_cp(g, flam3_defaults_on); // set palette to all white and alpha = 1.0 for (int i = 0 ; i < 256 ; i++) { flam3_palette_entry* c = g->palette + i; c->index = i; c->color[0] = 1.0; c->color[1] = 1.0; c->color[2] = 1.0; c->color[3] = 1.0; } // disable symmetry (flam3.c says 0 means none, but that's not true) g->symmetry = 1; g->ntemporal_samples = 1; } // set reasonable defaults for a new flam3_xform void init_xform(flam3_xform* xform) { xform->c[0][0] = 1.0; xform->c[0][1] = 0.0; xform->c[1][0] = 0.0; xform->c[1][1] = 1.0; xform->c[2][0] = 0.0; xform->c[2][1] = 0.0; xform->post[0][0] = 1.0; xform->post[0][1] = 0.0; xform->post[1][0] = 0.0; xform->post[1][1] = 1.0; xform->post[2][0] = 0.0; xform->post[2][1] = 0.0; for (int j = 0 ; j < flam3_nvariations ; j++) xform->var[j] = 0.0; xform->var[VAR_LINEAR] = 1.0; xform->color = 0.0; xform->density = 0.5; } void add_default_xforms(flam3_genome* g, int num) { int new_idx = g->num_xforms; if (g->final_xform_enable == 1) new_idx -= 1; flam3_add_xforms(g, num, 0, 0); int last_idx = g->num_xforms - 1; if (g->final_xform_enable == 1) last_idx -= 1; for (int n = new_idx ; n <= last_idx ; n++) init_xform(g->xform + n); } void rectToPolar(double x, double y, double* r, double* p) { *r = sqrt(pow(x, 2.) + pow(y, 2.)); if (x >= 0. && y >= 0.) *p = atan( y / x ); else if (x < 0. && y >= 0.) *p = M_PI - atan( y / ((-1.)*x) ); else if (x < 0. && y < 0.) *p = M_PI + atan( y / x ); else *p = 2.*M_PI - atan( ((-1.)*y) / x ); } void rectToPolarDeg(double x, double y, double* r, double* d) { rectToPolar(x, y, r, d); *d = *d * 180. / M_PI; } void polarToRect(double r, double p, double* x, double* y) { *x = r*cos(p); *y = r*sin(p); } void polarDegToRect(double r, double p, double* x, double* y) { polarToRect( r, p * M_PI / 180., x, y); } randctx* get_isaac_randctx() { static randctx r; static bool init = false; if (init) return &r; /* Initialize the issac random number generator used by libflam3 */ long int default_isaac_seed = (long int)time(0); memset(r.randrsl, 0, RANDSIZ*sizeof(ub4)); for (int lp = 0; lp < RANDSIZ; lp++) r.randrsl[lp] = default_isaac_seed; irandinit(&r, 1); init = true; return &r; } // The static initializer routine to populate the static variables used // by the functions defined above. static const struct util_initializer { util_initializer() { for (int n = 0 ; n < flam3_nvariations ; n++) { char* name = flam3_variation_names[n]; // populate the variation name->number map variation_map.insert(name, n); // and add the variation to a list of available names variation_name_list.append(name); } // create the xform variable name accessors init_xform_variable_accessors(); } } init; } /*************************************************************************** * Any resemblance of functions, variables, or algorithms described below * here to code listed in flam3 source is more than a coincidence. Most * everything was taken from flam3-genome.c and modified to fit our own * needs. ***************************************************************************/ void Util::spin(flam3_genome* parent, flam3_genome* dest, int frame, double blend) { // Spin the parent blend*360 degrees flam3_genome* result = sheep_loop(parent, blend); // Set genome parameters result->time = (double)frame; result->interpolation = flam3_interpolation_linear; result->palette_interpolation = flam3_palette_interpolation_hsv; flam3_copy(dest, result); // Free the cp allocated in flam3_sheep_loop clear_cp(result, flam3_defaults_on); free(result); } void Util::spin_inter(flam3_genome* parents, flam3_genome* dest, int frame, double blend, bool seqflag, double stagger) { // Interpolate between rotated parents flam3_genome* result = sheep_edge(parents, blend, (int)seqflag, stagger); // Why check for random palettes on both ends? if ((parents[0].palette_index != flam3_palette_random) && (parents[1].palette_index != flam3_palette_random)) { result->palette_index = flam3_palette_interpolated; result->palette_index0 = parents[0].palette_index; result->hue_rotation0 = parents[0].hue_rotation; result->palette_index1 = parents[1].palette_index; result->hue_rotation1 = parents[1].hue_rotation; result->palette_blend = blend; } // Set genome attributes result->time = (double)frame; flam3_copy(dest, result); // Free genome storage clear_cp(result, flam3_defaults_on); free(result); } flam3_genome* Util::create_genome_sequence(flam3_genome* cp, int ncp, int* dncp, int nframes, int loops, double stagger) { if (nframes <= 0) { nframes = qMax(nframes, 1); logWarn(QString("Util::create_genome_sequence : Setting non-positive value for nframes = %1").arg(nframes)); } int tframes(0); tframes = ncp * nframes * loops; tframes += (ncp - 1) * nframes + 1; flam3_genome* dcp = (flam3_genome*)calloc(tframes, sizeof(flam3_genome)); if (dcp == NULL) { logError(QString("Util::create_genome_sequence : Couldn't calloc %1 genome structures").arg(tframes)); return 0; } int framecount(0); int seqflag; double blend; for (int i = 0 ; i < ncp ; i++) { for (int n = 0 ; n < loops ; n++) for (int frame = 0; frame < nframes; frame++) { blend = frame / (double)nframes; spin(&cp[i], &dcp[framecount], framecount, blend); framecount++; } if (i < ncp - 1) for (int frame = 0; frame < nframes; frame++) { if (0 == frame || (( nframes - 1 ) == frame)) seqflag = true; else seqflag = false; blend = frame / (double)nframes; spin_inter(&cp[i], &dcp[framecount], framecount, blend, seqflag, stagger); framecount++; } } spin(&cp[ncp - 1], &dcp[framecount], framecount, 0.0); *dncp = framecount + 1; return dcp; } flam3_genome* Util::create_genome_interpolation(flam3_genome* cp, int ncp, int* dncp, double stagger) { for (int i = 0 ; i < ncp ; i++) { if (i > 0 && cp[i].time <= cp[i-1].time) { logWarn(QString("error: control points must be sorted by time, but %1 <= %2, index %3") .arg(cp[i].time).arg(cp[i-1].time).arg(i)); return NULL; } /* Strip out all motion elements here. Why? */ // for (int j = 0 ; j < cp[i].num_xforms ; j++) // flam3_delete_motion_elements(&cp[i].xform[j]); } int first_frame = (int) cp[0].time; int last_frame = (int) cp[ncp-1].time; if (last_frame < first_frame) last_frame = first_frame; int tframes = last_frame - first_frame + 1; flam3_genome* dcp = (flam3_genome*)calloc(tframes, sizeof(flam3_genome)); if (dcp == NULL) { logError(QString("Util::create_genome_interp : Couldn't calloc %1 genome structures").arg(tframes)); return 0; } int framecount = 0; for (int ftime = first_frame ; ftime <= last_frame ; ftime += 1) { int iscp = 0; for (int i = 0; i < ncp ; i++) { if (ftime == cp[i].time) { flam3_copy(dcp + (framecount++), cp + i); iscp = 1; } } if (iscp == 0) { flam3_interpolate(cp, ncp, (double)ftime, stagger, dcp + (framecount++)); for (int i = 0 ; i < ncp ; i++) { if ( ftime == cp[i].time - 1 ) iscp = 1; } if (iscp == 0) (dcp + framecount)->interpolation_type = flam3_inttype_linear; } } // reset the time for each frame so flam3_render can find each frame for (int n = 0 ; n < framecount ; n++) (dcp + n)->time = n; *dncp = framecount; return dcp; } qosmic-1.6.0/src/flam3util.h000066400000000000000000000057441304321135200156550ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef FLAM3_UTIL #define FLAM3_UTIL #include #include #undef VERSION extern "C" { #include "flam3.h" } namespace Util { QColor get_xform_color(flam3_genome*, flam3_xform*); void set_xform_variable(flam3_xform*, QString, double); double get_xform_variable(flam3_xform*, QString); QStringList& get_variable_names(); int variation_number(const char*); int variation_number(const QString&); void write_to_file(FILE*, flam3_genome*, char*, int); flam3_genome* read_from_file(FILE*, char*, int, int*); flam3_genome* read_xml_string(QString, int*); void init_genome(flam3_genome*); void init_xform(flam3_xform*); void add_default_xforms(flam3_genome*, int num=1); const QMap& flam3_variations(); const QStringList& variation_names(); char* setup_C_locale(); void replace_C_locale(char*); flam3_genome* create_genome_sequence(flam3_genome* cp, int ncp, int* dncp, int nframes=100, int loops=1, double stagger=0.0); flam3_genome* create_genome_interpolation(flam3_genome* cp, int ncp, int* dncp, double stagger=0.0); void spin(flam3_genome* cp, flam3_genome* dcp, int framecount, double blend); void spin_inter(flam3_genome* cp, flam3_genome* dcp, int framecount, double blend, bool seqflag, double stagger); void rectToPolar(double, double, double*, double*); void rectToPolarDeg(double, double, double*, double*); void polarToRect(double, double, double*, double*); void polarDegToRect(double, double, double*, double*); randctx* get_isaac_randctx(); } /** * These are some nice output operators for the flam3_frame * and flam3_genome types. */ QTextStream& operator<<( QTextStream&, flam3_genome& ); QTextStream& operator<<( QTextStream&, flam3_frame& ); #endif qosmic-1.6.0/src/flamfileiconprovider.cpp000066400000000000000000000061471304321135200205110ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include "flamfileiconprovider.h" #include "qosmic.h" #include "logger.h" FlamFileIconProvider::FlamFileIconProvider() : QFileIconProvider(), icons_dir(QOSMIC_USERDIR), has_icons(false) { QString path("icons"); if (!icons_dir.exists(path)) icons_dir.mkpath(path); has_icons = icons_dir.cd(path); logFine(QString("FlamFileIconProvider::const : icons dir %1").arg(icons_dir.canonicalPath())); } FlamFileIconProvider::~FlamFileIconProvider() { } QIcon FlamFileIconProvider::icon(const QFileInfo& info) const { QString file_name(info.fileName()); QRegExp rex("flam(3|e)$"); if (has_icons && file_name.contains(rex)) { QString img_file(file_name); img_file.replace(rex, "png"); QFileInfo img(info.dir(), img_file); if (!img.exists()) return QFileIconProvider::icon(info); QDir cache_dir(icons_dir.canonicalPath() + info.dir().canonicalPath()); if (!cache_dir.exists() && !cache_dir.mkpath(".")) return QFileIconProvider::icon(info); QFileInfo cache_file(cache_dir, img_file); if (cache_file.exists() && (cache_file.lastModified() > img.lastModified())) { logFiner(QString("FlamFileIconProvider::icon : found cached %1").arg(cache_file.absoluteFilePath())); return QIcon(cache_file.absoluteFilePath()); } else { QString cache(cache_file.absoluteFilePath()); QImage buf(img.absoluteFilePath()); if (!buf.isNull() && buf.scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation).save(cache)) { logInfo(QString("FlamFileIconProvider::icon : creating icon %1").arg(cache)); return QIcon(cache); } } } return QFileIconProvider::icon(info); } QIcon FlamFileIconProvider::icon(IconType type) const { return QFileIconProvider::icon(type); } QString FlamFileIconProvider::type(const QFileInfo& info) const { return QFileIconProvider::type(info); } qosmic-1.6.0/src/flamfileiconprovider.h000066400000000000000000000032331304321135200201470ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef FLAMFILEICONPROVIDER_H #define FLAMFILEICONPROVIDER_H #include class FlamFileIconProvider : public QFileIconProvider { QDir icons_dir; bool has_icons; public: FlamFileIconProvider(); ~FlamFileIconProvider(); QIcon icon(const QFileInfo& info) const; QIcon icon(IconType type) const; QString type(const QFileInfo& info) const; }; #endif qosmic-1.6.0/src/genomecolorselector.cpp000066400000000000000000000123001304321135200203440ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include "genomecolorselector.h" #include "checkersbrush.h" #include "logger.h" GenomeColorSelector::GenomeColorSelector(QWidget* parent, GenomeVector* g) : QLabel(parent), genome(g), selected_y(0) { QSettings settings; show_histogram = settings.value("genomecolorselector/showhistogram", true).toBool(); popupMenu = new QMenu(tr("ColorSelector")); histMenuAction = new QAction(tr("Show Histogram"),this); histMenuAction->setCheckable(true); histMenuAction->setChecked(show_histogram); popupMenu->addAction(histMenuAction); connect(histMenuAction, SIGNAL(toggled(bool)), this, SLOT(toggleShowHistAction(bool))); } void GenomeColorSelector::toggleShowHistAction(bool flag) { show_histogram = flag; QSettings settings; settings.setValue("genomecolorselector/showhistogram", show_histogram); repaintLabel(); } void GenomeColorSelector::mousePressEvent (QMouseEvent* e) { if (e->button() == Qt::LeftButton) { last_y = selected_y; int y = 255 - e->pos().y(); if (last_y != y) emit colorSelected(y / 255.); } else if (e->button() == Qt::RightButton) { popupMenu->exec(e->globalPos()); } } void GenomeColorSelector::mouseMoveEvent (QMouseEvent* e) { if (e->buttons() & Qt::LeftButton && e->y() >= 0 && e->y() < 256) { int y = 255 - e->pos().y(); emit colorSelected(y / 255.); } } void GenomeColorSelector::mouseReleaseEvent (QMouseEvent* e) { if (e->button() == Qt::LeftButton) { if (last_y != selected_y) emit undoStateSignal(); } } #define genome_ptr (genome->selectedGenome()) void GenomeColorSelector::setGenomeVector(GenomeVector* v) { genome = v; } void GenomeColorSelector::repaintLabel() { if (genome_ptr) { QSize s(maximumSize()); int width(s.width()); QImage palette(s, QImage::Format_RGB32); QPainter p(&palette); p.fillRect(palette.rect(), CheckersBrush(16)); if (show_histogram) { // draw the genome color histogram over the palette double color_hist[256]; memset(color_hist, 0, sizeof(double)*256); if (flam3_colorhist(genome_ptr, 1, Util::get_isaac_randctx(), color_hist)) logWarn(QString("GenomeColorSelector::repaintLabel : couldn't get flam3 color histogram")); QColor c; double rc, gc, bc, ac; int chist_scale = ( width / 4 ) * width; for (int i = 0 ; i < 256 ; i++) { double* color = genome_ptr->palette[i].color; rc = color[0]; gc = color[1]; bc = color[2]; ac = color[3]; if (rc < 0.0 || rc > 1.0 || bc < 0.0 || bc > 1.0 || gc < 0.0 || gc > 1.0) return; if (selected_y - 1 == i) // roundoff voodoo { c = QColor::fromRgbF(1.0 - rc, 1.0 - gc, 1.0 - bc); p.setPen(c); p.drawLine(0, 255 - i, width, 255 - i); } else { c = QColor::fromRgbF(rc, gc, bc, ac); p.setPen(c); p.drawLine(0, 255 - i, width, 255 - i); p.setPen(c.darker(300)); p.drawLine(0, 255 - i, (width / 2) , 255 - i); p.setPen(QColor::fromRgb(255,255,255,192)); p.drawLine(0, 255 - i, chist_scale * color_hist[i], 255 - i); } } } else { // just draw the genome color palette on the label QColor c; double rc, gc, bc, ac; for (int i = 0 ; i < 256 ; i++) { double* color = genome_ptr->palette[i].color; rc = color[0]; gc = color[1]; bc = color[2]; ac = color[3]; if (rc < 0.0 || rc > 1.0 || bc < 0.0 || bc > 1.0 || gc < 0.0 || gc > 1.0) return; if (selected_y - 1 == i) // roundoff voodoo { c = QColor::fromRgbF(1.0 - rc, 1.0 - gc, 1.0 - bc); p.setPen(c); p.drawLine(0, 255 - i, width, 255 - i); } else { c = QColor::fromRgbF(rc, gc, bc, ac); p.setPen(c); p.drawLine(0, 255 - i, width, 255 - i); } } } setPixmap(QPixmap::fromImage( palette )); } } void GenomeColorSelector::setSelectedIndex(int y) { int this_y = 1 + y; selected_y = this_y; // voodoo too repaintLabel(); } int GenomeColorSelector::selectedIndex() { return selected_y; } qosmic-1.6.0/src/genomecolorselector.h000066400000000000000000000040721304321135200200200ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef GENOMECOLORSELECTOR_H #define GENOMECOLORSELECTOR_H #include #include #include #include "genomevector.h" class GenomeColorSelector : public QLabel { Q_OBJECT public: GenomeColorSelector(QWidget* parent=0, GenomeVector* g=0); void setGenome(int); void setGenomeVector(GenomeVector*); void mousePressEvent (QMouseEvent*); void mouseMoveEvent (QMouseEvent*); void mouseReleaseEvent (QMouseEvent*); void setSelectedIndex(int); int selectedIndex(); signals: void colorSelected(double); void undoStateSignal(); public slots: void repaintLabel(); void toggleShowHistAction(bool); private: GenomeVector* genome; QMenu* popupMenu; QAction* histMenuAction; int selected_y; int last_y; bool show_histogram; }; #endif qosmic-1.6.0/src/genomevector.cpp000066400000000000000000000416661304321135200170100ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include "genomevector.h" #include "viewerpresetsmodel.h" #include "logger.h" GenomeVector::GenomeVector() { QSettings s; s.beginGroup("genomevector"); preview_size = s.value("previewsize", QSize(72, 56)).toSize(); preview_preset = s.value("previewpreset", ViewerPresetsModel::getInstance()->presetNames().first()).toString(); auto_save = (AutoSave)s.value("autosave", SaveOnExit).toInt(); request_name = tr("selector"); enable_previews = true; use_previews = 0; createClockPreview(); r_thread = RenderThread::getInstance(); connect(r_thread, SIGNAL(flameRendered(RenderEvent*)), this, SLOT(flameRenderedAction(RenderEvent*))); } int GenomeVector::selected() const { return selected_index; } void GenomeVector::setSelected(int value) { if (0 <= value && value < size()) selected_index = value; } flam3_genome* GenomeVector::selectedGenome() { return data() + selected_index; } QModelIndex GenomeVector::selectedIndex() const { return index(selected_index); } flam3_genome* GenomeVector::data() { return QVector::data(); } QList* GenomeVector::undoProviders() { return &providerList; } UndoRing* GenomeVector::undoRing(int idx) { if (idx == -1) idx = selected_index; return &undoRings[idx]; } void GenomeVector::setCapacity(int entries) { // must reserve enough space for the genomes, or "bad things" may happen // if the genome vector is reallocated before the whole list is loaded. if (capacity() <= entries) { int count = entries * 2; logInfo("GenomeVector::setCapacity : reserving %d entries", count); r_thread->running_mutex.lock(); reserve(count); // requeue existing requests for (int n = 0 ; n < r_requests.size() ; n++) { RenderRequest* req = r_requests.at(n); if (req->name() == request_name && !req->finished()) updatePreview(n); } r_thread->running_mutex.unlock(); } } void GenomeVector::append(const flam3_genome& genome) { insert(size(), genome); } bool GenomeVector::appendRow() { return insertRow(size()); } bool GenomeVector::appendRow(const flam3_genome& genome) { return insertRow(size(), genome); } void GenomeVector::insert(int i, int count, flam3_genome* genomes) { int first = i; int last = first + count; logFine("GenomeVector::insert : appending %d genomes at idx %d", count, first); setCapacity(last); flam3_genome preset = ViewerPresetsModel::getInstance()->preset(preview_preset); flam3_genome* g = genomes; // copy the genomes into the current list. for (int n = first ; n < last ; n++, g++) { QVector::insert(n, *g); undoRings.insert(n, UndoRing()); UndoState* state = undoRings[n].advance(); flam3_copy(&(state->Genome), data() + n); if (previews.size() <= n) previews.insert(n, QVariant()); if (r_requests.size() <= n) { RenderRequest* req = new RenderRequest(0, preview_size, request_name, RenderRequest::Queued); req->setImagePresets(preset); r_requests.insert(n, req); } } } void GenomeVector::insert(int i, const flam3_genome& g) { logFine("GenomeVector::insert : inserting %d", i); setCapacity(i); QVector::insert(i, g); undoRings.insert(i, UndoRing()); UndoState* state = undoRings[i].advance(); flam3_copy(&(state->Genome), data() + i); if (previews.size() <= i) previews.insert(i, QVariant()); if (r_requests.size() <= i) { RenderRequest* req = new RenderRequest(0, preview_size, request_name, RenderRequest::Queued); req->setImagePresets(ViewerPresetsModel::getInstance()->preset(preview_preset)); r_requests.insert(i, req); } } bool GenomeVector::insertRow(int row) { if (0 <= row && row <= size()) { beginInsertRows(QModelIndex(), row, row); flam3_genome* current = selectedGenome(); flam3_genome gen = flam3_genome(); Util::init_genome(&gen); flam3_copy(&gen, current); // preserve values not copied in flam3_apply_template() gen.pixels_per_unit = current->pixels_per_unit; gen.contrast = current->contrast; gen.gamma = current->gamma; gen.brightness = current->brightness; gen.vibrancy = current->vibrancy; insert(row, gen); endInsertRows(); clearPreview(row); updatePreview(row); return true; } return false; } bool GenomeVector::insertRow(int row, const flam3_genome& genome) { if (0 <= row && row <= size()) { beginInsertRows(QModelIndex(), row, row); insert(row, genome); endInsertRows(); clearPreview(row); updatePreview(row); return true; } return false; } bool GenomeVector::insertRows(int row, int count, flam3_genome* genomes) { if (0 <= row && row <= size() && count > 0) { int last = row + count; beginInsertRows(QModelIndex(), row, last - 1); insert(row, count, genomes); endInsertRows(); for (int n = row ; n < last ; n++) { clearPreview(n); updatePreview(n); } return true; } return false; } bool GenomeVector::remove(int i, int count) { int last = i + count - 1; if (0 <= i && last < size()) { logFine("GenomeVector::remove : removing rows %d to %d", i, last); r_thread->running_mutex.lock(); for (int n = last ; n >= i ; n--) { logFine("GenomeVector::remove : removing row %d", n); r_thread->cancel(r_requests[n]); flam3_genome* g = data() + n; // free the heap mem used by xforms in existing genomes clear_cp(g, flam3_defaults_on); QVector::remove(n); undoRings.removeAt(n); } r_thread->running_mutex.unlock(); // change the selected_index if (selected_index >= size()) selected_index = qMax(0, size() - 1); return true; } return false; } bool GenomeVector::removeRow(int row) { beginRemoveRows(QModelIndex(), row, row); bool rv = remove(row); previews.removeAt(row); endRemoveRows(); return rv; } bool GenomeVector::removeRows(int row, int count) { int last_row = row + count - 1; if (0 <= row && last_row < size()) { logFine("GenomeVector::removeRows : clearing genomes [%d, %d]", row, last_row); beginRemoveRows(QModelIndex(), row, last_row); bool rv = remove(row, count); previews.removeAt(row); endRemoveRows(); return rv; } return false; } bool GenomeVector::moveRow(int from, int to) { if (to == from) // nothing to move return false; if ((to - from) == 1) // this will cause Qt to throw an exception return moveRow(to, from); // from beginMoveRows(), so swap them if (0 <= from && from < size() && 0 <= to && to < size()) { logFine("GenomeVector::moveRow : from %d, to %d", from, to); QModelIndex parent(index(0, 0).parent()); beginMoveRows(parent, from, from, parent, to); QVector times; int dist = qAbs(to - from); times.reserve(dist); int start = qMin(from, to); int finish = qMax(from, to); for (int n = start ; n <= finish ; n++) times.append((data() + n)->time); flam3_genome g_tmp = *(data() + from); QVariant v_tmp(previews[from]); UndoRing r_tmp(undoRings[from]); RenderRequest* req(r_requests[from]); QVector::remove(from); undoRings.removeAt(from); previews.removeAt(from); r_requests.removeAt(from); QVector::insert(to, g_tmp); undoRings.insert(to, r_tmp); previews.insert(to, v_tmp); r_requests.insert(to, req); for (int n = 0 ; n <= dist ; n++) (data() + start + n)->time = times[n]; endMoveRows(); return true; } return false; } void GenomeVector::removeAll() { logFine("GenomeVector::removeAll : removing %d genomes", size()); removeRows(0, qMax(1, size())); } void GenomeVector::clear() { logFine("GenomeVector::clear : removing %d genomes", size()); remove(0, size()); } int GenomeVector::size() const { return QVector::size(); } bool GenomeVector::undo(int idx) { if (idx == -1) idx = selected_index; UndoRing* ring = undoRing(idx); if (ring->atTail()) return false; else restoreUndoState(idx, ring->prev()); return true; } bool GenomeVector::redo(int idx) { if (idx == -1) idx = selected_index; UndoRing* ring = undoRing(idx); if (ring->atHead()) return false; else restoreUndoState(idx, ring->next()); return true; } void GenomeVector::restoreUndoState(int idx, UndoState* state) { logFine("GenomeVector::restoreUndoState : restoring genome[%d]", idx); flam3_genome* old = &(state->Genome); flam3_genome* g = data() + idx; flam3_copy(g, old); foreach (UndoStateProvider* provider, providerList) provider->restoreState(state); } void GenomeVector::addUndoState(int idx) { logFine("GenomeVector::addUndoState : adding state to genome[%d]", idx); if (idx == -1) idx = selected_index; UndoState* state = undoRing(idx)->advance(); flam3_copy(&(state->Genome), data() + idx); foreach (UndoStateProvider* provider, providerList) provider->provideState(state); } int GenomeVector::rowCount(const QModelIndex& /*parent*/) const { return GenomeVector::size(); } QVariant GenomeVector::data(const QModelIndex& idx, int role) const { if (!idx.isValid()) return QVariant(); int row = idx.row(); if (row >= size() || row < 0) { logWarn(QString("GenomeVector::data : genome doesn't exist %1").arg(row)); return QVariant(); } if (role == Qt::DisplayRole || role == Qt::EditRole) { flam3_genome* g = const_cast(QVector::data()) + row; return tr("%1 xforms\ntime: %2").arg(g->num_xforms).arg(g->time); } if (role == Qt::DecorationRole && row < previews.size()) return previews.at(row); return QVariant(); } QMap GenomeVector::itemData(const QModelIndex& index) const { QMap map(QAbstractItemModel::itemData(index)); if (!index.isValid()) return map; int row = index.row(); if (row >= size() || row < 0) { logWarn(QString("GenomeVector::itemData : genome doesn't exist %1").arg(row)); return map; } flam3_genome* g = const_cast(QVector::data()) + row; QString s( tr("%1 xforms\ntime: %2").arg(g->num_xforms).arg(g->time) ); map.insert(Qt::DisplayRole, s); map.insert(Qt::EditRole, s); map.insert(Qt::DecorationRole, previews.at(row)); map.insert(Qt::ToolTipRole, tr("genome %1").arg(row + 1)); return map; } bool GenomeVector::setData(const QModelIndex& idx, const QVariant& value, int role) { if (!idx.isValid()) return false; int row = idx.row(); if (row > size() || row < 0) { logWarn(QString("GenomeVector::setData : genome doesn't exist %1").arg(row)); return false; } if (role == Qt::DecorationRole) { if (previews.size() > row) previews.replace(row, value); else { logWarn("GenomeVector::setData : setting preview for non-existent genome %d", row); previews.insert(row, value); } emit dataChanged(idx, idx); } return true; } bool GenomeVector::setData(flam3_genome* genomes, int ncps) { logFine("GenomeVector::setData : setting %d genomes", ncps); beginResetModel(); r_thread->running_mutex.lock(); for (int n = size() - 1 ; n >= 0 ; n--) { logFine("GenomeVector::setData : removing row %d", n); r_thread->cancel(r_requests[n]); flam3_genome* g = data() + n; // free the heap mem used by xforms in existing genomes clear_cp(g, flam3_defaults_on); QVector::remove(n); undoRings.removeAt(n); } r_thread->running_mutex.unlock(); insert(0, ncps, genomes); setSelected(0); endResetModel(); updatePreviews(); return true; } Qt::ItemFlags GenomeVector::flags(const QModelIndex& idx) const { if (!idx.isValid()) return 0; if (idx.row() > size() || idx.row() < 0) return 0; return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsEditable ; } Qt::DropActions GenomeVector::supportedDropActions() const { return Qt::CopyAction | Qt::MoveAction; } bool GenomeVector::hasIndex(int row, int column, const QModelIndex& /*parent*/) const { if (column == 0 && row < size()) return true; return false; } QVariant GenomeVector::headerData(int section, Qt::Orientation /*orientation*/, int role) const { if (role != Qt::DisplayRole) return QVariant(); int row = section; return tr("Genome %1").arg(row); } void GenomeVector::updatePreviews() { if (enable_previews && use_previews > 0) { clearPreviews(); logFine("GenomeVector::updatePreview : rendering previews"); for (int idx = 0 ; idx < size() ; idx++) { RenderRequest* req = r_requests.at(idx); flam3_genome* g = data() + idx; req->setGenome(g); r_thread->render(req); } } } void GenomeVector::updatePreview(int idx) { if (enable_previews && use_previews > 0 && idx >= 0 && idx < size()) { logFine("GenomeVector::updatePreview : rendering request %d", idx); RenderRequest* req = r_requests[idx]; flam3_genome* g = data() + idx; req->setGenome(g); r_thread->render(req); } } void GenomeVector::updateSelectedPreview() { if (enable_previews && use_previews > 0) { int idx = selected(); logFine("GenomeVector::updateSelectedPreview : rendering request %d", idx); RenderRequest* req = r_requests[idx]; flam3_genome* g = data() + idx; req->setGenome(g); r_thread->render(req); } } void GenomeVector::flameRenderedAction(RenderEvent* e) { RenderRequest* req = e->request(); if (req->type() == RenderRequest::Queued && req->name() == request_name) { int idx = r_requests.indexOf(req, 0); if (idx < size()) { logFine(QString("GenomeVector::flameRenderedAction : setting genome data %1,g=0x%2,req=0x%3") .arg(idx).arg((long)req->genome(),0,16).arg((long)req,0,16)); setData(index(idx), QPixmap::fromImage(req->image()), Qt::DecorationRole); } else { logFine(QString("GenomeVector::flameRenderedAction : skipping genome data %1,g=0x%2,req=0x%3") .arg(idx).arg((long)req->genome(),0,16).arg((long)req,0,16)); } e->accept(); } } void GenomeVector::createClockPreview() { logFine("GenomeVector::createClockPreview : enter"); QImage img(preview_size, QImage::Format_RGB32); QPainter p(&img); QRect bounds(QPoint(0,0), preview_size); p.fillRect(bounds, Qt::white); int lx = preview_size.width() / 2 - 8; int ly = preview_size.height() / 2 - 8; p.drawPixmap(lx, ly, 16, 16, QPixmap(":icons/silk/clock.xpm")); p.setPen(Qt::gray); p.setBrush(QBrush(Qt::gray, Qt::NoBrush)); p.drawRect(bounds.adjusted(0, 0, -1, -1)); clock_preview = QPixmap::fromImage(img); } void GenomeVector::clearPreviews() { for (int n = 0 ; n < rowCount() ; n++) clearPreview(n); } void GenomeVector::clearPreview(int n) { QModelIndex model_idx = index(n); if (model_idx.isValid()) setData(model_idx, clock_preview, Qt::DecorationRole); } void GenomeVector::setPreviewSize(const QSize& size) { preview_size = size; QSettings().setValue("genomevector/previewsize", size); createClockPreview(); foreach (RenderRequest* r, r_requests) r->setSize(size); } QSize GenomeVector::previewSize() const { return preview_size; } void GenomeVector::setPreviewPreset(const QString& s) { preview_preset = s; QSettings().setValue("genomevector/previewpreset", s); flam3_genome preset = ViewerPresetsModel::getInstance()->preset(s); foreach (RenderRequest* r, r_requests) r->setImagePresets(preset); } QString GenomeVector::previewPreset() const { return preview_preset; } GenomeVector::AutoSave GenomeVector::autoSave() const { return auto_save; } void GenomeVector::setAutoSave(GenomeVector::AutoSave as) { auto_save = as; QSettings().setValue("genomevector/autosave", (int)as); } void GenomeVector::usingPreviews(bool flag) { if (flag) { use_previews += 1; if (use_previews == 1) updatePreviews(); } else use_previews = qMax(0, use_previews - 1); } void GenomeVector::enablePreviews(bool flag) { enable_previews = flag; } void GenomeVector::dataModified(const QList& modified) { beginResetModel(); if (modified.size() != size()) logWarn("GenomeVector::dataModified : argument list size != data size"); if (selected_index >= size()) selected_index = size() - 1; for (int n = 0 ; n < size() ; n++) if (modified.at(n)) { addUndoState(n); updatePreview(n); } endResetModel(); } qosmic-1.6.0/src/genomevector.h000066400000000000000000000101661304321135200164440ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef GENOMEVECTOR_H #define GENOMEVECTOR_H #include #include #include "flam3util.h" #include "undoring.h" #include "renderthread.h" class GenomeVector : public QAbstractListModel, public QVector { Q_OBJECT public: enum AutoSave { NeverSave = 0, SaveOnExit = 1, AlwaysSave = 2 }; protected: RenderThread* r_thread; int selected_index; int use_previews; bool enable_previews; QSize preview_size; QString preview_preset; QList undoRings; QList providerList; QList previews; QList r_requests; QPixmap clock_preview; AutoSave auto_save; QString request_name; public: GenomeVector(); void setSelected(int value); int selected() const; QModelIndex selectedIndex() const; flam3_genome* selectedGenome(); UndoRing* undoRing(int idx=-1); QList* undoProviders(); void restoreUndoState(int idx, UndoState* state); void addUndoState(int idx=-1); bool undo(int idx=-1); bool redo(int idx=-1); void append(const flam3_genome& genome); void insert(int i, int count, flam3_genome* genomes); void insert(int i, const flam3_genome& genome); bool remove(int i, int count=1); void removeAll(); void clear(); flam3_genome* data(); // QVector interface int size() const; AutoSave autoSave() const; void setAutoSave(AutoSave); // the QAbstractListModel interface bool appendRow(); bool appendRow(const flam3_genome& genome); bool removeRow(int row); bool removeRows(int row, int count); bool insertRow(int row); bool insertRow(int row, const flam3_genome& genome); bool insertRows(int row, int count, flam3_genome* genomes); bool moveRow(int from, int to); int rowCount(const QModelIndex& parent=QModelIndex()) const; QVariant data(const QModelIndex& idx, int role=Qt::DisplayRole) const; QMap itemData(const QModelIndex& index) const; bool setData(const QModelIndex& idx, const QVariant& value, int role=Qt::EditRole); bool setData(flam3_genome* genomes, int ncps=1); Qt::ItemFlags flags(const QModelIndex&) const; bool hasIndex(int row, int column, const QModelIndex& parent=QModelIndex()) const; QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const; Qt::DropActions supportedDropActions() const; void usingPreviews(bool); void enablePreviews(bool); void setPreviewSize(const QSize& size); QSize previewSize() const; void setPreviewPreset(const QString &s); QString previewPreset() const; void dataModified(const QList&); public slots: void flameRenderedAction(RenderEvent*); void updateSelectedPreview(); void updatePreviews(); void updatePreview(int); void clearPreviews(); void clearPreview(int); private: void setCapacity(int entries); void createClockPreview(); }; #endif qosmic-1.6.0/src/genomevectorlistview.cpp000066400000000000000000000225201304321135200205630ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include "genomevectorlistview.h" #include "flam3filestream.h" #include "mutationwidget.h" #include "logger.h" GenomeVectorListView::GenomeVectorListView(QWidget* parent) : QListView(parent) { setItemDelegate(new GenomeVectorListModelItemDelegate); } void GenomeVectorListView::mousePressEvent(QMouseEvent* event) { // save the currentIndex so it can be restored after a startDrag event QListView::mousePressEvent(event); dragStartIndex = indexAt(event->pos()); } void GenomeVectorListView::rowsInserted(const QModelIndex& /*parent*/, int start, int /*end*/) { GenomeVector* genomes = qobject_cast(model()); genomes->setSelected(start); setCurrentIndex(genomes->selectedIndex()); emit genomesModified(); } void GenomeVectorListView::startDrag(Qt::DropActions supportedActions) { QDrag* drag = new QDrag(this); QMimeData* mimeData = new QMimeData; mimeData->setData("application/x-qabstractitemmodeldatalist", QByteArray::number(dragStartIndex.row())); drag->setMimeData(mimeData); drag->setPixmap(model()->data(dragStartIndex, Qt::DecorationRole).value()); drag->exec(supportedActions); selectionModel()->select(qobject_cast(model())->selectedIndex(), QItemSelectionModel::ClearAndSelect); } void GenomeVectorListView::dropEvent(QDropEvent* event) { if ((event->source() == this && (event->possibleActions() & Qt::MoveAction))) { QListView::dropEvent(event); // Process the data from the event. QModelIndexList idxList; idxList << indexAt(event->pos()) << dragStartIndex; GenomeVector* genomes = qobject_cast(model()); int drop_row = idxList.at(0).row(); int drag_row = idxList.at(1).row(); int selected = genomes->selected(); genomes->moveRow(drag_row, drop_row); // reselect the currently selected index int select_next = selected; if (drag_row == selected) select_next = drop_row; else if ((drag_row < selected) && (selected <= drop_row)) select_next = selected - 1; else if (drag_row > selected && selected >= drop_row) select_next = selected + 1; genomes->setSelected(select_next); Flam3FileStream::autoSave(genomes); event->acceptProposedAction(); emit indexesMoved(idxList); } else { if (event->mimeData()->hasFormat("application/x-mutationpreviewwidget")) { QModelIndex idx = indexAt(event->pos()); flam3_genome* mutation = qobject_cast(event->source())->genome(); GenomeVector* genomes = qobject_cast(model()); if (idx.isValid()) { // drop on an existing genome flam3_genome* g = genomes->data() + idx.row(); double time = g->time; flam3_copy(g, mutation); g->time = time; genomes->addUndoState(idx.row()); genomes->updatePreview(idx.row()); if (genomes->selected() != idx.row()) selectionModel()->select(genomes->selectedIndex(), QItemSelectionModel::ClearAndSelect); else emit genomesModified(); } else { // add a new genome to the list double time = genomes->last().time + 1.0; flam3_genome tmp = flam3_genome(); flam3_copy(&tmp, mutation); tmp.time = time; genomes->appendRow(tmp); } Flam3FileStream::autoSave(genomes); event->acceptProposedAction(); } else if (event->mimeData()->hasFormat("text/uri-list")) { QUrl url = event->mimeData()->urls().first(); QString path = url.path(); if (url.isValid() && path.contains(QRegExp("\\.flam[3e]?$"))) { GenomeVector* genomes = qobject_cast(model()); QFile file(path); Flam3FileStream s(&file); s >> genomes; Flam3FileStream::autoSave(genomes); event->acceptProposedAction(); } } } } void GenomeVectorListView::dragEnterEvent(QDragEnterEvent* event) { if ((event->source() == this && (event->possibleActions() & Qt::MoveAction))) QListView::dragEnterEvent(event); else if (event->mimeData()->hasFormat("application/x-mutationpreviewwidget")) event->acceptProposedAction(); else if (event->mimeData()->hasFormat("text/uri-list")) { QUrl url = event->mimeData()->urls().first(); QString path = url.path(); if (url.isValid() && path.contains(QRegExp("\\.flam[3e]?$"))) event->acceptProposedAction(); } else logWarn(QString("GenomeVectorListView::dragEnterEvent : unknown mimeData %1") .arg(event->mimeData()->formats().join(", "))); } void GenomeVectorListView::dragMoveEvent(QDragMoveEvent* event) { if ((event->source() == this && (event->possibleActions() & Qt::MoveAction))) QListView::dragMoveEvent(event); else { if (event->mimeData()->hasFormat("application/x-mutationpreviewwidget") || event->mimeData()->hasFormat("text/uri-list")) { QListView::dragMoveEvent(event); event->acceptProposedAction(); viewport()->update(); // needed to draw the drop indicator } } } void GenomeVectorListView::commitData(QWidget* editor) { QListView::commitData(editor); QAbstractListModel* m = qobject_cast(model()); for (int n = 0 ; n < m->rowCount() ; n++ ) update(m->index(n)); } //------------------------------------------------------------------------------------------- GenomeVectorListModelItemEditor::GenomeVectorListModelItemEditor(QWidget* parent) : QWidget(parent) { setupUi(this); connect(m_closeButton, SIGNAL(clicked()), this, SIGNAL(editingFinished())); } void GenomeVectorListModelItemEditor::setEditorData(GenomeVector* genomes, int idx) { flam3_genome* current = genomes->data() + idx; m_timeLineEdit->updateValue(current->time); m_timeLineEdit->setMinimum( idx ); } void GenomeVectorListModelItemEditor::setModelData(GenomeVector* genomes, int idx) { int ngenomes = genomes->size(); double time = qMax(idx, m_timeLineEdit->value()); (genomes->data() + idx)->time = time; for (int i = idx - 1, t = time - 1 ; i >= 0 ; i--, t--) { if (t < (genomes->data() + i)->time) (genomes->data() + i)->time = t; } for (int i = idx + 1, t = time + 1 ; i < ngenomes ; i++, t++) { if (t > (genomes->data() + i)->time) (genomes->data() + i)->time = t; } } void GenomeVectorListModelItemEditor::mouseDoubleClickEvent(QMouseEvent* /*event*/) { emit editingFinished(); } //------------------------------------------------------------------------------------------- GenomeVectorListModelItemDelegate::GenomeVectorListModelItemDelegate(QObject* parent) : QStyledItemDelegate(parent) { } QSize GenomeVectorListModelItemDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const { return QStyledItemDelegate::sizeHint(option, index); } QWidget* GenomeVectorListModelItemDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/) const { GenomeVectorListModelItemEditor* editor = new GenomeVectorListModelItemEditor(parent); connect(editor, SIGNAL(editingFinished()), this, SLOT(commitAndCloseEditor())); return editor; } void GenomeVectorListModelItemDelegate::setEditorData(QWidget* widget, const QModelIndex& index) const { GenomeVectorListModelItemEditor* editor = static_cast(widget); const GenomeVector* model = static_cast(index.model()); editor->setEditorData(const_cast(model), index.row()); } void GenomeVectorListModelItemDelegate::setModelData(QWidget* widget, QAbstractItemModel* model, const QModelIndex& index) const { logFine(QString("GenomeVectorListModelItemDelegate::setModelData : %1").arg(index.row())); GenomeVectorListModelItemEditor* editor = static_cast(widget); GenomeVector* vmodel = static_cast(model); editor->setModelData(vmodel, index.row()); } void GenomeVectorListModelItemDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex&/* index */) const { editor->setGeometry(option.rect); } void GenomeVectorListModelItemDelegate::commitAndCloseEditor() { logFine(QString("GenomeVectorListModelItemDelegate::commitAndCloseEditor : enter")); GenomeVectorListModelItemEditor* editor = static_cast(sender()); emit commitData(editor); emit closeEditor(editor); } qosmic-1.6.0/src/genomevectorlistview.h000066400000000000000000000060561304321135200202360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef GENOMEVECTORLISTVIEW_H #define GENOMEVECTORLISTVIEW_H #include #include #include "ui_genomevectorlistmodelitemeditor.h" #include "genomevector.h" class GenomeVectorListModelItemEditor : public QWidget, private Ui::GenomeVectorListModelItemEditor { Q_OBJECT public: GenomeVectorListModelItemEditor(QWidget* parent=0); void setEditorData(GenomeVector* genome, int idx); void setModelData(GenomeVector* genome, int idx); signals: void editingFinished(); protected: void mouseDoubleClickEvent(QMouseEvent* event); }; class GenomeVectorListModelItemDelegate : public QStyledItemDelegate { Q_OBJECT public: GenomeVectorListModelItemDelegate(QObject* parent=0); QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const; QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const; void setEditorData(QWidget* widget, const QModelIndex& index) const; void setModelData(QWidget* widget, QAbstractItemModel* model, const QModelIndex& index) const; void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index ) const; private slots: void commitAndCloseEditor(); }; class GenomeVectorListView : public QListView { Q_OBJECT QModelIndex dragStartIndex; public: GenomeVectorListView(QWidget* parent=0); signals: void genomesModified(); protected slots: void commitData(QWidget* editor); void rowsInserted(const QModelIndex& parent, int start, int end); protected: void mousePressEvent(QMouseEvent* event); void startDrag(Qt::DropActions actions); void dropEvent(QDropEvent* event); void dragEnterEvent(QDragEnterEvent* event); void dragMoveEvent(QDragMoveEvent* event); }; #endif qosmic-1.6.0/src/gradientlistmodel.cpp000066400000000000000000000053701304321135200200150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "gradientlistmodel.h" GradientListModel::GradientListModel(QObject *parent) : QAbstractListModel(parent) { } QVariant GradientListModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (role == Qt::DecorationRole) return QIcon(pixmaps.value(index.row())); else if (role == Qt::UserRole) return pixmaps.value(index.row()); return QVariant(); } void GradientListModel::addGradient(const QPixmap &pixmap) { int row = pixmaps.size(); beginInsertRows(QModelIndex(), row, row); pixmaps.insert(row, pixmap); endInsertRows(); } Qt::ItemFlags GradientListModel::flags(const QModelIndex &index) const { if (index.isValid()) { return (Qt::ItemIsEnabled | Qt::ItemIsSelectable); } return Qt::ItemIsDropEnabled; } bool GradientListModel::removeRows(int row, int count, const QModelIndex &parent) { if (parent.isValid()) return false; if (row >= pixmaps.size() || row + count <= 0) return false; int beginRow = qMax(0, row); int endRow = qMin(row + count - 1, pixmaps.size() - 1); beginRemoveRows(parent, beginRow, endRow); while (beginRow <= endRow) { pixmaps.removeAt(beginRow); ++beginRow; } endRemoveRows(); return true; } int GradientListModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; else return pixmaps.size(); } void GradientListModel::clear() { beginRemoveRows(QModelIndex(), 0, pixmaps.size()); pixmaps.clear(); endRemoveRows(); } qosmic-1.6.0/src/gradientlistmodel.h000066400000000000000000000036251304321135200174630ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef GRADIENTLISTMODEL_H #define GRADIENTLISTMODEL_H #include #include #include class GradientListModel : public QAbstractListModel { Q_OBJECT public: GradientListModel ( QObject *parent = 0 ); QVariant data ( const QModelIndex &index, int role = Qt::DisplayRole ) const; Qt::ItemFlags flags ( const QModelIndex &index ) const; bool removeRows ( int row, int count, const QModelIndex &parent=QModelIndex() ); int rowCount ( const QModelIndex &parent ) const; void addGradient ( const QPixmap &pixmap ); void clear(); private: QList pixmaps; }; #endif qosmic-1.6.0/src/gradientstopseditor.cpp000066400000000000000000000201141304321135200203710ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include "gradientstopseditor.h" #include "colordialog.h" #include "logger.h" bool GradientStop::lessThanGradientStopComparison(const GradientStop& s1, const GradientStop& s2) { return s1.first < s2.first; } GradientStopsEditor::GradientStopsEditor(QWidget* parent) : QWidget(parent) { moving_idx = -1; selected_idx << 0; arrow_type = Qt::UpArrow; menu_enabled = true; popupMenu = new QMenu(tr("Edit Stops")); addAction = new QAction(tr("Add Stop"),this); delAction = new QAction(tr("Remove Stop"),this); colorAction = new QAction(tr("Change Color"),this); popupMenu->addAction(addAction); popupMenu->addAction(delAction); popupMenu->addAction(colorAction); connect(addAction, SIGNAL(triggered()), this, SLOT(addStop())); connect(delAction, SIGNAL(triggered()), this, SLOT(removeStop())); connect(colorAction, SIGNAL(triggered()), this, SLOT(selectStopColor())); resetStops(); } void GradientStopsEditor::selectStopColor() { if (selected_idx.size() < 1) return; ColorDialog d(this); QColor lastcolor( stops.at(selected_idx.first()).second ); d.setSelectedColor(lastcolor); d.move(moving_global); connect(&d, SIGNAL(colorSelected(QColor)), this, SLOT(stopColorSelected(QColor))); if (d.exec() == QDialog::Accepted) { QColor c( d.getSelectedColor() ); if (c.isValid() && stops[selected_idx.first()].second != c) stopColorSelected(c); } else if (stops[selected_idx.first()].second != lastcolor) stopColorSelected(lastcolor); disconnect(&d); } void GradientStopsEditor::stopColorSelected(QColor c) { GradientStop* data = stops.data(); data[selected_idx.first()].second = c; emit stopsChanged(); update(); } void GradientStopsEditor::addStop() { int h( size().height() ); int w( size().width() ); qreal pos( (qreal)moving_start.x() / w ); QImage palette(w, h, QImage::Format_RGB32); QPainter painter(&palette); QLinearGradient grad(0, h, w, h); QGradientStops s( stops.size() ); foreach ( GradientStop stop, stops) s.append(QGradientStop(stop.first, stop.second)); grad.setStops(s); painter.fillRect(rect(), QBrush(grad)); QColor color( palette.pixel(moving_start.x(), 1) ); stops << GradientStop(pos, color); selected_idx.clear(); selected_idx << stops.size() - 1; update(); emit stopsChanged(); emit stopsDropped(); logFine(QString("GradientStopsEditor::addStop : found stop %1 at %2 mouse %3") .arg(stops.last().first).arg(pos).arg(moving_start.x())); } void GradientStopsEditor::removeStop() { if (stops.size() < 3) return; if (selected_idx.size() > 0) { logFine(QString("GradientStopsEditor::removeStop : removing stop %1") .arg(selected_idx.first())); stops.remove(selected_idx.first()); selected_idx.pop_front(); update(); emit stopsChanged(); emit stopsDropped(); } } void GradientStopsEditor::mousePressEvent(QMouseEvent* event) { switch (event->button()) { case Qt::RightButton: { if (menu_enabled) { moving_start = event->pos(); moving_global = event->globalPos(); popupMenu->popup(moving_global); } break; } case Qt::LeftButton: { qreal pos( (qreal)event->x() / size().width() ); for (int n = 0 ; n < stops.size() ; n++) { GradientStop stop = stops.at(n); if (qAbs( pos - stop.first ) < 0.01) { logFine(QString("GradientStopsEditor::mousePressEvent : found stop %1 at %2").arg(stop.first).arg(pos)); moving_start = event->pos(); moving_idx = n; if (! (event->modifiers() & Qt::ShiftModifier) ) selected_idx.clear(); if (! selected_idx.contains(moving_idx)) selected_idx << moving_idx; update(); break; } } break; } default: ; } } void GradientStopsEditor::mouseMoveEvent(QMouseEvent* event) { if (event->buttons() & Qt::LeftButton) { if (moving_idx != -1) { GradientStop* data = stops.data(); if (selected_idx.size() > 1) { bool changed(false); foreach (int n, selected_idx) { qreal cur( data[n].first ); qreal dx( (qreal)(event->x() - moving_start.x()) / size().width() ); qreal val( qBound(qreal(0.0), cur + dx, qreal(1.0)) ); if (val != cur) { data[n].first = val; changed = true; } } moving_start = event->pos(); if (changed) { emit stopsChanged(); update(); } } else { qreal cur( data[moving_idx].first ); qreal val( qBound(qreal(0.0), qreal(event->x()) / size().width(), qreal(1.0)) ); if (val != cur) { data[moving_idx].first = val; emit stopsChanged(); update(); } } } } } void GradientStopsEditor::mouseReleaseEvent(QMouseEvent* event) { if (event->button() == Qt::LeftButton) { moving_idx = -1; emit stopsDropped(); } } void GradientStopsEditor::paintEvent(QPaintEvent*) { QPainter painter(this); int w( size().width() ); int h( size().height() ); QStyleOptionFrame option; option.initFrom(this); option.lineWidth = 0; option.midLineWidth = 0; style()->drawPrimitive(QStyle::PE_Frame, &option, &painter, this); for (int n = 0 ; n < stops.size() ; n++) { GradientStop stop( stops.at(n) ); painter.setBrush(QBrush(stop.second)); qreal x( qBound(qreal(0.0), stop.first * w, qreal(w - 1)) ); if (selected_idx.contains(n)) { QColor c( QColor::fromRgb( 255 - stop.second.red(), 255 - stop.second.green(), 255 - stop.second.blue()) ); if (stop.second.value() < 128) painter.setPen(c.lighter()); else painter.setPen(c.darker()); } else painter.setPen(stop.second); switch (arrow_type) { case Qt::DownArrow: { const QPoint points[3] = { QPoint(x, h), QPoint(x + 4, 0), QPoint(x - 4, 0), }; painter.drawPolygon(points, 3); break; } default: { const QPoint points[3] = { QPoint(x, 0), QPoint(x + 4, h), QPoint(x - 4, h), }; painter.drawPolygon(points, 3); } } if (menu_enabled) { bool selected( selected_idx.size() > 0 ); delAction->setEnabled(selected); colorAction->setEnabled(selected); } } } void GradientStopsEditor::setStops(const GradientStops& s) { if (s.size() < 2) { logError(QString("GradientStopsEditor::setStops : number of gradient stops < 2")); return; } stops = s; emit stopsChanged(); update(); } GradientStops& GradientStopsEditor::getStops() { return stops; } void GradientStopsEditor::setArrowDirection(Qt::ArrowType type) { arrow_type = type; update(); } Qt::ArrowType GradientStopsEditor::arrowDirection() const { return arrow_type; } void GradientStopsEditor::setMenuEnabled(bool flag) { menu_enabled = flag; } bool GradientStopsEditor::menuEnabled() const { return menu_enabled; } void GradientStopsEditor::resetStops() { selected_idx.erase(selected_idx.begin()++, selected_idx.end()); stops.clear(); stops << GradientStop(0.0, Qt::black) << GradientStop(1.0, Qt::white); update(); } qosmic-1.6.0/src/gradientstopseditor.h000066400000000000000000000062011304321135200200370ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef GRADIENTSTOPSEDITOR_H #define GRADIENTSTOPSEDITOR_H #include #include #include #include class GradientStop { public: enum { RGB = 0, HSV = 1, HSVR = 2 } ColorSpace; double first; QColor second; int colorspace; int blending; GradientStop() : colorspace(0), blending(0) {} // GradientStop(GradientStop& stop) // : QGradientStop(stop.first, stop.second), colorspace(stop.colorspace), blending(stop.blending) {} // GradientStop(const QPair stop) // : QGradientStop(stop), colorspace(0), blending(0) {} GradientStop(double pos, QColor color, int space=0, int blend=0) : first(pos), second(color), colorspace(space), blending(blend) {} int getColorSpace() { return colorspace ; } static bool lessThanGradientStopComparison(const GradientStop& s1, const GradientStop& s2); }; typedef QVector GradientStops; class GradientStopsEditor : public QWidget { Q_OBJECT public: GradientStopsEditor(QWidget* parent=0); GradientStops& getStops(); void setStops(const GradientStops&); void setArrowDirection(Qt::ArrowType); Qt::ArrowType arrowDirection() const; void setMenuEnabled(bool); bool menuEnabled() const; void resetStops(); public slots: void addStop(); void removeStop(); void selectStopColor(); void stopColorSelected(QColor); signals: void stopsChanged(); void stopsDropped(); protected: void mousePressEvent(QMouseEvent*); void mouseMoveEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); void paintEvent(QPaintEvent*); private: QMenu* popupMenu; QAction* addAction; QAction* delAction; QAction* colorAction; int moving_idx; bool menu_enabled; QList selected_idx; QPoint moving_start; QPoint moving_global; GradientStops stops; QLinearGradient gradient; Qt::ArrowType arrow_type; }; #endif qosmic-1.6.0/src/imgsettingswidget.cpp000066400000000000000000000217101304321135200200400ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "imgsettingswidget.h" ImageSettingsWidget::ImageSettingsWidget(GenomeVector* gen, QWidget* parent) : QWidget(parent), genome(gen) { setupUi(this); // restore (Double/Int)ValueEditor settings m_qualityLineEdit->restoreSettings(); m_filterLineEdit->restoreSettings(); m_oversampleLineEdit->restoreSettings(); m_batchesLineEdit->restoreSettings(); m_estimatorLineEdit->restoreSettings(); m_estimatorCurveLineEdit->restoreSettings(); m_estimatorMinLineEdit->restoreSettings(); m_symmetryLineEdit->restoreSettings(); presets = new ViewerPresetsWidget(genome); presets->hide(); m_presetsComboBox->clear(); m_presetsComboBox->addItem(QString()); m_presetsComboBox->addItems( presets->presetNames() ); timer = new QTimer(this); timer->setInterval(2000); timer->setSingleShot(true); connect(m_qualityLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_filterLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_oversampleLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_batchesLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_estimatorLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_estimatorCurveLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_estimatorMinLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_symmetryLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_filterShapeBox, SIGNAL(activated(int)), this, SLOT(fieldEditedAction())); connect(m_applySymmetryButton, SIGNAL(pressed()), this, SLOT(applySymmetryAction())); connect(m_goLeftButton, SIGNAL(pressed()), this, SLOT(moveStackLeftAction())); connect(m_goRightButton, SIGNAL(pressed()), this, SLOT(moveStackRightAction())); connect(m_presetsButton, SIGNAL(clicked(bool)), this, SLOT(showPresetsDialog())); connect(m_presetsComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectPresetAction(int))); connect(presets, SIGNAL(presetSelected()), this, SIGNAL(presetSelected())); connect(presets, SIGNAL(dataChanged()), this, SLOT(presetsDataChangedAction())); connect(timer, SIGNAL(timeout()), this, SLOT(resetPresetsComboBoxAction())); } void ImageSettingsWidget::reset() { updateFormData(); } #define genome_ptr (genome->selectedGenome()) void ImageSettingsWidget::hideEvent(QHideEvent* /*e*/) { presets->hide(); presets->close(); } void ImageSettingsWidget::moveStackLeftAction() { m_stackedWidget->setCurrentIndex( qBound(0, m_stackedWidget->currentIndex() - 1, m_stackedWidget->count() - 1)); } void ImageSettingsWidget::moveStackRightAction() { m_stackedWidget->setCurrentIndex( qBound(0, m_stackedWidget->currentIndex() + 1, m_stackedWidget->count() - 1)); } void ImageSettingsWidget::showPresetsDialog() { QPoint pos(m_presetsButton->pos()); pos.ry() -= presets->frameGeometry().height(); presets->move(m_presetsButton->mapToGlobal(pos)); presets->show(); presets->activateWindow(); presets->raise(); } void ImageSettingsWidget::selectPresetAction(int idx) { if (idx > 0) presets->selectPreset(idx - 1); } void ImageSettingsWidget::presetsDataChangedAction() { m_presetsComboBox->blockSignals(true); m_presetsComboBox->clear(); m_presetsComboBox->addItem(QString()); m_presetsComboBox->addItems( presets->presetNames() ); m_presetsComboBox->setCurrentIndex(0); m_presetsComboBox->blockSignals(false); } void ImageSettingsWidget::applySymmetryAction() { int sym = m_symmetryLineEdit->value(); if (sym == 1) return; flam3_add_symmetry(genome_ptr, sym); genome_ptr->symmetry = 1; m_symmetryLineEdit->setValue(1); emit symmetryAdded(); } void ImageSettingsWidget::resetPresetsComboBoxAction() { m_presetsComboBox->blockSignals(true); m_presetsComboBox->setCurrentIndex(0); m_presetsComboBox->blockSignals(false); } void ImageSettingsWidget::updateFormData() { m_qualityLineEdit->updateValue(genome_ptr->sample_density); m_filterLineEdit->updateValue(genome_ptr->spatial_filter_radius); m_oversampleLineEdit->updateValue(genome_ptr->spatial_oversample); m_batchesLineEdit->updateValue(genome_ptr->nbatches); m_estimatorLineEdit->updateValue(genome_ptr->estimator); m_estimatorCurveLineEdit->updateValue(genome_ptr->estimator_curve); m_estimatorMinLineEdit->updateValue(genome_ptr->estimator_minimum); m_symmetryLineEdit->updateValue(genome_ptr->symmetry); // filter_shape QString option; if (genome_ptr->spatial_filter_select == flam3_gaussian_kernel) option ="gaussian"; else if (genome_ptr->spatial_filter_select == flam3_hermite_kernel) option ="hermite"; else if (genome_ptr->spatial_filter_select == flam3_box_kernel) option ="box"; else if (genome_ptr->spatial_filter_select == flam3_triangle_kernel) option ="triangle"; else if (genome_ptr->spatial_filter_select == flam3_bell_kernel) option ="bell"; else if (genome_ptr->spatial_filter_select == flam3_b_spline_kernel) option ="bspline"; else if (genome_ptr->spatial_filter_select == flam3_mitchell_kernel) option ="mitchell"; else if (genome_ptr->spatial_filter_select == flam3_blackman_kernel) option ="blackman"; else if (genome_ptr->spatial_filter_select == flam3_catrom_kernel) option ="catrom"; else if (genome_ptr->spatial_filter_select == flam3_hanning_kernel) option ="hanning"; else if (genome_ptr->spatial_filter_select == flam3_hamming_kernel) option ="hamming"; else if (genome_ptr->spatial_filter_select == flam3_lanczos3_kernel) option ="lanczos3"; else if (genome_ptr->spatial_filter_select == flam3_lanczos2_kernel) option ="lanczos2"; else if (genome_ptr->spatial_filter_select == flam3_quadratic_kernel) option ="quadratic"; m_filterShapeBox->setCurrentIndex(m_filterShapeBox->findText(option)); timer->start(); } void ImageSettingsWidget::fieldEditedAction() { genome_ptr->sample_density = qMax(0.00001, m_qualityLineEdit->value()); genome_ptr->spatial_filter_radius = m_filterLineEdit->value(); genome_ptr->spatial_oversample = m_oversampleLineEdit->value(); genome_ptr->nbatches = m_batchesLineEdit->value(); genome_ptr->estimator = m_estimatorLineEdit->value(); genome_ptr->estimator_curve = m_estimatorCurveLineEdit->value(); genome_ptr->estimator_minimum = qMin(m_estimatorMinLineEdit->value(), genome_ptr->estimator); genome_ptr->symmetry = m_symmetryLineEdit->value(); QString option = m_filterShapeBox->currentText(); if (option == "gaussian") genome_ptr->spatial_filter_select = flam3_gaussian_kernel; else if (option == "hermite") genome_ptr->spatial_filter_select = flam3_hermite_kernel; else if (option == "box") genome_ptr->spatial_filter_select = flam3_box_kernel; else if (option == "triangle") genome_ptr->spatial_filter_select = flam3_triangle_kernel; else if (option == "bell") genome_ptr->spatial_filter_select = flam3_bell_kernel; else if (option == "bspline") genome_ptr->spatial_filter_select = flam3_b_spline_kernel; else if (option == "mitchell") genome_ptr->spatial_filter_select = flam3_mitchell_kernel; else if (option == "blackman") genome_ptr->spatial_filter_select = flam3_blackman_kernel; else if (option == "catrom") genome_ptr->spatial_filter_select = flam3_catrom_kernel; else if (option == "hanning") genome_ptr->spatial_filter_select = flam3_hanning_kernel; else if (option == "hamming") genome_ptr->spatial_filter_select = flam3_hamming_kernel; else if (option == "lanczos3") genome_ptr->spatial_filter_select = flam3_lanczos3_kernel; else if (option == "lanczos2") genome_ptr->spatial_filter_select = flam3_lanczos2_kernel; else if (option == "quadratic") genome_ptr->spatial_filter_select = flam3_quadratic_kernel; else genome_ptr->spatial_filter_select = flam3_gaussian_kernel; resetPresetsComboBoxAction(); emit dataChanged(); } qosmic-1.6.0/src/imgsettingswidget.h000066400000000000000000000041701304321135200175060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef IMGSETTINGSWIDGET_H #define IMGSETTINGSWIDGET_H #include #include "ui_imgsettingswidget.h" #include "viewerpresetswidget.h" #include "genomevector.h" class ImageSettingsWidget : public QWidget, private Ui::ImageSettingsWidget { Q_OBJECT public: ImageSettingsWidget(GenomeVector*, QWidget* parent=0); void updateFormData(); void reset(); signals: void dataChanged(); void symmetryAdded(); void presetSelected(); protected slots: void fieldEditedAction(); void applySymmetryAction(); void moveStackLeftAction(); void moveStackRightAction(); void showPresetsDialog(); void selectPresetAction(int); void presetsDataChangedAction(); void resetPresetsComboBoxAction(); protected: void hideEvent(QHideEvent*); private: GenomeVector* genome; ViewerPresetsWidget* presets; QTimer* timer; }; #endif qosmic-1.6.0/src/intvalueeditor.cpp000066400000000000000000000112751304321135200173420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "intvalueeditor.h" #include "logger.h" IntValueEditor::IntValueEditor(QWidget* parent) : QSpinBox(parent), wheelEventSignal(true), last_press(0) { setKeyboardTracking(false); connect(this, SIGNAL(valueChanged(int)), this, SIGNAL(valueUpdated())); } void IntValueEditor::restoreSettings() { if (objectName().isEmpty()) logWarn("IntValueEditor::restoreSettings : nameless object found"); setSingleStep(QSettings().value( QString("intvalueeditor/%1/singlestep").arg(objectName()), singleStep()).toInt()); default_step = singleStep(); } void IntValueEditor::updateValue(int v) { if (value() == v) return; blockSignals(true); QSpinBox::setValue(v); blockSignals(false); } void IntValueEditor::wheelEvent(QWheelEvent* e) { if (!QSpinBox::isActiveWindow()) QSpinBox::activateWindow(); QSpinBox::setFocus(Qt::MouseFocusReason); int step = default_step = singleStep(); if (e->modifiers() & Qt::ShiftModifier) { if (step >= 10.0) setSingleStep(step = (int)(step / 10.0)); } else if (e->modifiers() & Qt::ControlModifier) setSingleStep(step = step * 10); if (e->delta() > 0) stepUp(); else stepDown(); if (step != default_step) setSingleStep(default_step); if (wheelEventSignal && WheelValueEditor::WHEEL_EVENTS_ENABLED) emit valueUpdated(); } bool IntValueEditor::wheelEventUpdate() const { return wheelEventSignal; } void IntValueEditor::setWheelEventUpdate(bool value) { wheelEventSignal = value; } void IntValueEditor::keyPressEvent(QKeyEvent* e) { switch (e->key()) { case Qt::Key_BracketLeft: setSingleStep((int)(singleStep() * 10.0)); QSettings().setValue(QString("intvalueeditor/%1/singlestep").arg(objectName()), singleStep()); break; case Qt::Key_BracketRight: setSingleStep(qMax((int)(default_step * 0.10), 1)); QSettings().setValue(QString("intvalueeditor/%1/singlestep").arg(objectName()), singleStep()); break; case Qt::Key_Return: QSpinBox::keyPressEvent(e); emit undoStateSignal(); break; case Qt::Key_Backslash: WheelValueEditor::WHEEL_EVENTS_ENABLED = ! WheelValueEditor::WHEEL_EVENTS_ENABLED; break; default: QSpinBox::keyPressEvent(e); } } void IntValueEditor::mousePressEvent(QMouseEvent* e) { if (e->button() == Qt::LeftButton) { start_pos = last_pos = e->localPos(); start_value = value(); last_press = e; } } void IntValueEditor::mouseMoveEvent(QMouseEvent* e) { if (e->buttons() & Qt::LeftButton) { double dy = e->y() - last_pos.y(); double step = default_step = singleStep(); last_pos = e->localPos(); last_press = 0; if (e->modifiers() & Qt::ShiftModifier) setSingleStep(step /= 10.0); else if (e->modifiers() & Qt::ControlModifier) setSingleStep(step *= 10.0); if (dy < 0) { stepUp(); emit valueUpdated(); } else if (dy > 0) { stepDown(); emit valueUpdated(); } if (step != default_step) setSingleStep(default_step); } } void IntValueEditor::mouseReleaseEvent(QMouseEvent* e) { if (e->button() == Qt::LeftButton) { if (last_press && start_pos == e->localPos()) { QSpinBox::mousePressEvent(last_press); QSpinBox::mouseReleaseEvent(e); last_press = 0; } if (start_value != value()) emit undoStateSignal(); } } // redefine these since the qintspinbox versions also activate the selection void IntValueEditor::stepUp() { updateValue(value() + singleStep()); } void IntValueEditor::stepDown() { updateValue(value() - singleStep()); } qosmic-1.6.0/src/intvalueeditor.h000066400000000000000000000041101304321135200167750ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef INTVALUEEDITOR_H #define INTVALUEEDITOR_H #include #include #include #include "wheelvalueeditor.h" class IntValueEditor : public QSpinBox { Q_OBJECT public: IntValueEditor(QWidget* parent=0); void updateValue(int); void setWheelEventUpdate(bool); bool wheelEventUpdate() const; void restoreSettings(); void stepUp(); void stepDown(); signals: void valueUpdated(); void undoStateSignal(); protected: void keyPressEvent(QKeyEvent*); void wheelEvent(QWheelEvent*); void mousePressEvent(QMouseEvent*); void mouseMoveEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); private: bool wheelEventSignal; int start_value; int default_step; QPointF start_pos; QPointF last_pos; QMouseEvent* last_press; }; #endif qosmic-1.6.0/src/logger.cpp000066400000000000000000000174441304321135200155670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include "logger.h" QTextStream cout(stdout); QTextStream cerr(stdout); namespace Util { Logger* Logger::m_self = 0;// initialize pointer Logger::Logger() { m_stream = &cout; m_level = INFO; } Logger::Logger(QTextStream& out) { m_stream = &out; m_level = INFO; } Logger* Logger::getInstance() { if (m_self == 0) m_self = new Logger(cout); return m_self; } void Logger::info(QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= INFO) *m_stream << QString("info [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::warn(QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= WARN) *m_stream << QString("warn [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::error(QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= ERROR) *m_stream << QString("error [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::critical(QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= CRITICAL) *m_stream << QString("critical [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::fine(QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= FINE) *m_stream << QString("fine [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::finer(QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= FINER) *m_stream << QString("finer [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::finest(QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= FINEST) *m_stream << QString("finest [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::info(const QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= INFO) *m_stream << QString("info [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::warn(const QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= WARN) *m_stream << QString("warn [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::error(const QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= ERROR) *m_stream << QString("error [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::critical(const QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= CRITICAL) *m_stream << QString("critical [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::fine(const QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= FINE) *m_stream << QString("fine [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::finer(const QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= FINER) *m_stream << QString("finer [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::finest(const QString& msg) { QMutexLocker locker(&m_mutex); if(m_level >= FINEST) *m_stream << QString("finest [%1]: "). arg((long) QThread::currentThreadId()) << msg << endl; } void Logger::info(const char* msg, ...) { QMutexLocker locker(&m_mutex); if(m_level >= INFO) { va_list ap; va_start(ap, msg); *m_stream << QString("info [%1]: ").arg((long)QThread::currentThreadId()) << QString().vsprintf(msg, ap) << endl; va_end(ap); } } void Logger::warn(const char* msg, ...) { QMutexLocker locker(&m_mutex); if(m_level >= WARN) { va_list ap; va_start(ap, msg); *m_stream << QString("warn [%1]: ").arg((long)QThread::currentThreadId()) << QString().vsprintf(msg, ap) << endl; va_end(ap); } } void Logger::error(const char* msg, ...) { QMutexLocker locker(&m_mutex); if(m_level >= ERROR) { va_list ap; va_start(ap, msg); *m_stream << QString("error [%1]: ").arg((long)QThread::currentThreadId()) << QString().vsprintf(msg, ap) << endl; va_end(ap); } } void Logger::critical(const char* msg, ...) { QMutexLocker locker(&m_mutex); if(m_level >= CRITICAL) { va_list ap; va_start(ap, msg); *m_stream << QString("critical [%1]: ").arg((long)QThread::currentThreadId()) << QString().vsprintf(msg, ap) << endl; va_end(ap); } } void Logger::fine(const char* msg, ...) { QMutexLocker locker(&m_mutex); if(m_level >= FINE) { va_list ap; va_start(ap, msg); *m_stream << QString("fine [%1]: ").arg((long)QThread::currentThreadId()) << QString().vsprintf(msg, ap) << endl; va_end(ap); } } void Logger::finer(const char* msg, ...) { QMutexLocker locker(&m_mutex); if(m_level >= FINER) { va_list ap; va_start(ap, msg); *m_stream << QString("finer [%1]: ").arg((long)QThread::currentThreadId()) << QString().vsprintf(msg, ap) << endl; va_end(ap); } } void Logger::finest(const char* msg, ...) { QMutexLocker locker(&m_mutex); if(m_level >= FINEST) { va_list ap; va_start(ap, msg); *m_stream << QString("finest [%1]: ").arg((long)QThread::currentThreadId()) << QString().vsprintf(msg, ap) << endl; va_end(ap); } } void Logger::setLevel(int level) { m_level = level; } int Logger::level() { return m_level; } Logger::~Logger() { } int Logger::levelFor(char* c) { QString s = QString(c).toUpper(); if (s.isEmpty() || s == "NONE") return Logger::NONE; else if (s == "INFO") return Logger::INFO; else if (s == "WARN") return Logger::WARN; else if (s == "ERROR") return Logger::ERROR; else if (s == "CRITICAL") return Logger::CRITICAL; else if (s == "FINE") return Logger::FINE; else if (s == "FINER") return Logger::FINER; else if (s == "FINEST") return Logger::FINEST; else if (!s.isEmpty()) return qBound((int)NONE, s.toInt(), (int)FINEST); return 0; } Logger & Logger::operator <<( QString & msg) { logMessage(QString(msg)); return *m_self; } Logger & Logger::operator <<( const QString & msg) { logMessage(msg); return *m_self; } Logger & Logger::operator <<( const char * msg) { logMessage(QString(msg)); return *m_self; } Logger & Logger::operator <<( int msg) { logMessage(QString::number(msg)); return *m_self; } Logger & Logger::operator <<( double msg) { logMessage(QString::number(msg)); return *m_self; } void Logger::logMessage(const QString & msg) { switch (m_level) { case ERROR: error(msg); break; case CRITICAL: critical(msg); break; case NONE: break; case WARN: warn(msg); break; case INFO: info(msg); break; case FINE: fine(msg); break; case FINER: finer(msg); break; case FINEST: finest(msg); } } } qosmic-1.6.0/src/logger.h000066400000000000000000000066741304321135200152370ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef INCLUDE_LOGGER_H #define INCLUDE_LOGGER_H #include #include // undef these tokens to avoid conflicts with other // environments that might define them (win32). #undef CRITICAL #undef ERROR #undef NONE #undef WARN #undef INFO #undef FINE #undef FINER #undef FINEST extern QTextStream cout; extern QTextStream cerr; namespace Util { class Logger { private: static Logger* m_self; int m_level; QTextStream* m_stream; QMutex m_mutex; protected: Logger(); Logger(QTextStream&); public: ~Logger(); static Logger* getInstance(); static int levelFor(char*); void logMessage(const QString&); void setLevel(int); int level(); void info(QString&); void warn(QString&); void error(QString&); void critical(QString&); void fine(QString&); void finer(QString&); void finest(QString&); void info( const QString&); void warn( const QString&); void error( const QString&); void critical( const QString&); void fine( const QString&); void finer( const QString&); void finest( const QString&); void info(const char*, ...); void warn(const char*, ...); void error(const char*, ...); void critical(const char*, ...); void fine(const char*, ...); void finer(const char*, ...); void finest(const char*, ...); Logger& operator<<(QString&); Logger& operator<<(const QString&); Logger& operator<<(const char*); Logger& operator<<(int); Logger& operator<<(double); enum LogLevel { CRITICAL, ERROR, NONE, WARN, INFO, FINE, FINER, FINEST } ; }; } #define toNum(n) QString::number(n) #define logCrit(...) Util::Logger::getInstance()->critical(__VA_ARGS__) #define logError(...) Util::Logger::getInstance()->error(__VA_ARGS__) #define logWarn(...) Util::Logger::getInstance()->warn(__VA_ARGS__) #ifdef LOGGING #define logInfo(...) Util::Logger::getInstance()->info(__VA_ARGS__) #define logFine(...) Util::Logger::getInstance()->fine(__VA_ARGS__) #define logFiner(...) Util::Logger::getInstance()->finer(__VA_ARGS__) #define logFinest(...) Util::Logger::getInstance()->finest(__VA_ARGS__) #else #define logInfo(...) #define logFine(...) #define logFiner(...) #define logFinest(...) #endif #endif qosmic-1.6.0/src/lua/000077500000000000000000000000001304321135200143535ustar00rootroot00000000000000qosmic-1.6.0/src/lua/frame.cpp000066400000000000000000000260661304321135200161630ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "frame.h" #include "genome.h" #include "luathreadadapter.h" #include #define tr(msg) QCoreApplication::translate("Lua::Frame", msg).toLatin1().constData() #define method(name) {#name, &Frame::name} namespace Lua { const char Frame::className[] = "Frame"; Lunar::RegType Frame::methods[] = { method(get_genome), method(selected), method(bitdepth), method(earlyclip), method(render), method(update), method(num_genomes), method(load), method(save), method(copy_genome), method(del_genome), method(add_genome), method(genome), method(genomes), { 0, 0 } }; Frame::Frame(lua_State* L) : LuaType() { /* retrieve a context */ lua_pushlightuserdata(L, (void*)&LuaThreadAdapter::RegKey); /* push address */ lua_gettable(L, LUA_REGISTRYINDEX); /* retrieve value */ setContext(static_cast(lua_touserdata(L, -1))); lua_pop(L, 1); } Frame::~Frame() { } int Frame::get_genome(lua_State* L) { logFine(QString("Frame::get_genome, ptr: 0x%1") .arg((long)genome_vec->data(),0,16)); int idx = 0; if (lua_gettop(L) == 1) { idx = qMax(0, luaL_checkint(L, 1) - 1); lua_pop(L, 1); } int lsize = genome_vec->size(); if ( idx >= lsize ) { logInfo(QString("Frame::get_genome, adding %1 genomes") .arg(idx - lsize + 1)); flam3_genome g = flam3_genome(); Util::init_genome(&g); for (int n = 0 ; n < idx - lsize + 1 ; n++) { genome_vec->append(g); m_adapter->insertModified(genome_vec->size()); } } luaL_getmetatable(L, Genome::className); Lunar::new_T(L); Genome* g = Lunar::check(L, 1); g->setContext(L, idx); return 1; } int Frame::selected(lua_State* L) { int isnum; int idx = lua_tointegerx(L, 1, &isnum) - 1; if (isnum) { genome_vec->setSelected(idx); m_adapter->setModified(idx); } lua_pushinteger(L, genome_vec->selected() + 1); return 1; } int Frame::bitdepth(lua_State* L) { lua_settop(L, 0); lua_pushinteger(L, 64); return 1; } int Frame::earlyclip(lua_State* L) { logWarn("Frame::earlyclip : function not implemented"); lua_settop(L, 0); return 0; } int Frame::num_genomes(lua_State* L) { lua_pushinteger(L, genome_vec->size()); return 1; } int Frame::render(lua_State* L) { int args = lua_gettop(L); bool saved = true; if (args == 2) { int idx = qMax(0, luaL_checkint(L, 1) - 1); const char* fname = luaL_checkstring(L, 2); saved = m_adapter->saveImage(QString(fname), idx); } else if (args == 1) { if (lua_isnumber(L, 1) == 1) { int idx = qMax(0, luaL_checkint(L, 1) - 1); m_adapter->renderPreview(idx); } else if (lua_isuserdata(L, 1) == 1) { Genome* g = Lunar::check(L, 1); m_adapter->renderPreview(g->index()); } else { const char* fname = luaL_checkstring(L, 1); saved = m_adapter->saveImage(QString(fname)); } } else // call render and then block lua until the image is finished m_adapter->renderPreview(); lua_settop(L, 0); lua_pushboolean(L, saved); return 1; } // the same as render(), but it calls m_adapter->update() instead int Frame::update(lua_State* L) { int args = lua_gettop(L); bool saved = true; if (args == 2) { int idx = qMax(0, luaL_checkint(L, 1) - 1); const char* fname = luaL_checkstring(L, 2); saved = m_adapter->saveImage(QString(fname), idx); } else if (args == 1) { if (lua_isnumber(L, 1) == 1) { int idx = qMax(0, luaL_checkint(L, 1) - 1); m_adapter->update(idx); } else if (lua_isuserdata(L, 1) == 1) { Genome* g = Lunar::check(L, 1); m_adapter->update(g->index()); } else { const char* fname = luaL_checkstring(L, 1); saved = m_adapter->saveImage(QString(fname)); } } else // call update() and then block lua until the image is finished m_adapter->update(); lua_settop(L, 0); lua_pushboolean(L, saved); return 1; } int Frame::load(lua_State* L) { int args = lua_gettop(L); if (args != 1) { luaL_error(L, tr("load requires one string argument")); lua_pushboolean(L, false); } else { const char* fname = luaL_checkstring(L, 1); lua_settop(L, 0); lua_pushboolean(L, m_adapter->loadFile(fname)); m_adapter->resetModified(true); } return 1; } int Frame::save(lua_State* L) { int args = lua_gettop(L); if (args != 1) { luaL_error(L, tr("save requires one string argument")); lua_pushboolean(L, false); } else { const char* fname = luaL_checkstring(L, 1); lua_pushboolean(L, m_adapter->saveFile(QString(fname))); } return 1; } int Frame::copy_genome(lua_State* L) { int to = genome_vec->size(); if (lua_isnumber(L, 2)) to = luaL_checkint(L, 2) - 1; if (to < 0) luaL_error(L, tr("index out of range: Genome[%d] is null"), to + 1); if (lua_isuserdata(L, 1)) { // copy Genome 'a' to 'b' Lua::Genome* lg = Lunar::check(L, 1); flam3_genome* g = lg->get_genome_ptr(L); int from = lg->index(); // a non-attached temporary Lua genome has index < 0 flam3_genome* gd = genome_vec->data(); if (g != gd + to) { if (to < genome_vec->size()) { flam3_copy(gd + to, g); // copy 'from' into 'to' m_adapter->setModified(to); } else { // increase the genome vector size if needed while (genome_vec->size() <= to) { flam3_genome gt = flam3_genome(); if (from < 0) flam3_copy(>, g); else flam3_copy(>, genome_vec->data() + from); genome_vec->append(gt); m_adapter->insertModified(genome_vec->size()); } } } else logWarn("Lua::Frame::copy_genome : attempted to copy over same instance"); } else { // copy index 'a' to 'b' int from = luaL_checkint(L, 1) - 1; if (from == to) return 0; if (from >= genome_vec->size() || from < 0) luaL_error(L, tr("index out of range: Genome[%d] is null"), from + 1); flam3_genome* gd = genome_vec->data(); if (gd + from != gd + to) { if (to < genome_vec->size()) { flam3_copy(gd + to, gd + from); // copy 'from' into 'to' m_adapter->setModified(to); } else { // increase the genome vector size if needed while (genome_vec->size() <= to) { flam3_genome gt = flam3_genome(); flam3_copy(>, genome_vec->data() + from); genome_vec->append(gt); m_adapter->insertModified(genome_vec->size()); } } } else logWarn("Lua::Frame::copy_genome : attempted to copy over same instance"); } lua_settop(L, 0); luaL_getmetatable(L, Genome::className); Lunar::new_T(L); Lunar::check(L, 1)->setContext(L, to); return 1; } int Frame::del_genome(lua_State* L) { int idx = qMax(0, luaL_checkint(L, 1) - 1); if (idx >= genome_vec->size()) return 0; lua_settop(L, 0); lua_pushboolean(L, genome_vec->remove(idx)); m_adapter->removeModified(idx); if (idx == 0 && genome_vec->size() > 0) m_adapter->setModified(idx); return 1; } int Frame::add_genome(lua_State* L) { int nargs = lua_gettop(L); if (nargs > 1) { int num_to_add = qMax(1, luaL_checkint(L, 1)); Lua::Genome* lg = Lunar::check(L, 2); flam3_genome* g = lg->get_genome_ptr(L); int idx = lg->index(); for (int n = 0 ; n < num_to_add ; n++) { flam3_genome gt = flam3_genome(); if (idx < 0) flam3_copy(>, g); else flam3_copy(>, genome_vec->data() + idx); genome_vec->append(gt); m_adapter->insertModified(genome_vec->size()); } } else { int num_to_add = 1; flam3_genome* ga = 0; int idx = 0; if (nargs > 0) { if (lua_isuserdata(L, 1)) { Lua::Genome* lg = Lunar::check(L, 1); ga = lg->get_genome_ptr(L); idx = lg->index(); } else num_to_add = qMax(1, luaL_checkint(L, 1)); } // increase the genome vector size for (int n = 0 ; n < num_to_add ; n++) { flam3_genome g = flam3_genome(); if (ga != 0) { if (idx < 0) flam3_copy(&g, ga); // append the temp genome given by the user else flam3_copy(&g, genome_vec->data() + idx); } else Util::init_genome(&g); genome_vec->append(g); m_adapter->insertModified(genome_vec->size()); } } lua_settop(L, 0); luaL_getmetatable(L, Genome::className); Lunar::new_T(L); Lunar::check(L, 1)->setContext(L, genome_vec->size() - 1); return 1; } int Frame::genome(lua_State* L) { switch (lua_gettop(L)) { case 2: { int idx = luaL_checkint(L, 1) - 1; if (idx < 0) luaL_error(L, tr("index out of range: Genome[%d] is null"), idx + 1); Lua::Genome* lg = Lunar::check(L, 2); flam3_genome* g = lg->get_genome_ptr(L); flam3_genome* to = genome_vec->data() + idx; if (to == g) break; if (idx < genome_vec->size()) { flam3_copy(to, g); m_adapter->setModified(idx); } else { // increase the genome vector size if needed int from = lg->index(); while (genome_vec->size() <= idx) { flam3_genome gt = flam3_genome(); if (from < 0) flam3_copy(>, g); else flam3_copy(>, genome_vec->data() + from); genome_vec->append(gt); m_adapter->insertModified(genome_vec->size()); } } break; } case 1: { int idx = luaL_checkint(L, 1) - 1; if (idx >= genome_vec->size() || idx < 0) luaL_error(L, tr("index out of range: Genome[%d] is null"), idx + 1); lua_pop(L, 1); luaL_getmetatable(L, Genome::className); Lunar::new_T(L); Lunar::check(L, 1)->setContext(L, idx); break; } default: { lua_settop(L, 0); luaL_getmetatable(L, Genome::className); Lunar::new_T(L); Lunar::check(L, 1)->setContext(L, 0); } } return 1; } int Frame::genomes(lua_State* L) { lua_settop(L, 0); lua_newtable(L); for (int n = 0 ; n < genome_vec->size() ; n++) { lua_pushinteger(L, n + 1); Genome* obj = new Genome(L); Lunar::push(L, obj, true); // gc_T will delete this object obj->setContext(L, n); lua_settable(L, -3); } return 1; } // c++ interface void Frame::setContext(LuaThreadAdapter* m) { LuaType::setContext(m); genome_vec = m_adapter->genomeVector(); } } qosmic-1.6.0/src/lua/frame.h000066400000000000000000000040611304321135200156170ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef FRAME_LUA_H #define FRAME_LUA_H #include "genomevector.h" #include "luatype.h" #include "lunar.h" namespace Lua { class LuaThreadAdapter; class Frame : public LuaType { GenomeVector* genome_vec; public: Frame(lua_State*); ~Frame(); // lua interface int get_genome(lua_State*); int selected(lua_State*); int bitdepth(lua_State*); int earlyclip(lua_State*); int num_genomes(lua_State*); int update(lua_State*); int render(lua_State*); int load(lua_State*); int save(lua_State*); int copy_genome(lua_State*); int del_genome(lua_State*); int add_genome(lua_State*); int genomes(lua_State*); int genome(lua_State*); void setContext(LuaThreadAdapter*); static const char className[]; static Lunar::RegType methods[]; }; } #endif qosmic-1.6.0/src/lua/genome.cpp000066400000000000000000000440651304321135200163420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "genome.h" #include "xform.h" #include "luathreadadapter.h" #include #define tr(msg) QCoreApplication::translate("Lua::Genome", msg).toLatin1().constData() namespace Lua { const char Genome::className[] = "Genome"; Lunar::RegType Genome::methods[] = { { "width", &Genome::width }, { "height", &Genome::height }, { "index", &Genome::index }, { "center", &Genome::center }, { "rot_center", &Genome::rot_center }, { "rotate", &Genome::rotate }, { "vibrancy", &Genome::vibrancy }, { "hue_rotation", &Genome::hue_rotation }, { "background", &Genome::background }, { "zoom", &Genome::zoom }, { "pixels_per_unit", &Genome::pixels_per_unit }, { "scale", &Genome::pixels_per_unit }, { "spatial_filter_radius", &Genome::spatial_filter_radius }, { "spatial_filter_select", &Genome::spatial_filter_select }, { "sample_density", &Genome::sample_density }, { "brightness", &Genome::brightness }, { "contrast", &Genome::contrast }, { "gamma", &Genome::gamma }, { "time", &Genome::time }, { "interpolation", &Genome::interpolation }, { "interpolation_type", &Genome::interpolation_type }, { "palette_interpolation", &Genome::palette_interpolation }, { "num_xforms", &Genome::num_xforms }, { "final_xform_index", &Genome::final_xform_index }, { "final_xform_enable", &Genome::final_xform_enable }, { "get_final_xform", &Genome::get_final_xform }, { "genome_index", &Genome::genome_index }, { "symmetry", &Genome::symmetry }, { "palette_index", &Genome::palette_index }, { "spatial_oversample", &Genome::spatial_oversample }, { "nbatches", &Genome::nbatches }, { "ntemporal_samples", &Genome::ntemporal_samples }, { "estimator", &Genome::estimator }, { "estimator_curve", &Genome::estimator_curve }, { "estimator_minimum", &Genome::estimator_minimum }, { "highlight_power", &Genome::highlight_power }, { "gam_lin_thresh", &Genome::gam_lin_thresh }, { "get_xform", &Genome::get_xform }, { "add_xform", &Genome::add_xform }, { "del_xform", &Genome::del_xform }, { "copy_xform", &Genome::copy_xform }, { "xform", &Genome::xform }, { "xforms", &Genome::xforms }, { "clear_xforms", &Genome::clear_xforms }, { "load_palette", &Genome::load_palette }, { "palette", &Genome::palette }, { "chaos", &Genome::chaos }, { 0, 0 } }; Genome::Genome(lua_State* L) : m_idx(-1), m_genome() { /* retrieve a context */ lua_pushlightuserdata(L, (void*)&LuaThreadAdapter::RegKey); /* push address */ lua_gettable(L, LUA_REGISTRYINDEX); /* retrieve value */ LuaType::setContext(static_cast(lua_touserdata(L, -1))); lua_pop(L, 1); if (lua_gettop(L) > 0 && lua_isuserdata(L, 1)) { // check for a Genome type to copy Genome* g = Lunar::check(L, 1); flam3_copy(&m_genome, g->get_genome_ptr(L)); lua_pop(L, 1); } else Util::init_genome(&m_genome); get_genome_ptr(L); } flam3_genome* Genome::get_genome_ptr(lua_State* L) { if (m_idx >= 0) { GenomeVector* vec = m_adapter->genomeVector(); if (m_idx < vec->size()) genome_ptr = vec->data() + m_idx; else luaL_error(L, tr("index out of bounds: Genome[%d]"), m_idx + 1); } else genome_ptr = &m_genome; return genome_ptr; } #define intAcc(name) int Genome::name(lua_State* L)\ {\ get_genome_ptr(L); \ if (lua_gettop(L) == 1)\ {\ genome_ptr->name = luaL_checkint(L, 1);\ setModified();\ }\ else\ {\ lua_settop(L, 0);\ lua_pushinteger(L, genome_ptr->name);\ }\ return 1;\ }\ #define intAccRO(name) int Genome::name(lua_State* L)\ {\ get_genome_ptr(L); \ lua_settop(L, 0);\ lua_pushinteger(L, genome_ptr->name);\ return 1;\ }\ #define realAcc(name) int Genome::name(lua_State* L)\ {\ get_genome_ptr(L); \ if (lua_gettop(L) == 1)\ {\ genome_ptr->name = luaL_checknumber(L, 1);\ setModified();\ }\ else\ {\ lua_settop(L, 0);\ lua_pushnumber(L, genome_ptr->name);\ }\ return 1;\ }\ #define realAccRO(name) int Genome::name(lua_State* L)\ {\ get_genome_ptr(L); \ lua_settop(L, 0);\ lua_pushnumber(L, genome_ptr->name);\ return 1;\ }\ intAccRO(num_xforms); intAcc(width); intAcc(height); realAcc(rotate); realAcc(vibrancy); realAcc(hue_rotation); realAcc(zoom); realAcc(pixels_per_unit); realAcc(spatial_filter_radius); intAcc(spatial_filter_select); realAcc(sample_density); realAcc(brightness); realAcc(contrast); realAcc(gamma); realAcc(time); realAcc(estimator); realAcc(estimator_curve); realAcc(estimator_minimum); realAcc(gam_lin_thresh); intAcc(interpolation); intAcc(interpolation_type); intAcc(palette_interpolation); intAcc(symmetry); intAcc(palette_index); intAcc(spatial_oversample); intAcc(nbatches); intAcc(ntemporal_samples); int Genome::index(lua_State* L) { get_genome_ptr(L); lua_settop(L, 0); lua_pushinteger(L, m_idx + 1); return 1; } // this 'should be' the same as index(lua_State) int Genome::genome_index(lua_State* L) { get_genome_ptr(L); lua_settop(L, 0); lua_pushinteger(L, genome_ptr->genome_index + 1); return 1; } int Genome::final_xform_index(lua_State* L) { get_genome_ptr(L); lua_pushinteger(L, genome_ptr->final_xform_index + 1); return 1; } int Genome::final_xform_enable(lua_State* L) { get_genome_ptr(L); if (lua_gettop(L) > 0) { luaL_checktype(L, 1, LUA_TBOOLEAN); bool flag = lua_toboolean(L, 1) > 0; if (flag) { if (genome_ptr->final_xform_enable == 0) flam3_add_xforms(genome_ptr, 1, 0, 1); } else { if (genome_ptr->final_xform_enable == 1) flam3_delete_xform(genome_ptr, genome_ptr->final_xform_index); } setModified(); } else lua_pushboolean(L, genome_ptr->final_xform_enable); return 1; } int Genome::center(lua_State* L) { get_genome_ptr(L); double* x = &genome_ptr->center[0]; double* y = &genome_ptr->center[1]; if (lua_gettop(L) == 2) { *x = luaL_checknumber(L, 1); *y = luaL_checknumber(L, 2); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, *x); lua_pushnumber(L, *y); } return 2; } int Genome::rot_center(lua_State* L) { get_genome_ptr(L); double* x = &genome_ptr->rot_center[0]; double* y = &genome_ptr->rot_center[1]; if (lua_gettop(L) == 2) { *x = luaL_checknumber(L, 1); *y = luaL_checknumber(L, 2); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, *x); lua_pushnumber(L, *y); } return 2; } int Genome::background(lua_State* L) { get_genome_ptr(L); double* r = &genome_ptr->background[0]; double* g = &genome_ptr->background[1]; double* b = &genome_ptr->background[2]; if (lua_gettop(L) == 3) { *r = luaL_checknumber(L, 1); *g = luaL_checknumber(L, 2); *b = luaL_checknumber(L, 3); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, *r); lua_pushnumber(L, *g); lua_pushnumber(L, *b); } return 3; } int Genome::xform(lua_State* L) { get_genome_ptr(L); switch (lua_gettop(L)) { case 2: { int idx = luaL_checkint(L, 1) - 1; flam3_xform* xf = Lunar::check(L, 2)->get_xform_ptr(L); flam3_xform* to = genome_ptr->xform + idx; if (to == xf) return 1; // increase the xforms size if needed if (genome_ptr->num_xforms <= idx) Util::add_default_xforms(genome_ptr, 1 + idx - genome_ptr->num_xforms); flam3_copy_xform(genome_ptr->xform + idx, xf); setModified(); lua_settop(L, 0); luaL_getmetatable(L, XForm::className); Lunar::new_T(L); Lunar::check(L, 1)->setContext(L, this, idx); break; } case 1: { int idx = luaL_checkint(L, 1) - 1; if (idx > genome_ptr->num_xforms || idx < 0) luaL_error(L, tr("index out of range: Genome.XForm[%d] is null"), idx + 1); lua_pop(L, 1); luaL_getmetatable(L, XForm::className); Lunar::new_T(L); Lunar::check(L, 1)->setContext(L, this, idx); break; } default: { lua_settop(L, 0); luaL_getmetatable(L, XForm::className); Lunar::new_T(L); Lunar::check(L, 1)->setContext(L, this, 0); } } return 1; } int Genome::xforms(lua_State* L) { get_genome_ptr(L); lua_settop(L, 0); lua_newtable(L); for (int n = 0 ; n < genome_ptr->num_xforms ; n++) { lua_pushinteger(L, n + 1); XForm* obj = new XForm(L); Lunar::push(L, obj, true); // gc_T will delete this object obj->setContext(L, this, n); lua_settable(L, -3); } return 1; } int Genome::get_xform(lua_State* L) { get_genome_ptr(L); int xfn = 0; if (lua_gettop(L) == 1) { xfn = qMax(0, luaL_checkint(L, 1) - 1); lua_pop(L, 1); } if (xfn < genome_ptr->num_xforms) { luaL_getmetatable(L, XForm::className); Lunar::new_T(L); Lunar::check(L, 1)->setContext(L, this, xfn); } else { luaL_error(L, tr("genome has no xform at index %d"), xfn + 1); return 0; } return 1; } int Genome::get_final_xform(lua_State* L) { get_genome_ptr(L); lua_settop(L, 0); if (genome_ptr->final_xform_enable == 1) { luaL_getmetatable(L, XForm::className); Lunar::new_T(L); Lunar::check(L, 1)->setContext(L, this, genome_ptr->final_xform_index); return 1; } return 0; } int Genome::add_xform(lua_State* L) { get_genome_ptr(L); int num = 1; XForm* from = 0; if (lua_gettop(L) > 1) // two arguments num, XForm { num = luaL_checkint(L, 1); from = Lunar::check(L, 2); } else if (lua_gettop(L) > 0) // one argument num or XForm { if (lua_isuserdata(L, 1)) from = Lunar::check(L, 1); else num = luaL_checkint(L, 1); } int last_idx = qMax(0, genome_ptr->num_xforms - 1); if (genome_ptr->final_xform_enable == 1) last_idx -= 1; Util::add_default_xforms(genome_ptr, num); int dest_idx = genome_ptr->num_xforms - 1; if (genome_ptr->final_xform_enable == 1) dest_idx -= 1; if (from != 0) { flam3_xform* xf = from->get_xform_ptr(L); for (int i = last_idx ; i <= dest_idx ; i++) flam3_copy_xform(genome_ptr->xform + i, xf); } setModified(); lua_settop(L, 0); luaL_getmetatable(L, XForm::className); Lunar::new_T(L); Lunar::check(L, 1)->setContext(L, this, dest_idx); return 1; } int Genome::copy_xform(lua_State* L) { get_genome_ptr(L); flam3_xform* from = 0; int src_idx = 0; int dest_idx = luaL_checkint(L, 2) - 1; if (dest_idx < 0) luaL_error(L, tr("genome has no xform at index %d"), dest_idx + 1); if (lua_isuserdata(L, 1)) from = Lunar::check(L, 1)->get_xform_ptr(L); else { src_idx = luaL_checkint(L, 1) - 1; if (src_idx >= genome_ptr->num_xforms || src_idx < 0) luaL_error(L, tr("genome has no xform at index %d"), src_idx + 1); } if (genome_ptr->num_xforms <= dest_idx) Util::add_default_xforms(genome_ptr, dest_idx - genome_ptr->num_xforms + 1); if (from == 0) from = genome_ptr->xform + src_idx; flam3_xform* to = genome_ptr->xform + dest_idx; flam3_copy_xform(to, from); setModified(); lua_settop(L, 0); luaL_getmetatable(L, XForm::className); Lunar::new_T(L); Lunar::check(L, 1)->setContext(L, this, dest_idx); return 1; } int Genome::del_xform(lua_State* L) { get_genome_ptr(L); int idx = luaL_checkint(L, 1) - 1; if (idx >= genome_ptr->num_xforms || idx < 0) luaL_error(L, tr("genome has no xform at index %d"), idx + 1); else { flam3_delete_xform(genome_ptr, idx); setModified(); } return 0; } int Genome::clear_xforms(lua_State* L) { get_genome_ptr(L); for (int n = genome_ptr->num_xforms - 1 ; n >= 0 ; n--) flam3_delete_xform(genome_ptr, n); setModified(); return 0; } int Genome::load_palette(lua_State* L) { get_genome_ptr(L); int idx = qMax(0, luaL_checkint(L, 1) - 1); double hue_rotation = 0; if (lua_gettop(L) > 1) hue_rotation = luaL_checknumber(L, 2); flam3_get_palette(idx, genome_ptr->palette, hue_rotation); setModified(); return 0; } int Genome::palette(lua_State* L) { get_genome_ptr(L); if (lua_gettop(L) < 1) { // return the entire palette lua_newtable(L); for (int i = 0 ; i < 256 ; i++) { lua_pushinteger(L, i + 1); lua_newtable(L); lua_pushstring(L, "a"); lua_pushnumber(L, genome_ptr->palette[i].color[3]); lua_settable(L, -3); lua_pushstring(L, "b"); lua_pushnumber(L, genome_ptr->palette[i].color[2]); lua_settable(L, -3); lua_pushstring(L, "g"); lua_pushnumber(L, genome_ptr->palette[i].color[1]); lua_settable(L, -3); lua_pushstring(L, "r"); lua_pushnumber(L, genome_ptr->palette[i].color[0]); lua_settable(L, -3); lua_settable(L, -3); } } else if (lua_type(L, 1) == LUA_TTABLE) { // setting the whole palette from a table for (int i = 0 ; i < 256 ; i++) { double val; lua_pushinteger(L, i + 1); lua_gettable(L, -2); luaL_checktype(L, -1, LUA_TTABLE); lua_pushstring(L, "r"); lua_gettable(L, -2); val = luaL_checknumber(L, -1); lua_pop(L, 1); genome_ptr->palette[i].color[0] = val; lua_pushstring(L, "g"); lua_gettable(L, -2); val = luaL_checknumber(L, -1); lua_pop(L, 1); genome_ptr->palette[i].color[1] = val; lua_pushstring(L, "b"); lua_gettable(L, -2); val = luaL_checknumber(L, -1); lua_pop(L, 1); genome_ptr->palette[i].color[2] = val; lua_pushstring(L, "a"); lua_gettable(L, -2); if (lua_isnil(L, -1)) val = 1.0; else val = luaL_checknumber(L, -1); lua_pop(L, 1); genome_ptr->palette[i].color[3] = val; lua_pop(L, 1); } setModified(); } else { int idx = qMax(0, luaL_checkint(L, 1) - 1); if (idx > 255) luaL_error(L, tr("index %d out of range"), idx + 1); double r, g, b, a; if (lua_gettop(L) > 1) { r = luaL_checknumber(L, 2); g = luaL_checknumber(L, 3); b = luaL_checknumber(L, 4); if (lua_gettop(L) > 4) a = luaL_checknumber(L, 5); else a = 1.0; genome_ptr->palette[idx].color[0] = r; genome_ptr->palette[idx].color[1] = g; genome_ptr->palette[idx].color[2] = b; genome_ptr->palette[idx].color[3] = a; setModified(); } else { r = genome_ptr->palette[idx].color[0]; g = genome_ptr->palette[idx].color[1]; b = genome_ptr->palette[idx].color[2]; a = genome_ptr->palette[idx].color[3]; } lua_settop(L, 0); lua_pushnumber(L, r); lua_pushnumber(L, g); lua_pushnumber(L, b); lua_pushnumber(L, a); return 4; } return 1; } int Genome::chaos(lua_State* L) { get_genome_ptr(L); if (lua_gettop(L) < 1) { // return the entire chaos array lua_newtable(L); for (int i = 0 ; i < genome_ptr->num_xforms ; i++) { lua_pushinteger(L, i + 1); lua_newtable(L); for (int j = 0 ; j < genome_ptr->num_xforms ; j++) { lua_pushinteger(L, j + 1); lua_pushnumber(L, genome_ptr->chaos[i][j]); lua_settable(L, -3); } lua_settable(L, -3); } } else { if (lua_type(L, 1) == LUA_TTABLE) { // setting the whole table for (int i = 0 ; i < genome_ptr->num_xforms ; i++) { lua_pushinteger(L, i + 1); lua_gettable(L, -2); luaL_checktype(L, -1, LUA_TTABLE); for (int j = 0 ; j < genome_ptr->num_xforms ; j++) { lua_pushinteger(L, j + 1); lua_gettable(L, -2); double val = luaL_checknumber(L, -1); lua_pop(L, 1); genome_ptr->chaos[i][j] = val; } lua_pop(L, 1); } setModified(); } else { int idx = qMax(0, luaL_checkint(L, 1) - 1); if (idx >= genome_ptr->num_xforms) luaL_error(L, tr("no index %d in chaos array"), idx + 1); if (lua_type(L, 2) == LUA_TTABLE) { // setting chaos array for one xform index for (int j = 0 ; j < genome_ptr->num_xforms ; j++) { lua_pushinteger(L, j + 1); lua_gettable(L, -2); double val = luaL_checknumber(L, -1); lua_pop(L, 1); genome_ptr->chaos[idx][j] = val; } setModified(); } else { if (lua_gettop(L) > 2) { // setting chaos array for one table entry int rdx = qMax(0, luaL_checkint(L, 2) - 1); if (rdx >= genome_ptr->num_xforms) luaL_error(L, tr("no index %d,%d in chaos array"), idx + 1, rdx + 1); double val = luaL_checknumber(L, 3); genome_ptr->chaos[idx][rdx] = val; setModified(); } else { if (lua_gettop(L) == 2) { // return chaos array for one chaos entry int rdx = qMax(0, luaL_checkint(L, 2) - 1); if (rdx >= genome_ptr->num_xforms) luaL_error(L, tr("no index %d,%d in chaos array"), idx + 1, rdx + 1); lua_pushnumber(L, genome_ptr->chaos[idx][rdx]); } else { // return chaos array for one xform index lua_newtable(L); for (int j = 0 ; j < genome_ptr->num_xforms ; j++) { lua_pushinteger(L, j + 1); lua_pushnumber(L, genome_ptr->chaos[idx][j]); lua_settable(L, -3); } } } } } } return 1; } int Genome::highlight_power(lua_State* L) { get_genome_ptr(L); if (lua_gettop(L) > 0) { double val = luaL_checknumber(L, 1); if (val < 0.0) val = -1.0; genome_ptr->highlight_power = val; setModified(); } else lua_pushnumber(L, genome_ptr->highlight_power); return 1; } // c++ interface void Genome::setContext(lua_State* L, int index) { m_idx = index; get_genome_ptr(L); } void Genome::setModified() { if (m_idx > -1) m_adapter->setModified(m_idx); } flam3_genome* Genome::data() { return genome_ptr; } int Genome::index() const { return m_idx; } Genome::~Genome() { clear_cp(&m_genome, flam3_defaults_on); } } qosmic-1.6.0/src/lua/genome.h000066400000000000000000000062511304321135200160020ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef GENOME_LUA_H #define GENOME_LUA_H #include "lunar.h" #include "flam3util.h" #include "luatype.h" #include "basistriangle.h" #define intAcc_H(name) int name(lua_State*); #define intAcc_HRO(name) int name(lua_State*); #define realAcc_H(name) int name(lua_State*); #define realAcc_HRO(name) int name(lua_State*); namespace Lua { class Genome : public LuaType { int m_idx; flam3_genome m_genome; flam3_genome* genome_ptr; public: Genome(lua_State*); ~Genome(); int index(lua_State*); int index() const; int center(lua_State*); int rot_center(lua_State*); int background(lua_State*); flam3_genome* get_genome_ptr(lua_State*); intAcc_HRO(num_xforms); intAcc_HRO(genome_index); intAcc_H(width); intAcc_H(height); realAcc_H(rotate); realAcc_H(vibrancy); realAcc_H(hue_rotation); realAcc_H(zoom); realAcc_H(pixels_per_unit); realAcc_H(spatial_filter_radius); intAcc_H(spatial_filter_select); realAcc_H(sample_density); realAcc_H(brightness); realAcc_H(contrast); realAcc_H(gamma); realAcc_H(time); realAcc_H(estimator); realAcc_H(estimator_curve); realAcc_H(estimator_minimum); realAcc_H(gam_lin_thresh); realAcc_H(highlight_power); intAcc_H(interpolation); intAcc_H(interpolation_type); intAcc_H(palette_interpolation); intAcc_H(final_xform_enable); intAcc_H(final_xform_index); intAcc_H(symmetry); intAcc_H(palette_index); intAcc_H(spatial_oversample); intAcc_H(nbatches); intAcc_H(ntemporal_samples); int get_xform(lua_State*); int add_xform(lua_State*); int del_xform(lua_State*); int copy_xform(lua_State*); int clear_xforms(lua_State*); int load_palette(lua_State*); int palette(lua_State*); int chaos(lua_State*); int get_final_xform(lua_State*); int xform(lua_State*); int xforms(lua_State*); void setContext(lua_State*, int); void setModified(); flam3_genome* data(); static const char className[]; static Lunar::RegType methods[]; }; } #endif qosmic-1.6.0/src/lua/highlighter.cpp000066400000000000000000000130101304321135200173500ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "highlighter.h" namespace Lua { Highlighter::Highlighter(QTextDocument *parent) : QSyntaxHighlighter(parent) { /** * This is the syntax highlighter copied from the example in the qt4 docs, * and modified look for lua style text. * * Each rule is applied in order to the text in a given block. The last * rule to match wins. */ HighlightingRule rule; constantFormat.setForeground(Qt::darkGreen); rule.pattern = QRegExp("[-+]?(?:(?:\\d+\\.\\d+)|(?:\\.\\d+)|(?:\\d+\\.?))"); rule.format = constantFormat; highlightingRules.append(rule); classFormat.setForeground(Qt::darkMagenta); rule.pattern = QRegExp("\\b[A-Za-z][A-Za-z0-9_]*\\b"); rule.format = classFormat; highlightingRules.append(rule); functionFormat.setForeground(Qt::blue); rule.pattern = QRegExp("\\b[A-Za-z0-9_]+ *(?=\\()"); rule.format = functionFormat; highlightingRules.append(rule); keywordFormat.setForeground(Qt::darkBlue); keywordFormat.setFontWeight(QFont::Bold); QStringList keywordPatterns; keywordPatterns << "\\bdo\\b" << "\\bend\\b" << "\\bfor\\b" << "\\bwhile\\b" << "\\bif\\b" << "\\bthen\\b" << "\\belse\\b" << "\\belseif\\b" << "\\brepeat\\b" << "\\buntil\\b" << "\\bfunction\\b" << "\\blocal\\b" << "\\breturn\\b" << "\\bin\\b" << "\\bbreak\\b" << "\\bnot\\b" << "\\bnil\\b" << "\\band\\b" << "\\bor\\b" << "\\btrue\\b" << "\\bfalse\\b"; foreach (QString pattern, keywordPatterns) { rule.pattern = QRegExp(pattern); rule.format = keywordFormat; highlightingRules.append(rule); } quotationFormat.setForeground(Qt::darkGreen); rule.pattern = QRegExp("\"[^\"]*\""); rule.format = quotationFormat; highlightingRules.append(rule); rule.pattern = QRegExp("'[^']*'"); rule.format = quotationFormat; highlightingRules.append(rule); singleLineCommentFormat.setForeground(Qt::gray); singleLineCommentFormat.setFontItalic(true); rule.pattern = QRegExp("--[^\n]*"); rule.format = singleLineCommentFormat; highlightingRules.append(rule); multiLineCommentFormat.setForeground(Qt::gray); multiLineCommentFormat.setFontItalic(true); multiLineStringExpression = QRegExp("\\[(=*)\\["); multiLineCommentExpression = QRegExp("--[^\n]*\\[=*\\["); } void Highlighter::highlightBlock(const QString &text) { setCurrentBlockState(0); int level = 0; int iscomment = 0; int startIndex = 0; int previousState = previousBlockState(); if (previousState < 1) { // Apply these rules if not in a multi-line comment block foreach (HighlightingRule rule, highlightingRules) { QRegExp expression(rule.pattern); int index = text.indexOf(expression); while (index >= 0) { int length = expression.matchedLength(); setFormat(index, length, rule.format); index = text.indexOf(expression, index + length); } } // Look for a mutli-line string in this block startIndex = text.indexOf(multiLineStringExpression); } else { level = (previousState & 0x0f) - 1; iscomment = previousState & 0x10; } // // Determine if the current block is in a multi-line comment/string. // // The current comment level is saved in the current block state. The // comment level is equal to the number of '=' characters in a long string // token (eg. "[==[" has level 2). // // A block state value greater than zero indicates a previous or current // comment block. The comment level is one less than the block state // value. A flag in bit four indicates if the block is a multi-line // comment or a quoted string. // while (startIndex >= 0) { if (multiLineStringExpression.matchedLength() > 0) { level = multiLineStringExpression.cap(1).length(); int idx = text.indexOf(multiLineCommentExpression); if (idx >= 0) { startIndex = idx; iscomment = 0x10; } } QRegExp endExpression(QString("\\]={%1}\\]").arg(level)); int endIndex = text.indexOf(endExpression, startIndex); int commentLength; if (endIndex == -1) { setCurrentBlockState(1 + level + iscomment); commentLength = text.length() - startIndex; } else { commentLength = endIndex - startIndex + endExpression.matchedLength(); } setFormat(startIndex, commentLength, iscomment ? multiLineCommentFormat : quotationFormat); startIndex = text.indexOf(multiLineStringExpression, startIndex + commentLength); } } }; qosmic-1.6.0/src/lua/highlighter.h000066400000000000000000000040001304321135200170140ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef LUAHIGHLIGHTER_H #define LUAHIGHLIGHTER_H #include namespace Lua { class Highlighter : public QSyntaxHighlighter { public: Highlighter(QTextDocument *parent = 0); protected: void highlightBlock(const QString &text); private: struct HighlightingRule { QRegExp pattern; QTextCharFormat format; }; QVector highlightingRules; QTextCharFormat keywordFormat; QTextCharFormat classFormat; QTextCharFormat singleLineCommentFormat; QTextCharFormat multiLineCommentFormat; QTextCharFormat quotationFormat; QTextCharFormat functionFormat; QTextCharFormat constantFormat; QRegExp multiLineStringExpression; QRegExp multiLineCommentExpression; }; } #endif qosmic-1.6.0/src/lua/luaeditor.cpp000066400000000000000000000241431304321135200170530ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include "luaeditor.h" #include "logger.h" namespace Lua { LuaEditor::LuaEditor(QWidget* pa) : QTextEdit(pa), parent(pa) { highlighter = new Highlighter(document()); lineWidget = new LineWidget(this); connect(document(), SIGNAL(blockCountChanged(int)), this, SLOT(updateLineWidgetWidth(int))); connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(highlightCurrentLine())); highlightCurrentLine(); QStringList names = QFontDatabase().families(); QStringList prefs; prefs << "DejaVu Sans Mono" << "Bitstream Vera Sans Mono" << "Terminus" << "Fixed"; foreach (QString p, prefs) if (names.contains(p, Qt::CaseInsensitive)) { logInfo(QString("LuaEditor::LuaEditor : found font %1").arg(p)); setFontFamily(p); break; } QAction* a = new QAction(tr("Open a file"), this); a->setShortcut(tr("Ctrl+1")); a->setShortcutContext(Qt::WidgetShortcut); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(load())); a = new QAction(tr("Save file"), this); a->setShortcut(tr("Ctrl+2")); a->setShortcutContext(Qt::WidgetShortcut); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(save())); a = new QAction(tr("Save to file"), this); a->setShortcut(tr("Ctrl+3")); a->setShortcutContext(Qt::WidgetShortcut); addAction(a); connect(a, SIGNAL(triggered()), this, SLOT(saveAs())); } LuaEditor::~LuaEditor() { delete highlighter; } void LuaEditor::keyPressEvent(QKeyEvent* e) { if ((e->key() == Qt::Key_L || e->key() == Qt::Key_Slash || e->key() == Qt::Key_Question) && e->modifiers() & Qt::ControlModifier) { if (textCursor().hasSelection()) { QString str = textCursor().selectedText(); QStringList slist = str.split(QChar(0x2029)); QMutableStringListIterator it(slist); if (e->modifiers() & Qt::ShiftModifier) while (it.hasNext()) it.next().replace(QRegExp("^\\s*-- ?"), ""); else while (it.hasNext()) it.next().prepend("-- "); textCursor().insertText(slist.join("\n")); } else { QTextCursor c = textCursor(); if (e->modifiers() & Qt::ShiftModifier) { c.clearSelection(); int pos = c.position(); c.movePosition(QTextCursor::StartOfLine); c.setPosition(pos, QTextCursor::KeepAnchor); QString str = c.selectedText(); str.replace(QRegExp("^\\s*-- ?"), ""); c.insertText(str); } else { int pos = c.position(); c.movePosition(QTextCursor::StartOfLine); c.insertText("-- "); c.setPosition(pos); } } } else if ( (e->key() == Qt::Key_Tab || e->key() == Qt::Key_Underscore || e->key() == Qt::Key_5) && textCursor().hasSelection()) // a simple block indenting key { QTextCursor c(textCursor()); if (e->modifiers() & Qt::ControlModifier) { int start = textCursor().selectionEnd(); int anchor = textCursor().selectionStart(); c.beginEditBlock(); c.setPosition(start); c.movePosition(QTextCursor::StartOfBlock); while (c.position() + c.block().length() > anchor) { QString str = c.block().text(); if (str.startsWith(QChar('\t'))) c.deleteChar(); else if (str.contains(QRegExp("^\\s+.*"))) { // c.deleteChar();c.deleteChar();c.deleteChar();c.deleteChar(); } c.movePosition(QTextCursor::Up); c.movePosition(QTextCursor::StartOfBlock); } c.endEditBlock(); } else { int anchor = textCursor().selectionStart(); int pos = textCursor().selectionEnd(); c.beginEditBlock(); c.setPosition(pos); c.movePosition(QTextCursor::StartOfBlock); while (c.position() + c.block().length() > anchor) { c.insertText("\t"); c.movePosition(QTextCursor::Up); c.movePosition(QTextCursor::StartOfBlock); } c.endEditBlock(); } } else if (e->key() == Qt::Key_Return) { int pos = textCursor().position(); QTextCursor c(textCursor()); c.select(QTextCursor::LineUnderCursor); QString text(c.selectedText()); c.clearSelection(); QRegExp re("^(\\s+)"); if ( re.indexIn(text) > -1 ) { QString ws = re.cap(0); c.beginEditBlock(); c.setPosition(pos); c.insertText("\n" + ws); c.endEditBlock(); ensureCursorVisible(); } else QTextEdit::keyPressEvent(e); } else QTextEdit::keyPressEvent(e); } bool LuaEditor::load(QString filename) { if (filename.isEmpty()) { filename = QString(".lua"); filename = QFileDialog::getOpenFileName(this, tr("Open a script"), script_filename, tr("lua source (*.lua);;All files (*)")); if (filename.isEmpty()) return false; } QFile file(filename); if (!file.open(QIODevice::ReadOnly)) { QMessageBox::warning(this, tr("Application error"), tr("Cannot read file %1\n").arg(filename)); return false; } QTextStream os(&file); QString p = os.readAll(); file.close(); setPlainText(p); script_filename = filename; emit scriptLoaded(); return true; } bool LuaEditor::saveAs(QString filename) { if (filename.isEmpty()) { QFileDialog dialog(this, tr("Save a script"), script_filename, tr("lua source (*.lua);;All files (*)")); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setDefaultSuffix("lua"); dialog.selectFile(script_filename); if (dialog.exec()) filename = dialog.selectedFiles().first(); else return false; } QFile file(filename); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { QMessageBox::warning(this, tr("Application error"), tr("Cannot write file %1\n").arg(filename)); return false; } QTextStream os(&file); os << toPlainText(); file.close(); script_filename = filename; emit scriptSaved(); return true; } bool LuaEditor::save() { return saveAs(script_filename); } QString LuaEditor::scriptFile() const { return script_filename; } void LuaEditor::setCurrentFont(const QFont& f) { QString text(toPlainText()); QTextEdit::setCurrentFont(f); setPlainText(text); updateLineWidgetWidth(0); } int LuaEditor::lineWidgetWidth() { QFontMetrics fm(currentFont()); int digits = 1; int max = qMax(1, document()->blockCount()); while (max >= 10) { max /= 10; ++digits; } return 12 + fm.width(QLatin1Char('9')) * digits; } void LuaEditor::updateLineWidgetWidth(int) { setViewportMargins(lineWidgetWidth(), 0, 0, 0); } void LuaEditor::scrollContentsBy(int dx, int dy) { QTextEdit::scrollContentsBy(dx, dy); lineWidget->scroll(0, dy); } void LuaEditor::resizeEvent(QResizeEvent* e) { QTextEdit::resizeEvent(e); QRect cr = contentsRect(); cr.setWidth(lineWidgetWidth()); lineWidget->setGeometry(cr); } void LuaEditor::highlightCurrentLine() { QList extraSelections; if (!isReadOnly()) { QTextEdit::ExtraSelection selection; QColor lineColor = QColor(Qt::yellow).lighter(160); selection.format.setBackground(lineColor); selection.format.setProperty(QTextFormat::FullWidthSelection, true); selection.cursor = textCursor(); selection.cursor.clearSelection(); extraSelections.append(selection); } setExtraSelections(extraSelections); } QTextBlock LuaEditor::getFirstVisibleBlock() { QRect view = viewport()->geometry(); int xpos = view.x(); int ypos = view.y() - verticalScrollBar()->sliderPosition(); QAbstractTextDocumentLayout* layout = document()->documentLayout(); QTextBlock block = document()->begin(); while (block.isValid()) { if (view.intersects( layout->blockBoundingRect(block) .translated(xpos, ypos).toRect())) return block; block = block.next(); } return document()->begin(); } void LuaEditor::lineWidgetPaintEvent(QPaintEvent* event) { QPainter painter(lineWidget); QRect view = viewport()->geometry(); int xpos = view.x(); int ypos = view.y() - verticalScrollBar()->sliderPosition(); QTextBlock block = getFirstVisibleBlock(); QAbstractTextDocumentLayout* layout = document()->documentLayout(); QRect brect = layout->blockBoundingRect(block) .translated(xpos, ypos).toRect(); int top = brect.top(); int bottom = brect.bottom(); QFont font(currentFont()); int height = QFontMetrics(font).height(); QColor c(palette().color(QPalette::Base)); painter.setPen(c.lightness() > 127 ? c.darker(150) : c.lighter(150)); painter.setFont(currentFont()); while (block.isValid() && top <= event->rect().bottom()) { if (block.isVisible() && bottom >= event->rect().top()) painter.drawText(0, top, lineWidget->width() - 9, height, Qt::AlignRight, QString::number(block.blockNumber() + 1)); block = block.next(); top = bottom; bottom = top + layout->blockBoundingRect(block) .translated(xpos, ypos).toRect().height(); } } LineWidget::LineWidget(LuaEditor* editor) : QWidget(editor), luaEditor(editor) { } QSize LineWidget::sizeHint() const { return QSize(luaEditor->lineWidgetWidth(), 0); } void LineWidget::paintEvent(QPaintEvent* event) { luaEditor->lineWidgetPaintEvent(event); } } qosmic-1.6.0/src/lua/luaeditor.h000066400000000000000000000045331304321135200165210ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef LUALUAEDITOR_H #define LUALUAEDITOR_H #include #include "highlighter.h" namespace Lua { class LuaEditor : public QTextEdit { Q_OBJECT public: LuaEditor(QWidget* pa=0); ~LuaEditor(); void lineWidgetPaintEvent(QPaintEvent*); int lineWidgetWidth(); public slots: bool save(); bool load(QString filename=QString()); bool saveAs(QString filename=QString()); QString scriptFile() const; void setCurrentFont(const QFont&); signals: void scriptLoaded(); void scriptSaved(); protected: void resizeEvent(QResizeEvent*); void keyPressEvent(QKeyEvent*); void scrollContentsBy(int dx, int dy); QTextBlock getFirstVisibleBlock(); QString script_filename; QWidget* parent; QWidget* lineWidget; Highlighter* highlighter; private slots: void highlightCurrentLine(); void updateLineWidgetWidth(int); }; class LineWidget : public QWidget { Q_OBJECT public: LineWidget(LuaEditor* editor); QSize sizeHint() const; protected: void paintEvent(QPaintEvent *event); private: LuaEditor* luaEditor; }; } #endif qosmic-1.6.0/src/lua/luathread.cpp000066400000000000000000000636751304321135200170510ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "logger.h" #include "luathread.h" #include "genome.h" #include "xform.h" #include "qosmic.h" #include "mainwindow.h" #include "luathreadadapter.h" namespace Lua { LuaThread::LuaThread(MainWindow* m, QObject* parent) : QThread(parent), lua_errstr(), lua_paths() { lua_paths.append(QOSMIC_SCRIPTSDIR + "/?.lua"); lua_paths.append(";" + QOSMIC_USERDIR + "/scripts/?.lua"); thread_adapter = new LuaThreadAdapter(m, this); irandinit(&ctx, 0); connect(this, SIGNAL(scriptStopped()), thread_adapter, SLOT(mainWindowChangedSlot()), Qt::DirectConnection); } LuaThread::~LuaThread() { delete thread_adapter; } void LuaThread::run() { lua_State* L = luaL_newstate(); luaL_openlibs(L); lua_load_environment(L); GenomeVector* genomes = thread_adapter->genomeVector(); int selected = genomes->selected(); thread_adapter->resetModified(); thread_adapter->window()->setDialogsEnabled(false); thread_adapter->listen(true); lua_stopluathread_script = false; lua_errstr.clear(); int error = luaL_loadstring(L, lua_text.toLatin1().constData()) || lua_pcall(L, 0, LUA_MULTRET, 0); if (error) { lua_errstr = tr("error: %1").arg(lua_tostring(L, -1)); if (lua_errstr.contains(QRegExp(tr("stopping$")))) // error says stopping if stopped { lua_errstr = tr("script stopped"); logInfo("LuaThread::run : script stopped"); } else { logError(QString("LuaThread::run : %1").arg(lua_errstr)); emitScriptOutput(lua_errstr); } lua_pop(L, 1); /* pop error message from the stack */ } else lua_errstr = tr("ok"); lua_close(L); thread_adapter->window()->setDialogsEnabled(true); // signal the genomevector watchers of updates made with Lua calls QList modified = thread_adapter->modifiedList(); genomes->dataModified(modified); int current = genomes->selected(); if ((0 <= current) && ((current < modified.size() && modified.at(current)) || (selected != current))) { logFine("LuaThread::run : rendering preview for %d", current); thread_adapter->renderPreview(current); } thread_adapter->listen(false); emit scriptFinished(); } /** * The is the c++ LuaThread method to signal a script that it should stop * executing. */ void LuaThread::stopScript() { lua_stopluathread_script = true; emit scriptStopped(); // mainly for signaling the mainwindowadapter } /** * This function is bound to the lua environment function stopped(). It allows * the user to insert checkpoints for stopping a script from outside of the * lua thread. This is handy for stopping a script that has as infinite loop. */ int LuaThread::lua_stopluathread(lua_State* L) { LuaThread* p = static_cast(lua_touserdata(L, lua_upvalueindex(1))); if (p) { if (lua_gettop(L) > 0 && lua_isboolean(L, 1)) p->lua_stopluathread_script = lua_toboolean(L, 1); else lua_pushboolean(L, p->lua_stopluathread_script); } else return luaL_error(L, tr("stack has no thread ref").toLatin1().constData()); return 1; } /** * Used by the lua_print function to signal output. */ void LuaThread::emitScriptOutput(const QString& output) { emit scriptHasOutput(output); } /** * Define my own `print' function, following the luaB_print * model but changing `fputs' to put the strings at a proper place * (a console window or a log file, for instance). */ int LuaThread::lua_print(lua_State* L) { LuaThread* p = static_cast(lua_touserdata(L, lua_upvalueindex(1))); if (p) { int n = lua_gettop(L); /* number of arguments */ int i; lua_getglobal(L, "tostring"); for (i=1; i<=n; i++) { const char *s; lua_pushvalue(L, -1); /* function to be called */ lua_pushvalue(L, i); /* value to print */ lua_call(L, 1, 1); s = lua_tostring(L, -1); /* get result */ if (s == NULL) { luaL_Buffer b; luaL_buffinit(L, &b); luaL_addstring(&b, LUA_QL("tostring")); luaL_addstring(&b, tr(" must return a string to ").toLatin1().constData()); luaL_addstring(&b, LUA_QL("print")); luaL_pushresult(&b); return lua_error(L); } if (i>1) p->emitScriptOutput("\t"); p->emitScriptOutput(s); lua_pop(L, 1); /* pop result */ } p->emitScriptOutput("\n"); } else return luaL_error(L, tr("stack has no thread ref").toLatin1().constData()); return 0; } void LuaThread::scriptInputResponse(bool ok, QString& response) { input_response_text = response; input_response_ok = ok; input_response = true; } void LuaThread::emitScriptInputRequest(const QString& prompt, const QString& text) { input_response = false; input_response_ok = false; input_response_text = QString(); emit scriptInputRequest(prompt, text); } int LuaThread::lua_dialog(lua_State* L) { LuaThread* p = static_cast(lua_touserdata(L, lua_upvalueindex(1))); if (p) { const QString prompt(luaL_optstring(L, 1, "?")); const QString text(luaL_optstring(L, 2, "")); p->emitScriptInputRequest(prompt, text); while (!p->input_response) p->msleep(100); lua_pushboolean(L, p->input_response_ok); lua_pushstring(L, p->input_response_text.toLatin1().constData()); } else return luaL_error(L, tr("stack has no thread ref").toLatin1().constData()); return 2; } int LuaThread::lua_irand(lua_State* L) { LuaThread* p = static_cast(lua_touserdata(L, lua_upvalueindex(1))); if (p) { lua_settop(L, 0); lua_pushnumber(L, (double)irand(&(p->ctx)) / 0xffffffff ); } else return luaL_error(L, tr("stack has no thread ref").toLatin1().constData()); return 1; } int LuaThread::lua_msleep(lua_State* L) { LuaThread* p = static_cast(lua_touserdata(L, lua_upvalueindex(1))); if (p) { long msecs = luaL_checklong(L, 1); QThread::msleep(msecs); lua_settop(L, 0); // check if stopped if (p->lua_stopluathread_script) return luaL_error(L, tr("stopping").toLatin1().constData()); else lua_pushboolean(L, 1); } else return luaL_error(L, tr("stack has no thread ref").toLatin1().constData()); return 1; } // expose the sleep function for the thread void LuaThread::msleep(unsigned long msecs) { QThread::msleep(msecs); } void LuaThread::lua_load_environment(lua_State* L) { // register methods for flam3 types Lunar::Register(L); Lunar::Register(L); Lunar::Register(L); /* registry["thread_adapter"] = &thread_adapter */ lua_pushlightuserdata(L, (void*)&LuaThreadAdapter::RegKey); /* push address */ lua_pushlightuserdata(L, (void*)thread_adapter); lua_settable(L, LUA_REGISTRYINDEX); // created and bind a global Frame object luaL_getmetatable(L, Frame::className); Lunar::new_T(L); Lunar::check(L, 1); lua_setglobal(L, "frame"); // create and bind global support functions lua_pushlightuserdata(L, (void*)this); lua_pushcclosure(L, &LuaThread::lua_stopluathread, 1); lua_setglobal(L, "stopped"); lua_pushlightuserdata(L, (void*)this); lua_pushcclosure(L, &LuaThread::lua_irand, 1); lua_setglobal(L, "irand"); lua_pushlightuserdata(L, (void*)this); lua_pushcclosure(L, &LuaThread::lua_msleep, 1); lua_setglobal(L, "msleep"); lua_pushlightuserdata(L, (void*)this); lua_pushcclosure(L, &LuaThread::lua_print, 1); lua_setglobal(L, "print"); lua_pushlightuserdata(L, (void*)this); lua_pushcclosure(L, &LuaThread::lua_dialog, 1); lua_setglobal(L, "dialog"); // global flam3 variation constants lua_pushinteger(L, VAR_LINEAR + 1); lua_setglobal(L, "LINEAR"); lua_pushinteger(L, VAR_SINUSOIDAL + 1); lua_setglobal(L, "SINUSOIDAL"); lua_pushinteger(L, VAR_SPHERICAL + 1); lua_setglobal(L, "SPHERICAL"); lua_pushinteger(L, VAR_SWIRL + 1); lua_setglobal(L, "SWIRL"); lua_pushinteger(L, VAR_HORSESHOE + 1); lua_setglobal(L, "HORSESHOE"); lua_pushinteger(L, VAR_POLAR + 1); lua_setglobal(L, "POLAR"); lua_pushinteger(L, VAR_HANDKERCHIEF + 1); lua_setglobal(L, "HANDKERCHIEF"); lua_pushinteger(L, VAR_HEART + 1); lua_setglobal(L, "HEART"); lua_pushinteger(L, VAR_DISC + 1); lua_setglobal(L, "DISC"); lua_pushinteger(L, VAR_SPIRAL + 1); lua_setglobal(L, "SPIRAL"); lua_pushinteger(L, VAR_HYPERBOLIC + 1); lua_setglobal(L, "HYPERBOLIC"); lua_pushinteger(L, VAR_DIAMOND + 1); lua_setglobal(L, "DIAMOND"); lua_pushinteger(L, VAR_EX + 1); lua_setglobal(L, "EX"); lua_pushinteger(L, VAR_JULIA + 1); lua_setglobal(L, "JULIA"); lua_pushinteger(L, VAR_BENT + 1); lua_setglobal(L, "BENT"); lua_pushinteger(L, VAR_WAVES + 1); lua_setglobal(L, "WAVES"); lua_pushinteger(L, VAR_FISHEYE + 1); lua_setglobal(L, "FISHEYE"); lua_pushinteger(L, VAR_POPCORN + 1); lua_setglobal(L, "POPCORN"); lua_pushinteger(L, VAR_EXPONENTIAL + 1); lua_setglobal(L, "EXPONENTIAL"); lua_pushinteger(L, VAR_POWER + 1); lua_setglobal(L, "POWER"); lua_pushinteger(L, VAR_COSINE + 1); lua_setglobal(L, "COSINE"); lua_pushinteger(L, VAR_RINGS + 1); lua_setglobal(L, "RINGS"); lua_pushinteger(L, VAR_FAN + 1); lua_setglobal(L, "FAN"); lua_pushinteger(L, VAR_BLOB + 1); lua_setglobal(L, "BLOB"); lua_pushinteger(L, VAR_PDJ + 1); lua_setglobal(L, "PDJ"); lua_pushinteger(L, VAR_FAN2 + 1); lua_setglobal(L, "FAN2"); lua_pushinteger(L, VAR_RINGS2 + 1); lua_setglobal(L, "RINGS2"); lua_pushinteger(L, VAR_EYEFISH + 1); lua_setglobal(L, "EYEFISH"); lua_pushinteger(L, VAR_BUBBLE + 1); lua_setglobal(L, "BUBBLE"); lua_pushinteger(L, VAR_CYLINDER + 1); lua_setglobal(L, "CYLINDER"); lua_pushinteger(L, VAR_PERSPECTIVE + 1); lua_setglobal(L, "PERSPECTIVE"); lua_pushinteger(L, VAR_NOISE + 1); lua_setglobal(L, "NOISE"); lua_pushinteger(L, VAR_JULIAN + 1); lua_setglobal(L, "JULIAN"); lua_pushinteger(L, VAR_JULIASCOPE + 1); lua_setglobal(L, "JULIASCOPE"); lua_pushinteger(L, VAR_BLUR + 1); lua_setglobal(L, "BLUR"); lua_pushinteger(L, VAR_GAUSSIAN_BLUR + 1); lua_setglobal(L, "GAUSSIAN_BLUR"); lua_pushinteger(L, VAR_RADIAL_BLUR + 1); lua_setglobal(L, "RADIAL_BLUR"); lua_pushinteger(L, VAR_PIE + 1); lua_setglobal(L, "PIE"); lua_pushinteger(L, VAR_NGON + 1); lua_setglobal(L, "NGON"); lua_pushinteger(L, VAR_CURL + 1); lua_setglobal(L, "CURL"); lua_pushinteger(L, VAR_RECTANGLES + 1); lua_setglobal(L, "RECTANGLES"); lua_pushinteger(L, VAR_ARCH + 1); lua_setglobal(L, "ARCH"); lua_pushinteger(L, VAR_TANGENT + 1); lua_setglobal(L, "TANGENT"); lua_pushinteger(L, VAR_SQUARE + 1); lua_setglobal(L, "SQUARE"); lua_pushinteger(L, VAR_RAYS + 1); lua_setglobal(L, "RAYS"); lua_pushinteger(L, VAR_BLADE + 1); lua_setglobal(L, "BLADE"); lua_pushinteger(L, VAR_SECANT2 + 1); lua_setglobal(L, "SECANT"); lua_pushinteger(L, VAR_TWINTRIAN + 1); lua_setglobal(L, "TWINTRIAN"); lua_pushinteger(L, VAR_CROSS + 1); lua_setglobal(L, "CROSS"); lua_pushinteger(L, VAR_DISC2 + 1); lua_setglobal(L, "DISC2"); lua_pushinteger(L, VAR_SUPER_SHAPE + 1); lua_setglobal(L, "SUPER_SHAPE"); lua_pushinteger(L, VAR_FLOWER + 1); lua_setglobal(L, "FLOWER"); lua_pushinteger(L, VAR_CONIC + 1); lua_setglobal(L, "CONIC"); lua_pushinteger(L, VAR_PARABOLA + 1); lua_setglobal(L, "PARABOLA"); lua_pushinteger(L, VAR_BENT2 + 1); lua_setglobal(L, "BENT2"); lua_pushinteger(L, VAR_BIPOLAR + 1); lua_setglobal(L, "BIPOLAR"); lua_pushinteger(L, VAR_BOARDERS + 1); lua_setglobal(L, "BOARDERS"); lua_pushinteger(L, VAR_BUTTERFLY + 1); lua_setglobal(L, "BUTTERFLY"); lua_pushinteger(L, VAR_CELL + 1); lua_setglobal(L, "CELL"); lua_pushinteger(L, VAR_CPOW + 1); lua_setglobal(L, "CPOW"); lua_pushinteger(L, VAR_CURVE + 1); lua_setglobal(L, "CURVE"); lua_pushinteger(L, VAR_EDISC + 1); lua_setglobal(L, "EDISC"); lua_pushinteger(L, VAR_ELLIPTIC + 1); lua_setglobal(L, "ELLIPTIC"); lua_pushinteger(L, VAR_ESCHER + 1); lua_setglobal(L, "ESCHER"); lua_pushinteger(L, VAR_FOCI + 1); lua_setglobal(L, "FOCI"); lua_pushinteger(L, VAR_LAZYSUSAN + 1); lua_setglobal(L, "LAZYSUSAN"); lua_pushinteger(L, VAR_LOONIE + 1); lua_setglobal(L, "LOONIE"); lua_pushinteger(L, VAR_PRE_BLUR + 1); lua_setglobal(L, "PRE_BLUR"); lua_pushinteger(L, VAR_MODULUS + 1); lua_setglobal(L, "MODULUS"); lua_pushinteger(L, VAR_OSCILLOSCOPE + 1); lua_setglobal(L, "OSCILLOSCOPE"); lua_pushinteger(L, VAR_POLAR2 + 1); lua_setglobal(L, "POLAR2"); lua_pushinteger(L, VAR_POPCORN2 + 1); lua_setglobal(L, "POPCORN2"); lua_pushinteger(L, VAR_SCRY + 1); lua_setglobal(L, "SCRY"); lua_pushinteger(L, VAR_SEPARATION + 1); lua_setglobal(L, "SEPARATION"); lua_pushinteger(L, VAR_SPLIT + 1); lua_setglobal(L, "SPLIT"); lua_pushinteger(L, VAR_SPLITS + 1); lua_setglobal(L, "SPLITS"); lua_pushinteger(L, VAR_STRIPES + 1); lua_setglobal(L, "STRIPES"); lua_pushinteger(L, VAR_WEDGE + 1); lua_setglobal(L, "WEDGE"); lua_pushinteger(L, VAR_WEDGE_JULIA + 1); lua_setglobal(L, "WEDGE_JULIA"); lua_pushinteger(L, VAR_WEDGE_SPH + 1); lua_setglobal(L, "WEDGE_SPH"); lua_pushinteger(L, VAR_WHORL + 1); lua_setglobal(L, "WHORL"); lua_pushinteger(L, VAR_WAVES2 + 1); lua_setglobal(L, "WAVES2"); lua_pushinteger(L, VAR_EXP + 1); lua_setglobal(L, "EXP"); lua_pushinteger(L, VAR_LOG + 1); lua_setglobal(L, "LOG"); lua_pushinteger(L, VAR_SIN + 1); lua_setglobal(L, "SIN"); lua_pushinteger(L, VAR_COS + 1); lua_setglobal(L, "COS"); lua_pushinteger(L, VAR_TAN + 1); lua_setglobal(L, "TAN"); lua_pushinteger(L, VAR_SEC + 1); lua_setglobal(L, "SEC"); lua_pushinteger(L, VAR_CSC + 1); lua_setglobal(L, "CSC"); lua_pushinteger(L, VAR_COT + 1); lua_setglobal(L, "COT"); lua_pushinteger(L, VAR_SINH + 1); lua_setglobal(L, "SINH"); lua_pushinteger(L, VAR_COSH + 1); lua_setglobal(L, "COSH"); lua_pushinteger(L, VAR_TANH + 1); lua_setglobal(L, "TANH"); lua_pushinteger(L, VAR_SECH + 1); lua_setglobal(L, "SECH"); lua_pushinteger(L, VAR_CSCH + 1); lua_setglobal(L, "CSCH"); lua_pushinteger(L, VAR_COTH + 1); lua_setglobal(L, "COTH"); lua_pushinteger(L, VAR_AUGER + 1); lua_setglobal(L, "AUGER"); lua_pushinteger(L, VAR_FLUX + 1); lua_setglobal(L, "FLUX"); lua_pushinteger(L, VAR_MOBIUS + 1); lua_setglobal(L, "MOBIUS"); lua_pushinteger(L, -1); lua_setglobal(L, "RANDOM"); lua_pushinteger(L, flam3_nvariations); lua_setglobal(L, "NUM_VARS"); // spatial filter kernel types lua_pushinteger(L, flam3_gaussian_kernel); lua_setglobal(L, "GAUSSIAN_KERNEL"); lua_pushinteger(L, flam3_hermite_kernel); lua_setglobal(L, "HERMITE_KERNEL"); lua_pushinteger(L, flam3_box_kernel); lua_setglobal(L, "BOX_KERNEL"); lua_pushinteger(L, flam3_triangle_kernel); lua_setglobal(L, "TRIANGLE_KERNEL"); lua_pushinteger(L, flam3_bell_kernel); lua_setglobal(L, "BELL_KERNEL"); lua_pushinteger(L, flam3_b_spline_kernel); lua_setglobal(L, "B_SPLINE_KERNEL"); lua_pushinteger(L, flam3_lanczos3_kernel); lua_setglobal(L, "LANCZOS3_KERNEL"); lua_pushinteger(L, flam3_lanczos2_kernel); lua_setglobal(L, "LANCZOS2_KERNEL"); lua_pushinteger(L, flam3_mitchell_kernel); lua_setglobal(L, "MITCHELL_KERNEL"); lua_pushinteger(L, flam3_blackman_kernel); lua_setglobal(L, "BLACKMAN_KERNEL"); lua_pushinteger(L, flam3_catrom_kernel); lua_setglobal(L, "CATROM_KERNEL"); lua_pushinteger(L, flam3_hamming_kernel); lua_setglobal(L, "HAMMING_KERNEL"); lua_pushinteger(L, flam3_hanning_kernel); lua_setglobal(L, "HANNING_KERNEL"); lua_pushinteger(L, flam3_quadratic_kernel); lua_setglobal(L, "QUADRATIC_KERNEL"); // motion interpolation curves and functions lua_pushinteger(L, flam3_interpolation_linear); lua_setglobal(L, "INTERPOLATION_LINEAR"); lua_pushinteger(L, flam3_interpolation_smooth); lua_setglobal(L, "INTERPOLATION_SMOOTH"); lua_pushinteger(L, flam3_inttype_linear); lua_setglobal(L, "INTTYPE_LINEAR"); lua_pushinteger(L, flam3_inttype_log); lua_setglobal(L, "INTTYPE_LOG"); lua_pushinteger(L, flam3_inttype_compat); lua_setglobal(L, "INTTYPE_COMPAT"); lua_pushinteger(L, flam3_inttype_older); lua_setglobal(L, "INTTYPE_OLDER"); // create an array of variation names lua_createtable(L, flam3_nvariations, 0); lua_pushinteger(L, VAR_LINEAR + 1); lua_pushstring(L, "LINEAR"); lua_settable(L, -3); lua_pushinteger(L, VAR_SINUSOIDAL + 1); lua_pushstring(L, "SINUSOIDAL"); lua_settable(L, -3); lua_pushinteger(L, VAR_SPHERICAL + 1); lua_pushstring(L, "SPHERICAL"); lua_settable(L, -3); lua_pushinteger(L, VAR_SWIRL + 1); lua_pushstring(L, "SWIRL"); lua_settable(L, -3); lua_pushinteger(L, VAR_HORSESHOE + 1); lua_pushstring(L, "HORSESHOE"); lua_settable(L, -3); lua_pushinteger(L, VAR_POLAR + 1); lua_pushstring(L, "POLAR"); lua_settable(L, -3); lua_pushinteger(L, VAR_HANDKERCHIEF + 1); lua_pushstring(L, "HANDKERCHIEF"); lua_settable(L, -3); lua_pushinteger(L, VAR_HEART + 1); lua_pushstring(L, "HEART"); lua_settable(L, -3); lua_pushinteger(L, VAR_DISC + 1); lua_pushstring(L, "DISC"); lua_settable(L, -3); lua_pushinteger(L, VAR_SPIRAL + 1); lua_pushstring(L, "SPIRAL"); lua_settable(L, -3); lua_pushinteger(L, VAR_HYPERBOLIC + 1); lua_pushstring(L, "HYPERBOLIC"); lua_settable(L, -3); lua_pushinteger(L, VAR_DIAMOND + 1); lua_pushstring(L, "DIAMOND"); lua_settable(L, -3); lua_pushinteger(L, VAR_EX + 1); lua_pushstring(L, "EX"); lua_settable(L, -3); lua_pushinteger(L, VAR_JULIA + 1); lua_pushstring(L, "JULIA"); lua_settable(L, -3); lua_pushinteger(L, VAR_BENT + 1); lua_pushstring(L, "BENT"); lua_settable(L, -3); lua_pushinteger(L, VAR_WAVES + 1); lua_pushstring(L, "WAVES"); lua_settable(L, -3); lua_pushinteger(L, VAR_FISHEYE + 1); lua_pushstring(L, "FISHEYE"); lua_settable(L, -3); lua_pushinteger(L, VAR_POPCORN + 1); lua_pushstring(L, "POPCORN"); lua_settable(L, -3); lua_pushinteger(L, VAR_EXPONENTIAL + 1); lua_pushstring(L, "EXPONENTIAL"); lua_settable(L, -3); lua_pushinteger(L, VAR_POWER + 1); lua_pushstring(L, "POWER"); lua_settable(L, -3); lua_pushinteger(L, VAR_COSINE + 1); lua_pushstring(L, "COSINE"); lua_settable(L, -3); lua_pushinteger(L, VAR_RINGS + 1); lua_pushstring(L, "RINGS"); lua_settable(L, -3); lua_pushinteger(L, VAR_FAN + 1); lua_pushstring(L, "FAN"); lua_settable(L, -3); lua_pushinteger(L, VAR_BLOB + 1); lua_pushstring(L, "BLOB"); lua_settable(L, -3); lua_pushinteger(L, VAR_PDJ + 1); lua_pushstring(L, "PDJ"); lua_settable(L, -3); lua_pushinteger(L, VAR_FAN2 + 1); lua_pushstring(L, "FAN2"); lua_settable(L, -3); lua_pushinteger(L, VAR_RINGS2 + 1); lua_pushstring(L, "RINGS2"); lua_settable(L, -3); lua_pushinteger(L, VAR_EYEFISH + 1); lua_pushstring(L, "EYEFISH"); lua_settable(L, -3); lua_pushinteger(L, VAR_BUBBLE + 1); lua_pushstring(L, "BUBBLE"); lua_settable(L, -3); lua_pushinteger(L, VAR_CYLINDER + 1); lua_pushstring(L, "CYLINDER"); lua_settable(L, -3); lua_pushinteger(L, VAR_PERSPECTIVE + 1); lua_pushstring(L, "PERSPECTIVE"); lua_settable(L, -3); lua_pushinteger(L, VAR_NOISE + 1); lua_pushstring(L, "NOISE"); lua_settable(L, -3); lua_pushinteger(L, VAR_JULIAN + 1); lua_pushstring(L, "JULIAN"); lua_settable(L, -3); lua_pushinteger(L, VAR_JULIASCOPE + 1); lua_pushstring(L, "JULIASCOPE"); lua_settable(L, -3); lua_pushinteger(L, VAR_BLUR + 1); lua_pushstring(L, "BLUR"); lua_settable(L, -3); lua_pushinteger(L, VAR_GAUSSIAN_BLUR + 1); lua_pushstring(L, "GAUSSIAN_BLUR"); lua_settable(L, -3); lua_pushinteger(L, VAR_RADIAL_BLUR + 1); lua_pushstring(L, "RADIAL_BLUR"); lua_settable(L, -3); lua_pushinteger(L, VAR_PIE + 1); lua_pushstring(L, "PIE"); lua_settable(L, -3); lua_pushinteger(L, VAR_NGON + 1); lua_pushstring(L, "NGON"); lua_settable(L, -3); lua_pushinteger(L, VAR_CURL + 1); lua_pushstring(L, "CURL"); lua_settable(L, -3); lua_pushinteger(L, VAR_RECTANGLES + 1); lua_pushstring(L, "RECTANGLES"); lua_settable(L, -3); lua_pushinteger(L, VAR_ARCH + 1); lua_pushstring(L, "ARCH"); lua_settable(L, -3); lua_pushinteger(L, VAR_TANGENT + 1); lua_pushstring(L, "TANGENT"); lua_settable(L, -3); lua_pushinteger(L, VAR_SQUARE + 1); lua_pushstring(L, "SQUARE"); lua_settable(L, -3); lua_pushinteger(L, VAR_RAYS + 1); lua_pushstring(L, "RAYS"); lua_settable(L, -3); lua_pushinteger(L, VAR_BLADE + 1); lua_pushstring(L, "BLADE"); lua_settable(L, -3); lua_pushinteger(L, VAR_SECANT2 + 1); lua_pushstring(L, "SECANT"); lua_settable(L, -3); lua_pushinteger(L, VAR_TWINTRIAN + 1); lua_pushstring(L, "TWINTRIAN"); lua_settable(L, -3); lua_pushinteger(L, VAR_CROSS + 1); lua_pushstring(L, "CROSS"); lua_settable(L, -3); lua_pushinteger(L, VAR_DISC2 + 1); lua_pushstring(L, "DISC2"); lua_settable(L, -3); lua_pushinteger(L, VAR_SUPER_SHAPE + 1); lua_pushstring(L, "SUPER_SHAPE"); lua_settable(L, -3); lua_pushinteger(L, VAR_FLOWER + 1); lua_pushstring(L, "FLOWER"); lua_settable(L, -3); lua_pushinteger(L, VAR_CONIC + 1); lua_pushstring(L, "CONIC"); lua_settable(L, -3); lua_pushinteger(L, VAR_PARABOLA + 1); lua_pushstring(L, "PARABOLA"); lua_settable(L, -3); lua_pushinteger(L, VAR_BENT2 + 1); lua_pushstring(L, "BENT2"); lua_settable(L, -3); lua_pushinteger(L, VAR_BIPOLAR + 1); lua_pushstring(L, "BIPOLAR"); lua_settable(L, -3); lua_pushinteger(L, VAR_BOARDERS + 1); lua_pushstring(L, "BOARDERS"); lua_settable(L, -3); lua_pushinteger(L, VAR_BUTTERFLY + 1); lua_pushstring(L, "BUTTERFLY"); lua_settable(L, -3); lua_pushinteger(L, VAR_CELL + 1); lua_pushstring(L, "CELL"); lua_settable(L, -3); lua_pushinteger(L, VAR_CPOW + 1); lua_pushstring(L, "CPOW"); lua_settable(L, -3); lua_pushinteger(L, VAR_CURVE + 1); lua_pushstring(L, "CURVE"); lua_settable(L, -3); lua_pushinteger(L, VAR_EDISC + 1); lua_pushstring(L, "EDISC"); lua_settable(L, -3); lua_pushinteger(L, VAR_ELLIPTIC + 1); lua_pushstring(L, "ELLIPTIC"); lua_settable(L, -3); lua_pushinteger(L, VAR_ESCHER + 1); lua_pushstring(L, "ESCHER"); lua_settable(L, -3); lua_pushinteger(L, VAR_FOCI + 1); lua_pushstring(L, "FOCI"); lua_settable(L, -3); lua_pushinteger(L, VAR_LAZYSUSAN + 1); lua_pushstring(L, "LAZYSUSAN"); lua_settable(L, -3); lua_pushinteger(L, VAR_LOONIE + 1); lua_pushstring(L, "LOONIE"); lua_settable(L, -3); lua_pushinteger(L, VAR_PRE_BLUR + 1); lua_pushstring(L, "PRE_BLUR"); lua_settable(L, -3); lua_pushinteger(L, VAR_MODULUS + 1); lua_pushstring(L, "MODULUS"); lua_settable(L, -3); lua_pushinteger(L, VAR_OSCILLOSCOPE + 1); lua_pushstring(L, "OSCILLOSCOPE"); lua_settable(L, -3); lua_pushinteger(L, VAR_POLAR2 + 1); lua_pushstring(L, "POLAR2"); lua_settable(L, -3); lua_pushinteger(L, VAR_POPCORN2 + 1); lua_pushstring(L, "POPCORN2"); lua_settable(L, -3); lua_pushinteger(L, VAR_SCRY + 1); lua_pushstring(L, "SCRY"); lua_settable(L, -3); lua_pushinteger(L, VAR_SEPARATION + 1); lua_pushstring(L, "SEPARATION"); lua_settable(L, -3); lua_pushinteger(L, VAR_SPLIT + 1); lua_pushstring(L, "SPLIT"); lua_settable(L, -3); lua_pushinteger(L, VAR_SPLITS + 1); lua_pushstring(L, "SPLITS"); lua_settable(L, -3); lua_pushinteger(L, VAR_STRIPES + 1); lua_pushstring(L, "STRIPES"); lua_settable(L, -3); lua_pushinteger(L, VAR_WEDGE + 1); lua_pushstring(L, "WEDGE"); lua_settable(L, -3); lua_pushinteger(L, VAR_WEDGE_JULIA + 1); lua_pushstring(L, "WEDGE_JULIA"); lua_settable(L, -3); lua_pushinteger(L, VAR_WEDGE_SPH + 1); lua_pushstring(L, "WEDGE_SPH"); lua_settable(L, -3); lua_pushinteger(L, VAR_WHORL + 1); lua_pushstring(L, "WHORL"); lua_settable(L, -3); lua_pushinteger(L, VAR_WAVES2 + 1); lua_pushstring(L, "WAVES2"); lua_settable(L, -3); lua_pushinteger(L, VAR_EXP + 1); lua_pushstring(L, "EXP"); lua_settable(L, -3); lua_pushinteger(L, VAR_LOG + 1); lua_pushstring(L, "LOG"); lua_settable(L, -3); lua_pushinteger(L, VAR_SIN + 1); lua_pushstring(L, "SIN"); lua_settable(L, -3); lua_pushinteger(L, VAR_COS + 1); lua_pushstring(L, "COS"); lua_settable(L, -3); lua_pushinteger(L, VAR_TAN + 1); lua_pushstring(L, "TAN"); lua_settable(L, -3); lua_pushinteger(L, VAR_SEC + 1); lua_pushstring(L, "SEC"); lua_settable(L, -3); lua_pushinteger(L, VAR_CSC + 1); lua_pushstring(L, "CSC"); lua_settable(L, -3); lua_pushinteger(L, VAR_COT + 1); lua_pushstring(L, "COT"); lua_settable(L, -3); lua_pushinteger(L, VAR_SINH + 1); lua_pushstring(L, "SINH"); lua_settable(L, -3); lua_pushinteger(L, VAR_COSH + 1); lua_pushstring(L, "COSH"); lua_settable(L, -3); lua_pushinteger(L, VAR_TANH + 1); lua_pushstring(L, "TANH"); lua_settable(L, -3); lua_pushinteger(L, VAR_SECH + 1); lua_pushstring(L, "SECH"); lua_settable(L, -3); lua_pushinteger(L, VAR_CSCH + 1); lua_pushstring(L, "CSCH"); lua_settable(L, -3); lua_pushinteger(L, VAR_COTH + 1); lua_pushstring(L, "COTH"); lua_settable(L, -3); lua_pushinteger(L, VAR_AUGER + 1); lua_pushstring(L, "AUGER"); lua_settable(L, -3); lua_pushinteger(L, VAR_FLUX + 1); lua_pushstring(L, "FLUX"); lua_settable(L, -3); lua_pushinteger(L, VAR_MOBIUS + 1); lua_pushstring(L, "MOBIUS"); lua_settable(L, -3); lua_setglobal(L, "VARIATIONS"); // adjust the package.path to include user/app paths for require() if (!lua_paths.isEmpty()) { lua_getglobal(L, "package"); lua_pushstring(L, "path"); lua_gettable(L, -2); QString path( lua_tostring(L, -1) ); path.append(";" + lua_paths); lua_pop(L, 1); lua_pushstring(L, "path"); lua_pushstring(L, path.toLatin1().data()); lua_settable(L, -3); lua_pop(L, 1); } } void LuaThread::setLuaText(QString str) { lua_text = str; } const QString& LuaThread::luaText() { return lua_text; } void LuaThread::setLuaPaths(const QString& paths) { lua_paths = paths; } QString LuaThread::luaPaths() const { return lua_paths; } bool LuaThread::stopping() const { return lua_stopluathread_script; } QString LuaThread::getMessage() { static int pos = 0; if (isRunning()) { QString msg(tr("Running ........")); msg.chop(8 - (pos++ % 8)); return msg; } return lua_errstr; } } qosmic-1.6.0/src/lua/luathread.h000066400000000000000000000051551304321135200165030ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef LUATHREAD_H #define LUATHREAD_H #include #include "flam3util.h" #include "lunar.h" #include "frame.h" #include "renderthread.h" class MainWindow; class LuaThreadAdapter; namespace Lua { class LuaThread : public QThread { Q_OBJECT LuaThreadAdapter* thread_adapter; QString lua_text; QString lua_errstr; QString lua_paths; bool lua_stopluathread_script; randctx ctx; bool input_response; bool input_response_ok; QString input_response_text; public: LuaThread(MainWindow* m, QObject* parent=0); ~LuaThread(); void msleep(unsigned long msecs); virtual void run(); void setLuaText(QString); const QString& luaText(); void setLuaPaths(const QString&); QString luaPaths() const; void stopScript(); bool stopping() const; QString getMessage(); void emitScriptOutput(const QString&); void emitScriptInputRequest(const QString&, const QString&); static int lua_stopluathread(lua_State*); static int lua_irand(lua_State*); static int lua_msleep(lua_State*); static int lua_print(lua_State*); static int lua_dialog(lua_State*); void scriptInputResponse(bool, QString&); signals: void scriptFinished(); void scriptStopped(); void scriptHasOutput(const QString&); void scriptInputRequest(const QString&, const QString&); protected: void lua_load_environment(lua_State*); }; } #endif qosmic-1.6.0/src/lua/luathreadadapter.cpp000066400000000000000000000114001304321135200203650ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "luathreadadapter.h" #include "flam3filestream.h" #include "mainwindow.h" #include "logger.h" const char Lua::LuaThreadAdapter::RegKey = 'k'; Lua::LuaThreadAdapter::LuaThreadAdapter(MainWindow* mw, LuaThread* t, QObject* parent) : QObject(parent), m_win(mw), m_thread(t) { logFine("Lua::LuaThreadAdapter::LuaThreadAdapter : const"); moveToThread(t); connect(this, SIGNAL(updateSignal()), m_win->xformEditor(), SLOT(reset())); } Lua::LuaThreadAdapter::~LuaThreadAdapter() { logFine("Lua::LuaThreadAdapter::LuaThreadAdapter : dest"); } void Lua::LuaThreadAdapter::listen(bool listen) { if (listen) { connect(m_win, SIGNAL(mainWindowChanged()), this, SLOT(mainWindowChangedSlot()), Qt::QueuedConnection); connect(m_win->renderThread(), SIGNAL(flameRendered(RenderEvent*)), this, SLOT(flameRenderedSlot(RenderEvent*)), Qt::QueuedConnection); } else { disconnect(m_win->renderThread(), SIGNAL(flameRendered(RenderEvent*)), this, SLOT(flameRenderedSlot(RenderEvent*))); disconnect(m_win, SIGNAL(mainWindowChanged()), this, SLOT(mainWindowChangedSlot())); } } GenomeVector* Lua::LuaThreadAdapter::genomeVector() { return m_win->genomeVector(); } BasisTriangle* Lua::LuaThreadAdapter::basisTriangle() { return m_win->xformEditor()->basis(); } void Lua::LuaThreadAdapter::renderPreview(int idx) { logFine("Lua::LuaThreadAdapter::renderPreview"); m_win->renderPreview(idx); waitForEvent(); } void Lua::LuaThreadAdapter::update(int idx) { logFine("Lua::LuaThreadAdapter::update"); emit updateSignal(); renderPreview(idx); } bool Lua::LuaThreadAdapter::loadFile(const QString& name) { logFine("Lua::LuaThreadAdapter::loadFile"); QFile file(name); Flam3FileStream s(&file); int ncps(0); flam3_genome* in; if (s.read(&in, &ncps)) { GenomeVector* genomes = genomeVector(); genomes->clear(); genomes->insert(0, ncps, in); return true; } return false; } bool Lua::LuaThreadAdapter::saveFile(const QString& name) { QFile file(name); Flam3FileStream s(&file); return s.write(genomeVector()); } bool Lua::LuaThreadAdapter::saveImage(const QString& name, int idx) { logFine("Lua::LuaThreadAdapter::saveImage"); bool n = m_win->saveImage(name, idx); waitForEvent(); return n; } void Lua::LuaThreadAdapter::flameRenderedSlot(RenderEvent* /*e*/) { logFine("Lua::LuaThreadAdapter::flameRenderedSlot : signaling wait event"); if (m_mutex.tryLock()) m_mutex.unlock(); else m_mutex.unlock(); } void Lua::LuaThreadAdapter::mainWindowChangedSlot() { logFine("Lua::LuaThreadAdapter::mainWindowChangedSlot : signaling wait event"); if (m_mutex.tryLock()) m_mutex.unlock(); else m_mutex.unlock(); } void Lua::LuaThreadAdapter::waitForEvent() { m_mutex.lock(); while(!m_mutex.tryLock()) { logFinest("Lua::LuaThreadAdapter::waitForEvent : waiting"); QCoreApplication::processEvents(); } m_mutex.unlock(); } Lua::LuaThread* Lua::LuaThreadAdapter::thread() const { return m_thread; } MainWindow* Lua::LuaThreadAdapter::window() const { return m_win; } QList& Lua::LuaThreadAdapter::modifiedList() { return m_modified; } void Lua::LuaThreadAdapter::insertModified(int idx, bool flag) { m_modified.insert(idx, flag); } void Lua::LuaThreadAdapter::setModified(int idx, bool flag) { m_modified.replace(idx, flag); } void Lua::LuaThreadAdapter::removeModified(int idx) { m_modified.removeAt(idx); } void Lua::LuaThreadAdapter::resetModified(bool flag) { m_modified.clear(); for (int i = 0 ; i < genomeVector()->size() ; i++) m_modified.append(flag); } qosmic-1.6.0/src/lua/luathreadadapter.h000066400000000000000000000046001304321135200200360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef LUATHREADADAPTER_H #define LUATHREADADAPTER_H #include #include #include "luathread.h" class BasisTriangle; class MainWindow; namespace Lua { class LuaThreadAdapter : public QObject { Q_OBJECT MainWindow* m_win; LuaThread* m_thread; QList m_modified; QMutex m_mutex; public: static const char RegKey; LuaThreadAdapter(MainWindow*, LuaThread*, QObject* =0); ~LuaThreadAdapter(); GenomeVector* genomeVector(); BasisTriangle* basisTriangle(); LuaThread* thread() const; MainWindow* window() const; QList& modifiedList(); void setModified(int, bool =true); void insertModified(int, bool =true); void removeModified(int); void resetModified(bool =false); void renderPreview(int =0); void update(int =0); bool loadFile(const QString&); bool saveFile(const QString&); bool saveImage(const QString&, int =0); void listen(bool); public slots: void flameRenderedSlot(RenderEvent* e); void mainWindowChangedSlot(); signals: void loadFileSignal(const QString&); void updateSignal(); private: void waitForEvent(); }; } #endif qosmic-1.6.0/src/lua/luatype.cpp000066400000000000000000000033131304321135200165420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "luatype.h" #include "luathreadadapter.h" namespace Lua { LuaType::LuaType() : m_adapter(0) { } LuaType::LuaType(LuaThreadAdapter* value) : m_adapter(value) { } LuaType::~LuaType() { } LuaThreadAdapter* LuaType::context() const { return m_adapter; } void LuaType::setContext(LuaThreadAdapter* value) { m_adapter = value; } GenomeVector* LuaType::genomes() const { return m_adapter->genomeVector(); } } qosmic-1.6.0/src/lua/luatype.h000066400000000000000000000032061304321135200162100ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef LUALUATYPE_H #define LUALUATYPE_H #include "genomevector.h" namespace Lua { class LuaThreadAdapter; class LuaType { protected: LuaThreadAdapter* m_adapter; public: LuaType(); LuaType(LuaThreadAdapter*); ~LuaType(); void setContext(LuaThreadAdapter*); LuaThreadAdapter* context() const; GenomeVector* genomes() const; }; } #endif qosmic-1.6.0/src/lua/lunar.h000066400000000000000000000177341304321135200156610ustar00rootroot00000000000000/** * The contents of this header file was taken from the lua-users wiki [1], and * modified to fit in this document. * * [1] http://lua-users.org/wiki/CppBindingWithLunar */ #ifndef LUNAR_H #define LUNAR_H extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } #include "logger.h" #include #define tr(msg) QCoreApplication::translate("Lua::Lunar", msg).toLatin1().constData() namespace Lua { template class Lunar { typedef struct { T* pT; } userdataType; public: typedef int (T::*mfp)(lua_State* L); typedef struct { const char* name; mfp mfunc; } RegType; static void Register(lua_State* L) { lua_newtable(L); int methods = lua_gettop(L); luaL_newmetatable(L, T::className); int metatable = lua_gettop(L); // store method table in globals so that // scripts can add functions written in Lua. lua_pushvalue(L, methods); lua_setglobal(L, T::className); // hide metatable from Lua getmetatable() lua_pushvalue(L, methods); set(L, metatable, "__metatable"); lua_pushvalue(L, methods); set(L, metatable, "__index"); lua_pushcfunction(L, tostring_T); set(L, metatable, "__tostring"); lua_pushcfunction(L, gc_T); set(L, metatable, "__gc"); lua_newtable(L); // mt for method table lua_pushcfunction(L, new_T); lua_pushvalue(L, -1); // dup new_T function set(L, methods, "new"); // add new_T to method table set(L, -3, "__call"); // mt.__call = new_T lua_setmetatable(L, methods); // fill method table with methods from class T for (RegType* l = T::methods; l->name; l++) { lua_pushstring(L, l->name); lua_pushlightuserdata(L, (void*)l); lua_pushcclosure(L, thunk, 1); lua_settable(L, methods); } lua_pop(L, 2); // drop metatable and method table } // call named lua method from userdata method table static int call(lua_State* L, const char* method, int nargs = 0, int nresults = LUA_MULTRET, int errfunc = 0) { int base = lua_gettop(L) - nargs; // userdata index if (!luaL_checkudata(L, base, T::className)) { lua_settop(L, base - 1); // drop userdata and args lua_pushfstring(L, tr("not a valid %s userdata"), T::className); return -1; } lua_pushstring(L, method); // method name lua_gettable(L, base); // get method from userdata if (lua_isnil(L, -1)) // no method? { lua_settop(L, base - 1); // drop userdata and args lua_pushfstring(L, tr("%s missing method '%s'"), T::className, method); return -1; } lua_insert(L, base); // put method under userdata, args int status = lua_pcall(L, 1 + nargs, nresults, errfunc); // call method if (status) { const char* msg = lua_tostring(L, -1); if (msg == NULL) msg = tr("(error with no message)"); lua_pushfstring(L, tr("%s:%s status = %d\n%s"), T::className, method, status, msg); lua_remove(L, base); // remove old message return -1; } return lua_gettop(L) - base + 1; // number of results } // push onto the Lua stack a userdata containing a pointer to T object static int push(lua_State* L, T* obj, bool gc = false) { if (!obj) { lua_pushnil(L); return 0; } luaL_getmetatable(L, T::className); // lookup metatable in Lua registry if (lua_isnil(L, -1)) luaL_error(L, tr("%s missing metatable"), T::className); int mt = lua_gettop(L); subtable(L, mt, "userdata", "v"); userdataType* ud = static_cast(pushuserdata(L, obj, sizeof(userdataType))); if (ud) { ud->pT = obj; // store pointer to object in userdata lua_pushvalue(L, mt); lua_setmetatable(L, -2); if (gc == false) { lua_checkstack(L, 3); subtable(L, mt, "do not trash", "k"); lua_pushvalue(L, -2); lua_pushboolean(L, 1); lua_settable(L, -3); lua_pop(L, 1); } } lua_replace(L, mt); lua_settop(L, mt); return mt; // index of userdata containing pointer to T object } // get userdata from Lua stack and return pointer to T object static T* check(lua_State* L, int narg) { userdataType* ud = static_cast(luaL_checkudata(L, narg, T::className)); return ud->pT; // pointer to T object } private: Lunar(); // hide default constructor // member function dispatcher static int thunk(lua_State* L) { // stack has userdata, followed by method args T* obj = check(L, 1); // get 'self', or if you prefer, 'this' lua_remove(L, 1); // remove self so member function args start at index 1 // check if stopped if (obj->context() && obj->context()->thread()->stopping()) return luaL_error(L, tr("stopping")); // get member function from upvalue RegType* l = static_cast(lua_touserdata(L, lua_upvalueindex(1))); return (obj->*(l->mfunc))(L); // call member function } public: // create a new T object and // push onto the Lua stack a userdata containing a pointer to T object static int new_T(lua_State* L) { lua_remove(L, 1); // use classname:new(), instead of classname.new() T* obj = new T(L); // call constructor for T objects push(L, obj, true); // gc_T will delete this object return 1; // userdata containing pointer to T object } private: // garbage collection metamethod static int gc_T(lua_State* L) { if (luaL_getmetafield(L, 1, "do not trash")) { lua_pushvalue(L, 1); // dup userdata lua_gettable(L, -2); if (!lua_isnil(L, -1)) return 0; // do not delete object } userdataType* ud = static_cast(lua_touserdata(L, 1)); T* obj = ud->pT; if (obj) delete obj; // call destructor for T objects return 0; } static int tostring_T(lua_State* L) { char buff[32]; userdataType* ud = static_cast(lua_touserdata(L, 1)); T* obj = ud->pT; sprintf(buff, "%p", obj); lua_pushfstring(L, "%s (%s)", T::className, buff); return 1; } static void set(lua_State* L, int table_index, const char* key) { lua_pushstring(L, key); lua_insert(L, -2); // swap value and key lua_settable(L, table_index); } static void weaktable(lua_State* L, const char* mode) { lua_newtable(L); lua_pushvalue(L, -1); // table is its own metatable lua_setmetatable(L, -2); lua_pushliteral(L, "__mode"); lua_pushstring(L, mode); lua_settable(L, -3); // metatable.__mode = mode } static void subtable(lua_State* L, int tindex, const char* name, const char* mode) { lua_pushstring(L, name); lua_gettable(L, tindex); if (lua_isnil(L, -1)) { lua_pop(L, 1); lua_checkstack(L, 3); weaktable(L, mode); lua_pushstring(L, name); lua_pushvalue(L, -2); lua_settable(L, tindex); } } static void* pushuserdata(lua_State* L, void* key, size_t sz) { void* ud = 0; lua_pushlightuserdata(L, key); lua_gettable(L, -2); // lookup[key] if (lua_isnil(L, -1)) { lua_pop(L, 1); // drop nil lua_checkstack(L, 3); ud = lua_newuserdata(L, sz); // create new userdata lua_pushlightuserdata(L, key); lua_pushvalue(L, -2); // dup userdata lua_settable(L, -4); // lookup[key] = userdata } return ud; } public: static void dumpstack(lua_State* L) { int top = lua_gettop(L); QString msg_h(QString("Lunar<%1>::dumpstack : ").arg(T::className)); QString msg(msg_h + QString("stack[%1] = %2")); logInfo(msg_h + QString("stack has %1 elements:").arg(top)); for (int n = 1 ; n <= top ; n++) { int t = lua_type(L, n); switch (t) { case LUA_TSTRING: /* strings */ logInfo(msg.arg(n).arg(lua_tostring(L, n))); break; case LUA_TBOOLEAN: /* booleans */ logInfo(msg.arg(n).arg(lua_toboolean(L, n) ? "true" : "false")); break; case LUA_TNUMBER: /* numbers */ logInfo(msg.arg(n).arg(lua_tonumber(L, n))); break; default: /* other values */ logInfo(msg.arg(n).arg(lua_typename(L, t))); break; } } } }; } #undef tr #endif qosmic-1.6.0/src/lua/xform.cpp000066400000000000000000001042511304321135200162150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "xform.h" #include "luathreadadapter.h" #include #include #define tr(msg) QCoreApplication::translate("Lua::XForm", msg).toLatin1().constData() namespace Lua { const char XForm::className[] = "XForm"; Lunar::RegType XForm::methods[] = { { "index", &XForm::index }, { "density", &XForm::density }, { "color_speed", &XForm::color_speed }, { "color", &XForm::color }, { "opacity", &XForm::opacity }, { "animate", &XForm::animate }, { "var", &XForm::var }, { "param", &XForm::var }, // xform coordinates { "coords", &XForm::coords }, { "o", &XForm::a }, { "x", &XForm::b }, { "y", &XForm::c }, { "a", &XForm::a }, { "b", &XForm::b }, { "c", &XForm::c }, { "coefs", &XForm::coefs }, { "xa", &XForm::xa }, { "xb", &XForm::xb }, { "xc", &XForm::xc }, { "xd", &XForm::xd }, { "xe", &XForm::xe }, { "xf", &XForm::xf }, { "pos", &XForm::pos }, { "translate", &XForm::translate }, { "rotate", &XForm::rotate }, { "scale", &XForm::scale }, { "shear", &XForm::shear }, // post xform coordinates { "coordsp", &XForm::coordsp }, { "op", &XForm::ap }, { "xp", &XForm::bp }, { "yp", &XForm::cp }, { "coefsp", &XForm::coefsp }, { "ap", &XForm::ap }, { "bp", &XForm::bp }, { "cp", &XForm::cp }, { "xap", &XForm::xap }, { "xbp", &XForm::xbp }, { "xcp", &XForm::xcp }, { "xdp", &XForm::xdp }, { "xep", &XForm::xep }, { "xfp", &XForm::xfp }, { "posp", &XForm::posp }, { "translatep", &XForm::translatep }, { "rotatep", &XForm::rotatep }, { "scalep", &XForm::scalep }, { "shearp", &XForm::shearp }, { 0, 0 } }; XForm::XForm(lua_State* L) : m_xfidx(-1), m_gidx(-1), m_genome(0), m_xform() { /* retrieve a context */ lua_pushlightuserdata(L, (void*)&LuaThreadAdapter::RegKey); /* push address */ lua_gettable(L, LUA_REGISTRYINDEX); /* retrieve value */ LuaType::setContext(static_cast(lua_touserdata(L, -1))); basisTriangle = m_adapter->basisTriangle(); lua_pop(L, 1); if (lua_gettop(L) > 0 && lua_isuserdata(L, 1)) { // check for a XForm type to copy XForm* xf = Lunar::check(L, 1); flam3_copy_xform(&m_xform, xf->get_xform_ptr(L)); lua_pop(L, 1); } else Util::init_xform(&m_xform); get_xform_ptr(L); xf2c(); // load Ax,Ay, Bx,By, Cx,Cy xfp2c(); } flam3_xform* XForm::get_xform_ptr(lua_State* L) { if (m_genome != 0) // XForm associated with some Genome { flam3_genome* g = m_genome->get_genome_ptr(L); if (m_xfidx >= 0 && m_xfidx < g->num_xforms) // has an xform index xform_ptr = g->xform + m_xfidx; else luaL_error(L, tr("index out of bounds: Genome[%d].XForm[%d]"), m_gidx + 1, m_xfidx + 1); } else { // XForm not associated with a Genome xform_ptr = &m_xform; } return xform_ptr; } XForm::~XForm() { } #define intAcc(name) int XForm::name(lua_State* L)\ {\ get_xform_ptr(L); \ if (lua_gettop(L) == 1)\ {\ xform_ptr->name = luaL_checkint(L, 1);\ setModified();\ }\ else\ {\ lua_settop(L, 0);\ lua_pushinteger(L, xform_ptr->name);\ }\ return 1;\ }\ #define intAccRO(name) int XForm::name(lua_State* L)\ {\ get_xform_ptr(L); \ lua_settop(L, 0);\ lua_pushinteger(L, xform_ptr->name);\ return 1;\ }\ #define realAcc(name) int XForm::name(lua_State* L)\ {\ get_xform_ptr(L); \ if (lua_gettop(L) == 1)\ {\ xform_ptr->name = luaL_checknumber(L, 1);\ setModified();\ }\ else\ {\ lua_settop(L, 0);\ lua_pushnumber(L, xform_ptr->name);\ }\ return 1;\ }\ #define realAccRO(name) int XForm::name(lua_State* L)\ {\ get_xform_ptr(L); \ lua_settop(L, 0);\ lua_pushnumber(L, xform_ptr->name);\ return 1;\ }\ int XForm::index(lua_State* L) { get_xform_ptr(L); lua_settop(L, 0); lua_pushinteger(L, m_xfidx + 1); return 1; } realAcc(density); realAcc(color_speed); int XForm::color(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->color = luaL_checknumber(L, 1); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, xform_ptr->color); } return 1; } int XForm::opacity(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->opacity = qBound(0.0, luaL_checknumber(L, 1), 1.0); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, xform_ptr->opacity); } return 1; } int XForm::animate(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->animate = qMax(0.0, luaL_checknumber(L, 1)); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, xform_ptr->animate); } return 1; } int XForm::var(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) < 1) { // return the entire set of variations lua_newtable(L); for (int i = 0 ; i < flam3_nvariations ; i++) { lua_pushinteger(L, i + 1); lua_newtable(L); lua_pushinteger(L, 1); lua_pushnumber(L, xform_ptr->var[i]); lua_rawset(L, -3); lua_pushinteger(L, 2); lua_newtable(L); set_variables_to_table(L, i); lua_rawset(L, -3); lua_getglobal(L, "_xform_var_variables_metatable"); if (!lua_istable(L, -1)) { lua_pop(L, 1); int error = luaL_loadstring(L, "if _xform_var_variables_metatable == nil then " "_xform_var_variables_metatable = { __index = function (table, key) " "if key == \"value\" then return rawget(table, 1) end " "if key == \"variables\" then return rawget(table, 2) end " "local v = rawget(rawget(table, 2), key) " "if v ~= nil then return v end " "return rawget(table, key) end, " "__newindex = function(table, key, value) " "if key == \"value\" then return rawset(table, 1, value) end " "if key == \"variables\" then return rawset(table, 2, value) end " "local v = rawget(rawget(table, 2), key) " "if v ~= nil then return rawset(rawget(table, 2), key, value) end " "return rawset(table, key, value) " "end } end") || lua_pcall(L, 0, 0, 0); if (error) { QString s(tr("couldn't build metatables for var.variables: %1")); luaL_error(L, "%s", s.arg(lua_tostring(L, -1)).toLatin1().constData()); } lua_getglobal(L, "_xform_var_variables_metatable"); } lua_setmetatable(L, -2); lua_rawset(L, -3); } lua_getglobal(L, "_xform_var_metatable"); if (!lua_istable(L, -1)) { lua_pop(L, 1); int error = luaL_loadstring(L, "if _xform_var_metatable == nil then " "_xform_var_metatable = { __index = function(table, key) " "local k = string.upper(key) " "return rawget(table, _G[k]) " "end } end") || lua_pcall(L, 0, 0, 0); if (error) { QString s(tr("couldn't build metatables for var: %1")); luaL_error(L, "%s", s.arg(lua_tostring(L, -1)).toLatin1().constData()); } lua_getglobal(L, "_xform_var_metatable"); } lua_setmetatable(L, -2); } else if (lua_type(L, 1) == LUA_TTABLE) { // setting the all xform variations from a table for (int i = 0 ; i < flam3_nvariations ; i++) { lua_pushinteger(L, i + 1); lua_rawget(L, -2); luaL_checktype(L, -1, LUA_TTABLE); lua_pushinteger(L, 1); lua_rawget(L, -2); xform_ptr->var[i] = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushinteger(L, 2); lua_rawget(L, -2); luaL_checktype(L, -1, LUA_TTABLE); get_variables_from_table(L, i); lua_pop(L, 2); } setModified(); } else { int var_num; if (lua_isnumber(L, 1) == 1) { var_num = lua_tointeger(L, 1) - 1; if (var_num < 0 || var_num >= flam3_nvariations) luaL_error(L, tr("invalid variation index %d"), var_num + 1); } else { const char* name = luaL_checkstring(L, 1); var_num = Util::variation_number(QString(name).toLower()); if (var_num == -1) luaL_error(L, tr("variation %s not found"), name); } int args = lua_gettop(L); if (args > 1) { // grab the variation value xform_ptr->var[var_num] = luaL_checknumber(L, 2); setModified(); if (args == 3) { if (!lua_istable(L, 3)) luaL_error(L, tr("variables argument is not a valid table")); get_variables_from_table(L, var_num); } else return 1; } else { lua_settop(L, 0); lua_pushnumber(L, xform_ptr->var[var_num]); lua_newtable(L); set_variables_to_table(L, var_num); } return 2; } return 1; } /** this macro is used in get_variables_from_table() to copy the lua table * of variables into the xform structure */ #define get_table_var(VARIATION, VARIABLE)\ lua_pushstring(L, #VARIABLE);\ lua_rawget(L, -2);\ if (!lua_isnil(L, -1))\ {\ if (!lua_isnumber(L, -1))\ luaL_error(L, tr("number expected for variable " #VARIABLE));\ xform_ptr->VARIATION##_##VARIABLE = lua_tonumber(L, -1);\ }\ lua_pop(L, 1); /** Set the variables for the given variation from the table. A string * indexed table containing the variables is on the top of the stack. */ void XForm::get_variables_from_table(lua_State* L, int variation) { switch (variation) { case VAR_BLOB: { get_table_var(blob, low) get_table_var(blob, high) get_table_var(blob, waves) break; } case VAR_PDJ: { get_table_var(pdj, a) get_table_var(pdj, b) get_table_var(pdj, c) get_table_var(pdj, d) break; } case VAR_FAN2: { get_table_var(fan2, x) get_table_var(fan2, y) break; } case VAR_RINGS2: { get_table_var(rings2, val) break; } case VAR_PERSPECTIVE: { get_table_var(perspective, angle) get_table_var(perspective, dist) break; } case VAR_JULIAN: { get_table_var(julian, power) get_table_var(julian, dist) break; } case VAR_JULIASCOPE: { get_table_var(juliascope, power) get_table_var(juliascope, dist) break; } case VAR_RADIAL_BLUR: { get_table_var(radial_blur, angle) break; } case VAR_PIE: { get_table_var(pie, rotation) get_table_var(pie, slices) get_table_var(pie, thickness) break; } case VAR_NGON: { get_table_var(ngon, circle) get_table_var(ngon, corners) get_table_var(ngon, sides) get_table_var(ngon, power) break; } case VAR_CURL: { get_table_var(curl, c1) get_table_var(curl, c2) break; } case VAR_RECTANGLES: { get_table_var(rectangles, x) get_table_var(rectangles, y) break; } case VAR_DISC2: { get_table_var(disc2, rot) get_table_var(disc2, twist) break; } case VAR_SUPER_SHAPE: { get_table_var(super_shape, rnd) get_table_var(super_shape, m) get_table_var(super_shape, n1) get_table_var(super_shape, n2) get_table_var(super_shape, n3) get_table_var(super_shape, holes) break; } case VAR_FLOWER: { get_table_var(flower, holes) get_table_var(flower, petals) break; } case VAR_CONIC: { get_table_var(conic, eccentricity) get_table_var(conic, holes) break; } case VAR_PARABOLA: { get_table_var(parabola, height) get_table_var(parabola, width) break; } case VAR_BENT2: { get_table_var(bent2, x) get_table_var(bent2, y) break; } case VAR_BIPOLAR: { get_table_var(bipolar, shift) break; } case VAR_CELL: { get_table_var(cell, size) break; } case VAR_CPOW: { get_table_var(cpow, r) get_table_var(cpow, i) get_table_var(cpow, power) break; } case VAR_CURVE: { get_table_var(curve, xamp) get_table_var(curve, yamp) get_table_var(curve, xlength) get_table_var(curve, ylength) break; } case VAR_ESCHER: { get_table_var(escher, beta) break; } case VAR_LAZYSUSAN: { get_table_var(lazysusan, spin) get_table_var(lazysusan, space) get_table_var(lazysusan, twist) get_table_var(lazysusan, x) get_table_var(lazysusan, y) break; } case VAR_MODULUS: { get_table_var(modulus, x) get_table_var(modulus, y) break; } case VAR_OSCILLOSCOPE: { get_table_var(oscope, separation) get_table_var(oscope, frequency) get_table_var(oscope, amplitude) get_table_var(oscope, damping) break; } case VAR_POPCORN2: { get_table_var(popcorn2, x) get_table_var(popcorn2, y) get_table_var(popcorn2, c) break; } case VAR_SEPARATION: { get_table_var(separation, x) get_table_var(separation, xinside) get_table_var(separation, y) get_table_var(separation, yinside) break; } case VAR_SPLIT: { get_table_var(split, xsize) get_table_var(split, ysize) break; } case VAR_SPLITS: { get_table_var(splits, x) get_table_var(splits, y) break; } case VAR_STRIPES: { get_table_var(stripes, space) get_table_var(stripes, warp) break; } case VAR_WEDGE: { get_table_var(wedge, angle) get_table_var(wedge, hole) get_table_var(wedge, count) get_table_var(wedge, swirl) break; } case VAR_WEDGE_JULIA: { get_table_var(wedge_julia, angle) get_table_var(wedge_julia, count) get_table_var(wedge_julia, power) get_table_var(wedge_julia, dist) break; } case VAR_WEDGE_SPH: { get_table_var(wedge_sph, angle) get_table_var(wedge_sph, count) get_table_var(wedge_sph, hole) get_table_var(wedge_sph, swirl) break; } case VAR_WHORL: { get_table_var(whorl, inside) get_table_var(whorl, outside) break; } case VAR_WAVES2: { get_table_var(waves2, freqx) get_table_var(waves2, scalex) get_table_var(waves2, freqy) get_table_var(waves2, scaley) break; } case VAR_AUGER: { get_table_var(auger, sym) get_table_var(auger, weight) get_table_var(auger, freq) get_table_var(auger, scale) break; } case VAR_FLUX: { get_table_var(flux, spread) break; } case VAR_MOBIUS: { get_table_var(mobius, re_a) get_table_var(mobius, im_a) get_table_var(mobius, re_b) get_table_var(mobius, im_b) get_table_var(mobius, re_c) get_table_var(mobius, im_c) get_table_var(mobius, re_d) get_table_var(mobius, im_d) break; } default: break; } } /** this macro is used in set_variables_to_table() to copy the xform variables * into the lua table */ #define set_table_var(VARIATION, VARIABLE)\ lua_pushstring(L, #VARIABLE);\ lua_pushnumber(L, xform_ptr->VARIATION##_##VARIABLE);\ lua_rawset(L, -3); /** Set the variables for the given variation to the table * on the top of the stack. */ void XForm::set_variables_to_table(lua_State* L, int variation) { switch (variation) { case VAR_BLOB: { set_table_var(blob, low) set_table_var(blob, high) set_table_var(blob, waves) break; } case VAR_PDJ: { set_table_var(pdj, a) set_table_var(pdj, b) set_table_var(pdj, c) set_table_var(pdj, d) break; } case VAR_FAN2: { set_table_var(fan2, x) set_table_var(fan2, y) break; } case VAR_RINGS2: { set_table_var(rings2, val) break; } case VAR_PERSPECTIVE: { set_table_var(perspective, angle) set_table_var(perspective, dist) break; } case VAR_JULIAN: { set_table_var(julian, power) set_table_var(julian, dist) break; } case VAR_JULIASCOPE: { set_table_var(juliascope, power) set_table_var(juliascope, dist) break; } case VAR_RADIAL_BLUR: { set_table_var(radial_blur, angle) break; } case VAR_PIE: { set_table_var(pie, rotation) set_table_var(pie, slices) set_table_var(pie, thickness) break; } case VAR_NGON: { set_table_var(ngon, circle) set_table_var(ngon, corners) set_table_var(ngon, sides) set_table_var(ngon, power) break; } case VAR_CURL: { set_table_var(curl, c1) set_table_var(curl, c2) break; } case VAR_RECTANGLES: { set_table_var(rectangles, x) set_table_var(rectangles, y) break; } case VAR_DISC2: { set_table_var(disc2, rot) set_table_var(disc2, twist) break; } case VAR_SUPER_SHAPE: { set_table_var(super_shape, rnd) set_table_var(super_shape, m) set_table_var(super_shape, n1) set_table_var(super_shape, n2) set_table_var(super_shape, n3) set_table_var(super_shape, holes) break; } case VAR_FLOWER: { set_table_var(flower, holes) set_table_var(flower, petals) break; } case VAR_CONIC: { set_table_var(conic, eccentricity) set_table_var(conic, holes) break; } case VAR_PARABOLA: { set_table_var(parabola, height) set_table_var(parabola, width) break; } case VAR_BENT2: { set_table_var(bent2, x) set_table_var(bent2, y) break; } case VAR_BIPOLAR: { set_table_var(bipolar, shift) break; } case VAR_CELL: { set_table_var(cell, size) break; } case VAR_CPOW: { set_table_var(cpow, r) set_table_var(cpow, i) set_table_var(cpow, power) break; } case VAR_CURVE: { set_table_var(curve, xamp) set_table_var(curve, yamp) set_table_var(curve, xlength) set_table_var(curve, ylength) break; } case VAR_ESCHER: { set_table_var(escher, beta) break; } case VAR_LAZYSUSAN: { set_table_var(lazysusan, spin) set_table_var(lazysusan, space) set_table_var(lazysusan, twist) set_table_var(lazysusan, x) set_table_var(lazysusan, y) break; } case VAR_MODULUS: { set_table_var(modulus, x) set_table_var(modulus, y) break; } case VAR_OSCILLOSCOPE: { set_table_var(oscope, separation) set_table_var(oscope, frequency) set_table_var(oscope, amplitude) set_table_var(oscope, damping) break; } case VAR_POPCORN2: { set_table_var(popcorn2, x) set_table_var(popcorn2, y) set_table_var(popcorn2, c) break; } case VAR_SEPARATION: { set_table_var(separation, x) set_table_var(separation, xinside) set_table_var(separation, y) set_table_var(separation, yinside) break; } case VAR_SPLIT: { set_table_var(split, xsize) set_table_var(split, ysize) break; } case VAR_SPLITS: { set_table_var(splits, x) set_table_var(splits, y) break; } case VAR_STRIPES: { set_table_var(stripes, space) set_table_var(stripes, warp) break; } case VAR_WEDGE: { set_table_var(wedge, angle) set_table_var(wedge, hole) set_table_var(wedge, count) set_table_var(wedge, swirl) break; } case VAR_WEDGE_JULIA: { set_table_var(wedge_julia, angle) set_table_var(wedge_julia, count) set_table_var(wedge_julia, power) set_table_var(wedge_julia, dist) break; } case VAR_WEDGE_SPH: { set_table_var(wedge_sph, angle) set_table_var(wedge_sph, count) set_table_var(wedge_sph, hole) set_table_var(wedge_sph, swirl) break; } case VAR_WHORL: { set_table_var(whorl, inside) set_table_var(whorl, outside) break; } case VAR_WAVES2: { set_table_var(waves2, freqx) set_table_var(waves2, scalex) set_table_var(waves2, freqy) set_table_var(waves2, scaley) break; } case VAR_AUGER: { set_table_var(auger, sym) set_table_var(auger, weight) set_table_var(auger, freq) set_table_var(auger, scale) break; } case VAR_FLUX: { set_table_var(flux, spread) break; } case VAR_MOBIUS: { set_table_var(mobius, re_a) set_table_var(mobius, im_a) set_table_var(mobius, re_b) set_table_var(mobius, im_b) set_table_var(mobius, re_c) set_table_var(mobius, im_c) set_table_var(mobius, re_d) set_table_var(mobius, im_d) break; } default: break; } } int XForm::coords(lua_State* L) { get_xform_ptr(L); const char* labels[] = { "o", "x", "y" }; if (lua_gettop(L) < 1) { lua_newtable(L); for (int i = 0 ; i < 3 ; i++) { lua_pushstring(L, labels[i]); lua_newtable(L); lua_pushstring(L, "x"); lua_pushnumber(L, triangleCoords[i].x()); lua_settable(L, -3); lua_pushstring(L, "y"); lua_pushnumber(L, triangleCoords[i].y()); lua_settable(L, -3); lua_settable(L, -3); } } else { luaL_checktype(L, 1, LUA_TTABLE); for (int i = 0 ; i < 3 ; i++) { lua_pushstring(L, labels[i]); lua_gettable(L, -2); lua_pushstring(L, "x"); lua_gettable(L, -2); triangleCoords[i].rx() = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "y"); lua_gettable(L, -2); triangleCoords[i].ry() = luaL_checknumber(L, -1); lua_pop(L, 2); } c2xf(); setModified(); } return 1; } int XForm::a(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 2) { triangleCoords[0].rx() = luaL_checknumber(L, 1); triangleCoords[0].ry() = luaL_checknumber(L, 2); c2xf(); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, triangleCoords[0].x()); lua_pushnumber(L, triangleCoords[0].y()); } return 2; } int XForm::b(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 2) { triangleCoords[1].rx() = luaL_checknumber(L, 1); triangleCoords[1].ry() = luaL_checknumber(L, 2); c2xf(); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, triangleCoords[1].x()); lua_pushnumber(L, triangleCoords[1].y()); } return 2; } int XForm::c(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 2) { triangleCoords[2].rx() = luaL_checknumber(L, 1); triangleCoords[2].ry() = luaL_checknumber(L, 2); c2xf(); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, triangleCoords[2].x()); lua_pushnumber(L, triangleCoords[2].y()); } return 2; } int XForm::coefs(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) < 1) { lua_newtable(L); lua_pushstring(L, "a"); lua_pushnumber(L, xform_ptr->c[0][0]); lua_settable(L, -3); lua_pushstring(L, "b"); lua_pushnumber(L, xform_ptr->c[1][0]); lua_settable(L, -3); lua_pushstring(L, "c"); lua_pushnumber(L, xform_ptr->c[2][0]); lua_settable(L, -3); lua_pushstring(L, "d"); lua_pushnumber(L, xform_ptr->c[0][1]); lua_settable(L, -3); lua_pushstring(L, "e"); lua_pushnumber(L, xform_ptr->c[1][1]); lua_settable(L, -3); lua_pushstring(L, "f"); lua_pushnumber(L, xform_ptr->c[2][1]); lua_settable(L, -3); } else { luaL_checktype(L, 1, LUA_TTABLE); lua_pushstring(L, "a"); lua_gettable(L, -2); xform_ptr->c[0][0] = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "b"); lua_gettable(L, -2); xform_ptr->c[1][0] = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "c"); lua_gettable(L, -2); xform_ptr->c[2][0] = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "d"); lua_gettable(L, -2); xform_ptr->c[0][1] = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "e"); lua_gettable(L, -2); xform_ptr->c[1][1] = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "f"); lua_gettable(L, -2); xform_ptr->c[2][1] = luaL_checknumber(L, -1); lua_pop(L, 1); xf2c(); setModified(); } return 1; } int XForm::xa(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->c[0][0] = luaL_checknumber(L, 1); xf2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->c[0][0]); return 1; } int XForm::xd(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->c[0][1] = luaL_checknumber(L, 1); xf2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->c[0][1]); return 1; } int XForm::xb(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->c[1][0] = luaL_checknumber(L, 1); xf2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->c[1][0]); return 1; } int XForm::xe(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->c[1][1] = luaL_checknumber(L, 1); xf2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->c[1][1]); return 1; } int XForm::xc(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->c[2][0] = luaL_checknumber(L, 1); xf2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->c[2][0]); return 1; } int XForm::xf(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->c[2][1] = luaL_checknumber(L, 1); xf2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->c[2][1]); return 1; } // post xform accessors int XForm::coordsp(lua_State* L) { get_xform_ptr(L); const char* labels[] = { "o", "x", "y" }; if (lua_gettop(L) < 1) { lua_newtable(L); for (int i = 0 ; i < 3 ; i++) { lua_pushstring(L, labels[i]); lua_newtable(L); lua_pushstring(L, "x"); lua_pushnumber(L, triangleCoordsP[i].x()); lua_settable(L, -3); lua_pushstring(L, "y"); lua_pushnumber(L, triangleCoordsP[i].y()); lua_settable(L, -3); lua_settable(L, -3); } } else { luaL_checktype(L, 1, LUA_TTABLE); for (int i = 0 ; i < 3 ; i++) { lua_pushstring(L, labels[i]); lua_gettable(L, -2); lua_pushstring(L, "x"); lua_gettable(L, -2); triangleCoordsP[i].rx() = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "y"); lua_gettable(L, -2); triangleCoordsP[i].ry() = luaL_checknumber(L, -1); lua_pop(L, 2); } c2xfp(); setModified(); } return 1; } int XForm::ap(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 2) { triangleCoordsP[0].rx() = luaL_checknumber(L, 1); triangleCoordsP[0].ry() = luaL_checknumber(L, 2); c2xfp(); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, triangleCoordsP[0].x()); lua_pushnumber(L, triangleCoordsP[0].y()); } return 2; } int XForm::bp(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 2) { triangleCoordsP[1].rx() = luaL_checknumber(L, 1); triangleCoordsP[1].ry() = luaL_checknumber(L, 2); c2xfp(); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, triangleCoordsP[1].x()); lua_pushnumber(L, triangleCoordsP[1].y()); } return 2; } int XForm::cp(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 2) { triangleCoordsP[2].rx() = luaL_checknumber(L, 1); triangleCoordsP[2].ry() = luaL_checknumber(L, 2); c2xfp(); setModified(); } else { lua_settop(L, 0); lua_pushnumber(L, triangleCoordsP[2].x()); lua_pushnumber(L, triangleCoordsP[2].y()); } return 2; } int XForm::coefsp(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) < 1) { lua_newtable(L); lua_pushstring(L, "a"); lua_pushnumber(L, xform_ptr->post[0][0]); lua_settable(L, -3); lua_pushstring(L, "b"); lua_pushnumber(L, xform_ptr->post[1][0]); lua_settable(L, -3); lua_pushstring(L, "c"); lua_pushnumber(L, xform_ptr->post[2][0]); lua_settable(L, -3); lua_pushstring(L, "d"); lua_pushnumber(L, xform_ptr->post[0][1]); lua_settable(L, -3); lua_pushstring(L, "e"); lua_pushnumber(L, xform_ptr->post[1][1]); lua_settable(L, -3); lua_pushstring(L, "f"); lua_pushnumber(L, xform_ptr->post[2][1]); lua_settable(L, -3); } else { luaL_checktype(L, 1, LUA_TTABLE); lua_pushstring(L, "a"); lua_gettable(L, -2); xform_ptr->post[0][0] = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "b"); lua_gettable(L, -2); xform_ptr->post[1][0] = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "c"); lua_gettable(L, -2); xform_ptr->post[2][0] = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "d"); lua_gettable(L, -2); xform_ptr->post[0][1] = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "e"); lua_gettable(L, -2); xform_ptr->post[1][1] = luaL_checknumber(L, -1); lua_pop(L, 1); lua_pushstring(L, "f"); lua_gettable(L, -2); xform_ptr->post[2][1] = luaL_checknumber(L, -1); lua_pop(L, 1); xfp2c(); setModified(); } return 1; } int XForm::xap(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->post[0][0] = luaL_checknumber(L, 1); xfp2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->post[0][0]); return 1; } int XForm::xdp(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->post[0][1] = luaL_checknumber(L, 1); xfp2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->post[0][1]); return 1; } int XForm::xbp(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->post[1][0] = luaL_checknumber(L, 1); xfp2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->post[1][0]); return 1; } int XForm::xep(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->post[1][1] = luaL_checknumber(L, 1); xfp2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->post[1][1]); return 1; } int XForm::xcp(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->post[2][0] = luaL_checknumber(L, 1); xfp2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->post[2][0]); return 1; } int XForm::xfp(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 1) { xform_ptr->post[2][1] = luaL_checknumber(L, 1); xfp2c(); setModified(); } lua_settop(L, 0); lua_pushnumber(L, xform_ptr->post[2][1]); return 1; } // c++ interface void XForm::xf2c() { triangleCoords = basisTriangle->getCoords(xform_ptr->c); } void XForm::c2xf() { basisTriangle->applyTransform(triangleCoords, xform_ptr->c); } void XForm::xfp2c() { triangleCoordsP = basisTriangle->getCoords(xform_ptr->post); } void XForm::c2xfp() { basisTriangle->applyTransform(triangleCoordsP, xform_ptr->post); } void XForm::setContext(lua_State* L, Genome* g, int x_idx) { m_genome = g; m_gidx = m_genome->index(); m_xfidx = x_idx; get_xform_ptr(L); xf2c(); // load Ax,Ay, Bx,By, Cx,Cy xfp2c(); } void XForm::setModified() { if (m_gidx > -1) // XForm associated with some Genome m_adapter->setModified(m_gidx); } flam3_xform* XForm::data() { return xform_ptr; } int XForm::translate(lua_State* L) { get_xform_ptr(L); double dx = luaL_checknumber(L, 1); double dy = luaL_checknumber(L, 2); triangleCoords.translate(dx, dy); c2xf(); setModified(); return 0; } int XForm::pos(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 2) { double x = luaL_checknumber(L, 1); double y = luaL_checknumber(L, 2); QPointF f = QPointF(x,y) - triangleCoords.boundingRect().center(); triangleCoords.translate(f.x(), f.y()); c2xf(); setModified(); } QPointF c = triangleCoords.boundingRect().center(); lua_settop(L,0); lua_pushnumber(L, c.x()); lua_pushnumber(L, c.y()); return 2; } int XForm::rotate(lua_State* L) { get_xform_ptr(L); double deg = luaL_checknumber(L, 1); QPointF c(triangleCoords.boundingRect().center()); if (lua_gettop(L) > 1) { double x = luaL_checknumber(L, 2); double y = luaL_checknumber(L, 3); c = QPointF(x, y); setModified(); } QTransform trans; trans.translate(c.x(), c.y()).rotate(deg).translate(-c.x(), -c.y()); triangleCoords = trans.map(QPolygonF(triangleCoords)); c2xf(); return 0; } int XForm::scale(lua_State* L) { get_xform_ptr(L); double dx = luaL_checknumber(L, 1); double dy = dx; if (lua_gettop(L) > 1) dy = luaL_checknumber(L, 2); QPointF c = triangleCoords.boundingRect().center(); if (lua_gettop(L) > 2) { double x = luaL_checknumber(L, 3); double y = luaL_checknumber(L, 4); c = QPointF(x, y); setModified(); } QTransform trans; trans.translate(c.x(), c.y()).scale(dx, dy).translate(-c.x(), -c.y()); triangleCoords = trans.map(QPolygonF(triangleCoords)); c2xf(); return 0; } int XForm::shear(lua_State* L) { get_xform_ptr(L); double dx = luaL_checknumber(L, 1); double dy = luaL_checknumber(L, 2); QPointF c = triangleCoords.boundingRect().center(); if (lua_gettop(L) > 2) { double x = luaL_checknumber(L, 3); double y = luaL_checknumber(L, 4); c = QPointF(x, y); setModified(); } QTransform trans; trans.translate(c.x(), c.y()).shear(dx, dy).translate(-c.x(), -c.y()); triangleCoords = trans.map(QPolygonF(triangleCoords)); c2xf(); return 0; } // post transform 'transforms' int XForm::translatep(lua_State* L) { get_xform_ptr(L); double dx = luaL_checknumber(L, 1); double dy = luaL_checknumber(L, 2); triangleCoordsP.translate(dx, dy); c2xfp(); setModified(); return 0; } int XForm::posp(lua_State* L) { get_xform_ptr(L); if (lua_gettop(L) == 2) { double x = luaL_checknumber(L, 1); double y = luaL_checknumber(L, 2); QPointF f = QPointF(x,y) - triangleCoordsP.boundingRect().center(); triangleCoordsP.translate(f.x(), f.y()); c2xfp(); setModified(); } QPointF c = triangleCoordsP.boundingRect().center(); lua_settop(L,0); lua_pushnumber(L, c.x()); lua_pushnumber(L, c.y()); return 2; } int XForm::rotatep(lua_State* L) { get_xform_ptr(L); double deg = luaL_checknumber(L, 1); QPointF c(triangleCoordsP.boundingRect().center()); if (lua_gettop(L) > 1) { double x = luaL_checknumber(L, 2); double y = luaL_checknumber(L, 3); c = QPointF(x, y); setModified(); } QTransform trans; trans.translate(c.x(), c.y()).rotate(deg).translate(-c.x(), -c.y()); triangleCoordsP = trans.map(QPolygonF(triangleCoordsP)); c2xfp(); return 0; } int XForm::scalep(lua_State* L) { get_xform_ptr(L); double dx = luaL_checknumber(L, 1); double dy = dx; if (lua_gettop(L) > 1) dy = luaL_checknumber(L, 2); QPointF c = triangleCoordsP.boundingRect().center(); if (lua_gettop(L) > 2) { double x = luaL_checknumber(L, 3); double y = luaL_checknumber(L, 4); c = QPointF(x, y); setModified(); } QTransform trans; trans.translate(c.x(), c.y()).scale(dx, dy).translate(-c.x(), -c.y()); triangleCoordsP = trans.map(QPolygonF(triangleCoordsP)); c2xfp(); return 0; } int XForm::shearp(lua_State* L) { get_xform_ptr(L); double dx = luaL_checknumber(L, 1); double dy = luaL_checknumber(L, 2); QPointF c = triangleCoordsP.boundingRect().center(); if (lua_gettop(L) > 2) { double x = luaL_checknumber(L, 3); double y = luaL_checknumber(L, 4); c = QPointF(x, y); setModified(); } QTransform trans; trans.translate(c.x(), c.y()).shear(dx, dy).translate(-c.x(), -c.y()); triangleCoordsP = trans.map(QPolygonF(triangleCoordsP)); c2xfp(); return 0; } } qosmic-1.6.0/src/lua/xform.h000066400000000000000000000057501304321135200156660ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef XFORM_LUA_H #define XFORM_LUA_H #include "lunar.h" #include "basistriangle.h" #include "luatype.h" #include "genome.h" namespace Lua { class XForm : public LuaType { int m_xfidx; int m_gidx; Genome* m_genome; flam3_xform* xform_ptr; flam3_xform m_xform; BasisTriangle* basisTriangle; TriangleCoords triangleCoords; TriangleCoords triangleCoordsP; void c2xf(); void c2xfp(); void xf2c(); void xfp2c(); void get_variables_from_table(lua_State*, int); void set_variables_to_table(lua_State*, int); public: XForm(lua_State*); ~XForm(); int index(lua_State*); int density(lua_State*); int color_speed(lua_State*); int color(lua_State*); int opacity(lua_State*); int animate(lua_State*); int var(lua_State*); int coords(lua_State*); int a(lua_State*); int b(lua_State*); int c(lua_State*); int pos(lua_State*); int translate(lua_State*); int rotate(lua_State*); int scale(lua_State*); int shear(lua_State*); int coefs(lua_State*); int xa(lua_State*); int xb(lua_State*); int xc(lua_State*); int xd(lua_State*); int xe(lua_State*); int xf(lua_State*); int coordsp(lua_State*); int ap(lua_State*); int bp(lua_State*); int cp(lua_State*); int posp(lua_State*); int translatep(lua_State*); int rotatep(lua_State*); int scalep(lua_State*); int shearp(lua_State*); int coefsp(lua_State*); int xap(lua_State*); int xbp(lua_State*); int xcp(lua_State*); int xdp(lua_State*); int xep(lua_State*); int xfp(lua_State*); void setContext(lua_State*, Genome*, int); void setModified(); flam3_xform* get_xform_ptr(lua_State*); flam3_xform* data(); static const char className[]; static Lunar::RegType methods[]; }; } #endif qosmic-1.6.0/src/mainpreviewwidget.cpp000066400000000000000000000146641304321135200200430ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include "mainpreviewwidget.h" #include "viewerpresetswidget.h" #include "checkersbrush.h" #include "logger.h" MainPreviewWidget::MainPreviewWidget(GenomeVector* g, QWidget* p) : QWidget(p), QosmicWidget(this, "MainPreviewWidget"), genome(g) { setupUi(this); popupMenu = new QMenu(tr("presets")); QSettings s; s.beginGroup("mainpreview"); QSize size(s.value("imagesize", QSize(160, 130)).toSize()); setPreviewMaximumSize(size); selected_preset = s.value("preset", ViewerPresetsModel::getInstance()->presetNames().first()).toString(); null_preset = tr("genome quality"); s.endGroup(); wheel_stopped_timer = new QTimer(this); wheel_stopped_timer->setInterval(500); wheel_stopped_timer->setSingleShot(true); connect(wheel_stopped_timer, SIGNAL(timeout()), this, SIGNAL(undoStateSignal())); connect(popupMenu, SIGNAL(triggered(QAction*)), this, SLOT(popupMenuTriggeredSlot(QAction*))); } void MainPreviewWidget::closeEvent(QCloseEvent* e) { QSettings s; s.beginGroup("mainpreview"); s.setValue("imagesize", m_previewLabel->maximumSize()); s.setValue("preset", selected_preset); s.endGroup(); e->accept(); } void MainPreviewWidget::setPixmap(const QPixmap& p) { if (RenderThread::getInstance()->format() != RenderThread::RGB32) { QImage img(p.size(), QImage::Format_RGB32); QPainter pa(&img); pa.fillRect(img.rect(), CheckersBrush(16)); pa.drawPixmap(0, 0, p); m_previewLabel->setPixmap(QPixmap::fromImage(img)); } else m_previewLabel->setPixmap(p); } void MainPreviewWidget::resizeEvent(QResizeEvent* e) { logFine(QString("MainPreviewWidget::resizeEvent : spontaneous %1").arg(e->spontaneous())); logFine(QString("MainPreviewWidget::resizeEvent : oldSize %1, %2").arg(e->oldSize().width()).arg(e->oldSize().height())); logFine(QString("MainPreviewWidget::resizeEvent : size %1, %2").arg(e->size().width()).arg(e->size().height())); if (last_size == m_previewLabel->size()) return; last_size = m_previewLabel->size(); if (parent()->inherits("QDockWidget") && qobject_cast(parent())->isFloating()) m_previewLabel->setMaximumSize(e->size()); emit previewResized(last_size); } QSize MainPreviewWidget::getPreviewSize() const { return m_previewLabel->size(); } void MainPreviewWidget::showEvent(QShowEvent* e) { logFine(QString("MainPreviewWidget::showEvent : spontaneous %1").arg(e->spontaneous())); if (!e->spontaneous()) emit previewResized(m_previewLabel->size()); } void MainPreviewWidget::setPreviewMaximumSize(QSize s) { m_previewLabel->setMaximumSize(s); } void MainPreviewWidget::popupMenuTriggeredSlot(QAction* a) { QString select = a->text(); if (selected_preset != select) { selected_preset = select; emit previewResized(last_size); } } void MainPreviewWidget::mousePressEvent(QMouseEvent* e) { if (e->button() == Qt::RightButton) { popupMenu->clear(); QStringList presets = ViewerPresetsModel::getInstance()->presetNames(); foreach (QString s, presets) { QAction* a = popupMenu->addAction(s); if (selected_preset == s) { a->setCheckable(true); a->setChecked(true); popupMenu->setActiveAction(a); } } popupMenu->addSeparator(); // Add the action to select the same image rendering settings // as used by the mainpreviewwidget. QAction* a = popupMenu->addAction(null_preset); if (!isPresetSelected()) { a->setCheckable(true); a->setChecked(true); popupMenu->setActiveAction(a); } popupMenu->popup(e->globalPos()); } else { last_pos = start_pos = e->pos(); wheel_moved = false; } } void MainPreviewWidget::mouseReleaseEvent(QMouseEvent* e) { if ((e->button() == Qt::LeftButton) && (start_pos != e->pos() || wheel_moved)) emit undoStateSignal(); } void MainPreviewWidget::mouseMoveEvent(QMouseEvent* e) { if (m_previewLabel->underMouse()) { double dx = last_pos.x() - e->pos().x(); double dy = last_pos.y() - e->pos().y(); last_pos = e->pos(); flam3_genome* g = genome->selectedGenome(); if (e->modifiers() & Qt::ControlModifier) g->pixels_per_unit += -1*dx + dy; else { dx *= ((double)g->width / m_previewLabel->size().width() / qMax(1.0,g->pixels_per_unit)); dy *= ((double)g->height / m_previewLabel->size().height() / qMax(1.0,g->pixels_per_unit * 2.0)); g->center[0] += dx ; g->center[1] += dy ; } emit previewMoved(); } } void MainPreviewWidget::wheelEvent(QWheelEvent* e) { if (m_previewLabel->underMouse()) { int n = 10; if (QApplication::keyboardModifiers() & Qt::ControlModifier) n = 100; else if (QApplication::keyboardModifiers() & Qt::ShiftModifier) n = 1; if (e->delta() < 0) n *= -1; genome->selectedGenome()->pixels_per_unit += n; wheel_moved = true; emit previewMoved(); wheel_stopped_timer->start(); } } bool MainPreviewWidget::isPresetSelected() const { return selected_preset != null_preset; } QString MainPreviewWidget::presetName() const { return selected_preset; } flam3_genome MainPreviewWidget::preset() const { return ViewerPresetsModel::getInstance()->preset(selected_preset); } template <> MainPreviewWidget* QosmicWidget::getWidget() const { return dynamic_cast(widgets["MainPreviewWidget"]); } qosmic-1.6.0/src/mainpreviewwidget.h000066400000000000000000000047351304321135200175060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef MAINPREVIEWWIDGET_H #define MAINPREVIEWWIDGET_H #include #include #include #include #include "ui_mainpreviewwidget.h" #include "genomevector.h" #include "qosmicwidget.h" class MainPreviewWidget : public QWidget, public QosmicWidget, private Ui::MainPreviewWidget { Q_OBJECT GenomeVector* genome; QMenu* popupMenu; QTimer* wheel_stopped_timer; bool wheel_moved; QPointF last_pos; QPointF start_pos; QSize last_size; QString null_preset; QString selected_preset; public: MainPreviewWidget(GenomeVector* g, QWidget* parent=0); void setPixmap(const QPixmap&); QSize getPreviewSize() const; void setPreviewMaximumSize(QSize); bool isPresetSelected() const; QString presetName() const; flam3_genome preset() const; signals: void previewResized(const QSize&); void previewMoved(); void undoStateSignal(); public slots: void popupMenuTriggeredSlot(QAction*); protected: void resizeEvent(QResizeEvent*); void showEvent(QShowEvent*); void mousePressEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); void mouseMoveEvent(QMouseEvent*); void wheelEvent(QWheelEvent*); void closeEvent(QCloseEvent*); }; #endif qosmic-1.6.0/src/mainviewer.cpp000066400000000000000000000370631304321135200164550ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include #include #include #include "mainviewer.h" #include "viewerpresetsmodel.h" #include "mainwindow.h" // // This has gotten wierd and complicated. The point of the timer // is to have the viewerResized() signal emitted after the mouse button // is resleased. This is used only when the parent widget is a dock // widget. // // The MainViewer is used as a dock widget, and as a window. The 'F5' and // 'F6' keys scale the image. The 'F8' key shows the image in original size. // The 'F7' key resizes to the previous 'F8' size. The 'Esc' key closes the // viewer. // MainViewer::MainViewer(QWidget* parent, const QString& title) : QWidget(parent), QosmicWidget(this, title) { setupUi(this); m_request.setName(tr("viewer")); m_request.setType(RenderRequest::Queued); fullscreen_action = new QAction(tr("fullscreen"), this); fullscreen_action->setCheckable(true); fullscreen_action->setChecked(false); if (isDockWidget()) { // popupMenu for the dockable viewer has image preset/quality options QSettings settings; settings.beginGroup("mainviewer"); selected_preset = settings.value("preset", ViewerPresetsModel::getInstance()->presetNames().first()).toString(); show_status = settings.value("showstatus", false).toBool(); settings.endGroup(); popupMenu = new QMenu(tr("presets")); connect(popupMenu, SIGNAL(triggered(QAction*)), this, SLOT(popupMenuTriggeredSlot(QAction*))); fullscreen_action->setShortcut(Qt::Key_Escape); status_action = new QAction(tr("show status"), this); status_action->setCheckable(true); status_action->setChecked(show_status); connect(status_action, SIGNAL(triggered(bool)), this, SLOT(statusAction(bool))); nullPresetText = tr("genome quality"); } else { // popupMenu for standalone viewer has scaling, save, and close options popupMenu = new QMenu(tr("file")); QAction* a = popupMenu->addAction(tr("close")); a->setShortcut( Qt::Key_Escape ); addAction(a); connect(a, SIGNAL(triggered(bool)), this, SLOT(closeWindowAction())); a = popupMenu->addAction(tr("scale down")); a->setShortcut( Qt::Key_F5 ); addAction(a); connect(a, SIGNAL(triggered(bool)), this, SLOT(scaleDownAction())); a = popupMenu->addAction(tr("scale up")); a->setShortcut( Qt::Key_F6 ); addAction(a); connect(a, SIGNAL(triggered(bool)), this, SLOT(scaleUpAction())); a = popupMenu->addAction(tr("scale last")); a->setShortcut( Qt::Key_F7 ); addAction(a); connect(a, SIGNAL(triggered(bool)), this, SLOT(scaleLastAction())); a = popupMenu->addAction(tr("scale reset")); a->setShortcut( Qt::Key_F8 ); addAction(a); connect(a, SIGNAL(triggered(bool)), this, SLOT(scaleResetAction())); a = popupMenu->addAction(tr("save image")); a->setShortcut( Qt::Key_F9 ); addAction(a); connect(a, SIGNAL(triggered(bool)), this, SLOT(saveImageAction())); fullscreen_action->setShortcut( Qt::Key_F10 ); popupMenu->addAction(fullscreen_action); } addAction(fullscreen_action); connect(fullscreen_action, SIGNAL(triggered(bool)), this, SLOT(fullScreenAction(bool))); QPixmap p(1,1); p.fill(Qt::black); m_pitem = m_scene.addPixmap(p); m_pitem->setAcceptDrops(true); m_graphicsView->setScene(&m_scene); m_scene.installEventFilter(this); m_scene.setBackgroundBrush( Qt::black ); m_titem = new QGraphicsTextItem(""); m_titem->setDefaultTextColor(QColor(Qt::white)); m_ritem = new QGraphicsRectItem(); m_ritem->setBrush(QBrush(Qt::black, Qt::SolidPattern)); m_ritem->setPen(Qt::NoPen); m_ritem->setOpacity(0.2); if (isDockWidget()) { m_scene.addItem(m_ritem); m_scene.addItem(m_titem); m_ritem->setZValue(m_pitem->zValue() + 2); m_titem->setZValue(m_pitem->zValue() + 3); } m_resizedself = false; timer = new QTimer(this); timer->setInterval(1000); timer->setSingleShot(true); connect(timer, SIGNAL(timeout()), this, SLOT(checkResized())); connect(RenderThread::getInstance(), SIGNAL(flameRendered(RenderEvent*)), this, SLOT(requestRenderedAction(RenderEvent*))); } QSize MainViewer::getViewerSize() { return m_graphicsView->maximumViewportSize(); } // if parent() is a dockwidget, then emit viewerResized() using the timer, // otherwise emit a signal if user changes the widget size void MainViewer::resizeEvent(QResizeEvent* /*e*/) { static QSize lastSize(0,0); if (m_resizedself) m_resizedself = false; else if (lastSize != getViewerSize()) { m_scaled_size = last_M = lastSize = getViewerSize(); if (isDockWidget() && QApplication::mouseButtons() != Qt::NoButton) timer->start(); else emit viewerResized( getViewerSize() ); } } void MainViewer::closeWindowAction() { if (isDockWidget()) qobject_cast(parent())->close(); else close(); } void MainViewer::scaleDownAction() { m_scaled_size *= 0.9; m_pitem->setPixmap( m_pix.scaled(m_scaled_size, Qt::KeepAspectRatio, Qt::SmoothTransformation) ); rescaleViewer(); } void MainViewer::scaleUpAction() { m_scaled_size *= 1.1; m_pitem->setPixmap( m_pix.scaled(m_scaled_size, Qt::KeepAspectRatio, Qt::SmoothTransformation) ); rescaleViewer(); } void MainViewer::scaleLastAction() { if (m_pitem->pixmap().size() == m_pix.size()) { m_pitem->setPixmap( m_pix.scaled(last_M, Qt::KeepAspectRatio, Qt::SmoothTransformation) ); } else { last_M = m_pitem->pixmap().size(); m_pitem->setPixmap( m_pix ); } rescaleViewer(); } void MainViewer::scaleResetAction() { if (m_pitem->pixmap().size() != m_pix.size()) { m_scaled_size = last_M = m_pitem->pixmap().size(); m_pitem->setPixmap(m_pix); rescaleViewer(); } } void MainViewer::saveImageAction() { QString fileName = QFileDialog::getSaveFileName(this, tr("Save an image"), tr("untitled.png")); if (!fileName.isEmpty() && QFileInfo(QFileInfo(fileName).path()).isWritable()) m_pitem->pixmap().save(fileName, "png"); } void MainViewer::setPixmap(QPixmap& p, bool resized) { setPixmap(QPixmap(p), resized); } // the resized boolean tells the viewer to rescale either itself // or the pixmap. scale the viewer by default void MainViewer::setPixmap(const QPixmap& p, bool resized) { if (RenderThread::getInstance()->format() != RenderThread::RGB32) { QImage img(p.size(), QImage::Format_RGB32); QPainter pa(&img); pa.fillRect(img.rect(), CheckersBrush(16)); pa.drawPixmap(0, 0, p); m_pix = QPixmap::fromImage(img); } else m_pix = p; m_orig_size = m_pix.size(); m_scaled_size = getViewerSize(); last_M = m_scaled_size; if (!(p.isNull() || getViewerSize() == p.size())) { if (resized) { m_pitem->setPixmap( m_pix ); rescaleViewer(); } else rescalePixmap(); } else { m_titem->setVisible(false); m_ritem->setVisible(false); m_pitem->setPixmap( m_pix ); QSize size( m_pix.size() ); m_graphicsView->setSceneRect(0, 0, size.width(), size.height()); } } void MainViewer::showEvent(QShowEvent* e) { if (!e->spontaneous()) { if (m_pix.isNull()) { QPixmap p(getViewerSize()); p.fill(Qt::black); setPixmap(p); } emit viewerResized( getViewerSize() ); } } QPixmap MainViewer::pixmap() { return m_pix; } // used by dockwidget children, look for no buttons, otherwise check later void MainViewer::checkResized() { if(QApplication::mouseButtons() == Qt::NoButton) emit viewerResized( getViewerSize() ); else timer->start(); } MainViewer::~MainViewer() { disconnect(popupMenu); disconnect(timer); if (isDockWidget()) { m_scene.removeItem(m_titem); if (popupMenu->actions().indexOf(status_action) != -1) popupMenu->removeAction(status_action); delete status_action; } delete m_ritem; delete m_titem; delete popupMenu; delete timer; } // rescale the pixmap to fit the viewer void MainViewer::rescalePixmap() { m_pitem->setPixmap( m_pix.scaled(getViewerSize(), Qt::KeepAspectRatio, Qt::SmoothTransformation) ); QSize size = m_pitem->pixmap().size(); m_graphicsView->setSceneRect(0, 0, size.width(), size.height()); } // rescale the viewer to fit the pixmap void MainViewer::rescaleViewer() { m_resizedself = true; QSize px_size = m_pitem->pixmap().size(); QSize v_size = m_graphicsView->maximumViewportSize(); QSize ds = px_size - v_size; const QSize fs = frameSize() + ds; if (isDockWidget()) qobject_cast(parent())->resize(fs); else resize(fs); m_graphicsView->setSceneRect(0, 0, px_size.width(), px_size.height()); } void MainViewer::hideEvent(QHideEvent* e) { if (!e->spontaneous()) emit viewerHidden(); } // build a popup menu containing the current set of presets with the last // selected preset checked void MainViewer::buildPopupMenu() { // only build this menu for docked widgets if (isDockWidget()) { popupMenu->clear(); preset_actions.clear(); QStringList presets = ViewerPresetsModel::getInstance()->presetNames(); foreach (QString s, presets) { QAction* a = popupMenu->addAction(s); preset_actions.append(a); if (selected_preset == s) { a->setCheckable(true); a->setChecked(true); popupMenu->setActiveAction(a); } } popupMenu->addSeparator(); // Add the action to select the same image rendering settings // as used by the mainpreviewwidget. QAction* a = popupMenu->addAction(nullPresetText); preset_actions.append(a); if (!isPresetSelected()) { a->setCheckable(true); a->setChecked(true); popupMenu->setActiveAction(a); } popupMenu->addAction(status_action); popupMenu->addAction(fullscreen_action); popupMenu->addSeparator(); a = popupMenu->addAction(tr("save image")); a->setCheckable(false); connect(a, SIGNAL(triggered(bool)), this, SLOT(saveImageAction())); } } // This handles displaying the popup menu when MainViewer is installed // as an eventFilter for the QGraphicsScene bool MainViewer::eventFilter(QObject* obj, QEvent* event) { if (event->type() == QEvent::GraphicsSceneMousePress) { QGraphicsSceneMouseEvent* mouseEvent = static_cast(event); if (mouseEvent->button() == Qt::RightButton) { buildPopupMenu(); popupMenu->popup(mouseEvent->screenPos()); } return false; } // standard event processing return QObject::eventFilter(obj, event); } // Called when an item in the popup is triggered. This method only // handles preset actions. void MainViewer::popupMenuTriggeredSlot(QAction* action) { if (preset_actions.contains(action)) { selected_preset = action->text(); QSettings().setValue("mainviewer/preset", selected_preset); emit viewerResized( getViewerSize() ); } } void MainViewer::fullScreenAction(bool checked) { QWidget* parent = parentWidget(); if (isDockWidget()) { QPixmap p(1,1); p.fill(Qt::black); if (checked) { normal_rect = QRect(parent->pos(), parent->size()); normal_flags = windowFlags(); normal_margins = layout()->contentsMargins(); setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); layout()->setContentsMargins(0, 0, 0, 0); showFullScreen(); m_pitem->setPixmap(p); show(); } else { QDockWidget* dockParent = qobject_cast(parent); setWindowFlags(normal_flags); layout()->setContentsMargins(normal_margins); dockParent->setWidget(this); parent->resize(normal_rect.size()); parent->move(normal_rect.topLeft()); m_pitem->setPixmap(p); show(); } } else { if (checked) { showFullScreen(); normal_margins = layout()->contentsMargins(); layout()->setContentsMargins(0, 0, 0, 0); } else { showNormal(); layout()->setContentsMargins(normal_margins); } } } void MainViewer::statusAction(bool checked) { show_status = checked; QSettings().setValue("mainviewer/showstatus", checked); } QString MainViewer::presetName() const { return selected_preset; } flam3_genome MainViewer::preset() const { return ViewerPresetsModel::getInstance()->preset(selected_preset); } bool MainViewer::isDockWidget() { return parent() && parent()->inherits("QDockWidget"); } void MainViewer::setRenderStatus(RenderStatus* status) { if (show_status && isVisible()) { if (status->State == status->Busy) { m_titem->setVisible(true); m_ritem->setVisible(true); QFontMetrics fm(m_titem->font()); double y = getViewerSize().height() - fm.height() - 5; m_titem->setPos(m_graphicsView->mapToScene(0, y)); m_ritem->setPos(m_graphicsView->mapToScene(0, y + fm.height())); const QString s(status->getMessage()); m_ritem->setRect(fm.boundingRect(s).adjusted(0,-1,6,1)); m_titem->setPlainText(s); } else { m_titem->setVisible(false); m_ritem->setVisible(false); } } } bool MainViewer::isPresetSelected() const { return selected_preset != nullPresetText; } void MainViewer::dragEnterEvent(QDragEnterEvent* event) { if (event->mimeData()->hasFormat("application/x-mutationpreviewwidget") || event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) event->acceptProposedAction(); } void MainViewer::dropEvent(QDropEvent* event) { bool do_render(false); if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) { int idx = event->mimeData()->data("application/x-qabstractitemmodeldatalist").toInt(); GenomeVector* genomes = getWidget()->genomeVector(); if (idx < genomes->size()) { m_request.setName(tr("genome %1").arg(idx + 1)); m_request.setGenome(genomes->data() + idx); do_render = true; } } else if (event->mimeData()->hasFormat("application/x-mutationpreviewwidget")) { MutationPreviewWidget* mutation = qobject_cast(event->source()); m_request.setName(mutation->toolTip().left(30)); m_request.setGenome(mutation->genome()); do_render = true; } if (do_render) { m_request.setSize(getViewerSize()); if (isPresetSelected()) m_request.setImagePresets(preset()); else m_request.setImagePresets(*(getWidget()->genomeVector()->selectedGenome())); RenderThread::getInstance()->render(&m_request); } } void MainViewer::requestRenderedAction(RenderEvent* event) { if (event->request() == &m_request) { setPixmap(QPixmap::fromImage(event->request()->image())); event->accept(); } } // ---------------------------------------------------------------------------- MainViewerGraphicsView::MainViewerGraphicsView(QWidget* parent) : QGraphicsView(parent) { } void MainViewerGraphicsView::dragEnterEvent(QDragEnterEvent* /*event*/) { } void MainViewerGraphicsView::dropEvent(QDropEvent* /*event*/) { } qosmic-1.6.0/src/mainviewer.h000066400000000000000000000072571304321135200161240ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef MAINVIEWER_H #define MAINVIEWER_H #include #include #include #include #include #include #include #include "qosmicwidget.h" #include "renderthread.h" #include "mutationwidget.h" // The MainViewerGraphicsView defines the drag/drop methods so that these // events are not handled and are forwarded to the MainViewer. class MainViewerGraphicsView : public QGraphicsView { Q_OBJECT public: MainViewerGraphicsView(QWidget* parent=0); protected: void dragEnterEvent(QDragEnterEvent*); void dropEvent(QDropEvent*); }; #include "ui_mainviewer.h" class MainViewer : public QWidget, public QosmicWidget, private Ui::MainViewer { Q_OBJECT QGraphicsScene m_scene; QPixmap m_pix; QSize m_orig_size; QSize m_scaled_size; QSize last_M; bool m_resizedself; double m_scale; QGraphicsPixmapItem* m_pitem; QTimer* timer; QMenu* popupMenu; RenderRequest m_request; QString selected_preset; QGraphicsTextItem* m_titem; QGraphicsRectItem* m_ritem; QAction* status_action; QAction* fullscreen_action; QList preset_actions; QString nullPresetText; QRect normal_rect; // the non-fullscreen geometry Qt::WindowFlags normal_flags; QMargins normal_margins; bool show_status; public: MainViewer(QWidget* parent=0, const QString& title=QString("MainViewer")); ~MainViewer(); QSize getViewerSize(); QPixmap pixmap(); void setPixmap(QPixmap& p, bool resized=true); void setPixmap(const QPixmap& p, bool resized=true); void rescalePixmap(); void rescaleViewer(); bool isDockWidget(); bool isPresetSelected() const; QString presetName() const; flam3_genome preset() const; public slots: void setRenderStatus(RenderStatus*); void popupMenuTriggeredSlot(QAction*); void closeWindowAction(); void scaleDownAction(); void scaleUpAction(); void scaleLastAction(); void scaleResetAction(); void saveImageAction(); void requestRenderedAction(RenderEvent*); void fullScreenAction(bool); void statusAction(bool); signals: void viewerResized(const QSize&); void viewerHidden(); protected: void resizeEvent(QResizeEvent*); void showEvent(QShowEvent*); void hideEvent(QHideEvent*); bool eventFilter(QObject*, QEvent*); void dragEnterEvent(QDragEnterEvent*); void dropEvent(QDropEvent*); void buildPopupMenu(); protected slots: void checkResized(); }; #endif qosmic-1.6.0/src/mainwindow.cpp000066400000000000000000001571161304321135200164650ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include #include #include #include "qosmic.h" #include "mainwindow.h" #include "renderdialog.h" #include "renderprogressdialog.h" #include "flam3filestream.h" MainWindow::MainWindow() : QMainWindow(), QosmicWidget(this, "MainWindow") { setupUi(this); m_rthread = 0; lastSelected = 0; m_fileViewer = 0; m_dialogsEnabled = true; genomes.setSelected(0); genomes.undoProviders()->append(this); // These are the request instances sent to the renderthread m_preview_request.setGenome(genomes.data()); m_preview_request.setName(tr("preview")); m_preview_request.setType(RenderRequest::Preview); m_viewer_request.setGenome(genomes.data()); m_viewer_request.setName(tr("viewer")); m_viewer_request.setType(RenderRequest::Image); m_file_request.setGenome(genomes.data()); m_file_request.setName(tr("file.png")); m_file_request.setType(RenderRequest::File); m_sheep_reqname = tr("sheep"); // the render thread m_rthread = RenderThread::getInstance(); connect(m_rthread, SIGNAL(flameRendered(RenderEvent*)), this, SLOT(flameRenderedSlot(RenderEvent*))); logInfo("MainWindow::MainWindow : starting RenderThread"); m_rthread->start(); // status widget logInfo("MainWindow::MainWindow : creating StatusWidget"); m_statusWidget = new StatusWidget(this); connect(m_rthread, SIGNAL(statusUpdated(RenderStatus*)), m_statusWidget, SLOT(setRenderStatus(RenderStatus*))); // figure editor logInfo("MainWindow::MainWindow : creating FigureEditor"); m_xfeditor = new FigureEditor(&genomes, m_xfeditview); m_xfeditview->setScene(m_xfeditor); // force the containing qgraphicsview to track mouseMoveEvents m_xfeditview->viewport()->setMouseTracking(true); genomes.undoProviders()->append(m_xfeditor); // the figureeditor's editmodeselector logInfo("MainWindow::MainWindow : creating EditModeSelectorWidget"); m_modeSelectorWidget = new EditModeSelectorWidget(m_xfeditor, this); centralWidget()->layout()->addWidget(m_modeSelectorWidget); connect(m_xfeditor, SIGNAL(triangleModifiedSignal(Triangle*)), this, SLOT(render())); connect(m_xfeditor, SIGNAL(triangleListChangedSignal()), this, SLOT(render())); connect(m_xfeditor, SIGNAL(triangleSelectedSignal(Triangle*)), this, SLOT(triangleSelectedSlot(Triangle*))); connect(m_xfeditor, SIGNAL(coordinateChangeSignal(double,double)), this, SLOT(updateStatus(double,double))); connect(m_xfeditor, SIGNAL(undoStateSignal()), this, SLOT(addUndoState())); connect(m_modeSelectorWidget, SIGNAL(undoStateSignal()), this, SLOT(addUndoState())); QDockWidget *dock; QDockWidget *lastDock; QList dockActions; setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); // main preview widget logInfo("MainWindow::MainWindow : creating PreviewWidget"); dock = new QDockWidget(tr("Preview"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_previewWidget = new MainPreviewWidget(&genomes, dock); dock->setWidget(m_previewWidget); addDockWidget(Qt::RightDockWidgetArea, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_previewWidget, SIGNAL(previewMoved()), this, SLOT(render())); connect(m_previewWidget, SIGNAL(undoStateSignal()), this, SLOT(addUndoState())); lastDock = dock; // select a triangle widget logInfo("MainWindow::MainWindow : creating SelectTriangleWidget"); dock = new QDockWidget(tr("Triangles"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_selectTriangleWidget = new SelectTriangleWidget(&genomes, dock); dock->setWidget(m_selectTriangleWidget); splitDockWidget(lastDock, dock, Qt::Vertical); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_xfeditor, SIGNAL(triangleSelectedSignal(Triangle*)), m_selectTriangleWidget, SLOT(triangleSelectedSlot(Triangle*))); connect(m_selectTriangleWidget, SIGNAL(dataChanged()), this, SLOT(render())); connect(m_selectTriangleWidget, SIGNAL(undoStateSignal()), this, SLOT(addUndoState())); lastDock = dock; // triangle density widget logInfo("MainWindow::MainWindow : creating TriangleDensityWidget"); dock = new QDockWidget(tr("Densities"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_triangleDensityWidget = new TriangleDensityWidget(&genomes, m_xfeditor, dock); dock->setWidget(m_triangleDensityWidget); splitDockWidget(lastDock, dock, Qt::Vertical); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_xfeditor, SIGNAL(triangleSelectedSignal(Triangle*)), m_triangleDensityWidget, SLOT(triangleSelectedSlot(Triangle*))); connect(m_triangleDensityWidget, SIGNAL(dataChanged()), m_selectTriangleWidget, SLOT(reset())); connect(m_selectTriangleWidget, SIGNAL(dataChanged()), m_triangleDensityWidget, SLOT(reset())); connect(m_triangleDensityWidget, SIGNAL(dataChanged()), this, SLOT(render())); connect(m_triangleDensityWidget, SIGNAL(genomeMerged()), this, SLOT(scriptFinishedSlot())); connect(m_triangleDensityWidget, SIGNAL(undoStateSignal()), this, SLOT(addUndoState())); lastDock = dock; // main viewer logInfo("MainWindow::MainWindow : creating ViewerWidget"); dock = new QDockWidget(tr("Viewer"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_viewer = new MainViewer(dock); dock->setWidget(m_viewer); addDockWidget(Qt::LeftDockWidgetArea, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_rthread, SIGNAL(statusUpdated(RenderStatus*)), m_viewer, SLOT(setRenderStatus(RenderStatus*))); // image settings widget logInfo("MainWindow::MainWindow : creating ImageSettingsWidget"); dock = new QDockWidget(tr("Image"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_imageSettingsWidget = new ImageSettingsWidget(&genomes, dock); dock->setWidget(m_imageSettingsWidget); tabifyDockWidget(lastDock, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_imageSettingsWidget, SIGNAL(dataChanged()), this, SLOT(render())); connect(m_imageSettingsWidget, SIGNAL(symmetryAdded()), this, SLOT(scriptFinishedSlot())); connect(m_imageSettingsWidget, SIGNAL(presetSelected()), this, SLOT(presetSelectedSlot())); lastDock = dock; // camera settings widget logInfo("MainWindow::MainWindow : creating CameraSettingsWidget"); dock = new QDockWidget(tr("Camera"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_cameraSettingsWidget = new CameraSettingsWidget(&genomes, dock); dock->setWidget(m_cameraSettingsWidget); tabifyDockWidget(lastDock, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_cameraSettingsWidget, SIGNAL(dataChanged()), this, SLOT(render())); connect(m_cameraSettingsWidget, SIGNAL(undoStateSignal()), this, SLOT(addUndoState())); connect(m_previewWidget, SIGNAL(previewMoved()), m_cameraSettingsWidget, SLOT(updateFormData())); lastDock = dock; // triangle coords widget logInfo("MainWindow::MainWindow : creating TriangleCoordsWidget"); dock = new QDockWidget(tr("Coordinates"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_coordsWidget = new TriangleCoordsWidget(&genomes, dock); dock->setWidget(m_coordsWidget); tabifyDockWidget(lastDock, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_xfeditor, SIGNAL(triangleSelectedSignal(Triangle*)), m_coordsWidget, SLOT(triangleSelectedSlot(Triangle*))); connect(m_xfeditor, SIGNAL(triangleModifiedSignal(Triangle*)), m_coordsWidget, SLOT(triangleModifiedSlot(Triangle*))); connect(m_coordsWidget, SIGNAL(dataChanged()), this, SLOT(render())); connect(m_coordsWidget, SIGNAL(undoStateSignal()), this, SLOT(addUndoState())); lastDock = dock; // color settings widget logInfo("MainWindow::MainWindow : creating ColorSettingsWidget"); dock = new QDockWidget(tr("Colors"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_colorSettingsWidget = new ColorSettingsWidget(&genomes, dock); dock->setWidget(m_colorSettingsWidget); tabifyDockWidget(lastDock, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_xfeditor, SIGNAL(triangleSelectedSignal(Triangle*)), m_colorSettingsWidget, SLOT(triangleSelectedSlot(Triangle*))); connect(m_colorSettingsWidget, SIGNAL(dataChanged()), this, SLOT(render())); connect(m_colorSettingsWidget, SIGNAL(colorSelected(double)), m_xfeditor, SLOT(colorChangedAction(double))); connect(m_colorSettingsWidget, SIGNAL(undoStateSignal()), this, SLOT(addUndoState())); connect(m_selectTriangleWidget, SIGNAL(dataChanged()), m_colorSettingsWidget, SLOT(reset())); connect(m_triangleDensityWidget, SIGNAL(dataChanged()), m_colorSettingsWidget, SLOT(reset())); lastDock = dock; // color balance widget logInfo("MainWindow::MainWindow : creating ColorBalanceWidget"); dock = new QDockWidget(tr("Color Balance"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_colorBalanceWidget = new ColorBalanceWidget(&genomes, dock); dock->setWidget(m_colorBalanceWidget); tabifyDockWidget(lastDock, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_colorBalanceWidget, SIGNAL(dataChanged()), this, SLOT(render())); connect(m_colorBalanceWidget, SIGNAL(paletteChanged()), this, SLOT(paletteHueChangedAction())); lastDock = dock; // variations widget logInfo("MainWindow::MainWindow : creating VariationsWidget"); dock = new QDockWidget(tr("Variations"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_variationsWidget = new VariationsWidget(&genomes, dock); dock->setWidget(m_variationsWidget); tabifyDockWidget(lastDock, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_xfeditor, SIGNAL(triangleSelectedSignal(Triangle*)), m_variationsWidget, SLOT(triangleSelectedSlot(Triangle*))); connect(m_variationsWidget, SIGNAL(dataChanged()), m_xfeditor, SLOT(updatePreview())); connect(m_variationsWidget, SIGNAL(dataChanged()), this, SLOT(render())); connect(m_variationsWidget, SIGNAL(undoStateSignal()), this, SLOT(addUndoState())); lastDock = dock; // chaos widget logInfo("MainWindow::MainWindow : creating ChaosWidget"); dock = new QDockWidget(tr("Chaos"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_chaosWidget = new ChaosWidget(&genomes, dock); dock->setWidget(m_chaosWidget); tabifyDockWidget(lastDock, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_xfeditor, SIGNAL(triangleSelectedSignal(Triangle*)), m_chaosWidget, SLOT(triangleSelectedSlot(Triangle*))); connect(m_chaosWidget, SIGNAL(dataChanged()), this, SLOT(render())); connect(m_chaosWidget, SIGNAL(undoStateSignal()), this, SLOT(addUndoState())); connect(m_selectTriangleWidget, SIGNAL(dataChanged()), m_chaosWidget, SLOT(updateFormData())); lastDock = dock; // select a genome widget logInfo("MainWindow::MainWindow : creating SelectGenomeWidget"); dock = new QDockWidget(tr("Genomes"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_genomeSelectWidget = new SelectGenomeWidget(&genomes, dock); dock->setWidget(m_genomeSelectWidget); addDockWidget(Qt::LeftDockWidgetArea, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_genomeSelectWidget, SIGNAL(genomeSelected(int)), this, SLOT(genomeSelectedSlot(int))); connect(m_genomeSelectWidget, SIGNAL(genomesModified()), this, SLOT(genomesModifiedSlot())); lastDock = dock; // palettes logInfo("MainWindow::MainWindow : creating PalettesWidget"); dock = new QDockWidget(tr("Palettes"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_paletteEditor = new PaletteEditor(dock); dock->setWidget(m_paletteEditor); tabifyDockWidget(lastDock, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_paletteEditor, SIGNAL(paletteChanged()), this, SLOT(paletteChangedAction())); connect(m_paletteEditor, SIGNAL(undoStateSignal()), this, SLOT(addUndoState())); lastDock = dock; // mutations widget logInfo("MainWindow::MainWindow : creating MutationsWidget"); dock = new QDockWidget(tr("Mutations"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_mutations = new MutationWidget(&genomes, m_rthread, dock); dock->setWidget(m_mutations); addDockWidget(Qt::LeftDockWidgetArea, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_mutations, SIGNAL(genomeSelected(flam3_genome*)), this, SLOT(mutationSelectedSlot(flam3_genome*))); connect(m_genomeSelectWidget, SIGNAL(genomesModified()), m_mutations, SLOT(reset())); // directory view widget logInfo("MainWindow::MainWindow : creating DirectoryViewWidget"); dock = new QDockWidget(tr("Browse"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_directoryViewWidget = new DirectoryViewWidget(dock); dock->setWidget(m_directoryViewWidget); tabifyDockWidget(lastDock, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_directoryViewWidget, SIGNAL(flam3FileSelected(const QString&)), this, SLOT(flam3FileSelectAction(const QString&))); connect(m_directoryViewWidget, SIGNAL(flam3FileAppended(const QString&)), this, SLOT(flam3FileAppendAction(const QString&))); // sheep-loop widget logInfo("MainWindow::MainWindow : creating SheepLoopWidget"); dock = new QDockWidget(tr("Sheep Loops"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_sheepLoopWidget = new SheepLoopWidget(&genomes, dock); dock->setWidget(m_sheepLoopWidget); addDockWidget(Qt::TopDockWidgetArea, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_sheepLoopWidget, SIGNAL(runSheepLoop(bool)), this, SLOT(runSheepLoop(bool))); connect(m_sheepLoopWidget, SIGNAL(saveSheepLoop()), this, SLOT(saveSheepLoop())); connect(m_rthread, SIGNAL(flameRenderingKilled()), m_sheepLoopWidget, SLOT(reset())); connect(m_genomeSelectWidget, SIGNAL(genomeSelected(int)), m_sheepLoopWidget, SLOT(genomeSelectedSlot(int))); connect(m_genomeSelectWidget, SIGNAL(genomesModified()), m_sheepLoopWidget, SLOT(genomesModifiedSlot())); connect(m_xfeditor, SIGNAL(triangleListChangedSignal()), m_sheepLoopWidget, SLOT(genomesModifiedSlot())); // script editing widget logInfo("MainWindow::MainWindow : creating ScriptEditorWidget"); dock = new QDockWidget(tr("Edit Script"), this); dock->setObjectName(dock->windowTitle()); dock->setAllowedAreas(Qt::AllDockWidgetAreas); m_scriptEditWidget = new ScriptEditWidget(this, dock); dock->setWidget(m_scriptEditWidget); addDockWidget(Qt::BottomDockWidgetArea, dock); dockActions << dock->toggleViewAction(); dock->hide(); m_dockWidgets << dock; connect(m_directoryViewWidget, SIGNAL(luaScriptSelected(const QString&)), m_scriptEditWidget, SLOT(loadScript(const QString&))); createActions(); createToolBars(); createMenus(); createStatusBar(); foreach(QAction* a, dockActions) settingsMenu->addAction(a); // install this eventfilter to capture globally the spacebar key qApp->installEventFilter(this); setCurrentFile(""); } void MainWindow::triangleSelectedSlot(Triangle* t) { logFine(QString("MainWindow::triangleSelectedSlot : t=0x%1") .arg((long)t, 0, 16)); selectedTriangle = t; lastSelected = 0; // sneakily update the statusBar without changing position. // this is just a way to avoid adding more public functions to // figureeditor. QString msg = coordsLabel.text(); int tid = m_xfeditor->selectedTriangleIndex() + 1; int tnum = m_xfeditor->getNumberOfTriangles(); int idx = msg.indexOf(']',0); if (idx > -1) { msg.replace(0,idx,QString(" [%1/%2").arg(tid).arg(tnum)); coordsLabel.setText(msg); } } void MainWindow::showMainViewer(QString filename) { if (m_dialogsEnabled) { if (!m_fileViewer) m_fileViewer = new MainViewer(0, "Viewer"); m_fileViewer->show(); m_fileViewer->setPixmap(QPixmap(filename)); } } void MainWindow::flameRenderedSlot(RenderEvent* e) { RenderRequest* req = e->request(); if (req == &m_preview_request) { logFiner(QString("MainWindow::flameRenderedSlot : updating preview")); m_previewWidget->setPixmap(QPixmap::fromImage(req->image())); e->accept(); } else if (req == &m_viewer_request) { logFiner(QString("MainWindow::flameRenderedSlot : updating viewer")); m_viewer->setPixmap(QPixmap::fromImage(req->image())); e->accept(); } else if (req->name().contains(m_sheep_reqname)) { logFiner(QString("MainWindow::flameRenderedSlot : displaying sheep %1").arg(req->name())); m_previewWidget->setPixmap(QPixmap::fromImage(req->image())); // tell the sheeploop widget that the last frame has been shown if (req == m_sheep_requests.last()) m_sheepLoopWidget->reset(); e->accept(); } else if (req == &m_file_request) e->accept(); } void MainWindow::updateStatus(double posX, double posY) { double tx, ty; QTransform trans(m_xfeditor->transform().inverted()); trans.map(posX, posY, &tx, &ty); switch (m_coordsWidget->coordType()) { case TriangleCoordsWidget::Rect: break; case TriangleCoordsWidget::Degree: { Util::rectToPolarDeg(tx, ty, &tx, &ty); break; } case TriangleCoordsWidget::Radian: Util::rectToPolar(tx, ty, &tx, &ty); } CoordinateMark* mark = m_xfeditor->mark(); QChar separator(QLocale().groupSeparator()); if (mark->isVisible()) { double mx, my; trans.map(mark->center().x(), mark->center().y(), &mx, &my); switch (m_coordsWidget->coordType()) { case TriangleCoordsWidget::Rect: break; case TriangleCoordsWidget::Degree: { Util::rectToPolarDeg(mx, my, &mx, &my); break; } case TriangleCoordsWidget::Radian: Util::rectToPolar(mx, my, &mx, &my); } coordsLabel.setText(tr(" [%1/%2] : (%L3%4%L5) : mark (%L6%7%L8)") .arg(m_xfeditor->selectedTriangleIndex() + 1) .arg(m_xfeditor->getNumberOfTriangles()) .arg(tx, 0, 'f', 4).arg(separator).arg(ty, 0, 'f', 4) .arg(mx, 0, 'f', 4).arg(separator).arg(my, 0, 'f', 4)); } else coordsLabel.setText(QString(" [%1/%2] : (%L3%4%L5)") .arg(m_xfeditor->selectedTriangleIndex() + 1) .arg(m_xfeditor->getNumberOfTriangles()) .arg(tx, 0, 'f', 4).arg(separator).arg(ty, 0, 'f', 4)); } void MainWindow::closeEvent(QCloseEvent* event) { logInfo("MainWindow::closeEvent : saving current genome"); Flam3FileStream::autoSave(&genomes, GenomeVector::SaveOnExit | GenomeVector::AlwaysSave); m_rthread->stopRendering(); m_rthread->running = false; writeSettings(); // call close() on dock widgets so they can save settings if needed foreach (QDockWidget* dock, m_dockWidgets) dock->widget()->close(); event->accept(); logInfo("MainWindow::closeEvent : quitting"); } void MainWindow::showEvent(QShowEvent* event) { logInfo("MainWindow::showEvent : showing mainwindow"); if (!event->spontaneous()) { logInfo("MainWindow::showEvent : initializing"); readSettings(); QFile file(QOSMIC_USERDIR + "/init.lua"); if (file.open(QIODevice::ReadOnly)) { logInfo("MainWindow::showEvent : reading lua config"); Lua::LuaThread lua_thread(this); QTextStream os(&file); lua_thread.setLuaText(os.readAll()); file.close(); lua_thread.start(); while (lua_thread.isRunning()) QCoreApplication::processEvents(); logInfo("MainWindow::showEvent : finished reading config"); } render(); connect(m_viewer, SIGNAL(viewerResized(const QSize&)), this, SLOT(mainViewerResizedAction(const QSize&))); connect(m_viewer, SIGNAL(viewerHidden()), this, SLOT(mainViewerHiddenAction())); connect(m_previewWidget, SIGNAL(previewResized(const QSize&)), this, SLOT(previewResizedAction(const QSize&))); } } void MainWindow::newFile() { setFlameXML(DEFAULT_FLAME_XML); setCurrentFile(""); } void MainWindow::open() { QFileDialog dialog(this, tr("Open a flame"), lastDir, tr("flam3 xml (*.flam *.flam3 *.flame);;All files (*)")); FlamFileIconProvider p; dialog.setIconProvider(&p); if (dialog.exec()) { QString fileName = dialog.selectedFiles().first(); if (!fileName.isEmpty()) { lastDir = QFileInfo(fileName).dir().canonicalPath(); if (loadFile(fileName)) render(); } } } bool MainWindow::save() { if (curFile.isEmpty()) { return saveAs(); } else { return saveFile(curFile); } } bool MainWindow::saveAs() { QFileDialog dialog(this, tr("Save a flame"), lastDir, tr("flam3 xml (*.flam *.flam3 *.flame);;All files (*)")); FlamFileIconProvider p; dialog.setIconProvider(&p); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setDefaultSuffix("flam3"); dialog.selectFile(curFile); if (dialog.exec()) { QString fileName(dialog.selectedFiles().first()); lastDir = QFileInfo(fileName).dir().canonicalPath(); return saveFile(fileName); } return false; } bool MainWindow::quickSave() { QStringList filter; filter << "q*.flam3"; QDir quickDir(m_directoryViewWidget->currentPath()); QFileInfoList files = quickDir.entryInfoList(filter, QDir::Files, QDir::Name | QDir::Reversed); int pad = 8; QFileInfo file(quickDir, QString("q%1.flam3").arg(1, pad, 10, QChar('0'))); if (files.size() > 0) { QRegExp r("q(\\d+).flam3"); foreach (QFileInfo i, files) { QString lastname = i.fileName(); if (r.exactMatch(lastname)) { int n = r.cap(1).toInt(); if (++n > 99999999) pad += 4; lastname = QString("q%1.flam3").arg(n, pad, 10, QChar('0')); file = QFileInfo(quickDir, lastname); break; } } } QString filename = file.absoluteFilePath(); QString basename = file.baseName(); QFileInfo imgFile = QFileInfo(file.dir(), basename + ".png"); logInfo(QString("MainWindow::quickSave : quicksaving to file %1") .arg(filename)); if (saveImage(imgFile.absoluteFilePath())) { saveFile(filename); return true; } return false; } bool MainWindow::saveImage(const QString& filename, int idx) { QString fileName(filename); QString origName(fileName); if (fileName.isEmpty()) { fileName = origName = curFile; if (fileName.isEmpty()) fileName = tr("untitled.png"); else { int pos = fileName.lastIndexOf('.'); fileName.replace(pos, fileName.size() - pos, ".png"); } } flam3_genome* current_genome; if (idx > -1) current_genome = genomes.data() + idx; else current_genome = genomes.selectedGenome(); QSize fileSize(0,0); QSize currentSize(current_genome->width,current_genome->height); QString filePreset; if (m_dialogsEnabled) { RenderDialog dialog(this, fileName, lastDir, currentSize, ViewerPresetsModel::getInstance()->presetNames()); if (dialog.exec() == QDialog::Accepted) { fileName = dialog.absoluteFilePath(); if (dialog.presetSelected()) filePreset = dialog.selectedPreset(); if (dialog.sizeSelected()) fileSize = dialog.selectedSize(); } else return false; } if (fileName.isEmpty() || !QFileInfo(QFileInfo(fileName).path()).isWritable()) { if (m_dialogsEnabled) QMessageBox::warning(this, tr("Application error"), tr("Cannot write file %1\n").arg(fileName)); logWarn(QString("MainWindow::saveImage : couldn't save to file %1") .arg(fileName)); return false; } lastDir = QFileInfo(fileName).dir().canonicalPath(); logInfo(QString("MainWindow::saveImage : rendering to file %1 at %2x%3 / %4") .arg(fileName) .arg(fileSize.width() ? fileSize.width() : currentSize.width()) .arg(fileSize.height() ? fileSize.height() : currentSize.height()) .arg(filePreset)); m_file_request.setGenome(current_genome); if (filePreset.isEmpty()) m_file_request.setImagePresets(*current_genome); else m_file_request.setImagePresets(ViewerPresetsModel::getInstance()->preset(filePreset)); m_file_request.setName(fileName); m_file_request.setType(RenderRequest::File); m_file_request.setSize(fileSize); m_rthread->render(&m_file_request); if (m_dialogsEnabled) { RenderProgressDialog progress(this, m_rthread); if (progress.exec() == QDialog::Rejected) { m_rthread->stopRendering(); return false; } else { if (progress.showMainViewer()) showMainViewer(fileName); m_directoryViewWidget->fileImageRendered(origName); } } return true; } void MainWindow::importAction() { QString fileName = QFileDialog::getOpenFileName(this, tr("Import genomes from a file"), lastDir, tr("flam3 xml (*.flam *.flam3 *.flame);;All files (*)")); if (!fileName.isEmpty()) { lastDir = QFileInfo(fileName).dir().canonicalPath(); if (importGenome(fileName)) render(); else QMessageBox::warning(this, tr("Error"), tr("Cannot import file %1").arg(fileName)); } } void MainWindow::exportAction() { QString fileName(curFile); if (!fileName.isEmpty()) fileName.replace(QRegExp("\\.flam[3e]?$"), QString("_%1.flam3").arg(genomes.selected())); QFileDialog dialog(this, tr("Save the current genome"), lastDir, tr("flam3 xml (*.flam *.flam3 *.flame);;All files (*)")); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setDefaultSuffix("flam3"); dialog.selectFile(fileName); if (dialog.exec()) { fileName = dialog.selectedFiles().first(); lastDir = QFileInfo(fileName).dir().canonicalPath(); if (!exportGenome(fileName, genomes.selected())) QMessageBox::warning(this, tr("Error"), tr("Cannot write file to %1").arg(fileName)); } } void MainWindow::about() { QMessageBox::about(this, tr("About Qosmic"), tr("

Qosmic version %1

" "

Copyright (C) 2007-2016 by David Bitseff
" "

Use and redistribute under the terms of the
" "" "GNU General Public License Version 3

" "

Thanks to:
" "- Scott Draves for the flam3 library
" "- Erik Reckase for his work on the flam3 library
" "- Mark James for his Silk icon set
" "- Mark Townsend for the Apophysis editor
" "- Pavel Fric for Czech Translations
" "

This version uses: Qt " QT_VERSION_STR ", " LUA_RELEASE ", %2

") .arg(QOSMIC_VERSION).arg(flam3_version())); } void MainWindow::createActions() { logInfo("MainWindow::createActions : creating actions"); QList keys; newAct = new QAction(QIcon(":icons/silk/application.xpm"), tr("Reset"), this); newAct->setShortcut(QKeySequence::New); newAct->setStatusTip(tr("Load default genome")); connect(newAct, SIGNAL(triggered()), this, SLOT(newFile())); openAct = new QAction(QIcon(":icons/silk/folder.xpm"), tr("&Open..."), this); openAct->setShortcut(QKeySequence::Open); openAct->setStatusTip(tr("Open an existing file")); connect(openAct, SIGNAL(triggered()), this, SLOT(open())); saveAct = new QAction(QIcon(":icons/silk/disk.xpm"), tr("&Save"), this); saveAct->setShortcut(QKeySequence::Save); saveAct->setStatusTip(tr("Save the flame to disk")); connect(saveAct, SIGNAL(triggered()), this, SLOT(save())); saveAsAct = new QAction(QIcon(":icons/silk/page_save.xpm"),tr("Save &As..."), this); saveAsAct->setShortcut(QKeySequence::SaveAs); saveAsAct->setStatusTip(tr("Save the flame under a new name")); connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs())); saveImageAct = new QAction(QIcon(":icons/silk/picture_save.xpm"),tr("Render to &file..."), this); saveImageAct->setShortcut(QString("Ctrl+I")); saveImageAct->setStatusTip(tr("Save an image of current flame")); connect(saveImageAct, SIGNAL(triggered()), this, SLOT(saveImage())); quickSaveAct = new QAction(QIcon(":icons/silk/disk_multiple.xpm"),tr("Q&uicksave flame..."), this); quickSaveAct->setShortcut(QString("Ctrl+P")); quickSaveAct->setStatusTip(tr("Quickly save file and image of current flame")); connect(quickSaveAct, SIGNAL(triggered()), this, SLOT(quickSave())); for (int i = 0; i < NumRecentFiles; ++i) { recentFileActions[i] = new QAction(this); recentFileActions[i]->setVisible(false); connect(recentFileActions[i], SIGNAL(triggered()), this, SLOT(openRecentFile())); } exitAct = new QAction(QIcon(":icons/silk/cross.xpm"),tr("&Quit"), this); exitAct->setShortcut(QString("Ctrl+Q")); exitAct->setStatusTip(tr("Quit the application")); connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); killAct = new QAction(QIcon(":icons/silk/stop.xpm"),tr("&Stop rendering"), this); killAct->setShortcut(QString("Ctrl+K")); killAct->setStatusTip(tr("Stop rendering")); connect(killAct, SIGNAL(triggered()), this, SLOT(kill())); randomAct = new QAction(QIcon(":icons/silk/wand.xpm"),tr("&Random Flame"), this); randomAct->setShortcut(QString("Ctrl+R")); randomAct->setStatusTip(tr("Generate a random xform set")); connect(randomAct, SIGNAL(triggered()), this, SLOT(randomizeGenomeAction())); rescaleAct = new QAction(QIcon(":icons/silk/shape_group.xpm"), tr("Rescale View"), this); rescaleAct->setShortcut(QString("Ctrl+A")); rescaleAct->setStatusTip(tr("Rescale the editor")); connect(rescaleAct, SIGNAL(triggered()), m_xfeditor, SLOT(autoScale())); selNextAct = new QAction(tr("Select next triangle"), this); selNextAct->setShortcut(Qt::Key_F2); addAction(selNextAct); connect(selNextAct, SIGNAL(triggered()), m_xfeditor, SLOT(selectNextTriangle())); selPrevAct = new QAction(tr("Select previous triangle"), this); selPrevAct->setShortcut(Qt::Key_F1); addAction(selPrevAct); connect(selPrevAct, SIGNAL(triggered()), m_xfeditor, SLOT(selectPreviousTriangle())); scaleInAct = new QAction(tr("Scale in the scene"), this); keys.clear(); keys << Qt::Key_Semicolon << Qt::Key_Z; scaleInAct->setShortcuts(keys); addAction(scaleInAct); connect(scaleInAct, SIGNAL(triggered()), m_xfeditor, SLOT(scaleInScene())); scaleOutAct = new QAction(tr("Scale out the scene"), this); keys.clear(); keys << Qt::Key_Colon << Qt::SHIFT + Qt::Key_Z; scaleOutAct->setShortcuts(keys); addAction(scaleOutAct); connect(scaleOutAct, SIGNAL(triggered()), m_xfeditor, SLOT(scaleOutScene())); undoAct = new QAction(QIcon(":icons/silk/arrow_undo.xpm"), tr("Undo"), this); keys.clear(); keys << QKeySequence::Undo << QString("Ctrl+;") << Qt::Key_F3; undoAct->setShortcuts(keys); undoAct->setStatusTip(tr("Undo")); addAction(undoAct); connect(undoAct, SIGNAL(triggered()), this, SLOT(undo())); redoAct = new QAction(QIcon(":icons/silk/arrow_redo.xpm"), tr("Redo"), this); keys.clear(); keys << QKeySequence::Redo << QString("Ctrl+Shift+;") << Qt::Key_F4; redoAct->setShortcuts(keys); redoAct->setStatusTip(tr("Redo")); addAction(redoAct); connect(redoAct, SIGNAL(triggered()), this, SLOT(redo())); cutAct = new QAction(QIcon(":icons/silk/cut.xpm"), tr("Cut"), this); cutAct->setShortcut(QKeySequence::Cut); cutAct->setStatusTip(tr("Cut")); addAction(cutAct); connect(cutAct, SIGNAL(triggered()), m_xfeditor, SLOT(cutTriangleAction())); copyAct = new QAction(QIcon(":icons/silk/page_copy.xpm"), tr("Copy"), this); copyAct->setShortcut(QKeySequence::Copy); copyAct->setStatusTip(tr("Copy")); addAction(copyAct); connect(copyAct, SIGNAL(triggered()), m_xfeditor, SLOT(copyTriangleAction())); pasteAct = new QAction(QIcon(":icons/silk/page_paste.xpm"), tr("Paste"), this); pasteAct->setShortcut(QKeySequence::Paste); pasteAct->setStatusTip(tr("Paste")); addAction(pasteAct); connect(pasteAct, SIGNAL(triggered()), m_xfeditor, SLOT(pasteTriangleAction())); importAct = new QAction(QIcon(":icons/silk/page_white_get.xpm"), tr("Import genomes"), this); importAct->setStatusTip(tr("Import genomes")); addAction(importAct); connect(importAct, SIGNAL(triggered()), this, SLOT(importAction())); exportAct = new QAction(QIcon(":icons/silk/page_white_put.xpm"), tr("Export current genome"), this); exportAct->setStatusTip(tr("Export the current genome")); addAction(exportAct); connect(exportAct, SIGNAL(triggered()), this, SLOT(exportAction())); aboutAct = new QAction(QIcon(":icons/silk/information.xpm"),tr("&About"), this); aboutAct->setStatusTip(tr("Show the application's About box")); connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); aboutQtAct = new QAction(tr("About &Qt"), this); aboutQtAct->setStatusTip(tr("Show the Qt library's About box")); connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); } void MainWindow::createMenus() { logInfo("MainWindow::createMenus : adding menus"); fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAct); fileMenu->addAction(openAct); fileMenu->addAction(saveAct); fileMenu->addAction(saveAsAct); fileMenu->addAction(saveImageAct); separatorAct = fileMenu->addSeparator(); for (int i = 0; i < NumRecentFiles; ++i) fileMenu->addAction(recentFileActions[i]); updateRecentFileActions(); fileMenu->addSeparator(); fileMenu->addAction(exitAct); editMenu = menuBar()->addMenu(tr("&Edit")); editMenu->addAction(undoAct); editMenu->addAction(redoAct); editMenu->addSeparator(); editMenu->addAction(cutAct); editMenu->addAction(copyAct); editMenu->addAction(pasteAct); editMenu->addSeparator(); editMenu->addAction(rescaleAct); editMenu->addAction(randomAct); editMenu->addAction(killAct); editMenu->addSeparator(); editMenu->addAction(importAct); editMenu->addAction(exportAct); settingsMenu = menuBar()->addMenu(tr("&Widgets")); settingsMenu->addAction(showWidgetsBarAct); settingsMenu->addAction(showFileBarAct); settingsMenu->addAction(showEditBarAct); settingsMenu->addSeparator(); helpMenu = menuBar()->addMenu(tr("&Info")); helpMenu->addAction(aboutAct); helpMenu->addAction(aboutQtAct); } void MainWindow::updateRecentFileActions() { QSettings settings; QStringList files = settings.value("mainwindow/recentfiles").toStringList(); int numRecentFiles = qMin(files.size(), (int)NumRecentFiles); for (int i = 0; i < numRecentFiles; ++i) { QString text = QString("&%1 %2").arg(i + 1).arg(strippedName(files[i])); recentFileActions[i]->setText(text); recentFileActions[i]->setData(files[i]); recentFileActions[i]->setVisible(true); } for (int j = numRecentFiles; j < NumRecentFiles; ++j) recentFileActions[j]->setVisible(false); separatorAct->setVisible(numRecentFiles > 0); } void MainWindow::createToolBars() { logInfo("MainWindow::createToolBars : creating toolbars"); widgetsToolBar = addToolBar(tr("Widgets")); widgetsToolBar->setObjectName("WidgetsToolBar"); showWidgetsBarAct = new QAction(tr("Show &Widgets Toolbar"), this); showWidgetsBarAct->setStatusTip(tr("Show the widgets toolbar")); connect(showWidgetsBarAct, SIGNAL(triggered()), widgetsToolBar, SLOT(show())); addToolBarBreak(); fileToolBar = addToolBar(tr("File")); fileToolBar->setObjectName("FileToolBar"); showFileBarAct = new QAction(tr("Show &File Toolbar"), this); showFileBarAct->setStatusTip(tr("Show the file toolbar")); connect(showFileBarAct, SIGNAL(triggered()), fileToolBar, SLOT(show())); editToolBar = addToolBar(tr("Edit")); editToolBar->setObjectName("EditToolBar"); showEditBarAct = new QAction(tr("Show &Edit Toolbar"), this); showEditBarAct->setStatusTip(tr("Show scene editing toolbar")); connect(showEditBarAct, SIGNAL(triggered()), editToolBar, SLOT(show())); fileToolBar->addAction(openAct); fileToolBar->addAction(saveAct); fileToolBar->addAction(saveAsAct); fileToolBar->addAction(saveImageAct); fileToolBar->addAction(quickSaveAct); QAction* action; action = qobject_cast(m_viewer->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/monitor.xpm")); action->setStatusTip(tr("Viewer")); widgetsToolBar->addAction(action); action = qobject_cast(m_previewWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/photo.xpm")); action->setStatusTip(tr("Previewer")); widgetsToolBar->addAction(action); action = qobject_cast(m_selectTriangleWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/shape_move_forwards.xpm")); action->setStatusTip(tr("Triangles")); widgetsToolBar->addAction(action); action = qobject_cast(m_variationsWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/table.xpm")); action->setStatusTip(tr("Triangle Variations")); widgetsToolBar->addAction(action); action = qobject_cast(m_colorSettingsWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/color_swatch.xpm")); action->setStatusTip(tr("Triangle Color")); widgetsToolBar->addAction(action); action = qobject_cast(m_imageSettingsWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/images.xpm")); action->setStatusTip(tr("Image Quality")); widgetsToolBar->addAction(action); action = qobject_cast(m_cameraSettingsWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/camera.xpm")); action->setStatusTip(tr("Camera")); widgetsToolBar->addAction(action); action = qobject_cast(m_colorBalanceWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/contrast.xpm")); action->setStatusTip(tr("Color Settings")); widgetsToolBar->addAction(action); action = qobject_cast(m_paletteEditor->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/palette.xpm")); action->setStatusTip(tr("Palettes")); widgetsToolBar->addAction(action); action = qobject_cast(m_mutations->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/application_view_tile.xpm")); action->setStatusTip(tr("Mutations")); widgetsToolBar->addAction(action); action = qobject_cast(m_genomeSelectWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/pictures.xpm")); action->setStatusTip(tr("Genome List")); widgetsToolBar->addAction(action); action = qobject_cast(m_triangleDensityWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/chart_bar.xpm")); action->setStatusTip(tr("Triangle Densities")); widgetsToolBar->addAction(action); action = qobject_cast(m_chaosWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/link.xpm")); action->setStatusTip(tr("Chaos")); widgetsToolBar->addAction(action); action = qobject_cast(m_directoryViewWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/folder_explore.xpm")); action->setStatusTip(tr("Directory Browser")); widgetsToolBar->addAction(action); action = qobject_cast(m_coordsWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/text_columns.xpm")); action->setStatusTip(tr("Triangle Coordinates")); widgetsToolBar->addAction(action); action = qobject_cast(m_sheepLoopWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/film.xpm")); action->setStatusTip(tr("Sheep Loop")); widgetsToolBar->addAction(action); action = qobject_cast(m_scriptEditWidget->parentWidget())->toggleViewAction(); action->setIcon(QIcon(":icons/silk/script.xpm")); action->setStatusTip(tr("Script Editor")); widgetsToolBar->addAction(action); editToolBar->addAction(undoAct); editToolBar->addAction(redoAct); editToolBar->addSeparator(); editToolBar->addAction(cutAct); editToolBar->addAction(copyAct); editToolBar->addAction(pasteAct); editToolBar->addSeparator(); editToolBar->addAction(randomAct); editToolBar->addAction(killAct); } void MainWindow::createStatusBar() { statusBar()->addWidget(&coordsLabel); statusBar()->addPermanentWidget(m_statusWidget); } void MainWindow::readSettings() { logInfo("MainWindow::readSettings : reading settings"); QSettings settings; settings.beginGroup("mainwindow"); lastDir = settings.value("lastdirectory", QDir::homePath()).toString(); if (!restoreGeometry(settings.value("geometry").toByteArray())) { logInfo("MainWindow::readSettings : restoring main window to default geometry"); resize(920, 760); const QRect p( QApplication::desktop()->availableGeometry(this) ); move(p.center() + QPoint(-400, -350)); qobject_cast(m_viewer->parentWidget())->setFloating(true); qobject_cast(m_mutations->parentWidget())->setFloating(true); qobject_cast(m_scriptEditWidget->parentWidget())->setFloating(true); m_viewer->parentWidget()->resize(400, 340); m_viewer->parentWidget()->move(pos() + QPoint(200, 150)); m_mutations->parentWidget()->move(pos() + QPoint(20, 60)); m_scriptEditWidget->parentWidget()->resize(500, 420); m_scriptEditWidget->parentWidget()->move(pos() + QPoint(20, 60)); } else { logInfo("MainWindow::readSettings : restored main window geometry"); } if (!QMainWindow::restoreState(settings.value("state", QByteArray()).toByteArray())) { logInfo("MainWindow::readSettings : restoring main window to default state"); // trick the layout into thinking the previewWidget has something to display QPixmap pix(QSize(160, 130)); pix.fill(QColor(Qt::black)); m_previewWidget->setPixmap(pix); qobject_cast(m_previewWidget->parentWidget())->show(); qobject_cast(m_selectTriangleWidget->parentWidget())->show(); qobject_cast(m_colorSettingsWidget->parentWidget())->show(); } else { logInfo("MainWindow::readSettings : restored main window state"); } logInfo("MainWindow::readSettings : finished"); } void MainWindow::writeSettings() { logInfo("MainWindow::writeSettings : writing settings"); QSettings settings; settings.beginGroup("mainwindow"); settings.setValue("state", saveState()); settings.setValue("geometry", saveGeometry()); settings.setValue("lastdirectory", lastDir); settings.endGroup(); m_xfeditor->writeSettings(); } void MainWindow::setFlameXML(const QString& s) { int ncps = 0; flam3_genome* in; if (s.isEmpty()) in = Util::read_xml_string(DEFAULT_FLAME_XML, &ncps); else in = Util::read_xml_string(s, &ncps); logInfo("MainWindow::setFlameXML : found %d genome", ncps); // Clear the symmetry flag before setting genomes since symmetry is applied // when the file is read. for (int n = 0 ; n < ncps ; n++) in[n].symmetry = 1; genomes.setData(in, ncps); reset(); render(); } void MainWindow::openRecentFile() { QAction* action = qobject_cast(sender()); if (action) { loadFile(action->data().toString()); render(); } } bool MainWindow::loadFile(const QString& fname) { logInfo(QString("MainWindow::loadFile : opening %1").arg(fname)); QFile file(fname); Flam3FileStream s(&file); if (s.read(&genomes)) { logInfo("MainWindow::loadFile : found %d genomes", genomes.size()); setCurrentFile(fname); reset(); emit mainWindowChanged(); return true; } if (m_dialogsEnabled) QMessageBox::warning(this, tr("Application error"), tr("Couldn't open file %1\n").arg(fname)); return false; } bool MainWindow::saveFile(const QString& fname) { QFile file(fname); Flam3FileStream s(&file); if (s.write(&genomes)) { setCurrentFile(fname); statusBar()->showMessage(tr("File saved"), 2000); return true; } if (m_dialogsEnabled) QMessageBox::warning(this, tr("Application error"), tr("Couldn't save file %1\n").arg(fname)); return false; } bool MainWindow::importGenome(const QString& fname) { logInfo(QString("MainWindow::importGenome : opening %1").arg(fname)); int ncps(0); flam3_genome* in; QFile file(fname); Flam3FileStream s(&file); if (s.read(&in, &ncps)) { logInfo(QString("MainWindow::importGenome : found %1 genomes").arg(ncps)); genomes.insertRows(genomes.size(), ncps, in); Flam3FileStream::autoSave(&genomes); emit mainWindowChanged(); return true; } return false; } bool MainWindow::exportGenome(const QString& fname, int index) { QFile file(fname); Flam3FileStream s(&file); logInfo(QString("MainWindow::exportGenome : saving to '%1'").arg(fname)); if (s.write(genomes.data() + index, 1)) { statusBar()->showMessage(tr("File saved"), 2000); return true; } return false; } void MainWindow::setCurrentFile(const QString& fileName) { curFile = fileName; QString shownName; if (curFile.isEmpty()) shownName = tr("untitled.flam3"); else { shownName = strippedName(curFile); if (shownName != "autosave.flam3") { QSettings settings; QStringList files = settings.value("mainwindow/recentfiles").toStringList(); QString filePath(QFileInfo(fileName).absoluteFilePath()); files.removeAll(filePath); files.prepend(filePath); while (files.size() > NumRecentFiles) files.removeLast(); settings.setValue("mainwindow/recentfiles", files); updateRecentFileActions(); } } setWindowTitle(QString("Qosmic - %1[*]").arg(shownName)); } QString MainWindow::strippedName(const QString& fullFileName) { return QFileInfo(fullFileName).fileName(); } MainWindow::~MainWindow() { if (m_fileViewer) delete m_fileViewer; delete m_directoryViewWidget; delete m_mutations; delete m_paletteEditor; delete m_viewer; delete m_xfeditor; delete m_rthread; } void MainWindow::paletteChangedAction() { // copy palette to g.palette m_paletteEditor->getPalette(genomes.selectedGenome()->palette); m_colorSettingsWidget->reset(); m_colorBalanceWidget->reset(); m_xfeditor->colorChangedAction(selectedTriangle->xform()->color); m_genomeSelectWidget->reset(); render(); } void MainWindow::paletteHueChangedAction() { m_paletteEditor->setPalette(genomes.selectedGenome()->palette); m_colorSettingsWidget->reset(); m_xfeditor->colorChangedAction(selectedTriangle->xform()->color); m_genomeSelectWidget->reset(); render(); } void MainWindow::mainViewerResizedAction(const QSize& s) { if (s.isValid()) { logFine(QString("MainWindow::mainViewerResizedAction : new size %1,%2") .arg(s.width()).arg(s.height())); m_rthread->cancel(&m_viewer_request); if (m_rthread->current() == &m_viewer_request) m_rthread->stopRendering(); renderViewer(); } } void MainWindow::previewResizedAction(const QSize& s) { if (s.isValid()) { logFine(QString("MainWindow::previewResizedAction : new size %1,%2") .arg(s.width()).arg(s.height())); renderPreview(); } } void MainWindow::render() { renderPreview(); renderViewer(); } void MainWindow::renderViewer() { if (m_viewer->isVisible()) { flam3_genome* render_genome; if (m_triangleDensityWidget->hasMergedGenome()) render_genome = m_triangleDensityWidget->getMergedGenome(); else render_genome = genomes.selectedGenome(); m_viewer_request.setGenome(render_genome); m_viewer_request.setSize(m_viewer->getViewerSize()); if (m_viewer->isPresetSelected()) { ViewerPresetsModel* model = ViewerPresetsModel::getInstance(); m_viewer_request.setImagePresets(model->preset(m_viewer->presetName())); } else m_viewer_request.setImagePresets(*render_genome); m_rthread->render(&m_viewer_request); } } void MainWindow::renderPreview(int idx) { if (m_previewWidget->isVisible()) { flam3_genome* render_genome; if (idx > -1) render_genome = genomes.data() + idx; else if (m_triangleDensityWidget->hasMergedGenome()) render_genome = m_triangleDensityWidget->getMergedGenome(); else render_genome = genomes.selectedGenome(); m_preview_request.setGenome(render_genome); m_preview_request.setSize(m_previewWidget->getPreviewSize()); if (m_previewWidget->isPresetSelected()) { ViewerPresetsModel* model = ViewerPresetsModel::getInstance(); m_preview_request.setImagePresets(model->preset(m_previewWidget->presetName())); } else m_preview_request.setImagePresets(*render_genome); m_rthread->render(&m_preview_request); } } void MainWindow::randomizeGenomeAction() { int ivar = flam3_variation_random; flam3_genome s; flam3_genome* g = genomes.selectedGenome(); s = *g; // no need to copy xforms flam3_random(g, &ivar, 1, 0, 0); // restore the camera/image settings which flam3_random resets g->width = s.width; g->height = s.height; g->estimator = s.estimator; g->estimator_curve = s.estimator_curve; g->estimator_minimum = s.estimator_minimum; g->sample_density = s.sample_density; g->pixels_per_unit = s.pixels_per_unit; g->spatial_filter_radius = s.spatial_filter_radius; g->nbatches = s.nbatches; g->symmetry = s.symmetry; g->ntemporal_samples = s.ntemporal_samples; m_paletteEditor->setPalette(g->palette); m_xfeditor->reset(); render(); addUndoState(); } void MainWindow::flam3FileSelectAction(const QString& name) { if (loadFile(name)) render(); } void MainWindow::flam3FileAppendAction(const QString& name) { if (importGenome(name)) render(); } void MainWindow::mutationSelectedSlot(flam3_genome* newg) { flam3_genome* g = genomes.selectedGenome(); flam3_copy(g, newg); reset(); render(); addUndoState(); } void MainWindow::reset() { logFine("MainWindow::reset : resetting genome selector"); m_genomeSelectWidget->reset(); // the colorsettings and variations are updated when a triangle is selected logFine("MainWindow::reset : resetting figure editor"); m_xfeditor->reset(); logFine("MainWindow::reset : resetting palettes"); m_paletteEditor->setPalette(genomes.selectedGenome()->palette); logFine("MainWindow::reset : resetting color balance"); m_colorBalanceWidget->reset(); logFine("MainWindow::reset : resetting image settings"); m_imageSettingsWidget->reset(); logFine("MainWindow::reset : resetting sheep-loop settings"); m_sheepLoopWidget->reset(); logFine("MainWindow::reset : resetting camera settings"); m_cameraSettingsWidget->reset(); } void MainWindow::scriptFinishedSlot() { // make sure there is something to reset, scripts can do wacky things if (genomes.size() < 1) newFile(); else reset(); } GenomeVector* MainWindow::genomeVector() { return &genomes; } FigureEditor* MainWindow::xformEditor() const { return m_xfeditor; } bool MainWindow::dialogsEnabled() const { return m_dialogsEnabled; } void MainWindow::setDialogsEnabled(bool value) { m_dialogsEnabled = value; } void MainWindow::genomesModifiedSlot() { logFine("MainWindow::genomesModifiedSlot : enter"); genomeSelectedSlot(genomes.selected()); } void MainWindow::genomeSelectedSlot(int /*idx*/) { reset(); render(); } void MainWindow::presetSelectedSlot() { logFine("MainWindow::presetSelectedSlot : applying preset"); m_imageSettingsWidget->reset(); m_cameraSettingsWidget->reset(); m_colorBalanceWidget->reset(); renderPreview(); if (!m_viewer->isPresetSelected()) renderViewer(); } RenderThread* MainWindow::renderThread() const { return m_rthread; } void MainWindow::mainViewerHiddenAction() { // stop rendering the mainviewer if it's waiting for an image. if (m_rthread->isRendering() && m_rthread->current() == &m_viewer_request) m_rthread->stopRendering(); } bool MainWindow::eventFilter(QObject* /*obj*/, QEvent* event) { if (event->type() == QEvent::KeyPress) { QKeyEvent* ev = static_cast(event); int key = ev->key(); if (key == Qt::Key_Space && (ev->modifiers() & Qt::ControlModifier) ) { addUndoState(); return true; } if (key >= Qt::Key_0 && key <= Qt::Key_9 && (ev->modifiers() & Qt::AltModifier)) { int idx = key - Qt::Key_0 - 1 ; if (idx < 0) idx = 9; m_xfeditor->selectTriangle(idx); return true; } } return false; } void MainWindow::kill() { if (m_scriptEditWidget->isScriptRunning()) m_scriptEditWidget->stopScript(); m_rthread->killAll(); } void MainWindow::provideState(UndoState*) { } void MainWindow::restoreState(UndoState*) { logFine("MainWindow::restoreState : resetting widgets"); m_paletteEditor->setPalette(genomes.selectedGenome()->palette); m_colorBalanceWidget->reset(); m_imageSettingsWidget->reset(); m_sheepLoopWidget->reset(); m_cameraSettingsWidget->reset(); m_modeSelectorWidget->reset(); render(); genomes.updateSelectedPreview(); } void MainWindow::undo() { QString message; if (genomes.undo()) { UndoRing* ring = genomes.undoRing(); message = tr("undo %1/%2").arg(ring->index()).arg(ring->size()); } else message = tr("last undo"); statusBar()->showMessage(message, 1000); } void MainWindow::redo() { QString message; if (genomes.redo()) { UndoRing* ring = genomes.undoRing(); message = tr("redo %1/%2").arg(ring->index()).arg(ring->size()); } else message = tr("last redo"); statusBar()->showMessage(message, 1000); } void MainWindow::addUndoState() { logFine(QString("MainWindow::addUndoState : adding")); genomes.addUndoState(); genomes.updateSelectedPreview(); Flam3FileStream::autoSave(&genomes); } void MainWindow::runSheepLoop(bool flag) { static bool run_sequence; // signal this routine to start/stop sequence if (!m_previewWidget->isVisible()) return; if (flag) { int dncp = 0; flam3_genome* sheep = m_sheepLoopWidget->createSheepLoop(dncp); if (sheep != NULL) { // resize the request list if neccessary while (m_sheep_requests.size() > dncp) delete m_sheep_requests.takeLast(); run_sequence = true; for (int i = 0 ; run_sequence && i < dncp ; i++) { // find a render request RenderRequest* request; if (i < m_sheep_requests.size()) request = m_sheep_requests.at(i); else { request = new RenderRequest(); request->setType(RenderRequest::Queued); request->setName(QString(m_sheep_reqname + " %1").arg(i)); m_sheep_requests.append(request); } // and send it to the renderthread request->setGenome(sheep); request->setTime(i); request->setNumGenomes(dncp); request->setSize(m_previewWidget->getPreviewSize()); m_rthread->render(request); } } } else { run_sequence = false; m_rthread->killAll(); } } void MainWindow::saveSheepLoop() { int dncp = 0; flam3_genome* sheep = m_sheepLoopWidget->createSheepLoop(dncp); if (sheep != NULL) { QFileDialog dialog(this, tr("Save a sheep"), lastDir, tr("flam3 xml (*.flam *.flam3 *.flame);;All files (*)")); FlamFileIconProvider p; dialog.setIconProvider(&p); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setDefaultSuffix("flam3"); if (dialog.exec()) { QString fileName(dialog.selectedFiles().first()); lastDir = QFileInfo(fileName).dir().canonicalPath(); QFile file(fileName); Flam3FileStream s(&file); if (s.write(sheep, dncp)) statusBar()->showMessage(tr("File saved"), 2000); } } } template <> MainWindow* QosmicWidget::getWidget() const { return dynamic_cast(widgets["MainWindow"]); } qosmic-1.6.0/src/mainwindow.h000066400000000000000000000144671304321135200161330ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include "ui_mainwindow.h" #include "renderthread.h" #include "mainviewer.h" #include "mutationwidget.h" #include "camerasettingswidget.h" #include "colorsettingswidget.h" #include "colorbalancewidget.h" #include "imgsettingswidget.h" #include "trianglecoordswidget.h" #include "triangledensitywidget.h" #include "mainpreviewwidget.h" #include "variationswidget.h" #include "chaoswidget.h" #include "directoryviewwidget.h" #include "statuswidget.h" #include "scripteditwidget.h" #include "paletteeditor.h" #include "selectgenomewidget.h" #include "selecttrianglewidget.h" #include "adjustscenewidget.h" #include "editmodeselectorwidget.h" #include "sheeploopwidget.h" #include "xfedit.h" class MainWindow : public QMainWindow, public UndoStateProvider, public QosmicWidget, private Ui::MainWindow { Q_OBJECT public: MainWindow(); ~MainWindow(); GenomeVector* genomeVector(); FigureEditor* xformEditor() const; RenderThread* renderThread() const; void setCurrentFile(const QString &fileName); void setFlameXML(const QString& =QString()); void reset(); void setDialogsEnabled(bool); bool dialogsEnabled() const; void showMainViewer(QString file); bool eventFilter(QObject*, QEvent*); bool importGenome(const QString&); bool exportGenome(const QString&, int); void provideState(UndoState*); void restoreState(UndoState*); public slots: void render(); void renderPreview(int =-1); void renderViewer(); void flameRenderedSlot(RenderEvent* e); void triangleSelectedSlot(Triangle*); void updateStatus(double, double); bool loadFile(const QString& filename); bool saveFile(const QString& fileName); void paletteChangedAction(); void paletteHueChangedAction(); void randomizeGenomeAction(); void mutationSelectedSlot(flam3_genome*); void flam3FileSelectAction(const QString&); void flam3FileAppendAction(const QString&); bool saveImage(const QString& =QString(), int =-1); bool save(); void open(); bool saveAs(); bool quickSave(); void genomeSelectedSlot(int); void genomesModifiedSlot(); void presetSelectedSlot(); void scriptFinishedSlot(); void importAction(); void exportAction(); void runSheepLoop(bool); void saveSheepLoop(); signals: void mainWindowChanged(); protected: void closeEvent(QCloseEvent*); void showEvent(QShowEvent*); private slots: void newFile(); void about(); void mainViewerResizedAction(const QSize&); void previewResizedAction(const QSize&); void openRecentFile(); void mainViewerHiddenAction(); void addUndoState(); void undo(); void redo(); void kill(); private: void createActions(); void createMenus(); void createToolBars(); void createStatusBar(); void readSettings(); void writeSettings(); QString strippedName(const QString&); void updateRecentFileActions(); void setUndoState(UndoState*); protected: GenomeVector genomes; RenderRequest m_preview_request; RenderRequest m_viewer_request; RenderRequest m_file_request; RenderRequestList m_sheep_requests; QString m_sheep_reqname; bool m_dialogsEnabled; FigureEditor* m_xfeditor; RenderThread* m_rthread; MainViewer* m_viewer; MutationWidget* m_mutations; CameraSettingsWidget* m_cameraSettingsWidget; ColorSettingsWidget* m_colorSettingsWidget; ColorBalanceWidget* m_colorBalanceWidget; ImageSettingsWidget* m_imageSettingsWidget; SheepLoopWidget* m_sheepLoopWidget; TriangleCoordsWidget* m_coordsWidget; TriangleDensityWidget* m_triangleDensityWidget; MainPreviewWidget* m_previewWidget; VariationsWidget* m_variationsWidget; ChaosWidget* m_chaosWidget; DirectoryViewWidget* m_directoryViewWidget; StatusWidget* m_statusWidget; ScriptEditWidget* m_scriptEditWidget; Triangle* selectedTriangle; Triangle* lastSelected; MainViewer* m_fileViewer; PaletteEditor* m_paletteEditor; SelectGenomeWidget* m_genomeSelectWidget; SelectTriangleWidget* m_selectTriangleWidget; AdjustSceneWidget* m_adjustSceneWidget; EditModeSelectorWidget* m_modeSelectorWidget; QList m_dockWidgets; private: QString curFile; QString lastDir; QLabel coordsLabel; QMenu* fileMenu; QMenu* editMenu; QMenu* helpMenu; QMenu* settingsMenu; QToolBar* fileToolBar; QToolBar* editToolBar; QToolBar* widgetsToolBar; QAction* newAct; QAction* openAct; QAction* saveAct; QAction* saveAsAct; QAction* saveImageAct; QAction* quickSaveAct; QAction* openViewerAct; QAction* exitAct; QAction* killAct; QAction* randomAct; QAction* rescaleAct; QAction* paletteAct; QAction* aboutAct; QAction* aboutQtAct; QAction* openMutationsAct; QAction* showFileBarAct; QAction* showEditBarAct; QAction* showWidgetsBarAct; QAction* separatorAct; QAction* undoAct; QAction* redoAct; QAction* cutAct; QAction* copyAct; QAction* pasteAct; QAction* importAct; QAction* exportAct; QAction* selPrevAct; QAction* selNextAct; QAction* scaleInAct; QAction* scaleOutAct; enum { NumRecentFiles = 5 }; QAction* recentFileActions[NumRecentFiles]; }; #endif qosmic-1.6.0/src/mutationwidget.cpp000066400000000000000000000516101304321135200173450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include #include #include "mutationwidget.h" #include "viewerpresetsmodel.h" #include "logger.h" MutationWidget::MutationWidget(GenomeVector* gen, RenderThread* t, QWidget* parent) : QWidget(parent), genome_offset(0), labels_size(82,68), mutation_speed(0.1), mutateA_start(0), mutateB_start(0), genome(gen), rthread(t) { setupUi(this); labels << label_a1 << label_a2 << label_a3 // labels are defined in the .ui file << label_a4 << label_a5 << label_a6 << label_a7 << label_a8 << label_b1 << label_b2 << label_b3 << label_b4 << label_b5 << label_b6 << label_b7 << label_b8 << label_c11 << label_c12 << label_c13 << label_c21 << label_c22 << label_c23 << label_c31 << label_c32 << label_c33 << label_c41 << label_c42 << label_c43 << label_c51 << label_c52 << label_c53 << label_c61 << label_c62 << label_c63 << label_c71 << label_c72 << label_c73 << label_c81 << label_c82 << label_c83; label_a1->setToolTip(tr("genome A")); label_b1->setToolTip(tr("genome B")); ViewerPresetsModel* presets = ViewerPresetsModel::getInstance(); QSettings s; s.beginGroup("mutationwidget"); labels_size = s.value("labelsize", labels_size).toSize(); mutation_speed = s.value("speed", mutation_speed).toReal(); quality_preset = s.value("preset", presets->presetNames().first()).toString(); s.endGroup(); QList colors; colors << Qt::red << QColor(255, 128, 0) << Qt::yellow << Qt::green << Qt::blue << Qt::magenta << Qt::gray; for ( int n = 0 ; n < 40 ; n++) { flam3_genome* g = new flam3_genome(); mutations << g; labels[n]->setGenome(g); labels[n]->setMinimumSize(labels_size); labels[n]->setMaximumSize(labels_size); labels[n]->setFrameStyle(QFrame::NoFrame | QFrame::Plain); if (n > 0 && n < 16) { if (n < 8) { MutationPreviewWidget* p = labels[n % 8]; p->setFrameEdge(MutationPreviewWidget::LEFT); p->setFrameColor(colors[(n + 6) % 7]); } else if (n > 8) { MutationPreviewWidget* p = labels[n % 16]; p->setFrameEdge(MutationPreviewWidget::RIGHT); p->setFrameColor(colors[(n + 5) % 7]); } } RenderRequest* r = new RenderRequest(genome->data(), labels_size, tr("mutation %1").arg(n + 1), RenderRequest::Queued); requests << r; connect(labels[n], SIGNAL(mutationASelected(MutationPreviewWidget*)), this, SLOT(mutationASelectedAction(MutationPreviewWidget*))); connect(labels[n], SIGNAL(mutationBSelected(MutationPreviewWidget*)), this, SLOT(mutationBSelectedAction(MutationPreviewWidget*))); connect(labels[n], SIGNAL(genomeSelected(MutationPreviewWidget*)), this, SLOT(genomeSelectedAction(MutationPreviewWidget*))); } aComboBox->setModel(genome); bComboBox->setModel(genome); qobject_cast(aComboBox->view())->setSpacing(2); qobject_cast(bComboBox->view())->setSpacing(2); connect(aComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectorAIndexChangedSlot(int))); connect(bComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectorBIndexChangedSlot(int))); connect(labels[0], SIGNAL(genomeDropped(int)), this, SLOT(selectorAIndexChangedSlot(int))); connect(labels[8], SIGNAL(genomeDropped(int)), this, SLOT(selectorBIndexChangedSlot(int))); connect(aUpButton, SIGNAL(clicked()), this, SLOT(rotateAMutationsUp())); connect(aDownButton, SIGNAL(clicked()), this, SLOT(rotateAMutationsDown())); connect(bUpButton, SIGNAL(clicked()), this, SLOT(rotateBMutationsUp())); connect(bDownButton, SIGNAL(clicked()), this, SLOT(rotateBMutationsDown())); connect(rthread, SIGNAL(flameRendered(RenderEvent*)), this, SLOT(flameRenderedAction(RenderEvent*))); connect(configButton, SIGNAL(clicked()), this, SLOT(showConfigDialog())); connect(regenButton, SIGNAL(clicked()), this, SLOT(mutate())); } void MutationWidget::showConfigDialog() { MutationConfigDialog d(this); d.setPreviewSize(labels_size); d.setSpeed(mutation_speed); d.setPreset(quality_preset); d.move(QCursor::pos()); d.exec(); QSize s = d.previewSize(); qreal speed = d.speed(); QString preset = d.preset(); bool render = false; if (speed != mutation_speed) { mutation_speed = speed; QSettings().setValue("mutationwidget/speed", mutation_speed); } if (s != labels_size) { labels_size = s; QSettings().setValue("mutationwidget/labelsize", labels_size); foreach (MutationPreviewWidget* p, labels) { p->setMinimumSize(labels_size); p->setMaximumSize(labels_size); } render = true; } if (preset != quality_preset) { quality_preset = preset; QSettings().setValue("mutationwidget/preset", quality_preset); ViewerPresetsModel* presets = ViewerPresetsModel::getInstance(); foreach (MutationPreviewWidget* p, labels) presets->applyPreset(quality_preset, p->genome()); render = true; } if (render) { cancelRequests(); foreach (RenderRequest* r, requests) { r->setSize(labels_size); rthread->render(r); } } } void MutationWidget::rotateAMutationsUp() { mutateA_start = (mutateA_start + 1) % 7; logInfo("MutationWidget::rotateAMutationsUp : mutateA_start %d", mutateA_start); flam3_genome tmp_genome = flam3_genome(); QList::iterator i = labels.begin() + 1; QList::iterator e = labels.begin() + 8; flam3_copy(&tmp_genome, (*i)->genome()); QPixmap tmp_pixmap(*((*i)->pixmap())); QString tmp_tip((*i)->toolTip()); QColor tmp_color((*i)->frameColor()); while (++i != e) { QList::iterator p = i - 1; flam3_copy((*p)->genome(), (*i)->genome()); (*p)->setPixmap(*((*i)->pixmap())); (*p)->setToolTip((*i)->toolTip()); (*p)->setFrameColor((*i)->frameColor()); (*p)->update(); } e--; flam3_copy((*e)->genome(), &tmp_genome); (*e)->setPixmap(tmp_pixmap); (*e)->setToolTip(tmp_tip); (*e)->setFrameColor(tmp_color); (*e)->update(); cancelRequests(); cross(); } void MutationWidget::rotateAMutationsDown() { mutateA_start = (mutateA_start + 6) % 7; logInfo("MutationWidget::rotateAMutationsUp : mutateA_start %d", mutateA_start); flam3_genome tmp_genome = flam3_genome(); QList::iterator i = labels.begin() + 7; QList::iterator e = labels.begin() + 0; flam3_copy(&tmp_genome, (*i)->genome()); QPixmap tmp_pixmap(*((*i)->pixmap())); QString tmp_tip((*i)->toolTip()); QColor tmp_color((*i)->frameColor()); while (--i != e) { QList::iterator p = i + 1; flam3_copy((*p)->genome(), (*i)->genome()); (*p)->setPixmap(*((*i)->pixmap())); (*p)->setToolTip((*i)->toolTip()); (*p)->setFrameColor((*i)->frameColor()); (*p)->update(); } e++; flam3_copy((*e)->genome(), &tmp_genome); (*e)->setPixmap(tmp_pixmap); (*e)->setToolTip(tmp_tip); (*e)->setFrameColor(tmp_color); (*e)->update(); cancelRequests(); cross(); } void MutationWidget::rotateBMutationsUp() { mutateB_start = (mutateB_start + 1) % 7; flam3_genome tmp_genome = flam3_genome(); QList::iterator i = labels.begin() + 9; QList::iterator e = labels.begin() + 16; flam3_copy(&tmp_genome, (*i)->genome()); QPixmap tmp_pixmap(*((*i)->pixmap())); QString tmp_tip((*i)->toolTip()); QColor tmp_color((*i)->frameColor()); while (++i != e) { QList::iterator p = i - 1; flam3_copy((*p)->genome(), (*i)->genome()); (*p)->setPixmap(*((*i)->pixmap())); (*p)->setToolTip((*i)->toolTip()); (*p)->setFrameColor((*i)->frameColor()); (*p)->update(); } e--; flam3_copy((*e)->genome(), &tmp_genome); (*e)->setPixmap(tmp_pixmap); (*e)->setToolTip(tmp_tip); (*e)->setFrameColor(tmp_color); (*e)->update(); cancelRequests(); cross(); } void MutationWidget::rotateBMutationsDown() { mutateB_start = (mutateB_start + 6) % 7; flam3_genome tmp_genome = flam3_genome(); QList::iterator i = labels.begin() + 15; QList::iterator e = labels.begin() + 8; flam3_copy(&tmp_genome, (*i)->genome()); QPixmap tmp_pixmap(*((*i)->pixmap())); QString tmp_tip((*i)->toolTip()); QColor tmp_color((*i)->frameColor()); while (--i != e) { QList::iterator p = i + 1; flam3_copy((*p)->genome(), (*i)->genome()); (*p)->setPixmap(*((*i)->pixmap())); (*p)->setToolTip((*i)->toolTip()); (*p)->setFrameColor((*i)->frameColor()); (*p)->update(); } e++; flam3_copy((*e)->genome(), &tmp_genome); (*e)->setPixmap(tmp_pixmap); (*e)->setToolTip(tmp_tip); (*e)->setFrameColor(tmp_color); (*e)->update(); cancelRequests(); cross(); } void MutationWidget::selectorAIndexChangedSlot(int idx) { if (!isVisible()) return; int idx_a = qMax(0, idx); if (idx_a != aComboBox->currentIndex()) { aComboBox->blockSignals(true); aComboBox->setCurrentIndex(idx_a); aComboBox->blockSignals(false); } flam3_genome* genome_a = genome->data() + idx_a; if (genome_a->num_xforms > 0) { logFine(QString("MutationWidget::selectorAIndexChangedSlot : genome_a has %1 xforms").arg(genome_a->num_xforms)); flam3_copy(mutations[0], genome_a); ViewerPresetsModel::getInstance()->applyPreset(quality_preset, mutations[0]); labels[0]->setGenome(mutations[0]); requests[0]->setGenome(mutations.at(0)); } cancelRequests(); mutateAB('a'); cross(); } void MutationWidget::selectorBIndexChangedSlot(int idx) { if (!isVisible()) return; int idx_b = qMax(0, idx); if (idx_b != bComboBox->currentIndex()) { bComboBox->blockSignals(true); bComboBox->setCurrentIndex(idx_b); bComboBox->blockSignals(false); } flam3_genome* genome_b = genome->data() + idx_b; if (genome_b->num_xforms > 0) { logFine(QString("MutationWidget::selectorBIndexChangedSlot : genome_b has %1 xforms").arg(genome_b->num_xforms)); flam3_copy(mutations[8], genome_b); ViewerPresetsModel::getInstance()->applyPreset(quality_preset, mutations[8]); labels[8]->setGenome(mutations[8]); requests[8]->setGenome(mutations.at(8)); } cancelRequests(); mutateAB('b'); cross(); } void MutationWidget::genomeSelectedAction(MutationPreviewWidget* ptr) { int idx = mutations.indexOf(ptr->genome(),0); logFine(QString("MutationWidget::genomeSelectedAction : genome %1 selected").arg(idx)); if (idx >= 0) emit genomeSelected(mutations[idx]); } void MutationWidget::mutationASelectedAction(MutationPreviewWidget* ptr) { if (ptr) { int idx = mutations.indexOf(ptr->genome(), 0); logFine(QString("MutationWidget::mutationASelectedAction : mutating %1").arg(idx)); if (idx == -1) reset(); else { if (idx > 0) { mutations.swap(idx, 0); labels[0]->setGenome(ptr->genome()); } cancelRequests(); mutateAB('a'); cross(); } } else reset(); } void MutationWidget::mutationBSelectedAction(MutationPreviewWidget* ptr) { if (ptr) { int idx = mutations.indexOf(ptr->genome(), 0); logFine(QString("MutationWidget::mutationBSelectedAction : mutating %1").arg(idx)); if (idx == -1) reset(); else { if (idx >= 0) { mutations.swap(idx, 8); labels[8]->setGenome(ptr->genome()); } cancelRequests(); mutateAB('b'); cross(); } } else reset(); } void MutationWidget::flameRenderedAction(RenderEvent* e) { RenderRequest* req = e->request(); if (!(req->type() == RenderRequest::Queued && requests.contains(req)) ) return; int idx = requests.indexOf(req, 0); logFine(QString("MutationWidget::flameRenderedAction : setting genome %1,g=0x%2,req=0x%3") .arg(idx).arg((long)req->genome(),0,16).arg((long)req,0,16)); labels[idx]->setGenome(req->genome()); labels[idx]->setPixmap(QPixmap::fromImage(req->image())); e->accept(); } void MutationWidget::showEvent(QShowEvent* e) { if (!e->spontaneous()) { logFine(QString("MutationWidget::showEvent : resetting")); reset(); } } #define genome_ptr (genome->selectedGenome()) void MutationWidget::cancelRequests() { rthread->running_mutex.lock(); foreach (RenderRequest* req, requests) { if (!req->finished()) rthread->cancel(req); } rthread->running_mutex.unlock(); } void MutationWidget::mutateAB(char ab='a') { flam3_genome tmp_genome = flam3_genome(); int variations[flam3_nvariations] = { flam3_variation_random }; int nvars = 1; int symmetry = 0; double speed = mutation_speed; int mutate_mode = mutateA_start; int mutate_idx = 0; int start_idx = 0; int end_idx = 8; if (ab == 'b') { start_idx = 8; end_idx = 16; mutate_mode = mutateB_start; } for ( int n = start_idx ; n < end_idx ; n++ ) { flam3_genome* g = mutations.at(n); if ( (n % 8) == 0 ) { logFine(QString("MutationWidget::mutateAB : rendering genome %1").arg(n)); mutate_idx = n; } else { logFine(QString("MutationWidget::mutateAB : mutating %1 -> %2 mode %3").arg(mutate_idx).arg(n).arg(mutate_mode)); flam3_copy(&tmp_genome, mutations.at(mutate_idx)); // flam3_mutate() calls add_to_action() which needs this size char[] char modstr[flam3_max_action_length] = ""; flam3_mutate(&tmp_genome, (mutate_mode++ % 7), variations, nvars, symmetry, speed, Util::get_isaac_randctx(), modstr); if (tmp_genome.num_xforms > 0) { flam3_copy(g, &tmp_genome); // apply any symmetry set by the mutation flam3_add_symmetry(g, tmp_genome.symmetry); g->symmetry = 1; labels[n]->setToolTip(QString(modstr)); logFine(QString("MutationWidget::mutateAB : modstr '%1'").arg(QString(modstr))); } else logWarn("MutationWidget::mutateAB : zero xforms in mutation"); } RenderRequest* req = requests.at(n); req->setGenome(g); rthread->render(req); } clear_cp(&tmp_genome, flam3_defaults_on); } void MutationWidget::cross() { flam3_genome tmp_genome = flam3_genome(); for ( int n = 16, k = 0 ; n < 40 ; n += 3, k++ ) { for ( int j = 0 ; j < 3 ; j++) { flam3_genome* g = mutations.at(n + j); flam3_genome* a = mutations.at(n - 16 - 2*k); flam3_genome* b = mutations.at(n - 8 - 2*k); char modstr[flam3_max_action_length] = ""; logFine(QString("MutationWidget::cross : crossing %1 and %2 -> %3 mode %4").arg(n - 16 - 2*k).arg(n - 8 - 2*k).arg(n + j).arg(j)); flam3_cross(a, b, &tmp_genome, j, Util::get_isaac_randctx(), modstr); if (tmp_genome.num_xforms > 0) { flam3_copy(g, &tmp_genome); // apply any symmetry set by the mutation flam3_add_symmetry(g, tmp_genome.symmetry); g->symmetry = 1; labels[n + j]->setToolTip(QString(modstr)); logFine(QString("MutationWidget::cross : modstr '%1'").arg(QString(modstr))); } else logWarn("MutationWidget::cross : zero xforms in cross"); RenderRequest* req = requests.at(n + j); req->setGenome(g); rthread->render(req); } } clear_cp(&tmp_genome, flam3_defaults_on); } void MutationWidget::mutate() { cancelRequests(); mutateAB('a'); mutateAB('b'); cross(); } void MutationWidget::reset() { if (!isVisible()) return; logFine("MutationWidget::reset : "); int idx_a = qMax(0, aComboBox->currentIndex()); int idx_b = qMax(0, bComboBox->currentIndex()); flam3_genome* genome_a = genome->data() + idx_a; flam3_genome* genome_b = genome->data() + idx_b; bool init_a = (mutations[0]->num_xforms < 1) && (genome_a->num_xforms > 0); bool init_b = (mutations[8]->num_xforms < 1) && (genome_b->num_xforms > 0); if (init_a) { logFine(QString("MutationWidget::reset : genome_a has %1 xforms").arg(genome_a->num_xforms)); flam3_copy(mutations[0], genome_a); ViewerPresetsModel::getInstance()->applyPreset(quality_preset, mutations[0]); labels[0]->setGenome(mutations[0]); requests[0]->setGenome(mutations.at(0)); } if (init_b) { logFine(QString("MutationWidget::reset : genome_b has %1 xforms").arg(genome_b->num_xforms)); flam3_copy(mutations[8], genome_b); ViewerPresetsModel::getInstance()->applyPreset(quality_preset, mutations[8]); labels[8]->setGenome(mutations[8]); requests[8]->setGenome(mutations.at(8)); } if (init_a || init_b) mutate(); } //------------------------------------------------------------------------------ MutationPreviewWidget::MutationPreviewWidget(QWidget* parent) : QLabel(parent), frame_edge(NONE) { } void MutationPreviewWidget::mousePressEvent(QMouseEvent* e) { if (e->button() == Qt::LeftButton) dragStartPosition = e->pos(); emit previewClicked(this, e); } void MutationPreviewWidget::mouseMoveEvent(QMouseEvent* e) { if (!(e->buttons() & Qt::LeftButton)) return; if ((e->pos() - dragStartPosition).manhattanLength() < QApplication::startDragDistance()) return; QDrag* drag = new QDrag(this); QMimeData* mimeData = new QMimeData; mimeData->setData("application/x-mutationpreviewwidget", QByteArray()); drag->setMimeData(mimeData); drag->setPixmap(*pixmap()); drag->exec(Qt::CopyAction | Qt::MoveAction); } void MutationPreviewWidget::mouseReleaseEvent(QMouseEvent* e) { if (e->button() == Qt::LeftButton) { if ((e->pos() - dragStartPosition).manhattanLength() < QApplication::startDragDistance()) emit mutationASelected(this); } else if (e->button() == Qt::RightButton) emit mutationBSelected(this); else emit genomeSelected(this); } flam3_genome* MutationPreviewWidget::genome() { return g; } void MutationPreviewWidget::setGenome(flam3_genome* gen) { g = gen; } void MutationPreviewWidget::dragEnterEvent(QDragEnterEvent* event) { if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) event->acceptProposedAction(); else if ((event->source() != this) && event->mimeData()->hasFormat("application/x-mutationpreviewwidget")) event->acceptProposedAction(); } void MutationPreviewWidget::dropEvent(QDropEvent* event) { if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) { int genome_idx = event->mimeData()->data("application/x-qabstractitemmodeldatalist").toInt(); emit genomeDropped(genome_idx); event->acceptProposedAction(); } else if ((event->source() != this) && event->mimeData()->hasFormat("application/x-mutationpreviewwidget")) { if (objectName() == "label_a1") emit mutationASelected(qobject_cast(event->source())); else emit mutationBSelected(qobject_cast(event->source())); event->acceptProposedAction(); } } void MutationPreviewWidget::setFrameColor(const QColor& c) { frame_color = c; } QColor MutationPreviewWidget::frameColor() const { return frame_color; } void MutationPreviewWidget::setFrameEdge(MutationPreviewWidget::Edge e) { frame_edge = e; } MutationPreviewWidget::Edge MutationPreviewWidget::frameEdge() const { return frame_edge; } void MutationPreviewWidget::paintEvent(QPaintEvent* /*event*/) { QPainter p(this); const QPixmap* pix = pixmap(); if (pix) { p.drawPixmap(0, 0, *pix); if (frame_edge == LEFT) { int fh = frameGeometry().height() - 1; p.setPen(frame_color); p.drawLine(0, 0, 0, fh); p.drawLine(1, 0, 1, fh); } else if (frame_edge == RIGHT) { int rhs = frameGeometry().width() - 1; int fh = frameGeometry().height() - 1; p.setPen(frame_color); p.drawLine(rhs - 1, 0, rhs - 1, fh); p.drawLine(rhs, 0, rhs, fh); } } } //------------------------------------------------------------------------------------------- MutationConfigDialog::MutationConfigDialog(QWidget* parent) : QDialog(parent) { setupUi(this); qualityComboBox->setModel(ViewerPresetsModel::getInstance()); } void MutationConfigDialog::setPreviewSize(const QSize& size) { sizewLineEdit->updateValue(size.width()); sizehLineEdit->updateValue(size.height()); } QSize MutationConfigDialog::previewSize() const { return QSize(sizewLineEdit->value(), sizehLineEdit->value()); } void MutationConfigDialog::setSpeed(const qreal value) { speedEditor->setValue(value); } qreal MutationConfigDialog::speed() const { return speedEditor->value(); } QString MutationConfigDialog::preset() const { return qualityComboBox->currentText(); } void MutationConfigDialog::setPreset(const QString& s) { qualityComboBox->setCurrentIndex(qualityComboBox->findText(s)); } qosmic-1.6.0/src/mutationwidget.h000066400000000000000000000076211304321135200170150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef MUTATIONWIDGET_H #define MUTATIONWIDGET_H #include #include #include #include #include "genomevector.h" #include "renderthread.h" #include "flam3util.h" class MutationPreviewWidget; class MutationPreviewWidget : public QLabel { Q_OBJECT public: enum Edge { NONE, LEFT, RIGHT }; MutationPreviewWidget(QWidget* parent=0); void setGenome(flam3_genome*); void setFrameColor(const QColor&); QColor frameColor() const; void setFrameEdge(Edge); Edge frameEdge() const; flam3_genome* genome(); signals: void previewClicked(MutationPreviewWidget*, QMouseEvent*); void mutationASelected(MutationPreviewWidget*); void mutationBSelected(MutationPreviewWidget*); void genomeSelected(MutationPreviewWidget*); void genomeDropped(int); protected: void dragEnterEvent(QDragEnterEvent*); void dropEvent(QDropEvent*); void mousePressEvent(QMouseEvent*); void mouseMoveEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); void paintEvent(QPaintEvent*); private: flam3_genome* g; QPoint dragStartPosition; QColor frame_color; Edge frame_edge; }; #include "ui_mutationwidget.h" class MutationWidget : public QWidget, private Ui::MutationWidget { Q_OBJECT public: MutationWidget(GenomeVector*, RenderThread*, QWidget* parent=0); public slots: void mutationASelectedAction(MutationPreviewWidget*); void mutationBSelectedAction(MutationPreviewWidget*); void genomeSelectedAction(MutationPreviewWidget*); void reset(); protected: void showEvent(QShowEvent*); void cancelRequests(); void mutateAB(char); void cross(); protected slots: void flameRenderedAction(RenderEvent*); void selectorAIndexChangedSlot(int); void selectorBIndexChangedSlot(int); void rotateAMutationsUp(); void rotateAMutationsDown(); void rotateBMutationsUp(); void rotateBMutationsDown(); void showConfigDialog(); void mutate(); signals: void genomeSelected(flam3_genome*); private: int genome_offset; QSize labels_size; qreal mutation_speed; int mutateA_start; int mutateB_start; QString quality_preset; GenomeVector* genome; RenderThread* rthread; QList labels; QList mutations; QList requests; }; #include "ui_mutationconfigdialog.h" class MutationConfigDialog : public QDialog, private Ui::MutationConfigDialog { Q_OBJECT public: MutationConfigDialog(QWidget* parent=0); void setPreviewSize(const QSize& size); QSize previewSize() const; void setSpeed(const qreal); qreal speed() const; void setPreset(const QString &s); QString preset() const; }; #endif qosmic-1.6.0/src/nodeitem.cpp000066400000000000000000000064461304321135200161140ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "nodeitem.h" #include "logger.h" NodeItem::NodeItem( QGraphicsScene* c, Triangle* t, int id, const char* n ) : canvas(c), edges(t), m_name(n), m_index(id) { setRect(-4., -4., 8., 8.); setZValue( 0 ); QGraphicsEllipseItem::setPen(QPen(Qt::gray)); m_boundingRect = QRectF(-10.,-10.,20.,20.); label = new QGraphicsSimpleTextItem(m_name); label->setBrush(QBrush(Qt::gray)); label->setZValue(0); label->moveBy(-15., 3.); canvas->addItem(this); canvas->addItem(label); setAcceptHoverEvents(true); } NodeItem::~NodeItem() { canvas->removeItem(label); delete label; } QRectF NodeItem::boundingRect() { return m_boundingRect; } void NodeItem::setTriangle(Triangle* e) { edges = e; } Triangle* NodeItem::triangle() { return edges; } void NodeItem::setPos(const QPointF& p) { QGraphicsEllipseItem::setPos(p); label->setPos(p); label->moveBy(-15., 3.); } void NodeItem::setPen(const QPen& ppen, const QPen& lpen) { QGraphicsEllipseItem::setPen(ppen); label->setBrush(lpen.color()); } /** * This one is called by its Triangle */ void NodeItem::movePoint(double dx, double dy) { logFinest(QString("NodeItem::movePoint : %1 (%2, %3)") .arg(m_name).arg(dx).arg(dy)); QGraphicsEllipseItem::moveBy(dx, dy); label->moveBy(dx, dy); } /** * This one is called by the FigureEditor */ void NodeItem::moveBy(double dx, double dy) { logFinest(QString("NodeItem::moveBy : %1 (%2, %3)") .arg(m_name).arg(dx).arg(dy)); QGraphicsEllipseItem::moveBy( dx, dy ); label->moveBy(dx, dy); edges->moveEdges(); } int NodeItem::type() const { return Type; } QString NodeItem::name() const { return m_name; } int NodeItem::id() const { return m_index; } void NodeItem::setVisible(bool flag) { QGraphicsEllipseItem::setVisible(flag); label->setVisible(flag); } void NodeItem::hoverEnterEvent(QGraphicsSceneHoverEvent*) { QPen p(pen()); std_pen = p; p.setColor(p.color().lighter(200)); QGraphicsEllipseItem::setPen(p); } void NodeItem::hoverLeaveEvent(QGraphicsSceneHoverEvent*) { QGraphicsEllipseItem::setPen(std_pen); } qosmic-1.6.0/src/nodeitem.h000066400000000000000000000042161304321135200155520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef NODEITEM_H #define NODEITEM_H #include #include #include "triangle.h" class NodeItem : public QGraphicsEllipseItem { QGraphicsScene* canvas; Triangle* edges; QString m_name; QRectF m_boundingRect; QGraphicsSimpleTextItem* label; QPen std_pen; int m_index; public: NodeItem( QGraphicsScene*, Triangle*, int, const char* n = "" ); ~NodeItem(); Triangle* triangle(); void setTriangle(Triangle*); void moveBy(double, double); void movePoint(double, double); int type() const; void setPos(const QPointF&); void setPen(const QPen&, const QPen&); QRectF boundingRect(); QString name() const; int id() const; void setVisible(bool); protected: void hoverEnterEvent(QGraphicsSceneHoverEvent*); void hoverLeaveEvent(QGraphicsSceneHoverEvent*); public: enum { Type = UserType + 3 }; }; #endif qosmic-1.6.0/src/paletteeditor.cpp000066400000000000000000000762351304321135200171600ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include #include #include "paletteeditor.h" #include "flam3util.h" #include "logger.h" PaletteEditor::PaletteEditor ( QWidget* parent ) : QWidget(parent), checkers(15) { setupUi ( this ); loadPalette(0); m_palettesView->setModel(&m_flamPalettes); m_browseView->setModel(&m_browsePalettes); hasUGR = false; QSettings settings; settings.beginGroup("paletteeditor"); m_tabWidget->setCurrentIndex(settings.value("tabwidgetindex", 0).toInt()); m_lastBrowseDir = settings.value("lastdirectory", QDir::homePath()).toString(); m_gradientEnds->setArrowDirection(Qt::DownArrow); m_gradientEnds->setMenuEnabled(false); m_gradientSpreadGroup = new QButtonGroup(this); m_gradientSpreadGroup->addButton(m_padSpreadButton, QGradient::PadSpread); m_gradientSpreadGroup->addButton(m_repeatSpreadButton, QGradient::RepeatSpread); m_gradientSpreadGroup->addButton(m_reflectSpreadButton, QGradient::ReflectSpread); m_padSpreadButton->setChecked(true); // restore the gradient from settings int nstops( settings.beginReadArray("gradient") ); if (nstops > 1) { GradientStops stops; for (int n = 0 ; n < nstops ; n++) { settings.setArrayIndex(n); double pos( settings.value("pos").toDouble() ); QColor color( settings.value("color").value()) ; stops.append(GradientStop( pos, color )); } settings.endArray(); p_stops = stops; m_gradientStops->setStops(stops); } stopsChangedAction(); connect(m_palettesView, SIGNAL(pressed(const QModelIndex&)), this, SLOT(paletteIndexChangedAction(const QModelIndex&))); connect(m_browseView, SIGNAL(pressed(const QModelIndex&)), this, SLOT(selectGradientAction(const QModelIndex&))); connect(m_rotateSlider, SIGNAL(valueChanged(int)), this, SLOT(paletteRotatedAction(int))); connect(m_rotateSlider, SIGNAL(sliderReleased()), this, SIGNAL(undoStateSignal())); connect(m_openButton, SIGNAL(clicked(bool)), this, SLOT(openGradientAction(bool))); connect(m_gradientStops, SIGNAL(stopsChanged()), this, SLOT(stopsChangedAction())); connect(m_gradientStops, SIGNAL(stopsDropped()), this, SIGNAL(undoStateSignal())); connect(m_gradientEnds, SIGNAL(stopsChanged()), this, SLOT(stopsChangedAction())); connect(m_gradientEnds, SIGNAL(stopsDropped()), this, SIGNAL(undoStateSignal())); connect(m_gradientSpreadGroup, SIGNAL(buttonClicked(int)), this, SLOT(stopsChangedAction())); connect(m_gradientSpreadGroup, SIGNAL(buttonClicked(int)), this, SIGNAL(undoStateSignal())); connect(m_resetGradientButton, SIGNAL(clicked(bool)), this, SLOT(resetGradientAction())); connect(m_resetGradientButton, SIGNAL(clicked(bool)), this, SIGNAL(undoStateSignal())); connect(m_saveGradientButton, SIGNAL(clicked(bool)), this, SLOT(saveGradientAction())); connect(m_browseLineEdit, SIGNAL(returnPressed()), this, SLOT(browsePathChangedAction())); connect(m_randomGradientButton, SIGNAL(clicked(bool)), this, SLOT(createRandomGradientAction())); connect(m_randomGradientButton, SIGNAL(clicked(bool)), this, SIGNAL(undoStateSignal())); } void PaletteEditor::closeEvent(QCloseEvent* event) { logInfo("PaletteEditor::closeEvent : saving settings"); QSettings settings; settings.beginGroup("paletteeditor"); settings.setValue("tabwidgetindex", m_tabWidget->currentIndex()); settings.setValue("lastdirectory", m_lastBrowseDir); // save the gradient to the settings GradientStops stops( m_gradientStops->getStops() ); settings.beginWriteArray("gradient"); for (int n = 0 ; n < stops.size() ; n++) { settings.setArrayIndex(n); settings.setValue("pos", stops[n].first); settings.setValue("color", stops[n].second); } settings.endArray(); event->accept(); } void PaletteEditor::showEvent(QShowEvent* /*event*/) { setPaletteView(); buildPaletteSelector(); } void PaletteEditor::resetGradientAction() { m_gradientStops->setStops(p_stops); } void PaletteEditor::saveGradientAction() { QString saveFile( QFileDialog::getSaveFileName(this, tr("Save gradient to a cpt file"), QFileInfo(m_lastBrowseDir).absoluteFilePath(), tr("CPT Gradient Files (*.cpt)")) ); if (saveFile.isEmpty()) return; QFileInfo file( saveFile ); QString openDir( file.absoluteFilePath() ); logInfo(QString("PaletteEditor::saveGradientAction : saving gradient to %1").arg(saveFile)); if (openDir != m_lastBrowseDir) m_lastBrowseDir = openDir; QFile data(file.absoluteFilePath()); if (!data.open(QFile::ReadWrite)) { QMessageBox msgBox; msgBox.setText(tr("Error: Couldn't open file %1").arg(file.filePath())); msgBox.setIcon(QMessageBox::Warning); msgBox.exec(); return; } QTextStream os(&data); os << "# COLOR_MODEL = RGB" << endl << scientific << qSetRealNumberPrecision(6) << qSetFieldWidth(4); p_stops = m_gradientStops->getStops(); qStableSort(p_stops.begin(), p_stops.end(), GradientStop::lessThanGradientStopComparison); GradientStops::const_iterator i = p_stops.constBegin(); os << left << (*i).first << right << (*i).second.red() << (*i).second.green() << (*i).second.blue() << ' '; ++i; for ( ; i != p_stops.constEnd(); ++i) { os << left << (*i).first << right << (*i).second.red() << (*i).second.green() << (*i).second.blue() << endl; if (i + 1 != p_stops.constEnd()) os << left << (*i).first << right << (*i).second.red() << (*i).second.green() << (*i).second.blue() << ' '; } os << "B 0 0 0" << endl << "F 255 255 255" << endl << "N 255 0 0" << endl; data.close(); if (data.error() != QFile::NoError) { QMessageBox msgBox; msgBox.setText(tr("Error: Couldn't write to file %1").arg(file.filePath())); msgBox.setIcon(QMessageBox::Warning); msgBox.exec(); } } void PaletteEditor::stopsChangedAction() { static const int GradientBufferLastIdx = GradientBufferSize - 1; static const qreal dx = 1.0 / GradientBufferSize; QSize s( m_gradientLabel->maximumSize() ); QRect r( QPoint(0, 0), QSize(s.width(), (s.height() / 2.0 ) ) ); QImage palette_image(s, QImage::Format_RGB32); QPainter painter(&palette_image); GradientStops stops(m_gradientStops->getStops()); qStableSort(stops.begin(), stops.end(), GradientStop::lessThanGradientStopComparison); // now apply the ends and update the palette GradientStops ends( m_gradientEnds->getStops() ); QGradient::Spread spread((QGradient::Spread)m_gradientSpreadGroup->checkedId()); GradientStop n_stop(stops.first()); QRgb ccolor = n_stop.second.rgba(); for (int n = 0, fpos = n_stop.first * GradientBufferSize ; n < fpos ; n++) m_gradient[qMin(n, GradientBufferLastIdx)] = ccolor; int last_stop_idx = stops.size() - 1; for (int begin_idx = 0; begin_idx < last_stop_idx ; begin_idx++) { GradientStop a = stops.at(begin_idx); GradientStop b = stops.at(begin_idx + 1); QColor ac = a.second; QColor bc = b.second; qreal d = ( b.first - a.first ); qreal rdx, gdx, bdx, adx; if (b.colorspace == 0) { rdx = ( (bc.red() - ac.red() ) / d ) * dx; gdx = ( (bc.green() - ac.green() ) / d ) * dx; bdx = ( (bc.blue() - ac.blue() ) / d ) * dx; adx = ( (bc.alpha() - ac.alpha() ) / d ) * dx; } else { rdx = ( (bc.hue() - ac.hue() ) / d ) * dx; gdx = ( (bc.saturation() - ac.saturation() ) / d ) * dx; bdx = ( (bc.value() - ac.value() ) / d ) * dx; adx = ( (bc.alpha() - ac.alpha() ) / d ) * dx; if (b.colorspace == 1) { if (rdx == 0.0) rdx = 180.0 / d * dx; else if (rdx < 0) rdx *= -1; } else { if (rdx == 0.0) rdx = -180.0 / d * dx; else if (rdx > 0) rdx *= -1; } } int n = a.first * GradientBufferSize ; int nb = (int)(b.first * GradientBufferSize ); for (int i = 0 ; n < nb ; i++, n++) { if (b.colorspace == 0) { m_gradient[n] = qRgba( qBound(0, (int)( ac.red() + rdx * i + 0.5 ), 255), qBound(0, (int)( ac.green() + gdx * i + 0.5 ), 255), qBound(0, (int)( ac.blue() + bdx * i + 0.5 ), 255), qBound(0, (int)( ac.alpha() + adx * i + 0.5 ), 255)); } else { int h = (int)( ac.hue() + rdx * i + 0.5 ); if (h < 0) h += 360; m_gradient[n] = QColor::fromHsv(h % 360, qBound(0, (int)( ac.saturation() + gdx * i + 0.5 ), 255), qBound(0, (int)( ac.value() + bdx * i + 0.5 ), 255), qBound(0, (int)( ac.alpha() + adx * i + 0.5 ), 255)).rgba(); } } } n_stop = stops.last(); ccolor = n_stop.second.rgba(); for (int n = n_stop.first * GradientBufferSize ; n < GradientBufferSize ; n++) m_gradient[n] = ccolor; qreal start(ends.at(0).first); qreal end(ends.at(1).first); int begin_idx = start * 256 ; int end_idx = end * 256 ; int ibuf_size = end_idx - begin_idx; flam3_palette_entry* ibuf = new flam3_palette_entry[ibuf_size](); // a very acute filter qreal c2 = 0.01; qreal c3 = 1.0; qreal c4 = 0.01; qreal norm = c2 + c3 + c4; qreal k = 0.0; qreal skip( (GradientBufferSize / 256.0) / qMax(qreal(1.0/GradientBufferSize), end - start) ); for (int n = 0 ; n < ibuf_size ; n++, k += skip) { int j = k; QRgb a2( m_gradient[qBound(0, j + 0, GradientBufferLastIdx)] ); QRgb a3( m_gradient[qMin(j + 1, GradientBufferLastIdx)] ); QRgb a4( m_gradient[qMin(j + 2, GradientBufferLastIdx)] ); ibuf[n].color[0] = (qRed(a2)*c2 + qRed(a3)*c3 + qRed(a4)*c4 ) / (norm * 255.); ibuf[n].color[1] = (qGreen(a2)*c2 + qGreen(a3)*c3 + qGreen(a4)*c4 ) / (norm * 255.); ibuf[n].color[2] = (qBlue(a2)*c2 + qBlue(a3)*c3 + qBlue(a4)*c4 ) / (norm * 255.); ibuf[n].color[3] = (qAlpha(a2)*c2 + qAlpha(a3)*c3 + qAlpha(a4)*c4 ) / (norm * 255.); } // update the gradient editor label painter.fillRect(QRect(QPoint(0,0), s), checkers); if (ibuf_size == 256) { for (int n = 0, h = s.height() ; n < 256 ; n++) { painter.setPen(QColor::fromRgbF(ibuf[n].color[0], ibuf[n].color[1], ibuf[n].color[2], ibuf[n].color[3])); painter.drawLine(n, 0, n, h); } } else { for (int n = 0, h = s.height(), j = 0 ; n < 256 ; n++, j += 4) { QRgb a2( m_gradient[qBound(0, j + 0, GradientBufferLastIdx)] ); QRgb a3( m_gradient[qMin(j + 1, GradientBufferLastIdx)] ); QRgb a4( m_gradient[qMin(j + 2, GradientBufferLastIdx)] ); QRgb r((qRed(a2)*c2 + qRed(a3)*c3 + qRed(a4)*c4 ) / norm ); QRgb g((qGreen(a2)*c2 + qGreen(a3)*c3 + qGreen(a4)*c4 ) / norm ); QRgb b((qBlue(a2)*c2 + qBlue(a3)*c3 + qBlue(a4)*c4 ) / norm ); QRgb a((qAlpha(a2)*c2 + qAlpha(a3)*c3 + qAlpha(a4)*c4 ) / norm ); QColor c(r, g, b, a); painter.setPen(c); painter.drawLine(n, 0, n, h); } } m_gradientLabel->setPixmap(QPixmap::fromImage(palette_image)); // Rescale the gradient colors into the palette with a simple filter if (spread == QGradient::PadSpread) { QRgb fc(m_gradient[0]); flam3_palette_entry e = { 0., { qRed(fc)/255., qGreen(fc)/255., qBlue(fc)/255., qAlpha(fc)/255. }}; for (int n = 0 ; n < begin_idx ; n++) p[n] = e; for (int n = begin_idx, j = 0 ; n < end_idx ; n++, j++) p[n] = ibuf[j]; fc = m_gradient[GradientBufferLastIdx]; e = (flam3_palette_entry){ 1., { qRed(fc)/255., qGreen(fc)/ 255., qBlue(fc)/255., qAlpha(fc)/255. }}; for (int n = end_idx ; n < 256 ; n++) p[n] = e; } else if (spread == QGradient::RepeatSpread) { for (int n = begin_idx, j = 0 ; n < 256 ; n++, j++) p[n] = ibuf[j % ibuf_size]; for (int n = begin_idx - 1, j = ibuf_size * 4096 - 1 ; n >= 0 ; n--, j--) p[n] = ibuf[j % ibuf_size]; } else if (spread == QGradient::ReflectSpread) { for (int n = begin_idx, j = 0, h = 4096*ibuf_size -1 ; n < begin_idx + ibuf_size ; n++, j++, h--) { for (int k = n, q = n + ibuf_size ; k < 256 ; k += 2*ibuf_size, q += 2*ibuf_size ) { p[k] = ibuf[j % ibuf_size]; if (q < 256) p[q] = ibuf[h % ibuf_size]; } } for (int n = begin_idx - 1, j = ibuf_size * 4096 - 1, h = 0 ; n >= begin_idx - ibuf_size ; n--, j--, h++) { for (int k = n, q = n - ibuf_size ; k >= 0 ; k -= 2*ibuf_size, q -= 2*ibuf_size ) { p[k] = ibuf[h % ibuf_size]; if (q >= 0) p[q] = ibuf[j % ibuf_size]; } } } delete[] ibuf; setPaletteView(); emit paletteChanged(); } void PaletteEditor::createRandomGradientAction() { int nstops = m_randomGradientSpinBox->value(); while (nstops < 2) nstops = flam3_random01() * 128; GradientStops stops; for (int n = 0 ; n < nstops ; n++) { qreal idx = flam3_random01(); int r = flam3_random01() * 255; int g = flam3_random01() * 255; int b = flam3_random01() * 255; GradientStop s(idx, QColor(r, g, b)); stops << s; } m_gradientStops->setStops(stops); } void PaletteEditor::loadPalette(int palette_idx) { flam3_get_palette(palette_idx, p, 0.0); } void PaletteEditor::setPaletteView() { QSize s = m_paletteLabel->maximumSize(); QImage palette(s.width(), s.height(), QImage::Format_RGB32); QPainter painter(&palette); painter.fillRect(palette.rect(), checkers); int rvalue = m_rotateSlider->value() ; int n = 0; for (int i = (255 - rvalue) % 255 ; n < 256 ; i = (i + 1) % 256, n++) { painter.setPen(QColor::fromRgbF(p[i].color[0], p[i].color[1], p[i].color[2], p[i].color[3])); painter.drawLine(n, 0, n, s.height() - 1); } m_paletteLabel->setPixmap(QPixmap::fromImage(palette)); } void PaletteEditor::buildPaletteSelector() { // only do this once, but it takes a while, so only when asked static bool built = false; if (built) return; built = true; logInfo("PaletteEditor::buildPaletteSelector : generating palettes"); QSize s = m_palettesView->iconSize(); for (int n = 0 ; n < PaletteCount ; n++) { flam3_palette p; flam3_get_palette(n, p, 0.0); QImage palette(s.width(), s.height(), QImage::Format_RGB32); QPainter painter(&palette); for (int i = 0 ; i < 256 ; i++) { painter.setPen(QColor::fromRgbF(p[i].color[0], p[i].color[1], p[i].color[2])); painter.drawLine(i, 0, i, s.height()); } m_flamPalettes.addGradient(QPixmap::fromImage(palette)); } if (!m_lastBrowseDir.isEmpty()) { // restore p_stops for the initial call to resetGradientAction GradientStops tmp(p_stops); openGradientAction(true); p_stops = tmp; } } void PaletteEditor::paletteIndexChangedAction(const QModelIndex& idx) { if (!idx.isValid()) return; loadPalette(idx.row()); setPaletteView(); emit paletteChanged(); emit undoStateSignal(); } void PaletteEditor::paletteRotatedAction(int /*idx*/) { setPaletteView(); emit paletteChanged(); } // i'd hoped to avoid this type of call void PaletteEditor::getPalette(flam3_palette in) { int rvalue = m_rotateSlider->value() ; int n = 0; for (int i = (255-rvalue) % 255 ; n < 256 ; i = (i + 1) % 256, n++) { in[n].color[0] = p[i].color[0]; in[n].color[1] = p[i].color[1]; in[n].color[2] = p[i].color[2]; in[n].color[3] = p[i].color[3]; } } // and it's evil twin! void PaletteEditor::setPalette(flam3_palette in) { for (int n = 0 ; n < 256 ; n++) { p[n].color[0] = in[n].color[0]; p[n].color[1] = in[n].color[1]; p[n].color[2] = in[n].color[2]; p[n].color[3] = in[n].color[3]; } m_rotateSlider->blockSignals(true); m_rotateSlider->setSliderPosition(0); m_rotateSlider->blockSignals(false); setPaletteView(); } // select a gradient from the browse list void PaletteEditor::selectGradientAction(const QModelIndex& idx) { if (idx.isValid()) { if (hasUGR) { logFine("PaletteEditor::selectGradientAction : UGR %d", idx.row()); setPalette(ugrList[idx.row()].pa); emit paletteChanged(); emit undoStateSignal(); } else { QFileInfo file = m_browseFileList.at(idx.row()); logFine("PaletteEditor::selectGradientAction : selecting %d", idx.row()); if ((file.suffix() == "ggr" && loadGIMPGradient(file, p)) || (file.suffix() == "cpt" && loadCPTGradient(file, p))) { m_gradientEnds->resetStops(); m_gradientStops->setStops(p_stops); emit undoStateSignal(); } else QMessageBox::warning(this, tr("Invalid path"), tr("The directory path %1 couldn't be opened.") .arg(file.absoluteFilePath()), QMessageBox::NoButton); } } } // open a and parse a directory containing gimp gradient files void PaletteEditor::openGradientAction(bool noprompt) { logFine(QString("PaletteEditor::openGradientAction : %1").arg(noprompt)); QString openDir; if (noprompt) { openDir = m_lastBrowseDir; m_lastBrowseDir.clear(); } else { openDir = QFileDialog::getOpenFileName(this, tr("Select a gradient file to load"), QFileInfo(m_lastBrowseDir).absoluteFilePath(), tr("Gradient Files (*.cpt *.ggr *.ugr)")); } if (openDir.isEmpty()) return; if (openDir != m_lastBrowseDir) m_lastBrowseDir = openDir; if (openDir.indexOf(QRegExp(".*\\.ugr$")) >= 0) { logFine(QString("PaletteEditor::openGradientAction : ugr %1").arg(openDir)); QFileInfo ugrFile(openDir); if (ugrFile.exists()) { loadUGRGradients(ugrFile); QSize s = m_browseView->iconSize(); QImage palette(s.width(), s.height(), QImage::Format_RGB32); QPainter painter(&palette); m_browsePalettes.clear(); foreach (flam3_palette_t t, ugrList) { for (int n = 0 ; n < 256 ; n++) { painter.setPen(QColor::fromRgbF(t.pa[n].color[0], t.pa[n].color[1], t.pa[n].color[2])); painter.drawLine(n, 0, n, s.height()); } m_browsePalettes.addGradient(QPixmap::fromImage(palette)); } hasUGR=true; m_browseLineEdit->setText(m_lastBrowseDir); } } else { logFine("PaletteEditor::openGradientAction : load cpt,ggr"); QFileInfo file(openDir); QFileInfo path(file); if (!path.isDir()) path = QFileInfo(path.absolutePath()); QDir dir(path.absoluteFilePath()); QStringList filters; filters << "*.ggr" << "*.cpt"; m_browseFileList = dir.entryInfoList(filters, QDir::Files, QDir::Name); m_browsePalettes.clear(); m_browseLineEdit->setText(path.absoluteFilePath()); // build the palette list foreach (QFileInfo i, m_browseFileList) { flam3_palette pa; if ((i.suffix() == "ggr" && loadGIMPGradient(i, pa)) || (i.suffix() == "cpt" && loadCPTGradient(i, pa))) { QSize s = m_browseView->iconSize(); QImage palette(s.width(), s.height(), QImage::Format_RGB32); QPainter painter(&palette); painter.fillRect(0, 0, s.width(), s.height(), checkers); for (int n = 0 ; n < 256 ; n++) { painter.setPen(QColor::fromRgbF(pa[n].color[0], pa[n].color[1], pa[n].color[2], pa[n].color[3])); painter.drawLine(n, 0, n, s.height()); } m_browsePalettes.addGradient(QPixmap::fromImage(palette)); logFinest(QString("PaletteEditor::openGradientAction : adding %1") .arg(i.absoluteFilePath())); } else { logWarn(QString("PaletteEditor::openGradientAction : skipping %1") .arg(i.absoluteFilePath())); m_browseFileList.removeAll(i); } } ugrList.clear(); hasUGR=false; if (!noprompt) { // now load the gradient selected in the file dialog. if (m_browseFileList.contains(file)) { logFine(QString("PaletteEditor::openGradientAction : loading %1") .arg(file.fileName())); int row = m_browseFileList.indexOf(file); selectGradientAction(m_browsePalettes.index(row)); } else logWarn(QString("PaletteEditor::openGradientAction : %1 not in list") .arg(file.fileName())); } } } bool PaletteEditor::loadUGRGradients(QFileInfo& file) { logInfo(QString("PaletteEditor::loadUGRGradients : opening %1").arg(file.fileName())); QFile data(file.absoluteFilePath()); if (!data.open(QFile::ReadOnly)) return false; QTextStream is(&data); const double part = 256.0; // palette entries const double div = part / 400; // entries / range QRegExp rx("index=(\\d+)\\s+color=(\\d+)"); ugrList.clear(); while (!is.atEnd()) { flam3_palette pa; QString buf = is.readLine(); // look for the first index while (! (rx.indexIn(buf) >= 0 || is.atEnd())) buf = is.readLine(); if (is.atEnd()) break; // and break after the last palette in the file int pidx = 0; while (( rx.indexIn(buf) >= 0 ) && !is.atEnd()) { int idx = rx.cap(1).toInt(); int color = rx.cap(2).toInt(); int j = (int)((double)idx*div); int b = (color >> 16) & 0xff; int g = (color >> 8) & 0xff; int r = color & 0xff; while (pidx <= qMin(j, 255)) { pa[pidx].color[0] = (double)r/255.; pa[pidx].color[1] = (double)g/255.; pa[pidx].color[2] = (double)b/255.; pa[pidx].color[3] = 1.; pidx++; } logFinest(QString("PaletteEditor::openUGRGradients : j=%1: %2,%3,%4") .arg(j).arg(pa[j].color[0]).arg(pa[j].color[1]).arg(pa[j].color[2])); buf = is.readLine(); } ugrList.append(flam3_palette_t(pa)); } return true; } bool PaletteEditor::loadGIMPGradient(QFileInfo& file, flam3_palette pa) { logFinest(QString("PaletteEditor::loadGIMPGradient : %1").arg(file.fileName())); QFile data(file.absoluteFilePath()); if (!data.open(QFile::ReadOnly)) return false; QTextStream is(&data); int cpoints; QString buf = is.readLine(); if (buf != "GIMP Gradient") return false; is >> buf; if (buf == "Name:") buf = is.readLine(); // buf now contains name of gradient is >> cpoints; p_stops.clear(); double leftc,midc,rightc; double leftr,leftg,leftb,lefta; double rightr,rightg,rightb,righta; int blending, coloring, buckets; qreal rightc_idx_last(-1.0); QColor rightc_color_last; for (int n = 0 ; n < cpoints ; n++) { is >> leftc >> midc >> rightc >> leftr >> leftg >> leftb >> lefta >> rightr >> rightg >> rightb >> righta >> blending >> coloring ; if (blending != 0) logWarn(QString("PaletteEditor::loadGIMPGradient : %1 has unsupported " "blending mode %2 on line %3").arg(file.fileName()).arg(blending).arg(n+1)); if (coloring < 0 || coloring > 2) { logWarn(QString("PaletteEditor::loadGIMPGradient : %1 has unsupported " "coloring mode %2 on line %3").arg(file.fileName()).arg(coloring).arg(n+1)); coloring = 0; } qreal leftc_idx( leftc ); QColor leftc_color( QColor::fromRgbF(leftr, leftg, leftb, lefta) ); if (coloring > 0) { // convert to hsv color space leftr = leftc_color.hueF(); leftg = leftc_color.saturationF(); leftb = leftc_color.valueF(); QColor c(QColor::fromRgbF(rightr, rightg, rightb, righta)); rightr = c.hueF(); rightg = c.saturationF(); rightb = c.valueF(); } if (leftc_idx == rightc_idx_last) { if (leftc_color == rightc_color_last) p_stops.pop_back(); else { logWarn(QString("PaletteEditor::loadGIMPGradient : %1 has unmatched " "left/right color entries on lines %2 - %3").arg(file.fileName()).arg(n).arg(n+1)); leftc_idx += 0.00001; } } else if (rightc_idx_last != -1) { logError(QString("PaletteEditor::loadGIMPGradient : %1 has unmatched " "left/right index entries on lines %2 - %3").arg(file.fileName()).arg(n).arg(n+1)); leftc_idx += 0.00001; } p_stops << GradientStop(leftc_idx, leftc_color, coloring); int pstart = (int)(leftc * 256.); int pmid = (int)(midc * 256.); int pend = (int)(rightc * 256.); buckets = pmid - pstart; double rdx = (rightr - leftr)/2.; double gdx = (rightg - leftg)/2.; double bdx = (rightb - leftb)/2.; double adx = (righta - lefta)/2.; // rotate a full 360 degrees in hsv colorspace if (coloring == 1 && rdx == 0.) rdx = 0.5; else if (coloring == 2 && rdx == 0.) rdx = -0.5; double rinc = rdx / buckets; double ginc = gdx / buckets; double binc = bdx / buckets; double ainc = adx / buckets; for (int j = pstart ; j < pmid ; j++) { if (coloring == 0) { pa[j].color[0] = qBound(0., leftr, 1.0); pa[j].color[1] = qBound(0., leftg, 1.0); pa[j].color[2] = qBound(0., leftb, 1.0); pa[j].color[3] = qBound(0., lefta, 1.0); } else { if (leftr >= 1.0) leftr -= 1.0; else if (leftr < 0) leftr += 1.0; QColor hsv(QColor::fromHsvF( qBound(0., leftr, 1.0), qBound(0., leftg, 1.0), qBound(0., leftb, 1.0), qBound(0., lefta, 1.0))); pa[j].color[0] = hsv.redF(); pa[j].color[1] = hsv.greenF(); pa[j].color[2] = hsv.blueF(); pa[j].color[3] = hsv.alphaF(); } leftr += rinc; leftg += ginc; leftb += binc; lefta += ainc; } qreal midc_idx( midc ); QColor midc_color; if (coloring == 0) midc_color = QColor::fromRgbF( qBound(qreal(0.0), leftc_color.redF() + rdx, qreal(1.0)), qBound(qreal(0.0), leftc_color.greenF() + gdx, qreal(1.0)), qBound(qreal(0.0), leftc_color.blueF() + bdx, qreal(1.0)), qBound(qreal(0.0), leftc_color.alphaF() + adx, qreal(1.0)) ); else { qreal h = leftc_color.hueF() + rdx; if (h >= 1.0) h -= 1.0; else if (h < 0) h += 1.0; midc_color = QColor::fromHsvF( qBound(qreal(0.0), h , qreal(1.0)), qBound(qreal(0.0), leftc_color.saturationF() + gdx, qreal(1.0)), qBound(qreal(0.0), leftc_color.valueF() + bdx, qreal(1.0)), qBound(qreal(0.0), leftc_color.alphaF() + adx, qreal(1.0)) ); } if (midc_idx == leftc_idx) { logWarn(QString("PaletteEditor::loadGIMPGradient : %1 has right " "adjusting midc entry on line %2").arg(file.fileName()).arg(n+1)); midc_idx += 0.00001; } p_stops << GradientStop(midc_idx, midc_color, coloring); buckets = pend - pmid; rinc = rdx / buckets; ginc = gdx / buckets; binc = bdx / buckets; ainc = adx / buckets; for (int j = pmid ; j < pend ; j++) { if (coloring == 0) { pa[j].color[0] = qBound(0., leftr, 1.0); pa[j].color[1] = qBound(0., leftg, 1.0); pa[j].color[2] = qBound(0., leftb, 1.0); pa[j].color[3] = qBound(0., lefta, 1.0); } else { if (leftr >= 1.0) leftr -= 1.0; else if (leftr < 0) leftr += 1.0; QColor hsv(QColor::fromHsvF( qBound(0., leftr, 1.0), qBound(0., leftg, 1.0), qBound(0., leftb, 1.0), qBound(0., lefta, 1.0))); pa[j].color[0] = hsv.redF(); pa[j].color[1] = hsv.greenF(); pa[j].color[2] = hsv.blueF(); pa[j].color[3] = hsv.alphaF(); } leftr += rinc; leftg += ginc; leftb += binc; lefta += ainc; } rightc_idx_last = rightc; if (coloring == 0) rightc_color_last = QColor::fromRgbF(rightr, rightg, rightb, righta); else rightc_color_last = QColor::fromHsvF(rightr, rightg, rightb, righta); if (rightc_idx_last == midc_idx) { logWarn(QString("PaletteEditor::loadGIMPGradient : %1 has left " "adjusting midc entry on line %2").arg(file.fileName()).arg(n+1)); midc_idx -= 0.000001; p_stops.pop_back(); GradientStop astop(midc_idx, midc_color, coloring); p_stops<> z0 >> z0r >> z0g >> z0b >> z1 >> z1r >> z1g >> z1b; double idx_start = z0; // start position is always first if (idx_start != 0.0) { // make all positions >= 0 offset = idx_start * -1.0; idx_start = 0.0; } QRegExp rx("^\\s*[BFN]\\s+\\d+"); while (!is.atEnd()) { pos = is.pos(); buf = is.readLine(); if (buf.isEmpty()) continue; else if ( rx.indexIn(buf) != -1 ) break; else { is.seek(pos); is >> z0 >> z0r >> z0g >> z0b >> z1 >> z1r >> z1g >> z1b; is.readLine(); } } // end position is in the last entry double idx_end = z1 + offset; logFinest("PaletteEditor::loadCPTGradient : idx range %d %d", idx_start, idx_end); // now go back and try again is.seek(start_pos); z1 = idx_start; const double part = 256.0; // palette entries const double div = part / (idx_end - idx_start); // entries / range qreal z1_idx_last(-1.0); QColor z1_color_last; p_stops.clear(); while ((z1 < (idx_end - offset)) && is.pos() > 0) { is >> z0 >> z0r >> z0g >> z0b >> z1 >> z1r >> z1g >> z1b; is.readLine(); // move all indexes up, and use reals for rgb z0 += offset; z1 += offset; int pstart = qRound(z0 * div); int pend = qRound(z1 * div); qreal z0_idx( (qreal)z0 / idx_end ); QColor z0_color(QColor::fromRgb(z0r, z0g, z0b)); if (z0_idx == z1_idx_last) { if (z0_color == z1_color_last) p_stops.pop_back(); else { logWarn("PaletteEditor::loadCPTGradient : %s has right adjusting " "z0 entry at pos %d", file.fileName().toLatin1().constData(), is.pos()); z0_idx += 0.0001; } } p_stops << GradientStop(z0_idx, z0_color); z0r /= part; z0g /= part ; z0b /= part ; double pdx = pend - pstart ; double rdx = (z1r / part - z0r) / pdx ; double gdx = (z1g / part - z0g) / pdx; double bdx = (z1b / part - z0b) / pdx; logFinest(QString("PaletteEditor::loadCPTGradient : z0 %1 \t %2 %3 %4") .arg(z0).arg(z0r).arg(z0g).arg(z0b)); logFinest(QString("PaletteEditor::loadCPTGradient : z1 %1 \t %2 %3 %4") .arg(z1).arg(z1r / part).arg(z1g / part).arg(z1b / part)); int j = pstart; for ( ; j < pend && j <= 255; j++) { pa[j].color[0] = qBound(0., z0r, 1.) ; pa[j].color[1] = qBound(0., z0g, 1.) ; pa[j].color[2] = qBound(0., z0b, 1.) ; pa[j].color[3] = 1. ; logFinest(QString("PaletteEditor::loadCPTGradient : p[%1] \t %2 %3 %4") .arg(j).arg(p[j].color[0]).arg(p[j].color[1]).arg(p[j].color[2])); z0r += rdx ; z0g += gdx; z0b += bdx; } z1_idx_last = (qreal)z1 / idx_end; z1_color_last = QColor::fromRgb(z1r, z1g, z1b); p_stops << GradientStop(z1_idx_last, z1_color_last); if (j >= 255) break; } return true; } QString PaletteEditor::lastBrowseDir() const { return m_lastBrowseDir; } void PaletteEditor::setLastBrowseDir(const QString& value) { m_lastBrowseDir = value; } void PaletteEditor::browsePathChangedAction() { QString text( m_browseLineEdit->text() ); if (text != m_lastBrowseDir) { QFileInfo file(text); if (file.exists()) { m_lastBrowseDir = file.absoluteFilePath(); openGradientAction(true); } else QMessageBox::information(this, tr("Invalid path"), tr("The gradient path %1 doesn't exist.") .arg(file.absoluteFilePath()), QMessageBox::NoButton); } } qosmic-1.6.0/src/paletteeditor.h000066400000000000000000000063331304321135200166150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef PALETTEEDITOR_H #define PALETTEEDITOR_H #include #include #include #include #include #include "ui_paletteeditor.h" #include "gradientlistmodel.h" #include "checkersbrush.h" #include "flam3util.h" class PaletteEditor : public QWidget, private Ui::PaletteEditor { Q_OBJECT private: // this class wraps the palette type so they can be automagically // allocated, deallocated, and stored in a QList class flam3_palette_t { public: flam3_palette_t(flam3_palette p) { memcpy(pa, p, sizeof(flam3_palette)); } flam3_palette pa; }; static const int PaletteCount = 701; static const int GradientBufferSize = 1024; flam3_palette p; GradientStops p_stops; GradientListModel m_flamPalettes; GradientListModel m_browsePalettes; QFileInfoList m_browseFileList; QString m_lastBrowseDir; QList ugrList; QButtonGroup* m_gradientSpreadGroup; CheckersBrush checkers; QRgb m_gradient[GradientBufferSize]; bool hasUGR; public: PaletteEditor(QWidget* parent=0); void getPalette(flam3_palette); void setPalette(flam3_palette); bool loadGIMPGradient(QFileInfo&, flam3_palette); bool loadCPTGradient(QFileInfo&, flam3_palette); bool loadUGRGradients(QFileInfo&); void setLastBrowseDir (const QString&); QString lastBrowseDir() const; signals: void paletteChanged(); void undoStateSignal(); public slots: void paletteIndexChangedAction(const QModelIndex&); void paletteRotatedAction(int); void openGradientAction(bool); void selectGradientAction(const QModelIndex&); void loadPalette(int); void stopsChangedAction(); void saveGradientAction(); void resetGradientAction(); void browsePathChangedAction(); void createRandomGradientAction(); protected: void showEvent(QShowEvent*); void buildPaletteSelector(); void setPaletteView(); void closeEvent(QCloseEvent*); }; #endif qosmic-1.6.0/src/posttriangle.cpp000066400000000000000000000044641304321135200170210ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ****************************************************************************/ #include #include "posttriangle.h" #include "logger.h" PostTriangle::PostTriangle(FigureEditor* c, flam3_xform* x, BasisTriangle* b) : Triangle(c, x, b, -1) { logFiner("PostTriangle::PostTriangle : constr"); TriangleCoords tc = basisTriangle->getCoords(m_xform->post); setPoints(tc); } void PostTriangle::resetPosition() { m_xform->post[0][0] = 1.0; m_xform->post[0][1] = 0.0; m_xform->post[1][0] = 0.0; m_xform->post[1][1] = 1.0; m_xform->post[2][0] = 0.0; m_xform->post[2][1] = 0.0; TriangleCoords tc = basisTriangle->getCoords(m_xform->post); setPoints(tc); } void PostTriangle::coordsToXForm() { logFiner("PostTriangle::coordsToXForm : enter"); basisTriangle->applyTransform(cList, m_xform->post); } int PostTriangle::type() const { return Type; } void PostTriangle::basisScaledSlot() { const QTransform basis(basisTriangle->coordTransform()); setTransform(basis); TriangleCoords tc = basisTriangle->getCoords(m_xform->post); setPoints(tc); QBrush b(brush()); b.setTransform(basis); setBrush(b); } qosmic-1.6.0/src/posttriangle.h000066400000000000000000000031451304321135200164610ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef POSTTRIANGLE_H #define POSTTRIANGLE_H #include "triangle.h" class PostTriangle : public Triangle { public: PostTriangle(FigureEditor* c, flam3_xform* x, BasisTriangle* b); void resetPosition(); int type() const; void basisScaledSlot(); void coordsToXForm(); enum { Type = UserType + 4 }; }; #endif qosmic-1.6.0/src/qosmic.cpp000066400000000000000000000063771304321135200156060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include "qosmic.h" #include "logger.h" #include "mainwindow.h" using namespace Util; int main(int argc, char* argv[]) { Q_INIT_RESOURCE(qosmic); QCoreApplication::setOrganizationName("qosmic"); QCoreApplication::setApplicationName("qosmic"); QApplication app(argc, argv); app.setWindowIcon(QIcon(":icons/qosmic.xpm")); // Initialize the logger Logger::getInstance()->setLevel(Logger::levelFor(getenv("log"))); logInfo(QString("main() : Qosmic (version %1)").arg(QOSMIC_VERSION)); // Load translations if necessary QTranslator translator; { QLocale locale; logInfo(QString("main() : system locale is %1").arg(locale.name())); if (translator.load(locale, "qosmic", "_", ":/ts", ".qm")) { logInfo(QString("main() : installing translations for %1").arg(locale.name())); app.installTranslator(&translator); } else { logInfo(QString("main() : no translations found for %1").arg(locale.name())); } } if (argc > 1 && QString(argv[1]).contains(QRegExp("--?[hv]"))) { cout << QString(QCoreApplication::translate("CoreApp", "Qosmic %1\n" "Usage: qosmic [flam3 file]\n\n" "environment variables:\n" "log=%2\n" "flam3_verbose=%3\n" "flam3_nthreads=%4\n")) .arg(QOSMIC_VERSION) .arg(Logger::getInstance()->level()) .arg(QString(getenv("flam3_verbose")).toInt()) .arg(QString(getenv("flam3_nthreads")).toInt() > 0 ? QString(getenv("flam3_nthreads")).toInt() : flam3_count_nthreads()) << endl; return 0; } MainWindow* mw = new MainWindow(); QString fname(QOSMIC_AUTOSAVE); if (argc > 1) { fname = QString(argv[1]); if (!mw->loadFile(fname)) { cerr << QString(QCoreApplication::translate("CoreApp", "Couldn't load file %1")).arg(fname) << endl; return 1; } } else if (QFileInfo(fname).exists()) { mw->loadFile(fname); mw->setCurrentFile(""); } else mw->setFlameXML(); mw->show(); logInfo("main() : qosmic started"); return app.exec(); } qosmic-1.6.0/src/qosmic.h000066400000000000000000000041561304321135200152440ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef QOSMIC_H #define QOSMIC_H #include #include #ifndef VERSION #define VERSION "unknown" #endif #ifndef SCRIPTSDIR #define SCRIPTSDIR ":/unknown" #endif static const QString QOSMIC_VERSION( VERSION ); static const QString QOSMIC_SCRIPTSDIR( SCRIPTSDIR ); static const QString QOSMIC_USERDIR( QDir::home().absoluteFilePath(".qosmic") ); static const QString QOSMIC_AUTOSAVE( QOSMIC_USERDIR + "/autosave.flam3" ); static const QString DEFAULT_FLAME_XML( "\n" "\n" ""); #endif qosmic-1.6.0/src/qosmicwidget.cpp000066400000000000000000000036311304321135200170000ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "qosmicwidget.h" #include "logger.h" QMap QosmicWidget::widgets; QosmicWidget::QosmicWidget() { } QosmicWidget::~QosmicWidget() { } QosmicWidget::QosmicWidget(QosmicWidget* parent, QString name) : myName(name) { logFine(QString("QosmicWidget::QosmicWidget : adding instance %1").arg(name)); setWidget(name, parent); } void QosmicWidget::setWidget(const QString& name, QosmicWidget* widget) { if (widgets.contains(name)) logWarn(QString("QosmicWidget::setWidget : clobbering widget '%1'").arg(name)); widgets[name] = widget; } QString QosmicWidget::qosmicWidgetName() { return myName; } qosmic-1.6.0/src/qosmicwidget.h000066400000000000000000000036401304321135200164450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef QOSMICWIDGET_H #define QOSMICWIDGET_H #include #include /** * This here is some magik to help subclassed objects find each other. It's * main use is to allow each xxxxWidget object instance access to the others. * Each subclassed instance needs to have a unique name or it will be clobbered. */ class QosmicWidget { static QMap widgets; QString myName; QosmicWidget(); public: QosmicWidget(QosmicWidget*, QString); virtual ~QosmicWidget(); template T* getWidget() const; void setWidget(const QString&, QosmicWidget*); QString qosmicWidgetName(); }; #endif qosmic-1.6.0/src/renderdialog.cpp000066400000000000000000000116211304321135200167360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include "renderdialog.h" RenderDialog::RenderDialog(QWidget* parent, QString file, QString lastPath, QSize seyz, QStringList list) : QDialog(parent), fileName(file), lastDir(lastPath), imgSize(seyz), presets(list), nopreset(tr("genome quality")), sizeValidator(QRegExp("\\d+\\s*x\\s*\\d+"), this) { setupUi(this); setModal(true); QSettings settings; m_filePathLineEdit->setText(QDir(lastDir).absoluteFilePath(fileName)); m_qualityComboBox->addItem(nopreset); m_qualityComboBox->addItems(presets); QString quality(settings.value("renderdialog/last_quality").toString()); m_qualityComboBox->setCurrentIndex(m_qualityComboBox->findText(quality)); int cnt = settings.beginReadArray("renderdialog/sizes"); if (cnt == 0) { QStringList dims; dims << "640x480" << "600x800" << "1024x768" << "1280x960" << "1280x1024"; m_sizeComboBox->addItems(dims); } else { for (int i = 0; i < cnt; ++i) { settings.setArrayIndex(i); QString dim( settings.value("dim").toString() ); m_sizeComboBox->addItem(dim); } settings.endArray(); sizeText = QString("%1x%2").arg(imgSize.width()).arg(imgSize.height()); if (m_sizeComboBox->findText(sizeText) == -1) { m_sizeComboBox->insertItem(0, sizeText); m_sizeComboBox->setCurrentIndex(0); } } connect(m_filePathButton, SIGNAL(pressed()), this, SLOT(filePathButtonSlot())); connect(m_addSizeButton, SIGNAL(pressed()), this, SLOT(addSizeButtonSlot())); connect(m_delSizeButton, SIGNAL(pressed()), this, SLOT(delSizeButtonSlot())); } RenderDialog::~RenderDialog() { } void RenderDialog::addSizeButtonSlot() { m_sizeComboBox->setEditable(true); m_sizeComboBox->setValidator(&sizeValidator); m_sizeComboBox->clearEditText(); m_sizeComboBox->setFocus(Qt::OtherFocusReason); } void RenderDialog::delSizeButtonSlot() { m_sizeComboBox->removeItem(m_sizeComboBox->currentIndex()); } void RenderDialog::accept() { if (QFileInfo(absoluteFilePath()).exists()) { QMessageBox::StandardButton b = QMessageBox::question(this, tr("File already exists"), tr("Do you want to overwrite %1?") .arg(QFileInfo(absoluteFilePath()).fileName()), QMessageBox::Yes | QMessageBox::No, QMessageBox::NoButton ); if (b == QMessageBox::No) return; } QSettings settings; size = m_sizeComboBox->currentText(); preset = m_qualityComboBox->currentText(); m_sizeComboBox->removeItem(m_sizeComboBox->currentIndex()); settings.beginWriteArray("renderdialog/sizes"); settings.setArrayIndex(0); settings.setValue("dim", size); int cnt = 10; for (int i = 0; i < cnt; ++i) { QString text(m_sizeComboBox->itemText(i)); if (text.isEmpty()) break; settings.setArrayIndex(i+1); settings.setValue("dim", text); } settings.endArray(); settings.setValue("renderdialog/last_size", size); settings.setValue("renderdialog/last_quality", preset); QDialog::accept(); } void RenderDialog::filePathButtonSlot() { QString imageName = fileName; if (imageName.isEmpty()) imageName = tr("untitled.png"); imageName = QFileDialog::getSaveFileName(this, tr("Save an image as ..."), QDir(lastDir).absoluteFilePath(imageName)); m_filePathLineEdit->setText(imageName); } QString RenderDialog::absoluteFilePath() { return m_filePathLineEdit->text(); } QString RenderDialog::selectedPreset() { return preset; } bool RenderDialog::presetSelected() { return preset != nopreset; } bool RenderDialog::sizeSelected() { return size != sizeText; } QSize RenderDialog::selectedSize() { QRegExp rx("(\\d+)\\s*x\\s*(\\d+)"); if (rx.indexIn(size) != -1) return QSize(rx.cap(1).toInt(), rx.cap(2).toInt()); return QSize(10,10); } qosmic-1.6.0/src/renderdialog.h000066400000000000000000000037721304321135200164130ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef RENDERDIALOG_H #define RENDERDIALOG_H #include "ui_renderdialog.h" class RenderDialog : public QDialog, private Ui::RenderDialog { Q_OBJECT public: RenderDialog(QWidget*, QString name, QString path, QSize size, QStringList list); ~RenderDialog(); QString absoluteFilePath(); QString selectedPreset(); bool presetSelected(); QSize selectedSize(); bool sizeSelected(); public slots: void filePathButtonSlot(); void accept(); void addSizeButtonSlot(); void delSizeButtonSlot(); private: QString fileName; QString lastDir; QSize imgSize; QString sizeText; QStringList presets; QString size; QString preset; QString nopreset; QRegExpValidator sizeValidator; }; #endif qosmic-1.6.0/src/renderprogressdialog.cpp000066400000000000000000000052241304321135200205250ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "renderprogressdialog.h" RenderProgressDialog::RenderProgressDialog(QWidget* parent, RenderThread* thread) : QDialog(parent, Qt::Dialog), m_rthread(thread), m_showMainViewer(false) { setupUi(this); setModal(true); m_yesButton->setVisible(false); m_noButton->setVisible(false); m_dialogLabel->setVisible(false); m_finishedLabel.setText(tr("View rendered image?")); connect(m_yesButton, SIGNAL(pressed()), this, SLOT(yesButtonPressedSlot())); connect(m_rthread, SIGNAL(statusUpdated(RenderStatus*)), this, SLOT(setRenderStatus(RenderStatus*))); } RenderProgressDialog::~RenderProgressDialog() { } void RenderProgressDialog::yesButtonPressedSlot() { m_showMainViewer = true; accept(); } void RenderProgressDialog::setRenderStatus(RenderStatus* status) { if (status->Type == RenderRequest::File) { if (status->State == RenderStatus::Busy) m_progressBar->setValue(status->Percent); else { m_dialogLabel->setVisible(true); m_dialogLabel->setText(status->getMessage()); m_progressBar->setVisible(false); m_verticalLayout->removeWidget(m_progressBar); m_verticalLayout->insertWidget(1, &m_finishedLabel); m_yesButton->setVisible(true); m_noButton->setVisible(true); m_stopButton->setVisible(false); m_verticalLayout->invalidate(); } } } bool RenderProgressDialog::showMainViewer() { return m_showMainViewer; } qosmic-1.6.0/src/renderprogressdialog.h000066400000000000000000000034771304321135200202020ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef RENDERPROGRESSDIALOG_H #define RENDERPROGRESSDIALOG_H #include "ui_renderprogressdialog.h" #include "renderthread.h" #include "mainviewer.h" class RenderProgressDialog : public QDialog, private Ui::RenderProgressDialog { Q_OBJECT QLabel m_finishedLabel; RenderThread* m_rthread; bool m_showMainViewer; public: RenderProgressDialog(QWidget*, RenderThread*); ~RenderProgressDialog(); bool showMainViewer(); public slots: void setRenderStatus(RenderStatus*); private slots: void yesButtonPressedSlot(); }; #endif qosmic-1.6.0/src/renderthread.cpp000066400000000000000000000375751304321135200167660ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "renderthread.h" #include "flam3util.h" #include "logger.h" // global 'static' vars used in callback. they're prefixed with an underscore. bool RenderThread::_stop_current_job = false; double RenderThread::_est_remain; double RenderThread::_percent_finished; stat_struct RenderThread::_stats; // singleton instance RenderThread* RenderThread::singleInstance = 0; QTime RenderThread::ptimer; /** * this callback is needed to control the rendering function. it also * helps calculate the estimated time remaining. */ int RenderThread::_progress_callback( void* /*parameter*/, double /*vari*/, int /*varn*/, double est) { if (est != 0.0) { double elapsed = ptimer.elapsed() ; _est_remain = est * 1000.0; _percent_finished = elapsed / (_est_remain + elapsed) * 100.0; } if (_stop_current_job) return 1; return 0; } void RenderThread::init_status_cb() { _est_remain = 0.0; _percent_finished = 0.0; } RenderThread::RenderThread() : rendering(false), kill_all_jobs(false), millis(0), running(true) { // stuff to control the flam3_render function render_loop_flag = false; setFormat(RGB32); flam3_init_frame(&flame); flame.progress = &_progress_callback; flame.bits = 64; flame.ngenomes = 1; // only render one genome flame.time = 0.0; flame.bytes_per_channel = 1; flame.pixel_aspect_ratio = 1.0; flame.sub_batch_size = 10000; flame.nthreads = QString(getenv("flam3_nthreads")).toInt(); flame.verbose = QString(getenv("flam3_verbose")).toInt(); flame.earlyclip = 0; if (flame.nthreads < 1) flame.nthreads = flam3_count_nthreads(); logInfo(QString("RenderThread::RenderThread : using %1 rendering thread(s)").arg(flame.nthreads)); preview_request = 0; image_request = 0; so = new StatusObserver(this); so->start(); connect(so, SIGNAL(statusUpdated(RenderStatus*)), this, SIGNAL(statusUpdated(RenderStatus*)),Qt::DirectConnection); } RenderThread* RenderThread::getInstance() { if (singleInstance == 0) singleInstance = new RenderThread(); return singleInstance; } RenderThread::~RenderThread() { running = false; so->running = false; delete so; } void RenderThread::run() { logInfo("RenderThread::run : starting thread"); while (running) { running_mutex.lock(); RenderRequest* job; if (preview_request != 0) { job = preview_request; preview_request = 0; } else if (image_request != 0) { job = image_request; image_request = 0; } else { rqueue_mutex.lock(); if (request_queue.isEmpty()) { // sleep only after checking for requests current_request = 0; rqueue_mutex.unlock(); running_mutex.unlock(); usleep(10000); continue; } else { job = request_queue.dequeue(); logFine("RenderThread::run : dequeueing request %#x", (long)job); rqueue_mutex.unlock(); } } render_loop_flag = true; current_request = job; // make sure there is something to calculate bool no_pos_xf = true; for (flam3_xform* xf = job->genome()->xform ; xf < job->genome()->xform + job->genome()->num_xforms ; xf++) if (xf->density > 0.0) { no_pos_xf = false; break; } if (no_pos_xf) { logWarn(QString("RenderThread::run : no xform in request 0x%1").arg((long)job,0,16)); running_mutex.unlock(); continue; } logFiner(QString("RenderThread::run : rendering request 0x%1").arg((long)job,0,16)); rtype = job->name(); flame.time = job->time(); flame.ngenomes = job->numGenomes(); flam3_genome* genomes = new flam3_genome[flame.ngenomes](); flam3_genome* job_genome = job->genome(); for (int n = 0 ; n < flame.ngenomes ; n++) flam3_copy(genomes + n, job_genome + n); flame.genomes = genomes; QSize imgSize(job->size()); if (!imgSize.isEmpty()) { for (int n = 0 ; n < flame.ngenomes ; n++) { flam3_genome* genome = genomes + n; // scale images, previews, etc. if necessary int width = genome->width; genome->width = imgSize.width(); genome->height = imgSize.height(); // "rescale" the image scale to maintain the camera // for smaller/larger image size genome->pixels_per_unit /= ((double)width) / genome->width; } } // Load image quality settings for Image, Preview, and File types switch (job->type()) { case RenderRequest::File: rtype = QFileInfo(job->name()).fileName(); case RenderRequest::Image: case RenderRequest::Preview: case RenderRequest::Queued: { const flam3_genome* g = job->imagePresets(); if (g->nbatches > 0) // valid quality settings for nbatches > 0 for (int n = 0 ; n < flame.ngenomes ; n++) { flam3_genome* genome = genomes + n; genome->sample_density = g->sample_density; genome->spatial_filter_radius = g->spatial_filter_radius; genome->spatial_oversample = g->spatial_oversample; genome->nbatches = g->nbatches; genome->ntemporal_samples = g->ntemporal_samples; genome->estimator = g->estimator; genome->estimator_curve = g->estimator_curve; genome->estimator_minimum = g->estimator_minimum; } } default: ; } // add symmetry xforms before rendering for (int n = 0 ; n < flame.ngenomes ; n++) { flam3_genome* genome = genomes + n; if (genome->symmetry != 1) flam3_add_symmetry(genome, genome->symmetry); } int msize = channels * genomes->width * genomes->height; unsigned char* out = new unsigned char[msize]; unsigned char* head = out; logFine("RenderThread::run : allocated %d bytes, rendering...", msize); init_status_cb(); rendering = true; ptimer.start(); int rv = flam3_render(&flame, out, 0, channels, alpha_trans, &_stats); millis = ptimer.elapsed(); rendering = false; render_loop_flag = false; if (_stop_current_job) // if stopRendering() is called { logFine(QString("RenderThread::run : %1 rendering stopped").arg(rtype)); delete[] head; for (int n = 0 ; n < flame.ngenomes ; n++) clear_cp(genomes + n, flam3_defaults_off); delete[] genomes; if (kill_all_jobs) { preview_request = 0; image_request = 0; rqueue_mutex.lock(); request_queue.clear(); rqueue_mutex.unlock(); kill_all_jobs = false; emit flameRenderingKilled(); } else if (job->type() == RenderRequest::Queued) { logFine("RenderThread::run : re-adding queued request"); rqueue_mutex.lock(); request_queue.prepend(job); rqueue_mutex.unlock(); } _stop_current_job = false; running_mutex.unlock(); continue; } QSize buf_size(genomes->width, genomes->height); if (img_format == RGB32) { if (buf_size != img_buf.size()) img_buf = QImage(buf_size, QImage::Format_RGB32); if (rv == 0) { for (int h = 0 ; h < genomes->height ; h++) for (int w = 0 ; w < genomes->width ; w++, out += channels) img_buf.setPixel(QPoint(w, h), qRgb(out[0], out[1], out[2])); } else img_buf.fill(0); } else { if (buf_size != img_buf.size()) img_buf = QImage(buf_size, QImage::Format_ARGB32); if (rv == 0) { for (int h = 0 ; h < genomes->height ; h++) for (int w = 0 ; w < genomes->width ; w++, out += channels) img_buf.setPixel(QPoint(w, h), qRgba(out[0], out[1], out[2], out[3])); } else img_buf.fill(0); } delete[] head; for (int n = 0 ; n < flame.ngenomes ; n++) clear_cp(genomes + n, flam3_defaults_off); delete[] genomes; if (job->type() == RenderRequest::File) img_buf.save(job->name(), "png", 100); job->setImage(img_buf); job->setFinished(true); // look for a free event RenderEvent* event = 0; foreach (RenderEvent* e, event_list) if (e->accepted()) { e->accept(false); event = e; break; } if (!event) { logFinest(QString("RenderThread::run : adding event")); event = new RenderEvent(); event->accept(false); event_list.append(event); } logFiner(QString("RenderThread::run : event list size %1") .arg(event_list.size())); event->setRequest(job); emit flameRendered(event); logFiner(QString("RenderThread::run : finished")); running_mutex.unlock(); } logInfo("RenderThread::run : thread exiting"); } RenderStatus& RenderThread::getStatus() { status.Name = rtype; if (rendering) { status.State = RenderStatus::Busy; status.Type = current_request->type(); status.EstRemain = QTime::fromMSecsSinceStartOfDay((int)_est_remain); status.Percent = _percent_finished; } else if (kill_all_jobs || _stop_current_job) { status.State = RenderStatus::Killed; } else { status.State = RenderStatus::Idle; status.Runtime = QTime::fromMSecsSinceStartOfDay(millis); } return status; } bool RenderThread::isRendering() { return render_loop_flag && current_request; } /** * stops the current job and clears all remaining requests. */ void RenderThread::killAll() { if (render_loop_flag) { kill_all_jobs = true; _stop_current_job = true; } } /** * stop the current job and select the next request. */ void RenderThread::stopRendering() { if (render_loop_flag) _stop_current_job = true; } void RenderThread::start() { running = true; QThread::start(); } void RenderThread::stop() { running = false; preview_request = 0; image_request = 0; rqueue_mutex.lock(); request_queue.clear(); rqueue_mutex.unlock(); stopRendering(); } double RenderThread::finished() { return _percent_finished; } void RenderThread::render(RenderRequest* req) { logFiner(QString("RenderThread::render : req 0x%1").arg((long)req,0,16)); if (req->type() == RenderRequest::Preview) { preview_request = req; // rendering a preview preempts everything except files and previews if (isRendering()) switch (current_request->type()) { case RenderRequest::Image: case RenderRequest::Queued: stopRendering(); default: ; } } else if (req->type() == RenderRequest::Image) image_request = req; else if (request_queue.contains(req)) logWarn(QString("RenderThread::render : req 0x%1 already queued") .arg((long)req,0,16)); else { logFine("RenderThread::render : queueing req %#x", (long)req); req->setFinished(false); rqueue_mutex.lock(); request_queue.enqueue(req); rqueue_mutex.unlock(); } } void RenderThread::cancel(RenderRequest* req) { if (req->type() == RenderRequest::Queued) { rqueue_mutex.lock(); request_queue.removeAll(req); rqueue_mutex.unlock(); } else if (req->type() == RenderRequest::Preview) preview_request = 0; else if (req->type() == RenderRequest::Image) image_request = 0; else logWarn("RenderThread::cancel : unknown request type %d", (int)req->type()); } RenderThread::ImageFormat RenderThread::format() const { return img_format; } void RenderThread::setFormat(ImageFormat f) { img_format = f; if (f == RGB32) channels = 3; else { channels = 4; alpha_trans = ( f == ARGB32_OPAQUE ? 0 : 1 ); } } bool RenderThread::earlyClip() const { return flame.earlyclip == 1; } void RenderThread::setEarlyClip(bool t) { flame.earlyclip = ( t ? 1 : 0 ); } // Observer used by renderthread which notifies StatusWatchers StatusObserver::StatusObserver(StatusProvider* p) : running(true), provider(p) { } void StatusObserver::start() { running = true; QThread::start(); } void StatusObserver::run() { logInfo("StatusObserver::run : running"); while (running) { status = provider->getStatus() ; status.createMessage(); // only do this once per update emit statusUpdated(&status); usleep(250000); } } StatusProvider::~StatusProvider() { } QString RenderStatus::getMessage() { return message; } void RenderStatus::createMessage() { if (State == Busy) { QString t_format; if (EstRemain.hour() > 1) t_format = tr("hh:mm:ss"); else if (EstRemain.minute() > 1) t_format = tr("mm:ss"); else t_format = tr("s.z"); estRemainString = EstRemain.toString(t_format); message = tr("rendering... %L1% ( %2 remaining )") .arg(Percent, 0, 'f', 1, '0') .arg(estRemainString); } else if (State == Killed) message = tr("%1 rendering stopped").arg(Name); else { QString t_format; if (Runtime.hour() > 1) t_format = tr("hh:mm:ss.z"); else if (Runtime.minute() > 1) t_format = tr("mm:ss"); else { t_format = tr("s.z"); runtimeString = Runtime.toString(t_format); message = tr("%1 rendered in %2 seconds").arg(Name).arg(runtimeString); return; } runtimeString = Runtime.toString(t_format); message = tr("%1 rendered in %2").arg(Name).arg(runtimeString); } } QString RenderStatus::getEstRemain() { return estRemainString; } QString RenderStatus::getRuntime() { return runtimeString; } RenderStatus::RenderStatus() : QObject() { } RenderStatus::RenderStatus(const RenderStatus& c) : QObject() { *this = c; } RenderStatus& RenderStatus::operator=(const RenderStatus& c) { Name = c.Name; Type = c.Type; Runtime = c.Runtime; EstRemain = c.EstRemain; Percent = c.Percent; State = c.State; return *this; } // rendering events RenderEvent::RenderEvent() { m_request = 0; } RenderRequest* RenderEvent::request() const { return m_request; } void RenderEvent::setRequest(RenderRequest* r) { m_request = r; } void RenderEvent::accept(bool t) { m_accepted = t; } bool RenderEvent::accepted() const { return m_accepted; } // rendering requests RenderRequest::RenderRequest(flam3_genome* g, QSize s, QString n, Type t) : m_genome(g), m_genome_template(), m_time(0), m_ngenomes(1), m_type(t), m_size(s), m_name(n), m_finished(true) { } flam3_genome* RenderRequest::genome() const { return m_genome; } void RenderRequest::setGenome(flam3_genome* value) { m_genome = value; } flam3_genome* RenderRequest::imagePresets() { return &m_genome_template; } void RenderRequest::setImagePresets(flam3_genome value) { m_genome_template = value; } QSize RenderRequest::size() const { return m_size; } void RenderRequest::setSize(const QSize& value) { m_size = value; } QImage& RenderRequest::image() { QMutexLocker locker(&m_img_mutex); return m_image; } void RenderRequest::setImage(QImage& p) { QMutexLocker locker(&m_img_mutex); m_image = p; } QString RenderRequest::name() const { return m_name; } void RenderRequest::setName(const QString& value) { m_name = value; } RenderRequest::Type RenderRequest::type() const { return m_type; } void RenderRequest::setType(const Type& value) { m_type = value; } bool RenderRequest::finished() const { return m_finished; } void RenderRequest::setFinished(bool value) { m_finished = value; } double RenderRequest::time() const { return m_time; } void RenderRequest::setTime(double time) { m_time = time; } int RenderRequest::numGenomes() const { return m_ngenomes; } void RenderRequest::setNumGenomes(int n) { m_ngenomes = n; } RenderRequest* RenderThread::current() const { return current_request; } qosmic-1.6.0/src/renderthread.h000066400000000000000000000137241304321135200164210ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef RENDERTHREAD_H #define RENDERTHREAD_H #include #include #include #include #include #include #include "flam3util.h" /** * Clients submit a RenderRequest to the RenderThread which calls * flam3_render(). A RenderResponse is emitted from the RenderThread once the * requested work is completed. A RenderRequest's Type determines how the work * is scheduled in relation to other currently running requests. */ class RenderRequest { public: enum Type { Preview, Image, File, Queued } ; private: flam3_genome* m_genome; flam3_genome m_genome_template; double m_time; int m_ngenomes; Type m_type; QSize m_size; QString m_name; QImage m_image; bool m_finished; QMutex m_img_mutex; public: RenderRequest(flam3_genome* g=0, QSize s=QSize(), QString n=QString(), Type t=Queued); void setImagePresets(flam3_genome); flam3_genome* imagePresets(); void setGenome(flam3_genome*); flam3_genome* genome() const; void setTime(double); double time() const; void setNumGenomes(int); int numGenomes() const; void setType(const Type&); Type type() const; void setSize(const QSize&); QSize size() const; void setName(const QString&); QString name() const; void setImage(QImage&); QImage& image(); void setFinished(bool); bool finished() const; }; typedef QList RenderRequestList; /** * The RenderThread emits a RenderEvent once the work associated with a * RenderRequest has completed. */ class RenderEvent { RenderRequest* m_request; bool m_accepted; public: RenderEvent(); void accept(bool=true); bool accepted() const; void setRequest(RenderRequest*); RenderRequest* request() const; }; /** * Since the progress callback to flam3_render() uses C linkage, this helper * class allows a status message to be updated asynchronously. Implement this * to have the current status given to your class. */ class RenderStatus : public QObject { Q_OBJECT public: enum Flag { Busy, Killed, Idle } ; Flag State; RenderRequest::Type Type; QString Name; QTime Runtime; QTime EstRemain; double Percent; RenderStatus(); RenderStatus(const RenderStatus&); RenderStatus& operator=(const RenderStatus&); QString getMessage(); QString getEstRemain(); QString getRuntime(); void createMessage(); private: QString message; QString estRemainString; QString runtimeString; }; // The RenderThread is the StatusProvider class StatusProvider { public: virtual RenderStatus& getStatus() =0; virtual ~StatusProvider() =0 ; }; // The thread that moves StatusProvider info to the StatusWatchers class StatusObserver : public QThread { Q_OBJECT public: StatusObserver(StatusProvider*); void start(); void run(); bool running; StatusProvider* provider; RenderStatus status; signals: void statusUpdated(RenderStatus*); }; /** * This is the thread that schedules calls to the flam3_render() function. * RenderThread serializes all calls to flam3_render(). Clients are notified * when their jobs are finished. Clients submit a RenderRequest to this class, * and they catch RenderResponse signals when a job is complete. */ class RenderThread : public QThread, public StatusProvider { Q_OBJECT public: enum ImageFormat { RGB32, ARGB32_OPAQUE, ARGB32_TRANS } ; private: static bool _stop_current_job; static double _est_remain; static double _percent_finished; static stat_struct _stats; static QTime ptimer; static int _progress_callback(void*, double, int, double); static RenderThread* singleInstance; flam3_frame flame; RenderRequest* preview_request; RenderRequest* image_request; QList event_list; QQueue request_queue; QMutex rqueue_mutex; RenderRequest* current_request; RenderStatus status; QString msg; bool rendering; bool render_loop_flag; bool kill_all_jobs; QImage img_buf; StatusObserver* so; void init_status_cb(); int channels; int alpha_trans; int millis; ImageFormat img_format; QString rtype; RenderThread(); public: QMutex running_mutex; bool running; // flag to kill thread static RenderThread* getInstance(); ~RenderThread(); virtual void run(); RenderStatus& getStatus(); double finished(); bool isRendering(); void setFormat(ImageFormat); ImageFormat format() const; bool earlyClip() const; void setEarlyClip(bool); RenderRequest* current() const; void start(); void render(RenderRequest*); void cancel(RenderRequest*); public slots: void stopRendering(); void stop(); void killAll(); signals: void flameRenderingKilled(); void flameRendered(RenderEvent*); void statusUpdated(RenderStatus*); }; #endif qosmic-1.6.0/src/scripteditwidget.cpp000066400000000000000000000170341304321135200176610ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include "scripteditwidget.h" #include "mainwindow.h" #include "logger.h" ScriptEditWidget::ScriptEditWidget(MainWindow* m, QWidget* parent) : QWidget(parent), lua_thread(m) { setupUi ( this ); mw = m; QSettings s; s.beginGroup("scripteditwidget"); QFont font(s.value("editorfont", m_scriptEdit->currentFont()).value()); m_scriptEdit->setCurrentFont(font); m_scriptEdit->setPlainText(s.value("editortext", tr("print('hello world.')")).toString()); lua_thread.setLuaPaths(s.value("luapaths", lua_thread.luaPaths()).toString()); QTextCharFormat fmt(m_printOutputEdit->currentCharFormat()); fmt.setFont(font); m_printOutputEdit->setCurrentCharFormat(fmt); m_printOutputEdit->setMinimumHeight(10); QList sizes; sizes << 30 << 40; m_splitter->setSizes(sizes); m_splitter->restoreState(s.value("editorsplitters").toByteArray()); connect(m_runButton, SIGNAL(pressed()), this, SLOT(runButtonPressedAction())); connect(m_openButton, SIGNAL(clicked(bool)), m_scriptEdit, SLOT(load())); connect(m_saveButton, SIGNAL(clicked(bool)), m_scriptEdit, SLOT(save())); connect(m_saveAsButton, SIGNAL(clicked(bool)), m_scriptEdit, SLOT(saveAs())); connect(m_configButton, SIGNAL(clicked(bool)), this, SLOT(configPressedAction())); connect(m_scriptEdit, SIGNAL(scriptLoaded()), this, SLOT(scriptLoadedAction())); connect(m_scriptEdit, SIGNAL(scriptSaved()), this, SLOT(scriptSavedAction())); connect(m_scriptEdit, SIGNAL(cursorPositionChanged()), this, SLOT(updateCursorLabel())); connect(&lua_thread, SIGNAL(scriptFinished()), this, SLOT(scriptFinishedAction())); connect(&lua_thread, SIGNAL(scriptHasOutput(const QString&)), this, SLOT(appendScriptOutput(const QString&))); connect(&lua_thread, SIGNAL(scriptInputRequest(const QString&, const QString&)), this, SLOT(scriptInputDialog(const QString&, const QString&))); } void ScriptEditWidget::scriptInputDialog(const QString& prompt, const QString& text) { bool ok; QString response(QInputDialog::getText(this, tr("Script input request"), prompt, QLineEdit::Normal, text, &ok, Qt::Dialog)); lua_thread.scriptInputResponse(ok, response); } void ScriptEditWidget::updateCursorLabel() { QTextCursor c(m_scriptEdit->textCursor()); m_filenameEdit->setText(tr("row: %1, col: %2") .arg(c.blockNumber() + 1) .arg(c.columnNumber() + 1)); } void ScriptEditWidget::appendScriptOutput(const QString& out) { m_printOutputEdit->insertPlainText(out); m_printOutputEdit->ensureCursorVisible(); } void ScriptEditWidget::runButtonPressedAction() { if (lua_thread.isRunning()) stopScript(); else startScript(); } void ScriptEditWidget::startScript() { QSettings s; s.beginGroup("scripteditwidget"); QString text(m_scriptEdit->toPlainText()); lua_thread.setLuaText(text); s.setValue("editortext", text); logInfo("ScriptEditWidget::runScriptAction : running script"); m_filenameEdit->setText(tr("running script...")); m_printOutputEdit->clear(); lua_thread.start(); m_runButton->setIcon(QIcon(":icons/silk/stop.xpm")); } void ScriptEditWidget::stopScript() { logInfo("ScriptEditWidget::stopScript : signaling lua thread"); lua_thread.stopScript(); m_filenameEdit->setText(tr("script stopped")); m_runButton->setIcon(QIcon(":icons/silk/bullet_go.xpm")); } void ScriptEditWidget::scriptFinishedAction() { logInfo("ScriptEditWidget::scriptFinishedAction : finished script"); m_filenameEdit->setText(m_scriptEdit->scriptFile()); mw->scriptFinishedSlot(); m_filenameEdit->setText(QString(lua_thread.getMessage())); m_runButton->setIcon(QIcon(":icons/silk/bullet_go.xpm")); } void ScriptEditWidget::scriptLoadedAction() { m_filenameEdit->setText(m_scriptEdit->scriptFile()); } void ScriptEditWidget::scriptSavedAction() { m_filenameEdit->setText(tr("saved: %1") .arg(m_scriptEdit->scriptFile())); } void ScriptEditWidget::closeEvent(QCloseEvent* /*event*/) { logInfo("ScriptEditWidget::closeEvent : saving settings"); QSettings s; s.beginGroup("scripteditwidget"); s.setValue("editorsplitters", m_splitter->saveState()); } ScriptEditWidget::~ScriptEditWidget() { } void ScriptEditWidget::loadScript(const QString& path) { m_scriptEdit->load(path); } void ScriptEditWidget::configPressedAction() { ScriptEditConfigDialog d(this); d.setFont(m_scriptEdit->currentFont()); d.setLuaEnvText(lua_thread.luaPaths()); d.move(m_configButton->mapToGlobal(QPoint(0, 0)) - QPoint(d.frameGeometry().width(), 0)); if (d.exec() == QDialog::Accepted) { QFont f(d.getFont()); QString paths(d.getLuaEnvText()); QSettings s; s.beginGroup("scripteditwidget"); s.setValue("editorfont", f); s.setValue("luapaths", paths); m_scriptEdit->setCurrentFont(f); QTextCharFormat fmt(m_printOutputEdit->currentCharFormat()); fmt.setFont(f); m_printOutputEdit->selectAll(); m_printOutputEdit->setCurrentCharFormat(fmt); QTextCursor cursor(m_printOutputEdit->textCursor()); cursor.clearSelection(); m_printOutputEdit->setTextCursor(cursor); lua_thread.setLuaPaths(paths); } } ScriptEditConfigDialog::ScriptEditConfigDialog(QWidget* parent) : QDialog(parent) { setupUi(this); connect(fontSelectBox, SIGNAL(currentFontChanged(const QFont&)), this, SLOT(fontSelectBoxChanged(const QFont&))); } void ScriptEditConfigDialog::changeEvent(QEvent* e) { QDialog::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: retranslateUi(this); break; default: break; } } void ScriptEditConfigDialog::setFont(const QFont& f) { cur_size = QString::number(f.pointSize()); fontSelectBox->setCurrentFont(f); } QFont ScriptEditConfigDialog::getFont() const { QFont f(fontSelectBox->currentFont()); f.setPointSize(fontSizeBox->currentText().toInt()); return f; } void ScriptEditConfigDialog::setLuaEnvText(const QString& text) { plainTextEdit->setPlainText(text); } QString ScriptEditConfigDialog::getLuaEnvText() const { return plainTextEdit->toPlainText(); } void ScriptEditConfigDialog::fontSelectBoxChanged(const QFont& f) { QString size = fontSizeBox->currentText(); if (!size.isEmpty()) cur_size = size; QList sizes = fonts.pointSizes(f.family()); fontSizeBox->clear(); foreach (int i, sizes) fontSizeBox->addItem(QString::number(i)); fontSizeBox->setCurrentIndex(qMax(0, fontSizeBox->findText(cur_size))); } bool ScriptEditWidget::isScriptRunning() const { return lua_thread.isRunning(); } qosmic-1.6.0/src/scripteditwidget.h000066400000000000000000000051201304321135200173170ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef SCRIPTEDITWIDGET_H #define SCRIPTEDITWIDGET_H #include "ui_scripteditwidget.h" #include "lua/luathread.h" class MainWindow; class ScriptEditWidget : public QWidget, private Ui::ScriptEditWidget { Q_OBJECT QString script_filename; Lua::LuaThread lua_thread; MainWindow* mw; public: ScriptEditWidget(MainWindow* m, QWidget *parent = 0); ~ScriptEditWidget(); bool isScriptRunning() const; public slots: void startScript(); void stopScript(); void scriptFinishedAction(); void scriptLoadedAction(); void scriptSavedAction(); void loadScript(const QString&); void scriptInputDialog(const QString&, const QString&); protected slots: void runButtonPressedAction(); void updateCursorLabel(); void appendScriptOutput(const QString&); void configPressedAction(); protected: void closeEvent(QCloseEvent*); }; #include "ui_scripteditconfigdialog.h" class ScriptEditConfigDialog : public QDialog, private Ui::ScriptEditConfigDialog { Q_OBJECT QFontDatabase fonts; QString cur_size; public: explicit ScriptEditConfigDialog(QWidget* =0); void setFont(const QFont&); QFont getFont() const; void setLuaEnvText(const QString&); QString getLuaEnvText() const; protected slots: void fontSelectBoxChanged(const QFont&); protected: void changeEvent(QEvent*); }; #endif qosmic-1.6.0/src/selectgenomewidget.cpp000066400000000000000000000151301304321135200201540ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include #include "qosmic.h" #include "selectgenomewidget.h" #include "viewerpresetsmodel.h" #include "flam3filestream.h" #include "logger.h" SelectGenomeWidget::SelectGenomeWidget(GenomeVector* g, QWidget* parent) : QWidget(parent), QosmicWidget(this, "SelectGenomeWidget"), genomes(g) { setupUi(this); connect(m_addButton, SIGNAL(pressed()), this, SLOT(addButtonPressedSlot())); connect(m_deleteButton, SIGNAL(pressed()), this, SLOT(delButtonPressedSlot())); connect(m_clearTrianglesButton, SIGNAL(pressed()), this, SLOT(clearTrianglesButtonPressedSlot())); connect(m_configButton, SIGNAL(clicked(bool)), this, SLOT(configButtonPressedSlot())); m_genomesListView->setModel(genomes); m_genomesListView->setGridSize(genomes->previewSize() + QSize(4,4)); connect(m_genomesListView, SIGNAL(clicked(const QModelIndex&)), this, SLOT(listViewClickedAction(const QModelIndex&))); connect(m_genomesListView, SIGNAL(genomesModified()), this, SIGNAL(genomesModified())); } void SelectGenomeWidget::listViewClickedAction(const QModelIndex& idx) { int row(idx.row()); if (row != genomes->selected()) { logFine("SelectGenomeWidget::genomeSelectedAction : genome %d selected", row + 1); genomes->setSelected(row); emit genomeSelected(row); } } void SelectGenomeWidget::setSelectedGenome(int n) { logInfo("SelectGenomeWidget::setSelectedGenome : selecting genome %d", n); genomes->setSelected(n); m_genomesListView->setCurrentIndex(genomes->index(n)); emit genomeSelected(n); } void SelectGenomeWidget::reset() { logFine("SelectGenomeWidget::reset : genomes %d", genomes->size()); if (genomes->size() > 0) { double ltime = -1.0; for (int i = 0 ; i < genomes->size() ; i++) { flam3_genome* g = genomes->data() + i; if ( g->time <= ltime ) // "normalize" the flam3_genome.time attributes. g->time = ltime + 1.0; ltime = g->time; } m_genomesListView->selectionModel()->setCurrentIndex(genomes->selectedIndex(), QItemSelectionModel::ClearAndSelect); } } void SelectGenomeWidget::addButtonPressedSlot() { int lastIdx = genomes->rowCount() - 1; double ltime = (genomes->data() + lastIdx)->time; if (genomes->appendRow()) { lastIdx += 1; (genomes->data() + lastIdx)->time = ltime + 1.0; Flam3FileStream::autoSave(genomes); m_genomesListView->scrollTo(genomes->selectedIndex()); } } void SelectGenomeWidget::delButtonPressedSlot() { if (genomes->size() <= 1) // don't remove the only genome, just clear it clearTrianglesButtonPressedSlot(); else { int idx = genomes->selected(); if (genomes->removeRow(idx)) { emit genomesModified(); Flam3FileStream::autoSave(genomes); } } } void SelectGenomeWidget::configButtonPressedSlot() { SelectGenomeConfigDialog d(this); QSize l_size(genomes->previewSize()); QString l_preset(genomes->previewPreset()); GenomeVector::AutoSave l_save(genomes->autoSave()); d.setPreviewSize(l_size); d.setPreset(l_preset); d.setAutoSave(l_save); d.move(QCursor::pos()); d.exec(); QSize s = d.previewSize(); QString p = d.preset(); GenomeVector::AutoSave a = d.autoSave(); if (a != l_save) { genomes->setAutoSave(a); if (a == GenomeVector::NeverSave) { QFile asFile(QOSMIC_AUTOSAVE); if (asFile.exists() && !asFile.remove()) QMessageBox::warning(this, tr("Error"), tr("Couldn't remove %1: %2") .arg(asFile.fileName()).arg(asFile.errorString())); } } bool render = false; if (s != l_size) { genomes->setPreviewSize(s); m_genomesListView->setGridSize(s + QSize(4,4)); render = true; } if (p != l_preset) { genomes->setPreviewPreset(p); render = true; } if (render) { genomes->updatePreviews(); m_genomesListView->reset(); } } void SelectGenomeWidget::clearTrianglesButtonPressedSlot() { int idx = genomes->selected(); flam3_genome* g = genomes->data() + idx; if (g && g->xform && g->num_xforms > 0) { while (g->num_xforms > 0) flam3_delete_xform(g, g->num_xforms - 1); UndoState* state = genomes->undoRing(idx)->advance(); flam3_copy(&(state->Genome), g); genomes->updatePreview(idx); Flam3FileStream::autoSave(genomes); emit genomesModified(); } } //------------------------------------------------------------------------------------------- SelectGenomeConfigDialog::SelectGenomeConfigDialog(QWidget* parent) : QDialog(parent) { setupUi(this); qualityComboBox->setModel(ViewerPresetsModel::getInstance()); } void SelectGenomeConfigDialog::setPreviewSize(const QSize& size) { sizewLineEdit->updateValue(size.width()); sizehLineEdit->updateValue(size.height()); } QSize SelectGenomeConfigDialog::previewSize() const { return QSize(sizewLineEdit->value(), sizehLineEdit->value()); } QString SelectGenomeConfigDialog::preset() const { return qualityComboBox->currentText(); } void SelectGenomeConfigDialog::setPreset(const QString& s) { qualityComboBox->setCurrentIndex(qualityComboBox->findText(s)); } GenomeVector::AutoSave SelectGenomeConfigDialog::autoSave() const { return (GenomeVector::AutoSave)asComboBox->currentIndex(); } void SelectGenomeConfigDialog::setAutoSave(const GenomeVector::AutoSave s) { asComboBox->setCurrentIndex(s); } void SelectGenomeWidget::showEvent(QShowEvent* e) { if (!e->spontaneous()) genomes->usingPreviews(true); } void SelectGenomeWidget::hideEvent(QHideEvent* e) { if (!e->spontaneous()) genomes->usingPreviews(false); } qosmic-1.6.0/src/selectgenomewidget.h000066400000000000000000000047351304321135200176320ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef SELECTGENOMEWIDGET_H #define SELECTGENOMEWIDGET_H #include #include "ui_selectgenomewidget.h" #include "genomevector.h" #include "qosmicwidget.h" class SelectGenomeWidget : public QWidget, public QosmicWidget, private Ui::SelectGenomeWidget { Q_OBJECT public: SelectGenomeWidget(GenomeVector*, QWidget* parent=0); void setSelectedGenome(int); void reset(); signals: void genomeSelected(int); void genomesModified(); protected slots: void addButtonPressedSlot(); void delButtonPressedSlot(); void configButtonPressedSlot(); void clearTrianglesButtonPressedSlot(); void listViewClickedAction(const QModelIndex& idx); protected: void showEvent(QShowEvent*); void hideEvent(QHideEvent*); private: GenomeVector* genomes; }; #include "ui_selectgenomeconfigdialog.h" class SelectGenomeConfigDialog : public QDialog, private Ui::SelectGenomeConfigDialog { Q_OBJECT public: SelectGenomeConfigDialog(QWidget* parent=0); void setPreviewSize(const QSize& size); QSize previewSize() const; void setPreset(const QString &s); QString preset() const; void setAutoSave(const GenomeVector::AutoSave); GenomeVector::AutoSave autoSave() const; }; #endif qosmic-1.6.0/src/selecttrianglewidget.cpp000066400000000000000000000103321304321135200205060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "selecttrianglewidget.h" #define genome_ptr (genome->selectedGenome()) SelectTriangleWidget::SelectTriangleWidget(GenomeVector* g, QWidget* parent) : QWidget(parent), QosmicWidget(this, "SelectTriangleWidget") ,genome(g) { setupUi(this); // restore (Double/Int)ValueEditor settings m_densLineEdit->restoreSettings(); m_densLineEdit->setWheelEventUpdate(true); connect(m_selectedTriangleBox, SIGNAL(currentIndexChanged(int)), this, SLOT(triangleSelectedSlot(int))); connect(m_densLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldEditedAction())); connect(m_densLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_addTriangleButton, SIGNAL(pressed()), this, SLOT(addTriangleAction())); connect(m_delTriangleButton, SIGNAL(pressed()), this, SLOT(delTriangleAction())); connect(m_finalButton, SIGNAL(clicked(bool)), this, SLOT(finalStateChangedSlot(bool))); } SelectTriangleWidget::~SelectTriangleWidget() { } // this one is supposed is be called externally void SelectTriangleWidget::triangleSelectedSlot(Triangle* t) { selectedTriangle = t; triangleScene = dynamic_cast(selectedTriangle->scene()); m_selectedTriangleBox->blockSignals(true); int num_triangles = triangleScene->getNumberOfTriangles(); int count = m_selectedTriangleBox->count(); m_selectedTriangleBox->setMaxCount(num_triangles); while (count < num_triangles) m_selectedTriangleBox->addItem(QString::number(count++ + 1)); m_selectedTriangleBox->setCurrentIndex(triangleScene->selectedTriangleIndex()); m_selectedTriangleBox->blockSignals(false); reset(); } // and this one is connected to the doublevalueeditor void SelectTriangleWidget::triangleSelectedSlot(int /*idx*/) { triangleScene->selectTriangle(m_selectedTriangleBox->currentIndex()); } void SelectTriangleWidget::reset() { m_densLineEdit->updateValue(selectedTriangle->xform()->density); m_densLineEdit->setEnabled(selectedTriangle->index() != genome_ptr->final_xform_index); m_finalButton->setChecked(genome_ptr->final_xform_enable); } void SelectTriangleWidget::fieldEditedAction() { selectedTriangle->xform()->density = m_densLineEdit->value(); emit dataChanged(); } void SelectTriangleWidget::addTriangleAction() { triangleScene->addTriangleAction(); } void SelectTriangleWidget::delTriangleAction() { triangleScene->removeTriangleAction(); } void SelectTriangleWidget::finalStateChangedSlot(bool checked) { bool hasFinal = genome_ptr->final_xform_enable; bool finalSelected = (genome_ptr->final_xform_index == triangleScene->selectedTriangleIndex()); if (checked) triangleScene->enableFinalXform(true); else { if (hasFinal) { if (!finalSelected) { triangleScene->selectTriangle(genome_ptr->final_xform_index); m_finalButton->setChecked(true); } else { triangleScene->enableFinalXform(false); m_finalButton->setChecked(false); } } else { triangleScene->enableFinalXform(true); m_finalButton->setChecked(true); } } } qosmic-1.6.0/src/selecttrianglewidget.h000066400000000000000000000040141304321135200201530ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef SELECTTRIANGLEWIDGET_H #define SELECTTRIANGLEWIDGET_H #include "ui_selecttrianglewidget.h" #include "qosmicwidget.h" #include "xfedit.h" class SelectTriangleWidget : public QWidget, public QosmicWidget, private Ui::SelectTriangleWidget { Q_OBJECT Triangle* selectedTriangle; FigureEditor* triangleScene; GenomeVector* genome; public: SelectTriangleWidget(GenomeVector*, QWidget* =0); ~SelectTriangleWidget(); signals: void dataChanged(); void undoStateSignal(); public slots: void triangleSelectedSlot(Triangle* t); void reset(); protected slots: void fieldEditedAction(); void triangleSelectedSlot(int); void addTriangleAction(); void delTriangleAction(); void finalStateChangedSlot(bool); }; #endif qosmic-1.6.0/src/sheeploopwidget.cpp000066400000000000000000000677731304321135200175240ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include "sheeploopwidget.h" #include "mainpreviewwidget.h" #include "logger.h" //------------------------------------------------------------------------------ MotionViewVarItemEditor::MotionViewVarItemEditor(const MotionViewItemDelegate* d, QWidget* p) : QComboBox(p), m_delegate(d) { QStringList items; items << tr("animate") << tr("color") << tr("color_speed") << tr("density") << tr("opacity"); foreach (QString s, Util::variation_names()) items << tr("var: ") + s; foreach (QString s, Util::get_variable_names()) items << tr("par: ") + s; items << tr("xform: a") << tr("xform: b") << tr("xform: c") << tr("xform: d") << tr("xform: e") << tr("xform: f") << tr("post: a") << tr("post: b") << tr("post: c") << tr("post: d") << tr("post: e") << tr("post: f"); addItems(items); connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(comboBoxCurrentIndexChanged(int))); } void MotionViewVarItemEditor::comboBoxCurrentIndexChanged(int /*idx*/) { QTableView* view = m_delegate->view(); m_delegate->setModelData(this, view->model(), view->currentIndex()); } //------------------------------------------------------------------------------ MotionViewFunctionItemEditor::MotionViewFunctionItemEditor(const MotionViewItemDelegate* d, QWidget* p) : QComboBox(p), m_delegate(d) { addItems(QStringList() << tr("sin") << tr("hill") << tr("triangle")); connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(comboBoxCurrentIndexChanged(int))); } void MotionViewFunctionItemEditor::comboBoxCurrentIndexChanged(int /*idx*/) { QTableView* view = m_delegate->view(); m_delegate->setModelData(this, view->model(), view->currentIndex()); } //------------------------------------------------------------------------------ MotionViewIntItemEditor::MotionViewIntItemEditor(const MotionViewItemDelegate* d, QWidget* p) : IntValueEditor(p), m_delegate(d) { setMinimum(1); connect(this, SIGNAL(valueUpdated()), this, SLOT(spinnerValueChanged())); } void MotionViewIntItemEditor::spinnerValueChanged() { QTableView* view = m_delegate->view(); m_delegate->setModelData(this, view->model(), view->currentIndex()); } //------------------------------------------------------------------------------ MotionViewDoubleItemEditor::MotionViewDoubleItemEditor(const MotionViewItemDelegate* d, QWidget* p) : DoubleValueEditor(p), m_delegate(d) { setDecimals(3); setMinimum(0.001); setSingleStep(0.1); connect(this, SIGNAL(valueUpdated()), this, SLOT(spinnerValueChanged())); } void MotionViewDoubleItemEditor::spinnerValueChanged() { QTableView* view = m_delegate->view(); m_delegate->setModelData(this, view->model(), view->currentIndex()); } //------------------------------------------------------------------------------ MotionViewItemDelegate::MotionViewItemDelegate(QTableView* parent) : QStyledItemDelegate(parent), m_tableview(parent) { } QTableView* MotionViewItemDelegate::view() const { return m_tableview; } QWidget* MotionViewItemDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const { if (index.column() == 0) return new MotionViewVarItemEditor(this, parent); else if (index.column() == 1) return new MotionViewDoubleItemEditor(this, parent); else if (index.column() == 2) return new MotionViewFunctionItemEditor(this, parent); else if (index.column() == 3) return new MotionViewIntItemEditor(this, parent); else logWarn("MotionViewItemDelegate::createEditor : no editor created"); return QStyledItemDelegate::createEditor(parent, option, index); } void MotionViewItemDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const { if ((index.column() == 0 || index.column() == 2) && editor->inherits("QComboBox")) { QComboBox* box = qobject_cast(editor); box->setCurrentIndex(box->findText(index.data().toString(), Qt::MatchEndsWith | Qt::MatchCaseSensitive)); } else if (index.column() == 1 && editor->inherits("QAbstractSpinBox")) { DoubleValueEditor* e = qobject_cast(editor); e->setValue(qMax(0.001, index.data().toDouble())); } else if (index.column() == 3 && editor->inherits("QAbstractSpinBox")) { IntValueEditor* e = qobject_cast(editor); e->setValue(qMax(1, index.data().toInt())); } else logWarn(QString("MotionViewItemDelegate::setEditorData : unknown editor %1") .arg(editor->objectName())); } void MotionViewItemDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index ) const { logFine(QString("MotionViewItemDelegate::setModelData : %1,%2").arg(index.row()).arg(index.column())); QStandardItemModel* m = qobject_cast(model); if (index.column() == 0 || index.column() == 2) { QComboBox* box = qobject_cast(editor); m->itemFromIndex(index)->setText(box->currentText()); } else if (index.column() == 1) { DoubleValueEditor* e = qobject_cast(editor); m->itemFromIndex(index)->setText(QString::number(e->value())); } else if (index.column() == 3) { IntValueEditor* e = qobject_cast(editor); m->itemFromIndex(index)->setText(QString::number(e->value())); } } //------------------------------------------------------------------------------ SheepLoopWidget::SheepLoopWidget(GenomeVector* gv, QWidget* parent) : QWidget(parent), QosmicWidget(this, objectName()), genomes(gv), running(false) { setupUi(this); connect(m_runToolButton, SIGNAL(clicked()), this, SLOT(runSheepButtonAction())); connect(m_saveToolButton, SIGNAL(clicked()), this, SIGNAL(saveSheepLoop())); connect(m_beginBox, SIGNAL(currentIndexChanged(int)), this, SLOT(beginBoxIndexChanged(int))); connect(m_endBox, SIGNAL(currentIndexChanged(int)), this, SLOT(endBoxIndexChanged(int))); connect(m_temporalSamplesEditor, SIGNAL(valueUpdated()), this, SLOT(temporalSamplesUpdated())); connect(m_animateButton, SIGNAL(clicked(bool)), this, SLOT(xformAnimateButtonClicked(bool))); QStandardItemModel* model = new QStandardItemModel(0, 4); m_motionElementsView->setModel(model); m_motionElementsView->setItemDelegate(new MotionViewItemDelegate(m_motionElementsView)); m_beginBox->setModel(gv); m_endBox->setModel(gv); m_genomeIdxBox->setModel(gv); qobject_cast(m_beginBox->view())->setSpacing(2); qobject_cast(m_endBox->view())->setSpacing(2); qobject_cast(m_genomeIdxBox->view())->setSpacing(2); connect(m_addToolButton, SIGNAL(clicked()), this, SLOT(addNewMotionElement())); connect(m_delToolButton, SIGNAL(clicked()), this, SLOT(delCurrentMotionElement())); connect(m_xformIdxBox, SIGNAL(currentIndexChanged(int)), this, SLOT(xformIdxBoxIndexChanged(int))); connect(m_genomeIdxBox, SIGNAL(currentIndexChanged(int)), this, SLOT(genomeSelectedSlot(int))); connect(m_animateModeBox, SIGNAL(currentIndexChanged(int)), this, SLOT(modeBoxIndexChanged(int))); connect(m_temporalFilterComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(temporalFilterTypeIndexChanged(int))); connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(tabWidgetIndexChanged(int))); connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(motionItemChanged(QStandardItem*))); } void SheepLoopWidget::xformIdxBoxIndexChanged(int idx) { int genome_idx = qMax(0, m_genomeIdxBox->currentIndex()); flam3_genome* genome = genomes->data() + genome_idx; if (!genome || idx >= genome->num_xforms || genome_idx < 0 || genome_idx >= genomes->size()) { logWarn("SheepLoopWidget::xformIdxBoxIndexChanged : no xform %d in genome %d", idx, genome_idx); return; } QStandardItemModel* model = qobject_cast(m_motionElementsView->model()); disconnect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(motionItemChanged(QStandardItem*))); flam3_xform* xform = genome->xform + idx; m_animateButton->setChecked(xform->animate); model->clear(); model->setHorizontalHeaderLabels(QStringList() << tr("element") << tr("value") << tr("function") << tr("frequency")); connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(motionItemChanged(QStandardItem*))); for (int n = 0 ; n < xform->num_motion ; n++) { int m_idx = n; flam3_xform* motion = xform->motion + m_idx; int var_idx = -1; for (int i = 0 ; i < flam3_nvariations ; i++) if (motion->var[i] != 0.0) { var_idx = i; break; } if (var_idx != -1) { model->setItem(n, 0, new QStandardItem(tr("var: ") + Util::variation_names().at(var_idx))); model->setItem(n, 1, new QStandardItem(QString::number(motion->var[var_idx]))); } else { bool found_val = false; foreach(QString s, Util::get_variable_names()) { double val = Util::get_xform_variable(motion, s); if (val != 0.0) { model->setItem(n, 0, new QStandardItem(tr("par: ") + s)); model->setItem(n, 1, new QStandardItem(QString::number(val))); found_val = true; break; } } if (!found_val) { if (motion->animate != 0.0) { model->setItem(n, 0, new QStandardItem(tr("animate"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->animate))); } else if (motion->color != 0.0) { model->setItem(n, 0, new QStandardItem(tr("color"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->color))); } else if (motion->color_speed != 0.0) { model->setItem(n, 0, new QStandardItem(tr("color_speed"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->color_speed))); } else if (motion->density != 0.0) { model->setItem(n, 0, new QStandardItem(tr("density"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->density))); } else if (motion->opacity != 0.0) { model->setItem(n, 0, new QStandardItem(tr("opacity"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->opacity))); } else if (motion->c[0][0] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("xform: a"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->c[0][0]))); } else if (motion->c[1][0] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("xform: b"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->c[1][0]))); } else if (motion->c[2][0] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("xform: c"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->c[2][0]))); } else if (motion->c[0][1] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("xform: d"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->c[0][1]))); } else if (motion->c[1][1] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("xform: e"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->c[1][1]))); } else if (motion->c[2][1] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("xform: f"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->c[2][1]))); } else if (motion->post[0][0] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("post: a"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->post[0][0]))); } else if (motion->post[1][0] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("post: b"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->post[1][0]))); } else if (motion->post[2][0] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("post: c"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->post[2][0]))); } else if (motion->post[0][1] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("post: d"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->post[0][1]))); } else if (motion->post[1][1] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("post: e"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->post[1][1]))); } else if (motion->post[2][1] != 0.0) { model->setItem(n, 0, new QStandardItem(tr("post: f"))); model->setItem(n, 1, new QStandardItem(QString::number(motion->post[2][1]))); } } } if (motion->motion_func == MOTION_SIN) model->setItem(n, 2, new QStandardItem(tr("sin"))); else if (motion->motion_func == MOTION_HILL) model->setItem(n, 2, new QStandardItem(tr("hill"))); else model->setItem(n, 2, new QStandardItem(tr("triangle"))); model->setItem(n, 3, new QStandardItem(QString::number(motion->motion_freq))); } m_motionElementsView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); m_motionElementsView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); } void SheepLoopWidget::motionItemChanged(QStandardItem* item) { int xf_idx = m_xformIdxBox->currentIndex(); int genome_idx = m_genomeIdxBox->currentIndex(); flam3_genome* genome = genomes->data() + genome_idx; flam3_xform* xform = genome->xform + xf_idx; int row = item->row(); int col = item->column(); logFine(QString("SheepLoopWidget::motionItemChanged %1,%2").arg(row).arg(col)); flam3_xform* motion = xform->motion + row; QStandardItemModel* model = qobject_cast(m_motionElementsView->model()); if (col == 0) { QStandardItem* i = model->item(row, 1); if (i) { flam3_xform tmp = *motion; memset(motion, 0, sizeof(flam3_xform)); QString name = item->text(); double value = i->data(Qt::DisplayRole).toDouble(); if (name.startsWith(tr("var: "))) { name = name.remove(0,5); logFine(QString("SheepLoopWidget::motionItemChanged setting var '%1'").arg(name)); motion->var[Util::flam3_variations().value(name)] = value; } else if (name.startsWith(tr("par: "))) { name = name.remove(0,5); Util::set_xform_variable(motion, name, value); } else if (name == tr("animate")) motion->animate = value; else if (name == tr("color")) motion->color = value; else if (name == tr("color_speed")) motion->color_speed = value; else if (name == tr("density")) motion->density = value; else if (name == tr("opacity")) motion->opacity = value; else if (name == tr("xform: a")) motion->c[0][0] = value; else if (name == tr("xform: b")) motion->c[1][0] = value; else if (name == tr("xform: c")) motion->c[2][0] = value; else if (name == tr("xform: d")) motion->c[0][1] = value; else if (name == tr("xform: e")) motion->c[1][1] = value; else if (name == tr("xform: f")) motion->c[2][1] = value; else if (name == tr("post: a")) motion->post[0][0] = value; else if (name == tr("post: b")) motion->post[1][0] = value; else if (name == tr("post: c")) motion->post[2][0] = value; else if (name == tr("post: d")) motion->post[0][1] = value; else if (name == tr("post: e")) motion->post[1][1] = value; else if (name == tr("post: f")) motion->post[2][1] = value; else logWarn(QString("SheepLoopWidget::motionItemChanged : unknown element %1").arg(name)); motion->motion_func = tmp.motion_func; motion->motion_freq = tmp.motion_freq; } } else if (col == 1) { QStandardItem* i = model->item(row, 0); if (i) { flam3_xform tmp = *motion; memset(motion, 0, sizeof(flam3_xform)); QString name = i->text(); double value = item->data(Qt::DisplayRole).toDouble(); if (name.startsWith(tr("var: "))) { name = name.remove(0,5); logFine(QString("SheepLoopWidget::motionItemChanged setting var '%1'").arg(name)); motion->var[Util::flam3_variations().value(name)] = value; } else if (name.startsWith(tr("par: "))) { name = name.remove(0,5); Util::set_xform_variable(motion, name, value); } else if (name == tr("animate")) motion->animate = value; else if (name == tr("color")) motion->color = value; else if (name == tr("color_speed")) motion->color_speed = value; else if (name == tr("density")) motion->density = value; else if (name == tr("opacity")) motion->opacity = value; else if (name == tr("xform: a")) motion->c[0][0] = value; else if (name == tr("xform: b")) motion->c[1][0] = value; else if (name == tr("xform: c")) motion->c[2][0] = value; else if (name == tr("xform: d")) motion->c[0][1] = value; else if (name == tr("xform: e")) motion->c[1][1] = value; else if (name == tr("xform: f")) motion->c[2][1] = value; else if (name == tr("post: a")) motion->post[0][0] = value; else if (name == tr("post: b")) motion->post[1][0] = value; else if (name == tr("post: c")) motion->post[2][0] = value; else if (name == tr("post: d")) motion->post[0][1] = value; else if (name == tr("post: e")) motion->post[1][1] = value; else if (name == tr("post: f")) motion->post[2][1] = value; else logWarn(QString("SheepLoopWidget::motionItemChanged : unknown element %1").arg(name)); motion->motion_func = tmp.motion_func; motion->motion_freq = tmp.motion_freq; } } else if (col == 2) { QString m_func = item->text(); if (m_func == tr("sin")) motion->motion_func = MOTION_SIN; else if (m_func == tr("hill")) motion->motion_func = MOTION_HILL; else motion->motion_func = MOTION_TRIANGLE; } else motion->motion_freq = item->data(Qt::DisplayRole).toInt(); } void SheepLoopWidget::addNewMotionElement() { logFine("SheepLoopWidget::addNewMotionElement : "); int idx = m_xformIdxBox->currentIndex(); int genome_idx = m_genomeIdxBox->currentIndex(); flam3_genome* genome = genomes->data() + genome_idx; flam3_xform* xform = genome->xform + idx; flam3_add_motion_element(xform); QStandardItemModel* model = qobject_cast(m_motionElementsView->model()); int row = model->rowCount(); model->setItem(row, 0, new QStandardItem(tr("var: linear"))); model->setItem(row, 1, new QStandardItem("1")); model->setItem(row, 2, new QStandardItem(tr("sin"))); model->setItem(row, 3, new QStandardItem("1")); } void SheepLoopWidget::delCurrentMotionElement() { logFine("SheepLoopWidget::delCurrentMotionElement : "); QModelIndex idx = m_motionElementsView->currentIndex(); if (idx.isValid()) { int xf_idx = m_xformIdxBox->currentIndex(); int genome_idx = m_genomeIdxBox->currentIndex(); flam3_genome* genome = genomes->data() + genome_idx; flam3_xform* xform = genome->xform + xf_idx; int row = idx.row(); flam3_xform* motion = xform->motion; int last_motion = xform->num_motion - 1; for (int n = row ; n < last_motion ; n++) *(motion + n) = *(motion + n + 1); xform->num_motion -= 1; xform->motion = (struct xform*)realloc(motion, xform->num_motion * sizeof(struct xform)); xformIdxBoxIndexChanged(xf_idx); QStandardItemModel* model = qobject_cast(m_motionElementsView->model()); m_motionElementsView->setCurrentIndex(model->index(model->rowCount() - 1, 0)); } } void SheepLoopWidget::changeEvent(QEvent *e) { QWidget::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: retranslateUi(this); break; default: break; } } void SheepLoopWidget::genomeSelectedSlot(int idx) { m_genomeIdxBox->blockSignals(true); m_genomeIdxBox->setCurrentIndex(idx); m_genomeIdxBox->blockSignals(false); genomesModifiedSlot(); } void SheepLoopWidget::genomesModifiedSlot() { if (!isVisible()) return; if (m_beginBox->currentIndex() > m_endBox->currentIndex()) { m_endBox->blockSignals(true); m_endBox->setCurrentIndex(m_beginBox->currentIndex()); m_endBox->blockSignals(false); } m_temporalFilterGroupBox->setEnabled(m_temporalSamplesEditor->value() != 1); int g_idx = m_genomeIdxBox->currentIndex(); if (genomes->size() > 0 && 0 <= g_idx && g_idx < genomes->size()) { m_xformIdxBox->blockSignals(true); int idx = m_xformIdxBox->currentIndex(); m_xformIdxBox->clear(); int n_xforms = (genomes->data () + g_idx)->num_xforms; QStringList idxs; for (int i = 1 ; i <= n_xforms ; i++) idxs << QString::number(i); m_xformIdxBox->addItems(idxs); if (idx >= 0 && idx < m_xformIdxBox->count()) { m_xformIdxBox->setCurrentIndex(idx); xformIdxBoxIndexChanged(idx); } else xformIdxBoxIndexChanged(0); m_xformIdxBox->blockSignals(false); } } void SheepLoopWidget::endBoxIndexChanged(int /*idx*/) { if (m_beginBox->currentIndex() > m_endBox->currentIndex()) { m_beginBox->blockSignals(true); m_beginBox->setCurrentIndex(m_endBox->currentIndex()); m_beginBox->blockSignals(false); } } void SheepLoopWidget::beginBoxIndexChanged(int /*idx*/) { if (m_beginBox->currentIndex() > m_endBox->currentIndex()) { m_endBox->blockSignals(true); m_endBox->setCurrentIndex(m_beginBox->currentIndex()); m_endBox->blockSignals(false); } } void SheepLoopWidget::runSheepButtonAction() { running = !running; if (running) m_runToolButton->setIcon(QIcon(":/icons/silk/stop.xpm")); else m_runToolButton->setIcon(QIcon(":/icons/silk/bullet_go.xpm")); emit runSheepLoop(running); } void SheepLoopWidget::temporalSamplesUpdated() { m_temporalFilterGroupBox->setEnabled(m_temporalSamplesEditor->value() != 1); } void SheepLoopWidget::reset() { m_beginBox->setCurrentIndex(qMax(0, m_beginBox->currentIndex())); m_endBox->setCurrentIndex(qMax(0, m_endBox->currentIndex())); m_genomeIdxBox->setCurrentIndex(qMax(0, m_genomeIdxBox->currentIndex())); running = false; m_runToolButton->setIcon(QIcon(":/icons/silk/bullet_go.xpm")); } int SheepLoopWidget::beginIdx() const { return m_beginBox->currentIndex() + 1; } int SheepLoopWidget::endIdx() const { return m_endBox->currentIndex() + 1; } int SheepLoopWidget::frames() const { return m_framesBox->value(); } int SheepLoopWidget::interpolation() const { return m_interpolationBox->currentIndex(); } int SheepLoopWidget::interpolationType() const { return m_interpolationTypeBox->currentIndex(); } int SheepLoopWidget::temporalSamples() const { return m_temporalSamplesEditor->value(); } int SheepLoopWidget::temporalFilterType() const { return m_temporalFilterComboBox->currentIndex(); } double SheepLoopWidget::temporalFilterWidth() const { return m_temporalFilterWidthEditor->value(); } double SheepLoopWidget::temporalFilterExp() const { return m_temporalFilterExpEditor->value(); } double SheepLoopWidget::stagger() const { return m_staggerBox->value(); } int SheepLoopWidget::loops() const { return m_loopsBox->value(); } void SheepLoopWidget::modeBoxIndexChanged(int idx) { bool enabled = (idx == 0); m_loopsBox->setEnabled(enabled); label_loops->setEnabled(enabled); m_framesBox->setEnabled(enabled); label_frames->setEnabled(enabled); } int SheepLoopWidget::paletteInterpolation() const { return m_paletteInterpBox->currentIndex(); } int SheepLoopWidget::paletteMode() const { return m_paletteInterpTypeBox->currentIndex(); } SheepLoopWidget::AnimationMode SheepLoopWidget::animationMode() const { return m_animateModeBox->currentIndex() == 0 ? Sequence : Interpolate; } void SheepLoopWidget::tabWidgetIndexChanged(int idx) { if (idx == 2) m_motionElementsView->resizeRowsToContents(); } void SheepLoopWidget::temporalFilterTypeIndexChanged(int idx) { m_temporalFilterExpEditor->setEnabled(idx == 2); } void SheepLoopWidget::xformAnimateButtonClicked(bool flag) { int idx = m_xformIdxBox->currentIndex(); int genome_idx = m_genomeIdxBox->currentIndex(); flam3_genome* genome = genomes->data() + genome_idx; (genome->xform + idx)->animate = flag; } flam3_genome* SheepLoopWidget::createSheepLoop(int& ncp) { static flam3_genome* sheep = 0; static int dncp = 0; // clear all previously used sheep if (sheep != NULL && dncp > 0) { for (int i = 0; i < dncp ; i++) clear_cp(sheep + i, flam3_defaults_on); free(sheep); dncp = 0; } int begin_idx = beginIdx(); // on (0, n] int end_idx = endIdx(); int num_genomes = (end_idx - begin_idx) + 1; double stagger = this->stagger(); int temporal_samples = temporalSamples(); int interp = interpolation(); int interp_type = interpolationType(); int palette_interp = paletteInterpolation(); int palette_mode = paletteMode(); int temp_filter = temporalFilterType(); int temp_filter_width = temporalFilterWidth(); double temp_filter_exp = temporalFilterExp(); AnimationMode mode = animationMode(); begin_idx--; // reindex to [0, num_genomes) if (mode == Sequence) { for (int n = begin_idx ; n < num_genomes ; n++) { flam3_genome* g = genomes->data() + n; g->palette_interpolation = palette_interp; g->palette_mode = palette_mode; // bug in libflam3: // the sheep sequence will crash+burn with smooth interpolation. g->interpolation = flam3_interpolation_linear; g->interpolation_type = interp_type; } int nframes = frames(); int loops = this->loops(); // grab a sheep-loop sequence sheep = Util::create_genome_sequence(genomes->data() + begin_idx, num_genomes, &dncp, nframes, loops, stagger); } else { for (int n = begin_idx ; n < num_genomes ; n++) { flam3_genome* g = genomes->data() + n; if ((interp == flam3_interpolation_smooth) && (n > begin_idx) && (n < num_genomes - 2)) { logInfo("SheepLoopWidget::createSheepLoop : time %d using smooth interp", (int)g->time); g->interpolation = flam3_interpolation_smooth; } else { logInfo("SheepLoopWidget::createSheepLoop : time %d using linear interp", (int)g->time); g->interpolation = flam3_interpolation_linear; } g->interpolation_type = interp_type; g->palette_interpolation = palette_interp; g->palette_mode = palette_mode; } sheep = Util::create_genome_interpolation(genomes->data() + begin_idx, num_genomes, &dncp, stagger); } MainPreviewWidget* preview = getWidget(); flam3_genome current = flam3_genome(); if (preview->isPresetSelected()) current = preview->preset(); else current = *(genomes->selectedGenome()); for (int i = 0 ; i < dncp ; i++) { // adjust the quality settings to match the preview widget settings flam3_genome* genome = sheep + i; genome->ntemporal_samples = temporal_samples; genome->temporal_filter_type = temp_filter; genome->temporal_filter_width = temp_filter_width; genome->temporal_filter_exp = temp_filter_exp; genome->sample_density = current.sample_density; genome->spatial_filter_radius = current.spatial_filter_radius; genome->spatial_oversample = current.spatial_oversample; genome->nbatches = current.nbatches; genome->estimator = current.estimator; genome->estimator_curve = current.estimator_curve; genome->estimator_minimum = current.estimator_minimum; genome->symmetry = 1; if ((interp == flam3_interpolation_smooth) && (i > 0) && (i < (dncp - 2))) genome->interpolation = flam3_interpolation_smooth; else genome->interpolation = flam3_interpolation_linear; genome->interpolation_type = interp_type; } ncp = dncp; return sheep; } void SheepLoopWidget::showEvent(QShowEvent* e) { if (!e->spontaneous()) { genomes->usingPreviews(true); genomesModifiedSlot(); } } void SheepLoopWidget::hideEvent(QHideEvent* e) { if (!e->spontaneous()) genomes->usingPreviews(false); } qosmic-1.6.0/src/sheeploopwidget.h000066400000000000000000000110531304321135200171450ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef SHEEPLOOPWIDGET_H #define SHEEPLOOPWIDGET_H #include #include #include "ui_sheeploopwidget.h" #include "genomevector.h" #include "qosmicwidget.h" /** * An item delegate that provides the widgets that edit the xform motion * element parameters. */ class MotionViewItemDelegate : public QStyledItemDelegate { Q_OBJECT QTableView* m_tableview; public: MotionViewItemDelegate(QTableView* =0); QWidget* createEditor(QWidget*, const QStyleOptionViewItem&, const QModelIndex&) const; void setEditorData(QWidget*, const QModelIndex&) const; void setModelData(QWidget*, QAbstractItemModel*, const QModelIndex&) const; QTableView* view() const; }; /** * A set of widgets that allow proper mouse event handling for widgets returned * by the MotionItemDelegate. */ class MotionViewVarItemEditor : public QComboBox { Q_OBJECT const MotionViewItemDelegate* m_delegate; public: MotionViewVarItemEditor(const MotionViewItemDelegate*, QWidget* =0); private slots: void comboBoxCurrentIndexChanged(int); }; class MotionViewFunctionItemEditor : public QComboBox { Q_OBJECT const MotionViewItemDelegate* m_delegate; public: MotionViewFunctionItemEditor(const MotionViewItemDelegate*, QWidget* =0); private slots: void comboBoxCurrentIndexChanged(int); }; class MotionViewDoubleItemEditor : public DoubleValueEditor { Q_OBJECT const MotionViewItemDelegate* m_delegate; public: MotionViewDoubleItemEditor(const MotionViewItemDelegate*, QWidget* =0); private slots: void spinnerValueChanged(); }; class MotionViewIntItemEditor : public IntValueEditor { Q_OBJECT const MotionViewItemDelegate* m_delegate; public: MotionViewIntItemEditor(const MotionViewItemDelegate*, QWidget* =0); private slots: void spinnerValueChanged(); }; class SheepLoopWidget : public QWidget, public QosmicWidget, private Ui::SheepLoopWidget { Q_OBJECT GenomeVector* genomes; bool running; // signal the runSheepLoop routine to start/stop sequence public: enum AnimationMode { Sequence, Interpolate }; explicit SheepLoopWidget(GenomeVector*, QWidget* parent=0); int beginIdx() const; int endIdx() const; int frames() const; int interpolation() const; int interpolationType() const; int temporalSamples() const; int temporalFilterType() const; double temporalFilterWidth() const; double temporalFilterExp() const; double stagger() const; int loops() const; int paletteInterpolation() const; int paletteMode() const; AnimationMode animationMode() const; flam3_genome* createSheepLoop(int&); public slots: void genomeSelectedSlot(int); void genomesModifiedSlot(); void runSheepButtonAction(); void reset(); signals: void runSheepLoop(bool); void saveSheepLoop(); protected: void changeEvent(QEvent*); void showEvent(QShowEvent*); void hideEvent(QHideEvent*); private slots: void tabWidgetIndexChanged(int); void beginBoxIndexChanged(int); void endBoxIndexChanged(int); void temporalSamplesUpdated(); void addNewMotionElement(); void delCurrentMotionElement(); void motionItemChanged(QStandardItem*); void xformIdxBoxIndexChanged(int); void modeBoxIndexChanged(int); void temporalFilterTypeIndexChanged(int); void xformAnimateButtonClicked(bool); }; #endif // SHEEPLOOPWIDGET_H qosmic-1.6.0/src/snapslider.cpp000066400000000000000000000050201304321135200164370ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "snapslider.h" SnapSlider::SnapSlider(QWidget* parent) : QSlider(Qt::Horizontal, parent) { m_selected_value = 0; m_last_value = 0; m_snap = 0; connect(this, SIGNAL(rangeChanged(int,int)), this, SLOT(rangeChangedAction(int,int))); connect(this, SIGNAL(sliderReleased()), this, SLOT(sliderReleasedAction())); connect(this, SIGNAL(valueChanged(int)), this, SLOT(sliderChangedAction(int))); } int SnapSlider::dx() { return m_dx; } void SnapSlider::setSnap(int value) { m_snap = value; } int SnapSlider::snap() { return m_snap; } int SnapSlider::selectedValue() { return m_selected_value; } void SnapSlider::rangeChangedAction(int min, int max) { if (m_snap < min || m_snap > max) m_snap = (int)((double)(max - min) / 2.0); setValue(m_snap); } void SnapSlider::sliderReleasedAction() { m_selected_value = value(); if (signalsBlocked()) setValue(m_snap); else { blockSignals(true); setValue(m_snap); blockSignals(false); } m_last_value = m_snap; emit valueSelected(m_selected_value); emit undoStateSignal(); } void SnapSlider::sliderChangedAction(int value) { m_dx = value - m_last_value; m_last_value = value; } void SnapSlider::setToSnap() { blockSignals(true); sliderReleasedAction(); blockSignals(false); } qosmic-1.6.0/src/snapslider.h000066400000000000000000000034521304321135200161130ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef SNAPSLIDER_H #define SNAPSLIDER_H #include class SnapSlider : public QSlider { Q_OBJECT public: SnapSlider(QWidget* parent=0); int selectedValue(); void setSnap(int value); void setToSnap(); int snap(); int dx(); signals: void valueSelected(int); void undoStateSignal(); private slots: void sliderReleasedAction(); void rangeChangedAction(int, int); void sliderChangedAction(int); private: int m_selected_value; int m_last_value; int m_dx; int m_snap; }; #endif qosmic-1.6.0/src/statuswidget.cpp000066400000000000000000000035051304321135200170300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "statuswidget.h" StatusWidget::StatusWidget(QWidget* parent) : QWidget(parent) { setupUi(this); } StatusWidget::~StatusWidget() { } void StatusWidget::setRenderStatus(RenderStatus* state) { if (isVisible()) m_statusLabel->setText(state->getMessage()); } /*! \fn StatusWidget::resizeEvent(QResizeEvent* e) */ void StatusWidget::resizeEvent(QResizeEvent* e) { if (parent()->inherits("QDockWidget") && qobject_cast(parent())->isFloating()) m_statusLabel->setMaximumSize(e->size()); } qosmic-1.6.0/src/statuswidget.h000066400000000000000000000032541304321135200164760ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef STATUSWIDGET_H #define STATUSWIDGET_H #include #include #include "ui_statuswidget.h" #include "renderthread.h" class StatusWidget : public QWidget, private Ui::StatusWidget { Q_OBJECT public: StatusWidget(QWidget* parent); ~StatusWidget(); public slots: void setRenderStatus(RenderStatus*); protected: void resizeEvent(QResizeEvent*); }; #endif qosmic-1.6.0/src/transformablegraphicsguide.cpp000066400000000000000000000176401304321135200217040ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "transformablegraphicsguide.h" #include "transformablegraphicsitem.h" #include "logger.h" //-------------------------------------------------------------------------- GraphicsGuideScaleButton::GraphicsGuideScaleButton(QGraphicsItem* parent) : QGraphicsRectItem(parent) { QPen p(Qt::NoBrush); p.setWidth(0); setPen(p); setAcceptHoverEvents(true); } int GraphicsGuideScaleButton::type() const { return Type; } void GraphicsGuideScaleButton::hoverEnterEvent(QGraphicsSceneHoverEvent*) { QPen p(pen()); std_pen = p; p.setColor(Qt::red); setPen(p); } void GraphicsGuideScaleButton::hoverLeaveEvent(QGraphicsSceneHoverEvent*) { setPen(std_pen); } //-------------------------------------------------------------------------- TransformableGraphicsGuide::TransformableGraphicsGuide(FigureEditor* fe, QGraphicsItem* parent) : QGraphicsObject(parent), editor(fe), outerRect(0.0, 0.0, 1.0, 1.0), topLeftRect(this), topRightRect(this), bottomLeftRect(this), bottomRightRect(this), bottomRect(this), topRect(this), leftRect(this), rightRect(this) { topLeftRect.location = GraphicsGuideScaleButton::TopLeft; topRightRect.location = GraphicsGuideScaleButton::TopRight; bottomLeftRect.location = GraphicsGuideScaleButton::BottomLeft; bottomRightRect.location = GraphicsGuideScaleButton::BottomRight; QPen pen(editor->guideColor(), 0); topRightRect.setPen(pen); topLeftRect.setPen(pen); bottomRightRect.setPen(pen); bottomLeftRect.setPen(pen); setAcceptHoverEvents(true); // hide the scale mode guide(s) bool scaleMode( editor->mode() == FigureEditor::Scale ); topRightRect.setVisible(scaleMode); topLeftRect.setVisible(scaleMode); bottomRightRect.setVisible(scaleMode); bottomLeftRect.setVisible(scaleMode); } QPainterPath TransformableGraphicsGuide::shape() const { QPainterPath path; if (editor->mode() == FigureEditor::Scale) { path.addRect(topRightRect.rect()); path.addRect(topLeftRect.rect()); path.addRect(bottomRightRect.rect()); path.addRect(bottomLeftRect.rect()); } else { path.addRect(QRect(0.0, 0.0, 0.0, 0.0)); } return path; } QRectF TransformableGraphicsGuide::boundingRect() const { return outerRect; } void TransformableGraphicsGuide::setParentItem(QGraphicsItem* parent) { QGraphicsItem* cparent = parentItem(); if (cparent && (parent != cparent)) dynamic_cast(cparent)->setGraphicsGuide(0); QGraphicsItem::setParentItem(parent); parent->setAcceptHoverEvents(true); update(); } void TransformableGraphicsGuide::update() { if (isVisible()) { FigureEditor::EditMode mode = editor->mode(); bool scaleMode( mode == FigureEditor::Scale ); topRightRect.setVisible(scaleMode); topLeftRect.setVisible(scaleMode); bottomRightRect.setVisible(scaleMode); bottomLeftRect.setVisible(scaleMode); if (scaleMode) { QPointF cen; QPolygonF poly; if (editor->hasSelection()) { QGraphicsPolygonItem* item = editor->selection(); if (item == 0) return; cen = mapFromScene(editor->selectionTransformPos()); poly = mapFromScene(item->polygon()); } else { QGraphicsPolygonItem* item = dynamic_cast(parentItem()); cen = editor->triangleTransformPos(); poly = item->polygon(); } QRectF f( poly.boundingRect() ); qreal xmax = qMax(qAbs(f.left() - cen.x()), qAbs(f.right() - cen.x())); qreal ymax = qMax(qAbs(f.top() - cen.y()), qAbs(f.bottom() - cen.y())); QPointF pmax(xmax, ymax); QRectF r(pmax, -pmax); r.moveCenter(cen); outerRect = r; QRectF l = parentItem()->mapRectFromScene(QRectF(QPointF(0.0, 0.0), QSizeF(10, 10))); QPen pen(editor->guideColor(), 0); l.moveBottomLeft(r.topRight()); topRightRect.setPen(pen); topRightRect.setRect(l); l.moveBottomRight(r.topLeft()); topLeftRect.setPen(pen); topLeftRect.setRect(l); l.moveTopLeft(r.bottomRight()); bottomRightRect.setPen(pen); bottomRightRect.setRect(l); l.moveTopRight(r.bottomLeft()); bottomLeftRect.setPen(pen); bottomLeftRect.setRect(l); } else if (mode == FigureEditor::Rotate) { QGraphicsPolygonItem* item; QPointF cen; QPolygonF poly; if (editor->hasSelection()) { item = editor->selection(); if (item == 0) return; cen = mapFromScene(editor->selectionTransformPos()); poly = mapFromScene(item->polygon()); } else { item = dynamic_cast(parentItem()); poly = item->polygon(); cen = editor->triangleTransformPos(); } qreal rmax = 0.0; foreach (QPointF p, poly) { QLineF l(p, cen); qreal len(l.length()); if (len > rmax) rmax = len; } qreal height = rmax * 2.0; outerRect = QRectF(cen.x() - rmax, cen.y() - rmax, height, height); } else if (mode == FigureEditor::Flip) { QPolygonF poly; QPointF cen; if (editor->hasSelection()) { QGraphicsPolygonItem* item = editor->selection(); if (item == 0) return; cen = mapFromScene(editor->selectionTransformPos()); poly = mapFromScene(item->polygon()); } else { QGraphicsPolygonItem* item = dynamic_cast(parentItem()); cen = editor->triangleTransformPos(); poly = item->polygon(); } QPolygonF pa( poly ); double tx = cen.x(); int n = 0; foreach (QPointF p, pa) { p.rx() = p.x() - 2.0 * (p.x() - tx); pa[n++] = p; } hFlipPoly = pa; pa = poly; tx = cen.y(); n = 0; foreach (QPointF p, pa) { p.ry() = p.y() - 2.0 * (p.y() - tx); pa[n++] = p; } vFlipPoly = pa; outerRect = poly.boundingRect().united(hFlipPoly.boundingRect()).united(vFlipPoly.boundingRect()); } } } void TransformableGraphicsGuide::setVisible(bool flag) { QGraphicsItem::setVisible(flag); update(); } void TransformableGraphicsGuide::paint(QPainter* p, const QStyleOptionGraphicsItem* /*option*/, QWidget* /*widget*/) { QPen pen(editor->guideColor(), 0); pen.setStyle(Qt::SolidLine); p->save(); p->setPen(pen); p->setBrush(QBrush(Qt::transparent, Qt::SolidPattern)); FigureEditor::EditMode mode = editor->mode(); if (mode == FigureEditor::Scale) { p->drawRect(outerRect); pen.setStyle(Qt::DotLine); p->setPen(pen); p->drawLine(topLeftRect.rect().topLeft(), bottomRightRect.rect().bottomRight()); p->drawLine(topRightRect.rect().topRight(), bottomLeftRect.rect().bottomLeft()); } else if (mode == FigureEditor::Rotate) { p->drawEllipse(outerRect); p->setBrush(QBrush(pen.color(), Qt::SolidPattern)); QRectF r(mapRectFromScene(QRectF(-1., -1., 2., 2.))); r.moveCenter(outerRect.center()); p->drawEllipse(r); } else if (mode == FigureEditor::Flip) { p->drawPolygon(hFlipPoly); p->drawPolygon(vFlipPoly); } p->restore(); } qosmic-1.6.0/src/transformablegraphicsguide.h000066400000000000000000000051461304321135200213470ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef TRANSFORMABLEGRAPHICSGUIDE_H #define TRANSFORMABLEGRAPHICSGUIDE_H #include #include #include "xfedit.h" class GraphicsGuideScaleButton : public QGraphicsRectItem { public: enum { Type = UserType + 7 }; enum Location { TopRight, TopLeft, BottomRight, BottomLeft }; Location location; QPen std_pen; GraphicsGuideScaleButton(QGraphicsItem* =0); int type() const; protected: void hoverEnterEvent(QGraphicsSceneHoverEvent*); void hoverLeaveEvent(QGraphicsSceneHoverEvent*); }; class TransformableGraphicsGuide : public QGraphicsObject { Q_OBJECT FigureEditor* editor; QRectF outerRect; QPolygonF hFlipPoly; QPolygonF vFlipPoly; GraphicsGuideScaleButton topLeftRect; GraphicsGuideScaleButton topRightRect; GraphicsGuideScaleButton bottomLeftRect; GraphicsGuideScaleButton bottomRightRect; GraphicsGuideScaleButton bottomRect; GraphicsGuideScaleButton topRect; GraphicsGuideScaleButton leftRect; GraphicsGuideScaleButton rightRect; public: explicit TransformableGraphicsGuide(FigureEditor*, QGraphicsItem* =0); QRectF boundingRect() const; void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget* =0); void setParentItem(QGraphicsItem*); void setVisible(bool); void update(); QPainterPath shape() const; }; #endif // TRANSFORMABLEGRAPHICSGUIDE_H qosmic-1.6.0/src/transformablegraphicsitem.cpp000066400000000000000000000033151304321135200215370ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "transformablegraphicsitem.h" #include "transformablegraphicsguide.h" TransformableGraphicsItem::TransformableGraphicsItem() : m_guide(0) { } void TransformableGraphicsItem::setGraphicsGuide(TransformableGraphicsGuide* guide) { m_guide = guide; if (guide) guide->setParentItem(dynamic_cast(this)); } TransformableGraphicsGuide* TransformableGraphicsItem::graphicsGuide() const { return m_guide; } qosmic-1.6.0/src/transformablegraphicsitem.h000066400000000000000000000037211304321135200212050ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef TRANSFORMABLE_H #define TRANSFORMABLE_H class TransformableGraphicsGuide; /** * An interface that accepts a GraphicsGuide decorator. * * It's also necessary for the child class to extend the QGraphicsItem * interface as well since the main purpose of this class is to handle * reparenting of the GraphicsGuide instance. * */ class TransformableGraphicsItem { protected: TransformableGraphicsGuide* m_guide; public: TransformableGraphicsItem(); virtual void setGraphicsGuide(TransformableGraphicsGuide*); TransformableGraphicsGuide* graphicsGuide() const; }; //-------------------------------------------------------------------------- #endif // TRANSFORMABLE_H qosmic-1.6.0/src/triangle.cpp000066400000000000000000000322071304321135200161070ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "triangle.h" #include "logger.h" #include "nodeitem.h" #include "xfedit.h" #include "transformablegraphicsguide.h" uint Triangle::zpos = 0; Triangle::Triangle( FigureEditor* c, flam3_xform* x, BasisTriangle* b, int idx) : canvas(c), m_xform(x), basisTriangle(b), m_index(idx), cList(), nList(), m_edgeLine(0.,0.,0.,0.), m_edgeType(NoEdge), m_idxLabel(QString::number(idx + 1), this) { logFinest("Triangle::Triangle : enter"); setTransform(QTransform(basisTriangle->coordTransform())); QFont f(m_idxLabel.font()); f.setBold(true); m_idxLabel.setFont(f); m_idxLabel.setFlag(QGraphicsItem::ItemStacksBehindParent); NodeItem *el; el = new NodeItem( canvas, this, NODE_O, "O" ); nList.append(el); el = new NodeItem( canvas, this, NODE_X, "X" ); nList.append(el); el = new NodeItem( canvas, this, NODE_Y, "Y" ); nList.append(el); TriangleCoords tc = basisTriangle->getCoords(m_xform->c); setPoints(tc); moveToFront(); setBrush(Qt::NoBrush); setPen(QPen(Qt::gray)); setAcceptHoverEvents(true); } void Triangle::hoverEnterEvent(QGraphicsSceneHoverEvent* e) { hoverMoveEvent(e); } void Triangle::hoverMoveEvent(QGraphicsSceneHoverEvent* e) { if (canvas->mode() == FigureEditor::Move) { bool postEnabled( canvas->postEnabled() ); if ((!postEnabled && canvas->getSelectedTriangle() == this) || ( postEnabled && canvas->post() == this) ) findEdge(e->pos()); } } void Triangle::hoverLeaveEvent(QGraphicsSceneHoverEvent* /*e*/) { clearFoundEdge(); } Triangle::~Triangle() { NodeItem *node; TriangleNodesIterator it( nList ); while ( it.hasNext() ) { node = it.next(); canvas->removeItem(node); delete node; } hide(); } void Triangle::resetPosition() { m_xform->c[0][0] = 1.0; m_xform->c[0][1] = 0.0; m_xform->c[1][0] = 0.0; m_xform->c[1][1] = 1.0; m_xform->c[2][0] = 0.0; m_xform->c[2][1] = 0.0; TriangleCoords tc = basisTriangle->getCoords(m_xform->c); setPoints(tc); } TriangleNodes& Triangle::getNodes() { return nList; } TriangleCoords Triangle::getCoords() { return cList; } int Triangle::type() const { return Type; } flam3_xform* Triangle::xform() { return m_xform; } void Triangle::basisScaledSlot() { setTransform(basisTriangle->coordTransform()); TriangleCoords tc = basisTriangle->getCoords(m_xform->c); setPoints(tc); // only update the brush transform for selected triangles if (this == canvas->getSelectedTriangle()) { QBrush b(brush()); b.setTransform(basisTriangle->coordTransform()); setBrush(b); } if (m_guide) m_guide->update(); } void Triangle::setPoints(TriangleCoords& points) { logFinest("Triangle::setPoints : enter"); cList = points; if (points.size() != 3) return; int n = 0; NodeItem *node; TriangleNodesIterator it( nList ); while ( it.hasNext() ) { node = it.next(); QPointF npos = mapToItem(node, cList[n]); node->movePoint(npos.x(), npos.y()); n++; } QGraphicsPolygonItem::setPolygon(cList); adjustSceneRect(); } void Triangle::moveToFront() { zpos++; setZValue(zpos); zpos++; TriangleNodesIterator it( nList ); while ( it.hasNext() ) it.next()->setZValue( zpos ); } int Triangle::nextZPos() { return ++zpos; } void Triangle::show() { QGraphicsPolygonItem::show(); TriangleNodesIterator it( nList ); while ( it.hasNext() ) it.next()->show(); } void Triangle::setVisible(bool flag) { QGraphicsPolygonItem::setVisible(flag); TriangleNodesIterator it( nList ); while ( it.hasNext() ) it.next()->setVisible(flag); } int Triangle::index() const { return m_index; } QRectF Triangle::boundingRect() { return QGraphicsPolygonItem::boundingRect().adjusted(-.4,-.4,.8,.8); } /** * This one is called by the currently moving NodeItem */ void Triangle::moveEdges() { TriangleNodesIterator it( nList ); NodeItem *node; cList.clear(); while ( it.hasNext() ) { node = it.next(); cList << mapFromScene(node->pos()); } QGraphicsPolygonItem::setPolygon( cList ); adjustSceneRect(); coordsToXForm(); } void Triangle::scale(double dx, double dy, QPointF cpos) { double tx(cpos.x()); double ty(cpos.y()); QTransform trans; // scale trans.translate(tx, ty); trans.scale(dx, dy); trans.translate(-tx, -ty); QPolygonF pa( mapToScene(trans.map(polygon())) ); TriangleNodesIterator it( nList ); int n(0); // rebuild triangle + nodes while ( it.hasNext() ) it.next()->setPos( pa.at(n++) ); moveEdges(); } void Triangle::rotate(double rad, QPointF cpos) { double tx(cpos.x()); double ty(cpos.y()); QTransform trans; // rotate trans.translate(tx, ty); trans.rotate(rad); trans.translate(-tx, -ty); QPolygonF pa( mapToScene(trans.map(polygon())) ); TriangleNodesIterator it( nList ); int n(0); // rebuild triangle + nodes while ( it.hasNext() ) it.next()->setPos( pa.at(n++) ); moveEdges(); } void Triangle::rotateNode(NodeItem* nodeItem, double rad, QPointF cpos) { double tx(cpos.x()); double ty(cpos.y()); QTransform trans; trans.translate(tx, ty); trans.rotate(rad); trans.translate(-tx, -ty); QPolygonF pa( mapToScene(trans.map(polygon())) ); TriangleNodesIterator it( nList ); NodeItem *node; int n(0); // rebuild triangle + nodes while ( it.hasNext() ) { node = it.next(); if (node == nodeItem) node->setPos( pa.at(n) ); n++; } moveEdges(); } void Triangle::flipHorizontally() { flipHorizontally(polygon().boundingRect().center()); } void Triangle::flipVertically() { flipVertically(polygon().boundingRect().center()); } void Triangle::flipHorizontally(QPointF center) { double tx = center.x(); QPolygonF pa = polygon(); int n = 0; foreach (QPointF p, pa) { p.rx() = p.x() - 2.*(p.x() - tx) ; pa[n++] = p; } TriangleNodesIterator it( nList ); NodeItem *node; n = 0; cList.clear(); while ( it.hasNext() ) { node = it.next(); QPointF p = mapToScene(pa[n++]); node->setPos( p ); cList << mapFromScene(node->pos()); } QGraphicsPolygonItem::setPolygon(cList); adjustSceneRect(); coordsToXForm(); } void Triangle::flipVertically(QPointF center) { double ty = center.y(); QPolygonF pa = polygon(); int n = 0; foreach (QPointF p, pa) { p.ry() = p.y() - 2.*(p.y() - ty) ; pa[n++] = p; } TriangleNodesIterator it( nList ); NodeItem *node; n = 0; cList.clear(); while ( it.hasNext() ) { node = it.next(); QPointF p = mapToScene(pa[n++]); node->setPos( p ); cList << mapFromScene(node->pos()); } QGraphicsPolygonItem::setPolygon(cList); adjustSceneRect(); coordsToXForm(); } /** * This one is called by the FigureEditor */ void Triangle::moveBy(double dx, double dy) { TriangleNodesIterator it( nList ); NodeItem *node; cList.clear(); while ( it.hasNext() ) { node = it.next(); node->movePoint( dx, dy ); cList << mapFromScene(node->pos()); } QGraphicsPolygonItem::setPolygon(cList); adjustSceneRect(); coordsToXForm(); } BasisTriangle* Triangle::basis() const { return basisTriangle; } const QTransform& Triangle::getCoordinateTransform() { return basisTriangle->coordTransform(); } void Triangle::coordsToXForm() { logFinest("Triangle::coordsToXForm : enter"); basisTriangle->applyTransform(cList, m_xform->c); } void Triangle::setNodeColor(const QColor& c, const QColor& s) { TriangleNodesIterator it( nList ); while ( it.hasNext() ) it.next()->setPen(QPen(c), QPen(s)); m_idxLabel.setPen(Qt::NoPen); m_idxLabel.setBrush(QBrush(s)); } FigureEditor* Triangle::editor() const { return canvas; } void Triangle::adjustSceneRect() { if (scene()) { QRectF r = mapToScene(boundingRect()).boundingRect(); QRectF scene_r = scene()->sceneRect(); if (!scene_r.contains(r)) scene()->setSceneRect(scene_r.united(r)); if (m_guide) m_guide->update(); if (m_idxLabel.isVisible()) { QFontMetrics fm(m_idxLabel.font()); QSizeF fsz(mapFromScene(QRectF(fm.boundingRect(m_idxLabel.text()))).boundingRect().size()); qreal fw = fsz.width() / 2.0; qreal fh = fsz.height() / 2.0; QPointF a(polygon().at(0)); QPointF b(polygon().at(1)); QPointF c(polygon().at(2)); // find the intersection of two right triangles qreal b_ax = (b.x() - a.x()); qreal c_ax = (c.x() - a.x()); qreal dx = mapFromScene(QPointF(0.0001, 0.0)).x(); if (qAbs(b_ax) < dx) b_ax = dx; if (qAbs(c_ax) < dx) c_ax = dx; qreal mab = (b.y() - a.y())/b_ax; qreal mac = (c.y() - a.y())/c_ax; qreal abx = a.x() + b_ax / 2; qreal aby = mab*( abx - a.x()) + a.y(); QPointF d(abx, aby); qreal acx = a.x() + c_ax / 2; qreal acy = mac* (acx - a.x()) + a.y(); QPointF e(acx, acy); QLineF dc(d, c); QLineF eb(e, b); QPointF k; QLineF::IntersectType t = dc.intersect(eb, &k); if (t != QLineF::BoundedIntersection) logWarn(QString("Triangle::adjustSceneRect : IntersectType %1").arg(t)); logFine(QString("Triangle::adjustSceneRect : k = (%1, %2)").arg(k.x()).arg(k.y())); m_idxLabel.setTransform(transform().inverted()); m_idxLabel.setPos(k + QPointF(-fw, fh)); } } } NodeItem* Triangle::getNode(int idx) const { return nList[idx]; } void Triangle::setXform(flam3_xform* xform) { m_xform = xform; } // Clear found edges void Triangle::clearFoundEdge() { m_edgeType = NoEdge; m_edgeLine.setLength(0); update(); } // Find the edge closest to the given point. void Triangle::findEdge(const QPointF& pos) { QPolygonF poly(polygon()); QList lines; lines << QLineF(poly[0], poly[1]) << QLineF(poly[0], poly[2]) << QLineF(poly[1], poly[2]); QPointF scenePos( mapToScene( pos ) ); int n(0); int lastLength = m_edgeLine.length(); int lastType = m_edgeType; m_edgeType = NoEdge; m_edgeLine.setLength(0); foreach (QLineF line, lines) { // determine the minimum distance between pos and each of the edges QPointF n0( line.p1() ); QPointF n1( line.p2() ); qreal denom(n1.x() - n0.x()); qreal x, y; if (denom == 0.0) // the edge is a vertical line { x = n0.x(); y = pos.y(); } else { qreal m( ( n1.y() - n0.y() ) / denom ); qreal b( n0.y() - m * n0.x() ); x = ( pos.x() + m * (pos.y() - b) ) / (m*m + 1 ); y = m * x + b ; } QPointF scenePoint( mapToScene( x, y ) ); qreal dx( scenePoint.x() - scenePos.x() ); qreal dy( scenePoint.y() - scenePos.y() ); qreal d( sqrt( dx*dx + dy*dy ) ); // choose the edge that is <5 pixels from pos if (d < 5.0) { logFiner(QString("Triangle::findEdge : found triangle %1 edge at (%2,%3)") .arg(m_index).arg(x).arg(y)); m_edgeLine.setPoints(n0, n1); if (n < 2) m_edgeType = RotateEdge; else m_edgeType = ScaleEdge; break; } n++; } if (lastLength != m_edgeLine.length() || lastType != m_edgeType) update(); } QPointF Triangle::circumCenter() { QPolygonF pa( polygon() ); double Ax, Ay, Bx, By, Cx, Cy; Ax = pa[0].x(); Ay = pa[0].y(); Bx = pa[1].x(); By = pa[1].y(); Cx = pa[2].x(); Cy = pa[2].y(); double D = 2.0*(Ax*(By-Cy)+Bx*(Cy-Ay)+Cx*(Ay-By)); return QPointF( ((Ay*Ay + Ax*Ax)*(By-Cy) + (By*By + Bx*Bx)*(Cy-Ay) + (Cy*Cy + Cx*Cx)*(Ay-By)) / D, ((Ay*Ay + Ax*Ax)*(Cx-Bx) + (By*By + Bx*Bx)*(Ax-Cx) + (Cy*Cy + Cx*Cx)*(Bx-Ax)) / D ); } void Triangle::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { QGraphicsPolygonItem::paint(painter, option, widget); if (!canvas->hasSelection() && (canvas->getSelectedTriangle() == this || type() == PostTriangle::Type)) { if (!m_edgeLine.isNull()) { // highlight the edge closest to the mouse position found in findEdge() QRectF r( mapRectFromScene(0., 0., 2., 2.) ); qreal width( sqrt( r.width()*r.width() + r.height()*r.height()) ); logFiner(QString("Triangle::paint : painting selected edge width %1").arg(width)); painter->save(); QPen pen(painter->pen()); pen.setWidthF(width); pen.setCapStyle(Qt::RoundCap); painter->setPen(pen); painter->drawLine(m_edgeLine); painter->restore(); m_edgeLine.setLine(0.,0.,0.,0.); } } } Triangle::EdgeType Triangle::getEdgeType() { return m_edgeType; } bool Triangle::labelVisible() const { return m_idxLabel.isVisible(); } void Triangle::setLabelVisible(bool visible) { m_idxLabel.setVisible(visible); if (visible) adjustSceneRect(); } qosmic-1.6.0/src/triangle.h000066400000000000000000000070701304321135200155540ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef TRIANGLE_H #define TRIANGLE_H #include "basistriangle.h" #include "flam3util.h" #include "transformablegraphicsitem.h" class NodeItem; class FigureEditor; class TransformableGraphicsGuide; typedef QList TriangleNodes; typedef QListIterator TriangleNodesIterator; class Triangle : public QGraphicsPolygonItem, public TransformableGraphicsItem { public: enum { Type = UserType + 2 }; static const int NODE_O = 0; static const int NODE_X = 1; static const int NODE_Y = 2; enum EdgeType { NoEdge, RotateEdge, ScaleEdge }; protected: FigureEditor* canvas; flam3_xform* m_xform; BasisTriangle* basisTriangle; int m_index; TriangleCoords cList; TriangleNodes nList; QRectF m_boundingRect; static uint zpos; double m_scaled; double m_rotated; QLineF m_edgeLine; EdgeType m_edgeType; QGraphicsSimpleTextItem m_idxLabel; public: Triangle( FigureEditor*, flam3_xform*, BasisTriangle*, int idx ); ~Triangle(); flam3_xform* xform(); void setXform(flam3_xform*); void moveEdges(); void moveBy(double, double); void setPoints(TriangleCoords&); void moveToFront(); void show(); void setVisible(bool); virtual int type() const; int nextZPos(); const QTransform& getCoordinateTransform(); TriangleNodes& getNodes(); TriangleCoords getCoords(); virtual void coordsToXForm(); QRectF boundingRect(); void flipHorizontally(); void flipVertically(); void flipHorizontally(QPointF); void flipVertically(QPointF); void scale(double, double, QPointF); void rotate(double, QPointF); void rotateNode(NodeItem*, double, QPointF); BasisTriangle* basis() const; void setNodeColor(const QColor&, const QColor&); FigureEditor* editor() const; void adjustSceneRect(); virtual void resetPosition(); void basisScaledSlot(); int index() const; NodeItem* getNode(int) const; EdgeType getEdgeType(); bool labelVisible() const; void setLabelVisible(bool); void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget =0); QPointF circumCenter(); protected: void findEdge(const QPointF&); void clearFoundEdge(); void hoverEnterEvent(QGraphicsSceneHoverEvent*); void hoverMoveEvent(QGraphicsSceneHoverEvent*); void hoverLeaveEvent(QGraphicsSceneHoverEvent*); }; #endif qosmic-1.6.0/src/trianglecoordswidget.cpp000066400000000000000000000260711304321135200205270ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "flam3util.h" #include "trianglecoordswidget.h" #include "xfedit.h" #include "logger.h" using namespace Util; TriangleCoordsWidget::TriangleCoordsWidget(GenomeVector* gen, QWidget* parent) : QWidget(parent), genome(gen) { setupUi(this); m_AxLineEdit->restoreSettings(); m_AyLineEdit->restoreSettings(); m_BxLineEdit->restoreSettings(); m_ByLineEdit->restoreSettings(); m_CxLineEdit->restoreSettings(); m_CyLineEdit->restoreSettings(); m_aLineEdit->restoreSettings(); m_bLineEdit->restoreSettings(); m_cLineEdit->restoreSettings(); m_dLineEdit->restoreSettings(); m_eLineEdit->restoreSettings(); m_fLineEdit->restoreSettings(); connect(m_AxLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldCoordsEditedAction())); connect(m_AxLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_AyLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldCoordsEditedAction())); connect(m_AyLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_BxLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldCoordsEditedAction())); connect(m_BxLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_ByLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldCoordsEditedAction())); connect(m_ByLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_CxLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldCoordsEditedAction())); connect(m_CxLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_CyLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldCoordsEditedAction())); connect(m_CyLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_aLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldVariablesEditedAction())); connect(m_aLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_bLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldVariablesEditedAction())); connect(m_bLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_cLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldVariablesEditedAction())); connect(m_cLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_dLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldVariablesEditedAction())); connect(m_dLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_eLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldVariablesEditedAction())); connect(m_eLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_fLineEdit, SIGNAL(valueUpdated()), this, SLOT(fieldVariablesEditedAction())); connect(m_fLineEdit, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); coordsButtonGroup = new QButtonGroup(); coordsButtonGroup->addButton(m_rectRadioButton); coordsButtonGroup->addButton(m_degRadioButton); coordsButtonGroup->addButton(m_radRadioButton); QSettings settings; QString coordstr = settings.value("coords_widget_coordtype", "rect").toString(); if (coordstr == m_radRadioButton->text()) { m_radRadioButton->setChecked(true); coords = Radian; } else if (coordstr == m_degRadioButton->text()) { m_degRadioButton->setChecked(true); coords = Degree; } else { m_rectRadioButton->setChecked(true); coords = Rect; } connect(coordsButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(coordsButtonGroupClickedAction())); } void TriangleCoordsWidget::showEvent(QShowEvent* e) { if (!e->spontaneous()) updateFormData(); } void TriangleCoordsWidget::coordsButtonGroupClickedAction() { QSettings settings; settings.setValue("coords_widget_coordtype", coordsButtonGroup->checkedButton()->text()); if (m_rectRadioButton->isChecked()) coords = Rect; else if (m_degRadioButton->isChecked()) coords = Degree; else coords = Radian; updateFormData(); } void TriangleCoordsWidget::setGenome(int n) { genome_offset = n; } #define genome_ptr (genome->selectedGenome()) void TriangleCoordsWidget::updateFormData() { if (!isVisible()) return; logFiner("TriangleCoordsWidget::updateFormData : updating"); updateVariablesFormData(); updateCoordsFormData(); } void TriangleCoordsWidget::updateCoordsFormData() { Triangle* t = selectedTriangle; FigureEditor* editor = selectedTriangle->editor(); if (editor->postEnabled()) t = editor->post(); TriangleCoords tc = t->getCoords(); switch (coords) { case Rect: { m_AxLineEdit->updateValue(tc[0].x()); m_AyLineEdit->updateValue(tc[0].y()); m_BxLineEdit->updateValue(tc[1].x()); m_ByLineEdit->updateValue(tc[1].y()); m_CxLineEdit->updateValue(tc[2].x()); m_CyLineEdit->updateValue(tc[2].y()); m_xColumnLabel->setText("x"); m_yColumnLabel->setText("y"); break; } case Radian: { double r, p; rectToPolar(tc[0].x(), tc[0].y(), &r, &p); m_AxLineEdit->updateValue(r); m_AyLineEdit->updateValue(p); rectToPolar(tc[1].x() - tc[0].x(), tc[1].y() - tc[0].y(), &r, &p); m_BxLineEdit->updateValue(r); m_ByLineEdit->updateValue(p); rectToPolar(tc[2].x() - tc[0].x(), tc[2].y() - tc[0].y(), &r, &p); m_CxLineEdit->updateValue(r); m_CyLineEdit->updateValue(p); m_xColumnLabel->setText("r"); m_yColumnLabel->setText("phi"); break; } case Degree: { double r, p; rectToPolarDeg(tc[0].x(), tc[0].y(), &r, &p); m_AxLineEdit->updateValue(r); m_AyLineEdit->updateValue(p); rectToPolarDeg(tc[1].x() - tc[0].x(), tc[1].y() - tc[0].y(), &r, &p); m_BxLineEdit->updateValue(r); m_ByLineEdit->updateValue(p); rectToPolarDeg(tc[2].x() - tc[0].x(), tc[2].y() - tc[0].y(), &r, &p); m_CxLineEdit->updateValue(r); m_CyLineEdit->updateValue(p); m_xColumnLabel->setText("r"); m_yColumnLabel->setText("deg"); } } } void TriangleCoordsWidget::updateVariablesFormData() { FigureEditor* editor = selectedTriangle->editor(); if (editor->postEnabled()) { Triangle* t = editor->post(); flam3_xform* xform = t->xform(); m_aLineEdit->updateValue(xform->post[0][0]); m_bLineEdit->updateValue(xform->post[1][0]); m_cLineEdit->updateValue(xform->post[2][0]); m_dLineEdit->updateValue(xform->post[0][1]); m_eLineEdit->updateValue(xform->post[1][1]); m_fLineEdit->updateValue(xform->post[2][1]); } else { Triangle* t = selectedTriangle; flam3_xform* xform = t->xform(); m_aLineEdit->updateValue(xform->c[0][0]); m_bLineEdit->updateValue(xform->c[1][0]); m_cLineEdit->updateValue(xform->c[2][0]); m_dLineEdit->updateValue(xform->c[0][1]); m_eLineEdit->updateValue(xform->c[1][1]); m_fLineEdit->updateValue(xform->c[2][1]); } } void TriangleCoordsWidget::fieldCoordsEditedAction() { logFiner("TriangleCoordsWidget::fieldEditedAction : setting coords"); FigureEditor* editor = selectedTriangle->editor(); Triangle* t = editor->postEnabled() ? editor->post() : selectedTriangle ; TriangleCoords c = t->getCoords(); switch (coords) { case Rect: { c[0].setX(m_AxLineEdit->value()); c[0].setY(m_AyLineEdit->value()); c[1].setX(m_BxLineEdit->value()); c[1].setY(m_ByLineEdit->value()); c[2].setX(m_CxLineEdit->value()); c[2].setY(m_CyLineEdit->value()); break; } case Degree: { double x, y; double r = m_AxLineEdit->value(); double p = m_AyLineEdit->value(); polarDegToRect(r, p, &x, &y); c[0].setX(x); c[0].setY(y); r = m_BxLineEdit->value(); p = m_ByLineEdit->value(); polarDegToRect(r, p, &x, &y); c[1].setX(x + c[0].x()); c[1].setY(y + c[0].y()); r = m_CxLineEdit->value(); p = m_CyLineEdit->value(); polarDegToRect(r, p, &x, &y); c[2].setX(x + c[0].x()); c[2].setY(y + c[0].y()); break; } case Radian: { double x, y; double r = m_AxLineEdit->value(); double p = m_AyLineEdit->value(); polarToRect(r, p, &x, &y); c[0].setX(x); c[0].setY(y); r = m_BxLineEdit->value(); p = m_ByLineEdit->value(); polarToRect(r, p, &x, &y); c[1].setX(x + c[0].x()); c[1].setY(y + c[0].y()); r = m_CxLineEdit->value(); p = m_CyLineEdit->value(); polarToRect(r, p, &x, &y); c[2].setX(x + c[0].x()); c[2].setY(y + c[0].y()); } } t->setPoints(c); t->coordsToXForm(); updateVariablesFormData(); editor->blockSignals(true); editor->triangleModifiedAction(selectedTriangle); editor->blockSignals(false); emit dataChanged(); } void TriangleCoordsWidget::fieldVariablesEditedAction() { logFiner("TriangleCoordsWidget::fieldVariablesEditedAction : setting values"); FigureEditor* editor = selectedTriangle->editor(); Triangle* t; TriangleCoords c; if (editor->postEnabled()) { t = editor->post(); flam3_xform* xform = t->xform(); xform->post[0][0] = m_aLineEdit->value(); xform->post[1][0] = m_bLineEdit->value(); xform->post[2][0] = m_cLineEdit->value(); xform->post[0][1] = m_dLineEdit->value(); xform->post[1][1] = m_eLineEdit->value(); xform->post[2][1] = m_fLineEdit->value(); c = t->basis()->getCoords(xform->post); } else { t = selectedTriangle; flam3_xform* xform = t->xform(); xform->c[0][0] = m_aLineEdit->value(); xform->c[1][0] = m_bLineEdit->value(); xform->c[2][0] = m_cLineEdit->value(); xform->c[0][1] = m_dLineEdit->value(); xform->c[1][1] = m_eLineEdit->value(); xform->c[2][1] = m_fLineEdit->value(); c = t->basis()->getCoords(xform->c); } t->setPoints(c); t->coordsToXForm(); updateCoordsFormData(); editor->blockSignals(true); editor->triangleModifiedAction(selectedTriangle); editor->blockSignals(false); emit dataChanged(); } void TriangleCoordsWidget::triangleSelectedSlot(Triangle* t) { logFiner(QString("TriangleCoordsWidget::triangleSelectedSlot : t=0x%1") .arg((long)t, 0, 16)); selectedTriangle = t; updateFormData(); } void TriangleCoordsWidget::triangleModifiedSlot(Triangle* t) { logFiner(QString("TriangleCoordsWidget::triangleModifiedSlot : t=0x%1") .arg((long)t, 0, 16)); if (t == selectedTriangle) updateFormData(); } TriangleCoordsWidget::CoordType TriangleCoordsWidget::coordType() { return coords; } qosmic-1.6.0/src/trianglecoordswidget.h000066400000000000000000000044071304321135200201730ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef TRIANGLECOORDSWIDGET_H #define TRIANGLECOORDSWIDGET_H #include #include "ui_trianglecoordswidget.h" class Triangle; class GenomeVector; class TriangleCoordsWidget : public QWidget, private Ui::TriangleCoordsWidget { Q_OBJECT public: enum CoordType { Rect, Degree, Radian }; private: int genome_offset; GenomeVector* genome; Triangle* selectedTriangle; QButtonGroup* coordsButtonGroup; CoordType coords; public: TriangleCoordsWidget(GenomeVector*, QWidget* parent=0); void setGenome(int); void updateFormData(); CoordType coordType(); signals: void dataChanged(); void undoStateSignal(); public slots: void triangleSelectedSlot(Triangle*); void triangleModifiedSlot(Triangle*); protected slots: void fieldCoordsEditedAction(); void fieldVariablesEditedAction(); void coordsButtonGroupClickedAction(); protected: void showEvent(QShowEvent*); private: void updateCoordsFormData(); void updateVariablesFormData(); }; #endif qosmic-1.6.0/src/triangledensitywidget.cpp000066400000000000000000000304451304321135200207150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "triangledensitywidget.h" #include "selecttrianglewidget.h" #include "logger.h" #define genome_ptr (genome->selectedGenome()) TriangleDensityWidget::TriangleDensityWidget(GenomeVector* g, FigureEditor* e, QWidget* parent) : QWidget(parent), QosmicWidget(this, "TriangleDensityWidget"), triangleScene(e), genome(g), grouped_slider_idx(0), other_genome(), merged_genome(), merged_grouped_slider_idx(), is_merged(false) { setupUi(this); Util::init_genome(&merged_genome); Util::init_genome(&other_genome); QVBoxLayout* vbox = new QVBoxLayout(); m_scrollAreaWidgetContents->setLayout(vbox); vbox = new QVBoxLayout(); m_scrollAreaWidgetContents_2->setLayout(vbox); m_mergeToolButton->setEnabled(false); QButtonGroup* bg = new QButtonGroup(); bg->setExclusive(false); bg->addButton(m_zeroToolButton); bg->addButton(m_equalToolButton); bg->addButton(m_randToolButton); connect(bg, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(distToolButtonSlot(QAbstractButton*))); bg = new QButtonGroup(); bg->setExclusive(false); bg->addButton(m_zeroToolButton_2); bg->addButton(m_equalToolButton_2); bg->addButton(m_randToolButton_2); connect(bg, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(distToolButtonSlot_2(QAbstractButton*))); connect(m_crossComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(mergeComboBoxChangedAction(int))); connect(m_mergeToolButton, SIGNAL(clicked(bool)), this, SLOT(mergeWithOtherGenomeAction())); } TriangleDensityWidget::~TriangleDensityWidget() { } void TriangleDensityWidget::triangleSelectedSlot(Triangle* t) { selectedTriangle = t; reset(); } // each slider calls this method when being modified before emitting, and // only one slider is modified at a time (by the user), so // we know which slider changed (relative to group). void TriangleDensityWidget::sliderGroupChanged(int idx) { grouped_slider_idx = idx; } // groupedSliders are in the upper set of sliders void TriangleDensityWidget::groupedSliderChangedSlot(int value) { TriangleList triangles = triangleScene->triangles(); double norm = getNorm(); triangles.at(grouped_slider_idx)->xform()->density = (double)value / 1000. * norm; resetSliders(norm); emit dataChanged(); } void TriangleDensityWidget::groupedSliderPressedSlot() { if (grouped_slider_idx != triangleScene->selectedTriangleIndex()) triangleScene->selectTriangle(grouped_slider_idx); } void TriangleDensityWidget::reset() { TriangleList triangles = triangleScene->triangles(); // make more sliders if necessary while (sliders.size() < triangles.size()) { GroupedSlider* s = new GroupedSlider(Qt::Horizontal, this, sliders.size()); QLabel* name = new QLabel(QString::number(sliders.size() + 1)); QHBoxLayout* hl = new QHBoxLayout(); hl->addWidget(name); hl->addWidget(s); dynamic_cast (m_scrollAreaWidgetContents->layout())->insertLayout(-1,hl,0); s->setRange(0, 1000); s->setVisible(false); sliders.append(s); slider_names.append(name); connect(s, SIGNAL(valueChanged(int)), this, SLOT(groupedSliderChangedSlot(int))); connect(s, SIGNAL(sliderPressed()), this, SLOT(groupedSliderPressedSlot())); connect(s, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); } // hide non-used sliders for (int n = triangles.size() ; n < sliders.size() ; n++) { sliders.at(n)->setVisible(false); slider_names.at(n)->setVisible(false); } resetSliders(getNorm()); QStringList items; items << tr("None"); for (int n = 1 ; n <= genome->size() ; n++) items << QString::number(n); int n = m_crossComboBox->currentIndex(); m_crossComboBox->blockSignals(true); m_crossComboBox->clear(); m_crossComboBox->addItems(items); m_crossComboBox->setCurrentIndex(n); m_crossComboBox->blockSignals(false); } // scale and adjust the upper slider group void TriangleDensityWidget::resetSliders(double norm) { TriangleList triangles = triangleScene->triangles(); int n = 0; foreach (Triangle* t, triangles) { QSlider* sl = sliders[n]; QLabel* la = slider_names[n]; sl->blockSignals(true); sl->setSliderPosition((int)( t->xform()->density / norm * 1000. )); sl->blockSignals(false); sl->setVisible(true); la->setVisible(true); sl->setToolTip(triangleScene->getInfoLabel(t)); if (genome_ptr->final_xform_enable && genome_ptr->final_xform_index == n) { sl->setEnabled(false); la->setEnabled(false); } else { sl->setEnabled(true); la->setEnabled(true); } n++; } if (is_merged) { for (int n = 0 ; n < other_genome.num_xforms ; n++) { QSlider* sl = merged_sliders[n]; QLabel* la = merged_slider_names[n]; sl->blockSignals(true); sl->setSliderPosition((int)(other_genome.xform[n].density / norm * 1000. )); sl->blockSignals(false); sl->setVisible(true); la->setVisible(true); sl->setToolTip(tr("density: %1") .arg(other_genome.xform[n].density)); if (other_genome.final_xform_enable && other_genome.final_xform_index == n) { other_genome.xform[n].density = 0.; sl->setEnabled(false); la->setEnabled(false); } else { sl->setEnabled(true); la->setEnabled(true); } } } // force the splitter to resize QList sizes; sizes << m_scrollAreaWidgetContents->sizeHint().height() << m_scrollAreaWidgetContents_2->sizeHint().height(); splitter->setSizes(sizes); } double TriangleDensityWidget::getNorm() { double norm = 0; flam3_genome* g = genome_ptr; for (int n = 0 ; n < g->num_xforms ; n++) norm += g->xform[n].density; if (is_merged) { g = &other_genome; for (int n = 0 ; n < g->num_xforms ; n++) norm += g->xform[n].density; } return norm; } void TriangleDensityWidget::distToolButtonSlot(QAbstractButton* b) { TriangleList triangles = triangleScene->triangles(); if (b->objectName() == "m_zeroToolButton") { foreach (Triangle* t, triangles) t->xform()->density = 0.0000; triangles.first()->xform()->density = 0.01; } else if (b->objectName() == "m_equalToolButton") { double size = triangles.size(); if (genome_ptr->final_xform_enable && genome_ptr->final_xform_index < genome_ptr->num_xforms) size--; int n = 0; foreach (Triangle* t, triangles) { if (genome_ptr->final_xform_index == n++ && genome_ptr->final_xform_enable) continue; else t->xform()->density = 1./size; } } else if (b->objectName() == "m_randToolButton") { int n = 0; foreach (Triangle* t, triangles) { if (genome_ptr->final_xform_index == n++ && genome_ptr->final_xform_enable) continue; else t->xform()->density = flam3_random01()*flam3_random01()*10.; } } resetSliders(getNorm()); emit dataChanged(); emit undoStateSignal(); } void TriangleDensityWidget::distToolButtonSlot_2(QAbstractButton* b) { if (is_merged) { if (b->objectName() == "m_zeroToolButton_2") { for (int n = 0 ; n < other_genome.num_xforms ; n++) other_genome.xform[n].density = 0.0000; other_genome.xform[0].density = 0.01; } else if (b->objectName() == "m_equalToolButton_2") { double size = other_genome.num_xforms; if (other_genome.final_xform_enable && other_genome.final_xform_index < other_genome.num_xforms) size--; for (int n = 0 ; n < other_genome.num_xforms ; n++) if (other_genome.final_xform_enable && other_genome.final_xform_index == n) continue; else other_genome.xform[n].density = 1./size; } else if (b->objectName() == "m_randToolButton_2") { for (int n = 0 ; n < other_genome.num_xforms ; n++) if (other_genome.final_xform_enable && other_genome.final_xform_index == n) continue; else other_genome.xform[n].density = flam3_random01()*flam3_random01()*10.; } resetSliders(getNorm()); emit dataChanged(); } } void TriangleDensityWidget::mergeComboBoxChangedAction(int idx) { if (idx > 0) { flam3_genome* g = genome->data() + idx - 1; flam3_copy(&other_genome, g); logInfo(QString("TriangleDensityWidget::mergeWithGenomeAction : " "merging %1 with %2") .arg(genome->selected()).arg(idx - 1)); // make more sliders if necessary while (merged_sliders.size() < other_genome.num_xforms) { GroupedSlider* s = new GroupedSlider(Qt::Horizontal, this, merged_sliders.size()); QLabel* name = new QLabel(QString::number(merged_sliders.size() + 1)); QHBoxLayout* hl = new QHBoxLayout(); hl->addWidget(name); hl->addWidget(s); dynamic_cast (m_scrollAreaWidgetContents_2->layout())->insertLayout(-1,hl,0); s->setRange(0, 1000); s->setVisible(false); merged_sliders.append(s); merged_slider_names.append(name); connect(s, SIGNAL(valueChanged(int)), this, SLOT(groupedMergedSliderChangedSlot(int))); } // hide non-used sliders for (int n = other_genome.num_xforms ; n < merged_sliders.size() ; n++) { merged_sliders.at(n)->setVisible(false); merged_slider_names.at(n)->setVisible(false); } is_merged = true; resetSliders(getNorm()); m_mergeToolButton->setEnabled(true); } else { for (int n = 0 ; n < other_genome.num_xforms ; n++) { merged_sliders[n]->setVisible(false); merged_slider_names[n]->setVisible(false); } m_mergeToolButton->setEnabled(false); is_merged = false; resetSliders(getNorm()); } emit dataChanged(); } void TriangleDensityWidget::groupedMergedSliderChangedSlot(int value) { double merged_norm = getNorm(); other_genome.xform[grouped_slider_idx].density = (double)value / 1000. * merged_norm; resetSliders(merged_norm); emit dataChanged(); } flam3_genome* TriangleDensityWidget::getMergedGenome() { flam3_copy(&merged_genome, genome_ptr); int idxn = merged_genome.num_xforms; // count the number of xform having density > 0 int num_xforms = 0; for (int n = 0 ; n < other_genome.num_xforms ; n++) if (other_genome.xform[n].density != 0. || (!merged_genome.final_xform_enable && other_genome.final_xform_enable && other_genome.final_xform_index == n)) num_xforms++; flam3_add_xforms(&merged_genome, num_xforms, 0, 0); for (int n = 0 ; n < other_genome.num_xforms ; n++) if (other_genome.xform[n].density != 0.) flam3_copy_xform(merged_genome.xform + idxn++, other_genome.xform + n); else if (!merged_genome.final_xform_enable && other_genome.final_xform_enable && other_genome.final_xform_index == n) { // add the other_genome final xform if there isn't one set already logInfo(QString("TriangleDensityWidget::getMergedGenome : " "using other_genome.final_xform_index at %1").arg(idxn)); flam3_copy_xform(merged_genome.xform + idxn++, other_genome.xform + n); merged_genome.final_xform_enable = 1; merged_genome.final_xform_index = idxn; merged_genome.xform[idxn].density = 0.; } return &merged_genome; } bool TriangleDensityWidget::hasMergedGenome() { return is_merged; } void TriangleDensityWidget::mergeWithOtherGenomeAction() { if (is_merged) { flam3_copy(genome_ptr, getMergedGenome()); m_crossComboBox->blockSignals(true); m_crossComboBox->setCurrentIndex(0); m_crossComboBox->blockSignals(false); is_merged = false; blockSignals(true); mergeComboBoxChangedAction(0); blockSignals(false); emit genomeMerged(); emit undoStateSignal(); } } qosmic-1.6.0/src/triangledensitywidget.h000066400000000000000000000072111304321135200203550ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef TRIANGLEDENSITYWIDGET_H #define TRIANGLEDENSITYWIDGET_H #include #include #include #include "ui_triangledensitywidget.h" #include "qosmicwidget.h" #include "flam3util.h" #include "xfedit.h" // this is an interface the TriangleDensityWidget implements to use the sliders. class SliderGroup { public: SliderGroup() {} virtual ~SliderGroup() {} virtual void sliderGroupChanged(int idx)=0; }; class GroupedSlider : public QSlider { Q_OBJECT int m_idx; SliderGroup* m_group; QPointF m_pos; public: GroupedSlider(Qt::Orientation o, SliderGroup* p, int idx) : QSlider(o), m_idx(idx), m_group(p) { } void sliderChange(SliderChange change) { if (change & QAbstractSlider::SliderValueChange) m_group->sliderGroupChanged(m_idx); QSlider::sliderChange(change); } void mousePressEvent(QMouseEvent* event) { m_pos = event->globalPos(); m_group->sliderGroupChanged(m_idx); QSlider::mousePressEvent(event); } void mouseReleaseEvent(QMouseEvent* event) { if (m_pos != event->globalPos()) emit undoStateSignal(); QSlider::mouseReleaseEvent(event); } signals: void undoStateSignal(); }; class TriangleDensityWidget : public QWidget, public QosmicWidget, public SliderGroup, private Ui::TriangleDensityWidget { Q_OBJECT Triangle* selectedTriangle; FigureEditor* triangleScene; GenomeVector* genome; QList sliders; QList slider_names; int grouped_slider_idx; flam3_genome other_genome; flam3_genome merged_genome; QList merged_sliders; QList merged_slider_names; int merged_grouped_slider_idx; bool is_merged; public: TriangleDensityWidget(GenomeVector*, FigureEditor*, QWidget* =0); ~TriangleDensityWidget(); void sliderGroupChanged(int); flam3_genome* getMergedGenome(); bool hasMergedGenome(); signals: void dataChanged(); void genomeMerged(); void undoStateSignal(); public slots: void triangleSelectedSlot(Triangle*); void distToolButtonSlot(QAbstractButton*); void distToolButtonSlot_2(QAbstractButton*); void reset(); protected slots: void groupedSliderChangedSlot(int); void groupedSliderPressedSlot(); void groupedMergedSliderChangedSlot(int); void mergeComboBoxChangedAction(int); void mergeWithOtherGenomeAction(); private: void resetSliders(double); double getNorm(); }; #endif qosmic-1.6.0/src/triangleselection.cpp000066400000000000000000000160001304321135200200060ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "triangleselection.h" #include "xfedit.h" #include "logger.h" TriangleSelection::TriangleSelection(FigureEditor* f, BasisTriangle* b) : QGraphicsPolygonItem(QPolygonF(QRectF(0.,0.,1.,1.))), m_editor(f), m_basis(b), m_selectType(Triangle::Type) { } TriangleSelection::~TriangleSelection() { } int TriangleSelection::type() const { return Type; } void TriangleSelection::moveBy( double dx, double dy ) { foreach (Triangle* t, m_triangles) t->moveBy(dx,dy); foreach(NodeItem* node, m_nodes) node->moveBy(dx,dy); QPolygonF pa = polygon(); pa.translate(dx, dy); setPolygon(pa); } void TriangleSelection::rotate( double rad, QPointF cpos ) { foreach (Triangle* t, m_triangles) t->rotate(rad, t->mapFromItem(this, cpos)); QTransform trans = transform(); trans.translate(cpos.x(), cpos.y()); trans.rotate(-rad); trans.translate(-cpos.x(), -cpos.y()); setPolygon(trans.map(polygon())); foreach (NodeItem* n, m_nodes) { n->setPos(trans.map(n->pos())); n->triangle()->moveEdges(); } if (m_guide) m_guide->update(); } void TriangleSelection::scale( double dx, double dy, QPointF cpos ) { foreach (Triangle* t, m_triangles) t->scale(dx, dy, t->mapFromItem(this, cpos)); QTransform trans = transform(); trans.translate(cpos.x(), cpos.y()); trans.scale(dx, dy); trans.translate(-cpos.x(), -cpos.y()); setPolygon(trans.map(polygon())); foreach (NodeItem* n, m_nodes) { n->setPos(trans.map(n->pos())); n->triangle()->moveEdges(); } if (m_guide) m_guide->update(); } void TriangleSelection::flipHorizontally(QPointF cpos) { double tx = cpos.x(); foreach (Triangle* t, m_triangles) t->flipHorizontally(t->mapFromItem(this, cpos)); foreach (NodeItem* n, m_nodes) { QPointF p(n->pos()); p.rx() = p.x() - 2.*(p.x() - tx) ; n->setPos(p); n->triangle()->moveEdges(); } QPolygonF pa; foreach (QPointF p, polygon()) { p.rx() = p.x() - 2.*(p.x() - tx) ; pa << p; } setPolygon(pa); if (m_guide) m_guide->update(); } void TriangleSelection::flipVertically(QPointF cpos) { double ty = cpos.y(); foreach (Triangle* t, m_triangles) t->flipVertically(t->mapFromItem(this, cpos)); foreach (NodeItem* n, m_nodes) { QPointF p(n->pos()); p.ry() = p.y() - 2.*(p.y() - ty) ; n->setPos(p); n->triangle()->moveEdges(); } QPolygonF pa; foreach (QPointF p, polygon()) { p.ry() = p.y() - 2.*(p.y() - ty) ; pa << p; } setPolygon(pa); if (m_guide) m_guide->update(); } void TriangleSelection::selectCoveredItems() { switch (m_selectType) { case Triangle::Type: { QList collisions = collidingItems(); m_triangles.clear(); foreach (QGraphicsItem* item, collisions) switch (item->type()) { case Triangle::Type: case PostTriangle::Type: m_triangles.append(dynamic_cast(item)); } break; } case NodeItem::Type: { QList collisions = collidingItems(); m_nodes.clear(); foreach (QGraphicsItem* item, collisions) switch (item->type()) { case NodeItem::Type: m_nodes.append(dynamic_cast(item)); } break; } default: logWarn(QString("TriangleSelection::selectCoveredItems : unsupported type %1") .arg(m_selectType)); } } bool TriangleSelection::hasItems() const { return !(m_triangles.isEmpty() && m_nodes.isEmpty()); } Triangle* TriangleSelection::first() { if (!m_triangles.isEmpty()) return m_triangles.first(); else if (!m_nodes.isEmpty()) return m_nodes.first()->triangle(); return 0; } QList TriangleSelection::triangles() const { return m_triangles; } QList TriangleSelection::nodes() const { return m_nodes; } void TriangleSelection::clear() { m_triangles.clear(); m_nodes.clear(); } int TriangleSelection::selectedType() const { return m_selectType; } void TriangleSelection::setSelectedType(int rtti) { switch (rtti) { case Triangle::Type: case NodeItem::Type: m_selectType = rtti; break; default: logWarn(QString("TriangleSelection::setSelectedType : unsupported type %1").arg(rtti)); } } void TriangleSelection::addItem(QGraphicsItem* item) { switch (item->type()) { case NodeItem::Type: m_nodes.append(dynamic_cast(item)); break; case Triangle::Type: case PostTriangle::Type: m_triangles.append(dynamic_cast(item)); break; default: logWarn(QString("TriangleSelection::addItem : unsupported type %1") .arg(item->type())); } } bool TriangleSelection::contains(QGraphicsItem* item) const { switch (item->type()) { case NodeItem::Type: return m_nodes.contains(dynamic_cast(item)); case Triangle::Type: case PostTriangle::Type: return m_triangles.contains(dynamic_cast(item)); default: logWarn(QString("TriangleSelection::contains : unsupported type %1") .arg(item->type())); } return false; } // return true if selection contains any part of a Triangle or its PostTriangle bool TriangleSelection::containsAnyOf(Triangle* t) const { if (contains(t)) return true; if (t == m_editor->getSelectedTriangle() && m_editor->postEnabled()) { Triangle* post = m_editor->post(); if (contains(post)) return true; foreach (NodeItem* node, post->getNodes()) if (contains(node)) return true; } foreach (NodeItem* node, t->getNodes()) if (contains(node)) return true; return false; } QList TriangleSelection::allItems() const { QList items; foreach (QGraphicsItem* node, m_nodes) items.append(node); foreach (QGraphicsItem* triangle, m_triangles) items.append(triangle); return items; } BasisTriangle* TriangleSelection::basis() const { return m_basis; } void TriangleSelection::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { QGraphicsPolygonItem::paint(painter, option, widget); } qosmic-1.6.0/src/triangleselection.h000066400000000000000000000050471304321135200174640ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef TRIANGLESELECTION_H #define TRIANGLESELECTION_H #include #include "transformablegraphicsitem.h" class Triangle; class FigureEditor; class BasisTriangle; class NodeItem; class TriangleSelection : public QGraphicsPolygonItem, public TransformableGraphicsItem { private: FigureEditor* m_editor; BasisTriangle* m_basis; QList m_triangles; QList m_nodes; int m_selectType; public: TriangleSelection(FigureEditor*, BasisTriangle*); ~TriangleSelection(); int type() const; BasisTriangle* basis() const; FigureEditor* editor() const; void moveBy(double, double); void flipHorizontally(QPointF); void flipVertically(QPointF); void scale(double, double, QPointF); void rotate(double, QPointF); int selectedType() const; void setSelectedType(int); void selectCoveredItems(); bool hasItems() const; void clear(); QList triangles() const; QList nodes() const; Triangle* first(); void addItem(QGraphicsItem*); QList allItems() const; bool contains(QGraphicsItem* item) const; bool containsAnyOf(Triangle*) const; void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget =0); enum { Type = UserType + 5 }; }; #endif qosmic-1.6.0/src/undoring.cpp000066400000000000000000000070201304321135200161220ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "undoring.h" #include "logger.h" UndoRing::UndoRing() { logFiner("UndoRing::UndoRing() : enter"); current = head = -1; } UndoRing::UndoRing(const UndoRing& in) { logFiner("UndoRing::UndoRing(©) : enter"); current = head = -1; *this = in; } UndoRing& UndoRing::operator=(const UndoRing& in) { for (int n = 0 ; n < UNDORING_SIZE ; n++) ring[n] = in.ring[n]; current = in.current; head = in.head; return *this; } UndoRing::~UndoRing() { clear(); } UndoState* UndoRing::next() { if (current < head) current++; logFine(QString("UndoRing::next : current %1 / [%2,%3]") .arg(current) .arg(head - UNDORING_SIZE) .arg(head)); return ring + (current % UNDORING_SIZE); } UndoState* UndoRing::prev() { if (current > 0) { if (current > (head - UNDORING_SIZE + 1)) current--; logFine(QString("UndoRing::prev : current %1 / [%2,%3]") .arg(current) .arg(head - UNDORING_SIZE) .arg(head)); return ring + (current % UNDORING_SIZE); } return ring; } UndoState* UndoRing::advance() { current++; head = current; logFine(QString("UndoRing::advance : current %1").arg(current)); return ring + (current % UNDORING_SIZE); } UndoState* UndoRing::currentState() { return ring + (current % UNDORING_SIZE); } void UndoRing::clear() { logFiner(QString("UndoRing::clear : enter")); for (int n = 0 ; n < UNDORING_SIZE ; n++) (ring + n)->clear(); current = head = -1; } bool UndoRing::atHead() { return current == head; } bool UndoRing::atTail() { return current == (head - UNDORING_SIZE + 1) || current <= 0; } int UndoRing::index() { return (head - current + 1); } int UndoRing::size() { return UNDORING_SIZE; } UndoState::UndoState() : Genome() { clear(); } UndoState::UndoState(const UndoState& in) : Genome() { clear(); *this = in; } UndoState& UndoState::operator=(const UndoState& in) { flam3_copy(&Genome, (flam3_genome*)&(in.Genome)); // danger? SelectionRect = in.SelectionRect; SelectedType = in.SelectedType; NodesO = in.NodesO; NodesX = in.NodesX; NodesY = in.NodesY; Triangles = in.Triangles; MarkPos = in.MarkPos; return *this; } void UndoState::clear() { clear_cp(&Genome, flam3_defaults_on); SelectionRect = QPolygonF(); MarkPos = QPointF(); NodesO.clear(); NodesX.clear(); NodesY.clear(); } qosmic-1.6.0/src/undoring.h000066400000000000000000000042721304321135200155750ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef UNDORING_H #define UNDORING_H #include #include "flam3util.h" #define UNDORING_SIZE 50 class UndoState { public: flam3_genome Genome; QPolygonF SelectionRect; int SelectedType; QList NodesO; QList NodesX; QList NodesY; QList Triangles; QPointF MarkPos; UndoState(); UndoState(const UndoState&); UndoState& operator=(const UndoState&); void clear(); }; class UndoStateProvider { public: virtual void provideState(UndoState*) =0; virtual void restoreState(UndoState*) =0; }; class UndoRing { qint64 head; qint64 current; UndoState ring[UNDORING_SIZE]; public: UndoRing(); UndoRing(const UndoRing&); UndoRing& operator=(const UndoRing&); ~UndoRing(); UndoState* prev(); UndoState* next(); UndoState* advance(); UndoState* currentState(); void clear(); int index(); int size(); bool atHead(); bool atTail(); }; #endif qosmic-1.6.0/src/variationswidget.cpp000066400000000000000000000125701304321135200176660ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include "variationswidget.h" #include "flam3util.h" #include "logger.h" VariationsWidget::VariationsWidget(GenomeVector* gen, QWidget* parent) : QWidget(parent), genome(gen) { setupUi(this); model = new VarsTableModel(); m_variationsTable->setModel(model); m_variationsTable->restoreSettings(); m_variationsTable->header()->setStretchLastSection(false); m_variationsTable->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); m_variationsTable->header()->setSectionResizeMode(1, QHeaderView::Stretch); m_variationsTable->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents); m_variationValueEditor->restoreSettings(); lastVariation = ""; connect(m_variationsTable, SIGNAL(valueUpdated(int)), this, SLOT(variationEditedSlot(int))); connect(m_variationsTable, SIGNAL(undoStateSignal()), this, SIGNAL(undoStateSignal())); connect(m_variationsTable, SIGNAL(precisionChanged()), this, SLOT(updateFormData())); connect(m_variationSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(variationSelectedSlot(int))); connect(m_variationValueEditor, SIGNAL(valueUpdated()), this, SLOT(valueEditorUpdatedSlot())); connect(m_applyButton, SIGNAL(clicked(bool)), this, SLOT(addVariationValueSlot())); } VariationsWidget::~VariationsWidget() { delete model; } // connected to the '+' toolbutton above the treeview void VariationsWidget::addVariationValueSlot() { m_variationValueEditor->updateValue(0.0); updateFormData(); emit undoStateSignal(); } // connected to the doublevalueeditor above the treeview void VariationsWidget::valueEditorUpdatedSlot() { flam3_xform* xform = selectedTriangle->xform(); double* var = xform->var; var[Util::variation_number(lastVariation)] = m_variationValueEditor->value(); model->setModelData(xform); emit dataChanged(); } // connected to the combobox above the treeview void VariationsWidget::variationSelectedSlot(int /*idx*/) { flam3_xform* xform = selectedTriangle->xform(); double* var = xform->var; QString rowName = m_variationSelector->currentText(); if (lastVariation == rowName) return; int row = Util::variation_number(rowName); double thisvalue = m_variationValueEditor->value(); if (thisvalue == 0.0) lastVariation = rowName; else { if (!lastVariation.isEmpty()) var[Util::variation_number(lastVariation)] = 0.0; var[row] = thisvalue; lastVariation = rowName; model->setModelData(xform); emit dataChanged(); } } void VariationsWidget::resetVariationSelector() { double* var = selectedTriangle->xform()->var; m_variationSelector->blockSignals(true); QString current = m_variationSelector->currentText(); m_variationSelector->clear(); for (int n = 0 ; n < flam3_nvariations ; n++) { double value = var[n]; QString key = flam3_variation_names[n]; if (value == 0.0) m_variationSelector->addItem(key); } m_variationSelector->blockSignals(false); lastVariation = m_variationSelector->currentText(); m_variationValueEditor->updateValue(0.0); } void VariationsWidget::updateFormData() { logFiner("VariationsWidget::updateFormData : setting variations"); flam3_xform* xform = selectedTriangle->xform(); model->setPrecision( m_variationsTable->precision() ); model->setModelData(xform); resetVariationSelector(); } void VariationsWidget::variationEditedSlot(int /*row*/) { resetVariationSelector(); emit dataChanged(); } void VariationsWidget::triangleSelectedSlot(Triangle* t) { selectedTriangle = t; updateFormData(); } /** * For some reason the wheelEvent occuring over the table headers is handled * here. Throwing it down to the handler for the tablewidget causes an * infinite loop. */ void VariationsWidget::wheelEvent(QWheelEvent* e) { QAbstractSlider::SliderAction a = QAbstractSlider::SliderSingleStepSub; if (e->delta() < 0) { if (e->modifiers() & Qt::ControlModifier) a = QAbstractSlider::SliderPageStepAdd; else a = QAbstractSlider::SliderSingleStepAdd; } else if (e->modifiers() & Qt::ControlModifier) a = QAbstractSlider::SliderPageStepSub; if (m_variationsTable->isVisible()) m_variationsTable->verticalScrollBar()->triggerAction(a); e->accept(); } qosmic-1.6.0/src/variationswidget.h000066400000000000000000000042151304321135200173300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef VARIATIONSWIDGET_H #define VARIATIONSWIDGET_H #include #include #include "ui_variationswidget.h" #include "genomevector.h" #include "triangle.h" #include "varstablewidget.h" class VariationsWidget : public QWidget, private Ui::VariationsWidget { Q_OBJECT public: VariationsWidget(GenomeVector*, QWidget* parent=0); ~VariationsWidget(); public slots: void triangleSelectedSlot(Triangle* t); void updateFormData(); signals: void dataChanged(); void undoStateSignal(); protected: void wheelEvent(QWheelEvent*); void resetVariationSelector(); protected slots: void variationEditedSlot(int); void valueEditorUpdatedSlot(); void variationSelectedSlot(int); void addVariationValueSlot(); private: GenomeVector* genome; Triangle* selectedTriangle; VarsTableModel* model; QString lastVariation; }; #endif qosmic-1.6.0/src/varstablewidget.cpp000066400000000000000000000354041304321135200174730ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include "varstablewidget.h" #include "logger.h" const QString VarsTableModel::RESET = QString("x"); const QString VarsTableModel::CLEAR = QString(" "); VarsTableWidget::VarsTableWidget(QWidget* parent) : QTreeView(parent) { step = 0.1; start_value = 0.0; vars_precision = 4; setEditTriggers(QAbstractItemView::DoubleClicked); setSelectionMode(QAbstractItemView::SingleSelection); setSelectionBehavior(QAbstractItemView::SelectItems); header()->setSectionsMovable(false); } void VarsTableWidget::dataChanged(const QModelIndex& top, const QModelIndex& bottom) { QTreeView::dataChanged(top, bottom); showHideNullRows(); } void VarsTableWidget::showHideNullRows() { int rows = model()->rowCount(); QModelIndex idx(currentIndex()); // only show/hide children of rootItem if (idx.parent().internalId() != model()->index(0,0).parent().internalId()) idx = idx.parent(); for (int n = 0 ; n < rows ; n++) { QModelIndex vidx = model()->index(n, 1); if (vidx.data(0).toDouble() == 0.0) { if (n == idx.row()) { if (hasFocus()) setRowHidden(n, vidx.parent(), false); else setRowHidden(n, vidx.parent(), true); } else setRowHidden(n, vidx.parent(), true); } else setRowHidden(n, vidx.parent(), false); setExpanded(model()->index(n, 0), true); } } void VarsTableWidget::restoreSettings() { QSettings s; step = s.value(QString("varstablewidget/%1/step") .arg(objectName()), step).toDouble(); vars_precision = s.value(QString("varstablewidget/%1/precision") .arg(objectName()), vars_precision).toInt(); } void VarsTableWidget::keyPressEvent(QKeyEvent* e) { switch (e->key()) { case Qt::Key_BracketLeft: step *= 10.0; QSettings().setValue(QString("varstablewidget/%1/step").arg(objectName()), step); break; case Qt::Key_BracketRight: step *= 0.10; QSettings().setValue(QString("varstablewidget/%1/step").arg(objectName()), step); break; case Qt::Key_Return: emit valueUpdated(0); break; case Qt::Key_Plus: if (e->modifiers() & Qt::ControlModifier) { setPrecision(precision() + 1); QSettings().setValue(QString("varstablewidget/%1/precision").arg(objectName()), precision()); } break; case Qt::Key_Minus: if (e->modifiers() & Qt::ControlModifier) { setPrecision(precision() - 1); QSettings().setValue(QString("varstablewidget/%1/precision").arg(objectName()), precision()); } break; case Qt::Key_Delete: case Qt::Key_Backspace: { QModelIndex idx(currentIndex()); clearVariationValue(idx); break; } case Qt::Key_Space: { QModelIndex idx(currentIndex()); QModelIndex vidx(idx.sibling(idx.row(), 1)); setCurrentIndex(vidx); edit(vidx); break; } case Qt::Key_Right: { QModelIndex idx(currentIndex()); QTreeView::keyPressEvent(e); if (idx.column() == 1) setCurrentIndex(idx); break; } case Qt::Key_Up: case Qt::Key_Down: if (e->modifiers() & (Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier )) { double nstep = step; if (e->modifiers() & Qt::ShiftModifier) nstep *= 0.10; else if (e->modifiers() & Qt::ControlModifier) nstep *= 10.0; if (e->key() == Qt::Key_Down) nstep *= -1.0; QModelIndex idx(currentIndex()); QModelIndex vidx(idx.sibling(idx.row(), 1)); double item_data = vidx.data().toDouble(); double inc_value = item_data + nstep; if (qFuzzyCompare(1 + inc_value, 1 + 0.0)) inc_value = 0.0; setModelData(vidx, inc_value); e->accept(); break; } default: QTreeView::keyPressEvent(e); } } void VarsTableWidget::clearVariationValue(QModelIndex& idx) { QModelIndex vidx(idx.sibling(idx.row(), 1)); if (model()->data(vidx).toDouble() == 0.0) return; setModelData(vidx, 0.0); emit undoStateSignal(); } void VarsTableWidget::mousePressEvent(QMouseEvent* e) { switch (e->button()) { case Qt::LeftButton: { QModelIndex idx( indexAt(e->pos()) ); if (idx.column() == 1) { start_item = idx; last_pos = e->localPos(); start_value = start_item.data().toDouble(); e->accept(); } else if (idx.column() == 2) { clearVariationValue(idx); e->accept(); return; } else start_item = QModelIndex(); } default: ; } QTreeView::mousePressEvent(e); } void VarsTableWidget::mouseMoveEvent(QMouseEvent* e) { if ((e->buttons() & Qt::LeftButton) && start_item.isValid()) { double nstep = step; if (e->modifiers() & Qt::ShiftModifier) nstep *= 0.10; else if (e->modifiers() & Qt::ControlModifier) nstep *= 10.0; double dy = e->y() - last_pos.y(); last_pos = e->localPos(); if (dy == 0.0) return; if (dy > 0) nstep *= -1.0; double item_data = start_item.data().toDouble(); double inc_value = item_data + nstep; if (qFuzzyCompare(1 + inc_value, 1 + 0.0)) inc_value = 0.0; setModelData(start_item, inc_value); e->accept(); } } void VarsTableWidget::mouseReleaseEvent(QMouseEvent* e) { if ((e->button() == Qt::LeftButton) && start_item.isValid() && start_value != start_item.data().toDouble()) { start_item = QModelIndex(); e->accept(); emit undoStateSignal(); } QTreeView::mouseReleaseEvent(e); } int VarsTableWidget::precision() { return vars_precision; } void VarsTableWidget::setPrecision(int n) { if (vars_precision != n) { vars_precision = qMax(1, n); emit precisionChanged(); } } void VarsTableWidget::commitData(QWidget* editor) { QModelIndex idx(currentIndex()); if (idx.column() == 1) { QLineEdit* lineEdit = qobject_cast(editor); if (lineEdit) { bool ok; double current_value(idx.data().toDouble()); double editor_value( lineEdit->text().toDouble(&ok) ); if (ok && current_value != editor_value) setModelData(idx, editor_value); } } } void VarsTableWidget::setModelData(QModelIndex& idx, double value) { QModelIndex vidx(idx.sibling(idx.row(), 1)); QModelIndex ridx(idx.sibling(idx.row(), 2)); model()->setData(vidx, QLocale().toString(value, 'f', vars_precision)); model()->setData(ridx, value == 0.0 ? VarsTableModel::CLEAR : VarsTableModel::RESET); if (idx.parent().isValid()) emit valueUpdated(idx.parent().row()); else emit valueUpdated(idx.row()); } //------------------------------------------------------------------------------ VarsTableItem::VarsTableItem(const QList& data, VarsTableItem* parent) { parentItem = parent; itemData = data; } VarsTableItem::~VarsTableItem() { qDeleteAll(childItems); } void VarsTableItem::appendChild(VarsTableItem* item) { childItems.append(item); } VarsTableItem* VarsTableItem::child(int row) { return childItems.value(row); } int VarsTableItem::childCount() const { return childItems.count(); } int VarsTableItem::row() const { if (parentItem) return parentItem->childItems.indexOf(const_cast(this)); return 0; } int VarsTableItem::columnCount() const { return itemData.count(); } QVariant VarsTableItem::data(int column) const { return itemData.value(column); } bool VarsTableItem::setData(int column, const QVariant& value) { if (column < itemData.size()) { itemData.replace(column, value); return true; } return false; } VarsTableItem* VarsTableItem::parent() { return parentItem; } // ----------------------------------------------------------------------------- VarsTableModel::VarsTableModel(QObject* parent) : QAbstractItemModel(parent), decimals(2), activeColor(QColor(200,230,240)), inactiveColor(Qt::white) { QList itemData; itemData << tr("Variation") << tr("Value") << " "; rootItem = new VarsTableItem(itemData); // variables map setup QMap variablesMap; foreach (QString variable, Util::get_variable_names()) { int pos( variable.lastIndexOf(QChar('_')) ); QString variation( variable.left(pos) ); logFine(QString("VarsTableModel::VarsTableModel : adding %1 variables map %2") .arg(variation).arg(variable)); if (!variablesMap.contains(variation)) { QStringList* list = new QStringList(); variablesMap.insert(variation, list); } variablesMap.value(variation)->append( variable ); } foreach (QString variation, Util::variation_names()) { itemData.clear(); itemData << variation << "0.0" << " "; VarsTableItem* item = new VarsTableItem(itemData, rootItem); rootItem->appendChild(item); if (variablesMap.contains(variation)) foreach (QString variable, *(variablesMap.value(variation))) { itemData.clear(); itemData << variable << "0.0" << " "; VarsTableItem* variableItem = new VarsTableItem(itemData, item); item->appendChild(variableItem); } variationItems.insert(variation, item); } qDeleteAll(variablesMap); } VarsTableModel::~VarsTableModel() { delete rootItem; } int VarsTableModel::columnCount(const QModelIndex& parent) const { if (parent.isValid()) return static_cast(parent.internalPointer())->columnCount(); else return rootItem->columnCount(); } int VarsTableModel::rowCount(const QModelIndex& parent) const { VarsTableItem* parentItem; if (parent.column() > 0) return 0; if (!parent.isValid()) parentItem = rootItem; else parentItem = static_cast(parent.internalPointer()); return parentItem->childCount(); } QVariant VarsTableModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) return QVariant(); switch (role) { case Qt::DisplayRole: case Qt::EditRole: { VarsTableItem* item = static_cast(index.internalPointer()); if (item->parent() != rootItem && index.column() == 0) { // return only the unique part of a variation's variable name QString name( item->data(0).toString() ); int pos( name.lastIndexOf(QChar('_')) + 1 ); return name.mid(pos); } else return item->data(index.column()); } case Qt::UserRole: { VarsTableItem* item = static_cast(index.internalPointer()); return item->data(index.column()); } case Qt::BackgroundRole: { VarsTableItem* item = static_cast(index.internalPointer()); if (index.column() == 1 && item->data(1).toDouble() != 0.0) return activeColor; else return inactiveColor; } } return QVariant(); } bool VarsTableModel::setData(const QModelIndex& index, const QVariant& value, int role) { if (!index.isValid()) return false; if (role != Qt::EditRole) return false; logFine(QString("VarsTableModel::setData : (%1,%2) %3").arg(index.row()).arg(index.column()).arg(value.toString())); if (index.column() > 0) { VarsTableItem* item = static_cast(index.internalPointer()); if (item->setData(index.column(), value)) { if (index.column() == 1) { if (item->parent() == rootItem) xform->var[index.row()] = value.toDouble(); else Util::set_xform_variable(xform, item->data(0).toString(), value.toDouble()); } emit dataChanged(index, index); return true; } } return false; } QModelIndex VarsTableModel::index(int row, int column, const QModelIndex& parent) const { if (!hasIndex(row, column, parent)) return QModelIndex(); VarsTableItem* parentItem; if (!parent.isValid()) parentItem = rootItem; else parentItem = static_cast(parent.internalPointer()); VarsTableItem* childItem = parentItem->child(row); if (childItem) return createIndex(row, column, childItem); else return QModelIndex(); } QModelIndex VarsTableModel::parent(const QModelIndex& index) const { if (!index.isValid()) return QModelIndex(); VarsTableItem* childItem = static_cast(index.internalPointer()); VarsTableItem* parentItem = childItem->parent(); if (parentItem == rootItem) return QModelIndex(); return createIndex(parentItem->row(), 0, parentItem); } Qt::ItemFlags VarsTableModel::flags(const QModelIndex& index) const { if (!index.isValid()) return 0; if (index.column() == 1) return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; return Qt::ItemIsEnabled; } QVariant VarsTableModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role == Qt::DisplayRole) { if (orientation == Qt::Horizontal) return rootItem->data(section); else return rootItem->child(section)->data(0); } return QVariant(); } VarsTableItem* VarsTableModel::getVariation(int row) const { if (row >= rowCount()) return rootItem; return rootItem->child(row); } VarsTableItem* VarsTableModel::getItem(const QModelIndex& index) const { if (!index.isValid()) return rootItem; return static_cast(index.internalPointer()); } void VarsTableModel::updateVarsTableItem(VarsTableItem* item, double value) { QLocale l; item->setData(1, l.toString(value, 'f', decimals)); item->setData(2, value == 0.0 ? CLEAR : RESET); int children = item->childCount(); if (children > 0) for (int n = 0 ; n < children ; n++) { VarsTableItem* child = item->child(n); double value = Util::get_xform_variable(xform, child->data(0).toString()); child->setData(1, l.toString(value, 'f', decimals)); child->setData(2, value == 0.0 ? CLEAR : RESET); } } void VarsTableModel::setModelData(flam3_xform* xf) { xform = xf; double* var = xform->var; for (int n = 0 ; n < flam3_nvariations ; n++) { double value = var[n]; QString name(flam3_variation_names[n]); VarsTableItem* item = variationItems.value( name ); updateVarsTableItem(item, value); } emit dataChanged(index(0,0), index(flam3_nvariations - 1, 1)); } int VarsTableModel::precision() const { return decimals; } void VarsTableModel::setPrecision(int n) { if (decimals != n) { decimals = qMax(1, n); } } qosmic-1.6.0/src/varstablewidget.h000066400000000000000000000072721304321135200171420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef VARSTABLEWIDGET_H #define VARSTABLEWIDGET_H #include #include #include #include "flam3util.h" class VarsTableItem { QList childItems; QList itemData; VarsTableItem *parentItem; public: VarsTableItem(const QList&, VarsTableItem* =0); ~VarsTableItem(); VarsTableItem* child(int); VarsTableItem* parent(); int childCount() const; int columnCount() const; QVariant data(int) const; bool setData(int, const QVariant&); int row() const; void appendChild(VarsTableItem*); }; class VarsTableModel : public QAbstractItemModel { Q_OBJECT VarsTableItem* rootItem; flam3_xform* xform; int decimals; const QBrush activeColor; const QBrush inactiveColor; QMap variationItems; public: static const QString RESET; static const QString CLEAR; VarsTableModel(QObject* parent=0); ~VarsTableModel(); QModelIndex index (int, int, const QModelIndex& =QModelIndex()) const; int columnCount (const QModelIndex& =QModelIndex()) const; int rowCount (const QModelIndex& =QModelIndex()) const; QVariant data(const QModelIndex&, int =Qt::DisplayRole) const; bool setData(const QModelIndex&, const QVariant&, int =Qt::EditRole); QModelIndex parent(const QModelIndex&) const; Qt::ItemFlags flags(const QModelIndex&) const; QVariant headerData(int, Qt::Orientation, int =Qt::DisplayRole) const; VarsTableItem* getVariation(int row) const; VarsTableItem* getItem(const QModelIndex&) const; int precision() const; void setPrecision(int); void setModelData(flam3_xform*); private: void updateVarsTableItem(VarsTableItem*, double); }; class VarsTableWidget : public QTreeView { Q_OBJECT public: VarsTableWidget(QWidget* =0); void setPrecision(int); int precision(); void restoreSettings(); signals: void valueUpdated(int); void undoStateSignal(); void precisionChanged(); protected: void mousePressEvent(QMouseEvent*); void mouseMoveEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); void keyPressEvent(QKeyEvent*); void showHideNullRows(); void clearVariationValue(QModelIndex&); void setModelData(QModelIndex&, double); protected slots: void commitData(QWidget*); void dataChanged(const QModelIndex&, const QModelIndex&); private: double step; double start_value; QModelIndex start_item; QPointF last_pos; int vars_precision; }; #endif qosmic-1.6.0/src/viewerpresetsmodel.cpp000066400000000000000000000225121304321135200202300ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include "viewerpresetsmodel.h" #include "logger.h" ViewerPresetsModel* ViewerPresetsModel::singleInstance = 0; ViewerPresetsModel::ViewerPresetsModel() : QAbstractListModel() { loadPresets(); logFine(QString("ViewerPresetsModel::ViewerPresetsModel : %1 items in the model").arg(names.size())); } ViewerPresetsModel* ViewerPresetsModel::getInstance() { if (ViewerPresetsModel::singleInstance == 0) singleInstance = new ViewerPresetsModel(); return singleInstance; } int ViewerPresetsModel::rowCount(const QModelIndex& /*parent*/) const { return names.size(); } QVariant ViewerPresetsModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) return QVariant(); if (index.row() >= names.size()) return QVariant(); if (role == Qt::DisplayRole) return names.at(index.row()); else return QVariant(); } Qt::ItemFlags ViewerPresetsModel::flags(const QModelIndex& index) const { if (!index.isValid()) return Qt::ItemIsEnabled; return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } bool ViewerPresetsModel::setData(const QModelIndex& index, const QVariant& value, int role) { if (index.isValid() && role == Qt::EditRole) { int row = index.row(); QString name( value.toString() ); flam3_genome g = presets.value( names.at( row ) ); updatePresetSlot(row, name, &g); return true; } return false; } QVariant ViewerPresetsModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) return QVariant(); if (orientation == Qt::Horizontal) return tr("Column %1").arg(section); else return tr("Row %1").arg(section); } void ViewerPresetsModel::addPresetSlot(const QString& name, flam3_genome* genome) { presets.insert(name, *genome); names.append(name); savePresets(); emit dataChanged(index(0), index(names.size() - 1)); } void ViewerPresetsModel::delPresetSlot(int idx) { if (idx < 0 || idx >= names.size()) return; QString name( names.takeAt(idx) ); presets.remove(name); savePresets(); emit dataChanged(index(idx - 1), index(idx)); } void ViewerPresetsModel::updatePresetSlot(int idx, const QString& name, flam3_genome* genome) { if (idx < 0 || idx >= names.size()) return; QString oldname( names.at(idx) ); presets.remove(oldname); names[idx] = name; presets[name] = *genome; savePresets(); emit dataChanged(index(idx), index(idx)); } void ViewerPresetsModel::moveUpSlot(int row) { if (row <= 0 || row >= names.size()) return; names.swap(row - 1, row); savePresets(); emit dataChanged(index(0), index(names.size() - 1)); } void ViewerPresetsModel::moveDownSlot(int row) { if (row < 0 || row >= names.size() - 1) return; names.swap(row, row + 1); savePresets(); emit dataChanged(index(0), index(names.size() - 1)); } QStringList ViewerPresetsModel::presetNames() { return names; } flam3_genome ViewerPresetsModel::preset(const QString& preset) { if (presets.contains(preset)) return presets[preset]; return presets.values().first(); } void ViewerPresetsModel::applyPreset(const QString& name, flam3_genome* current) { flam3_genome g = preset(name); // this tries to adjust the brightness/nbatches ratio even // thought people shouldn't ever use more than 1 nbatches current->brightness *= (double)current->nbatches / g.nbatches; current->sample_density = g.sample_density; current->spatial_filter_radius = g.spatial_filter_radius; current->spatial_filter_select = g.spatial_filter_select; current->spatial_oversample = g.spatial_oversample; current->nbatches = g.nbatches; current->ntemporal_samples = g.ntemporal_samples; current->estimator = g.estimator; current->estimator_curve = g.estimator_curve; current->estimator_minimum = g.estimator_minimum; } void ViewerPresetsModel::loadPresets() { QSettings settings; int ncps = 0; int size = settings.beginReadArray("presets"); if (size == 0) loadDefaultPresets(); else for (int i = 0; i < size; ++i) { settings.setArrayIndex(i); QString name = settings.value("name").toString(); QString xml = settings.value("genome").toString(); presets.insert(name, *Util::read_xml_string(xml, &ncps)); names.append(name); } settings.endArray(); } void ViewerPresetsModel::savePresets() { QSettings settings; settings.remove("presets"); settings.beginWriteArray("presets"); for (int n = 0 ; n < names.size() ; n++) { settings.setArrayIndex(n); QString name(names[n]); flam3_genome g = presets[name]; g.num_xforms = 0; QString c(flam3_print_to_string(&g)); // keep only the flame tag c.remove(c.indexOf('>') + 1, c.length()); c.append("\n"); settings.setValue("name", name); settings.setValue("genome", c); } settings.endArray(); } void ViewerPresetsModel::loadDefaultPresets() { QSettings settings; int idx = 0; settings.remove("presets"); settings.beginWriteArray("presets"); settings.setArrayIndex(idx++); settings.setValue("name", tr("very-low quality")); settings.setValue("genome", QString("\n")); settings.setArrayIndex(idx++); settings.setValue("name", tr("low quality")); settings.setValue("genome", QString("\n")); settings.setArrayIndex(idx++); settings.setValue("name", tr("med-low quality")); settings.setValue("genome", QString("\n")); settings.setArrayIndex(idx++); settings.setValue("name", tr("med quality")); settings.setValue("genome", QString("\n")); settings.setArrayIndex(idx++); settings.setValue("name", tr("med-high quality")); settings.setValue("genome", QString("\n")); settings.setArrayIndex(idx++); settings.setValue("name", tr("high quality")); settings.setValue("genome", QString("\n")); settings.endArray(); loadPresets(); } qosmic-1.6.0/src/viewerpresetsmodel.h000066400000000000000000000047241304321135200177020ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef VIEWERPRESETSMODEL_H #define VIEWERPRESETSMODEL_H #include #include #include "flam3util.h" class ViewerPresetsModel : public QAbstractListModel { Q_OBJECT QMap presets; QStringList names; ViewerPresetsModel(); static ViewerPresetsModel* singleInstance; public: static ViewerPresetsModel* getInstance(); QVariant data(const QModelIndex& index, int role=Qt::DisplayRole) const; int rowCount(const QModelIndex& parent=QModelIndex() ) const; Qt::ItemFlags flags(const QModelIndex& index) const; QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const; bool setData(const QModelIndex& index, const QVariant& value, int role); QStringList presetNames(); void applyPreset(const QString&, flam3_genome*); flam3_genome preset(const QString&); public slots: void addPresetSlot(const QString& name, flam3_genome* genome); void delPresetSlot(int idx); void updatePresetSlot(int idx, const QString& name, flam3_genome* genome); void moveUpSlot(int idx); void moveDownSlot(int idx); protected: void loadPresets(); void savePresets(); void loadDefaultPresets(); }; #endif qosmic-1.6.0/src/viewerpresetswidget.cpp000066400000000000000000000117121304321135200204130ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include "viewerpresetswidget.h" ViewerPresetsWidget::ViewerPresetsWidget(GenomeVector* g, QWidget* parent) : QWidget(parent), QosmicWidget(this, "ViewerPresetsWidget"), genomes(g) { setupUi(this); setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint); model = ViewerPresetsModel::getInstance(); m_presetsList->setModel(model); connect(model, SIGNAL(dataChanged(const QModelIndex&,const QModelIndex&)), this, SIGNAL(dataChanged())); connect(m_presetsList, SIGNAL(clicked(const QModelIndex&)), this, SLOT(presetSelectedSlot(const QModelIndex&))); connect(m_addButton, SIGNAL(clicked(bool)), this, SLOT(addPresetSlot())); connect(m_delButton, SIGNAL(clicked(bool)), this, SLOT(delPresetSlot())); connect(m_updateButton, SIGNAL(clicked(bool)), this, SLOT(updatePresetSlot())); connect(m_upButton, SIGNAL(pressed()), this, SLOT(moveUpSlot())); connect(m_downButton, SIGNAL(pressed()), this, SLOT(moveDownSlot())); connect(m_hideButton, SIGNAL(clicked(bool)), this, SLOT(hide())); } void ViewerPresetsWidget::addPresetSlot() { bool ok; flam3_genome* g = genomes->selectedGenome(); QString name = tr("q%1/o%2/e%3") .arg(g->sample_density) .arg(g->spatial_oversample) .arg(g->estimator); QString text = QInputDialog::getText(this, tr("Add a new preset"), tr("Enter a name for the preset"), QLineEdit::Normal, name, &ok, Qt::Dialog); if (ok && !text.isEmpty()) { model->addPresetSlot(text, g); m_presetsList->setCurrentIndex(model->index( model->rowCount() - 1 )); } } void ViewerPresetsWidget::delPresetSlot() { QModelIndex idx = m_presetsList->currentIndex(); model->delPresetSlot(idx.row()); } void ViewerPresetsWidget::updatePresetSlot() { QModelIndex idx = m_presetsList->currentIndex(); QString oldname = idx.data().toString(); bool ok; QString text = QInputDialog::getText(this, tr("Rename preset"), tr("Enter a name for the preset"), QLineEdit::Normal, oldname, &ok, Qt::Dialog); if (ok && !text.isEmpty()) { flam3_genome* g = genomes->selectedGenome(); model->updatePresetSlot(idx.row(), text, g); } } void ViewerPresetsWidget::moveUpSlot() { QModelIndex idx = m_presetsList->currentIndex(); int row = idx.row(); model->moveUpSlot(row); m_presetsList->setCurrentIndex(model->index(row - 1)); } void ViewerPresetsWidget::moveDownSlot() { QModelIndex idx = m_presetsList->currentIndex(); int row = idx.row(); model->moveDownSlot(row); m_presetsList->setCurrentIndex(model->index(row + 1)); } QStringList ViewerPresetsWidget::presetNames() { return model->presetNames(); } void ViewerPresetsWidget::selectPreset(const QString& name) { QModelIndex item = model->match(model->index(0), Qt::DisplayRole, name, Qt::MatchFixedString).first(); if (item.isValid()) { m_presetsList->setCurrentIndex(item); presetSelectedSlot(item); } } void ViewerPresetsWidget::selectPreset(int idx) { QModelIndex item = model->index(idx); if (item.isValid()) { m_presetsList->setCurrentIndex(item); presetSelectedSlot(item); } } QString ViewerPresetsWidget::current() { // return the name of the last selected preset QModelIndex item = m_presetsList->currentIndex(); if (item.isValid()) return item.data().toString(); else return QString(); } int ViewerPresetsWidget::selectedIndex() const { return m_presetsList->currentIndex().row(); } void ViewerPresetsWidget::presetSelectedSlot(const QModelIndex& item) { flam3_genome* current = genomes->selectedGenome(); model->applyPreset(item.data().toString(), current); emit presetSelected(); } void ViewerPresetsWidget::keyPressEvent(QKeyEvent* event) { if (event->key() == Qt::Key_Escape) hide(); else QWidget::keyPressEvent(event); } qosmic-1.6.0/src/viewerpresetswidget.h000066400000000000000000000041751304321135200200650ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef VIEWERPRESETSWIDGET_H #define VIEWERPRESETSWIDGET_H #include "ui_viewerpresetswidget.h" #include "genomevector.h" #include "qosmicwidget.h" #include "viewerpresetsmodel.h" class ViewerPresetsWidget : public QWidget, public QosmicWidget, private Ui::ViewerPresetsWidget { Q_OBJECT GenomeVector* genomes; ViewerPresetsModel* model; public: ViewerPresetsWidget(GenomeVector*, QWidget* =0); QStringList presetNames(); QString current(); void selectPreset(const QString&); void selectPreset(int); int selectedIndex() const; void reset(); public slots: void addPresetSlot(); void delPresetSlot(); void updatePresetSlot(); void moveUpSlot(); void moveDownSlot(); void presetSelectedSlot(const QModelIndex&); signals: void presetSelected(); void dataChanged(); protected: void keyPressEvent(QKeyEvent*); }; #endif qosmic-1.6.0/src/wheelvalueeditor.cpp000066400000000000000000000025611304321135200176520ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include "wheelvalueeditor.h" bool WheelValueEditor::WHEEL_EVENTS_ENABLED = true; qosmic-1.6.0/src/wheelvalueeditor.h000066400000000000000000000026461304321135200173230ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef WHEELVALUEEDITOR_H #define WHEELVALUEEDITOR_H class WheelValueEditor { public: static bool WHEEL_EVENTS_ENABLED; }; #endif qosmic-1.6.0/src/xfedit.cpp000066400000000000000000001707351304321135200155760ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #include #include #include #include #include #include #include #include "xfedit.h" #include "logger.h" #define genome_ptr (genomes->selectedGenome()) /** * The QGraphicsScene that manages the Triangles. */ FigureEditor::FigureEditor(GenomeVector* g, QGraphicsView* parent) : QGraphicsScene(parent), QosmicWidget(this, "FigureEditor"), moving(0), genomes(g), view(parent), selectedTriangle(0), postTriangle(0), centered_scaling(None), transform_location(Origin), editMode(Move), move_edge_mode(false), has_selection(false), is_selecting(false), editing_post(false), menu_visible(false), move_border_size(10) { QTransform b(100.0, 0.0, 0.0, -100.0, 0.0, 0.0); basisTriangle = new BasisTriangle(this, b); QSettings settings; settings.beginGroup("figureeditor"); QVariant v(settings.value("basis")); if (!v.isNull() && v.convert(QVariant::Transform)) setCoordTransform(v.value()); popupMenu = new QMenu(tr("Edit Triangle")); cutAction = new QAction(QIcon(":icons/silk/cut.xpm"), tr("Cut"),this); copyAction = new QAction(QIcon(":icons/silk/page_copy.xpm"), tr("Copy"),this); pasteAction = new QAction(QIcon(":icons/silk/page_paste.xpm"), tr("Paste"),this); addAction = new QAction(QIcon(":icons/silk/shape_triangle_add.xpm"), tr("Add"),this); resAction = new QAction(QIcon(":icons/silk/shape_triangle_go.xpm"), tr("Reset Position"),this); flipHAction = new QAction(QIcon(":icons/silk/shape_flip_horizontal.xpm"), tr("Flip Horizontal"),this); flipVAction = new QAction(QIcon(":icons/silk/shape_flip_vertical.xpm"), tr("Flip Vertical"),this); rescaleAction = new QAction(QIcon(":icons/silk/shape_group.xpm"), tr("Rescale View"),this); triangleMenu = popupMenu->addMenu(tr("Triangles")); popupMenu->addSeparator(); popupMenu->addAction(cutAction); popupMenu->addAction(copyAction); popupMenu->addAction(pasteAction); popupMenu->addAction(addAction); popupMenu->addSeparator(); popupMenu->addAction(flipHAction); popupMenu->addAction(flipVAction); popupMenu->addAction(resAction); popupMenu->addSeparator(); popupMenu->addAction(rescaleAction); preview_density = settings.value("previewdensity", 10).toInt(); preview_depth = settings.value("previewdepth", 1).toInt(); preview_visible = settings.value("previewvisible", false).toBool(); labels_visible = settings.value("labelsvisible", true).toBool(); grid_visible = settings.value("gridvisible", true).toBool(); grid_color = QColor(settings.value("gridcolor", "#999999").toString()); guide_visible = settings.value("guidevisible", true).toBool(); guide_color = QColor(settings.value("guidecolor", "#ee0000").toString()); bg_color = QColor(settings.value("bgcolor", "#000000").toString()); centered_scaling = (SceneLocation)settings.value("centeredscaling", false).toInt(); transform_location = (SceneLocation)settings.value("transformlocation", (int)Origin).toInt(); editMode = (EditMode)settings.value("editmode", (int)Move).toInt(); setBackgroundBrush(Qt::black); addItem(basisTriangle); infoItem = new QGraphicsSimpleTextItem(); infoItem->setFont(QFont("Monospace", 8, QFont::Normal)); addItem(infoItem); selectionItem = new TriangleSelection(this, basisTriangle); selectionItem->setPen(QPen(QBrush(Qt::gray), 1, Qt::DashLine)); selectionItem->setZValue(-1); selectionItem->setVisible(false); selectionItem->setSelectedType(settings.value("selectiontype", Triangle::Type).toInt()); addItem(selectionItem); // The single GrahicsGuide instance passed around to all TransformableGraphicsItems graphicsGuide = new TransformableGraphicsGuide(this); bLabelA = new QGraphicsSimpleTextItem(QString("O")); bLabelA->setPos(basisTriangle->polygon().at(0) + QPointF(-10.0,0.0)); bLabelA->setBrush(QBrush(Qt::gray)); bLabelA->setZValue(0); addItem(bLabelA); bLabelB = new QGraphicsSimpleTextItem(QString("X")); bLabelB->setPos(basisTriangle->polygon().at(0) + QPointF(-10.0,0.0)); bLabelB->setBrush(QBrush(Qt::gray)); bLabelB->setZValue(0); addItem(bLabelB); bLabelC = new QGraphicsSimpleTextItem(QString("Y")); bLabelC->setPos(basisTriangle->polygon().at(0) + QPointF(-10.0,0.0)); bLabelC->setBrush(QBrush(Qt::gray)); bLabelC->setZValue(0); addItem(bLabelC); coordinateMark = new CoordinateMark(); coordinateMark->setPen(QPen(Qt::gray)); addItem(coordinateMark); coordinateMark->centerOn(QPointF(0.0,0.0)); coordinateMark->setVisible(transform_location == Mark); coordinateMark->setZValue(0); connect(triangleMenu, SIGNAL(triggered(QAction*)), this, SLOT(triangleMenuAction(QAction*))); connect(addAction, SIGNAL(triggered()), this, SLOT(addTriangleAction())); connect(cutAction, SIGNAL(triggered()), this, SLOT(cutTriangleAction())); connect(copyAction, SIGNAL(triggered()), this, SLOT(copyTriangleAction())); connect(pasteAction, SIGNAL(triggered()), this, SLOT(pasteTriangleAction())); connect(resAction, SIGNAL(triggered()), this, SLOT(resetTriangleCoordsAction())); connect(flipHAction, SIGNAL(triggered()), this, SLOT(flipTriangleHPopupAction())); connect(flipVAction, SIGNAL(triggered()), this, SLOT(flipTriangleVPopupAction())); connect(rescaleAction, SIGNAL(triggered()), this, SLOT(autoScale())); } FigureEditor::~FigureEditor() { delete selectionItem; delete graphicsGuide; delete postTriangle; delete infoItem; delete bLabelA; delete bLabelB; delete bLabelC; delete coordinateMark; delete popupMenu; delete triangleMenu; delete addAction; delete resAction; delete flipHAction; delete flipVAction; delete rescaleAction; delete basisTriangle; } void FigureEditor::writeSettings() { QSettings settings; settings.beginGroup("figureeditor"); settings.setValue("basis", QVariant::fromValue(transform())); settings.setValue("previewdensity", preview_density); settings.setValue("previewdepth", preview_depth); settings.setValue("previewvisible", preview_visible); settings.setValue("labelsvisible", labels_visible); settings.setValue("gridvisible", grid_visible); settings.setValue("gridcolor", grid_color.name()); settings.setValue("guidevisible", guide_visible); settings.setValue("guidecolor", guide_color.name()); settings.setValue("bgcolor", bg_color.name()); settings.setValue("centeredscaling", centered_scaling); settings.setValue("transformlocation", transform_location); settings.setValue("selectiontype", selectionItem->selectedType()); settings.setValue("editmode", editMode); } void FigureEditor::enableFinalXform(bool enable) { if (enable) { if (genome_ptr->final_xform_enable == 1) selectTriangle(trianglesList.last()); else { logFine("FigureEditor::enableFinalXform : enabling final xform"); flam3_add_xforms(genome_ptr, 1, 0, 1); reset(); selectTriangle(trianglesList.last()); emit triangleListChangedSignal(); emit undoStateSignal(); } } else { if (genome_ptr->final_xform_enable == 0) logWarn("FigureEditor::enableFinalXform : final xform already disabled"); else { logFine("FigureEditor::enableFinalXform : disabling final xform"); flam3_delete_xform(genome_ptr, genome_ptr->final_xform_index); reset(); selectTriangle(trianglesList.last()); emit triangleListChangedSignal(); emit undoStateSignal(); } } } void FigureEditor::addTriangleAction() { logFine(QString("FigureEditor::addTriangleAction : adding triangle to slot %1") .arg(genome_ptr->num_xforms)); Util::add_default_xforms(genome_ptr); reset(); logFine(QString("FigureEditor::addTriangleAction : %1 items in triangleList") .arg(trianglesList.size())); logFine(QString("FigureEditor::addTriangleAction : genome has %1 xforms") .arg( genome_ptr->num_xforms )); if (genome_ptr->final_xform_enable == 1) selectTriangle(trianglesList.size() - 2); else selectTriangle(trianglesList.last()); emit triangleListChangedSignal(); emit undoStateSignal(); } void FigureEditor::cutTriangleAction() { copyTriangleAction(); if (has_selection && selectionItem->hasItems()) { TriangleList triangles; if (selectionItem->selectedType() == NodeItem::Type) { foreach (NodeItem* node, selectionItem->nodes()) triangles << node->triangle(); } else triangles = selectionItem->triangles(); // flam3_delete_xform() moves down the higher indexed xforms after removing an xform, // so we remove xforms indexed from highest to lowest QList idxs; foreach (Triangle* t, triangles) { if (t->type() == PostTriangle::Type) { if (!triangles.contains(selectedTriangle)) t = selectedTriangle; else continue; } idxs << trianglesList.indexOf(t, 0); } qSort(idxs); QListIterator i(idxs); i.toBack(); while (i.hasPrevious()) flam3_delete_xform(genome_ptr, i.previous()); selectTriangle(qMax(0, idxs.at(0) - 1)); reset(); emit triangleListChangedSignal(); emit undoStateSignal(); } else removeTriangleAction(); } void FigureEditor::copyTriangleAction() { if (has_selection && selectionItem->hasItems()) { TriangleList triangles; if (selectionItem->selectedType() == NodeItem::Type) { foreach (NodeItem* node, selectionItem->nodes()) triangles << node->triangle(); } else triangles = selectionItem->triangles(); xformClip.clear(); foreach (Triangle* t, triangles) { if (t->type() == PostTriangle::Type) { if (!triangles.contains(selectedTriangle)) xformClip << *(selectedTriangle->xform()); } else xformClip << *(t->xform()); } logFine(QString("FigureEditor::copyTriangleAction : " "adding %1 triangles to clip").arg(triangles.size())); } else { Triangle* t = getCurrentOrSelected(); xformClip.clear(); xformClip << *(t->xform()); logFine(QString("FigureEditor::copyTriangleAction : " "adding 1 triangle to clip")); } } void FigureEditor::pasteTriangleAction() { int size = xformClip.size(); if (size > 0) { int n = genome_ptr->num_xforms; logFine(QString("FigureEditor::pasteTriangleAction : " "copying %1 triangles to slot %2").arg(size).arg(n)); flam3_add_xforms(genome_ptr, size, 0, 0); if (genome_ptr->final_xform_enable == 1) n -= 1; // don't copy over the final xform memcpy(genome_ptr->xform + n, xformClip.data(), sizeof(flam3_xform) * size); reset(); selectTriangle(n + size - 1); emit triangleListChangedSignal(); emit undoStateSignal(); } } void FigureEditor::removeTriangleAction() { Triangle* t = getCurrentOrSelected(); int idx = trianglesList.indexOf(t, 0); logFine(QString("FigureEditor::removeTriangleAction : " "Removing triangle %1").arg(idx)); flam3_delete_xform(genome_ptr, idx); selectTriangle(qMax(0, idx - 1)); reset(); emit triangleListChangedSignal(); emit undoStateSignal(); } Triangle* FigureEditor::getCurrentOrSelected() { Triangle* t; QGraphicsItem* item = itemAt(moving_start, QTransform()); if (menu_visible && item) { switch (item->type()) { case Triangle::Type: t = dynamic_cast(item); break; case NodeItem::Type: t = dynamic_cast(item)->triangle(); if (t->type() != PostTriangle::Type) break; default: t = selectedTriangle; } } else t = selectedTriangle; return t; } void FigureEditor::resetTriangleCoordsAction() { Triangle* t = selectedTriangle; QGraphicsItem* item = itemAt(moving_start, QTransform()); if (hasFocus() && menu_visible && item) { switch (item->type()) { case Triangle::Type: case PostTriangle::Type: t = dynamic_cast(item); break; default: ; } } else if (postEnabled()) t = dynamic_cast(post()); t->resetPosition(); triangleModifiedAction(t); emit undoStateSignal(); } void FigureEditor::mousePressEvent(QGraphicsSceneMouseEvent* e) { moving_start = e->scenePos(); if (e->button() == Qt::RightButton) { // menu_visible indicates that the menu is/was showing. It's used in // getCurrentOrSelected to possibly select an item. The menu_visible, // popupMenu, getCurrentOrSelected interaction works because the popup // event is synchronous, and the actions/slots are connected with type // Qt::DirectConnection. moving = 0; execPopupMenu(e->screenPos()); moving_start = QPointF(0.0, 0.0); } else if (e->button() == Qt::MidButton) { moving = 0; } else if (e->modifiers() & Qt::ControlModifier && !(e->modifiers() & Qt::ShiftModifier)) { // LeftButton+Ctrl to activate selection and start selecting items is_selecting = true; has_selection = false; selectionItem->setPos(QPointF(0.0,0.0)); selectionItem->setPolygon(QPolygonF(QRectF(moving_start,QSizeF(0.01,0.01)))); selectionItem->setVisible(true); selectionItem->clear(); update(); } else if (e->modifiers() & Qt::ShiftModifier && !(e->modifiers() & Qt::ControlModifier)) { // LeftButton+Shift to set mark if (coordinateMark->isVisible()) { // left mouse button + shift sets the coordinate mark coordinateMark->centerOn(moving_start); if (!trianglesList.isEmpty()) coordinateMark->setZValue(trianglesList.first()->nextZPos()); graphicsGuide->update(); update(); } } else // LeftButton, possibly with control+shift modifiers { QGraphicsItem* item = itemAt(moving_start, QTransform()); if (item == infoItem) // skip the infoItem if possible { QList list = items(moving_start); if (list.size() > 1) item = list.at(1); } if (item) { moving = 0; logFine(QString("FigureEditor::mousePressEvent : rtti %1") .arg(item->type())); switch (item->type()) { case Triangle::Type: selectTriangle(dynamic_cast(item)); case PostTriangle::Type: { moving = dynamic_cast(item); break; } case NodeItem::Type: { NodeItem* node = dynamic_cast(item); Triangle* t = node->triangle(); node->setZValue(t->nextZPos()); moving = node; if (t->type() == Triangle::Type) selectTriangle(t); break; } case GraphicsGuideScaleButton::Type: { GraphicsGuideScaleButton* b = dynamic_cast(item); moving = b; } case TriangleSelection::Type: case BasisTriangle::Type: break; default: logWarn(QString("FigureEditor::mousePressEvent : unknown type %1") .arg(item->type())); } // holding control+shift will activate and add an item to the selection if (e->modifiers() & (Qt::ControlModifier | Qt::ShiftModifier)) { // select the triangle for a node if selecting triangles if (selectionItem->selectedType() == Triangle::Type && item->type() == NodeItem::Type) item = dynamic_cast(item)->triangle(); if (!(item == selectionItem || selectionItem->contains(item)) && (item->type() == selectionItem->selectedType() || ( item->type() == PostTriangle::Type && selectionItem->selectedType() == Triangle::Type) ) ) { selectionItem->addItem(item); QPolygonF poly; foreach (QGraphicsItem* item, selectionItem->allItems()) poly = poly.united(QPolygonF(item->sceneBoundingRect())); selectionItem->setPolygon(poly.boundingRect()); selectionItem->setZValue(selectedTriangle->nextZPos()); selectionItem->setVisible(true); has_selection = true; selectionItem->setGraphicsGuide(graphicsGuide); } } // if the selection is active, then only ever select it if (hasSelection() && (item->type() != GraphicsGuideScaleButton::Type)) { if (item->type() != TriangleSelection::Type) { if (selectionItem->contains(item)) item = selectionItem; else item = 0; } if (item) { moving = dynamic_cast(item); if (!trianglesList.isEmpty()) moving->setZValue(trianglesList.first()->nextZPos()); } else moving = 0; } wheel_moved = false; } } QGraphicsScene::mousePressEvent(e); } void FigureEditor::mouseReleaseEvent(QGraphicsSceneMouseEvent* e) { if (moving) { moving = 0; QPointF dz (e->buttonDownScenePos(Qt::LeftButton) - e->scenePos()); if (editMode == Flip) { if (qAbs(dz.x()) > qAbs(dz.y())) flipTriangleHAction(); else if (qAbs(dz.x()) < qAbs(dz.y())) flipTriangleVAction(); } else { if (move_edge_mode) { editMode = Move; move_edge_mode = false; graphicsGuide->update(); } else if (editMode == Move) setTransformLocation(transform_location); update(); if (!dz.isNull() || wheel_moved) emit undoStateSignal(); } } else if (is_selecting) { is_selecting = false; if (e->scenePos() == e->buttonDownScenePos(Qt::LeftButton)) { selectionItem->setPolygon(QPolygonF(QRectF(QPointF(0.0,0.0),QSizeF(0.1,0.1)))); selectionItem->setPos(QPointF(0.0,0.0)); selectionItem->setVisible(false); selectionItem->setZValue(-1); selectionItem->clear(); if (editing_post) postTriangle->setGraphicsGuide(graphicsGuide); else selectedTriangle->setGraphicsGuide(graphicsGuide); has_selection = false; } else { selectionItem->setZValue(selectedTriangle->nextZPos()); selectionItem->selectCoveredItems(); has_selection = true; selectionItem->setGraphicsGuide(graphicsGuide); emit undoStateSignal(); } update(); } view->setCursor(Qt::ArrowCursor); moving_start = QPointF(0.0,0.0); QGraphicsScene::mouseReleaseEvent(e); } void FigureEditor::mouseMoveEvent(QGraphicsSceneMouseEvent* e) { static Triangle* lastt; QPointF scenePos ( e->scenePos() ); QPointF screenPos( e->screenPos() ); // I guess we're only interested in scenePos() changes? There // is an undocumented feature where this event handler is called // when the sceneRect is changed. if (screenPos == e->lastScreenPos()) return; qreal dx( scenePos.x() - moving_start.x() ); qreal dy( scenePos.y() - moving_start.y() ); QGraphicsItem* item = itemAt(scenePos, QTransform()); if ( moving ) { infoItem->hide(); lastt = 0; if ( moving->type() == TriangleSelection::Type ) { if ( editMode == Move ) { QPointF pt( selectedTriangle->mapFromScene( dx, dy ) ); QPointF p( selectionItem->mapFromItem(selectedTriangle, pt) ); scenePos = moveAnItem(selectionItem, e, p.x(), p.y()); } else if ( editMode == Rotate ) { if (qAbs(dx) >= qAbs(dy)) { if (e->modifiers() & Qt::ShiftModifier) dx /= 10.0; else if (e->modifiers() & Qt::ControlModifier) dx *= 10.0; rotateSelection(dx, selectionTransformPos()); } } else if ( editMode == Scale ) { if (qAbs(dx) >= qAbs(dy)) { if (dx > 0) { if (e->modifiers() & Qt::ShiftModifier) dx = 1.01; else if (e->modifiers() & Qt::ControlModifier) dx = 1.10; else dx = 1.05; } else { if (e->modifiers() & Qt::ShiftModifier) dx = 0.99; else if (e->modifiers() & Qt::ControlModifier) dx = 0.9090; else dx = 0.9523; } scaleSelection(dx, dx, selectionTransformPos()); } } } else if ( moving->type() == GraphicsGuideScaleButton::Type ) { QGraphicsItem* parent( moving->parentItem() ); QGraphicsItem* t = dynamic_cast( parent->parentItem() ); QRectF mrect( moving->mapRectToScene(moving->boundingRect()) ); QPointF bpos( mrect.center() ); QPointF tpos; if (t->type() == TriangleSelection::Type) tpos = selectionTransformPos(); else tpos = triangleTransformPos(); QPointF cen( t->mapToScene(tpos) ); qreal dx( qAbs(bpos.x() - cen.x()) ); qreal dy( qAbs(bpos.y() - cen.y()) ); if (dx != 0.0 && dy != 0.0) { qreal sx( qAbs(scenePos.x() - cen.x()) / dx ); qreal sy( qAbs(scenePos.y() - cen.y()) / dy ); QTransform trans( parent->transform() ); trans.scale(sx,sy); QRectF trect( t->mapRectToScene(trans.mapRect(parent->boundingRect())) ); qreal blen = mrect.width(); if ( (trect.width() < blen*2.0) ) sx = 1.0; if ( (trect.height() < blen*2.0) ) sy = 1.0; if (e->modifiers() & Qt::ControlModifier) { if (e->modifiers() & Qt::ShiftModifier) sy = 1.0; else sx = 1.0; } if ((sx != 1.0) || (sy != 1.0)) { if (t->type() == TriangleSelection::Type) scaleSelection( qMin(sx, qreal(1.15)), qMin(sy, qreal(1.15)), tpos); else scaleTriangle(dynamic_cast(t), qMin(sx, qreal(1.15)), qMin(sy, qreal(1.15)), tpos); } } } else // moving->type() == Triangle::Type || PostTriangle::Type || NoteItem::Type { Triangle* t = 0; NodeItem* node = 0; if (moving->type() == NodeItem::Type) { node = dynamic_cast(moving); t = node->triangle(); } else t = dynamic_cast(moving); if ( editMode == Rotate || (editMode == Move && t->getEdgeType() == Triangle::RotateEdge && !node) ) { if (qAbs(dx) >= qAbs(dy)) { if (e->modifiers() & Qt::ShiftModifier) dx /= 10.0; else if (e->modifiers() & Qt::ControlModifier) dx *= 10.0; if (editMode == Move) { // Activate rotate mode when selecting edges. This // makes the triangles repaint with rotation mode guides. editMode = Rotate; move_edge_mode = true; } if (node) { t->rotateNode(node, dx, triangleTransformPos()); if (editing_post) t = selectedTriangle; triangleModifiedAction(t); } else rotateTriangle(t, dx, triangleTransformPos()); } } else if ( editMode == Scale || (editMode == Move && t->getEdgeType() == Triangle::ScaleEdge && !node) ) { if (qAbs(dx) >= qAbs(dy)) { if (dx > 0) { if (e->modifiers() & Qt::ShiftModifier) dx = 1.01; else if (e->modifiers() & Qt::ControlModifier) dx = 1.10; else dx = 1.05; } else { if (e->modifiers() & Qt::ShiftModifier) dx = 0.99; else if (e->modifiers() & Qt::ControlModifier) dx = 0.9090; else dx = 0.9523; } if (editMode == Move) { // Activate scaling mode when selecting edges. This // makes the triangles repaint with scaling mode guides. editMode = Scale; move_edge_mode = true; } scaleTriangle(t, dx, dx, triangleTransformPos()); } } else if ( editMode == Flip ) { QPointF dz (e->buttonDownScenePos(Qt::LeftButton) - e->scenePos()); qreal dx = dz.x(); qreal dy = dz.y(); if (qAbs(dx) > qAbs(dy)) view->setCursor(Qt::SplitHCursor); else if (qAbs(dx) < qAbs(dy)) view->setCursor(Qt::SplitVCursor); else view->setCursor(Qt::ArrowCursor); } else // Move mode scenePos = moveAnItem(moving, e, dx, dy); } moving_start = scenePos; update(); } else if (is_selecting) { selectionItem->setPolygon(QPolygonF(QRectF(moving_start,scenePos))); update(); } else if (e->buttons() & Qt::MidButton) { // middle mouse button + shift sets the coordinate mark if (coordinateMark->isVisible() && e->modifiers() & Qt::ShiftModifier) { coordinateMark->centerOn(scenePos); graphicsGuide->update(); update(); } // use control to scale the scene else if (e->modifiers() & Qt::ControlModifier) { dx = (screenPos.x() - e->lastScreenPos().x()); dy = (screenPos.y() - e->lastScreenPos().y()); if (qAbs(dx) >= qAbs(dy)) { dx = (dx > 0) ? ( 1.05 + log(dx) / 10.0 ) : ( 0.9523 - log(qAbs(dx)) / 10.0 ); scaleBasis(dx, dx); } } else { // otherwise scroll the qgraphicsview QScrollBar* hbar = view->horizontalScrollBar(); QScrollBar* vbar = view->verticalScrollBar(); dx = (screenPos.x() - e->lastScreenPos().x()); dy = (screenPos.y() - e->lastScreenPos().y()); hbar->setValue(hbar->value() - dx); vbar->setValue(vbar->value() - dy); if (infoItem->isVisible()) { infoItem->hide(); lastt = 0; } // return early and avoid emitting a coordinateChangeSignal return; } } else if (e->buttons() & Qt::LeftButton) { // left mouse button + shift sets the coordinate mark if (coordinateMark->isVisible() && e->modifiers() & Qt::ShiftModifier) { coordinateMark->centerOn(scenePos); graphicsGuide->update(); update(); } else { // otherwise scroll the qgraphicsview QScrollBar* hbar = view->horizontalScrollBar(); QScrollBar* vbar = view->verticalScrollBar(); dx = (screenPos.x() - e->lastScreenPos().x()); dy = (screenPos.y() - e->lastScreenPos().y()); hbar->setValue(hbar->value() - dx); vbar->setValue(vbar->value() - dy); if (infoItem->isVisible()) { infoItem->hide(); lastt = 0; } // return early and avoid emitting a coordinateChangeSignal return; } } else if (item) { switch (item->type()) { case NodeItem::Type: item = dynamic_cast(item)->triangle(); case Triangle::Type: if (item->type() != PostTriangle::Type) { // show the xform's infoItem for this triangle Triangle* t = dynamic_cast(item); if (lastt != t) { infoItem->setText(getInfoLabel(t)); QPoint pt = QPoint(5, view->maximumViewportSize().height() + 10 - (int)infoItem->boundingRect().height()); // 10 units of fudge infoItem->setPos(view->mapToScene(pt)); infoItem->setBrush(QBrush(t->pen().color())); infoItem->setZValue(selectedTriangle->zValue()); infoItem->show(); lastt = t; } break; } case PostTriangle::Type: { Triangle* t = selectedTriangle; int tidx = trianglesList.indexOf(t); infoItem->setText(tr("post transform: %1\n").arg(tidx + 1)); QPoint pt = QPoint(5, view->maximumViewportSize().height() + 10 - (int)infoItem->boundingRect().height()); // 10 units of fudge infoItem->setPos(view->mapToScene(pt)); infoItem->setBrush(QBrush(t->pen().color())); infoItem->setZValue(selectedTriangle->zValue()); infoItem->show(); break; } default: ; } } else if (item != infoItem && infoItem->isVisible()) { infoItem->hide(); lastt = 0; } emit coordinateChangeSignal( scenePos.x(), scenePos.y() ); QGraphicsScene::mouseMoveEvent(e); } QPointF FigureEditor::moveAnItem(QGraphicsItem* item, QGraphicsSceneMouseEvent* e, int dx, int dy) { const QRect vr(view->viewport()->rect().adjusted( move_border_size, move_border_size, -move_border_size, -move_border_size)); if (moveScrollMutex.tryLock()) { view->setCursor(Qt::SizeAllCursor); m_vrect = view->mapToScene(vr).boundingRect(); if (!m_vrect.contains(e->scenePos())) { // otherwise scroll the qgraphicsview QScrollBar* hbar = view->horizontalScrollBar(); QScrollBar* vbar = view->verticalScrollBar(); m_scenePos = e->scenePos(); m_lastScenePos = e->lastScenePos(); int dn = 0, dx, dy; if (m_scenePos.x() < m_vrect.left()) dn = qAbs(m_scenePos.x() - m_vrect.left()); if (m_scenePos.x() > m_vrect.right()) dn = qAbs(m_scenePos.x() - m_vrect.right()); if (m_scenePos.y() < m_vrect.top()) dn = qAbs(m_scenePos.y() - m_vrect.top()); if (m_scenePos.y() > m_vrect.bottom()) dn = qAbs(m_scenePos.y() - m_vrect.bottom()); while (QApplication::mouseButtons() & Qt::LeftButton) { if (m_vrect.contains(m_scenePos)) break; double dxx = 0; double dyy = 0; int dt = 0; dx = dy = 0; if (QApplication::keyboardModifiers() & Qt::ControlModifier) dt = dn; else if (QApplication::keyboardModifiers() & Qt::ShiftModifier) dt = 1; else dt = 2; if (m_scenePos.x() >= m_vrect.right()) { dx = dt; if (m_scenePos.y() < m_vrect.bottom() && m_scenePos.y() > m_vrect.top()) dyy = m_scenePos.y() - m_lastScenePos.y(); } if (m_scenePos.y() >= m_vrect.bottom()) { dy = dt; if (m_scenePos.x() < m_vrect.right() && m_scenePos.x() > m_vrect.left()) dxx = m_scenePos.x() - m_lastScenePos.x(); } if (m_scenePos.y() <= m_vrect.top()) { dy = -dt; if (m_scenePos.x() < m_vrect.right() && m_scenePos.x() > m_vrect.left()) dxx = m_scenePos.x() - m_lastScenePos.x(); } if (m_scenePos.x() <= m_vrect.left()) { dx = -dt; if (m_scenePos.y() < m_vrect.bottom() && m_scenePos.y() > m_vrect.top()) dyy = m_scenePos.y() - m_lastScenePos.y(); } moveItemBy(item, dx + dxx, dy + dyy); hbar->setValue(hbar->value() + dx); vbar->setValue(vbar->value() + dy); m_scenePos = m_lastScenePos; QCoreApplication::processEvents(); } } else { moveItemBy(item, dx, dy); m_scenePos = e->scenePos(); } moveScrollMutex.unlock(); } else { m_scenePos = e->scenePos(); m_lastScenePos = e->lastScenePos(); m_vrect = view->mapToScene(vr).boundingRect(); } return m_scenePos; } void FigureEditor::moveItemBy(QGraphicsItem* item, int dx, int dy) { switch (item->type()) { case PostTriangle::Type: case Triangle::Type: { dynamic_cast(item)->moveBy(dx, dy); // need a virtual moveBy() triangleModifiedAction(selectedTriangle); break; } case NodeItem::Type: { dynamic_cast(item)->moveBy(dx, dy); triangleModifiedAction(selectedTriangle); break; } case TriangleSelection::Type: { TriangleSelection* selectionItem = dynamic_cast(item); selectionItem->moveBy(dx, dy); if (selectionItem->hasItems()) { if (selectionItem->containsAnyOf(selectedTriangle)) triangleModifiedAction(selectedTriangle); else emit triangleModifiedSignal(selectionItem->first()); } break; } default: logWarn(QString("FigureEditor::moveItemBy : unknown item type %1").arg(item->type())); } } void FigureEditor::wheelEvent(QGraphicsSceneWheelEvent* e) { QPointF p = e->scenePos(); QGraphicsItem* item = itemAt(p, QTransform()); if (item) { switch (item->type()) { case Triangle::Type: case PostTriangle::Type: { double rad; Triangle* t; if (item->type() == Triangle::Type) t = dynamic_cast(item); else t = dynamic_cast(item); QPointF cpos = t->mapFromScene(p); if (e->modifiers() & Qt::ControlModifier) { // scale if (e->delta() > 0) if (e->modifiers() & Qt::ShiftModifier) rad = 1.05; else rad = 1.1; else if (e->modifiers() & Qt::ShiftModifier) rad = 0.9523; else rad = 0.9090; scaleTriangle(t, rad, rad, cpos); } else { // rotate if (e->modifiers() & Qt::ShiftModifier) rad = (double)e->delta() / (128.*M_PI); else rad = (double)e->delta() / (16.*M_PI); rotateTriangle(t, rad, cpos); } e->accept(); break; } case BasisTriangle::Type: { double rad; if (e->delta() > 0) if (e->modifiers() & Qt::ShiftModifier) rad = 1.1; else rad = 1.2; else if (e->modifiers() & Qt::ShiftModifier) rad = 0.9090; else rad = 0.8333; scaleBasis(rad,rad); e->accept(); break; } case TriangleSelection::Type: { double rad; QPointF cpos = selectionItem->mapFromScene(p); if (e->modifiers() & Qt::ControlModifier) { // scale if (e->delta() > 0) if (e->modifiers() & Qt::ShiftModifier) rad = 1.05; else rad = 1.1; else if (e->modifiers() & Qt::ShiftModifier) rad = 0.9523; else rad = 0.9090; scaleSelection(rad, rad, cpos); } else { // rotate if (e->modifiers() & Qt::ShiftModifier) rad = (double)e->delta() / (128.*M_PI); else rad = (double)e->delta() / (16.*M_PI); rotateSelection(rad, cpos); } e->accept(); } default: ; } wheel_moved = true; } else { // scale the scene double rad; if (e->delta() > 0) { if (e->modifiers() & Qt::ShiftModifier) rad = 1.1; else if (e->modifiers() & Qt::ControlModifier) rad = 1.5; else rad = 1.2; } else { if (e->modifiers() & Qt::ShiftModifier) rad = 0.9090; else if (e->modifiers() & Qt::ControlModifier) rad = 0.6767; else rad = 0.8333; } moving_start = QPointF(0.0, 0.0); scaleBasis(rad,rad); e->accept(); } } void FigureEditor::scaleInScene() { scaleBasis(1.1, 1.1); } void FigureEditor::scaleOutScene() { scaleBasis(.9, .9); } void FigureEditor::triangleModifiedAction(Triangle* t) { logFinest(QString("FigureEditor::triangleModifiedAction : t=0x%1") .arg((long)t, 0, 16)); if (t->type() == PostTriangle::Type) t = selectedTriangle; selectTriangle(t); updatePreview(); emit triangleModifiedSignal(t); } void FigureEditor::flipTriangleHAction() { if (hasSelection()) flipSelectionHAction(selectionTransformPos()); else if (postEnabled()) flipTriangleHAction(post(), triangleTransformPos()); else flipTriangleHAction(selectedTriangle, triangleTransformPos()); emit undoStateSignal(); } void FigureEditor::flipTriangleVAction() { if (hasSelection()) flipSelectionVAction(selectionTransformPos()); else if (postEnabled()) flipTriangleVAction(post(), triangleTransformPos()); else flipTriangleVAction(selectedTriangle, triangleTransformPos()); emit undoStateSignal(); } void FigureEditor::flipTriangleHPopupAction() { if (has_selection) flipSelectionHAction(selectionItem->mapFromScene(moving_start)); else if (editing_post) flipTriangleHAction(dynamic_cast(postTriangle), postTriangle->mapFromScene(moving_start)); else flipTriangleHAction(selectedTriangle, selectedTriangle->mapFromScene(moving_start)); emit undoStateSignal(); } void FigureEditor::flipTriangleHAction(Triangle* t, QPointF cpos) { t->flipHorizontally(cpos); triangleModifiedAction(t); } void FigureEditor::flipTriangleVPopupAction() { if (has_selection) flipSelectionVAction(selectionItem->mapFromScene(moving_start)); else if (editing_post) flipTriangleVAction(dynamic_cast(postTriangle), postTriangle->mapFromScene(moving_start)); else flipTriangleVAction(selectedTriangle, selectedTriangle->mapFromScene(moving_start)); emit undoStateSignal(); } void FigureEditor::flipTriangleVAction(Triangle* t, QPointF cpos) { t->flipVertically(cpos); triangleModifiedAction(t); } void FigureEditor::flipSelectionVAction(QPointF cpos) { selectionItem->flipVertically(cpos); if (selectionItem->hasItems()) triangleModifiedAction(selectedTriangle); } void FigureEditor::flipSelectionHAction(QPointF cpos) { selectionItem->flipHorizontally(cpos); if (selectionItem->hasItems()) triangleModifiedAction(selectedTriangle); } BasisTriangle* FigureEditor::basis() const { return basisTriangle; } void FigureEditor::setCoordTransform(QTransform m) { basisTriangle->setCoordTransform(m); } const QTransform& FigureEditor::transform() const { return basisTriangle->coordTransform(); } void FigureEditor::selectTriangle(Triangle* t) { if (selectedTriangle == t) return; bool post = editing_post; blockSignals(true); if (selectedTriangle) { const QColor c(Util::get_xform_color(genome_ptr, selectedTriangle->xform())); selectedTriangle->setPen(QPen(c, 0, Qt::DashLine)); selectedTriangle->setBrush(Qt::NoBrush); editPostTriangle(false); } selectedTriangle = t; logFine(QString("FigureEditor::selectTriangle : selecting triangle %1") .arg(trianglesList.indexOf(t, 0) + 1)); QColor c(Util::get_xform_color(genome_ptr, selectedTriangle->xform())); selectedTriangle->setPen(QPen(c, 0, Qt::SolidLine)); c.setAlphaF(0.5); QBrush brush(c, Qt::SolidPattern); brush.setTransform(basisTriangle->coordTransform()); selectedTriangle->setBrush(brush); selectedTriangle->moveToFront(); box_center = selectedTriangle->polygon().boundingRect().center(); // the guide decorator is applied to the selected triangle in editPostTriangle() editPostTriangle(post); blockSignals(false); updatePreview(); emit triangleSelectedSignal(t); } void FigureEditor::createXformPreview() { int xi = selectedTriangleIndex(); logFiner(QString("FigureEditor::createXformPreview : xi = %1").arg(xi)); double range = 1.0; int numvals = preview_density; int depth = preview_depth; int rcnt = 2* (2*numvals+1)*(2*numvals+1); QVector* result; randctx* rc = Util::get_isaac_randctx(); flam3_genome g = flam3_genome(); for (int n = 0 ; n < depth ; n++) { if (n < xformPreview.size()) { result = xformPreview.at(n); result->resize(rcnt); } else { result = new QVector(rcnt); xformPreview.append(result); } flam3_copy(&g, genomes->selectedGenome()); flam3_xform_preview(&g, xi, range, numvals, n+1, result->data(), rc); } clear_cp(&g, flam3_defaults_on); while ( xformPreview.size() > depth ) { QVector*result = xformPreview.last(); xformPreview.pop_back(); delete result; } } void FigureEditor::updatePreview() { if (preview_visible) { createXformPreview(); update(); } } QAction* FigureEditor::execPopupMenu(const QPoint& p) { // setup the triangle popup menu triangleMenu->clear(); for (int n = 0 ; n < genome_ptr->num_xforms ; n++) { Triangle* t = trianglesList.at(n); QSize pix_size(64, 64); // the icon size QPolygonF poly = t->getCoords(); QRectF prect = poly.boundingRect(); QPointF pcenter = prect.center(); qreal min_side = qMax(prect.width(), prect.height()); qreal scale = pix_size.width() / min_side; QTransform ts(QTransform().scale(scale, scale)); QTransform tf(ts.m11(), ts.m12(), ts.m13(), ts.m21(), -ts.m22(), ts.m23(), ts.m31(), ts.m32(), ts.m33()); poly.translate(-pcenter.x(), -pcenter.y()); poly = tf.map(poly); poly.translate(pix_size.width() / 2, pix_size.height() / 2); QPixmap pix(pix_size); QPainter p(&pix); p.fillRect(QRect(QPoint(0, 0), pix_size), bgColor()); const QPen pen(Util::get_xform_color(genome_ptr, t->xform()), 0, Qt::DashLine); p.setPen(pen); p.setBrush(QBrush(pen.color(), Qt::SolidPattern)); p.drawPolygon(poly); QString action_name = QString("%1").arg(n+1); QAction* a = triangleMenu->addAction(action_name); a->setObjectName(action_name); a->setCheckable(false); a->setIconVisibleInMenu(true); a->setIcon(QIcon(pix)); } triangleMenu->setActiveAction(triangleMenu->actions().value(selectedTriangleIndex())); menu_visible = true; QAction* a = popupMenu->exec(p); menu_visible = false; return a; } void FigureEditor::reset() { logFine("FigureEditor::reset : entered"); if (genome_ptr->num_xforms < 1) { logWarn("FigureEditor::reset : no xforms, adding a default"); Util::add_default_xforms(genome_ptr); } int selected_idx = 0; if (selectedTriangle) selected_idx = selectedTriangleIndex(); bool hasPost = editing_post; if (hasPost) { // hide/disable the post triangle and recreate it after the reset box_center = selectedTriangle->polygon().boundingRect().center(); postTriangle->setVisible(false); editing_post = false; } if (has_selection) enableSelection(false); // make sure there are as many triangles as xforms int num_triangles = trianglesList.size(); int dn = genome_ptr->num_xforms - num_triangles; if (dn > 0) for (int n = num_triangles ; n < dn + num_triangles ; n++) { Triangle* t = new Triangle(this, genome_ptr->xform + n, basisTriangle, n); t->setLabelVisible(labels_visible); trianglesList << t; addItem(t); } else if (dn < 0) { // Temporarily re-parent the graphicsGuide in case its parent triangle is deleted trianglesList.first()->setGraphicsGuide(graphicsGuide); for (int n = 0 ; n > dn ; n--) { Triangle* t = trianglesList.takeLast(); removeItem(t); delete t; } } // realign triangles and xforms for (int n = 0 ; n < genome_ptr->num_xforms ; n++) { Triangle* t = trianglesList.at(n); flam3_xform* xform = genome_ptr->xform + n; t->setXform(xform); TriangleCoords tc(basisTriangle->getCoords(xform->c)); t->setPoints(tc); const QPen pen(Util::get_xform_color(genome_ptr, xform), 0, Qt::DashLine); t->setPen(pen); t->setNodeColor(grid_color, pen.color()); } // align the basis triangle and labels const QBrush b(grid_color); const QPen pen(grid_color, 0); bLabelA->setBrush(b); bLabelA->setPos(basisTriangle->mapToScene(basisTriangle->A) + QPointF(-8.0,0.0)); bLabelB->setBrush(b); bLabelB->setPos(basisTriangle->mapToScene(basisTriangle->B)); bLabelC->setBrush(b); bLabelC->setPos(basisTriangle->mapToScene(basisTriangle->C) + QPointF(-8.0,-16.0)); basisTriangle->setPen(pen); coordinateMark->setPen(pen); selectionItem->setPen(QPen(b, 0, Qt::DashLine)); selectedTriangle = 0; editing_post = hasPost; // there's a side-effect here that selectTriangle // will recreate the postTriangle with this set if (selected_idx < trianglesList.size()) selectTriangle(trianglesList.at(selected_idx)); else selectTriangle(trianglesList.last()); // recenter the scene on the current center point in the view QRect vrect(QPoint(0,0), view->maximumViewportSize()); scene_start = view->mapToScene(vrect).boundingRect().center(); adjustSceneRect(); findViewCenter(); logFiner(QString("FigureEditor::reset : sceneRect %1,%2") .arg(sceneRect().width()) .arg(sceneRect().height())); logFiner(QString("FigureEditor::reset : itemsRect %1,%2") .arg(itemsBoundingRect().size().width()) .arg(itemsBoundingRect().size().height())); logFiner(QString("FigureEditor::reset : viewport %1,%2") .arg(view->maximumViewportSize().width()) .arg(view->maximumViewportSize().height())); } void FigureEditor::findViewCenter() { // recenter the view if necessary if (centered_scaling != None) { Triangle* t = selectedTriangle; QPointF pos(0., 0.); if (postEnabled()) t = post(); switch (centered_scaling) { case Circum: // get the triangle's center position from the scene pos = t->circumCenter(); break; case Box: // get the triangle's center position from the scene pos = t->polygon().boundingRect().center(); break; case Mark: // center on the marker pos = t->mapFromScene(mark()->center()); break; case NodeO: pos = t->getCoords().at(0); break; case NodeX: pos = t->getCoords().at(1); break; case NodeY: pos = t->getCoords().at(2); break; default: break; } view->centerOn(basisTriangle->mapToScene(pos)); } else if (!moving_start.isNull()) view->centerOn(moving_start); else view->centerOn(scene_start); } void FigureEditor::adjustSceneRect() { // Adjust the sceneRect to cover all items. QRectF c(view->mapToScene( QRect(QPoint(0,0), view->maximumViewportSize())).boundingRect()); int scene_padding = qMax(c.width(), c.height()); setSceneRect( itemsSceneBounds().adjusted( -scene_padding,-scene_padding,scene_padding,scene_padding)); if (infoItem->isVisible()) { // put the infoItem back QPoint pt = QPoint(5, view->maximumViewportSize().height() + 10 - (int)infoItem->boundingRect().height()); // 10 units of fudge infoItem->setPos(view->mapToScene(pt)); } } void FigureEditor::drawBackground(QPainter* p, const QRectF& r) { QRectF rect(sceneRect().united(r)); p->fillRect(r, QBrush(bg_color)); if (grid_visible) { // draw a grid on the background QPointF A = basisTriangle->mapToScene(basisTriangle->A); QPointF B = basisTriangle->mapToScene(basisTriangle->B); QPointF C = basisTriangle->mapToScene(basisTriangle->C); QPointF dX = B - A; while (dX.x() > 400.0) // maximum grid spacing dX /= 2.0; while (dX.x() < 20.0) // minimum grid spacing dX *= 10.0; QPen pen(QBrush(grid_color, Qt::Dense6Pattern),Qt::DashLine); p->setPen(pen); for (qreal n = A.x() ; n <= rect.width() ; n+=dX.x()) p->drawLine(QPointF(n, rect.y()), QPointF(n, rect.height())); for (qreal n = A.x() - dX.x() ; n >= rect.x() ; n-=dX.x()) p->drawLine(QPointF(n, rect.y()), QPointF(n, rect.height())); for (qreal n = C.y() ; n <= rect.height() ; n += dX.x()) p->drawLine(QPointF(rect.x(), n), QPointF(rect.width(), n)); for (qreal n = C.y() - dX.x() ; n >= rect.y() ; n -= dX.x()) p->drawLine(QPointF(rect.x(), n), QPointF(rect.width(), n)); } if (preview_visible) { int numvals = preview_density; int depth = preview_depth; int rcnt = 2* (2*numvals+1)*(2*numvals+1); p->setPen(selectedTriangle->pen()); for (int n = 0 ; n < depth ; n++) { double* result = xformPreview.at(n)->data(); for (int i = 0 ; i < rcnt ; i+=2) p->drawPoint(selectedTriangle->mapToScene(result[i], -(result[i+1]))); } } } void FigureEditor::colorChangedAction(double /*idx*/) { foreach (Triangle* triangle, trianglesList) { QColor c( Util::get_xform_color(genome_ptr, triangle->xform()) ); QPen pen(triangle->pen()); QBrush brush(triangle->brush()); pen.setColor(c); triangle->setPen(pen); triangle->setNodeColor(grid_color, c); c.setAlphaF(0.5); brush.setColor(c); triangle->setBrush(brush); } update(); } int FigureEditor::selectedTriangleIndex() { return trianglesList.indexOf(selectedTriangle); } Triangle* FigureEditor::getSelectedTriangle() { return selectedTriangle; } int FigureEditor::getNumberOfTriangles() { return trianglesList.size(); } bool FigureEditor::gridVisible() const { return grid_visible; } void FigureEditor::setGridVisible(bool value) { grid_visible = value; update(); } bool FigureEditor::guideVisible() const { return guide_visible; } void FigureEditor::setGuideVisible(bool value) { guide_visible = value; graphicsGuide->setVisible(value); update(); } int FigureEditor::previewDensity() const { return preview_density; } void FigureEditor::setPreviewDensity(int value) { preview_density = value; } int FigureEditor::previewDepth() const { return preview_depth; } void FigureEditor::setPreviewDepth(int value) { preview_depth = value; } bool FigureEditor::previewVisible() const { return preview_visible; } void FigureEditor::setPreviewVisible(bool value) { preview_visible = value; updatePreview(); if(!value) update(); // call update() when !value to hide the preview } bool FigureEditor::labelsVisible() const { return labels_visible; } void FigureEditor::setLabelsVisible(bool value) { labels_visible = value; foreach (Triangle* t, trianglesList) t->setLabelVisible(labels_visible); } QColor FigureEditor::gridColor() const { return grid_color; } void FigureEditor::setGridColor(const QColor& c) { grid_color = c; const QPen p(grid_color, 0); const QBrush b(grid_color); basisTriangle->setPen(p); coordinateMark->setPen(p); bLabelA->setBrush(b); bLabelB->setBrush(b); bLabelC->setBrush(b); selectionItem->setPen(QPen(b,1,Qt::DashLine)); foreach(Triangle* t, trianglesList) t->setNodeColor(c, t->pen().color()); update(); } QColor FigureEditor::guideColor() const { return guide_color; } void FigureEditor::setGuideColor(QColor c) { guide_color = c; graphicsGuide->update(); update(); } QColor FigureEditor::bgColor() const { return bg_color; } void FigureEditor::setbgColor(QColor c) { bg_color = c; update(); } void FigureEditor::triangleMenuAction(QAction* a) { int idx = a->objectName().toInt() - 1; selectTriangle(idx); } void FigureEditor::selectTriangle(int idx) { if (idx < trianglesList.size()) { Triangle* t = trianglesList.at(idx); selectTriangle(t); view->ensureVisible(t->sceneBoundingRect()); } } CoordinateMark* FigureEditor::mark() const { return coordinateMark; } void FigureEditor::setMarkVisible(bool flag) { coordinateMark->setVisible(flag); if (flag && !trianglesList.isEmpty()) coordinateMark->setZValue(trianglesList.first()->nextZPos()); emit coordinateChangeSignal(0.,0.); } // this function avoids wierd caching issues while calculating // the itemsBoundingRect. QRectF FigureEditor::itemsSceneBounds() { QRectF bounds; foreach (Triangle* t, trianglesList) bounds = bounds.united(t->sceneBoundingRect()); if (editing_post) bounds = bounds.united(postTriangle->sceneBoundingRect()); if (selectionItem->isVisible()) bounds = bounds.united(selectionItem->sceneBoundingRect()); if (coordinateMark->isVisible()) bounds = bounds.united(coordinateMark->sceneBoundingRect()); return bounds; } void FigureEditor::autoScale() { static QSizeF padding(200.0, 200.0); QSizeF s_size(itemsSceneBounds().size() + padding); QSize v_size(view->maximumViewportSize()); double dz = qMin(v_size.width() / s_size.width(), v_size.height() / s_size.height()); while (dz < 0.99 || dz > 1.01) { logFine(QString("FigureEditor::autoScale : scale %1").arg(dz)); scaleBasis(dz, dz); s_size = itemsSceneBounds().size() + padding; dz = qMin(v_size.width() / s_size.width(), v_size.height() / s_size.height()); } adjustSceneRect(); view->centerOn(sceneRect().center()); } void FigureEditor::selectNextTriangle() { int n = selectedTriangleIndex(); if (n + 1 < trianglesList.size()) selectTriangle(n + 1); } void FigureEditor::selectPreviousTriangle() { int n = selectedTriangleIndex(); if (n > 0) selectTriangle(n - 1); } void FigureEditor::scaleBasis(double dx, double dy) { // we need to move the mark too, so save it's current position in the basis // triangle coordinate space. It may be better to make the mark aware of // the basis instead. QPointF mark = coordinateMark->center(); QPointF mark_start; transform().inverted().map(mark.x(), mark.y(), &mark_start.rx(), &mark_start.ry()); QPointF cursor_start; transform().inverted().map(moving_start.x(), moving_start.y(), &cursor_start.rx(), &cursor_start.ry()); // recenter the scene on the current center point in the view QRect vrect(QPoint(0,0), view->maximumViewportSize() - QSize(1,1)); QPolygonF view_center(view->mapToScene(vrect)); view_center = transform().inverted().map(view_center); basisTriangle->scale(dx, dy); bLabelA->setPos(basisTriangle->mapToScene(basisTriangle->A) + QPointF(-8.0,0.0)); bLabelB->setPos(basisTriangle->mapToScene(basisTriangle->B)); bLabelC->setPos(basisTriangle->mapToScene(basisTriangle->C) + QPointF(-8.0,-16.0)); foreach (Triangle* t, trianglesList) t->basisScaledSlot(); if (editing_post) postTriangle->basisScaledSlot(); // scale the selection if (has_selection) { QTransform trans(selectionItem->transform()); trans.scale(dx, dy); selectionItem->setPolygon(trans.map(selectionItem->polygon())); } // put back the mark transform().map(mark_start.x(), mark_start.y(), &mark.rx(), &mark.ry()); coordinateMark->centerOn(mark); // put back the moving_start position transform().map(cursor_start.x(), cursor_start.y(), &moving_start.rx(), &moving_start.ry()); // position the scene under the center of the view scene_start = transform().map(view_center).boundingRect().center(); // update the guide dimensions graphicsGuide->update(); // adjust scene rect and repaint adjustSceneRect(); findViewCenter(); update(); } void FigureEditor::rotateTriangle(Triangle* t, double rad, QPointF pos) { t->rotate(rad, pos); if (editing_post) t = selectedTriangle; triangleModifiedAction(t); } void FigureEditor::scaleTriangle(Triangle* t, double dx, double dy, QPointF pos) { t->scale(dx, dy, pos); if (editing_post) t = selectedTriangle; triangleModifiedAction(t); } void FigureEditor::rotateSelection( double rad, QPointF pos ) { selectionItem->rotate(rad, pos); logFine(QString("triangle set rotated rad %1 (%2,%3)") .arg(rad) .arg(pos.x()) .arg(pos.y())); if (selectionItem->hasItems()) { if (selectionItem->containsAnyOf(selectedTriangle)) triangleModifiedAction(selectedTriangle); else emit triangleModifiedSignal(selectionItem->first()); } } void FigureEditor::scaleSelection( double dx, double dy, QPointF pos ) { selectionItem->scale(dx, dy, pos); logFine(QString("triangle set scaled dx %1 (%2,%3)") .arg(dx) .arg(pos.x()) .arg(pos.y())); if (selectionItem->hasItems()) { if (selectionItem->containsAnyOf(selectedTriangle)) triangleModifiedAction(selectedTriangle); else emit triangleModifiedSignal(selectionItem->first()); } } bool FigureEditor::hasSelection() const { return has_selection; } TriangleSelection* FigureEditor::selection() const { return selectionItem; } void FigureEditor::moveTriangleBy(Triangle* t, double dx, double dy) { QPointF p(t->mapToScene(dx, dy)); t->moveBy(p.x(), p.y()); if (t->type() == PostTriangle::Type) triangleModifiedAction(selectedTriangle); else triangleModifiedAction(t); } void FigureEditor::moveSelectionBy(double dx, double dy) { QPointF p = selectionItem->mapFromItem(selectedTriangle, QPointF(dx,dy)); selectionItem->moveBy(p.x(), p.y()); logFine(QString("triangle set moved %1,%2") .arg(selectionItem->scenePos().x()) .arg(selectionItem->scenePos().y())); if (selectionItem->hasItems()) { if (selectionItem->containsAnyOf(selectedTriangle)) triangleModifiedAction(selectedTriangle); else emit triangleModifiedSignal(selectionItem->first()); } } void FigureEditor::editPostTriangle(bool flag) { editing_post = flag; if (postTriangle) { flam3_xform* xf = selectedTriangle->xform(); if (has_selection && (xf != postTriangle->xform())) { selectionItem->triangles().removeOne(postTriangle); foreach (NodeItem* node, postTriangle->getNodes()) selectionItem->nodes().removeOne(node); } postTriangle->setXform(xf); postTriangle->basisScaledSlot(); } else if (selectedTriangle) { postTriangle = new PostTriangle(this, selectedTriangle->xform(), basisTriangle); const QPen pen(grid_color, 0); QBrush brush(grid_color, Qt::Dense5Pattern); brush.setTransform(basisTriangle->coordTransform()); postTriangle->setPen( pen ); postTriangle->setNodeColor(grid_color, pen.color()); postTriangle->setBrush(brush); addItem(postTriangle); } else return; if (flag) // enable post triangle { postTriangle->setVisible(true); postTriangle->moveToFront(); postTriangle->adjustSceneRect(); box_center = postTriangle->polygon().boundingRect().center(); if (!has_selection) // don't steal the guide from the selection postTriangle->setGraphicsGuide(graphicsGuide); } else { postTriangle->setVisible(false); box_center = selectedTriangle->polygon().boundingRect().center(); if (!has_selection) selectedTriangle->setGraphicsGuide(graphicsGuide); } update(); emit triangleSelectedSignal(selectedTriangle); } bool FigureEditor::postEnabled() { return editing_post; } PostTriangle* FigureEditor::post() const { return postTriangle; } QString FigureEditor::getInfoLabel(Triangle* t) { int tidx = trianglesList.indexOf(t); QString label(tr("transform: %1\ndensity: %L2\n")); if (genome_ptr->final_xform_enable && genome_ptr->final_xform_index == tidx) label = tr("final transform: %1\ndensity: %L2\n"); QString info(label.arg(tidx + 1).arg(t->xform()->density, 0, 'f', 4, '0')); QMap vars = Util::flam3_variations(); QMap::const_iterator i = vars.begin(); while (i != vars.end()) { double val = t->xform()->var[i.value()]; if (val != 0.0) info.append(QString("%1: %L2\n").arg(i.key()).arg(val, 0, 'f', 4, '0')); i++; } return info; } const TriangleList& FigureEditor::triangles() const { return trianglesList; } void FigureEditor::enableSelection(bool flag) { selectionItem->setVisible(flag); has_selection = flag; if (!flag) selectionItem->clear(); graphicsGuide->update(); update(); } FigureEditor::SceneLocation FigureEditor::centeredScaling() { return centered_scaling; } void FigureEditor::setCenteredScaling(SceneLocation location) { centered_scaling = location; } FigureEditor::SceneLocation FigureEditor::transformLocation() { return transform_location; } void FigureEditor::setTransformLocation(SceneLocation location) { transform_location = location; if (postEnabled()) box_center = postTriangle->polygon().boundingRect().center(); else box_center = selectedTriangle->polygon().boundingRect().center(); graphicsGuide->update(); } void FigureEditor::provideState(UndoState* state) { logFine("FigureEditor::provideState : setting state"); QTransform itrans(basisTriangle->coordTransform().inverted()); if (selectionItem->isVisible()) state->SelectionRect = itrans.map(selectionItem->polygon()); else state->SelectionRect = QPolygonF(); state->NodesO.clear(); state->NodesX.clear(); state->NodesY.clear(); state->Triangles.clear(); state->SelectedType = selectionItem->selectedType(); switch (selectionItem->selectedType()) { case NodeItem::Type: foreach (NodeItem* node, selectionItem->nodes()) { if (node->id() == Triangle::NODE_O) if (node->triangle()->type() == PostTriangle::Type) state->NodesO.append(-1); else state->NodesO.append(node->triangle()->index()); else if (node->id() == Triangle::NODE_X) if (node->triangle()->type() == PostTriangle::Type) state->NodesX.append(-1); else state->NodesX.append(node->triangle()->index()); else if (node->id() == Triangle::NODE_Y) if (node->triangle()->type() == PostTriangle::Type) state->NodesY.append(-1); else state->NodesY.append(node->triangle()->index()); else logWarn(QString("FigureEditor::saveUndoState : found node with unknown name %1").arg(node->name())); } break; case Triangle::Type: foreach (Triangle* triangle, selectionItem->triangles()) if (triangle->type() == PostTriangle::Type) state->Triangles.append(-1); else state->Triangles.append(triangle->index()); break; default: ; } state->MarkPos = itrans.map(coordinateMark->center()); } void FigureEditor::restoreState(UndoState* state) { logFine("FigureEditor::restoreState : restoring state"); reset(); // Rebuild and reset the selection and the mark QTransform basis(basisTriangle->coordTransform()); if (state->SelectionRect.isEmpty()) enableSelection(false); else { selectionItem->clear(); selectionItem->setPolygon(basis.map(state->SelectionRect)); selectionItem->setSelectedType(state->SelectedType); switch (state->SelectedType) { case NodeItem::Type: foreach (int n, state->NodesO) if (n != -1) selectionItem->addItem(trianglesList[n]->getNode(Triangle::NODE_O)); else if (postEnabled()) selectionItem->addItem(post()->getNode(Triangle::NODE_O)); foreach (int n, state->NodesX) if (n != -1) selectionItem->addItem(trianglesList[n]->getNode(Triangle::NODE_X)); else if (postEnabled()) selectionItem->addItem(post()->getNode(Triangle::NODE_X)); foreach (int n, state->NodesY) if (n != -1) selectionItem->addItem(trianglesList[n]->getNode(Triangle::NODE_Y)); else if (postEnabled()) selectionItem->addItem(post()->getNode(Triangle::NODE_Y)); break; case Triangle::Type: foreach (int n, state->Triangles) if (n != -1) selectionItem->addItem(trianglesList[n]); else if (postEnabled()) selectionItem->addItem(post()); break; default: ; } enableSelection(true); } coordinateMark->centerOn(basis.map(state->MarkPos)); } FigureEditor::EditMode FigureEditor::mode() const { return editMode; } void FigureEditor::setMode(FigureEditor::EditMode m) { editMode = m; setTransformLocation(transform_location); update(); emit editModeChangedSignal(editMode); } QPointF FigureEditor::triangleTransformPos() { Triangle* t = selectedTriangle; if (postEnabled()) t = post(); return triangleTransformPos(t); } QPointF FigureEditor::triangleTransformPos(Triangle* t) { QPointF pos(0.0, 0.0); if (transform_location == Origin) pos = t->mapFromScene(pos); else if (transform_location == Circum) // get the triangle's circumcenter position pos = t->circumCenter(); else if (transform_location == Box) pos = box_center; else if (transform_location == Mark) // center on the marker pos = t->mapFromScene(mark()->center()); else if (transform_location == NodeO) pos = t->getCoords().at(0); else if (transform_location == NodeX) pos = t->getCoords().at(1); else if (transform_location == NodeY) pos = t->getCoords().at(2); return pos; } QPointF FigureEditor::selectionTransformPos() { QPointF pos(0.0, 0.0); if (transform_location == Origin) pos = selection()->mapFromScene(pos); else if (transform_location == Mark) pos = selection()->mapFromScene(mark()->center()); else pos = selection()->boundingRect().center(); return pos; } GenomeVector* FigureEditor::genomeVector() const { return genomes; } qosmic-1.6.0/src/xfedit.h000066400000000000000000000165331304321135200152360ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2007-2016 by David Bitseff * * bitsed@gmail.com * * * * 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 . * ***************************************************************************/ #ifndef QOSMIC_XFEDIT_H #define QOSMIC_XFEDIT_H #include #include #include #include #include #include #include #include #include #include "qosmicwidget.h" #include "genomevector.h" #include "basistriangle.h" #include "triangle.h" #include "nodeitem.h" #include "coordinatemark.h" #include "triangleselection.h" #include "transformablegraphicsguide.h" #include "posttriangle.h" #include "undoring.h" typedef QList TriangleList; /** * The QGraphicsScene that manages the Triangles. */ class FigureEditor : public QGraphicsScene, public QosmicWidget, public UndoStateProvider { Q_OBJECT public: enum SceneLocation { None, Origin, Mark, Circum, Box, NodeO, NodeX, NodeY, Cursor }; enum EditMode { Move, Rotate, Scale, Flip }; public: void clear(); QString& getStatus(); FigureEditor(GenomeVector*, QGraphicsView* parent); ~FigureEditor(); BasisTriangle* basis() const; const QTransform& transform() const; CoordinateMark* mark() const; void setMarkVisible(bool); void setCoordTransform(QTransform); void selectTriangle(Triangle*); void selectTriangle(int); void triangleModifiedAction(Triangle*); QRectF itemsSceneBounds(); int selectedTriangleIndex(); Triangle* getSelectedTriangle(); int getNumberOfTriangles(); void setPreviewDensity(int); int previewDensity() const; void setPreviewDepth(int); int previewDepth() const; void setPreviewVisible(bool); bool previewVisible() const; void setGridVisible(bool); bool gridVisible() const; QColor gridColor() const; void setGridColor(const QColor&); QColor bgColor() const; void setbgColor(QColor); void setGuideVisible(bool); bool guideVisible() const; QColor guideColor() const; void setGuideColor(QColor); bool labelsVisible() const; void setLabelsVisible(bool); void scaleBasis(double dx, double dy); bool hasSelection() const; TriangleSelection* selection() const; PostTriangle* post() const; void moveTriangleBy(Triangle* t, double dx, double dy); void moveSelectionBy(double dx, double dy); bool postEnabled(); const TriangleList& triangles() const; QString getInfoLabel(Triangle*); void enableSelection(bool); void writeSettings(); SceneLocation centeredScaling(); void setCenteredScaling(SceneLocation); SceneLocation transformLocation(); void setTransformLocation(SceneLocation); void provideState(UndoState*); void restoreState(UndoState*); EditMode mode() const; QPointF triangleTransformPos(Triangle*); QPointF triangleTransformPos(); QPointF selectionTransformPos(); GenomeVector* genomeVector() const; // graphicsitem horiz and vert flipping void flipTriangleHAction(Triangle*, QPointF); void flipTriangleVAction(Triangle*, QPointF); void flipSelectionHAction(QPointF); void flipSelectionVAction(QPointF); // graphicsitem rotate and scale methods void rotateTriangle(Triangle*, double, QPointF); void rotateSelection(double, QPointF); void scaleTriangle(Triangle*, double, double, QPointF); void scaleSelection(double, double, QPointF); QAction* execPopupMenu(const QPoint&); signals: void coordinateChangeSignal(double, double); void triangleSelectedSignal(Triangle*); void triangleModifiedSignal(Triangle*); void triangleListChangedSignal(); void undoStateSignal(); void editModeChangedSignal(FigureEditor::EditMode); public slots: void reset(); void addTriangleAction(); void cutTriangleAction(); void copyTriangleAction(); void pasteTriangleAction(); void removeTriangleAction(); void resetTriangleCoordsAction(); void colorChangedAction(double); void selectNextTriangle(); void selectPreviousTriangle(); void scaleInScene(); void scaleOutScene(); void autoScale(); void setMode(FigureEditor::EditMode); void updatePreview(); // graphicsitem horiz and vert flipping void flipTriangleHAction(); void flipTriangleVAction(); void flipTriangleHPopupAction(); void flipTriangleVPopupAction(); // display and enable editing of the selected triangle's post coords void editPostTriangle(bool); void enableFinalXform(bool); protected: QPointF moveAnItem(QGraphicsItem*, QGraphicsSceneMouseEvent*, int dx, int dy); void moveItemBy(QGraphicsItem *item, int dx, int dy); void mousePressEvent(QGraphicsSceneMouseEvent*); void mouseReleaseEvent(QGraphicsSceneMouseEvent*); void mouseMoveEvent(QGraphicsSceneMouseEvent*); void wheelEvent(QGraphicsSceneWheelEvent* wheelEvent); void drawBackground(QPainter*, const QRectF&); Triangle* getCurrentOrSelected(); void findViewCenter(); void adjustSceneRect(); void createXformPreview(); private slots: void triangleMenuAction(QAction*); private: QAbstractGraphicsShapeItem* moving; QPointF moving_start; QPointF box_center; QPointF scene_start; QGraphicsSimpleTextItem* infoItem; TriangleList trianglesList; GenomeVector* genomes; QGraphicsView* view; BasisTriangle* basisTriangle; QGraphicsSimpleTextItem* bLabelA; QGraphicsSimpleTextItem* bLabelB; QGraphicsSimpleTextItem* bLabelC; Triangle* selectedTriangle; CoordinateMark* coordinateMark; QMenu* popupMenu; QMenu* triangleMenu; QAction* addAction; QAction* cutAction; QAction* copyAction; QAction* pasteAction; QAction* resAction; QAction* flipHAction; QAction* flipVAction; QAction* rescaleAction; bool grid_visible; bool labels_visible; QColor grid_color; QColor bg_color; bool guide_visible; QColor guide_color; TriangleSelection* selectionItem; TransformableGraphicsGuide* graphicsGuide; PostTriangle* postTriangle; SceneLocation centered_scaling; SceneLocation transform_location; QVector xformClip; QVector*> xformPreview; QMutex moveScrollMutex; QPointF m_scenePos, m_lastScenePos; QRectF m_vrect; EditMode editMode; bool move_edge_mode; bool has_selection; bool is_selecting; bool editing_post; bool wheel_moved; bool menu_visible; bool preview_visible; int move_border_size; int preview_density; int preview_depth; }; #endif qosmic-1.6.0/ts/000077500000000000000000000000001304321135200134315ustar00rootroot00000000000000qosmic-1.6.0/ts/qosmic_cs.qm000066400000000000000000001615071304321135200157620ustar00rootroot00000000000000<¸dÊÍ!¿`¡½ÝBà%W*Å#+w+…+¦+Ç…+Ë"-¢-³-¦?-ËM0ÅP<<-ê=Å}>C>.?…÷?ŪOñXîYx,?xÄËyÄ÷þËx*Â[-ºÂ¬ÊÂÛJà ZÃ9jÃhz׊ÃþšÄ-O“…[HÞ¯¾91Í1á1-¹1…Ë1‡~1µ1—À1 ™1¢î1¦fG¤%SJÄ%ºJÄcdOµøS±—'X´SY„„Y¾˜¤\|ùg¤¨g¤ÍRihßih0‘ih©@j·Vj·ÃÆlð«Jo¦®Ãoµ ÓsW³ItÇŒìvZ–WvtŽxtÄ\y¾šóy¾¹Iyþ}yþ»ƒÓñ“µg¦y%ƒ¦ybI»d»ˆ[Ð%e}ÖîÖ“Ö*íÖ˜4VEÆf¾˜m‹¯l0˜Å˜Ú¡‘´įxäÏÇŒ,0Ð%Q7èôð,|Ýð,®8‹.E¥³¯VE £VEÆüf¾™ùv¤!)‹¤ÄŽ˜Åƒ˜Å›w˜Å¹~¡ÛªÀ¼#«`“´°5,Àe¾àÌ”$i•qÊ(Q—y¯*»Uì*Ð%V+ÏVP+ŒVÅ+˜ÅWCCÌ);ØFTIFTœ2H6á:Ièc½IècaL™bd“L™b¡BMe³–íN‹¾ÇP7Õg"VŠ¥&äVŠ¥j XÉÄmn\ƒµÈ4h6á )hðj§j6•Qj6•͉jcb}èjcb©ujǨÛm|òm|¤vm„1 [n¿¥Joi ìsÓ#Ìsfs³zt£•°tÌž’uZà ²v*¶v…Àv…À·.xÉÄ yœE"°yëÀ{§zk´¼zk´„¨zÛÀ¼S|ƒµ¿|…À€Í|…À¿E}û¨¿Óf }Ž ¥G•$¥±l—” Óžù3 ©íl7—·=yKpºçâ§ÏÅ,*D†Æ~—îÓþS¯“Ö!ÆPåVE*åVE‚êåVEÌèvRt…ë5žœŠ‚vy¥+ÕeN²Qf “^Ÿ/Ê2{h02{Ù2á¼&@@¹~¬B>’mKÿ4˦uô6IVv@}Ä”ABªÜü&–¯O§@·µJYºŠÈuŽÓŽµÆ›ö–F<øã³áøÓãÎZ! •aI'Шˆ,ͳrÛ3œ´O:àªnHβ)PMÀnÑnžÁnqO^Sr±$SUz%î0Q{pºDí{pº`O~dõ’}åJ’}å£j“þŒi˜2£Š( £¡Ä´»§–ÄU±©Ò¥4 ñí~n÷¼y‰­:õÄf®H)Õ%ì_ú¨LeDcj¼òqlÜ“KoËOß‹z2cÊœWŽQ³°; ÄHáÈ¢Øç²,Äæ…!\æ…¥WdÕpë Tp?JJ•q%„5¢K_Ep `S%idbkÅÇ4lw° `lw°Î yOã‘éy®Iƒ¨y®IŸ{0€¬Ø˜<é˜<_¾˜I¼•™n•_‡™n•‡©›‰É•à¦6“aÜ«ŽáES«ŽâEˆ«ŽãE½ÁÄ 0Ä)‘ÅmEVùφå†UÏ†å¢ Ϧ储Ϧ圃ÜV5¡xâ!P*â!R8â!’<äýB(ò•YÊÇö¦kßù1L‘ú¾ó{ý“s|Óc¡¯Ek4jbó¨U$ú*ò“°V¥Ów’V¥ÓÂAa1yUcA*€cARc?A*Fnùä”ÝoeU®ðq¾õr-tç÷Ttç÷|atç÷’…~”ã~”ã"ꆣók‹C/*–’Èæ˜«nš åc” åÅ×ÈkÕÌÏÍÂyDÑ@dMܤí)›ÞZ¥AË÷=qˆÏtžÎ¥ƒZ¥ž@ èUiúé$ nH_fòs’?2$¤PøÂ¦Ú[Ž ”^-s-`¤%Eòg É¾g É~·g É¶Kl¾VˆpjBš’pÊCxLrg¦“vž$JƒÙœÉ„GòsŠ>Y¼˜¹]1  Š½¥ B£¦F„©ó¦L÷™¾§ .÷§.:Äå+5Äå¼”Æl^mÈÉó6bËü 9òÐ:Â3Ò؃ì¢Ü£¸ûÜV5­Úá, nõáUnKQäS² O‹Ê"¸1MU,yÒt 0K‚³ 3­¹C»:ŠŒEV–EúÔuOøKo¬TÎB¿€càÓp…fˆµ Øh©Ã8#hýþ êi¯R¿j|Gj|·ij|ˆj|·¢j|Éj|·Ûj|€ j|¸j|€Kj|¸Mj|€Œj|¸†}\”e¬»4 …„ò‡Ð‚RŒFŸ¿ŒFÅΣŒk„ŽÔŒœÃPxŒœÃRŒÏ—OñŒÏ—j;ŒÏ·ƒŒÏ·{6–¨¥–¨¥O™‚Šœ¤f¨»°ª‹ÃÁã¸òC8aÏp3ÏÍÂTâÏÍÂ|¦Ó}ST]æ/ãm®ùVG'ùVGl¸ù¿ÀGùü@á¹Ô~#Ô©¨ 1C ·J¼#Ôº('Çåq6,¿£iÈ,¿£Š‡5 Îj¡A]#ÌìHC@KB5âKC6"P8Å}¥P8ŨMY·¨uYÍ ¥ÖYÍ ¾c‚¹.‚¹gTÞ’ÌœîB É¸0É8¤¸0Ƀü¸0ÉŸr¸0éÓ½+ÔŽ›ÁOî‘SÅYÉÉpŦÉɺÊ™®4íÊ™®­ Ö§õ"?øK•>ÐøK•}VøK•¾žøôÞÈj î¤@ ,?a‰ 7íþ›% Wú¥¯F `P§% e®H  sÉÃ¹î ‚pPT ŠD‹D ŒtÓ™ Œvó›¬ ‘+å7× §0%0Ê ¶Øù‡ã À×þ º #A Üh Ŭ:î ÅõS§/ ÓУgœ ס;n ×ÁT4T äAåP¿ ý²”# ÎÍ  » ½)š0 Ю'q ,-# Z²Éyê b ˆŠ= e¯,v gÖ/zê gù/zœ ifÉÞ ˆ«ugã Š²“hé Š²“† ŒÅÓ³ ŒÅÓa‘ ’ȇ £3ÃŒ §Ý²»ä Å Ù  Å Ù~v Š٣ŠŠ٪5 ÎìCb Þä™’ ô³ÒX öR¾3b þŠÍ çÂ2… CÄÎã …Çè ørv #°ñ`± %Q¤O” ;(] Eô9Ï `ѹÊ giçIÖ giçLR mŸù:¼ …såˆ …s儿 …så & ¥hòù ձΤ² çÏ2i C•8 ¤… ¤…„8 ¤…Ÿ² Ãwó "ÌÐrœ +®ò*º ,<4« -o-b /ò)ñ JªŽ­h Ku‡C V1‘†‘ V1’†Ê gçõ«µ v—¥FÒ vâ¾i vâ¾Í w_´¹ †“eï ‹Ã¹² ‹é)­+ Ž}N Ž)•^ì šµ* œ;Å ¶žE ·ùš ·»›î Çnjb~ Ïv4ŽL ÏšBjm Ó¡“.@ íÛñKÚ Rq‚ 9l] )¶æ c & +ûdÁ P$ÌüÅu°Ÿþ¶JiÏBNastavení scényScene SettingsAdjustSceneWidgetBarva pozadíbackground colorAdjustSceneWidgetHustotadensityAdjustSceneWidgetHloubkadepthAdjustSceneWidget MYí~kagridAdjustSceneWidgetVodítkoguideAdjustSceneWidget NáhledpreviewAdjustSceneWidgetHustota náhledupreview densityAdjustSceneWidget"Opakování náhledupreview iterationsAdjustSceneWidget*Nastavit barvu pozadíset background colorAdjustSceneWidget*Nastavit barvu mYí~kyset grid colorAdjustSceneWidget,Nastavit barvu vodítkaset guide colorAdjustSceneWidget(Popisy trojúhelníkutriangle labelsAdjustSceneWidget KameraCameraCameraSettingsWidget2Síla pro mYítko a jakosta power for scale and qualityCameraSettingsWidgetPo átek kamery camera originCameraSettingsWidget StYed:center:CameraSettingsWidget.Výaka kone ného obrázkuheight of the final imageCameraSettingsWidget2Pixelo na jednotku svislepixels per unit verticallyCameraSettingsWidget Otá etrotateCameraSettingsWidgetOtá et kamerou rotate cameraCameraSettingsWidgetMYítko:scale:CameraSettingsWidgetVelikostsizeCameraSettingsWidget4Velikost kone ného obrázkusize of final imageCameraSettingsWidget.`íYka kone ného obrázkuwidth of the final imageCameraSettingsWidgetPoloha x x positionCameraSettingsWidgetPoloha y y positionCameraSettingsWidgetZvtaení:zoom:CameraSettingsWidget ZmatekChaos ChaosWidgetFormuláYFormColorBalanceWidgetAlfaalphaColorBalanceWidgetJas brightnessColorBalanceWidgetKontrastcontrastColorBalanceWidgetZakázánodisabledColorBalanceWidgetBrzká ukázka early clipColorBalanceWidgetGamagammaColorBalanceWidgetZvýraznní highlightColorBalanceWidgetZabarveníhueColorBalanceWidgetBZlepait vyhlazování jasných prvko+improve the antialiasing of bright featuresColorBalanceWidget }ádnýnoneColorBalanceWidgetNeprohlednýopaqueColorBalanceWidgetòNejvtaí hodnota pro barvu RGB pYed smYováním barvy k bílé, jak se hustota zvyauje. -1 = zakázáno, 0 = ~ádné zvýraznní‡the maximum Value for an RGB color before trending the color towards white as the density increases. -1 = disabled, 0 = no highlightsColorBalanceWidgetProhledný transparentColorBalanceWidget }ivostvibrancyColorBalanceWidgetAlfaAlpha ColorDialog ModráBlue ColorDialog ZruaitCancel ColorDialog ZelenáGreen ColorDialogZabarveníHue ColorDialogOKOk ColorDialog ervenáRed ColorDialog SytostSat ColorDialogVybrat barvuSelect a color ColorDialogHodnotaVal ColorDialogB 0=neviditelný, 1=zcela viditelný 0=invisible, 1=totally visibleColorSettingsWidgetNastavení barevColor SettingsColorSettingsWidgetBarva pozadíbackground colorColorSettingsWidget(Barva pozadí obrázkuimage background colorColorSettingsWidgetNeprohlednostopacityColorSettingsWidgetZNásobek mYítka na barvu promny na opakování3per iteration scaling factor on the transform colorColorSettingsWidgetRychlostspeedColorSettingsWidgetBarva promnytransform colorColorSettingsWidget0Barevný rejstYík promnytransform color indexColorSettingsWidget<NepodaYilo se nahrát soubor %1Couldn't load file %1CoreAppÎQosmic %1 Pou~ití: qosmic [soubor flam3] Promnné prostYedí: log=%2 flam3_verbose=%3 flam3_nthreads=%4gQosmic %1 Usage: qosmic [flam3 file] environment variables: log=%2 flam3_verbose=%3 flam3_nthreads=%4 CoreApp++DirectoryViewWidget--DirectoryViewWidget......DirectoryViewWidgetSestupn DescendingDirectoryViewWidgetPodrobný pohled Detailed ViewDirectoryViewWidgetFormuláYFormDirectoryViewWidgetVybrat adresáYSelect a directoryDirectoryViewWidget$Zestru nný pohled Short ViewDirectoryViewWidget*Ukázat skryté souboryShow Hidden FilesDirectoryViewWidgetXadit dleSort byDirectoryViewWidget PohledViewDirectoryViewWidget%%EditModeSelectorWidget++EditModeSelectorWidget--EditModeSelectorWidget......EditModeSelectorWidget<<EditModeSelectorWidget>>EditModeSelectorWidget Voli Re~imuÚpravEditModeSelectorEditModeSelectorWidget*PYevrátit trojúhelník Flip triangleEditModeSelectorWidget*PYesunout trojúhelník Move TringleEditModeSelectorWidget*PYesunout trojúhelník Move triangleEditModeSelectorWidgetOOEditModeSelectorWidget$Oto it trojúhelníkRotate triangleEditModeSelectorWidget8Zmnit velikost trojúhelníkuScale triangleEditModeSelectorWidgetXXEditModeSelectorWidgetYYEditModeSelectorWidget$PYidat trojúhelníkadd a triangleEditModeSelectorWidgetOsa:axis:EditModeSelectorWidgetKrabiceboxEditModeSelectorWidget OkolocircumEditModeSelectorWidgetStupdegEditModeSelectorWidget$Upravit po-promnuedit the post transformEditModeSelectorWidgetKone nýfinalEditModeSelectorWidget&PYevrátit vodorovnflip horizontallyEditModeSelectorWidget PYevrátit svisleflip verticallyEditModeSelectorWidgetVodorovnhorizEditModeSelectorWidget Zna kamarkEditModeSelectorWidgetPYesunout dolo move downEditModeSelectorWidgetPYesunout vlevo move leftEditModeSelectorWidget PYesunout vpravo move rightEditModeSelectorWidget PYesunout nahorumove upEditModeSelectorWidgetUzlynodesEditModeSelectorWidgetPo átekoriginEditModeSelectorWidgetPopostEditModeSelectorWidget:Odstranit vybraný trojúhelníkremove the selected triangleEditModeSelectorWidget*Zmnit velikost scény rescale sceneEditModeSelectorWidget4Nastavit trojúhelník znovureset the triangleEditModeSelectorWidget ScénasceneEditModeSelectorWidgetNastavení scényscene settingsEditModeSelectorWidget Výbr:select:EditModeSelectorWidgetTyp výbruselection typeEditModeSelectorWidgetPromnit osutransform axisEditModeSelectorWidgetTrojúhelníky trianglesEditModeSelectorWidget SvislevertEditModeSelectorWidget Zvtait na stYed zoom centerEditModeSelectorWidget"Zvtait viditelné zoom visibleEditModeSelectorWidget PYidatAdd FigureEditorKopírovatCopy FigureEditorVyjmoutCut FigureEditor&Upravit trojúhelník Edit Triangle FigureEditor&PYevrátit vodorovnFlip Horizontal FigureEditor PYevrátit svisle Flip Vertical FigureEditor Vlo~itPaste FigureEditor.Zmnit velikost pohledu Rescale View FigureEditor*Nastavit polohu znovuReset Position FigureEditorTrojúhelníky Triangles FigureEditorBPromna kone ná: %1 hustota: %L2 !final transform: %1 density: %L2  FigureEditorPromna po: %1 post transform: %1  FigureEditor2Promna: %1 hustota: %L2 transform: %1 density: %L2  FigureEditorVoli barvy ColorSelectorGenomeColorSelector Ukázat histogramShow HistogramGenomeColorSelector"%1 xforms  as: %2%1 xforms time: %2 GenomeVectorGenom %1 Genome %1 GenomeVectorGenom %1 genome %1 GenomeVector Voli selector GenomeVectorFormuláYFormGenomeVectorListModelItemEditor^ asová poloha tohoto genomu v anima ní sekvenci:temporal position of this genome in the animation sequenceGenomeVectorListModelItemEditor astimeGenomeVectorListModelItemEditorxxGenomeVectorListModelItemEditorPYidat zastávkuAdd StopGradientStopsEditorZmnit barvu Change ColorGradientStopsEditor Upravit zastávky Edit StopsGradientStopsEditor$Odstranit zastávku Remove StopGradientStopsEditor......ImageSettingsWidget<<ImageSettingsWidget>>ImageSettingsWidgetPYevody ConversionsImageSettingsWidgetJakost obrázku Image QualityImageSettingsWidget"Nastavení obrázkuImage SettingsImageSettingsWidget:PYednastavení jakosti obrázkuImage quality presetsImageSettingsWidget4Pou~ít soumrnost na genomapply symmetry to the genomeImageSettingsWidget ZvonekbellImageSettingsWidgetBlackmanblackmanImageSettingsWidgetKrabiceboxImageSettingsWidgetB-kYivkabsplineImageSettingsWidget CatromcatromImageSettingsWidget,Nastavit pYednastaveníconfigure presetsImageSettingsWidgetzParametry odhadu hustoty pro nálezy rozmazání o nízké hustot;density estimation parameters for blurring low density hitsImageSettingsWidget Odhad estimatorImageSettingsWidgetKYivka odhaduestimator curveImageSettingsWidgetNejmenaí odhad estimator minImageSettingsWidget.Mocnitel funkce poklesuexponent on decay functionImageSettingsWidget FiltrfilterImageSettingsWidgetTvar filtru filter shapeImageSettingsWidgetPFiltrovat aíYku pro koa s jedním nálezem!filter width for bin with one hitImageSettingsWidgetGaussovgaussianImageSettingsWidgetHamminghammingImageSettingsWidgetHanninghanningImageSettingsWidgetHermitehermiteImageSettingsWidgetLanczos2lanczos2ImageSettingsWidgetLanczos3lanczos3ImageSettingsWidget¶Nejmenaí pou~itá aíYka filtru. Vynutí pou~ití filtru s alespoH touto aíYkou na vaechny bodyWminimum filter width used. forces filter to be used of at least this width on all ptsImageSettingsWidgetMitchellmitchellImageSettingsWidgetPYevzorkování oversampleImageSettingsWidgetProchodypassesImageSettingsWidget tvercový quadraticImageSettingsWidget JakostqualityImageSettingsWidget’Opakování hustoty vzorko. Kolikrát jsou hromady filtrovány do hromaditeleYsample density iterations. number of times the buckets are filtered into the accumulatorImageSettingsWidgetVzorko na pixelsamples per pixelImageSettingsWidget0Tvar prostorového filtrushape of the spatial filterImageSettingsWidget^Polomr prostorového filtru (variance gaussova),spatial filter radius (variance of gaussian)ImageSettingsWidget0Prostorové pYevzorkováníspatial oversampleImageSettingsWidgetSoumrnostsymmetryImageSettingsWidgetÀSkupina soumrnosti genomu 2 nebo více znamená otá ivý 1 znamená toto~nost, napY. ~ádná soumrnost 0 znamená výbr náhodné soumrnosti (mo~e být i ~ádná) -1 znamená oboustranný (odraz) -2 nebo mén znamená otá ivý a odrazivýÌthe genome symmetry group 2 or more means rotational 1 means identity, ie no symmetry 0 means pick a random symmetry (maybe none) -1 means bilateral (reflection) -2 or less means rotational and reflectiveImageSettingsWidgetTrojúhelníktriangleImageSettingsWidget< íslo o ekávané pro promnnou number expected for variable LuaNIndex mimo rozsah: Genome[%d] je nulový&index out of range: Genome[%d] is null Lua::FrameTNahrání vy~aduje argument o jednom Yetzci!load requires one string argument Lua::FrameTUlo~ení vy~aduje argument o jednom Yetzci!save requires one string argument Lua::FrameJGenome nemá ~ádný xform pYi indexu %dgenome has no xform at index %d Lua::Genome(Index %d mimo rozsahindex %d out of range Lua::Genome<Index mimo hranice: Genome[%d]index out of bounds: Genome[%d] Lua::GenomeZIndex mimo rozsah: Genome.XForm[%d] je nulový,index out of range: Genome.XForm[%d] is null Lua::Genome8}ádný index %d v poli zmatkuno index %d in chaos array Lua::Genome>}ádný index %d,%d v poli zmatkuno index %d,%d in chaos array Lua::GenomeChyba programuApplication errorLua::LuaEditor0Nelze pYe íst soubor %1 Cannot read file %1 Lua::LuaEditor.Nelze zapsat soubor %1 Cannot write file %1 Lua::LuaEditor Ctrl+1Ctrl+1Lua::LuaEditor Ctrl+2Ctrl+2Lua::LuaEditor Ctrl+3Ctrl+3Lua::LuaEditorOtevYít soubor Open a fileLua::LuaEditorOtevYít skript Open a scriptLua::LuaEditorUlo~it skript Save a scriptLua::LuaEditorUlo~it soubor Save fileLua::LuaEditor"Ulo~it do souboru Save to fileLua::LuaEditorLZdroj lua (*.lua);;Vaechny soubory (*)!lua source (*.lua);;All files (*)Lua::LuaEditor* musí vrátit Yetzec  must return a string to Lua::LuaThreadB~í...Running ........Lua::LuaThreadChyba: %1 error: %1Lua::LuaThreadOKokLua::LuaThreadSkript zastavenscript stoppedLua::LuaThreadFZásobník nemá ~ádný odkaz na vláknostack has no thread refLua::LuaThreadZastavuje sestoppingLua::LuaThreadZastavení$ stopping$Lua::LuaThread0%s chybí popisná tabulka%s missing metatable Lua::Lunar(%s chybí metoda '%s'%s missing method '%s' Lua::Lunar$%s:%s stav = %d %s%s:%s status = %d %s Lua::Lunar4(chyba bez zprávy o chyb)(error with no message) Lua::LunarBNejsou platná %s u~ivatelská datanot a valid %s userdata Lua::LunarZastavuje sestopping Lua::LunarvNepodaYilo se sestavit popisné tabulky pro var.promnné: %1/couldn't build metatables for var.variables: %1 Lua::XFormjNepodaYilo se sestavit popisné tabulky pro obmnu: %1%couldn't build metatables for var: %1 Lua::XFormPIndex mimo hranice: Genome[%d].XForm[%d])index out of bounds: Genome[%d].XForm[%d] Lua::XForm0Neplatná zmna indexu %dinvalid variation index %d Lua::XFormJArgument promnné není platná tabulka'variables argument is not a valid table Lua::XForm(Obmna %s nenalezenavariation %s not found Lua::XForm NáhledPreviewMainPreviewWidgetJakost genomugenome qualityMainPreviewWidgetPYednastavenípresetsMainPreviewWidgetUlo~it obrázek Save an image MainViewer ZavYítclose MainViewer Souborfile MainViewer"Prohlí~e plamene flame viewer MainViewer$Na celou obrazovku fullscreen MainViewerGenom %1 genome %1 MainViewerJakost genomugenome quality MainViewerPYednastavenípresets MainViewerUlo~it obrázek save image MainViewer(Zmnit velikost dolo scale down MainViewer4Zmnit velikost posledního scale last MainViewer.Nastavit velikost znovu scale reset MainViewer,Zmnit velikost nahoruscale up MainViewerUkázat stav show status MainViewerBez názvu.png untitled.png MainViewerProhlí~e viewer MainViewerR [%1/%2] : (%L3%4%L5) : zna ka (%L6%7%L8)' [%1/%2] : (%L3%4%L5) : mark (%L6%7%L8) MainWindow&O programu&About MainWindow&Úpravy&Edit MainWindow&Soubor&File MainWindow&Informace&Info MainWindow&OtevYít...&Open... MainWindow&Ukon it&Quit MainWindow&Náhodný plamen &Random Flame MainWindow&Ulo~it&Save MainWindow &Zastavit dlání&Stop rendering MainWindow&DoplHky&Widgets MainWindow.<p><b>Verze programu Qosmic %1</b></p><p>Autorské právo (C) 2007-2016 David Bitseff<br><p>Pou~ívejte a aiYte za podmínek<br><a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License verze 3</a></p><p>Podkování:<br>- Scott Draves za <a href="http://flam3.com/">flam3</a> library<br>- Erik Reckase za jeho práci na knihovn flam3<br>- Mark James za jeho sadu ikon <a href="http://www.famfamfam.com/lab/icons/silk/">Silk</a><br>- Mark Townsend za editor <a href="www.apophysis.org">Apophysis</a><p>Tato verze pou~ívá: Qt &

Qosmic version %1

Copyright (C) 2007-2016 by David Bitseff

Use and redistribute under the terms of the
GNU General Public License Version 3

Thanks to:
- Scott Draves for the flam3 library
- Erik Reckase for his work on the flam3 library
- Mark James for his Silk icon set
- Mark Townsend for the Apophysis editor

This version uses: Qt  MainWindow O &Qt About &Qt MainWindow"O programu Qosmic About Qosmic MainWindow$PYidat trojúhelník Add Triangle MainWindowChyba programuApplication error MainWindowProcházetBrowse MainWindow KameraCamera MainWindow,Nelze zavést soubor %1Cannot import file %1 MainWindow.Nelze zapsat soubor %1 Cannot write file %1  MainWindow2Soubor nelze zapsat do %1Cannot write file to %1 MainWindow ZmatekChaos MainWindowVyvá~ení barev Color Balance MainWindowNastavení barevColor Settings MainWindow BarvyColors MainWindowSouYadnice Coordinates MainWindowKopírovatCopy MainWindow@NepodaYilo se otevYít soubor %1 Couldn't open file %1  MainWindow<NepodaYilo se ulo~it soubor %1Couldn't save file %1  MainWindowVyjmoutCut MainWindowHustoty Densities MainWindow$Prohlí~e adresáYoDirectory Browser MainWindow ÚpravyEdit MainWindowUpravit skript Edit Script MainWindow ChybaError MainWindow(Vyvést nynjaí genomExport current genome MainWindow(Vyvést nynjaí genomExport the current genome MainWindow SouborFile MainWindowSoubor ulo~en File saved MainWindow,PYevrátit trojúhelníkyFlip Triangles MainWindow,VytvoYit náhodný genomGenerate a random xform set MainWindowSeznam genomo Genome List MainWindow GenomGenomes MainWindowObrázekImage MainWindowJakost obrázku Image Quality MainWindowZavést genomyImport genomes MainWindowZavést genomyImport genomes from a file MainWindow(Nahrát výchozí genomLoad default genome MainWindow,PYesunout trojúhelníkyMove Triangles MainWindow Mutace Mutations MainWindowOtevYít plamen Open a flame MainWindow0OtevYít stávající souborOpen an existing file MainWindowBarevné paletyPalettes MainWindow Vlo~itPaste MainWindow NáhledPreview MainWindow Náhled Previewer MainWindow0Ulo~it plamen &rychle...Q&uicksave flame... MainWindow QosmicQosmic MainWindow`Rychle ulo~it soubor a obrázek nynjaího plamene,Quickly save file and image of current flame MainWindowUkon it programQuit the application MainWindow ZnovuRedo MainWindow*&Udlat do souboru...Render to &file... MainWindow.Zmnit velikost pohledu Rescale View MainWindow,Zmnit mYítko editoruRescale the editor MainWindowNastavit znovuReset MainWindow&Oto it trojúhelníkyRotate Triangles MainWindowUlo~it &jako... Save &As... MainWindowUlo~it plamen Save a flame MainWindowUlo~it ovci Save a sheep MainWindow@Ulo~it obrázek nynjaího plameneSave an image of current flame MainWindow(Ulo~it nynjaí genomSave the current genome MainWindow*Ulo~it plamen na diskSave the flame to disk MainWindow<Ulo~it plamen pod novým názvemSave the flame under a new name MainWindow8Zmnit velikost trojúhelníkoScale Triangles MainWindowZvtait scénuScale in the scene MainWindowZmenait scénuScale out the scene MainWindowEditor skripto Script Editor MainWindow0Vybrat dalaí trojúhelníkSelect next triangle MainWindow8Vybrat pYedchozí trojúhelníkSelect previous triangle MainWindowOv í smy ka Sheep Loop MainWindowOv í smy ky Sheep Loops MainWindowFUkázat nástrojový panel pro ú&pravyShow &Edit Toolbar MainWindowFUkázat nástrojový panel pro &souborShow &File Toolbar MainWindowHUkázat nástrojový panel pro &doplHkyShow &Widgets Toolbar MainWindowXUkázat nástrojový panel pro úpravování scényShow scene editing toolbar MainWindow:Ukázat okénko "O knihovn Qt"Show the Qt library's About box MainWindow4Ukázat okénko "O programu" Show the application's About box MainWindowDUkázat nástrojový panel pro souborShow the file toolbar MainWindowFUkázat nástrojový panel pro doplHkyShow the widgets toolbar MainWindowZastavit dláníStop rendering MainWindow$Barva trojúhelníkuTriangle Color MainWindow.SouYadnice trojúhelníkuTriangle Coordinates MainWindow(Hustoty trojúhelníkoTriangle Densities MainWindow&Obmny trojúhelníkuTriangle Variations MainWindowTrojúhelníky Triangles MainWindowZptUndo MainWindow Obmny Variations MainWindowProhlí~e Viewer MainWindowDoplHkyWidgets MainWindowSoubor.pngfile.png MainWindowbflam3 xml (*.flam *.flam3 *.flame);;All files (*)1flam3 xml (*.flam *.flam3 *.flame);;All files (*) MainWindow&Poslední krok znovu last redo MainWindow$Poslední krok zpt last undo MainWindow Náhledpreview MainWindowZnovu %1/%2 redo %1/%2 MainWindowBeráneksheep MainWindowZpt %1/%2 undo %1/%2 MainWindowBez názvu.flam3untitled.flam3 MainWindowBez názvu.png untitled.png MainWindowProhlí~e viewer MainWindow KopechillMotionViewFunctionItemEditorsinsinMotionViewFunctionItemEditorTrojúhelníktriangleMotionViewFunctionItemEditorAnimovatanimateMotionViewVarItemEditor BarvacolorMotionViewVarItemEditorBarva_rychlost color_speedMotionViewVarItemEditorHustotadensityMotionViewVarItemEditorNeprohlednostopacityMotionViewVarItemEditorParametr:par: MotionViewVarItemEditorpost: apost: aMotionViewVarItemEditorpost: bpost: bMotionViewVarItemEditorpost: cpost: cMotionViewVarItemEditorpost: dpost: dMotionViewVarItemEditorpost: epost: eMotionViewVarItemEditorpost: fpost: fMotionViewVarItemEditorPromnná:var: MotionViewVarItemEditorxform: axform: aMotionViewVarItemEditorxform: bxform: bMotionViewVarItemEditorxform: cxform: cMotionViewVarItemEditorxform: dxform: dMotionViewVarItemEditorxform: exform: eMotionViewVarItemEditorxform: fxform: fMotionViewVarItemEditorNastavit ConfigureMutationConfigDialog.Výaka kone ného obrázkuheight of the final imageMutationConfigDialogVelikost ikony icon sizeMutationConfigDialogJakost náhledupreview qualityMutationConfigDialog JakostqualityMutationConfigDialog4Velikost kone ného obrázkusize of final imageMutationConfigDialogRychlostspeedMutationConfigDialog.`íYka kone ného obrázkuwidth of the final imageMutationConfigDialog6Nahrazení koeficientu xformxform coef displacementMutationConfigDialog......MutationWidget??MutationWidget Mutace MutationsMutationWidgetNastavit configureMutationWidgetGenom Agenome AMutationWidgetGenom Bgenome BMutationWidgetMutace %1 mutation %1MutationWidgetObnovit regenerateMutationWidget...... PaletteEditorProcházetBrowse PaletteEditor<PYechodové soubory CPT (*.cpt)CPT Gradient Files (*.cpt) PaletteEditorUpravitEdit PaletteEditorLChyba: NepodaYilo se otevYít soubor %1Error: Couldn't open file %1 PaletteEditorRChyba: NepodaYilo se zapsat do souboru %1 Error: Couldn't write to file %1 PaletteEditorLPYechodové soubory (*.cpt *.ggr *.ugr)"Gradient Files (*.cpt *.ggr *.ugr) PaletteEditorNeplatná cesta Invalid path PaletteEditorBarevné paletyPalettes PaletteEditor:Ulo~it pYechod do souboru cptSave gradient to a cpt file PaletteEditorFVybrat soubor s pYechodem k nahráníSelect a gradient file to load PaletteEditorTCestu k adresáYi %1 se nepodaYilo otevYít.)The directory path %1 couldn't be opened. PaletteEditor>Cestu k pYechodu %1 neexistuje.#The gradient path %1 doesn't exist. PaletteEditorNovýnew PaletteEditor˜po et náhodn vytvoYených zastávek, < 2 pYedpokládá náhodný po et na [2,128]Hnumber of randomly generated stops, < 2 implies random number on [2,128] PaletteEditor Vycpatpad PaletteEditorNáhodný pYechodrandom gradient PaletteEditorZrcadlitreflect PaletteEditorOpakovatrepeat PaletteEditorNastavit znovureset PaletteEditor Oto itrotate PaletteEditor Ulo~itsave PaletteEditor...... RenderDialog$Chcete pYepsat %1?Do you want to overwrite %1? RenderDialog&Soubor ji~ existujeFile already exists RenderDialogUmístníLocation RenderDialog JakostQuality RenderDialogUdlat obrázekRender an image RenderDialog,Ulo~it obrázek jako...Save an image as ... RenderDialogVelikostSize RenderDialog"Nynjaí nastavenícurrent settings RenderDialogJakost genomugenome quality RenderDialogBez názvu.png untitled.png RenderDialogDlá se... Rendering ...RenderProgressDialog2Zobrazit udlaný obrázek?View rendered image?RenderProgressDialogNenoRenderProgressDialogZastavitstopRenderProgressDialogAnoyesRenderProgressDialog Udlání %1 za %2%1 rendered in %2 RenderStatus.Udlání %1 za %2 sekund%1 rendered in %2 seconds RenderStatus&Dlání %1 zastaveno%1 rendering stopped RenderStatushh:mm:sshh:mm:ss RenderStatushh:mm:ss.z hh:mm:ss.z RenderStatus mm:ssmm:ss RenderStatus4Dlá se... %L1% (%2 zbývá)"rendering... %L1% ( %2 remaining ) RenderStatuss.zs.z RenderStatus.Nastavit editor skriptoConfig ScriptEditorScriptEditConfigDialog PísmaFontsScriptEditConfigDialogLuaLuaScriptEditConfigDialog*Cesty pro hledání LuaLua Search PathsScriptEditConfigDialog......ScriptEditWidgetCtrl+Return Ctrl+ReturnScriptEditWidgetFormuláYFormScriptEditWidgetOtevYítOpenScriptEditWidgetSpustitRunScriptEditWidget Ulo~itSaveScriptEditWidgetUlo~it jakoSave AsScriptEditWidget4Po~adavek na vstup skriptuScript input requestScriptEditWidgetNastavitconfigScriptEditWidgetOtevYítopenScriptEditWidget(print('lodi ahóoj.')print('hello world.')ScriptEditWidget,Xádek: %1, sloupec: %2row: %1, col: %2ScriptEditWidget Za ítrunScriptEditWidgetB~í skript...running script...ScriptEditWidget Ulo~itsaveScriptEditWidgetUlo~it jakosave asScriptEditWidgetUlo~eno: %1 saved: %1ScriptEditWidgetSkript zastavenscript stoppedScriptEditWidgetNastavit ConfigureSelectGenomeConfigDialogV~dyalwaysSelectGenomeConfigDialog$Automaticky ulo~itautosaveSelectGenomeConfigDialog2Automaticky ulo~it genomyautosave genomesSelectGenomeConfigDialog.Výaka kone ného obrázkuheight of the final imageSelectGenomeConfigDialogVelikost ikony icon sizeSelectGenomeConfigDialog NikdyneverSelectGenomeConfigDialogPYi ukon eníon exitSelectGenomeConfigDialogJakost náhledupreview qualitySelectGenomeConfigDialog JakostqualitySelectGenomeConfigDialog4Velikost kone ného obrázkusize of final imageSelectGenomeConfigDialog.`íYka kone ného obrázkuwidth of the final imageSelectGenomeConfigDialog......SelectGenomeWidget<NepodaYilo se odstranit %1: %2Couldn't remove %1: %2SelectGenomeWidget ChybaErrorSelectGenomeWidget GenomGenomeSelectGenomeWidget&Smazat trojúhelníkyclear trianglesSelectGenomeWidgetNastavit configureSelectGenomeWidgetZdvojit genomduplicate genomeSelectGenomeWidgetOdstranit genom remove genomeSelectGenomeWidget......SelectTriangleWidgetTrojúhelníky TrianglesSelectTriangleWidget$PYidat trojúhelníkadd a triangleSelectTriangleWidgetHustotadensitySelectTriangleWidget0Povolit kone nou promnuenable the final transformSelectTriangleWidgetKone nýfinalSelectTriangleWidgetTPravdpodobnost, ~e je tato funkce vybrána(probability that this function is chosenSelectTriangleWidget:Odstranit vybraný trojúhelníkremove the selected triangleSelectTriangleWidgetPromnit transformSelectTriangleWidget++SheepLoopWidget--SheepLoopWidget......SheepLoopWidgetInterpolace InterpolationSheepLoopWidget&Pohybové rozostYení Motion BlurSheepLoopWidgetPrvky pohybuMotion ElementsSheepLoopWidget"DoplnkOv íSmy kySheepLoopWidgetSheepLoopWidget asový filtrTemporal FilterSheepLoopWidget PYidataddSheepLoopWidgetAnimovatanimateSheepLoopWidgetdAnimovat tuto promnu ve smy ce s elektrickou ovcí0animate this transform in the electricsheep loopSheepLoopWidgetKrabiceboxSheepLoopWidget BarvacolorSheepLoopWidgetBarva_rychlost color_speedSheepLoopWidgetSlu itelnostcompatSheepLoopWidgetHustotadensitySheepLoopWidget^Smr a rychlost mocnitele pohybového rozostYení%direction and rate of exp motion blurSheepLoopWidget PrvekelementSheepLoopWidgetMocnexpSheepLoopWidgetMocnitelexponentSheepLoopWidget(První klí ový snímekfirst keyframeSheepLoopWidgetFNepatrné pYekrytí interpolace xform)fractional overlap of xform interpolationSheepLoopWidget SnímkyframesSheepLoopWidget Snímko na smy kuframes per loopSheepLoopWidgetKmito et frequencySheepLoopWidget FunkcefunctionSheepLoopWidgetGaussovgaussianSheepLoopWidget GenomgenomeSheepLoopWidget KopechillSheepLoopWidgetDJak se plameny mní v probhu  asuhow flames change over timeSheepLoopWidgetHSVhsvSheepLoopWidget&Interpola ní kYivka interp curveSheepLoopWidgetTyp interpolace interp typeSheepLoopWidgetBInterpolace mezi barevnými mapamiinterpolation between colormapsSheepLoopWidget>Interpolace mezi záznamy palety%interpolation between palette entriesSheepLoopWidgetlKYivka interpolace pro tento genom v anima ní sekvenci=interpolation curve for this genome in the animation sequenceSheepLoopWidgetlFunkce interpolace pro tento genom v anima ní sekvenci@interpolation function for this genome in the animation sequenceSheepLoopWidget.Interpolace poloh xform interpolation of xform positionsSheepLoopWidget.Poslední klí ový snímek last keyframeSheepLoopWidgetPYímo arálinearSheepLoopWidget ZápislogSheepLoopWidget Smy kyloopsSheepLoopWidget Re~immodeSheepLoopWidget8Snímky pohybového rozostYenímotion blur framesSheepLoopWidget6Jádro pohybového rozostYenímotion blur kernelSheepLoopWidgetÌPo et  asových kroko na dávku. Kolikrát se na dávku pou~ijí a nashromá~dí interpolované kontrolní bodyknumber of time steps per batch. this many interpolated control points are used per batch and accumulatedSheepLoopWidget StaraíolderSheepLoopWidgetNeprohlednostopacitySheepLoopWidget$Interpolace paletypalette interpSheepLoopWidgetRe~im palety palette modeSheepLoopWidgetParametr:par: SheepLoopWidgetpost: apost: aSheepLoopWidgetpost: bpost: bSheepLoopWidgetpost: cpost: cSheepLoopWidgetpost: dpost: dSheepLoopWidgetpost: epost: eSheepLoopWidgetpost: fpost: fSheepLoopWidgetOdstranitremoveSheepLoopWidgetSmy ky otá enírotation loopsSheepLoopWidgetSpustitrunSheepLoopWidget Ulo~itsaveSheepLoopWidgetSekvencesequenceSheepLoopWidgetøSekvence - otá et animované xforms a interpolovat sousedící genomy animovat -  asov zalo~ená interpolace sousedících genomoysequence - rotate animated xforms and interpolate adjacent genomes animate - time based interpolation of adjacent genomesSheepLoopWidgetsinsinSheepLoopWidget JemnásmoothSheepLoopWidgetRozvrhnoutstaggerSheepLoopWidgetKrokstepSheepLoopWidgetVelký rozsahsweepSheepLoopWidget^ asová poloha tohoto genomu v anima ní sekvenci:temporal position of this genome in the animation sequenceSheepLoopWidget asové vzorkytemporal samplesSheepLoopWidgetVVzorky  asu pou~ité pro pohybové rozostYení!time samples used for motion blurSheepLoopWidgetdotoSheepLoopWidgetPromna transformSheepLoopWidgetTrojúhelníktriangleSheepLoopWidgetTyptypeSheepLoopWidgetHodnotavalueSheepLoopWidgetPromnná:var: SheepLoopWidget$Promnná: Lineární var: linearSheepLoopWidget `íYkawidthSheepLoopWidgetxform: axform: aSheepLoopWidgetxform: bxform: bSheepLoopWidgetxform: cxform: cSheepLoopWidgetxform: dxform: dSheepLoopWidgetxform: exform: eSheepLoopWidgetxform: fxform: fSheepLoopWidget:Njaký stavový text. .. . . .Some status text. .. . . . StatusWidgetStavstatus StatusWidgetO:O:TriangleCoordsWidget.SouYadnice trojúhelníkuTriangle CoordinatesTriangleCoordsWidgetX:X:TriangleCoordsWidgetY:Y:TriangleCoordsWidgeta:a:TriangleCoordsWidgetb:b:TriangleCoordsWidgetc:c:TriangleCoordsWidgetd:d:TriangleCoordsWidget StupeHdegTriangleCoordsWidgete:e:TriangleCoordsWidgetf:f:TriangleCoordsWidgetradradTriangleCoordsWidgetObdélníkrectTriangleCoordsWidgetxxTriangleCoordsWidgetyyTriangleCoordsWidget**TriangleDensityWidget00TriangleDensityWidget==TriangleDensityWidget??TriangleDensityWidgetHustoty DensitiesTriangleDensityWidget }ádnýNoneTriangleDensityWidgetHustota: %1 density: %1TriangleDensityWidget&Slou it tento genommerge this genomeTriangleDensityWidget }ádnýnoneTriangleDensityWidgetVybrat genomselect a genomeTriangleDensityWidget++VariationsWidget Obmny VariationsVariationsWidgetPou~ít hodnotu apply valueVariationsWidgetHodnotaValueVarsTableModel Obmna VariationVarsTableModelSloupec %1 Column %1ViewerPresetsModelXádek %1Row %1ViewerPresetsModelVysoká jakost high qualityViewerPresetsModelNízká jakost low qualityViewerPresetsModelStYední jakost med qualityViewerPresetsModel*StYedn vysoká jakostmed-high qualityViewerPresetsModel(StYedn nízká jakostmed-low qualityViewerPresetsModel$Velmi nízká jakostvery-low qualityViewerPresetsModel++ViewerPresetsWidget--ViewerPresetsWidget<><>ViewerPresetsWidget2PYidat nové pYednastaveníAdd a new presetViewerPresetsWidget2Zadat název pYednastaveníEnter a name for the presetViewerPresetsWidget2PYejmenovat pYednastavení Rename presetViewerPresetsWidget0PYednastavení prohlí~e eViewer PresetsViewerPresetsWidget PYidataddViewerPresetsWidget ZavYítcloseViewerPresetsWidgetPosunout dolo move downViewerPresetsWidgetPosunout nahorumove upViewerPresetsWidgetq%1/o%2/e%3 q%1/o%2/e%3ViewerPresetsWidgetOdstranitremoveViewerPresetsWidget*Obnovit pYednastavení update presetViewerPresetsWidgetˆÿqosmic-1.6.0/ts/qosmic_cs.ts000066400000000000000000004300411304321135200157630ustar00rootroot00000000000000 AdjustSceneWidget Adjust Scene Ajuster La Scène scale échelle Scene Settings Nastavení scény grid Mřížka set grid color Nastavit barvu mřížky guide Vodítko set guide color Nastavit barvu vodítka background color Barva pozadí set background color Nastavit barvu pozadí preview Náhled density Hustota preview density Hustota náhledu depth Hloubka preview iterations Opakování náhledu triangle labels Popisy trojúhelníku grid color couleur de grille background arrière plan CameraSettingsWidget Camera Kamera size of final image Velikost koneÄného obrázku size Velikost width of the final image Šířka koneÄného obrázku height of the final image Výška koneÄného obrázku a power for scale and quality Síla pro měřítko a jakost zoom: ZvÄ›tÅ¡ení: pixels per unit vertically Pixelů na jednotku svisle scale: Měřítko: camera origin PoÄátek kamery center: StÅ™ed: x position Poloha x y position Poloha y rotate camera OtáÄet kamerou rotate OtáÄet ChaosWidget Chaos Zmatek ColorBalanceWidget Form Formulář brightness Jas contrast Kontrast gamma Gama vibrancy Živost hue Zabarvení the maximum Value for an RGB color before trending the color towards white as the density increases. -1 = disabled, 0 = no highlights NejvÄ›tší hodnota pro barvu RGB pÅ™ed směřováním barvy k bílé, jak se hustota zvyÅ¡uje. -1 = zakázáno, 0 = žádné zvýraznÄ›ní highlight ZvýraznÄ›ní disabled Zakázáno alpha Alfa none Žádný opaque Neprůhledný transparent Průhledný improve the antialiasing of bright features ZlepÅ¡it vyhlazování jasných prvků early clip Brzká ukázka ColorDialog Select a color Vybrat barvu Hue Zabarvení Red ÄŒervená Sat Sytost Green Zelená Val Hodnota Blue Modrá Alpha Alfa Ok OK Cancel ZruÅ¡it ColorSettingsWidget Color Settings Nastavení barev transform color index Barevný rejstřík promÄ›ny transform color Barva promÄ›ny image background color Barva pozadí obrázku background color Barva pozadí per iteration scaling factor on the transform color Násobek měřítka na barvu promÄ›ny na opakování speed Rychlost 0=invisible, 1=totally visible 0=neviditelný, 1=zcela viditelný opacity Neprůhlednost 2 or more means rotational 1 means identity, ie no symmetry 0 means pick a random symmetry (maybe none) -1 means bilateral (reflection) -2 or less means rotational and reflective 2 de plus pour la rotation 1 pour l'identité (ne symétrie) 0 pour la symétrie aléatoires -1 pour bilatéral (reflet) -2 de moin pour la rotation et reflet symmetry symétrie CoreApp Error: No palettes file found at: %1 %2 %3 %4 The flam3 palettes xml file could not be found. You can set this path using the flam3_palettes environment variable. For example: flam3_palettes=/some/path-to/flam3-palettes.xml qosmic Chyba: V: %1 %2 %3 %4 nebyl nalezen žádný soubor s paletami. NepodaÅ™ilo se nalézt soubor xml s paletami flam3. Můžete tuto cestu nastavit pomocí promÄ›nné prostÅ™edí flam3_palettes. Například: flam3_palettes=/some/path-to/flam3-palettes.xml qosmic Qosmic %1 Usage: qosmic [flam3 file] environment variables: log=%2 flam3_verbose=%3 flam3_nthreads=%4 flam3_palettes=%5 Qosmic %1 Použití: qosmic [soubor flam3e] PromÄ›nné prostÅ™edí: log=%2 flam3_verbose=%3 flam3_nthreads=%4 flam3_palettes=%5 Qosmic %1 Usage: qosmic [flam3 file] environment variables: log=%2 flam3_verbose=%3 flam3_nthreads=%4 Qosmic %1 Použití: qosmic [soubor flam3] PromÄ›nné prostÅ™edí: log=%2 flam3_verbose=%3 flam3_nthreads=%4 Couldn't load file %1 NepodaÅ™ilo se nahrát soubor %1 DirectoryViewWidget Sort by Řadit dle Descending SestupnÄ› View Pohled Short View ZestruÄnÄ›ný pohled Detailed View Podrobný pohled Show Hidden Files Ukázat skryté soubory Select a directory Vybrat adresář Form Formulář ... ... + + - - EditModeSelectorWidget EditModeSelector VoliÄRežimuÚprav Move triangle PÅ™esunout trojúhelník Move Tringle PÅ™esunout trojúhelník Rotate triangle OtoÄit trojúhelník Scale triangle ZmÄ›nit velikost trojúhelníku Flip triangle PÅ™evrátit trojúhelník move left PÅ™esunout vlevo < < move right PÅ™esunout vpravo > > move up PÅ™esunout nahoru move down PÅ™esunout dolů deg Stup % % + + - - flip horizontally PÅ™evrátit vodorovnÄ› horiz VodorovnÄ› flip vertically PÅ™evrátit svisle vert Svisle axis: Osa: transform axis PromÄ›nit osu origin PoÄátek mark ZnaÄka circum Okolo box Krabice O O X X Y Y add a triangle PÅ™idat trojúhelník ... ... remove the selected triangle Odstranit vybraný trojúhelník reset the triangle Nastavit trojúhelník znovu final KoneÄný edit the post transform Upravit po-promÄ›nu post Po select: VýbÄ›r: selection type Typ výbÄ›ru triangles Trojúhelníky nodes Uzly scene settings Nastavení scény zoom visible ZvÄ›tÅ¡it viditelné rescale scene ZmÄ›nit velikost scény zoom center ZvÄ›tÅ¡it na stÅ™ed scene Scéna EditTriangleWidget center on centre origin origin triangle triangle X X mark marquer O O Y Y rotate rotation scale échelle move déplacez move down déplacer en bas move up déplacer en haut flip flipper Selection Sélecteur triangles triangles nodes nÅ“uds grid grille background arrière plan FigureEditor Edit Triangle Upravit trojúhelník Add Triangle Ajouter de Triangle Duplicate Triangle Dupliquer de Triangle Remove Triangle Supprimer de Triangle Cut Vyjmout Copy Kopírovat Paste Vložit Add PÅ™idat Reset Position Nastavit polohu znovu Flip Horizontal PÅ™evrátit vodorovnÄ› Flip Vertical PÅ™evrátit svisle Rescale View ZmÄ›nit velikost pohledu Triangles Trojúhelníky post transform: %1 PromÄ›na po: %1 transform: %1 density: %L2 PromÄ›na: %1 hustota: %L2 final transform: %1 density: %L2 PromÄ›na koneÄná: %1 hustota: %L2 Rescale Echelle automatique GenomeColorSelector ColorSelector VoliÄ barvy Show Histogram Ukázat histogram GenomeVector selector VoliÄ %1 xforms time: %2 %1 xforms Äas: %2 genome %1 Genom %1 Genome %1 Genom %1 GenomeVectorListModelItemEditor Form Formulář temporal position of this genome in the animation sequence ÄŒasová poloha tohoto genomu v animaÄní sekvenci time ÄŒas x x GradientStopsEditor Edit Stops Upravit zastávky Add Stop PÅ™idat zastávku Remove Stop Odstranit zastávku Change Color ZmÄ›nit barvu ImageSettingsWidget Image Settings Nastavení obrázku Image Quality Jakost obrázku Image quality presets PÅ™ednastavení jakosti obrázku configure presets Nastavit pÅ™ednastavení samples per pixel Vzorků na pixel quality Jakost spatial filter radius (variance of gaussian) PolomÄ›r prostorového filtru (variance gaussova) filter Filtr shape of the spatial filter Tvar prostorového filtru shape forme filter shape Tvar filtru gaussian Gaussův hermite Hermite box Krabice triangle Trojúhelník bell Zvonek bspline B-kÅ™ivka mitchell Mitchell blackman Blackman catrom Catrom hanning Hanning hamming Hamming lanczos3 Lanczos3 lanczos2 Lanczos2 quadratic ÄŒtvercový spatial oversample Prostorové pÅ™evzorkování oversample PÅ™evzorkování sample density iterations. number of times the buckets are filtered into the accumulator Opakování hustoty vzorků. Kolikrát jsou hromady filtrovány do hromaditele passes Průchody Conversions PÅ™evody the genome symmetry group 2 or more means rotational 1 means identity, ie no symmetry 0 means pick a random symmetry (maybe none) -1 means bilateral (reflection) -2 or less means rotational and reflective Skupina soumÄ›rnosti genomu 2 nebo více znamená otáÄivý 1 znamená totožnost, napÅ™. žádná soumÄ›rnost 0 znamená výbÄ›r náhodné soumÄ›rnosti (může být i žádná) -1 znamená oboustranný (odraz) -2 nebo ménÄ› znamená otáÄivý a odrazivý < < > > temporal samples échantillons temporale density estimation parameters for blurring low density hits Parametry odhadu hustoty pro nálezy rozmazání o nízké hustotÄ› estimator Odhad filter width for bin with one hit Filtrovat šířku pro koÅ¡ s jedním nálezem exponent on decay function Mocnitel funkce poklesu estimator curve KÅ™ivka odhadu minimum filter width used. forces filter to be used of at least this width on all pts Nejmenší použitá šířka filtru. Vynutí použití filtru s alespoň touto šířkou na vÅ¡echny body estimator min Nejmenší odhad the genome symmetry group 1 = no symmetry, 0 = random symétrie de genome 1 = ne symétrie, 0 = aléatoire symmetry SoumÄ›rnost apply symmetry to the genome Použít soumÄ›rnost na genom ... ... Lua number expected for variable Číslo oÄekávané pro promÄ›nnou Lua::Frame load requires one string argument Nahrání vyžaduje argument o jednom Å™etÄ›zci save requires one string argument Uložení vyžaduje argument o jednom Å™etÄ›zci index out of range: Genome[%d] is null Index mimo rozsah: Genome[%d] je nulový Lua::Genome index out of bounds: Genome[%d] Index mimo hranice: Genome[%d] index out of range: Genome.XForm[%d] is null Index mimo rozsah: Genome.XForm[%d] je nulový genome has no xform at index %d Genome nemá žádný xform pÅ™i indexu %d index %d out of range Index %d mimo rozsah no index %d in chaos array Žádný index %d v poli zmatku no index %d,%d in chaos array Žádný index %d,%d v poli zmatku Lua::LuaEditor Open a file Otevřít soubor Ctrl+1 Ctrl+1 Save file Uložit soubor Ctrl+2 Ctrl+2 Save to file Uložit do souboru Ctrl+3 Ctrl+3 Open a script Otevřít skript Application error Chyba programu Cannot read file %1 Nelze pÅ™eÄíst soubor %1 Save a script Uložit skript lua source (*.lua);;All files (*) Zdroj lua (*.lua);;VÅ¡echny soubory (*) Cannot write file %1 Nelze zapsat soubor %1 Lua::LuaThread error: %1 Chyba: %1 stopping$ Zastavení$ script stopped Skript zastaven ok OK stack has no thread ref Zásobník nemá žádný odkaz na vlákno must return a string to musí vrátit Å™etÄ›zec stopping Zastavuje se Running ........ Běží... Lua::Lunar not a valid %s userdata Nejsou platná %s uživatelská data %s missing method '%s' %s chybí metoda '%s' (error with no message) (chyba bez zprávy o chybÄ›) %s:%s status = %d %s %s:%s stav = %d %s %s missing metatable %s chybí popisná tabulka stopping Zastavuje se Lua::XForm index out of bounds: Genome[%d].XForm[%d] Index mimo hranice: Genome[%d].XForm[%d] couldn't build metatables for var.variables: %1 NepodaÅ™ilo se sestavit popisné tabulky pro var.promÄ›nné: %1 couldn't build metatables for var: %1 NepodaÅ™ilo se sestavit popisné tabulky pro obmÄ›nu: %1 invalid variation index %d Neplatná zmÄ›na indexu %d variation %s not found ObmÄ›na %s nenalezena variables argument is not a valid table Argument promÄ›nné není platná tabulka MainPreviewWidget presets PÅ™ednastavení genome quality Jakost genomu Viewer Presets Paramètres d'Affichage Preview Náhled MainViewer flame viewer ProhlížeÄ plamene viewer ProhlížeÄ fullscreen Na celou obrazovku presets PÅ™ednastavení show status Ukázat stav genome quality Jakost genomu file Soubor close Zavřít scale down ZmÄ›nit velikost dolů scale up ZmÄ›nit velikost nahoru scale last ZmÄ›nit velikost posledního scale reset Nastavit velikost znovu save image Uložit obrázek Save an image Uložit obrázek untitled.png Bez názvu.png genome %1 Genom %1 Viewer Presets Paramètres d'Affichage MainWindow Preview Náhled Triangles Trojúhelníky Densities Hustoty Viewer ProhlížeÄ Image Obrázek Camera Kamera Coordinates SouÅ™adnice Edit Triangle Modifier de Triangle Colors Barvy Viewer Presets Paramètres d'Affichage Color Balance Vyvážení barev Variations ObmÄ›ny Browse Procházet Palettes Barevné palety Mutations Mutace Edit Script Upravit skript Genomes Genom untitled.png Bez názvu.png About Qosmic O programu Qosmic <p><b>Qosmic version %1</b></p><p>Copyright (C) 2007-2016 by David Bitseff<br><p>Use and redistribute under the terms of the<br><a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License Version 3</a></p><p>Thanks to:<br>- Scott Draves for the <a href="http://flam3.com/">flam3</a> library<br>- Erik Reckase for his work on the flam3 library<br>- Mark James for his <a href="http://www.famfamfam.com/lab/icons/silk/">Silk</a> icon set<br>- Mark Townsend for the <a href="www.apophysis.org">Apophysis</a> editor<br>- Pavel Fric for Czech Translations<br><p>This version uses: Qt Reset Nastavit znovu Ctrl+N Ctrl+R Load default genome Nahrát výchozí genom &Open... &Otevřít... Open an existing file Otevřít stávající soubor &Save &Uložit Save the flame to disk Uložit plamen na disk Save &As... Uložit &jako... Save the flame under a new name Uložit plamen pod novým názvem Render to &file... &UdÄ›lat do souboru... Save an image of current flame Uložit obrázek nynÄ›jšího plamene Q&uicksave flame... Uložit plamen &rychle... Quickly save file and image of current flame Rychle uložit soubor a obrázek nynÄ›jšího plamene &Quit &UkonÄit Quit the application UkonÄit program &Stop rendering &Zastavit dÄ›lání Couldn't save file %1 NepodaÅ™ilo se uložit soubor %1 untitled.flam3 Bez názvu.flam3 undo %1/%2 ZpÄ›t %1/%2 Save a sheep Uložit ovci Ctrl+K Ctrl+A Stop rendering Zastavit dÄ›lání &Random Flame &Náhodný plamen Ctrl+R Ctrl+F Generate a random xform set VytvoÅ™it náhodný genom Rescale Echelle automatique Ctrl+A Ctrl+E Rescale the editor ZmÄ›nit měřítko editoru Select next triangle Vybrat další trojúhelník Select previous triangle Vybrat pÅ™edchozí trojúhelník Undo ZpÄ›t Redo Znovu Import genomes Zavést genomy Export current genome Vyvést nynÄ›jší genom Export the current genome Vyvést nynÄ›jší genom File Soubor Show &File Toolbar Ukázat nástrojový panel pro &soubor Show the file toolbar Ukázat nástrojový panel pro soubor Widgets Doplňky Adjust Scene Ajuster La Scène Error Chyba Cannot import file %1 Nelze zavést soubor %1 Cannot write file to %1 Soubor nelze zapsat do %1 <p><b>Qosmic version %1</b></p><p>Copyright (C) 2007-2016 by David Bitseff<br><p>Use and redistribute under the terms of the<br><a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License Version 3</a></p><p>Thanks to:<br>- Scott Draves for the <a href="http://flam3.com/">flam3</a> library<br>- Erik Reckase for his work on the flam3 library<br>- Mark James for his <a href="http://www.famfamfam.com/lab/icons/silk/">Silk</a> icon set<br>- Mark Townsend for the <a href="www.apophysis.org">Apophysis</a> editor<p>This version uses: Qt <p><b>Verze programu Qosmic %1</b></p><p>Autorské právo (C) 2007-2016 David Bitseff<br><p>Používejte a Å¡iÅ™te za podmínek<br><a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License verze 3</a></p><p>PodÄ›kování:<br>- Scott Draves za <a href="http://flam3.com/">flam3</a> library<br>- Erik Reckase za jeho práci na knihovnÄ› flam3<br>- Mark James za jeho sadu ikon <a href="http://www.famfamfam.com/lab/icons/silk/">Silk</a><br>- Mark Townsend za editor <a href="www.apophysis.org">Apophysis</a><p>Tato verze používá: Qt Scale in the scene ZvÄ›tÅ¡it scénu Scale out the scene ZmenÅ¡it scénu Cut Vyjmout Copy Kopírovat Paste Vložit Show &Widgets Toolbar Ukázat nástrojový panel pro &doplňky Show the widgets toolbar Ukázat nástrojový panel pro doplňky Edit Úpravy Show &Edit Toolbar Ukázat nástrojový panel pro ú&pravy Show the edit toolbar Afficher la trousse à outils de edition &About &O programu Show the application's About box Ukázat okénko "O programu" About &Qt O &Qt Show the Qt library's About box Ukázat okénko "O knihovnÄ› Qt" &File &Soubor &Edit &Úpravy &Widgets &Doplňky &Info &Informace Show scene editing toolbar Ukázat nástrojový panel pro úpravování scény Image Quality Jakost obrázku Previewer Náhled Rescale View ZmÄ›nit velikost pohledu Triangle Editing Modifier de Triangle Triangle Variations ObmÄ›ny trojúhelníku Triangle Color Barva trojúhelníku Color Settings Nastavení barev Genome List Seznam genomů Triangle Densities Hustoty trojúhelníků Directory Browser ProhlížeÄ adresářů Triangle Coordinates SouÅ™adnice trojúhelníku Sheep Loop OvÄí smyÄka Script Editor Editor skriptů Ready Ok File loaded Fichier est ouvert Application error Chyba programu Cannot write file %1 Nelze zapsat soubor %1 Couldn't open file %1 NepodaÅ™ilo se otevřít soubor %1 File saved Soubor uložen Cannot write file to %1 Impossible d'enregistrer le fichier %1 Cannot open file %1 Erreur lors de l'ouverture du fichier %1 Couldn't parse file %1 Imposssible du lecture le fichier %1 last undo Poslední krok zpÄ›t redo %1/%2 Znovu %1/%2 last redo Poslední krok znovu Open a flame Otevřít plamen Save a flame Uložit plamen Save an image Sauvegarder une image Import genomes from a file Zavést genomy Save the current genome Uložit nynÄ›jší genom preview Náhled viewer ProhlížeÄ file.png Soubor.png sheep Beránek Chaos Zmatek Sheep Loops OvÄí smyÄky [%1/%2] : (%L3%4%L5) : mark (%L6%7%L8) [%1/%2] : (%L3%4%L5) : znaÄka (%L6%7%L8) flam3 xml (*.flam *.flam3 *.flame);;All files (*) flam3 xml (*.flam *.flam3 *.flame);;All files (*) Qosmic Qosmic Add Triangle PÅ™idat trojúhelník Move Triangles PÅ™esunout trojúhelníky Rotate Triangles OtoÄit trojúhelníky Scale Triangles ZmÄ›nit velikost trojúhelníků Flip Triangles PÅ™evrátit trojúhelníky MotionViewFunctionItemEditor sin sin hill Kopec triangle Trojúhelník MotionViewVarItemEditor animate Animovat color Barva color_speed Barva_rychlost density Hustota opacity Neprůhlednost var: PromÄ›nná: par: Parametr: xform: a xform: a xform: b xform: b xform: c xform: c xform: d xform: d xform: e xform: e xform: f xform: f post: a post: a post: b post: b post: c post: c post: d post: d post: e post: e post: f post: f MutationConfigDialog Configure Nastavit size of final image Velikost koneÄného obrázku icon size Velikost ikony width of the final image Šířka koneÄného obrázku height of the final image Výška koneÄného obrázku xform coef displacement Nahrazení koeficientu xform speed Rychlost preview quality Jakost náhledu quality Jakost MutationWidget clear selected supprimer la liste Mutations Mutace ... ... configure Nastavit ? ? regenerate Obnovit genome A Genom A genome B Genom B mutation %1 Mutace %1 PaletteEditor Save gradient to a cpt file Uložit pÅ™echod do souboru cpt CPT Gradient Files (*.cpt) PÅ™echodové soubory CPT (*.cpt) Error: Couldn't open file %1 Chyba: NepodaÅ™ilo se otevřít soubor %1 Error: Couldn't write to file %1 Chyba: NepodaÅ™ilo se zapsat do souboru %1 Invalid path Neplatná cesta The directory path %1 couldn't be opened. Cestu k adresáři %1 se nepodaÅ™ilo otevřít. Gradient Files (*.cpt *.ggr *.ugr) PÅ™echodové soubory (*.cpt *.ggr *.ugr) The gradient path %1 doesn't exist. Cestu k pÅ™echodu %1 neexistuje. Palettes Barevné palety Edit Upravit rotate OtoÄit pad Vycpat repeat Opakovat reflect Zrcadlit number of randomly generated stops, < 2 implies random number on [2,128] poÄet náhodnÄ› vytvoÅ™ených zastávek, < 2 pÅ™edpokládá náhodný poÄet na [2,128] random gradient Náhodný pÅ™echod new Nový reset Nastavit znovu save Uložit Browse Procházet ... ... Select a gradient file to load Vybrat soubor s pÅ™echodem k nahrání RenderDialog current settings NynÄ›jší nastavení genome quality Jakost genomu File already exists Soubor již existuje Do you want to overwrite %1? Chcete pÅ™epsat %1? untitled.png Bez názvu.png Save an image as ... Uložit obrázek jako... Render an image UdÄ›lat obrázek Location UmístÄ›ní ... ... Size Velikost Quality Jakost RenderProgressDialog View rendered image? Zobrazit udÄ›laný obrázek? Rendering ... DÄ›lá se... yes Ano no Ne stop Zastavit RenderStatus hh:mm:ss hh:mm:ss mm:ss mm:ss ss.z ss.z rendering... %1% ( %2 remaining ) rendrer %1% ( %2 de surplus ) s.z s.z rendering... %L1% ( %2 remaining ) DÄ›lá se... %L1% (%2 zbývá) %1 rendering stopped DÄ›lání %1 zastaveno hh:mm:ss.z hh:mm:ss.z %1 rendered in %2 seconds UdÄ›lání %1 za %2 sekund %1 rendered in %2 UdÄ›lání %1 za %2 RenderThread rendering... %1% ( %2 remaining ) rendrer %1% ( %2 de surplus ) %1 rendering stopped rendrer de %1 finis %1 rendered in %2 seconds rendrer de %1 en %2 deux %1 rendered in %2 rendrer de %1 en %2 ScriptEditConfigDialog Config ScriptEditor Nastavit editor skriptů Fonts Písma Lua Lua Lua Search Paths Cesty pro hledání Lua ScriptEditWidget Form Formulář Open Otevřít Save Uložit Save As Uložit jako save as Uložit jako Run Spustit run ZaÄít Ctrl+Return Ctrl+Return open Otevřít config Nastavit ... ... save Uložit stop terminer print('hello world.') print('lodi ahóoj.') Script input request Požadavek na vstup skriptu row: %1, col: %2 Řádek: %1, sloupec: %2 running script... Běží skript... script stopped Skript zastaven saved: %1 Uloženo: %1 SelectGenomeConfigDialog Configure Nastavit size of final image Velikost koneÄného obrázku icon size Velikost ikony width of the final image Šířka koneÄného obrázku height of the final image Výška koneÄného obrázku preview quality Jakost náhledu quality Jakost autosave genomes Automaticky uložit genomy autosave Automaticky uložit never Nikdy on exit PÅ™i ukonÄení always Vždy SelectGenomeWidget Genome Genom duplicate genome Zdvojit genom remove genome Odstranit genom clear triangles Smazat trojúhelníky configure Nastavit ... ... Error Chyba Couldn't remove %1: %2 NepodaÅ™ilo se odstranit %1: %2 SelectTriangleWidget Triangles Trojúhelníky transform PromÄ›nit add a triangle PÅ™idat trojúhelník ... ... enable the final transform Povolit koneÄnou promÄ›nu probability that this function is chosen PravdÄ›podobnost, že je tato funkce vybrána density Hustota remove the selected triangle Odstranit vybraný trojúhelník set this transform as final Fixer de triangle finale final KoneÄný SheepLoopWidget SheepLoopWidget DoplnÄ›kOvÄíSmyÄky temporal position of this genome in the animation sequence ÄŒasová poloha tohoto genomu v animaÄní sekvenci genome Genom first keyframe První klíÄový snímek to do last keyframe Poslední klíÄový snímek save Uložit ... ... run Spustit Interpolation Interpolace mode Režim frames Snímky frames per loop Snímků na smyÄku loops SmyÄky rotation loops SmyÄky otáÄení sequence - rotate animated xforms and interpolate adjacent genomes animate - time based interpolation of adjacent genomes Sekvence - otáÄet animované xforms a interpolovat sousedící genomy animovat - ÄasovÄ› založená interpolace sousedících genomů sequence Sekvence animate Animovat stagger Rozvrhnout fractional overlap of xform interpolation Nepatrné pÅ™ekrytí interpolace xform interpolation curve for this genome in the animation sequence KÅ™ivka interpolace pro tento genom v animaÄní sekvenci interp curve InterpolaÄní kÅ™ivka how flames change over time Jak se plameny mÄ›ní v průbÄ›hu Äasu linear PřímoÄará smooth Jemná interpolation function for this genome in the animation sequence Funkce interpolace pro tento genom v animaÄní sekvenci interp type Typ interpolace interpolation of xform positions Interpolace poloh xform log Zápis compat SluÄitelnost older Starší palette interp Interpolace palety interpolation between colormaps Interpolace mezi barevnými mapami hsv HSV sweep Velký rozsah palette mode Režim palety interpolation between palette entries Interpolace mezi záznamy palety step Krok Motion Blur Pohybové rozostÅ™ení number of time steps per batch. this many interpolated control points are used per batch and accumulated PoÄet Äasových kroků na dávku. Kolikrát se na dávku použijí a nashromáždí interpolované kontrolní body temporal samples ÄŒasové vzorky time samples used for motion blur Vzorky Äasu použité pro pohybové rozostÅ™ení Temporal Filter ÄŒasový filtr type Typ motion blur kernel Jádro pohybového rozostÅ™ení box Krabice gaussian Gaussův exp Mocn width Šířka motion blur frames Snímky pohybového rozostÅ™ení exponent Mocnitel direction and rate of exp motion blur SmÄ›r a rychlost mocnitele pohybového rozostÅ™ení Motion Elements Prvky pohybu transform PromÄ›na animate this transform in the electricsheep loop Animovat tuto promÄ›nu ve smyÄce s elektrickou ovcí add PÅ™idat + + remove Odstranit - - element Prvek value Hodnota function Funkce frequency KmitoÄet var: PromÄ›nná: par: Parametr: color Barva color_speed Barva_rychlost density Hustota opacity Neprůhlednost xform: a xform: a xform: b xform: b xform: c xform: c xform: d xform: d xform: e xform: e xform: f xform: f post: a post: a post: b post: b post: c post: c post: d post: d post: e post: e post: f post: f sin sin hill Kopec triangle Trojúhelník var: linear PromÄ›nná: Lineární StatusWidget status Stav Some status text. .. . . . NÄ›jaký stavový text. .. . . . TriangleCoordsWidget Triangle Coordinates SouÅ™adnice trojúhelníku x x y y O: O: X: X: Y: Y: rect Obdélník deg Stupeň rad rad a: a: d: d: b: b: e: e: c: c: f: f: TriangleDensityWidget Densities Hustoty 0 0 = = ? ? select a genome Vybrat genom none Žádný merge this genome SlouÄit tento genom * * None Žádný density: %1 Hustota: %1 VariationsWidget Variations ObmÄ›ny apply value Použít hodnotu + + VarsTableModel Variation ObmÄ›na Value Hodnota ViewerPresetsModel Column %1 Sloupec %1 Row %1 Řádek %1 very-low quality Velmi nízká jakost low quality Nízká jakost med-low quality StÅ™ednÄ› nízká jakost med quality StÅ™ední jakost med-high quality StÅ™ednÄ› vysoká jakost high quality Vysoká jakost ViewerPresetsWidget q%1/o%2/e%3 q%1/o%2/e%3 Add a new preset PÅ™idat nové pÅ™ednastavení Enter a name for the preset Zadat název pÅ™ednastavení Rename preset PÅ™ejmenovat pÅ™ednastavení Viewer Presets PÅ™ednastavení prohlížeÄe add PÅ™idat + + remove Odstranit - - update preset Obnovit pÅ™ednastavení <> <> move up Posunout nahoru move down Posunout dolů close Zavřít qosmic-1.6.0/ts/qosmic_fr.qm000066400000000000000000000472051304321135200157620ustar00rootroot00000000000000<¸dÊÍ!¿`¡½ÝB8O X LY z[xO9ãG¤ lJÄ ÏJÄ VOµIX´žg¤@g¤EšoµOy¾8N‹¾P7Õ#ÑVŠ¥ ýVŠ¥&XÉÄ)õh6á™m| m|?OuZà $xÉÄ7qf aŽ ¥RÅ,*ÁåVE™åVE4œåVE<Éë5žŠ‚/žÕ"+N²‹ “}2á¼ WB>’)žKÿ4C¤ªÜü ­Ó޵Ba! •MÀ*Ô{pº2{pºù’}å ¨’}å>´˜2‡£Šý§–ÄKñí~*/÷¼y6§:õÄ#…H)Õ _ú¨½‹z2 ÀØç²Ÿæ… ›æ…?‰_E, `S%%îbkÅBülw° Òlw°F"˜<Ę<ĘI¼è™n•u™n•67›‰É;ž¦6“²Ä)8PÅmEYö¦(vE'½V¥Ó0ÉV¥ÓAÍnùä;Cq¾õ- å † åB ÏÍÂ2Ñ@!K èU%¥fò.o[Ž ^-sù`¤%ªl¾êpÊC1‰„Gò.§ .Ó§.Æl7Ëü Ð:ÂÜõáU*,yÒ.ÄEúÃ:ÙOøK+­h©Ãhýþ ^}\”"ÄŒFÅ@€ŒFÅFqŒœÃôŒœÃڌϗ¡ŒÏ—&½ŒÏ·qŒÏ·3–¨¥û–¨¥7¨™‚Š”ÏpÏÍÂÏÍÂ3ÛùVG/ùVG)e#Ôºƒ,¿£&V,¿£775 Î'WA]#E8‚¹ª‚¹#ÿÞ94¸0ÉP¸0É4þ¸0É=/¸0é8ÁOî8ŽøK•#øK•4øK•A‘ Ŭ:[ ÓУ$O äAå5 ý²: Юj e¯O gÖ/3I gù/3 ˆ«u$¤ в“%m в“5û ŒÅÓ# ŒÅÓ[ Å Ù Å Ù4[ Å Ù? Å Ù@G ÎìCç ô³Òì çÂÝ CÄF± ør/ #°ñy mŸùa …såt …så5œ …så=Õ ¥hò\ ¤… ¤…5< ¤…=q Ã1* -oS v—¥ú vâ¾ € vâ¾EÓ Ž)•Ì ÏšB' R,Ä 9) +û!Ç ¦‹o9€ µ+…+M ·je] ýÔSÏ+ÀóA1E±¥%ürŠÝ/F„#D’Ëi."„™CÁ„™C1ç„™C>p„¹C &–âðNÓ2RNÓCa²,ò0v¼Bâc¼Bâ¼JäD½Ç”sÎÝgáÎóg0#ø>$D þ¶:iG,densitédensityAdjustSceneWidget grillegridAdjustSceneWidget&affichage inférieurpreviewAdjustSceneWidgetAppareilCameraCameraSettingsWidget"origin d'appareil camera originCameraSettingsWidgetorigin:center:CameraSettingsWidget l'hauter d'imageheight of the final imageCameraSettingsWidgetrotationrotateCameraSettingsWidget$tourner l'appareil rotate cameraCameraSettingsWidgetéchelle:scale:CameraSettingsWidgetdimensionssizeCameraSettingsWidget$dimensions d'imagesize of final imageCameraSettingsWidgetlarguer d'imagewidth of the final imageCameraSettingsWidgetposition x x positionCameraSettingsWidgetposition y y positionCameraSettingsWidget zoom:zoom:CameraSettingsWidget alphaalphaColorBalanceWidget clarté brightnessColorBalanceWidgetconstrastecontrastColorBalanceWidget teintehueColorBalanceWidget ne pasnoneColorBalanceWidgetBleuBlue ColorDialogAnnulerCancel ColorDialogVertGreen ColorDialog TeinteHue ColorDialogOkOk ColorDialog RougeRed ColorDialog*Choisissez du couleurSelect a color ColorDialog.Paramètres des CouleursColor SettingsColorSettingsWidget,couleur d'arrière planbackground colorColorSettingsWidget2le couleur d'arrière planimage background colorColorSettingsWidget(couleur de transformtransform colorColorSettingsWidget$l'index de couleurtransform color indexColorSettingsWidgetOOEditModeSelectorWidgetXXEditModeSelectorWidgetYYEditModeSelectorWidget&ajouter de triangleadd a triangleEditModeSelectorWidget finalefinalEditModeSelectorWidgetmarquermarkEditModeSelectorWidgetdéplacer en bas move downEditModeSelectorWidget déplacer en hautmove upEditModeSelectorWidget nSudsnodesEditModeSelectorWidget originoriginEditModeSelectorWidgetDsupprimer de triangle sélectionnéeremove the selected triangleEditModeSelectorWidgettriangles trianglesEditModeSelectorWidgetAjouterAdd FigureEditor CopierCopy FigureEditorTaillerCut FigureEditor(Modifier de Triangle Edit Triangle FigureEditor&Flipper HorizontaleFlip Horizontal FigureEditor"Flipper Verticale Flip Vertical FigureEditor CollerPaste FigureEditorEchelle Rescale View FigureEditor(Remettre la PositionReset Position FigureEditorTriangles Triangles FigureEditorDtransform finale: %1 densité: %L2 !final transform: %1 density: %L2  FigureEditor&transform post: %1 post transform: %1  FigureEditor6transform: %1 densité: %L2 transform: %1 density: %L2  FigureEditor Ajouter un ArrêtAdd StopGradientStopsEditor&Modifier la Couleur Change ColorGradientStopsEditor(Modifier les Arrêtes Edit StopsGradientStopsEditor$Supprimer un Arrêt Remove StopGradientStopsEditor$Qualité de l'image Image QualityImageSettingsWidget$Paramètres d'ImageImage SettingsImageSettingsWidget<appliquer le symétrie à genomeapply symmetry to the genomeImageSettingsWidgetestimation estimatorImageSettingsWidget&courbe d'estimationestimator curveImageSettingsWidget(minimum d'estimation estimator minImageSettingsWidget filtrefilterImageSettingsWidget passerpassesImageSettingsWidgetqualitéqualityImageSettingsWidget*échantillons de pixelsamples per pixelImageSettingsWidget.forme du filtre spatialshape of the spatial filterImageSettingsWidget.rayon du filtre spatial,spatial filter radius (variance of gaussian)ImageSettingsWidgetsymétriesymmetryImageSettingsWidgettriangletriangleImageSettingsWidget*Erreur de ApplicationApplication errorLua::LuaEditor:Erreur lecture le fichier %1 Cannot read file %1 Lua::LuaEditor@Ne peut pas écire le fichier %1 Cannot write file %1 Lua::LuaEditor"Ouvrir un fichier Open a fileLua::LuaEditor,Sauvegarder un fichier Save fileLua::LuaEditor Sauvegarder sous Save to fileLua::LuaEditor&Affichage InférieurPreviewMainPreviewWidgetparamètrespresetsMainPreviewWidget*Sauvegarder une image Save an image MainViewer$affichage la flame flame viewer MainViewerparamètrespresets MainVieweraffichageviewer MainViewer&A propos&About MainWindow&Edition&Edit MainWindow&Fichier&File MainWindow&Ouvrir...&Open... MainWindow&Quitter&Quit MainWindow &Flame Aléatoire &Random Flame MainWindow&Sauvegarder&Save MainWindow(Arrêtter de &Rendrer&Stop rendering MainWindowA propos de &Qt About &Qt MainWindow$A propos de Qosmic About Qosmic MainWindow&Ajouter de Triangle Add Triangle MainWindow(Erreur d'ApplicationApplication error MainWindow*Navigateur du FichierBrowse MainWindowAppareilCamera MainWindowLImpossible d'enregistrer le fichier %1Cannot write file %1  MainWindowXImpossible d'enregistrer le fichier %1 {1?}Cannot write file to %1 MainWindow(Balancier de Couleur Color Balance MainWindow*Paramètres de CouleurColor Settings MainWindowCouleursColors MainWindowCoordonnées Coordinates MainWindow CopierCopy MainWindowTaillerCut MainWindowDensitées Densities MainWindow*Navigateur du FichierDirectory Browser MainWindowEditionEdit MainWindow"Édition de Script Edit Script MainWindow ErreurError MainWindow0Exporter le genome actifExport current genome MainWindow0Exporter le genome actifExport the current genome MainWindowFichierFile MainWindow,Sauvegarder du fichier File saved MainWindow2Créer un genome aléatoireGenerate a random xform set MainWindow"Liste des Genomes Genome List MainWindow ImageImage MainWindow$Qualité de l'image Image Quality MainWindow(Importer des genomesImport genomes MainWindow(Importer des genomesImport genomes from a file MainWindow6Ouvrir le genome par défautLoad default genome MainWindowMutation Mutations MainWindowOuvrir un flame Open a flame MainWindow4Ouvrir un fichier de flam3Open an existing file MainWindowPalettesPalettes MainWindow CollerPaste MainWindow&Affichage InférieurPreview MainWindow&Affichage Inférieur Previewer MainWindow4Q&uicksauvegarder flame...Q&uicksave flame... MainWindownSauvegarder un fichier et une image de flam3 rapidement,Quickly save file and image of current flame MainWindow*Quitter l'applicationQuit the application MainWindowRefaireRedo MainWindow0&Rendrer à du fichier...Render to &file... MainWindowEchelle Rescale View MainWindow&Echelle automatiqueRescale the editor MainWindowRecommencerReset MainWindow(Sauve&garder sous... Save &As... MainWindow(Sauvegarder un flame Save a flame MainWindow<Sauvegarder une image de flam3Save an image of current flame MainWindow*Sauvegarder le genomeSave the current genome MainWindow>Sauvegarder un fichier de flam3Save the flame to disk MainWindowfSauvegarder un fichier de flam3 sous un nouveau nomSave the flame under a new name MainWindow8Console d'édition de scripts Script Editor MainWindowBSélectionnez le triangle prochainSelect next triangle MainWindowFSélectionnez le triangle précédenteSelect previous triangle MainWindow$Outils de &EditionShow &Edit Toolbar MainWindow$Outils de &FichierShow &File Toolbar MainWindow$Outils de &WidgetsShow &Widgets Toolbar MainWindowNAfficher la trousse à outils de fichierShow the file toolbar MainWindowNAfficher la trousse à outils de widgetsShow the widgets toolbar MainWindow&Arrêtter de RendrerStop rendering MainWindow&Couleur de TriangleTriangle Color MainWindow.Coordonnées de TriangleTriangle Coordinates MainWindow.Densitées des TrianglesTriangle Densities MainWindow,Variations de TriangleTriangle Variations MainWindowTriangles Triangles MainWindowAnnulerUndo MainWindowVariations Variations MainWindowAffichageViewer MainWindowfichier.pngfile.png MainWindowDernier Refaire last redo MainWindowDernier Annuler last undo MainWindow&affichage inférieurpreview MainWindowaffichageviewer MainWindowtriangletriangleMotionViewFunctionItemEditordensitédensityMotionViewVarItemEditor l'hauter d'imageheight of the final imageMutationConfigDialogqualitéqualityMutationConfigDialog$dimensions d'imagesize of final imageMutationConfigDialoglarguer d'imagewidth of the final imageMutationConfigDialogMutation MutationsMutationWidgetNavigateurBrowse PaletteEditorEditionEdit PaletteEditorLFicher du gradient (*.cpt *.ggr *.ugr)"Gradient Files (*.cpt *.ggr *.ugr) PaletteEditorPalettesPalettes PaletteEditorremettrereset PaletteEditorrotationrotate PaletteEditorsauvegardesave PaletteEditorQualitéQuality RenderDialogRendrerRender an image RenderDialog8Sauvegarder une image de ...Save an image as ... RenderDialogDimensionsSize RenderDialogRendrer ... Rendering ...RenderProgressDialog&Visualiser l'image?View rendered image?RenderProgressDialognonoRenderProgressDialogterminerstopRenderProgressDialogouiyesRenderProgressDialog&rendrer de %1 en %2%1 rendered in %2 RenderStatus0rendrer de %1 en %2 deux%1 rendered in %2 seconds RenderStatus&rendrer de %1 finis%1 rendering stopped RenderStatus<rendrer %L1% ( %2 de surplus )"rendering... %L1% ( %2 remaining ) RenderStatus ouvriropenScriptEditWidgetcommencerrunScriptEditWidgetsauvegardesaveScriptEditWidget l'hauter d'imageheight of the final imageSelectGenomeConfigDialogqualitéqualitySelectGenomeConfigDialog$dimensions d'imagesize of final imageSelectGenomeConfigDialoglarguer d'imagewidth of the final imageSelectGenomeConfigDialog ErreurErrorSelectGenomeWidgetTriangles TrianglesSelectTriangleWidget&ajouter de triangleadd a triangleSelectTriangleWidgetdensitédensitySelectTriangleWidget finalefinalSelectTriangleWidgetDsupprimer de triangle sélectionnéeremove the selected triangleSelectTriangleWidgetajouteraddSheepLoopWidgetdensitédensitySheepLoopWidgetsupprimerremoveSheepLoopWidgetcommencerrunSheepLoopWidgetsauvegardesaveSheepLoopWidget,échantillons temporaletemporal samplesSheepLoopWidgettriangletriangleSheepLoopWidgetCoordonnéesTriangle CoordinatesTriangleCoordsWidgetDensité DensitiesTriangleDensityWidget&fusionnez le genomemerge this genomeTriangleDensityWidget ne pasnoneTriangleDensityWidget,sélectionner le genomeselect a genomeTriangleDensityWidgetVariations VariationsVariationsWidgetDAjouter les paramètres d'affichageAdd a new presetViewerPresetsWidgetZDonner un nom pour les paramètres d'affichageEnter a name for the presetViewerPresetsWidgetFRenommer les paramètres d'affichage Rename presetViewerPresetsWidget,Paramètres d'AffichageViewer PresetsViewerPresetsWidgetajouteraddViewerPresetsWidgetdéplacer en bas move downViewerPresetsWidget déplacer en hautmove upViewerPresetsWidgetsupprimerremoveViewerPresetsWidgetFmodifier les paramètres d'affichage update presetViewerPresetsWidgetˆqosmic-1.6.0/ts/qosmic_fr.ts000066400000000000000000004333731304321135200160000ustar00rootroot00000000000000 AdjustSceneWidget Adjust Scene Ajuster La Scène scale échelle Scene Settings grid grille set grid color guide set guide color background color set background color preview affichage inférieur density densité preview density depth preview iterations triangle labels grid color couleur de grille background arrière plan CameraSettingsWidget Camera Appareil size of final image dimensions d'image size dimensions width of the final image larguer d'image height of the final image l'hauter d'image a power for scale and quality zoom: zoom: pixels per unit vertically scale: échelle: camera origin origin d'appareil center: origin: x position position x y position position y rotate camera tourner l'appareil rotate rotation ChaosWidget Chaos ColorBalanceWidget Form brightness clarté contrast constraste gamma vibrancy hue teinte the maximum Value for an RGB color before trending the color towards white as the density increases. -1 = disabled, 0 = no highlights highlight disabled alpha alpha none ne pas opaque transparent improve the antialiasing of bright features early clip ColorDialog Select a color Choisissez du couleur Hue Teinte Red Rouge Sat Green Vert Val Blue Bleu Alpha Ok Ok Cancel Annuler ColorSettingsWidget Color Settings Paramètres des Couleurs transform color index l'index de couleur transform color couleur de transform image background color le couleur d'arrière plan background color couleur d'arrière plan per iteration scaling factor on the transform color speed 0=invisible, 1=totally visible opacity 2 or more means rotational 1 means identity, ie no symmetry 0 means pick a random symmetry (maybe none) -1 means bilateral (reflection) -2 or less means rotational and reflective 2 de plus pour la rotation 1 pour l'identité (ne symétrie) 0 pour la symétrie aléatoires -1 pour bilatéral (reflet) -2 de moin pour la rotation et reflet symmetry symétrie CoreApp Qosmic %1 Usage: qosmic [flam3 file] environment variables: log=%2 flam3_verbose=%3 flam3_nthreads=%4 Couldn't load file %1 DirectoryViewWidget Sort by Descending View Short View Detailed View Show Hidden Files Select a directory Form ... + - EditModeSelectorWidget EditModeSelector Move triangle Move Tringle Rotate triangle Scale triangle Flip triangle move left < move right > move up déplacer en haut move down déplacer en bas deg % + - flip horizontally horiz flip vertically vert axis: transform axis origin origin mark marquer circum box O O X X Y Y add a triangle ajouter de triangle ... remove the selected triangle supprimer de triangle sélectionnée reset the triangle final finale edit the post transform post select: selection type triangles triangles nodes nÅ“uds scene settings zoom visible rescale scene zoom center scene EditTriangleWidget center on centre origin origin triangle triangle X X mark marquer O O Y Y rotate rotation scale échelle move déplacez move down déplacer en bas move up déplacer en haut flip flipper Selection Sélecteur triangles triangles nodes nÅ“uds grid grille background arrière plan FigureEditor Edit Triangle Modifier de Triangle Add Triangle Ajouter de Triangle Duplicate Triangle Dupliquer de Triangle Remove Triangle Supprimer de Triangle Cut Tailler Copy Copier Paste Coller Add Ajouter Reset Position Remettre la Position Flip Horizontal Flipper Horizontale Flip Vertical Flipper Verticale Rescale View Echelle Triangles Triangles post transform: %1 transform post: %1 transform: %1 density: %L2 transform: %1 densité: %L2 final transform: %1 density: %L2 transform finale: %1 densité: %L2 Rescale Echelle automatique GenomeColorSelector ColorSelector Show Histogram GenomeVector selector %1 xforms time: %2 genome %1 Genome %1 GenomeVectorListModelItemEditor Form temporal position of this genome in the animation sequence time x GradientStopsEditor Edit Stops Modifier les Arrêtes Add Stop Ajouter un Arrêt Remove Stop Supprimer un Arrêt Change Color Modifier la Couleur ImageSettingsWidget Image Settings Paramètres d'Image Image Quality Qualité de l'image Image quality presets configure presets samples per pixel échantillons de pixel quality qualité spatial filter radius (variance of gaussian) rayon du filtre spatial filter filtre shape of the spatial filter forme du filtre spatial shape forme filter shape gaussian hermite box triangle triangle bell bspline mitchell blackman catrom hanning hamming lanczos3 lanczos2 quadratic spatial oversample oversample sample density iterations. number of times the buckets are filtered into the accumulator passes passer Conversions the genome symmetry group 2 or more means rotational 1 means identity, ie no symmetry 0 means pick a random symmetry (maybe none) -1 means bilateral (reflection) -2 or less means rotational and reflective < > temporal samples échantillons temporale density estimation parameters for blurring low density hits estimator estimation filter width for bin with one hit exponent on decay function estimator curve courbe d'estimation minimum filter width used. forces filter to be used of at least this width on all pts estimator min minimum d'estimation the genome symmetry group 1 = no symmetry, 0 = random symétrie de genome 1 = ne symétrie, 0 = aléatoire symmetry symétrie apply symmetry to the genome appliquer le symétrie à genome ... Lua number expected for variable Lua::Frame load requires one string argument save requires one string argument index out of range: Genome[%d] is null Lua::Genome index out of bounds: Genome[%d] index out of range: Genome.XForm[%d] is null genome has no xform at index %d index %d out of range no index %d in chaos array no index %d,%d in chaos array Lua::LuaEditor Open a file Ouvrir un fichier Ctrl+1 Save file Sauvegarder un fichier Ctrl+2 Save to file Sauvegarder sous Ctrl+3 Open a script Application error Erreur de Application Cannot read file %1 Erreur lecture le fichier %1 Save a script lua source (*.lua);;All files (*) Cannot write file %1 Ne peut pas écire le fichier %1 Lua::LuaThread error: %1 stopping$ script stopped ok stack has no thread ref must return a string to stopping Running ........ Lua::Lunar not a valid %s userdata %s missing method '%s' (error with no message) %s:%s status = %d %s %s missing metatable stopping Lua::XForm index out of bounds: Genome[%d].XForm[%d] couldn't build metatables for var.variables: %1 couldn't build metatables for var: %1 invalid variation index %d variation %s not found variables argument is not a valid table MainPreviewWidget presets paramètres genome quality Viewer Presets Paramètres d'Affichage Preview Affichage Inférieur MainViewer flame viewer affichage la flame viewer affichage fullscreen presets paramètres show status genome quality file close scale down scale up scale last scale reset save image Save an image Sauvegarder une image untitled.png genome %1 Viewer Presets Paramètres d'Affichage MainWindow Preview Affichage Inférieur Triangles Triangles Densities Densitées Viewer Affichage Image Image Camera Appareil Coordinates Coordonnées Edit Triangle Modifier de Triangle Colors Couleurs Viewer Presets Paramètres d'Affichage Color Balance Balancier de Couleur Variations Variations Browse Navigateur du Fichier Palettes Palettes Mutations Mutation Edit Script Édition de Script Genomes untitled.png About Qosmic A propos de Qosmic <p><b>Qosmic version %1</b></p><p>Copyright (C) 2007-2016 by David Bitseff<br><p>Use and redistribute under the terms of the<br><a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License Version 3</a></p><p>Thanks to:<br>- Scott Draves for the <a href="http://flam3.com/">flam3</a> library<br>- Erik Reckase for his work on the flam3 library<br>- Mark James for his <a href="http://www.famfamfam.com/lab/icons/silk/">Silk</a> icon set<br>- Mark Townsend for the <a href="www.apophysis.org">Apophysis</a> editor<br>- Pavel Fric for Czech Translations<br><p>This version uses: Qt Reset Recommencer Ctrl+N Ctrl+R Load default genome Ouvrir le genome par défaut &Open... &Ouvrir... Open an existing file Ouvrir un fichier de flam3 &Save &Sauvegarder Save the flame to disk Sauvegarder un fichier de flam3 Save &As... Sauve&garder sous... Save the flame under a new name Sauvegarder un fichier de flam3 sous un nouveau nom Render to &file... &Rendrer à du fichier... Save an image of current flame Sauvegarder une image de flam3 Q&uicksave flame... Q&uicksauvegarder flame... Quickly save file and image of current flame Sauvegarder un fichier et une image de flam3 rapidement &Quit &Quitter Quit the application Quitter l'application &Stop rendering Arrêtter de &Rendrer Couldn't save file %1 untitled.flam3 undo %1/%2 Save a sheep Ctrl+K Ctrl+A Stop rendering Arrêtter de Rendrer &Random Flame &Flame Aléatoire Ctrl+R Ctrl+F Generate a random xform set Créer un genome aléatoire Rescale Echelle automatique Ctrl+A Ctrl+E Rescale the editor Echelle automatique Select next triangle Sélectionnez le triangle prochain Select previous triangle Sélectionnez le triangle précédente Undo Annuler Redo Refaire Import genomes Importer des genomes Export current genome Exporter le genome actif Export the current genome Exporter le genome actif File Fichier Show &File Toolbar Outils de &Fichier Show the file toolbar Afficher la trousse à outils de fichier Widgets Adjust Scene Ajuster La Scène Error Erreur Cannot import file %1 Cannot write file to %1 Impossible d'enregistrer le fichier %1 {1?} Scale in the scene Scale out the scene Cut Tailler Copy Copier Paste Coller Show &Widgets Toolbar Outils de &Widgets Show the widgets toolbar Afficher la trousse à outils de widgets Edit Edition Show &Edit Toolbar Outils de &Edition Show the edit toolbar Afficher la trousse à outils de edition &About &A propos Show the application's About box About &Qt A propos de &Qt Show the Qt library's About box &File &Fichier &Edit &Edition &Widgets &Info Show scene editing toolbar Image Quality Qualité de l'image Previewer Affichage Inférieur Rescale View Echelle Triangle Editing Modifier de Triangle Triangle Variations Variations de Triangle Triangle Color Couleur de Triangle Color Settings Paramètres de Couleur Genome List Liste des Genomes Triangle Densities Densitées des Triangles Directory Browser Navigateur du Fichier Triangle Coordinates Coordonnées de Triangle Sheep Loop Script Editor Console d'édition de scripts Ready Ok File loaded Fichier est ouvert Application error Erreur d'Application Cannot write file %1 Impossible d'enregistrer le fichier %1 Couldn't open file %1 File saved Sauvegarder du fichier Cannot write file to %1 Impossible d'enregistrer le fichier %1 Cannot open file %1 Erreur lors de l'ouverture du fichier %1 Couldn't parse file %1 Imposssible du lecture le fichier %1 last undo Dernier Annuler redo %1/%2 last redo Dernier Refaire Open a flame Ouvrir un flame Save a flame Sauvegarder un flame Save an image Sauvegarder une image Import genomes from a file Importer des genomes Save the current genome Sauvegarder le genome preview affichage inférieur viewer affichage file.png fichier.png sheep Chaos Sheep Loops [%1/%2] : (%L3%4%L5) : mark (%L6%7%L8) flam3 xml (*.flam *.flam3 *.flame);;All files (*) Qosmic Add Triangle Ajouter de Triangle Move Triangles Rotate Triangles Scale Triangles Flip Triangles MotionViewFunctionItemEditor sin hill triangle triangle MotionViewVarItemEditor animate color color_speed density densité opacity var: par: xform: a xform: b xform: c xform: d xform: e xform: f post: a post: b post: c post: d post: e post: f MutationConfigDialog Configure size of final image dimensions d'image icon size width of the final image larguer d'image height of the final image l'hauter d'image xform coef displacement speed preview quality quality qualité MutationWidget clear selected supprimer la liste Mutations Mutation ... configure ? regenerate genome A genome B mutation %1 PaletteEditor Save gradient to a cpt file CPT Gradient Files (*.cpt) Error: Couldn't open file %1 Error: Couldn't write to file %1 Invalid path The directory path %1 couldn't be opened. Gradient Files (*.cpt *.ggr *.ugr) Ficher du gradient (*.cpt *.ggr *.ugr) The gradient path %1 doesn't exist. Palettes Palettes Edit Edition rotate rotation pad repeat reflect number of randomly generated stops, < 2 implies random number on [2,128] random gradient new reset remettre save sauvegarde Browse Navigateur ... Select a gradient file to load RenderDialog genome quality File already exists Do you want to overwrite %1? untitled.png Save an image as ... Sauvegarder une image de ... Render an image Rendrer Location ... Size Dimensions Quality Qualité RenderProgressDialog View rendered image? Visualiser l'image? Rendering ... Rendrer ... yes oui no no stop terminer RenderStatus hh:mm:ss mm:ss rendering... %1% ( %2 remaining ) rendrer %1% ( %2 de surplus ) s.z rendering... %L1% ( %2 remaining ) rendrer %L1% ( %2 de surplus ) %1 rendering stopped rendrer de %1 finis hh:mm:ss.z %1 rendered in %2 seconds rendrer de %1 en %2 deux %1 rendered in %2 rendrer de %1 en %2 RenderThread rendering... %1% ( %2 remaining ) rendrer %1% ( %2 de surplus ) %1 rendering stopped rendrer de %1 finis %1 rendered in %2 seconds rendrer de %1 en %2 deux %1 rendered in %2 rendrer de %1 en %2 ScriptEditConfigDialog Config ScriptEditor Fonts Lua Lua Search Paths ScriptEditWidget Form Open Save Save As save as Run run commencer Ctrl+Return open ouvrir config ... save sauvegarde stop terminer print('hello world.') Script input request row: %1, col: %2 running script... script stopped saved: %1 SelectGenomeConfigDialog Configure size of final image dimensions d'image icon size width of the final image larguer d'image height of the final image l'hauter d'image preview quality quality qualité autosave genomes autosave never on exit always SelectGenomeWidget Genome duplicate genome remove genome clear triangles configure ... Error Erreur Couldn't remove %1: %2 SelectTriangleWidget Triangles Triangles transform add a triangle ajouter de triangle ... enable the final transform probability that this function is chosen density densité remove the selected triangle supprimer de triangle sélectionnée set this transform as final Fixer de triangle finale final finale SheepLoopWidget SheepLoopWidget temporal position of this genome in the animation sequence genome first keyframe to last keyframe save sauvegarde ... run commencer Interpolation mode frames frames per loop loops rotation loops sequence - rotate animated xforms and interpolate adjacent genomes animate - time based interpolation of adjacent genomes sequence animate stagger fractional overlap of xform interpolation interpolation curve for this genome in the animation sequence interp curve how flames change over time linear smooth interpolation function for this genome in the animation sequence interp type interpolation of xform positions log compat older palette interp interpolation between colormaps hsv sweep palette mode interpolation between palette entries step Motion Blur number of time steps per batch. this many interpolated control points are used per batch and accumulated temporal samples échantillons temporale time samples used for motion blur Temporal Filter type motion blur kernel box gaussian exp width motion blur frames exponent direction and rate of exp motion blur Motion Elements transform animate this transform in the electricsheep loop add ajouter + remove supprimer - element value function frequency var: par: color color_speed density densité opacity xform: a xform: b xform: c xform: d xform: e xform: f post: a post: b post: c post: d post: e post: f sin hill triangle triangle var: linear StatusWidget status Some status text. .. . . . TriangleCoordsWidget Triangle Coordinates Coordonnées x y O: X: Y: rect deg rad a: d: b: e: c: f: TriangleDensityWidget Densities Densité 0 = ? select a genome sélectionner le genome none ne pas merge this genome fusionnez le genome * None density: %1 VariationsWidget Variations Variations apply value + VarsTableModel Variation Value ViewerPresetsModel Column %1 Row %1 very-low quality low quality med-low quality med quality med-high quality high quality ViewerPresetsWidget q%1/o%2/e%3 Add a new preset Ajouter les paramètres d'affichage Enter a name for the preset Donner un nom pour les paramètres d'affichage Rename preset Renommer les paramètres d'affichage Viewer Presets Paramètres d'Affichage add ajouter + remove supprimer - update preset modifier les paramètres d'affichage <> move up déplacer en haut move down déplacer en bas close qosmic-1.6.0/ts/qosmic_ru.qm000066400000000000000000001164251304321135200160020ustar00rootroot00000000000000<¸dÊÍ!¿`¡½ÝB¸% *…Ï++Ì+u0+‡¶+ŠŒ-¸-ø-uU-е0…ü<X<'“=†)>†>'¾?V½?†VOáXÜY x%ìx…{y…¥þŠÞ*ƒ'[#ºƒ½ʃèJ„Z„>j„iz„”Š„óš…Oc[0³¯g1á1$1'b1V‘1W¤1_ˆ1gÄ1oü1qä1uzG¤ÞJÄ KJÄ<\Oµ úS±g=X´IY„zY¾hŒ\|ýg¤víg¤Œ”ihÑih)æihwej·Dj·„¿oµ ±sW{ÒtÇ\âxt…Iy¾jy¾~WÃc哵 c¦y ¦y;K»=»XyÐ%>¡Ö ÖÖ$vÖh"f¾hU‹¯DŽ˜ÅhÆ¡aÇįNÓÐ%2Åèô8‹ÄE¥{ÿVE VE‡-f¾i~˜Å_P˜Åjª˜Å~¡àªÀR«`c°°5%ªÀe‚̔ܕHp(Q—O¨*»5*Ð%5Á+Ï5ï+Œ6`+˜Å6CÌ), FT0ØFTksH6á (IècâIèc:L™b=•L™bp,Me³gN‹¾ ÇP7Õ@^VŠ¥!‰VŠ¥CBXÉÄEèh6á Dhðj™j6•2“j6•ŒÏjǨÙm|zm|sˆm„1 Cn¿¥Foi ‚sÓ5t£eÒtÌÂmÓuZÃ<v*Â|ÿxÉÄ^áyœEzk´zk´Uf}û¨‚Hf ¤Ž ¥/G•$¥z.—” žù3 ÷ºçâvšÅ,*,éÆ~gòÓþSy£åVEåVESˆåVEmèvRJtë5ž{Š‚Ln¥OÕ>1 “7‰/Ê2Qa02Q¢2á¼ ÓB>’EKÿ4‹v@oªÜü!1ºŠÈK}ÓŽµ†Èøã|1! •:I3œ|™:àÂwÑHβ#Ínž‚}qO^3Âr±$4{pº-Z{pº9A~dõ’}å8’}år`“þ\]˜2 £Š"³§–Ä5R©Ò¥*®ñí~Fs÷¼yY¹:õÄ?æH)Õ _ú¨µeDc-oËO_²‹z2<ÈØç²&qæ…¿æ…tcdÕG‡JJe%„5q=`S%B§bkŇalw°îlw°UyOãaøy®ITNy®In[˜<º˜<8œ˜I¼ ‘™n•8i™n•WÏ›‰Éf¦6“:Þ«Žá-Ê«Žâ-ÿ«Žã.4ÁÄ ´Ä)`öφåWφåpûϦåSDϦåkÈÜV5pdâ!1°â!2ðâ!bKò•YŠ+ö¦DÓcp›j;í¨UuV¥ÓMyV¥ÓƒRnùädéq¾õHÝ~”ã~”ãI†£óCú‹C(õ˜«n`} å<Ž å†ƒÈkÕ´ÏÍÂO?Ñ@=Mܤí$÷=qX«Ïtn¥T¥mƒúéõ n0"fòI¯?2PøÂuð[Ž Å^-s&¿`¤%.ig ÉÌg ÉRõg É}4l¾6#pjBiµpÊCN7rgu§vž$1+ƒÙl„GòIPŠ>YÌ Š½¦L÷iG§ .§.UÄå$¸Ä倯l7WËü +¬Ð:Â*t؃Ãx¸ÜV5y Qä4N O[Â,yÒJ0K‚{˜EVÂf‘EúÃdwcàÓG#fˆµ ²hýþti¯3o}\”>Ì»4›‡Ð‚RŒFÅ~ŒFÅ Œk„^§ŒœÃ2ŒœÃ3;ŒÏ—1kŒÏ—CvŒÏ·‡ŒÏ·Q#–¨¥–¨¥_™‚Š¥¤f¨ª‹Ã‚ôÏÍÂ5ÏÍÂQãÓ}S4Õæ/ãFùVG!¿ùVGE ü@á& *'ÇåGÒ,¿£C ,¿£ZA]#Œ<HC`#P8ÅRgP8Åw$Y·¨JåYÍ täYÍ ‘‚¹(8‚¹@˜Þb˜¸0É+m¸0ÉT²¸0Énø0é`¾½+Ô^nÁOîaXÅYɈÂŦɉÊ™®*üÊ™®xìÖ§õªøK•,MøK•RøK•Ø ,?aY- 7íþjR Wú¥yT e®0s ‚pP4” ŠD[< ŒtÓi Œvójå ¶ØùX º   ÜB Ŭ:ß ÅõSvE ÓУ@ì äAå2= ý²d Îñ  ¥ Ю"" ,-â Z²ÉOÏ b ˆZE e¯&! gÖ/PÓ gù/P ˆ«uAA в“Bq в“Vã ŒÅÓ¹ ŒÅÓ:“ Å Ùš Å ÙR° Å Ùr¿ Å Ùw” ÎìC; Þä™ ô³Ò^ þZÅ CÄÜ …ˆ ørL #°ñ9­ ;(l  Eô9F `ѹ‰d …så …såU¤ …såo ¥hòT Õ±ÎsÀ çÏ2 CeT ¤… ¤…Tò ¤…o ÃMÚ -o' KuW[ v—¥.ÿ vâ¾ý vâ¾ w_´K †“? ‹Ã~Ê Ž)•7Ä šµ0 œ;Å{ ¶žElO ·ù• ·»k+ Çnj;‚ Ïv4^ ÏšBC´ Ó¡“'é RH" 9D¿ )}Õ +û=Å P$‹lþ¶QiŽ10AB@>9:8 AF5=KScene SettingsAdjustSceneWidget&25B D>=0background colorAdjustSceneWidget;>B=>ABLdensityAdjustSceneWidget;C18=0depthAdjustSceneWidget !5B:0gridAdjustSceneWidget C:>2>4AB2>guideAdjustSceneWidget@54?@>A<>B@previewAdjustSceneWidget,@54?@>A<>B@ ?;>B=>AB8preview densityAdjustSceneWidget*@54?@>A<>B@ 8B5@0F89preview iterationsAdjustSceneWidget(#AB0=>28BL F25B D>=0set background colorAdjustSceneWidget*#AB0=>28BL F25B A5B:8set grid colorAdjustSceneWidget6#AB0=>28BL F25B @C:>2>4AB20set guide colorAdjustSceneWidget 0<5@0CameraCameraSettingsWidget@>I=>ABL 4;O <0AHB010 8 :0G5AB20a power for scale and qualityCameraSettingsWidget.0G0;> :>>@48=0B :0<5@K camera originCameraSettingsWidget &5=B@:center:CameraSettingsWidget8KA>B0 :>=5G=>3> 87>1@065=8Oheight of the final imageCameraSettingsWidget:?8:A5;59 =0 25@B8:0;L=K9 1;>:pixels per unit verticallyCameraSettingsWidget@0I5=85rotateCameraSettingsWidget@0I5=85 :0<5@K rotate cameraCameraSettingsWidget (:0;0:scale:CameraSettingsWidget  07<5@sizeCameraSettingsWidget8 07<5@ :>=5G=>3> 87>1@065=8Osize of final imageCameraSettingsWidget8(8@8=0 :>=5G=>3> 87>1@065=8Owidth of the final imageCameraSettingsWidget>;>65=85 ?o X x positionCameraSettingsWidget>;>65=85 ?o Y y positionCameraSettingsWidget0AHB01:zoom:CameraSettingsWidget%0>AChaos ChaosWidget $>@<0FormColorBalanceWidget;LD0-:0=0;alphaColorBalanceWidget/@:>ABL brightnessColorBalanceWidget>=B@0ABcontrastColorBalanceWidgetB:;NG5=disabledColorBalanceWidget 0<<0gammaColorBalanceWidget;8: highlightColorBalanceWidget">=hueColorBalanceWidgetN#;CGH8BL A3;06820=85 O@:8E >A>15==>AB59+improve the antialiasing of bright featuresColorBalanceWidget5BnoneColorBalanceWidget5?@>7@0G=K9opaqueColorBalanceWidgetÿÿÿÿ‡the maximum Value for an RGB color before trending the color towards white as the density increases. -1 = disabled, 0 = no highlightsColorBalanceWidget@>7@0G=K9 transparentColorBalanceWidget82>ABLvibrancyColorBalanceWidget;LD0-:0=0;Alpha ColorDialog !8=89Blue ColorDialogB<5=8BLCancel ColorDialog5;5=K9Green ColorDialog">=Hue ColorDialogOk ColorDialog@0A=K9Red ColorDialog0AKI5==>ABLSat ColorDialogK15@8B5 F25BSelect a color ColorDialog=0G5=85Val ColorDialogB 0==5 284=>, 1=?>;=>ABLN =5 284=> 0=invisible, 1=totally visibleColorSettingsWidget0AB@>9:8 F25B0Color SettingsColorSettingsWidget$>=>2K9 F25Bbackground colorColorSettingsWidget0$>=>2K9 F25B 87>1@065=8Oimage background colorColorSettingsWidget5?@>7@0G=>ABLopacityColorSettingsWidget!:>@>ABLspeedColorSettingsWidget(@5>1@07>20BL F25Btransform colorColorSettingsWidget4@5>1@07>20BL 8=45:A F25B0transform color indexColorSettingsWidget85 C40;>AL 703@C78BL D09; %1Couldn't load file %1CoreAppÿÿÿÿ+DirectoryViewWidgetÿÿÿÿ-DirectoryViewWidget......DirectoryViewWidgetFormFormDirectoryViewWidget K15@8B5 :0B0;>3Select a directoryDirectoryViewWidgetÿÿÿÿ%EditModeSelectorWidgetÿÿÿÿ+EditModeSelectorWidgetÿÿÿÿ-EditModeSelectorWidget......EditModeSelectorWidget<<EditModeSelectorWidget>>EditModeSelectorWidget*>25@=CBL B@5C3>;L=8: Flip triangleEditModeSelectorWidget.5@5<5AB8BL B@5C3>;L=8: Move TringleEditModeSelectorWidget.5@5<5AB8BL B@5C3>;L=8: Move triangleEditModeSelectorWidgetOOEditModeSelectorWidget&@0I0BL B@5C3>;L=8:Rotate triangleEditModeSelectorWidget40AHB018@>20BL B@5C3>;L=8:Scale triangleEditModeSelectorWidgetXXEditModeSelectorWidgetYYEditModeSelectorWidget(>1028BL B@5C3>;L=8:add a triangleEditModeSelectorWidgetAL:axis:EditModeSelectorWidgetOI8:boxEditModeSelectorWidget 2>:@C3circumEditModeSelectorWidget3@04degEditModeSelectorWidget $8=0;finalEditModeSelectorWidget.B@078BL ?> 3>@87>=B0;8flip horizontallyEditModeSelectorWidget*B@078BL ?> 25@B8:0;8flip verticallyEditModeSelectorWidget3>@87>=B.horizEditModeSelectorWidget <5B:0markEditModeSelectorWidget!428=CBL 2=87 move downEditModeSelectorWidget!428=CBL 2;52> move leftEditModeSelectorWidget!428=CBL 2?@02> move rightEditModeSelectorWidget!428=CBL 225@Emove upEditModeSelectorWidgetC7;KnodesEditModeSelectorWidget=0G0;> :>>@4.originEditModeSelectorWidget<#40;8BL 2K45;5==K9 B@5C3>;L=8:remove the selected triangleEditModeSelectorWidget05@5<0AHB018@>20BL AF5=C rescale sceneEditModeSelectorWidget(!1@>A8BL B@5C3>;L=8:reset the triangleEditModeSelectorWidget AF5=0sceneEditModeSelectorWidget0AB@>9:8 AF5=Kscene settingsEditModeSelectorWidgetK1@0=>:select:EditModeSelectorWidget"8? 2K45;5=8Oselection typeEditModeSelectorWidget"@5>1@07>20BL >ALtransform axisEditModeSelectorWidget"@5C3>;L=8:8 trianglesEditModeSelectorWidget 25@B.vertEditModeSelectorWidget*&5=B@ <0AHB018@>20=8O zoom centerEditModeSelectorWidget2848<>ABL <0AHB018@>20=8O zoom visibleEditModeSelectorWidget>1028BLAdd FigureEditor>?8@>20BLCopy FigureEditorK@570BLCut FigureEditor&@02:0 B@5C3>;L=8:0 Edit Triangle FigureEditor.B@078BL ?> 3>@87>=B0;8Flip Horizontal FigureEditor*B@078BL ?> 25@B8:0;8 Flip Vertical FigureEditorAB028BLPaste FigureEditor65@5<0AHB018@>20BL ?@>A<>B@ Rescale View FigureEditor !1@>A8BL ?>78F8NReset Position FigureEditor"@5C3>;L=8:8 Triangles FigureEditorX$8=0;L=>5 ?@5>1@07>20=85: %1 ;>B=>ABL: %L2 !final transform: %1 density: %L2  FigureEditorD@5>1@07>20=85: %1 ;>B=>ABL: %L2 transform: %1 density: %L2  FigureEditorK1>@ F25B0 ColorSelectorGenomeColorSelector(>:070BL 38AB>3@0<<CShow HistogramGenomeColorSelector $>@<0FormGenomeVectorListModelItemEditor„@5<5==>5 ?>;>65=85 MB>3> 35=><0 2 0=8<0F8>==>9 ?>A;54>20B5;L=>AB8:temporal position of this genome in the animation sequenceGenomeVectorListModelItemEditor @5<OtimeGenomeVectorListModelItemEditorÿÿÿÿxGenomeVectorListModelItemEditor >1028BL >AB0=>2Add StopGradientStopsEditor7<5=8BL F25B Change ColorGradientStopsEditor @028BL >AB0=>2K Edit StopsGradientStopsEditor#40;8BL >AB0=>2 Remove StopGradientStopsEditor......ImageSettingsWidget<<ImageSettingsWidget>>ImageSettingsWidget@5>1@07>20=8O ConversionsImageSettingsWidget(0G5AB2> 87>1@065=8O Image QualityImageSettingsWidget*0AB@>9:8 87>1@065=8OImage SettingsImageSettingsWidget8@>D8;8 :0G5AB20 87>1@065=8OImage quality presetsImageSettingsWidget8@8<5=8BL A8<<5B@8N : 35=><Capply symmetry to the genomeImageSettingsWidget/I8:boxImageSettingsWidget"0AB@>8BL ?@>D8;8configure presetsImageSettingsWidget $8;LB@filterImageSettingsWidget$>@<0 D8;LB@0 filter shapeImageSettingsWidget0CAgaussianImageSettingsWidget -@<8BhermiteImageSettingsWidget0G5AB2>qualityImageSettingsWidget&>1@07F>2 =0 ?8:A5;Lsamples per pixelImageSettingsWidget!8<<5B@8OsymmetryImageSettingsWidgetB@5C3>;L=8:triangleImageSettingsWidget"H81:0 ?@8;>65=8OApplication errorLua::LuaEditor:5 C40;>AL ?@>G8B0BL D09; %1 Cannot read file %1 Lua::LuaEditor85 C40;>AL 70?8A0BL D09; %1 Cannot write file %1 Lua::LuaEditor Ctrl+1Ctrl+1Lua::LuaEditor Ctrl+2Ctrl+2Lua::LuaEditor Ctrl+3Ctrl+3Lua::LuaEditorB:@KBL D09; Open a fileLua::LuaEditor !>E@0=8BL A:@8?B Save a scriptLua::LuaEditor!>E@0=8BL D09; Save fileLua::LuaEditor !>E@0=8BL 2 D09; Save to fileLua::LuaEditorHAE>4=8:8 lua (*.lua);;A5 D09;K (*)!lua source (*.lua);;All files (*)Lua::LuaEditor0?CA: ........Running ........Lua::LuaThreadH81:0: %1 error: %1Lua::LuaThreadÿÿÿÿokLua::LuaThread"!:@8?B >AB0=>2;5=script stoppedLua::LuaThread>AB0=>2:0$ stopping$Lua::LuaThread@54?@>A<>B@PreviewMainPreviewWidget0G5AB2> 35=><0genome qualityMainPreviewWidget@>D8;8presetsMainPreviewWidget*!>E@0=8BL 87>1@065=85 Save an image MainViewer0:@KBLclose MainViewer$09;file MainViewer0G5AB2> 35=><0genome quality MainViewer@>D8;8presets MainViewer*!>E@0=8BL 87>1@065=85 save image MainViewer?CAB8BL H:0;C scale down MainViewer>A;54=OO H:0;0 scale last MainViewer!1@>A8BL H:0;C scale reset MainViewer>4=OBL H:0;Cscale up MainViewer>:070BL AB0BCA show status MainViewer@>A<>B@viewer MainViewer& ?@>3@0<<5&About MainWindow&@02:0&Edit MainWindow &$09;&File MainWindow&!?@02:0&Info MainWindow&B:@KBL...&Open... MainWindow &KE>4&Quit MainWindow&!>E@0=8BL&Save MainWindow*&AB0=>28BL @5=45@8=3&Stop rendering MainWindow&8465BK&Widgets MainWindow  &Qt About &Qt MainWindow Qosmic About Qosmic MainWindow(>1028BL B@5C3>;L=8: Add Triangle MainWindow"H81:0 ?@8;>65=8OApplication error MainWindow@0C75@Browse MainWindow 0<5@0Camera MainWindow@5 C40;>AL 8<?>@B8@>20BL D09; %1Cannot import file %1 MainWindow85 C40;>AL 70?8A0BL D09; %1 Cannot write file %1  MainWindow:5 C40;>AL 70?8A0BL D09; 2 %1Cannot write file to %1 MainWindow%0>AChaos MainWindow&25B>2>9 10;0=A Color Balance MainWindow0AB@>9:8 F25B0Color Settings MainWindow &25B0Colors MainWindow>>@48=0BK Coordinates MainWindow>?8@>20BLCopy MainWindow65 C40;>AL >B:@KBL D09; %1 Couldn't open file %1  MainWindow:5 C40;>AL A>E@0=8BL D09; %1 Couldn't save file %1  MainWindowK@570BLCut MainWindow;>B=>AB8 Densities MainWindow&@>A<>B@ 48@5:B>@88Directory Browser MainWindow @02:0Edit MainWindow@02:0 AF5=0@8O Edit Script MainWindow H81:0Error MainWindow8-:A?>@B8@>20BL B5:CI89 35=><Export current genome MainWindow8-:A?>@B8@>20BL B5:CI89 35=><Export the current genome MainWindow$09;File MainWindow$09; A>E@0=5= File saved MainWindow,>25@=CBL B@5C3>;L=8:8Flip Triangles MainWindowD5=5@8@>20BL A;CG09=K9 =01>@ xformGenerate a random xform set MainWindow!?8A>: 35=><>2 Genome List MainWindow 5=><KGenomes MainWindow7>1@065=85Image MainWindow(0G5AB2> 87>1@065=8O Image Quality MainWindow(<?>@B8@>20BL 35=><KImport genomes MainWindow:<?>@B8@>20BL 35=><K 87 D09;0Import genomes from a file MainWindow.03@C78BL B8?>2>9 35=><Load default genome MainWindow05@5<5AB8BL B@5C3>;L=8:8Move Triangles MainWindowCB0F88 Mutations MainWindow2B:@KBL ACI5AB2CNI89 D09;Open an existing file MainWindow0;8B@KPalettes MainWindowAB028BLPaste MainWindow@54?@>A<>B@Preview MainWindow@54?@>A<>B@I8: Previewer MainWindowÿÿÿÿQosmic MainWindow<025@H8BL @01>BC A ?@8;>65=85<Quit the application MainWindow5@=CBLRedo MainWindow0&87C0;87>20BL 2 D09;...Render to &file... MainWindow65@5<0AHB018@>20BL ?@>A<>B@ Rescale View MainWindow65@5<0AHB018@>20BL @540:B>@Rescale the editor MainWindow!1@>A8BLReset MainWindow(@0I0BL B@5C3>;L=8:8Rotate Triangles MainWindow"!>E@0=8BL &:0:... Save &As... MainWindow.!>E@0=8BL B5:CI89 35=><Save the current genome MainWindow60AHB018@>20BL B@5C3>;L=8:8Scale Triangles MainWindow(:0;0 2 AF5=5Scale in the scene MainWindow(:0;0 70 AF5=>9Scale out the scene MainWindow" 540:B>@ AF5=0@8O Script Editor MainWindow:K1@0BL A;54CNI89 B@5C3>;L=8:Select next triangle MainWindow<K1@0BL ?@54K4CI89 B@5C3>;L=8:Select previous triangle MainWindow.>:070BL ?0=5;L &?@02:8Show &Edit Toolbar MainWindow.>:070BL ?0=5;L &D09;>2Show &File Toolbar MainWindow2>:070BL ?0=5;L &28465B>2Show &Widgets Toolbar MainWindow8>:070BL ?0=5;L ?@02:8 AF5=KShow scene editing toolbar MainWindowZ>:070BL 480;>3 A 8=D>@<0F859 > 181;8>B5:5 QtShow the Qt library's About box MainWindowR>:070BL 480;>3 A 8=D>@<0F859 > ?@>3@0<<5 Show the application's About box MainWindow,>:070BL ?0=5;L D09;>2Show the file toolbar MainWindow0>:070BL ?0=5;L 28465B>2Show the widgets toolbar MainWindow(AB0=>28BL @5=45@8=3Stop rendering MainWindow"&25B B@5C3>;L=8:0Triangle Color MainWindow.>>@48=0BK B@5C3>;L=8:0Triangle Coordinates MainWindow,;>B=>ABL B@5C3>;L=8:0Triangle Densities MainWindow*0@80F88 B@5C3>;L=8:0Triangle Variations MainWindow"@5C3>;L=8:8 Triangles MainWindowB<5=8BLUndo MainWindow0@80F88 Variations MainWindow@>A<>B@Viewer MainWindow8465BKWidgets MainWindowÿÿÿÿfile.png MainWindowbflam3 xml (*.flam *.flam3 *.flame);;A5 D09;K (*)1flam3 xml (*.flam *.flam3 *.flame);;All files (*) MainWindow*>A;54=55 ?>2B>@5==>5 last redo MainWindow(>A;54=55 >B<5=5==>5 last undo MainWindow@54?@>A<>B@preview MainWindow>2B>@ %1/%2 redo %1/%2 MainWindowB<5=0 %1/%2 undo %1/%2 MainWindow@>A<>B@viewer MainWindowB@5C3>;L=8:triangleMotionViewFunctionItemEditor=8<8@>20BLanimateMotionViewVarItemEditor;>B=>ABLdensityMotionViewVarItemEditor5?@>7@0G=>ABLopacityMotionViewVarItemEditor0AB@>8BL ConfigureMutationConfigDialog8KA>B0 :>=5G=>3> 87>1@065=8Oheight of the final imageMutationConfigDialog 07<5@ 8:>=:8 icon sizeMutationConfigDialog,0G5AB2> ?@54?@>A<>B@0preview qualityMutationConfigDialog0G5AB2>qualityMutationConfigDialog8 07<5@ :>=5G=>3> 87>1@065=8Osize of final imageMutationConfigDialog!:>@>ABLspeedMutationConfigDialog8(8@8=0 :>=5G=>3> 87>1@065=8Owidth of the final imageMutationConfigDialog4>MDD8F85=B A<5I5=8O xformxform coef displacementMutationConfigDialog......MutationWidget??MutationWidgetCB0F88 MutationsMutationWidget0AB@>8BL configureMutationWidget 535=5@8@>20BL regenerateMutationWidget...... PaletteEditor@0C75@Browse PaletteEditor8$09;K 3@0485=B>2 CPT (*.cpt)CPT Gradient Files (*.cpt) PaletteEditor @02:0Edit PaletteEditorDH81:0: 5 C40;>AL >B:@KBL D09; %1Error: Couldn't open file %1 PaletteEditorJH81:0: 5 C40;>AL 70?8A0BL D09; 2 %1 Error: Couldn't write to file %1 PaletteEditorH$09;K 3@0485=B>2 (*.cpt *.ggr *.ugr)"Gradient Files (*.cpt *.ggr *.ugr) PaletteEditor525@=K9 ?CBL Invalid path PaletteEditor0;8B@KPalettes PaletteEditor:!>E@0=8BL 3@0485=B 2 cpt D09;Save gradient to a cpt file PaletteEditorFK1@0BL D09; 3@0485=B0 4;O 703@C7:8Select a gradient file to load PaletteEditorPCBL 48@5:B>@88 %1 =5 <>65B 1KBL >B:@KB.)The directory path %1 couldn't be opened. PaletteEditor@CBL 3@0485=B0 %1 =5 ACI5AB2C5B.#The gradient path %1 doesn't exist. PaletteEditor >2K9new PaletteEditorž'8A;> A;CG09=> A35=5@8@>20==KE >AB0=>2>:, < 2 2;5G5B A;CG09=>5 G8A;> 87 [2,128]Hnumber of randomly generated stops, < 2 implies random number on [2,128] PaletteEditor$!;CG09=K9 3@0485=Brandom gradient PaletteEditorB@078BLreflect PaletteEditor>2B>@8BLrepeat PaletteEditor!1@>A8BLreset PaletteEditor@0I5=85rotate PaletteEditor!>E@0=8BLsave PaletteEditor...... RenderDialog4K E>B8B5 ?5@570?8A0BL %1?Do you want to overwrite %1? RenderDialog&$09; C65 ACI5AB2C5BFile already exists RenderDialog 0A?>;>65=85Location RenderDialog0G5AB2>Quality RenderDialog287C0;87>20BL 87>1@065=85Render an image RenderDialog:!>E@0=8BL 87>1@065=85 :0: ...Save an image as ... RenderDialog  07<5@Size RenderDialog""5:CI85 =0AB@>9:8current settings RenderDialog0G5AB2> 35=><0genome quality RenderDialog 87C0;870F8O ... Rendering ...RenderProgressDialogT@>A<>B@5BL 287C0;878@>20==>5 87>1@065=85?View rendered image?RenderProgressDialog5BnoRenderProgressDialog!B>?stopRenderProgressDialog0yesRenderProgressDialog0%1 287C0;878@>20=> 70 %2%1 rendered in %2 RenderStatus8%1 287C0;878@>20=> 70 %2 A5:%1 rendered in %2 seconds RenderStatus6%1 287C0;870F8O >AB0=>2;5=0%1 rendering stopped RenderStatusG:<8=:A5:hh:mm:ss RenderStatusG:<8=:A5:.<A hh:mm:ss.z RenderStatus<8=:A5:mm:ss RenderStatusH87C0;870F8O... %L1% ( %2 >AB0;>AL )"rendering... %L1% ( %2 remaining ) RenderStatus2>=D83 @540:B>@0 AF5=0@8OConfig ScriptEditorScriptEditConfigDialog (@8DBKFontsScriptEditConfigDialogÿÿÿÿLuaScriptEditConfigDialog>B8 ?>8A:0 LuaLua Search PathsScriptEditConfigDialog......ScriptEditWidgetÿÿÿÿ Ctrl+ReturnScriptEditWidget $>@<0FormScriptEditWidgetB:@KBLOpenScriptEditWidget0?CAB8BLRunScriptEditWidget!>E@0=8BLSaveScriptEditWidget!>E@0=8BL :0:Save AsScriptEditWidget >=D83configScriptEditWidgetB:@KBLopenScriptEditWidget.AB@>:0: %1, AB>;15F: %2row: %1, col: %2ScriptEditWidget0?CAB8BLrunScriptEditWidget"0?CA: A:@8?B0...running script...ScriptEditWidget!>E@0=8BLsaveScriptEditWidget!>E@0=8BL :0:save asScriptEditWidget!>E@0=5=>: %1 saved: %1ScriptEditWidget"!:@8?B >AB0=>2;5=script stoppedScriptEditWidget0AB@>8BL ConfigureSelectGenomeConfigDialog A5340alwaysSelectGenomeConfigDialog2B>A>E@0=5=85autosaveSelectGenomeConfigDialog(2B>A>E@0=OBL 35=><Kautosave genomesSelectGenomeConfigDialog8KA>B0 :>=5G=>3> 87>1@065=8Oheight of the final imageSelectGenomeConfigDialog 07<5@ 8:>=:8 icon sizeSelectGenomeConfigDialog8:>340neverSelectGenomeConfigDialog@8 2KE>45on exitSelectGenomeConfigDialog,0G5AB2> ?@54?@>A<>B@0preview qualitySelectGenomeConfigDialog0G5AB2>qualitySelectGenomeConfigDialog8 07<5@ :>=5G=>3> 87>1@065=8Osize of final imageSelectGenomeConfigDialog8(8@8=0 :>=5G=>3> 87>1@065=8Owidth of the final imageSelectGenomeConfigDialog......SelectGenomeWidget H81:0ErrorSelectGenomeWidget 5=><GenomeSelectGenomeWidget*G8AB8BL B@5C3>;L=8:8clear trianglesSelectGenomeWidget0AB@>8BL configureSelectGenomeWidget"C1;8@>20BL 35=><duplicate genomeSelectGenomeWidget#40;8BL 35=>< remove genomeSelectGenomeWidget......SelectTriangleWidget"@5C3>;L=8:8 TrianglesSelectTriangleWidget(>1028BL B@5C3>;L=8:add a triangleSelectTriangleWidget;>B=>ABLdensitySelectTriangleWidgetD 07@5H8BL D8=0;L=>5 ?@5>1@07>20=85enable the final transformSelectTriangleWidget $8=0;finalSelectTriangleWidgetR5@>OB=>ABL B>3>, GB> MB0 DC=:F8O 2K1@0=0(probability that this function is chosenSelectTriangleWidget<#40;8BL 2K45;5==K9 B@5C3>;L=8:remove the selected triangleSelectTriangleWidget@5>1@07>20BL transformSelectTriangleWidgetÿÿÿÿ+SheepLoopWidgetÿÿÿÿ-SheepLoopWidget......SheepLoopWidget=B5@?>;OF8O InterpolationSheepLoopWidget& 07<KB85 2 42865=88 Motion BlurSheepLoopWidget"-;5<5=BK 42865=8OMotion ElementsSheepLoopWidget @5<5==K9 D8;LB@Temporal FilterSheepLoopWidget>1028BLaddSheepLoopWidget=8<8@>20BLanimateSheepLoopWidget/I8:boxSheepLoopWidget;>B=>ABLdensitySheepLoopWidget^0?@02;5=85 8 B5<? M:A?>=5=BK @07<KB8O 42865=8O%direction and rate of exp motion blurSheepLoopWidgetM:A?>=5=B0exponentSheepLoopWidget 04@KframesSheepLoopWidget0CAgaussianSheepLoopWidget 35=><genomeSheepLoopWidget "8? 8=B5@?>;OF88 interp typeSheepLoopWidgetH=B5@?>;OF8O <564C F25B>2K<8 :0@B0<8interpolation between colormapsSheepLoopWidgetŽ$C=:F8O 8=B5@?>;OF88 4;O MB>3> 35=><0 2 0=8<0F8>==>9 ?>A;54>20B5;L=>AB8@interpolation function for this genome in the animation sequenceSheepLoopWidget4=B5@?>;OF8O ?>78F89 xform interpolation of xform positionsSheepLoopWidget;8=59=K9linearSheepLoopWidget;>3logSheepLoopWidget  568<modeSheepLoopWidget204@K @07<KB8O 2 42865=88motion blur framesSheepLoopWidget0/4@> @07<KB8O 2 42865=88motion blur kernelSheepLoopWidget AB0@55olderSheepLoopWidget5?@>7@0G=>ABLopacitySheepLoopWidget(=B5@?>;OF8O ?0;8B@Kpalette interpSheepLoopWidget 568< ?0;8B@K palette modeSheepLoopWidget#40;8BLremoveSheepLoopWidget0?CAB8BLrunSheepLoopWidget!>E@0=8BLsaveSheepLoopWidget$>A;54>20B5;L=>ABLsequenceSheepLoopWidget3;04:89smoothSheepLoopWidget(03stepSheepLoopWidget„@5<5==>5 ?>;>65=85 MB>3> 35=><0 2 0=8<0F8>==>9 ?>A;54>20B5;L=>AB8:temporal position of this genome in the animation sequenceSheepLoopWidget"@5<5==K5 >1@07FKtemporal samplesSheepLoopWidgetj1@07FK 2@5<5=8, 8A?>;L7C5<K5 4;O @07<KB8O 2 42865=88!time samples used for motion blurSheepLoopWidget4>toSheepLoopWidget@5>1@07>20BL transformSheepLoopWidgetB@5C3>;L=8:triangleSheepLoopWidget"8?typeSheepLoopWidget (8@8=0widthSheepLoopWidget<'0ABL B5:AB0 AB0BCA0. .. . . .Some status text. .. . . . StatusWidget !B0BCAstatus StatusWidgetÿÿÿÿO:TriangleCoordsWidget.>>@48=0BK B@5C3>;L=8:0Triangle CoordinatesTriangleCoordsWidgetÿÿÿÿX:TriangleCoordsWidgetÿÿÿÿY:TriangleCoordsWidgetÿÿÿÿa:TriangleCoordsWidgetÿÿÿÿb:TriangleCoordsWidgetÿÿÿÿc:TriangleCoordsWidgetÿÿÿÿd:TriangleCoordsWidget3@04degTriangleCoordsWidgetÿÿÿÿe:TriangleCoordsWidgetÿÿÿÿf:TriangleCoordsWidget@04radTriangleCoordsWidgetÿÿÿÿxTriangleCoordsWidgetÿÿÿÿyTriangleCoordsWidget**TriangleDensityWidget00TriangleDensityWidget==TriangleDensityWidget??TriangleDensityWidget;>B=>AB8 DensitiesTriangleDensityWidget*1J548=8BL MB>B 35=><merge this genomeTriangleDensityWidget5BnoneTriangleDensityWidgetK15@8B5 35=><select a genomeTriangleDensityWidgetÿÿÿÿ+VariationsWidget0@80F88 VariationsVariationsWidget$@8<5=8BL 7=0G5=85 apply valueVariationsWidget KA>:>5 :0G5AB2> high qualityViewerPresetsModel87:>5 :0G5AB2> low qualityViewerPresetsModel !@54=55 :0G5AB2> med qualityViewerPresetsModel.!@54=5-2KA>:>5 :0G5AB2>med-high qualityViewerPresetsModel,!@54=5-=87:>5 :0G5AB2>med-low qualityViewerPresetsModel*G5=L =87:>5 :0G5AB2>very-low qualityViewerPresetsModelÿÿÿÿ+ViewerPresetsWidgetÿÿÿÿ-ViewerPresetsWidgetÿÿÿÿ<>ViewerPresetsWidget,>1028BL =>2K9 ?@>D8;LAdd a new presetViewerPresetsWidget.2548B5 8<O 4;O ?@>D8;OEnter a name for the presetViewerPresetsWidget*5@58<5=>20BL ?@>D8;L Rename presetViewerPresetsWidget"@>D8;8 ?@>A<>B@0Viewer PresetsViewerPresetsWidget>1028BLaddViewerPresetsWidget0:@KBLcloseViewerPresetsWidget!428=CBL 2=87 move downViewerPresetsWidget!428=CBL 225@Emove upViewerPresetsWidget#40;8BLremoveViewerPresetsWidget 1=>28BL ?@>D8;L update presetViewerPresetsWidgetˆ ý) ÿý, qosmic-1.6.0/ts/qosmic_ru.ts000066400000000000000000004157651304321135200160240ustar00rootroot00000000000000 AdjustSceneWidget Scene Settings ÐаÑтройки Ñцены grid Сетка set grid color УÑтановить цвет Ñетки guide РуководÑтво set guide color УÑтановить цвет руководÑтва background color Цвет фона set background color УÑтановить цвет фона preview ПредпроÑмотр density ПлотноÑть preview density ПредпроÑмотр плотноÑти depth Глубина preview iterations ПредпроÑмотр итераций triangle labels CameraSettingsWidget Camera Камера size of final image Размер конечного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ size Размер width of the final image Ширина конечного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ height of the final image Ð’Ñ‹Ñота конечного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ a power for scale and quality МощноÑть Ð´Ð»Ñ Ð¼Ð°Ñштаба и качеÑтва zoom: МаÑштаб: pixels per unit vertically пикÑелей на вертикальный блок scale: Шкала: camera origin Ðачало координат камеры center: Центр: x position Положение пo X y position Положение пo Y rotate camera Вращение камеры rotate Вращение ChaosWidget Chaos Ð¥Ð°Ð¾Ñ ColorBalanceWidget Form Форма brightness ЯркоÑть contrast КонтраÑÑ‚ gamma Гамма vibrancy ЖивоÑть hue Тон the maximum Value for an RGB color before trending the color towards white as the density increases. -1 = disabled, 0 = no highlights highlight Блик disabled Отключен alpha Ðльфа-канал none Ðет opaque Ðепрозрачный transparent Прозрачный improve the antialiasing of bright features Улучшить Ñглаживание Ñрких оÑобенноÑтей early clip ColorDialog Select a color Выберите цвет Hue Тон Red КраÑный Sat ÐаÑыщенноÑть Green Зеленый Val Значение Blue Синий Alpha Ðльфа-канал Ok ОК Cancel Отменить ColorSettingsWidget Color Settings ÐаÑтройки цвета transform color index Преобразовать Ð¸Ð½Ð´ÐµÐºÑ Ñ†Ð²ÐµÑ‚Ð° transform color Преобразовать цвет image background color Фоновый цвет Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ background color Фоновый цвет per iteration scaling factor on the transform color speed СкороÑть 0=invisible, 1=totally visible 0=не видно, 1=полноÑтью не видно opacity ÐепрозрачноÑть CoreApp Qosmic %1 Usage: qosmic [flam3 file] environment variables: log=%2 flam3_verbose=%3 flam3_nthreads=%4 flam3_palettes=%5 Qosmic %1 ИÑпользование: qosmic [flam3 файл] переменные окружениÑ: log=%2 flam3_verbose=%3 flam3_nthreads=%4 flam3_palettes=%5 Qosmic %1 Usage: qosmic [flam3 file] environment variables: log=%2 flam3_verbose=%3 flam3_nthreads=%4 Couldn't load file %1 Ðе удалоÑÑŒ загрузить файл %1 DirectoryViewWidget Sort by Descending View Short View Detailed View Show Hidden Files Select a directory Выберите каталог Form Form ... ... + - EditModeSelectorWidget EditModeSelector Move triangle ПеремеÑтить треугольник Move Tringle ПеремеÑтить треугольник Rotate triangle Вращать треугольник Scale triangle МаÑштабировать треугольник Flip triangle Повернуть треугольник move left Сдвинуть влево < < move right Сдвинуть вправо > > move up Сдвинуть вверх move down Сдвинуть вниз deg град % + - flip horizontally Отразить по горизонтали horiz горизонт. flip vertically Отразить по вертикали vert верт. axis: ОÑÑŒ: transform axis Преобразовать оÑÑŒ origin начало коорд. mark метка circum вокруг box Ñщик O O X X Y Y add a triangle Добавить треугольник ... ... remove the selected triangle Удалить выделенный треугольник reset the triangle СброÑить треугольник final Финал edit the post transform post select: Выбрано: selection type Тип Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ triangles Треугольники nodes узлы scene settings ÐаÑтройки Ñцены zoom visible ВидимоÑть маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ rescale scene ПеремаÑштабировать Ñцену zoom center Центр маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ scene Ñцена FigureEditor Edit Triangle Правка треугольника Cut Вырезать Copy Копировать Paste Ð’Ñтавить Add Добавить Reset Position СброÑить позицию Flip Horizontal Отразить по горизонтали Flip Vertical Отразить по вертикали Rescale View ПеремаÑштабировать проÑмотр Triangles Треугольники post transform: %1 transform: %1 density: %L2 Преобразование: %1 ПлотноÑть: %L2 final transform: %1 density: %L2 Финальное преобразование: %1 ПлотноÑть: %L2 GenomeColorSelector ColorSelector Выбор цвета Show Histogram Показать гиÑтограмму GenomeVector selector %1 xforms time: %2 genome %1 Genome %1 GenomeVectorListModelItemEditor Form Форма temporal position of this genome in the animation sequence Временное положение Ñтого генома в анимационной поÑледовательноÑти time Ð’Ñ€ÐµÐ¼Ñ x GradientStopsEditor Edit Stops Править оÑтановы Add Stop Добавить оÑтанов Remove Stop Удалить оÑтанов Change Color Изменить цвет ImageSettingsWidget Image Settings ÐаÑтройки Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Image Quality КачеÑтво Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Image quality presets Профили качеÑтва Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ configure presets ÐаÑтроить профили samples per pixel образцов на пикÑель quality КачеÑтво spatial filter radius (variance of gaussian) filter Фильтр shape of the spatial filter filter shape Форма фильтра gaussian Ð“Ð°ÑƒÑ hermite Эрмит box Ящик triangle треугольник bell bspline mitchell blackman catrom hanning hamming lanczos3 lanczos2 quadratic spatial oversample oversample sample density iterations. number of times the buckets are filtered into the accumulator passes Conversions ÐŸÑ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ the genome symmetry group 2 or more means rotational 1 means identity, ie no symmetry 0 means pick a random symmetry (maybe none) -1 means bilateral (reflection) -2 or less means rotational and reflective < < > > density estimation parameters for blurring low density hits estimator filter width for bin with one hit exponent on decay function estimator curve minimum filter width used. forces filter to be used of at least this width on all pts estimator min symmetry Ð¡Ð¸Ð¼Ð¼ÐµÑ‚Ñ€Ð¸Ñ apply symmetry to the genome Применить Ñимметрию к геному ... ... Lua number expected for variable Lua::Frame load requires one string argument save requires one string argument index out of range: Genome[%d] is null Lua::Genome index out of bounds: Genome[%d] index out of range: Genome.XForm[%d] is null genome has no xform at index %d index %d out of range no index %d in chaos array no index %d,%d in chaos array Lua::LuaEditor Open a file Открыть файл Ctrl+1 Ctrl+1 Save file Сохранить файл Ctrl+2 Ctrl+2 Save to file Сохранить в файл Ctrl+3 Ctrl+3 Open a script Application error Ошибка Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Cannot read file %1 Ðе удалоÑÑŒ прочитать файл %1 Save a script Сохранить Ñкрипт lua source (*.lua);;All files (*) ИÑходники lua (*.lua);;Ð’Ñе файлы (*) Cannot write file %1 Ðе удалоÑÑŒ запиÑать файл %1 Lua::LuaThread error: %1 Ошибка: %1 stopping$ оÑтановка$ script stopped Скрипт оÑтановлен ok stack has no thread ref must return a string to stopping Running ........ ЗапуÑк ........ Lua::Lunar not a valid %s userdata %s missing method '%s' (error with no message) %s:%s status = %d %s %s missing metatable stopping Lua::XForm index out of bounds: Genome[%d].XForm[%d] couldn't build metatables for var.variables: %1 couldn't build metatables for var: %1 invalid variation index %d variation %s not found variables argument is not a valid table MainPreviewWidget presets Профили genome quality КачеÑтво генома Preview ПредпроÑмотр MainViewer viewer ПроÑмотр fullscreen presets Профили show status Показать ÑÑ‚Ð°Ñ‚ÑƒÑ genome quality КачеÑтво генома file Файл close Закрыть scale down ОпуÑтить шкалу scale up ПоднÑть шкалу scale last ПоÑледнÑÑ ÑˆÐºÐ°Ð»Ð° scale reset СброÑить шкалу save image Сохранить изображение Save an image Сохранить изображение untitled.png genome %1 flame viewer MainWindow preview ПредпроÑмотр viewer ПроÑмотр file.png Preview ПредпроÑмотр Triangles Треугольники Densities ПлотноÑти Viewer ПроÑмотр Image Изображение Camera Камера Coordinates Координаты Colors Цвета Color Balance Цветовой Ð±Ð°Ð»Ð°Ð½Ñ Variations Вариации Browse Браузер Palettes Палитры Mutations Мутации Edit Script Правка ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Genomes Геномы sheep Chaos Ð¥Ð°Ð¾Ñ Sheep Loops [%1/%2] : (%L3%4%L5) : mark (%L6%7%L8) Open a flame flam3 xml (*.flam *.flam3 *.flame);;All files (*) flam3 xml (*.flam *.flam3 *.flame);;Ð’Ñе файлы (*) Save a flame untitled.png Application error Ошибка Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Cannot write file %1 Ðе удалоÑÑŒ запиÑать файл %1 Import genomes from a file Импортировать геномы из файла Error Ошибка Cannot import file %1 Ðе удалоÑÑŒ импортировать файл %1 Save the current genome Сохранить текущий геном Cannot write file to %1 Ðе удалоÑÑŒ запиÑать файл в %1 About Qosmic О Qosmic Reset СброÑить Load default genome Загрузить типовой геном &Open... &Открыть... Open an existing file Открыть ÑущеÑтвующий файл &Save &Сохранить Save the flame to disk Save &As... Сохранить &как... Save the flame under a new name Render to &file... &Визуализовать в файл... Save an image of current flame Q&uicksave flame... Quickly save file and image of current flame &Quit Ð’&ыход Quit the application Завершить работу Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼ &Stop rendering &ОÑтановить рендеринг Stop rendering ОÑтановить рендеринг &Random Flame Generate a random xform set Генерировать Ñлучайный набор xform Rescale the editor ПеремаÑштабировать редактор Select next triangle Выбрать Ñледующий треугольник Select previous triangle Выбрать предыдущий треугольник Scale in the scene Шкала в Ñцене Scale out the scene Шкала за Ñценой Undo Отменить Redo Вернуть Cut Вырезать Copy Копировать Paste Ð’Ñтавить Import genomes Импортировать геномы Export current genome ЭкÑпортировать текущий геном Export the current genome ЭкÑпортировать текущий геном File Файл Show &File Toolbar Показать панель &файлов Show the file toolbar Показать панель файлов Couldn't open file %1 Ðе удалоÑÑŒ открыть файл %1 Couldn't save file %1 Ðе удалоÑÑŒ Ñохранить файл %1 untitled.flam3 undo %1/%2 Отмена %1/%2 Save a sheep Widgets Виджеты Rescale View ПеремаÑштабировать проÑмотр Show &Widgets Toolbar Показать панель &виджетов Show the widgets toolbar Показать панель виджетов Edit Правка Show &Edit Toolbar Показать панель &правки &About &О программе Show the application's About box Показать диалог Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ о программе About &Qt О &Qt Show the Qt library's About box Показать диалог Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ о библиотеке Qt &File &Файл &Edit &Правка &Widgets &Виджеты &Info &Справка Show scene editing toolbar Показать панель правки Ñцены Image Quality КачеÑтво Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Previewer ПредпроÑмотрщик <p><b>Qosmic version %1</b></p><p>Copyright (C) 2007-2016 by David Bitseff<br><p>Use and redistribute under the terms of the<br><a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License Version 3</a></p><p>Thanks to:<br>- Scott Draves for the <a href="http://flam3.com/">flam3</a> library<br>- Erik Reckase for his work on the flam3 library<br>- Mark James for his <a href="http://www.famfamfam.com/lab/icons/silk/">Silk</a> icon set<br>- Mark Townsend for the <a href="www.apophysis.org">Apophysis</a> editor<br>- Pavel Fric for Czech Translations<br><p>This version uses: Qt Triangle Variations Вариации треугольника Triangle Color Цвет треугольника Color Settings ÐаÑтройки цвета Genome List СпиÑок геномов Triangle Densities ПлотноÑть треугольника Directory Browser ПроÑмотр директории Triangle Coordinates Координаты треугольника Sheep Loop Script Editor Редактор ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ File saved Файл Ñохранен last undo ПоÑледнее отмененное redo %1/%2 Повтор %1/%2 last redo ПоÑледнее повторенное Qosmic Add Triangle Добавить треугольник Move Triangles ПеремеÑтить треугольники Rotate Triangles Вращать треугольники Scale Triangles МаÑштабировать треугольники Flip Triangles Повернуть треугольники MotionViewFunctionItemEditor sin hill triangle треугольник MotionViewVarItemEditor animate Ðнимировать color color_speed density ПлотноÑть opacity ÐепрозрачноÑть var: par: xform: a xform: b xform: c xform: d xform: e xform: f post: a post: b post: c post: d post: e post: f MutationConfigDialog Configure ÐаÑтроить size of final image Размер конечного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ icon size Размер иконки width of the final image Ширина конечного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ height of the final image Ð’Ñ‹Ñота конечного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ xform coef displacement КоÑффициент ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ xform speed СкороÑть preview quality КачеÑтво предпроÑмотра quality КачеÑтво MutationWidget Mutations Мутации ... ... configure ÐаÑтроить ? ? regenerate Регенерировать genome A genome B mutation %1 PaletteEditor Save gradient to a cpt file Сохранить градиент в cpt файл CPT Gradient Files (*.cpt) Файлы градиентов CPT (*.cpt) Error: Couldn't open file %1 Ошибка: Ðе удалоÑÑŒ открыть файл %1 Error: Couldn't write to file %1 Ошибка: Ðе удалоÑÑŒ запиÑать файл в %1 Invalid path Ðеверный путь The directory path %1 couldn't be opened. Путь директории %1 не может быть открыт. Select a gradient file to load Выбрать файл градиента Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ Gradient Files (*.cpt *.ggr *.ugr) Файлы градиентов (*.cpt *.ggr *.ugr) The gradient path %1 doesn't exist. Путь градиента %1 не ÑущеÑтвует. Palettes Палитры Edit Правка rotate Вращение pad repeat Повторить reflect Отразить number of randomly generated stops, < 2 implies random number on [2,128] ЧиÑло Ñлучайно Ñгенерированных оÑтановок, < 2 влечет Ñлучайное чиÑло из [2,128] random gradient Случайный градиент new Ðовый reset СброÑить save Сохранить Browse Браузер ... ... RenderDialog current settings Текущие наÑтройки genome quality КачеÑтво генома File already exists Файл уже ÑущеÑтвует Do you want to overwrite %1? Ð’Ñ‹ хотите перезапиÑать %1? untitled.png Save an image as ... Сохранить изображение как ... Render an image Визуализовать изображение Location РаÑположение ... ... Size Размер Quality КачеÑтво RenderProgressDialog Rendering ... Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ ... yes Да no Ðет stop Стоп View rendered image? ПроÑмотреть визуализированное изображение? RenderStatus hh:mm:ss ч:мин:Ñек mm:ss мин:Ñек ss.z Ñек.Ð¼Ñ s.z rendering... %L1% ( %2 remaining ) ВизуализациÑ... %L1% ( %2 оÑталоÑÑŒ ) %1 rendering stopped %1 Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ñтановлена hh:mm:ss.z ч:мин:Ñек.Ð¼Ñ %1 rendered in %2 seconds %1 визуализировано за %2 Ñек %1 rendered in %2 %1 визуализировано за %2 ScriptEditConfigDialog Config ScriptEditor Конфиг редактора ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Fonts Шрифты Lua Lua Search Paths Поти поиÑка Lua ScriptEditWidget Form Форма Open Открыть Save Сохранить Save As Сохранить как save as Сохранить как Run ЗапуÑтить run ЗапуÑтить Ctrl+Return open Открыть config Конфиг ... ... save Сохранить print('hello world.') Script input request row: %1, col: %2 Ñтрока: %1, Ñтолбец: %2 running script... ЗапуÑк Ñкрипта... script stopped Скрипт оÑтановлен saved: %1 Сохранено: %1 SelectGenomeConfigDialog Configure ÐаÑтроить size of final image Размер конечного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ icon size Размер иконки width of the final image Ширина конечного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ height of the final image Ð’Ñ‹Ñота конечного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ preview quality КачеÑтво предпроÑмотра quality КачеÑтво autosave genomes ÐвтоÑохранÑть геномы autosave ÐвтоÑохранение never Ðикогда on exit При выходе always Ð’Ñегда SelectGenomeWidget Genome Геном duplicate genome Дублировать геном remove genome Удалить геном clear triangles ОчиÑтить треугольники configure ÐаÑтроить ... ... Error Ошибка Couldn't remove %1: %2 SelectTriangleWidget Triangles Треугольники transform Преобразовать add a triangle Добавить треугольник ... ... enable the final transform Разрешить финальное преобразование probability that this function is chosen ВероÑтноÑть того, что Ñта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð° density ПлотноÑть remove the selected triangle Удалить выделенный треугольник final Финал SheepLoopWidget SheepLoopWidget temporal position of this genome in the animation sequence Временное положение Ñтого генома в анимационной поÑледовательноÑти genome геном first keyframe to до last keyframe save Сохранить ... ... run ЗапуÑтить Interpolation ИнтерполÑÑ†Ð¸Ñ mode Режим frames Кадры frames per loop loops rotation loops sequence - rotate animated xforms and interpolate adjacent genomes animate - time based interpolation of adjacent genomes sequence ПоÑледовательноÑть animate Ðнимировать stagger fractional overlap of xform interpolation interpolation curve for this genome in the animation sequence interp curve how flames change over time linear линейный smooth гладкий interpolation function for this genome in the animation sequence Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»Ñции Ð´Ð»Ñ Ñтого генома в анимационной поÑледовательноÑти interp type Тип интерполÑции interpolation of xform positions ИнтерполÑÑ†Ð¸Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¹ xform log лог compat older Ñтарее palette interp ИнтерполÑÑ†Ð¸Ñ Ð¿Ð°Ð»Ð¸Ñ‚Ñ€Ñ‹ interpolation between colormaps ИнтерполÑÑ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ цветовыми картами hsv sweep palette mode Режим палитры interpolation between palette entries step Шаг Motion Blur Размытие в движении number of time steps per batch. this many interpolated control points are used per batch and accumulated temporal samples Временные образцы time samples used for motion blur Образцы времени, иÑпользуемые Ð´Ð»Ñ Ñ€Ð°Ð·Ð¼Ñ‹Ñ‚Ð¸Ñ Ð² движении Temporal Filter Временный фильтр type Тип motion blur kernel Ядро Ñ€Ð°Ð·Ð¼Ñ‹Ñ‚Ð¸Ñ Ð² движении box Ящик gaussian Ð“Ð°ÑƒÑ exp width Ширина motion blur frames Кадры Ñ€Ð°Ð·Ð¼Ñ‹Ñ‚Ð¸Ñ Ð² движении exponent ÑкÑпонента direction and rate of exp motion blur Ðаправление и темп ÑкÑпоненты Ñ€Ð°Ð·Ð¼Ñ‹Ñ‚Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Motion Elements Элементы Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ transform Преобразовать animate this transform in the electricsheep loop add Добавить + remove Удалить - element value function frequency var: par: color color_speed density ПлотноÑть opacity ÐепрозрачноÑть xform: a xform: b xform: c xform: d xform: e xform: f post: a post: b post: c post: d post: e post: f sin hill triangle треугольник var: linear StatusWidget status Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Some status text. .. . . . ЧаÑть текÑта ÑтатуÑа. .. . . . TriangleCoordsWidget Triangle Coordinates Координаты треугольника x y O: X: Y: rect deg град rad рад a: d: b: e: c: f: TriangleDensityWidget Densities ПлотноÑти 0 0 = = ? ? select a genome Выберите геном none Ðет merge this genome Объединить Ñтот геном * * None density: %1 VariationsWidget Variations Вариации apply value Применить значение + VarsTableModel Variation Value ViewerPresetsModel Column %1 Row %1 very-low quality Очень низкое качеÑтво low quality Ðизкое качеÑтво med-low quality Средне-низкое качеÑтво med quality Среднее качеÑтво med-high quality Средне-выÑокое качеÑтво high quality Ð’Ñ‹Ñокое качеÑтво ViewerPresetsWidget q%1/o%2/e%3 Add a new preset Добавить новый профиль Enter a name for the preset Введите Ð¸Ð¼Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Rename preset Переименовать профиль Viewer Presets Профили проÑмотра add Добавить + remove Удалить - update preset Обновить профиль <> move up Сдвинуть вверх move down Сдвинуть вниз close Закрыть qosmic-1.6.0/ui/000077500000000000000000000000001304321135200134205ustar00rootroot00000000000000qosmic-1.6.0/ui/adjustscenewidget.ui000066400000000000000000000173061304321135200175020ustar00rootroot00000000000000 AdjustSceneWidget 0 0 162 242 0 0 170 250 Scene Settings true QFrame::StyledPanel QFrame::Sunken 24 24 set background color :/icons/silk/color_wheel.xpm:/icons/silk/color_wheel.xpm preview false QFrame::StyledPanel QFrame::Sunken density preview density 999 10 depth preview iterations 1 1 m_previewDensityEditor m_previewDepthEditor label label_2 Qt::RightToLeft background color Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 24 24 set grid color :/icons/silk/color_wheel.xpm:/icons/silk/color_wheel.xpm grid guide 24 24 set guide color :/icons/silk/color_wheel.xpm:/icons/silk/color_wheel.xpm triangle labels Qt::Horizontal QDialogButtonBox::Ok Qt::Vertical 1 0 IntValueEditor QSpinBox

intvalueeditor.h
m_okButtonBox accepted() AdjustSceneWidget accept() 86 146 91 66 qosmic-1.6.0/ui/camerasettingswidget.ui000066400000000000000000000164301304321135200202000ustar00rootroot00000000000000 CameraSettingsWidget 0 0 209 142 0 0 Camera 0 0 QFrame::StyledPanel QFrame::Sunken size of final image size width of the final image 1 100000 10 height of the final image 1 100000 10 a power for scale and quality zoom: 0 0 -99.989999999999995 0.100000000000000 pixels per unit vertically scale: 0 0 1 0.000000000000000 10000000.000000000000000 10.000000000000000 camera origin center: x position -99.989999999999995 0.010000000000000 y position -99.989999999999995 0.010000000000000 rotate camera rotate 0 0 70 0 -360.000000000000000 360.000000000000000 1.000000000000000 Qt::Vertical 0 0 DoubleValueEditor QDoubleSpinBox
doublevalueeditor.h
IntValueEditor QSpinBox
intvalueeditor.h
qosmic-1.6.0/ui/chaoswidget.ui000066400000000000000000000037751304321135200162740ustar00rootroot00000000000000 ChaosWidget 0 0 200 371 Chaos 0 0 QFrame::NoFrame Qt::ScrollBarAlwaysOn Qt::ScrollBarAlwaysOff false QAbstractItemView::SingleSelection QAbstractItemView::SelectRows false false false true true false ChaosTableView QTableView
chaoswidget.h
qosmic-1.6.0/ui/colorbalancewidget.ui000066400000000000000000000256011304321135200176130ustar00rootroot00000000000000 ColorBalanceWidget 0 0 189 248 0 0 Form 0 0 QFrame::StyledPanel QFrame::Sunken 1 0 1 1 brightness 4 0.000000000000000 99.989999999999995 0.100000000000000 1.000000000000000 1 0 1 1 contrast 4 0.000000000000000 1.000000000000000 0.010000000000000 1.000000000000000 1 0 1 1 gamma 4 -99.989999999999995 0.100000000000000 1.000000000000000 1 0 1 1 vibrancy 4 -99.989999999999995 0.010000000000000 1.000000000000000 1 0 1 1 hue 4 0.000000000000000 1.000000000000000 0.010000000000000 0.000000000000000 1 0 1 1 the maximum Value for an RGB color before trending the color towards white as the density increases. -1 = disabled, 0 = no highlights highlight disabled 4 -1.000000000000000 0.010000000000000 0.000000000000000 0 0 QLayout::SetMinimumSize 0 1 0 1 1 1 0 alpha none opaque transparent 0 0 improve the antialiasing of bright features early clip Qt::Vertical 1 0 DoubleValueEditor QDoubleSpinBox
doublevalueeditor.h
qosmic-1.6.0/ui/colordialog.ui000066400000000000000000000272651304321135200162710ustar00rootroot00000000000000 ColorDialog 0 0 435 416 0 0 Select a color 360 256 360 256 QFrame::StyledPanel QFrame::Sunken 50 256 16777215 256 QFrame::StyledPanel QFrame::Sunken 0 0 205 134 205 134 QFrame::StyledPanel QFrame::Sunken 0 0 Hue Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 359 0 0 Red Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 255 0 0 Sat Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 255 0 0 Green Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 255 0 0 Val Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 255 0 0 Blue Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 255 0 0 Alpha Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 255 255 0 0 Ok 0 0 Cancel ColorLabel QLabel
colorlabel.h
HueSatSelector QLabel
colordialog.h
ValSelector QLabel
colordialog.h
qosmic-1.6.0/ui/colorsettingswidget.ui000066400000000000000000000232171304321135200200670ustar00rootroot00000000000000 ColorSettingsWidget 0 0 137 334 0 0 Color Settings 0 0 QFrame::StyledPanel QFrame::Sunken 0 0 16777215 28 transform color index transform color 0 0 1 256 52 256 QFrame::StyledPanel QFrame::Sunken Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop 3 0.000000000000000 1.000000000000000 0.004000000000000 0 0 1 1 57 40 QFrame::NoFrame QFrame::Sunken 0 0 48 16777215 Qt::Horizontal 0 0 16777215 28 image background color background color 0 0 57 40 QFrame::NoFrame QFrame::Sunken QLayout::SetMaximumSize 0 0 per iteration scaling factor on the transform color speed Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 3 -3.000000000000000 0.100000000000000 0 0 0=invisible, 1=totally visible opacity Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 3 0.000000000000000 1.000000000000000 0.100000000000000 1.000000000000000 Qt::Vertical QSizePolicy::Expanding 0 0 DoubleValueEditor QDoubleSpinBox
doublevalueeditor.h
ColorLabel QLabel
colorlabel.h
GenomeColorSelector QLabel
genomecolorselector.h
qosmic-1.6.0/ui/directoryviewwidget.ui000066400000000000000000000115031304321135200200620ustar00rootroot00000000000000 DirectoryViewWidget 0 0 272 464 Form ... :/icons/silk/bullet_arrow_up.xpm:/icons/silk/bullet_arrow_up.xpm ... :/icons/silk/bullet_arrow_right.xpm:/icons/silk/bullet_arrow_right.xpm ... :/icons/silk/bullet_arrow_left.xpm:/icons/silk/bullet_arrow_left.xpm true true QAbstractItemView::DragDrop Qt::CopyAction QListView::Batched true true QAbstractItemView::DragDrop Qt::CopyAction false false true false ... :/icons/silk/bullet_wrench.xpm:/icons/silk/bullet_wrench.xpm true + :/icons/silk/magnifier_zoom_in.xpm:/icons/silk/magnifier_zoom_in.xpm - :/icons/silk/magnifier_zoom_out.xpm:/icons/silk/magnifier_zoom_out.xpm ... :/icons/silk/folder.xpm:/icons/silk/folder.xpm 18 18 DirectoryListView QListView
directorylistview.h
qosmic-1.6.0/ui/editmodeselectorwidget.ui000066400000000000000000000614651304321135200205320ustar00rootroot00000000000000 EditModeSelectorWidget 0 0 686 56 0 0 1 0 EditModeSelector 0 0 0 QFrame::StyledPanel 2 2 Move triangle Move Tringle :/icons/silk/arrow_updown.xpm:/icons/silk/arrow_updown.xpm true true Rotate triangle Move Tringle :/icons/silk/arrow_rotate_clockwise.xpm:/icons/silk/arrow_rotate_clockwise.xpm true Scale triangle Move Tringle :/icons/silk/arrow_inout.xpm:/icons/silk/arrow_inout.xpm true Flip triangle Move Tringle :/icons/silk/arrow_left_right.xpm:/icons/silk/arrow_left_right.xpm true 0 0 QFrame::StyledPanel 0 0 0 0 4 0 move left < :/icons/silk/bullet_arrow_left.xpm:/icons/silk/bullet_arrow_left.xpm true move right > :/icons/silk/bullet_arrow_right.xpm:/icons/silk/bullet_arrow_right.xpm true move up :/icons/silk/bullet_arrow_up.xpm:/icons/silk/bullet_arrow_up.xpm true move down :/icons/silk/bullet_arrow_down.xpm:/icons/silk/bullet_arrow_down.xpm true 0 0 0.000000000000000 0.100000000000000 1.000000000000000 4 0 0 0 deg -360.000000000000000 360.000000000000000 1.000000000000000 0.000000000000000 < > Qt::Horizontal 0 1 4 0 0 0 0 0 % 1 0.000000000000000 100.000000000000000 1.000000000000000 10.000000000000000 + - 0 0 flip horizontally horiz :/icons/silk/shape_flip_horizontal.xpm:/icons/silk/shape_flip_horizontal.xpm flip vertically vert :/icons/silk/shape_flip_vertical.xpm:/icons/silk/shape_flip_vertical.xpm QFrame::StyledPanel 0 2 0 2 0 axis: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 transform axis origin mark circum box O X Y 0 0 QFrame::StyledPanel QFrame::Plain 0 2 add a triangle ... :/icons/silk/shape_triangle_add.xpm:/icons/silk/shape_triangle_add.xpm Qt::NoArrow remove the selected triangle ... :/icons/silk/shape_triangle_delete.xpm:/icons/silk/shape_triangle_delete.xpm reset the triangle final :/icons/silk/shape_triangle_go.xpm:/icons/silk/shape_triangle_go.xpm edit the post transform post :/icons/silk/shape_post_triangle.xpm:/icons/silk/shape_post_triangle.xpm true QFrame::StyledPanel 0 2 0 2 0 select: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 selection type triangles nodes Qt::Horizontal 1 1 QFrame::StyledPanel 0 2 scene settings ... :/icons/silk/bullet_wrench.xpm:/icons/silk/bullet_wrench.xpm QFrame::NoFrame QFrame::Plain 0 0 0 0 -1000 1000 Qt::Horizontal zoom visible rescale scene :/icons/silk/shape_group.xpm:/icons/silk/shape_group.xpm zoom center scene origin mark circum box O X Y SnapSlider QSlider
snapslider.h
DoubleValueEditor QDoubleSpinBox
doublevalueeditor.h
qosmic-1.6.0/ui/genomevectorlistmodelitemeditor.ui000066400000000000000000000037621304321135200224670ustar00rootroot00000000000000 GenomeVectorListModelItemEditor 0 0 126 36 Form true temporal position of this genome in the animation sequence time Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 2000000000 0 0 4 4 x :/icons/silk/bullet_black.xpm:/icons/silk/bullet_black.xpm IntValueEditor QSpinBox
intvalueeditor.h
qosmic-1.6.0/ui/imgsettingswidget.ui000066400000000000000000000550321304321135200175250ustar00rootroot00000000000000 ImageSettingsWidget 0 0 235 332 0 0 Image Settings Qt::Horizontal 0 0 0 0 QFrame::StyledPanel QFrame::Sunken 0 75 true Image Quality Image quality presets configure presets configure presets :/icons/silk/bullet_wrench.xpm:/icons/silk/bullet_wrench.xpm QFormLayout::FieldsStayAtSizeHint 0 0 1 0 49 16777215 samples per pixel quality 0 0 3 99999.990000000005239 10.000000000000000 0.000000000000000 0 0 1 0 49 16777215 spatial filter radius (variance of gaussian) filter 0 0 3 0.100000000000000 0 0 1 0 shape of the spatial filter filter shape 0 0 QComboBox::InsertAtTop gaussian hermite box triangle bell bspline mitchell blackman catrom hanning hamming lanczos3 lanczos2 quadratic 0 0 1 0 density estimation parameters for blurring low density hits estimator 0 0 filter width for bin with one hit 3 0.100000000000000 0 0 1 0 exponent on decay function estimator curve 0 0 3 0.010000000000000 0.100000000000000 0.400000000000000 0 0 1 0 minimum filter width used. forces filter to be used of at least this width on all pts estimator min 0 0 3 0.100000000000000 0 0 1 0 spatial oversample oversample 0 0 1 1 0 0 1 0 sample density iterations. number of times the buckets are filtered into the accumulator passes 0 0 1 100000 1 75 true Conversions 0 0 1 0 the genome symmetry group 2 or more means rotational 1 means identity, ie no symmetry 0 means pick a random symmetry (maybe none) -1 means bilateral (reflection) -2 or less means rotational and reflective symmetry 0 QLayout::SetMaximumSize 1 0 -99 99 1 0 0 apply symmetry to the genome ... :/icons/silk/wand.xpm:/icons/silk/wand.xpm 16 16 Qt::Horizontal 0 0 Qt::Horizontal 1 1 QLayout::SetMaximumSize 75 true < :/icons/silk/bullet_arrow_left.xpm:/icons/silk/bullet_arrow_left.xpm 75 true > :/icons/silk/bullet_arrow_right.xpm:/icons/silk/bullet_arrow_right.xpm Qt::Horizontal 1 1 Qt::Vertical 186 0 DoubleValueEditor QDoubleSpinBox
doublevalueeditor.h
IntValueEditor QSpinBox
intvalueeditor.h
qosmic-1.6.0/ui/mainpreviewwidget.ui000066400000000000000000000020351304321135200175110ustar00rootroot00000000000000 MainPreviewWidget 0 0 162 132 Preview 1 1 1 Qt::LeftToRight QFrame::StyledPanel QFrame::Sunken qosmic-1.6.0/ui/mainviewer.ui000066400000000000000000000027561304321135200161370ustar00rootroot00000000000000 MainViewer 0 0 250 200 true flame viewer 4 0 0 true QFrame::StyledPanel QFrame::Sunken Qt::ScrollBarAlwaysOff Qt::ScrollBarAlwaysOff MainViewerGraphicsView QGraphicsView
mainviewer.h
qosmic-1.6.0/ui/mainwindow.ui000066400000000000000000000102701304321135200161330ustar00rootroot00000000000000 David Bitseff MainWindow 0 0 270 255 Qosmic :/icons/qosmic.xpm:/icons/qosmic.xpm true QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks|QMainWindow::VerticalTabs QFrame::StyledPanel Qt::ScrollBarAlwaysOn Qt::ScrollBarAlwaysOn Qt::AlignCenter QPainter::SmoothPixmapTransform|QPainter::TextAntialiasing QGraphicsView::AnchorViewCenter QGraphicsView::AnchorViewCenter QGraphicsView::DontSavePainterState 0 0 270 21 :/icons/silk/shape_square_add.xpm:/icons/silk/shape_square_add.xpm Add Triangle :/icons/silk/arrow_updown.xpm:/icons/silk/arrow_updown.xpm Move Triangles :/icons/silk/arrow_rotate_clockwise.xpm:/icons/silk/arrow_rotate_clockwise.xpm Rotate Triangles :/icons/silk/arrow_inout.xpm:/icons/silk/arrow_inout.xpm Scale Triangles Scale Triangles :/icons/silk/shape_flip_horizontal.xpm:/icons/silk/shape_flip_horizontal.xpm Flip Triangles Flip Triangles 10 10 true true true qosmic-1.6.0/ui/mutationconfigdialog.ui000066400000000000000000000104711304321135200201700ustar00rootroot00000000000000 MutationConfigDialog 0 0 178 122 0 0 Configure size of final image icon size width of the final image 1 128 1 height of the final image 1 128 1 xform coef displacement speed 0 0 -99.000000000000000 0.100000000000000 0.100000000000000 Qt::Horizontal QDialogButtonBox::Ok preview quality quality IntValueEditor QSpinBox
intvalueeditor.h
DoubleValueEditor QDoubleSpinBox
doublevalueeditor.h
buttonBox accepted() MutationConfigDialog accept() 162 45 157 59 buttonBox rejected() MutationConfigDialog reject() 162 51 169 59
qosmic-1.6.0/ui/mutationwidget.ui000066400000000000000000001025641304321135200170330ustar00rootroot00000000000000 MutationWidget 0 0 454 666 Mutations QLayout::SetMaximumSize 0 0 82 68 82 68 true QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 true QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box 0 0 82 68 82 68 QFrame::Box QComboBox::AdjustToMinimumContentsLengthWithIcon 24 24 QComboBox::AdjustToMinimumContentsLengthWithIcon 24 24 0 0 0 0 ... :/icons/silk/bullet_arrow_up.xpm:/icons/silk/bullet_arrow_up.xpm ... :/icons/silk/bullet_arrow_down.xpm:/icons/silk/bullet_arrow_down.xpm QFrame::Box 0 0 0 configure ? :/icons/silk/bullet_wrench.xpm:/icons/silk/bullet_wrench.xpm regenerate ... :/icons/silk/arrow_refresh.xpm:/icons/silk/arrow_refresh.xpm 0 0 0 0 ... :/icons/silk/bullet_arrow_up.xpm:/icons/silk/bullet_arrow_up.xpm ... :/icons/silk/bullet_arrow_down.xpm:/icons/silk/bullet_arrow_down.xpm MutationPreviewWidget QLabel
mutationwidget.h
qosmic-1.6.0/ui/paletteeditor.ui000066400000000000000000000325421304321135200166320ustar00rootroot00000000000000 PaletteEditor 0 0 294 330 Palettes 278 16 330 16777215 QFrame::StyledPanel QFrame::Sunken 0 0 0 0 0 1 256 60 256 60 QFrame::StyledPanel QFrame::Sunken 0 1 QTabWidget::Rounded 0 Palettes 0 0 256 30 QListView::IconMode Browse ... :/icons/silk/folder.xpm:/icons/silk/folder.xpm 18 18 256 30 QListView::IconMode Edit rotate 255 Qt::Horizontal 0 0 pad repeat reflect 0 1 256 10 256 10 0 2 256 0 256 60 QFrame::StyledPanel QFrame::Sunken 0 1 256 10 256 10 number of randomly generated stops, < 2 implies random number on [2,128] 1 128 random gradient new Qt::Horizontal 40 20 reset reset save save Qt::Vertical 20 40 Qt::Horizontal 40 8 IntValueEditor QSpinBox
intvalueeditor.h
GradientStopsEditor QWidget
gradientstopseditor.h
1
qosmic-1.6.0/ui/renderdialog.ui000066400000000000000000000105761304321135200164270ustar00rootroot00000000000000 RenderDialog 0 0 411 121 0 0 16777215 130 Render an image 0 0 Location ... :/icons/silk/folder.xpm:/icons/silk/folder.xpm 0 0 Size 0 0 Quality 0 0 QDialogButtonBox::Cancel|QDialogButtonBox::Ok ... :/icons/silk/bullet_delete.xpm:/icons/silk/bullet_delete.xpm ... :/icons/silk/bullet_add.xpm:/icons/silk/bullet_add.xpm m_buttonBox accepted() RenderDialog accept() 248 254 157 274 m_buttonBox rejected() RenderDialog reject() 316 260 286 274 qosmic-1.6.0/ui/renderprogressdialog.ui000066400000000000000000000065641304321135200202160ustar00rootroot00000000000000 RenderProgressDialog 0 0 269 89 Rendering ... QLayout::SetMinAndMaxSize 0 0 Rendering ... 0 QLayout::SetMaximumSize Qt::Horizontal 1 10 0 0 yes 0 0 no 0 0 stop m_stopButton pressed() RenderProgressDialog reject() 221 64 248 4 m_noButton pressed() RenderProgressDialog accept() 137 71 157 86 qosmic-1.6.0/ui/scripteditconfigdialog.ui000066400000000000000000000066311304321135200205050ustar00rootroot00000000000000 ScriptEditConfigDialog 0 0 288 168 0 0 Config ScriptEditor 0 Fonts 0 0 Qt::Vertical 10 1 Lua Lua Search Paths Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox tabWidget buttonBox accepted() ScriptEditConfigDialog accept() 248 254 157 274 buttonBox rejected() ScriptEditConfigDialog reject() 316 260 286 274 qosmic-1.6.0/ui/scripteditwidget.ui000066400000000000000000000144471304321135200173470ustar00rootroot00000000000000 ScriptEditWidget 0 0 272 457 1 1 Form false 0 0 1 1 QFrame::StyledPanel QFrame::Raised Qt::Vertical 0 2 20 false QPlainTextEdit::NoWrap true Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse true 0 0 0 0 Open open :/icons/silk/folder.xpm:/icons/silk/folder.xpm 18 18 Save save :/icons/silk/disk.xpm:/icons/silk/disk.xpm 18 18 Save As save as :/icons/silk/page_save.xpm:/icons/silk/page_save.xpm 0 0 Run run :/icons/silk/bullet_go.xpm:/icons/silk/bullet_go.xpm Ctrl+Return Qt::Horizontal 1 2 config ... :/icons/silk/bullet_wrench.xpm:/icons/silk/bullet_wrench.xpm Lua::LuaEditor QTextEdit
src/lua/luaeditor.h
qosmic-1.6.0/ui/selectgenomeconfigdialog.ui000066400000000000000000000100141304321135200207730ustar00rootroot00000000000000 SelectGenomeConfigDialog 0 0 183 118 0 0 Configure size of final image icon size width of the final image 1 128 1 height of the final image 1 128 1 preview quality quality Qt::Horizontal QDialogButtonBox::Ok autosave genomes autosave never on exit always IntValueEditor QSpinBox
intvalueeditor.h
buttonBox accepted() SelectGenomeConfigDialog accept() 162 45 157 59 buttonBox rejected() SelectGenomeConfigDialog reject() 162 51 169 59
qosmic-1.6.0/ui/selectgenomewidget.ui000066400000000000000000000154341304321135200176440ustar00rootroot00000000000000 SelectGenomeWidget 0 0 140 265 0 0 Genome QFrame::StyledPanel QFrame::Sunken 0 0 1 1 QFrame::NoFrame QFrame::Plain 0 0 0 1 1 duplicate genome ... :/icons/silk/page_add.xpm:/icons/silk/page_add.xpm 16 16 0 0 1 1 remove genome ... :/icons/silk/page_delete.xpm:/icons/silk/page_delete.xpm 16 16 0 0 1 1 clear triangles ... :/icons/silk/page_green.xpm:/icons/silk/page_green.xpm 0 0 1 1 configure ... :/icons/silk/bullet_wrench.xpm:/icons/silk/bullet_wrench.xpm 0 0 true true QAbstractItemView::DragDrop Qt::MoveAction QListView::Snap 2 GenomeVectorListView QListView
genomevectorlistview.h
qosmic-1.6.0/ui/selecttrianglewidget.ui000066400000000000000000000145751304321135200202040ustar00rootroot00000000000000 SelectTriangleWidget 0 0 211 83 Triangles 0 0 QFrame::StyledPanel QFrame::Sunken 2 0 0 Qt::RightToLeft transform 0 0 QComboBox::AdjustToMinimumContentsLengthWithIcon 0 0 add a triangle ... :/icons/silk/shape_triangle_add.xpm:/icons/silk/shape_triangle_add.xpm Qt::NoArrow 0 0 enable the final transform final :/icons/silk/shape_final_triangle.xpm:/icons/silk/shape_final_triangle.xpm true 0 0 probability that this function is chosen Qt::LeftToRight density Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 3 0.000000000000000 999.000000000000000 0.010000000000000 0 0 remove the selected triangle ... :/icons/silk/shape_triangle_delete.xpm:/icons/silk/shape_triangle_delete.xpm Qt::Vertical 0 0 DoubleValueEditor QDoubleSpinBox
doublevalueeditor.h
qosmic-1.6.0/ui/sheeploopwidget.ui000066400000000000000000000663041304321135200171720ustar00rootroot00000000000000 SheepLoopWidget 0 0 405 279 SheepLoopWidget QFrame::StyledPanel QFrame::Raised 0 0 temporal position of this genome in the animation sequence genome 0 0 first keyframe QComboBox::AdjustToContents 24 24 0 0 temporal position of this genome in the animation sequence to 0 0 last keyframe QComboBox::AdjustToContents 24 24 Qt::Horizontal 1 13 save ... :/icons/silk/disk.xpm:/icons/silk/disk.xpm run run :/icons/silk/bullet_go.xpm:/icons/silk/bullet_go.xpm 0 Interpolation mode 0 0 frames 0 0 frames per loop 2 999999 100 loops 0 0 rotation loops 0 999999 1 sequence - rotate animated xforms and interpolate adjacent genomes animate - time based interpolation of adjacent genomes sequence animate 0 0 QFrame::StyledPanel QFrame::Raised 0 0 stagger 0 0 fractional overlap of xform interpolation 1.000000000000000 0.100000000000000 0 0 interpolation curve for this genome in the animation sequence interp curve 0 0 how flames change over time linear smooth 0 0 interpolation function for this genome in the animation sequence interp type 0 0 interpolation of xform positions linear log compat older palette interp 0 0 interpolation between colormaps hsv sweep palette mode 0 0 interpolation between palette entries step linear Qt::Horizontal 1 20 Motion Blur 0 0 QFrame::StyledPanel QFrame::Raised 0 0 number of time steps per batch. this many interpolated control points are used per batch and accumulated temporal samples 0 0 time samples used for motion blur 1 999999 10 1 Qt::Horizontal 1 20 0 0 0 1 Temporal Filter true false 2 2 type 0 0 motion blur kernel box gaussian exp width 0 0 motion blur frames 1.000000000000000 exponent 0 0 direction and rate of exp motion blur -99.000000000000000 Motion Elements genome QComboBox::AdjustToContents 24 24 transform animate this transform in the electricsheep loop animate :/icons/silk/film.xpm:/icons/silk/film.xpm true Qt::Horizontal 1 20 add + remove - 2 2 QAbstractItemView::AllEditTriggers QAbstractItemView::SingleSelection Qt::DotLine false 65 DoubleValueEditor QDoubleSpinBox
doublevalueeditor.h
IntValueEditor QSpinBox
intvalueeditor.h
qosmic-1.6.0/ui/statuswidget.ui000066400000000000000000000030331304321135200165050ustar00rootroot00000000000000 StatusWidget 0 0 272 22 status 0 0 0 0 0 0 2 22 300 22 QFrame::NoFrame QFrame::Sunken Some status text. .. . . . Qt::PlainText qosmic-1.6.0/ui/trianglecoordswidget.ui000066400000000000000000000614441304321135200202130ustar00rootroot00000000000000 TriangleCoordsWidget 0 0 206 251 0 0 Triangle Coordinates 1 0 0 1 1 QFrame::StyledPanel QFrame::Sunken 0 0 1 1 16777215 20 x Qt::AlignCenter 0 0 1 1 16777215 20 y Qt::AlignCenter 100 0 1 1 O: 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 100 0 1 1 X: 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 100 0 1 1 Y: 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 1 1 Qt::AlignHCenter|Qt::AlignTop false 0 0 0 1 1 rect true 0 0 1 1 deg 0 0 1 1 rad 0 0 Qt::Horizontal 100 0 1 1 a: 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 100 0 1 1 d: 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 100 0 1 1 b: 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 100 0 1 1 e: 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 100 0 1 1 c: 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 100 0 1 1 f: 0 0 1 1 70 16777215 4 -999999999.000000000000000 999999999.000000000000000 0.100000000000000 line_2 m_coordsGroupBox Qt::Vertical 0 0 DoubleValueEditor QDoubleSpinBox
doublevalueeditor.h
qosmic-1.6.0/ui/triangledensitywidget.ui000066400000000000000000000203721304321135200203740ustar00rootroot00000000000000 TriangleDensityWidget 0 0 244 385 Densities Qt::Vertical Qt::Horizontal 1 1 1 1 0 1 1 = 1 1 ? 0 1 0 1 Qt::ScrollBarAlwaysOff true Qt::AlignHCenter|Qt::AlignTop 0 0 222 16 0 0 0 0 1 1 select a genome none 1 1 merge this genome * :/icons/silk/star.xpm:/icons/silk/star.xpm Qt::Horizontal 1 1 1 1 0 1 1 = 1 1 ? 0 1 0 1 Qt::ScrollBarAlwaysOff true Qt::AlignHCenter|Qt::AlignTop 0 0 222 16 0 0 qosmic-1.6.0/ui/variationswidget.ui000066400000000000000000000041571304321135200173510ustar00rootroot00000000000000 VariationsWidget 0 0 182 241 Variations -99.000000000000000 99.000000000000000 apply value + 0 0 QFrame::NoFrame Qt::ScrollBarAlwaysOn Qt::ScrollBarAlwaysOff DoubleValueEditor QDoubleSpinBox
doublevalueeditor.h
VarsTableWidget QTreeView
varstablewidget.h
qosmic-1.6.0/ui/viewerpresetswidget.ui000066400000000000000000000103451304321135200200750ustar00rootroot00000000000000 ViewerPresetsWidget Qt::WindowModal 0 0 192 160 Viewer Presets true add + :/icons/silk/bullet_add.xpm:/icons/silk/bullet_add.xpm 16 16 remove - :/icons/silk/bullet_delete.xpm:/icons/silk/bullet_delete.xpm 16 16 update preset <> :/icons/silk/bullet_wrench.xpm:/icons/silk/bullet_wrench.xpm move up :/icons/silk/bullet_arrow_up.xpm:/icons/silk/bullet_arrow_up.xpm 16 16 move down :/icons/silk/bullet_arrow_down.xpm:/icons/silk/bullet_arrow_down.xpm 16 16 Qt::Horizontal 40 20 close :/icons/silk/cross.xpm:/icons/silk/cross.xpm 16 16