diff --git a/ACKNOWLEDGMENTS.txt b/ACKNOWLEDGMENTS.txt deleted file mode 100644 index 15dffc9..0000000 --- a/ACKNOWLEDGMENTS.txt +++ /dev/null @@ -1,36 +0,0 @@ -Open Sans font: -(c)2011 Google -Distributed under the Apache License (see Resources/Fonts/OpenSans/LICENSE) - - -stb_image_write: -Created by Sean Barrett - - -MacRomanConversion uses a table from LIBICONV: -Copyright (C) 1999-2001, 2016 Free Software Foundation, Inc. - -Distributed under the LGPLv2 license (See MacRomanConversion/LICENSE.txt) - - -RapidJSON: -Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. - -Distributed under the MIT license (See rapidjson/license.txt) - - -zlib: -(C) 1995-2017 Jean-loup Gailly and Mark Adler -Distributed under zlib license (See zlib/README) - - -The Unarchiver: -Copyright (C) 2006-2013 Dag Ă…gren - -Distributed under the LGPLv2 license (See unpacktool/LICENSE.txt) - - -MACE Audio decoder: -Copyright (c) 2002 Laszlo Torok - -Distributed under the LGPLv2 license (See macedec.cpp comments) diff --git a/ApplicationResourcePatches/DITL/2000.json b/ApplicationResourcePatches/DITL/2000.json index 34d2153..17357ac 100644 --- a/ApplicationResourcePatches/DITL/2000.json +++ b/ApplicationResourcePatches/DITL/2000.json @@ -8,6 +8,14 @@ "size" : [ 58, 20 ], "id" : 1, "enabled" : true + }, + { + "name" : "Third Party/Licensing Info...", + "itemType" : "Button", + "pos" : [ 176, 240 ], + "size" : [ 190, 20 ], + "id" : 1, + "enabled" : true } ] } \ No newline at end of file diff --git a/ApplicationResourcePatches/DITL/2005.json b/ApplicationResourcePatches/DITL/2005.json new file mode 100644 index 0000000..f3fa8ce --- /dev/null +++ b/ApplicationResourcePatches/DITL/2005.json @@ -0,0 +1,181 @@ +{ + "items" : + [ + { + "name" : "Okay", + "itemType" : "Button", + "pos" : [ 438, 292 ], + "size" : [ 58, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "Export Source Code to ZIP Archive...", + "itemType" : "Button", + "pos" : [ 205, 292 ], + "size" : [ 226, 20 ], + "id" : 1, + "enabled" : false + }, + { + "name" : "Aerofoil (c)2019-2020 Eric Lasota", + "itemType" : "Label", + "pos" : [ 16, 21 ], + "size" : [ 406, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "License...", + "itemType" : "Button", + "pos" : [ 430, 16 ], + "size" : [ 66, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "Based on Glider PRO (c)1994-2000 Casady & Greene, Inc., created by John Calhoun", + "itemType" : "Label", + "pos" : [ 16, 44 ], + "size" : [ 398, 28 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "License...", + "itemType" : "Button", + "pos" : [ 430, 44 ], + "size" : [ 66, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "Open Sans font (c)2011 Google", + "itemType" : "Label", + "pos" : [ 16, 77 ], + "size" : [ 406, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "License...", + "itemType" : "Button", + "pos" : [ 430, 72 ], + "size" : [ 66, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "Roboto Mono font (c)2011 Google", + "itemType" : "Label", + "pos" : [ 16, 101 ], + "size" : [ 406, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "License...", + "itemType" : "Button", + "pos" : [ 430, 96 ], + "size" : [ 66, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "Gochi Hand font (c)2011 Juan Pablo del Peral", + "itemType" : "Label", + "pos" : [ 16, 125 ], + "size" : [ 406, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "License...", + "itemType" : "Button", + "pos" : [ 430, 120 ], + "size" : [ 66, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "LIBICONV (c)1999-2001, 2016 Free Software Foundation, Inc.", + "itemType" : "Label", + "pos" : [ 16, 149 ], + "size" : [ 406, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "License...", + "itemType" : "Button", + "pos" : [ 430, 144 ], + "size" : [ 66, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "RapidJSON (c) 2015 THL A29 Limited, a Tencent company, and Milo Yip.", + "itemType" : "Label", + "pos" : [ 16, 172 ], + "size" : [ 406, 28 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "License...", + "itemType" : "Button", + "pos" : [ 430, 172 ], + "size" : [ 66, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "zlib (c)1995-2017 Jean-loup Gailly and Mark Adler", + "itemType" : "Label", + "pos" : [ 16, 205 ], + "size" : [ 406, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "License...", + "itemType" : "Button", + "pos" : [ 430, 200 ], + "size" : [ 66, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "FreeType (c)2020 The FreeType Project", + "itemType" : "Label", + "pos" : [ 16, 229 ], + "size" : [ 406, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "License...", + "itemType" : "Button", + "pos" : [ 430, 224 ], + "size" : [ 66, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "Simple DirectMedia Layer (c)1997-2020 Sam Lantinga", + "itemType" : "Label", + "pos" : [ 16, 253 ], + "size" : [ 406, 20 ], + "id" : 1, + "enabled" : true + }, + { + "name" : "License...", + "itemType" : "Button", + "pos" : [ 430, 248 ], + "size" : [ 66, 20 ], + "id" : 1, + "enabled" : true + } + ] +} \ No newline at end of file diff --git a/ApplicationResourcePatches/DITL/2006.json b/ApplicationResourcePatches/DITL/2006.json new file mode 100644 index 0000000..ea5a322 --- /dev/null +++ b/ApplicationResourcePatches/DITL/2006.json @@ -0,0 +1,13 @@ +{ + "items" : + [ + { + "name" : "Okay", + "itemType" : "Button", + "pos" : [ 454, 360 ], + "size" : [ 58, 20 ], + "id" : 1, + "enabled" : true + } + ] +} \ No newline at end of file diff --git a/ApplicationResourcePatches/LICS/1000.txt b/ApplicationResourcePatches/LICS/1000.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/ApplicationResourcePatches/LICS/1000.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/ApplicationResourcePatches/LICS/1001.txt b/ApplicationResourcePatches/LICS/1001.txt new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/ApplicationResourcePatches/LICS/1001.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + 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 +convey 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This 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. diff --git a/ApplicationResourcePatches/LICS/1002.txt b/ApplicationResourcePatches/LICS/1002.txt new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/ApplicationResourcePatches/LICS/1002.txt @@ -0,0 +1,165 @@ + GNU LESSER 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. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser 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 +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/ApplicationResourcePatches/LICS/1003.txt b/ApplicationResourcePatches/LICS/1003.txt new file mode 100644 index 0000000..77b1731 --- /dev/null +++ b/ApplicationResourcePatches/LICS/1003.txt @@ -0,0 +1,91 @@ +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/ApplicationResourcePatches/LICS/1004.txt b/ApplicationResourcePatches/LICS/1004.txt new file mode 100644 index 0000000..24ab41c --- /dev/null +++ b/ApplicationResourcePatches/LICS/1004.txt @@ -0,0 +1,107 @@ +Tencent is pleased to support the open source community by making RapidJSON +available. + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All +rights reserved. + +If you have downloaded a copy of the RapidJSON binary from Tencent, please + note that the RapidJSON binary is licensed under the MIT License. +If you have downloaded a copy of the RapidJSON source code from Tencent, +please note that RapidJSON source code is licensed under the MIT License, +except for the third-party components listed below which are subject to +different license terms. Your integration of RapidJSON into your own +projects may require compliance with the MIT License, as well as the other +licenses applicable to the third-party components included within RapidJSON. +To avoid the problematic JSON license in your own projects, it's sufficient +to exclude the bin/jsonchecker/ directory, as it's the only code under the +JSON license. +A copy of the MIT License is included in this file. + +Other dependencies and licenses: + +Open Source Software Licensed Under the BSD License: +-------------------------------------------------------------------- + +The msinttypes r29 +Copyright (c) 2006-2013 Alexander Chemeris +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of copyright holder nor the names of its contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Open Source Software Licensed Under the JSON License: +-------------------------------------------------------------------- + +json.org +Copyright (c) 2002 JSON.org +All Rights Reserved. + +JSON_checker +Copyright (c) 2002 JSON.org +All Rights Reserved. + + +Terms of the JSON License: +--------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +The Software shall be used for Good, not Evil. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +Terms of the MIT License: +-------------------------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ApplicationResourcePatches/LICS/1005.txt b/ApplicationResourcePatches/LICS/1005.txt new file mode 100644 index 0000000..6a19e00 --- /dev/null +++ b/ApplicationResourcePatches/LICS/1005.txt @@ -0,0 +1,17 @@ + (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. \ No newline at end of file diff --git a/ApplicationResourcePatches/LICS/1006.txt b/ApplicationResourcePatches/LICS/1006.txt new file mode 100644 index 0000000..0e2bef3 --- /dev/null +++ b/ApplicationResourcePatches/LICS/1006.txt @@ -0,0 +1,20 @@ + +Simple DirectMedia Layer +Copyright (C) 1997-2020 Sam Lantinga + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + diff --git a/ApplicationResourcePatches/manifest.json b/ApplicationResourcePatches/manifest.json index 4047566..9bd1a17 100644 --- a/ApplicationResourcePatches/manifest.json +++ b/ApplicationResourcePatches/manifest.json @@ -7,6 +7,8 @@ "DITL/2002.json" : "ApplicationResourcePatches/DITL/2002.json", "DITL/2003.json" : "ApplicationResourcePatches/DITL/2003.json", "DITL/2004.json" : "ApplicationResourcePatches/DITL/2004.json", + "DITL/2005.json" : "ApplicationResourcePatches/DITL/2005.json", + "DITL/2006.json" : "ApplicationResourcePatches/DITL/2006.json", "PICT/1973.bmp" : "ApplicationResourcePatches/PICT/1973.bmp", "PICT/1974.bmp" : "ApplicationResourcePatches/PICT/1974.bmp", "PICT/1975.bmp" : "ApplicationResourcePatches/PICT/1975.bmp", @@ -21,7 +23,14 @@ "PICT/1984.bmp" : "ApplicationResourcePatches/PICT/1984.bmp", "PICT/1985.bmp" : "ApplicationResourcePatches/PICT/1985.bmp", "PICT/1986.bmp" : "ApplicationResourcePatches/PICT/1986.bmp", - "PICT/1987.bmp" : "ApplicationResourcePatches/PICT/1987.bmp" + "PICT/1987.bmp" : "ApplicationResourcePatches/PICT/1987.bmp", + "LICS/1000.txt" : "ApplicationResourcePatches/LICS/1000.txt", + "LICS/1001.txt" : "ApplicationResourcePatches/LICS/1001.txt", + "LICS/1002.txt" : "ApplicationResourcePatches/LICS/1002.txt", + "LICS/1003.txt" : "ApplicationResourcePatches/LICS/1003.txt", + "LICS/1004.txt" : "ApplicationResourcePatches/LICS/1004.txt", + "LICS/1005.txt" : "ApplicationResourcePatches/LICS/1005.txt", + "LICS/1006.txt" : "ApplicationResourcePatches/LICS/1006.txt" }, "delete" : [ diff --git a/Documentation/license_ofl.txt b/Documentation/license_ofl.txt new file mode 100644 index 0000000..ffb8605 --- /dev/null +++ b/Documentation/license_ofl.txt @@ -0,0 +1,94 @@ +Copyright (c) 2011, Juan Pablo del Peral (juan@huertatipografica.com.ar), +with Reserved Font Names "Gochi" and "Gochi Hand" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/Documentation/readme.txt b/Documentation/readme.txt index a42da84..090a922 100644 --- a/Documentation/readme.txt +++ b/Documentation/readme.txt @@ -16,10 +16,11 @@ IN-GAME SHORTCUT COMMANDS - Alt-Enter toggles full screen. -GAMEPAD SUPPORT +GAMEPAD SUPPORT (WINDOWS) ------------------------------------------------------------------------------- XInput gamepads are supported. Other gamepads may be supported via third-party -software that maps them to XInput (i.e. PS4 gamepads are supported via DS4Windows) +software that maps them to XInput (i.e. PS4 gamepads are supported via +DS4Windows) LEGAL NOTICES @@ -62,8 +63,8 @@ ADDITIONAL CREDITS * PICT resource 3975 (Ozma) is derived from an illustration by John R. Neill from [Ozma of Oz](https://www.gutenberg.org/files/33361/33361-h/33361-h.htm). * PICT resource 153 (About box) features a portion of - [this Little Nemo comic](http://www.comicstriplibrary.org/display/116) by Winsor - McCay. + [this Little Nemo comic](http://www.comicstriplibrary.org/display/116) + byWinsor McCay. Aerofoil uses the following third-party software: @@ -73,6 +74,16 @@ Open Sans font: Distributed under the Apache License (see license_apache.txt) +Roboto Mono font: +(c)2015 Google +Distributed under the Apache License (see license_apache.txt) + + +Gochi Hand font: +(c) 2011 Juan Pablo del Peral +Distributed under the Open Font License (see license_ofl.txt) + + stb_image_write: Created by Sean Barrett @@ -84,7 +95,8 @@ Distributed under the LGPLv2 license (See license_lgplv2.txt) RapidJSON: -Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All +rights reserved. Distributed under the MIT license (See license_rapidjson.txt) @@ -115,7 +127,8 @@ zlib: FreeType: -Portions of this software are copyright (c)2020 The FreeType Project (www.freetype.org). +Portions of this software are copyright (c)2020 The FreeType Project +(www.freetype.org). All rights reserved. Distributed under the GPLv2 license (see license_gplv2.txt) diff --git a/GpApp/About.cpp b/GpApp/About.cpp index bb968ab..41c7fa9 100644 --- a/GpApp/About.cpp +++ b/GpApp/About.cpp @@ -14,6 +14,7 @@ #include "PLResources.h" #include "PLSound.h" #include "PLPasStr.h" +#include "PLScrollBarWidget.h" #include "PLStandardColors.h" #include "PLSysCalls.h" #include "PLTimeTaggedVOSEvent.h" @@ -40,6 +41,9 @@ static void UnHiLiteOkayButton (DrawSurface *surface); static void UpdateMainPict (Dialog *); static int16_t AboutFilter(void *context, Dialog *, const TimeTaggedVOSEvent *evt); static int16_t AboutFrameworkFilter(void *context, Dialog *, const TimeTaggedVOSEvent *evt); +static int16_t LicenseReaderFilter(void *context, Dialog *, const TimeTaggedVOSEvent *evt); +static void DrawLicenseReader(Window *window); +void DoLicenseReader(int licenseResID); static Point okayButtLowerV, okayButtUpperV; @@ -47,6 +51,45 @@ static Rect okayButtonBounds, mainPICTBounds; static Boolean okayButtIsHiLit, clickedDownInOkay; +struct LicenseReaderLine +{ + PortabilityLayer::PascalStr<80> m_text; +}; + +static const unsigned int kLicenseReaderPointHistoryLength = 3; +static Boolean licenseReaderIsScrolling; +static Point licenseReaderPointHistory[kLicenseReaderPointHistoryLength]; + +static int32_t licenseReaderVelocity; +static unsigned int licenseReaderTextScroll; +static unsigned int licenseReaderTextScrollMax; +static unsigned int licenseReaderNumLines; +static THandle licenseReaderLines; +static const unsigned int kLicenseReaderTextSpacing = 10; +static const Rect licenseReaderTextRect = Rect::Create(16, 16, 344, 496); +static PortabilityLayer::ScrollBarWidget *licenseReaderScrollBarWidget; + +static void InitLicenseReader(unsigned int numLines) +{ + for (unsigned int i = 0; i < kLicenseReaderPointHistoryLength; i++) + licenseReaderPointHistory[i] = Point::Create(0, 0); + + licenseReaderIsScrolling = false; + + licenseReaderTextScroll = 0; + licenseReaderVelocity = 0; + licenseReaderTextScrollMax = numLines * kLicenseReaderTextSpacing; + if (licenseReaderTextScrollMax < licenseReaderTextRect.Height()) + licenseReaderTextScrollMax = 0; + else + licenseReaderTextScrollMax -= licenseReaderTextRect.Height(); + + licenseReaderNumLines = numLines; + licenseReaderScrollBarWidget = nullptr; +} + + + //============================================================== Functions //-------------------------------------------------------------- DoAbout // Brings up the About dialog box. @@ -98,9 +141,168 @@ void DoAbout (void) aboutDialog->Destroy(); } +void DoLicenseReader(int resID) +{ + static const int kLicenseReaderDialogTemplateID = 2006; + + THandle licenseTextHandle = PortabilityLayer::ResourceManager::GetInstance()->GetAppResource('LICS', resID).StaticCast(); + + if (!licenseTextHandle) + return; + + // Count lines + unsigned int numLines = 1; + const uint8_t *licenseText = *licenseTextHandle; + const size_t licenseTextLength = licenseTextHandle.MMBlock()->m_size; + + for (size_t i = 0; i < licenseTextLength; i++) + { + if (licenseText[i] == '\n') + numLines++; + } + + licenseReaderLines = NewHandle(sizeof(LicenseReaderLine) * numLines).StaticCast(); + if (!licenseReaderLines) + { + licenseTextHandle.Dispose(); + return; + } + + LicenseReaderLine *lines = *licenseReaderLines; + unsigned int lineIndex = 0; + size_t lineStart = 0; + for (size_t i = 0; i < licenseTextLength; i++) + { + if (licenseText[i] == '\n') + { + assert(i - lineStart <= 80); + lines[lineIndex++].m_text.Set(i - lineStart, reinterpret_cast(licenseText + lineStart)); + lineStart = i + 1; + } + } + assert(licenseTextLength - lineStart <= 80); + lines[lineIndex++].m_text.Set(licenseTextLength - lineStart, reinterpret_cast(licenseText + lineStart)); + + assert(lineIndex == numLines); + + licenseTextHandle.Dispose(); + + const Rect windowRect = Rect::Create(0, 0, 396, 528); + + PortabilityLayer::WindowDef wdef = PortabilityLayer::WindowDef::Create(windowRect, PortabilityLayer::WindowStyleFlags::kAlert, true, 0, 0, PSTR("")); + + PortabilityLayer::DialogManager *dialogManager = PortabilityLayer::DialogManager::GetInstance(); + Dialog *dialog = dialogManager->LoadDialogFromTemplate(kLicenseReaderDialogTemplateID, windowRect, true, false, 0, 0, PL_GetPutInFrontWindowPtr(), PSTR(""), nullptr); + + DrawDefaultButton(dialog); + + int16_t hit = 0; + + InitLicenseReader(numLines); + DrawLicenseReader(dialog->GetWindow()); + + if (licenseReaderTextScrollMax != 0) + { + PortabilityLayer::WidgetBasicState state; + state.m_rect = Rect::Create(licenseReaderTextRect.top, licenseReaderTextRect.right, licenseReaderTextRect.bottom, licenseReaderTextRect.right + 16); + state.m_refConstant = 2; + state.m_window = dialog->GetWindow(); + state.m_max = licenseReaderTextScrollMax; + state.m_state = 0; + licenseReaderScrollBarWidget = PortabilityLayer::ScrollBarWidget::Create(state, nullptr); + } + + dialog->GetWindow()->DrawControls(); + + do + { + hit = dialog->ExecuteModal(nullptr, LicenseReaderFilter); + } while (hit != kOkayButton); + + dialog->Destroy(); + licenseReaderLines.Dispose(); +} + +void DoAboutOpenSource(void) +{ + static const int kExportSourceItem = 2; + static const int kAerofoilLicenseButton = 4; + static const int kGliderPROLicenseButton = 6; + static const int kOpenSansLicenseButton = 8; + static const int kRobotoMonoLicenseButton = 10; + static const int kGochiHandLicenseButton = 12; + static const int kLibIConvLicenseButton = 14; + static const int kRapidJSONLicenseButton = 16; + static const int kZLibLicenseButton = 18; + static const int kFreeTypeLicenseButton = 20; + static const int kSDLLicenseButton = 22; + + static const int kLicenseResourceApache = 1000; + static const int kLicenseResourceGPLv2 = 1001; + static const int kLicenseResourceLGPLv3 = 1002; + static const int kLicenseResourceOFL = 1003; + static const int kLicenseResourceRapidJSON = 1004; + static const int kLicenseResourceZLib = 1005; + static const int kLicenseResourceSDL = 1006; + + static const int kAboutOpenSourceDialogTemplateID = 2005; + + const Rect windowRect = Rect::Create(0, 0, 324, 512); + + PortabilityLayer::WindowDef wdef = PortabilityLayer::WindowDef::Create(windowRect, PortabilityLayer::WindowStyleFlags::kAlert, true, 0, 0, PSTR("")); + + PortabilityLayer::DialogManager *dialogManager = PortabilityLayer::DialogManager::GetInstance(); + Dialog *dialog = dialogManager->LoadDialogFromTemplate(kAboutOpenSourceDialogTemplateID, windowRect, true, false, 0, 0, PL_GetPutInFrontWindowPtr(), PSTR(""), nullptr); + + DrawDefaultButton(dialog); + + if (thisMac.isTouchscreen) + dialog->GetItems()[kExportSourceItem - 1].GetWidget()->SetEnabled(true); + + int16_t hit = 0; + + do + { + hit = dialog->ExecuteModal(nullptr, AboutFrameworkFilter); + + switch (hit) + { + case kExportSourceItem: + DoExportSourceCode(); + break; + case kAerofoilLicenseButton: + case kGliderPROLicenseButton: + DoLicenseReader(kLicenseResourceGPLv2); + break; + case kOpenSansLicenseButton: + case kRobotoMonoLicenseButton: + DoLicenseReader(kLicenseResourceApache); + break; + case kGochiHandLicenseButton: + DoLicenseReader(kLicenseResourceOFL); + break; + case kLibIConvLicenseButton: + case kFreeTypeLicenseButton: + DoLicenseReader(kLicenseResourceLGPLv3); + break; + case kZLibLicenseButton: + DoLicenseReader(kLicenseResourceZLib); + break; + case kSDLLicenseButton: + DoLicenseReader(kLicenseResourceSDL); + break; + default: + break; + } + } while (hit != kOkayButton); + + dialog->Destroy(); +} + void DoAboutFramework (void) { -#define kAboutFrameworkDialogTemplateID 2000 + static const int kAboutFrameworkDialogTemplateID = 2000; + static const int kAboutOpenSourceButton = 2; const Rect windowRect = Rect::Create(0, 0, 272, 450); @@ -153,6 +355,9 @@ void DoAboutFramework (void) do { hit = dialog->ExecuteModal(nullptr, AboutFrameworkFilter); + + if (hit == kAboutOpenSourceButton) + DoAboutOpenSource(); } while (hit != kOkayButton); dialog->Destroy(); @@ -366,3 +571,193 @@ static int16_t AboutFrameworkFilter(void *context, Dialog *dialog, const TimeTag return hit; } +void DrawLicenseReader(Window *window) +{ + PortabilityLayer::RenderedFont *rfont = GetMonospaceFont(10, PortabilityLayer::FontFamilyFlag_None, true); + if (!rfont) + return; + + PortabilityLayer::ResolveCachingColor whiteColor(StdColors::White()); + PortabilityLayer::ResolveCachingColor blackColor(StdColors::Black()); + + DrawSurface *surface = window->GetDrawSurface(); + surface->FillRect(licenseReaderTextRect, whiteColor); + + int32_t ascent = rfont->GetMetrics().m_ascent; + + const LicenseReaderLine *lines = *licenseReaderLines; + + for (unsigned int i = 0; i < licenseReaderNumLines; i++) + { + int32_t lineY = licenseReaderTextRect.top + ascent + static_cast(kLicenseReaderTextSpacing * i); + lineY -= static_cast(licenseReaderTextScroll); + + surface->DrawStringConstrained(Point::Create(licenseReaderTextRect.left, lineY), lines[i].m_text.ToShortStr(), licenseReaderTextRect, blackColor, rfont); + } +} + +static void CycleLicenseReaderMouseHistory() +{ + for (unsigned int ri = 1; ri < kLicenseReaderPointHistoryLength; ri++) + { + unsigned int i = kLicenseReaderPointHistoryLength - ri; + licenseReaderPointHistory[i] = licenseReaderPointHistory[i - 1]; + } +} + +static void HandleLicenseReaderScroll(Window *window, int32_t offset) +{ + int32_t newScroll = static_cast(licenseReaderTextScroll) + offset; + if (newScroll < 0) + newScroll = 0; + else if (newScroll > static_cast(licenseReaderTextScrollMax)) + newScroll = licenseReaderTextScrollMax; + + if (newScroll != licenseReaderTextScroll) + { + licenseReaderTextScroll = newScroll; + licenseReaderScrollBarWidget->SetState(newScroll); + DrawLicenseReader(window); + } +} + +static void AutoScrollLicenseReader(Window *window) +{ + if (licenseReaderIsScrolling) + return; + + int32_t decayRate = 2; + if (licenseReaderVelocity < 0) + { + HandleLicenseReaderScroll(window, licenseReaderVelocity); + licenseReaderVelocity += decayRate; + if (licenseReaderVelocity > 0) + licenseReaderVelocity = 0; + } + else if (licenseReaderVelocity > 0) + { + HandleLicenseReaderScroll(window, licenseReaderVelocity); + licenseReaderVelocity -= decayRate; + if (licenseReaderVelocity < 0) + licenseReaderVelocity = 0; + } +} + +static void ComputeLicenseReaderVelocity() +{ + int32_t velocity = licenseReaderPointHistory[kLicenseReaderPointHistoryLength - 1].v - licenseReaderPointHistory[0].v; + licenseReaderVelocity = velocity; +} + +static void LicenseReaderScrollBarUpdate(void *captureContext, PortabilityLayer::Widget *widget, int part) +{ + Window *window = static_cast(captureContext); // This is stupid and very lazy... + + + const int incrementalStepping = kLicenseReaderTextSpacing; + const int pageStepping = 20; + + switch (part) + { + case kControlUpButtonPart: + widget->SetState(widget->GetState() - incrementalStepping); + break; + case kControlDownButtonPart: + widget->SetState(widget->GetState() + incrementalStepping); + break; + case kControlPageUpPart: + widget->SetState(widget->GetState() - pageStepping * incrementalStepping); + break; + case kControlPageDownPart: + widget->SetState(widget->GetState() + pageStepping * incrementalStepping); + break; + default: + break; + }; + + licenseReaderTextScroll = widget->GetState(); + DrawLicenseReader(window); +} + +static int16_t LicenseReaderFilter(void *context, Dialog *dialog, const TimeTaggedVOSEvent *evt) +{ + bool handledIt = false; + int16_t hit = -1; + + if (!evt) + { + if (licenseReaderIsScrolling) + CycleLicenseReaderMouseHistory(); + else + AutoScrollLicenseReader(dialog->GetWindow()); + return -1; + } + + Window *window = dialog->GetWindow(); + DrawSurface *surface = window->GetDrawSurface(); + + if (evt->IsKeyDownEvent()) + { + switch (PackVOSKeyCode(evt->m_vosEvent.m_event.m_keyboardInputEvent)) + { + case PL_KEY_SPECIAL(kEnter): + case PL_KEY_NUMPAD_SPECIAL(kEnter): + dialog->GetItems()[kOkayButton - 1].GetWidget()->SetHighlightStyle(kControlButtonPart, true); + PLSysCalls::Sleep(8); + dialog->GetItems()[kOkayButton - 1].GetWidget()->SetHighlightStyle(kControlButtonPart, false); + hit = kOkayButton; + handledIt = true; + break; + + default: + handledIt = false; + break; + } + } + + if (evt->m_vosEvent.m_eventType == GpVOSEventTypes::kMouseInput) + { + const GpMouseInputEvent &mouseEvt = evt->m_vosEvent.m_event.m_mouseInputEvent; + + Point mouseLocalPt = window->MouseToLocal(mouseEvt); + + switch (mouseEvt.m_eventType) + { + case GpMouseEventTypes::kDown: + if (licenseReaderTextRect.Contains(mouseLocalPt)) + { + for (unsigned int i = 0; i < kLicenseReaderPointHistoryLength; i++) + licenseReaderPointHistory[i] = mouseLocalPt; + licenseReaderIsScrolling = true; + } + else if (licenseReaderScrollBarWidget->GetRect().Contains(mouseLocalPt)) + { + licenseReaderScrollBarWidget->Capture(dialog->GetWindow(), mouseLocalPt, LicenseReaderScrollBarUpdate); + licenseReaderTextScroll = licenseReaderScrollBarWidget->GetState(); + DrawLicenseReader(dialog->GetWindow()); + } + break; + case GpMouseEventTypes::kLeave: + case GpMouseEventTypes::kUp: + licenseReaderIsScrolling = false; + ComputeLicenseReaderVelocity(); + break; + case GpMouseEventTypes::kMove: + if (licenseReaderIsScrolling) + { + Point prevPoint = licenseReaderPointHistory[0]; + licenseReaderPointHistory[0] = mouseLocalPt; + HandleLicenseReaderScroll(window, prevPoint.v - mouseLocalPt.v); + } + break; + default: + break; + } + } + + if (!handledIt) + return -1; + + return hit; +} + diff --git a/GpApp/Android.mk b/GpApp/Android.mk index 56a5a7c..6225bb7 100644 --- a/GpApp/Android.mk +++ b/GpApp/Android.mk @@ -42,6 +42,7 @@ LOCAL_SRC_FILES := \ InterfaceInit.cpp \ Link.cpp \ Main.cpp \ + MainMenuUI.cpp \ MainWindow.cpp \ Map.cpp \ Marquee.cpp \ diff --git a/GpApp/Events.cpp b/GpApp/Events.cpp index d51300c..62e56c3 100644 --- a/GpApp/Events.cpp +++ b/GpApp/Events.cpp @@ -14,6 +14,7 @@ #include "Environ.h" #include "House.h" #include "InputManager.h" +#include "MainMenuUI.h" #include "ObjectEdit.h" #include "Rect2i.h" #include "WindowManager.h" @@ -125,7 +126,7 @@ void HandleMouseEvent (const GpMouseInputEvent &theEvent, uint32_t tick) if (vDelta < 0) vDelta = -vDelta; if (((tick - lastUp) < doubleTime) && (hDelta < 5) && - (vDelta < 5)) + (vDelta < 5)) isDoubleClick = true; else { @@ -141,6 +142,9 @@ void HandleMouseEvent (const GpMouseInputEvent &theEvent, uint32_t tick) HandleToolsClick(evtPoint); else if (whichWindow == linkWindow) HandleLinkClick(evtPoint); + else if (HandleMainMenuUIClick(whichWindow, evtPoint)) + { + } break; default: @@ -328,6 +332,8 @@ void HandleSplashResolutionChange(void) InitScoreboardMap(); //RefreshScoreboard(wasScoreboardTitleMode); //DumpScreenOn(&justRoomsRect); + + HandleMainMenuUIResolutionChange(); } void KeepWindowInBounds(Window *window) @@ -401,6 +407,8 @@ void HandleIdleTask (void) HandleSplashResolutionChange(); } } + + TickMainMenuUI(); } //-------------------------------------------------------------- HandleEvent @@ -410,7 +418,7 @@ void HandleIdleTask (void) void HandleEvent (void) { TimeTaggedVOSEvent theEvent; - uint32_t sleep = 2; + uint32_t sleep = 1; bool itHappened = true; const KeyDownStates *eventKeys = PortabilityLayer::InputManager::GetInstance()->GetKeys(); @@ -456,12 +464,13 @@ void HandleEvent (void) } else HandleIdleTask(); - + if ((theMode == kSplashMode) && doAutoDemo && !switchedOut) { if (TickCount() >= incrementModeTime) DoDemoGame(); } + } //-------------------------------------------------------------- IgnoreThisClick diff --git a/GpApp/Externs.h b/GpApp/Externs.h index a664330..6b64211 100644 --- a/GpApp/Externs.h +++ b/GpApp/Externs.h @@ -166,6 +166,7 @@ void FillScreenRed (void); void DumpToResEditFile (Ptr, long); void HandleEvent (void); // --- Event.c +void HandleIdleTask (void); void IgnoreThisClick (void); void SwitchToDepth (short, Boolean); // --- Environs.c diff --git a/GpApp/GliderDefines.h b/GpApp/GliderDefines.h index ce15852..6925196 100644 --- a/GpApp/GliderDefines.h +++ b/GpApp/GliderDefines.h @@ -4,7 +4,7 @@ // GliderDefines.h //---------------------------------------------------------------------------- //============================================================================ - +#pragma once //============================================================== Defines diff --git a/GpApp/GliderProtos.h b/GpApp/GliderProtos.h index 21c4dfd..e82ff01 100644 --- a/GpApp/GliderProtos.h +++ b/GpApp/GliderProtos.h @@ -1,9 +1,12 @@ - //============================================================================ //---------------------------------------------------------------------------- // GliderProtos.h //---------------------------------------------------------------------------- //============================================================================ +#pragma once + +#include "PLCore.h" +#include "GliderStructs.h" struct GpMouseInputEvent; diff --git a/GpApp/GliderStructs.h b/GpApp/GliderStructs.h index 918e553..3e7ea46 100644 --- a/GpApp/GliderStructs.h +++ b/GpApp/GliderStructs.h @@ -3,8 +3,9 @@ // GliderStructs.h //---------------------------------------------------------------------------- //============================================================================ +#pragma once - +#include "GliderDefines.h" #include "PLQDOffscreen.h" #include "GpVOSEvent.h" #include "ByteSwap.h" diff --git a/GpApp/GpApp.vcxproj b/GpApp/GpApp.vcxproj index 5f8e374..c80f962 100644 --- a/GpApp/GpApp.vcxproj +++ b/GpApp/GpApp.vcxproj @@ -103,6 +103,7 @@ + @@ -162,6 +163,7 @@ + diff --git a/GpApp/GpApp.vcxproj.filters b/GpApp/GpApp.vcxproj.filters index fdbb488..78d36d6 100644 --- a/GpApp/GpApp.vcxproj.filters +++ b/GpApp/GpApp.vcxproj.filters @@ -219,6 +219,9 @@ Source Files + + Source Files + @@ -302,5 +305,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/GpApp/InterfaceInit.cpp b/GpApp/InterfaceInit.cpp index 4aa2ccf..b4a49f8 100644 --- a/GpApp/InterfaceInit.cpp +++ b/GpApp/InterfaceInit.cpp @@ -67,9 +67,12 @@ void InitializeMenus (void) if (optionsMenu == nil) RedAlert(kErrFailedResourceLoad); InsertMenu(optionsMenu, 0); - - menusUp = true; - PortabilityLayer::MenuManager::GetInstance()->SetMenuVisible(true); + + if (!thisMac.isTouchscreen) + { + menusUp = true; + PortabilityLayer::MenuManager::GetInstance()->SetMenuVisible(true); + } houseMenu = GetMenu(kHouseMenuID); if (houseMenu == nil) diff --git a/GpApp/Main.cpp b/GpApp/Main.cpp index 7f26b7d..74c88b1 100644 --- a/GpApp/Main.cpp +++ b/GpApp/Main.cpp @@ -19,6 +19,7 @@ #include "IGpDisplayDriver.h" #include "GpIOStream.h" #include "House.h" +#include "MainMenuUI.h" #include "MenuManager.h" #include "RenderedFont.h" #include "ResolveCachingColor.h" @@ -523,8 +524,12 @@ int gpAppMain() UpdateMainWindow(); + if (thisMac.isTouchscreen) + StartMainMenuUI(); + while (!quitting) // this is the main loop HandleEvent(); + /* #if BUILD_ARCADE_VERSION ShowMenuBarOld(); diff --git a/GpApp/MainMenuUI.cpp b/GpApp/MainMenuUI.cpp new file mode 100644 index 0000000..8efb299 --- /dev/null +++ b/GpApp/MainMenuUI.cpp @@ -0,0 +1,489 @@ +#include "MainMenuUI.h" + +#include "FontFamily.h" +#include "GpApplicationName.h" +#include "HostDisplayDriver.h" +#include "GliderProtos.h" +#include "Externs.h" +#include "IGpDisplayDriver.h" +#include "PLCore.h" +#include "PLQDraw.h" +#include "PLStandardColors.h" +#include "PLSysCalls.h" +#include "RenderedFont.h" +#include "GpRenderedFontMetrics.h" +#include "ResolveCachingColor.h" +#include "PLTimeTaggedVOSEvent.h" +#include "WindowDef.h" +#include "WindowManager.h" +#include "Vec2i.h" + +struct MainMenuControlState +{ + Window *m_window; + + int m_targetHorizontalCoordinate; + Point m_dimensions; + int m_page; +}; + +struct MainMenuUIState +{ + enum ControlID + { + Control_NewGame, + Control_LoadSavedGame, + Control_HighScores, + Control_Page0To1, + + Control_LoadHouse, + Control_Demo, + Control_Page1To2, + + Control_AboutApplication, + Control_AboutFramework, + Control_Page2To0, + + Control_Count, + }; + + enum ControlStyle + { + ControlStyle_Icon, + ControlStyle_Text, + }; + + MainMenuControlState m_controls[Control_Count]; + int m_scrollInOffset; + int m_scrollInStep; + int m_scrollOutDistance; + int m_currentPage; + + ControlID m_activeControl; + + static const unsigned int kControlHeight = 40; + static const unsigned int kControlFontSize = 24; + static const unsigned int kControlLeftSpacing = 20; + static const unsigned int kControlBottomSpacing = 20; + static const unsigned int kControlIntermediateSpacing = 16; + static const unsigned int kControlInteriorSpacing = 6; + static const unsigned int kControlScrollInDecay = 2; + static const unsigned int kControlScrollInDecayFalloffBits = 0; +}; + +static MainMenuUIState mainMenu; + +static MainMenuUIState::ControlStyle GetControlStyleForControl(MainMenuUIState::ControlID controlID) +{ + switch (controlID) + { + case MainMenuUIState::Control_Page0To1: + case MainMenuUIState::Control_Page1To2: + case MainMenuUIState::Control_Page2To0: + return MainMenuUIState::ControlStyle_Icon; + + default: + return MainMenuUIState::ControlStyle_Text; + }; +} + +static PLPasStr GetTextForControl(MainMenuUIState::ControlID controlID) +{ + switch (controlID) + { + case MainMenuUIState::Control_NewGame: + return PSTR("New Game"); + case MainMenuUIState::Control_LoadSavedGame: + return PSTR("Resume Game"); + case MainMenuUIState::Control_LoadHouse: + return PSTR("Load House"); + case MainMenuUIState::Control_Demo: + return PSTR("Demo"); + case MainMenuUIState::Control_HighScores: + return PSTR("High Scores"); + case MainMenuUIState::Control_AboutApplication: + return PSTR("About Glider PRO"); + case MainMenuUIState::Control_AboutFramework: + return PSTR("About " GP_APPLICATION_NAME); + + default: + return PSTR(""); + }; +} + +static void DrawMainMenuControl(DrawSurface *surface, MainMenuUIState::ControlID controlID, bool clicked) +{ + Rect surfaceRect = surface->m_port.GetRect(); + + PortabilityLayer::ResolveCachingColor blackColor(StdColors::Black()); + PortabilityLayer::ResolveCachingColor whiteColor(StdColors::White()); + PortabilityLayer::ResolveCachingColor borderColor1(PortabilityLayer::RGBAColor::Create(255, 51, 51, 255)); + PortabilityLayer::ResolveCachingColor borderColor2(PortabilityLayer::RGBAColor::Create(255, 153, 51, 255)); + + surface->FrameRect(surfaceRect, blackColor); + surface->FrameRect(surfaceRect.Inset(1, 1), borderColor1); + surface->FrameRect(surfaceRect.Inset(2, 2), borderColor2); + + if (clicked) + surface->FillRect(surfaceRect.Inset(3, 3), borderColor2); + else + surface->FillRect(surfaceRect.Inset(3, 3), whiteColor); + + switch (GetControlStyleForControl(controlID)) + { + case MainMenuUIState::ControlStyle_Text: + { + PortabilityLayer::RenderedFont *rfont = GetHandwritingFont(MainMenuUIState::kControlFontSize, PortabilityLayer::FontFamilyFlag_None, true); + if (!rfont) + return; + + int32_t verticalOffset = (static_cast(surface->m_port.GetRect().Height()) + rfont->GetMetrics().m_ascent) / 2; + + surface->DrawString(Point::Create(MainMenuUIState::kControlInteriorSpacing, verticalOffset), GetTextForControl(controlID), blackColor, rfont); + } + break; + case MainMenuUIState::ControlStyle_Icon: + { + const int dotSize = 4; + const int dotSpacing = 2; + + const int dotCount = 3; + const int dotTotalSize = dotSpacing * (dotCount - 1) + dotSize * dotCount; + + int32_t dotHorizontalOffset = (static_cast(surface->m_port.GetRect().Width()) - dotTotalSize) / 2; + int32_t dotVerticalOffset = (static_cast(surface->m_port.GetRect().Height()) - dotSize) / 2; + + for (int i = 0; i < dotCount; i++) + { + int32_t hCoord = dotHorizontalOffset + i * (dotSize + dotSpacing); + surface->FillEllipse(Rect::Create(dotVerticalOffset, hCoord, dotVerticalOffset + dotSize, hCoord + dotSize), blackColor); + } + } + break; + default: + break; + } +} + +void StartScrollForPage() +{ + unsigned int displayHeight = 0; + PortabilityLayer::HostDisplayDriver::GetInstance()->GetDisplayResolution(nullptr, &displayHeight); + + DismissMainMenuUI(); + + int page = mainMenu.m_currentPage; + + PortabilityLayer::WindowManager *wm = PortabilityLayer::WindowManager::GetInstance(); + + int totalWidth = 0; + + for (int controlID = 0; controlID < MainMenuUIState::Control_Count; controlID++) + { + if (mainMenu.m_controls[controlID].m_page == page) + totalWidth = mainMenu.m_controls[controlID].m_targetHorizontalCoordinate + mainMenu.m_controls[controlID].m_dimensions.h; + } + + mainMenu.m_scrollInStep = 1; + mainMenu.m_scrollInOffset = 0; + while (mainMenu.m_scrollInOffset < totalWidth) + { + mainMenu.m_scrollInOffset += (mainMenu.m_scrollInStep >> MainMenuUIState::kControlScrollInDecayFalloffBits); + mainMenu.m_scrollInStep += MainMenuUIState::kControlScrollInDecay; + } + + mainMenu.m_scrollOutDistance = totalWidth; + + for (int i = 0; i < MainMenuUIState::Control_Count; i++) + { + MainMenuControlState &control = mainMenu.m_controls[i]; + + if (control.m_page == page) + { + + const uint16_t styleFlags = PortabilityLayer::WindowStyleFlags::kBorderless; + + PortabilityLayer::WindowDef wdef = PortabilityLayer::WindowDef::Create(Rect::Create(0, 0, control.m_dimensions.v, control.m_dimensions.h), styleFlags, true, 0, 0, PSTR("")); + + control.m_window = wm->CreateWindow(wdef); + control.m_window->SetPosition(PortabilityLayer::Vec2i(control.m_targetHorizontalCoordinate - mainMenu.m_scrollInOffset, displayHeight - MainMenuUIState::kControlBottomSpacing - control.m_dimensions.v)); + wm->PutWindowBehind(control.m_window, wm->GetPutInFrontSentinel()); + + DrawMainMenuControl(control.m_window->GetDrawSurface(), static_cast(i), false); + } + } +} + +void StartMainMenuUI() +{ + DismissMainMenuUI(); + + PortabilityLayer::RenderedFont *rfont = GetHandwritingFont(MainMenuUIState::kControlFontSize, PortabilityLayer::FontFamilyFlag_None, true); + if (!rfont) + return; + + for (int controlID = 0; controlID < MainMenuUIState::Control_Count; controlID++) + { + MainMenuControlState &control = mainMenu.m_controls[controlID]; + + MainMenuUIState::ControlStyle controlStyle = GetControlStyleForControl(static_cast(controlID)); + + if (controlStyle == MainMenuUIState::ControlStyle_Text) + { + size_t textLength = rfont->MeasurePStr(GetTextForControl(static_cast(controlID))); + + control.m_dimensions.h = textLength + MainMenuUIState::kControlInteriorSpacing * 2; + control.m_dimensions.v = MainMenuUIState::kControlHeight; + } + else + control.m_dimensions.h = control.m_dimensions.v = MainMenuUIState::kControlHeight; + } + + mainMenu.m_controls[MainMenuUIState::Control_LoadHouse].m_page = 1; + mainMenu.m_controls[MainMenuUIState::Control_Demo].m_page = 1; + mainMenu.m_controls[MainMenuUIState::Control_Page1To2].m_page = 1; + + mainMenu.m_controls[MainMenuUIState::Control_AboutApplication].m_page = 2; + mainMenu.m_controls[MainMenuUIState::Control_AboutFramework].m_page = 2; + mainMenu.m_controls[MainMenuUIState::Control_Page2To0].m_page = 2; + + for (int i = 0; i < MainMenuUIState::Control_Count; i++) + { + if (i == 0 || mainMenu.m_controls[i].m_page != mainMenu.m_controls[i - 1].m_page) + mainMenu.m_controls[i].m_targetHorizontalCoordinate = MainMenuUIState::kControlLeftSpacing; + else + mainMenu.m_controls[i].m_targetHorizontalCoordinate = mainMenu.m_controls[i - 1].m_targetHorizontalCoordinate + mainMenu.m_controls[i - 1].m_dimensions.h + MainMenuUIState::kControlIntermediateSpacing; + } + + mainMenu.m_currentPage = 0; + StartScrollForPage(); +} + +static void DismissMainMenuUIPage() +{ + unsigned int displayHeight = 0; + PortabilityLayer::HostDisplayDriver::GetInstance()->GetDisplayResolution(nullptr, &displayHeight); + + PortabilityLayer::WindowManager *wm = PortabilityLayer::WindowManager::GetInstance(); + + while (mainMenu.m_scrollInOffset < mainMenu.m_scrollOutDistance) + { + mainMenu.m_scrollInOffset += (mainMenu.m_scrollInStep >> MainMenuUIState::kControlScrollInDecayFalloffBits); + mainMenu.m_scrollInStep += MainMenuUIState::kControlScrollInDecay; + + for (int i = 0; i < MainMenuUIState::Control_Count; i++) + { + MainMenuControlState &control = mainMenu.m_controls[i]; + if (control.m_page == mainMenu.m_currentPage) + control.m_window->SetPosition(PortabilityLayer::Vec2i(control.m_targetHorizontalCoordinate - mainMenu.m_scrollInOffset, displayHeight - MainMenuUIState::kControlBottomSpacing - control.m_dimensions.v)); + } + + Delay(1, nullptr); + } +} + + +void TickMainMenuUI() +{ + if (mainMenu.m_scrollInOffset > 0) + { + PortabilityLayer::WindowManager *wm = PortabilityLayer::WindowManager::GetInstance(); + + unsigned int displayHeight = 0; + PortabilityLayer::HostDisplayDriver::GetInstance()->GetDisplayResolution(nullptr, &displayHeight); + + mainMenu.m_scrollInStep -= MainMenuUIState::kControlScrollInDecay; + mainMenu.m_scrollInOffset -= (mainMenu.m_scrollInStep >> MainMenuUIState::kControlScrollInDecayFalloffBits); + + for (int i = 0; i < MainMenuUIState::Control_Count; i++) + { + MainMenuControlState &control = mainMenu.m_controls[i]; + if (control.m_page == mainMenu.m_currentPage) + control.m_window->SetPosition(PortabilityLayer::Vec2i(control.m_targetHorizontalCoordinate - mainMenu.m_scrollInOffset, displayHeight - MainMenuUIState::kControlBottomSpacing - control.m_dimensions.v)); + } + } +} + +void DismissMainMenuUI() +{ + PortabilityLayer::WindowManager *wm = PortabilityLayer::WindowManager::GetInstance(); + + for (int i = 0; i < MainMenuUIState::Control_Count; i++) + { + MainMenuControlState &control = mainMenu.m_controls[i]; + + if (control.m_window) + { + wm->DestroyWindow(control.m_window); + control.m_window = nullptr; + } + } +} + +void HandleMainMenuUIResolutionChange() +{ + PortabilityLayer::WindowManager *wm = PortabilityLayer::WindowManager::GetInstance(); + + unsigned int displayHeight = 0; + PortabilityLayer::HostDisplayDriver::GetInstance()->GetDisplayResolution(nullptr, &displayHeight); + + for (int i = 0; i < MainMenuUIState::Control_Count; i++) + { + MainMenuControlState &control = mainMenu.m_controls[i]; + + if (control.m_window) + { + PortabilityLayer::Vec2i pos = control.m_window->GetPosition(); + pos.m_y = displayHeight - MainMenuUIState::kControlBottomSpacing - MainMenuUIState::kControlHeight; + control.m_window->SetPosition(pos); + + wm->PutWindowBehind(control.m_window, wm->GetPutInFrontSentinel()); + } + } +} + +static void MainMenuUIMouseMove(Window *window, MainMenuUIState::ControlID controlID, const Point &localPoint) +{ + if (window->GetSurfaceRect().Contains(localPoint)) + { + if (mainMenu.m_activeControl != controlID) + { + DrawMainMenuControl(window->GetDrawSurface(), controlID, true); + mainMenu.m_activeControl = controlID; + } + } + else + { + if (mainMenu.m_activeControl == controlID) + { + DrawMainMenuControl(window->GetDrawSurface(), controlID, false); + mainMenu.m_activeControl = MainMenuUIState::Control_Count; + } + } +} + +static void HandleMainMenuUISelection(MainMenuUIState::ControlID controlID) +{ + switch (controlID) + { + case MainMenuUIState::Control_NewGame: + DismissMainMenuUIPage(); + DoGameMenu(iNewGame); + break; + + case MainMenuUIState::Control_LoadSavedGame: + DismissMainMenuUIPage(); + DoGameMenu(iOpenSavedGame); + StartMainMenuUI(); + break; + + case MainMenuUIState::Control_HighScores: + DismissMainMenuUIPage(); + DoOptionsMenu(iHighScores); + StartMainMenuUI(); + break; + + case MainMenuUIState::Control_LoadHouse: + DismissMainMenuUIPage(); + DoGameMenu(iLoadHouse); + StartMainMenuUI(); + break; + + case MainMenuUIState::Control_Demo: + DismissMainMenuUIPage(); + DoOptionsMenu(iHelp); + StartMainMenuUI(); + break; + + case MainMenuUIState::Control_AboutApplication: + DismissMainMenuUIPage(); + DoAppleMenu(iAbout); + StartScrollForPage(); + break; + + case MainMenuUIState::Control_AboutFramework: + DismissMainMenuUIPage(); + DoAppleMenu(iAboutAerofoil); + StartScrollForPage(); + break; + + case MainMenuUIState::Control_Page0To1: + DismissMainMenuUIPage(); + mainMenu.m_currentPage = 1; + StartScrollForPage(); + break; + + case MainMenuUIState::Control_Page1To2: + DismissMainMenuUIPage(); + mainMenu.m_currentPage = 2; + StartScrollForPage(); + break; + + case MainMenuUIState::Control_Page2To0: + DismissMainMenuUIPage(); + mainMenu.m_currentPage = 0; + StartScrollForPage(); + break; + + default: + break; + } +} + +bool HandleMainMenuUIClick(Window *window, const Point &pt) +{ + MainMenuUIState::ControlID controlID = MainMenuUIState::Control_Count; + + if (mainMenu.m_scrollInOffset != 0) + return true; + + for (int i = 0; i < MainMenuUIState::Control_Count; i++) + { + const MainMenuControlState &control = mainMenu.m_controls[i]; + + if (control.m_window == window) + { + controlID = static_cast(i); + break; + } + } + + if (controlID == MainMenuUIState::Control_Count) + return false; + + DrawMainMenuControl(mainMenu.m_controls[controlID].m_window->GetDrawSurface(), controlID, true); + + mainMenu.m_activeControl = controlID; + + for (;;) + { + TimeTaggedVOSEvent evt; + if (WaitForEvent(&evt, 1)) + { + if (evt.m_vosEvent.m_eventType == GpVOSEventTypes::kMouseInput) + { + const GpMouseInputEvent &mouseEvt = evt.m_vosEvent.m_event.m_mouseInputEvent; + + if (mouseEvt.m_eventType == GpMouseEventTypes::kLeave) + return true; + + if (mouseEvt.m_eventType == GpMouseEventTypes::kMove || mouseEvt.m_eventType == GpMouseEventTypes::kDown || mouseEvt.m_eventType == GpMouseEventTypes::kUp) + { + MainMenuUIMouseMove(window, controlID, window->MouseToLocal(mouseEvt)); + } + + if (mouseEvt.m_eventType == GpMouseEventTypes::kUp) + { + if (mainMenu.m_activeControl != MainMenuUIState::Control_Count) + { + DrawMainMenuControl(mainMenu.m_controls[controlID].m_window->GetDrawSurface(), controlID, false); + HandleMainMenuUISelection(controlID); + } + return true; + } + } + } + } + + return true; +} diff --git a/GpApp/MainMenuUI.h b/GpApp/MainMenuUI.h new file mode 100644 index 0000000..795d745 --- /dev/null +++ b/GpApp/MainMenuUI.h @@ -0,0 +1,10 @@ +#pragma once + +struct Point; +struct Window; + +void StartMainMenuUI(); +void TickMainMenuUI(); +void DismissMainMenuUI(); +void HandleMainMenuUIResolutionChange(); +bool HandleMainMenuUIClick(Window *window, const Point &pt); diff --git a/GpApp/MainWindow.cpp b/GpApp/MainWindow.cpp index 6be3e07..0a278f1 100644 --- a/GpApp/MainWindow.cpp +++ b/GpApp/MainWindow.cpp @@ -30,8 +30,6 @@ void DrawOnSplash (DrawSurface *surface); -void SetPaletteToGrays (void); -void HardDrawMainWindow (void); void KeepWindowInBounds(Window *window); CTabHandle theCTab; @@ -53,6 +51,7 @@ Boolean fadeGraysOut, isDoColorFade, splashDrawn; extern short toolSelected; extern Boolean noRoomAtAll, isUseSecondScreen; extern Boolean quickerTransitions, houseIsReadOnly; +extern Boolean menusUp; //============================================================== Functions //-------------------------------------------------------------- DrawOnSplash @@ -111,7 +110,12 @@ void RedrawSplashScreen (void) CopyRectMainToWork(&workSrcRect); mainWindow->GetDrawSurface()->m_port.SetDirty(PortabilityLayer::QDPortDirtyFlag_Contents); - PortabilityLayer::MenuManager::GetInstance()->SetMenuVisible(true); + + if (!thisMac.isTouchscreen) + { + menusUp = true; + PortabilityLayer::MenuManager::GetInstance()->SetMenuVisible(true); + } } //-------------------------------------------------------------- UpdateMainWindow diff --git a/GpApp/Menu.cpp b/GpApp/Menu.cpp index b5a8ed1..2a4e748 100644 --- a/GpApp/Menu.cpp +++ b/GpApp/Menu.cpp @@ -15,6 +15,7 @@ #include "DialogManager.h" #include "DialogUtils.h" #include "Externs.h" +#include "Environ.h" #include "House.h" #include "MenuManager.h" #include "ObjectEdit.h" @@ -417,6 +418,13 @@ void DoOptionsMenu (short theItem) } } CloseMainWindow(); + + if (thisMac.isTouchscreen) + { + menusUp = false; + PortabilityLayer::MenuManager::GetInstance()->SetMenuVisible(false); + } + OpenMainWindow(); incrementModeTime = TickCount() + kIdleSplashTicks; } @@ -425,6 +433,10 @@ void DoOptionsMenu (short theItem) theMode = kEditMode; StopTheMusic(); CloseMainWindow(); + + menusUp = true; + PortabilityLayer::MenuManager::GetInstance()->SetMenuVisible(true); + OpenMainWindow(); OpenCloseEditWindows(); } diff --git a/GpApp/SourceExport.cpp b/GpApp/SourceExport.cpp index c8a01ba..aaed992 100644 --- a/GpApp/SourceExport.cpp +++ b/GpApp/SourceExport.cpp @@ -9,6 +9,7 @@ #include "PLStandardColors.h" #include "PLSysCalls.h" #include "RenderedFont.h" +#include "GpApplicationName.h" #include "GpRenderedFontMetrics.h" #include "ResolveCachingColor.h" #include "ZipFile.h" @@ -711,7 +712,7 @@ bool ExportSourceToStream (GpIOStream *stream) void DoExportSourceCode (void) { - GpIOStream *stream = PortabilityLayer::HostFileSystem::GetInstance()->OpenFile(PortabilityLayer::VirtualDirectories::kSourceExport, "SourceExport.zip", true, GpFileCreationDispositions::kCreateOrOverwrite); + GpIOStream *stream = PortabilityLayer::HostFileSystem::GetInstance()->OpenFile(PortabilityLayer::VirtualDirectories::kSourceExport, GP_APPLICATION_NAME "SourceCode.zip", true, GpFileCreationDispositions::kCreateOrOverwrite); if (!stream) return; diff --git a/PortabilityLayer/FontManager.cpp b/PortabilityLayer/FontManager.cpp index 939ca8f..5b88b38 100644 --- a/PortabilityLayer/FontManager.cpp +++ b/PortabilityLayer/FontManager.cpp @@ -25,6 +25,8 @@ namespace PortabilityLayer FontFamily *GetSystemFont(int textSize, int variationFlags) const override; FontFamily *GetApplicationFont(int textSize, int variationFlags) const override; + FontFamily *GetHandwritingFont(int textSize, int variationFlags) const override; + FontFamily *GetMonospaceFont(int textSize, int variationFlags) const override; RenderedFont *GetRenderedFont(IGpFont *font, int size, bool aa, FontHacks fontHacks) override; RenderedFont *GetRenderedFontFromFamily(FontFamily *font, int size, bool aa, int flags) override; @@ -38,6 +40,8 @@ namespace PortabilityLayer static const unsigned int kNumCachedRenderedFonts = 32; static const int kSystemFontCacheID = 1; static const int kApplicationFontCacheID = 2; + static const int kHandwritingFontCacheID = 3; + static const int kMonospaceFontCacheID = 3; static const int kFontCacheVersion = 1; static const int kFontCacheNameSize = 64; @@ -59,6 +63,8 @@ namespace PortabilityLayer FontFamily *m_systemFont; FontFamily *m_applicationFont; + FontFamily *m_handwritingFont; + FontFamily *m_monospaceFont; uint32_t m_usageCounter; CachedRenderedFont m_cachedRenderedFonts[kNumCachedRenderedFonts]; @@ -70,6 +76,8 @@ namespace PortabilityLayer { m_systemFont = FontFamily::Create(kSystemFontCacheID); m_applicationFont = FontFamily::Create(kApplicationFontCacheID); + m_handwritingFont = FontFamily::Create(kHandwritingFontCacheID); + m_monospaceFont = FontFamily::Create(kMonospaceFontCacheID); if (m_systemFont) m_systemFont->AddFont(FontFamilyFlag_None, "Fonts/OpenSans/OpenSans-ExtraBold.ttf", FontHacks_None); @@ -80,6 +88,12 @@ namespace PortabilityLayer m_applicationFont->AddFont(FontFamilyFlag_Bold, "Fonts/OpenSans/OpenSans-Bold.ttf", FontHacks_None); } + if (m_handwritingFont) + m_handwritingFont->AddFont(FontFamilyFlag_None, "Fonts/GochiHand/GochiHand-Regular.ttf", FontHacks_None); + + if (m_monospaceFont) + m_monospaceFont->AddFont(FontFamilyFlag_None, "Fonts/Roboto/RobotoMono-Regular.ttf", FontHacks_None); + memset(m_cachedRenderedFonts, 0, sizeof(m_cachedRenderedFonts)); } @@ -91,13 +105,13 @@ namespace PortabilityLayer if (m_applicationFont) m_applicationFont->Destroy(); - IGpFontHandler *hfh = HostFontHandler::GetInstance(); + if (m_handwritingFont) + m_handwritingFont->Destroy(); - if (m_systemFont) - { - m_systemFont->Destroy(); - m_systemFont = nullptr; - } + if (m_monospaceFont) + m_monospaceFont->Destroy(); + + IGpFontHandler *hfh = HostFontHandler::GetInstance(); for (int i = 0; i < sizeof(m_cachedRenderedFonts) / sizeof(m_cachedRenderedFonts[0]); i++) { @@ -109,7 +123,6 @@ namespace PortabilityLayer FontFamily *FontManagerImpl::GetSystemFont(int textSize, int variationFlags) const { - (void)textSize; return m_systemFont; } @@ -121,6 +134,16 @@ namespace PortabilityLayer return m_applicationFont; } + FontFamily *FontManagerImpl::GetHandwritingFont(int textSize, int variationFlags) const + { + return m_handwritingFont; + } + + FontFamily *FontManagerImpl::GetMonospaceFont(int textSize, int variationFlags) const + { + return m_monospaceFont; + } + RenderedFont *FontManagerImpl::GetRenderedFont(IGpFont *font, int size, bool aa, FontHacks fontHacks) { CachedRenderedFont *newCacheSlot = &m_cachedRenderedFonts[0]; diff --git a/PortabilityLayer/FontManager.h b/PortabilityLayer/FontManager.h index 0692679..c91d3e7 100644 --- a/PortabilityLayer/FontManager.h +++ b/PortabilityLayer/FontManager.h @@ -17,6 +17,8 @@ namespace PortabilityLayer virtual FontFamily *GetSystemFont(int fontSize, int variationFlags) const = 0; virtual FontFamily *GetApplicationFont(int fontSize, int variationFlags) const = 0; + virtual FontFamily *GetHandwritingFont(int fontSize, int variationFlags) const = 0; + virtual FontFamily *GetMonospaceFont(int fontSize, int variationFlags) const = 0; virtual RenderedFont *GetRenderedFont(IGpFont *font, int size, bool aa, FontHacks fontHacks) = 0; virtual RenderedFont *GetRenderedFontFromFamily(FontFamily *fontFamily, int fontSize, bool aa, int flags) = 0; diff --git a/PortabilityLayer/MenuManager.cpp b/PortabilityLayer/MenuManager.cpp index 61183ba..807451c 100644 --- a/PortabilityLayer/MenuManager.cpp +++ b/PortabilityLayer/MenuManager.cpp @@ -208,12 +208,12 @@ namespace PortabilityLayer static const unsigned int kIconResID = 128; static const unsigned int kMenuFontSize = 12; - static const unsigned int kTouchScreenMenuFontSize = 24; + static const unsigned int kTouchScreenMenuFontSize = 40; static const unsigned int kMenuBarIconYOffset = 2; static const unsigned int kMenuBarTextYOffset = 14; - static const unsigned int kTouchScreenMenuBarTextYOffset = 26; + static const unsigned int kTouchScreenMenuBarTextYOffset = 40; static const unsigned int kMenuBarHeight = 20; - static const unsigned int kTouchscreenMenuBarHeight = 38; + static const unsigned int kTouchscreenMenuBarHeight = 54; static const unsigned int kMenuBarItemPadding = 6; static const unsigned int kMenuBarInitialPadding = 16; @@ -645,6 +645,9 @@ namespace PortabilityLayer bool MenuManagerImpl::IsPointInMenuBar(const Vec2i &point) const { + if (!m_menuBarVisible) + return false; + return IsYInMenuBarRange(point.m_y); } diff --git a/PortabilityLayer/PLCore.cpp b/PortabilityLayer/PLCore.cpp index 9d92fcc..f3ad712 100644 --- a/PortabilityLayer/PLCore.cpp +++ b/PortabilityLayer/PLCore.cpp @@ -647,6 +647,9 @@ bool WaitForEvent(TimeTaggedVOSEvent *eventOut, uint32_t ticks) Delay(1, nullptr); ticks--; + + if (ticks == 0) + break; } return false; diff --git a/PortabilityLayer/PLQDraw.cpp b/PortabilityLayer/PLQDraw.cpp index a52fbe4..2e0bb0a 100644 --- a/PortabilityLayer/PLQDraw.cpp +++ b/PortabilityLayer/PLQDraw.cpp @@ -2026,6 +2026,24 @@ PortabilityLayer::RenderedFont *GetSystemFont(int size, int variationFlags, bool return PortabilityLayer::FontManager::GetInstance()->GetRenderedFontFromFamily(fontFamily, size, aa, variationFlags); } +PortabilityLayer::RenderedFont *GetHandwritingFont(int size, int variationFlags, bool aa) +{ + PortabilityLayer::FontFamily *fontFamily = PortabilityLayer::FontManager::GetInstance()->GetHandwritingFont(size, variationFlags); + if (!fontFamily) + return nullptr; + + return PortabilityLayer::FontManager::GetInstance()->GetRenderedFontFromFamily(fontFamily, size, aa, variationFlags); +} + +PortabilityLayer::RenderedFont *GetMonospaceFont(int size, int variationFlags, bool aa) +{ + PortabilityLayer::FontFamily *fontFamily = PortabilityLayer::FontManager::GetInstance()->GetMonospaceFont(size, variationFlags); + if (!fontFamily) + return nullptr; + + return PortabilityLayer::FontManager::GetInstance()->GetRenderedFontFromFamily(fontFamily, size, aa, variationFlags); +} + #include "stb_image_write.h" void DebugPixMap(PixMap **pixMapH, const char *outName) diff --git a/PortabilityLayer/PLQDraw.h b/PortabilityLayer/PLQDraw.h index 3f20d1e..dd25652 100644 --- a/PortabilityLayer/PLQDraw.h +++ b/PortabilityLayer/PLQDraw.h @@ -93,6 +93,8 @@ Boolean SectRect(const Rect *rectA, const Rect *rectB, Rect *outIntersection); PortabilityLayer::RenderedFont *GetApplicationFont(int size, int variationFlags, bool aa); PortabilityLayer::RenderedFont *GetSystemFont(int size, int variationFlags, bool aa); +PortabilityLayer::RenderedFont *GetHandwritingFont(int size, int variationFlags, bool aa); +PortabilityLayer::RenderedFont *GetMonospaceFont(int size, int variationFlags, bool aa); inline RGBColor::RGBColor(uint8_t r, uint8_t g, uint8_t b) diff --git a/PortabilityLayer/PLResourceManager.cpp b/PortabilityLayer/PLResourceManager.cpp index 66aaffb..de1f4c8 100644 --- a/PortabilityLayer/PLResourceManager.cpp +++ b/PortabilityLayer/PLResourceManager.cpp @@ -276,7 +276,7 @@ namespace PortabilityLayer extension = kPICTExtension; outValidationRule = ResourceValidationRules::kBMP; } - else if (resTypeID == ResTypeID('STR#')) + else if (resTypeID == ResTypeID('STR#') || resTypeID == ResTypeID('LICS')) extension = ".txt"; else if (resTypeID == ResTypeID('DITL') || resTypeID == ResTypeID('muvi')) extension = ".json"; diff --git a/PortabilityLayer/WindowManager.cpp b/PortabilityLayer/WindowManager.cpp index e2e23af..d63668d 100644 --- a/PortabilityLayer/WindowManager.cpp +++ b/PortabilityLayer/WindowManager.cpp @@ -1108,7 +1108,8 @@ namespace PortabilityLayer void WindowManagerImpl::FindWindow(const Point &point, Window **outWindow, short *outRegion) const { - if (PortabilityLayer::MenuManager::GetInstance()->IsPointInMenuBar(PortabilityLayer::Vec2i(point.h, point.v))) + PortabilityLayer::MenuManager *menuManager = PortabilityLayer::MenuManager::GetInstance(); + if (menuManager->IsPointInMenuBar(PortabilityLayer::Vec2i(point.h, point.v))) { if (outWindow) *outWindow = nullptr; diff --git a/Resources/Fonts/GochiHand/GochiHand-Regular.ttf b/Resources/Fonts/GochiHand/GochiHand-Regular.ttf new file mode 100644 index 0000000..13afabd Binary files /dev/null and b/Resources/Fonts/GochiHand/GochiHand-Regular.ttf differ diff --git a/Resources/Fonts/GochiHand/OFL.txt b/Resources/Fonts/GochiHand/OFL.txt new file mode 100644 index 0000000..ffb8605 --- /dev/null +++ b/Resources/Fonts/GochiHand/OFL.txt @@ -0,0 +1,94 @@ +Copyright (c) 2011, Juan Pablo del Peral (juan@huertatipografica.com.ar), +with Reserved Font Names "Gochi" and "Gochi Hand" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/Resources/Fonts/Roboto/LICENSE.txt b/Resources/Fonts/Roboto/LICENSE.txt new file mode 100644 index 0000000..75b5248 --- /dev/null +++ b/Resources/Fonts/Roboto/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Resources/Fonts/Roboto/RobotoMono-Regular.ttf b/Resources/Fonts/Roboto/RobotoMono-Regular.ttf new file mode 100644 index 0000000..7c4ce36 Binary files /dev/null and b/Resources/Fonts/Roboto/RobotoMono-Regular.ttf differ