├── .gitignore ├── CHANGELOG.txt ├── LICENSE ├── LICENSE.txt ├── README ├── Resources ├── Images │ ├── Background-72.jpg │ ├── Background-72@2x.jpg │ ├── Background.jpg │ ├── Background@2x.jpg │ ├── Buttons │ │ ├── Clear.png │ │ ├── Clear@2x.png │ │ ├── Eraser.png │ │ ├── Eraser@2x.png │ │ ├── Save.png │ │ ├── Save@2x.png │ │ ├── arrow-down.png │ │ ├── arrow-down@2x.png │ │ ├── arrow-up.png │ │ ├── arrow-up@2x.png │ │ ├── pen.png │ │ ├── pen@2x.png │ │ ├── undo.png │ │ └── undo@2x.png │ ├── Letters-72 │ │ ├── 0.png │ │ ├── 0@2x.png │ │ ├── 1.png │ │ ├── 1@2x.png │ │ ├── 2.png │ │ ├── 2@2x.png │ │ ├── 3.png │ │ ├── 3@2x.png │ │ ├── 4.png │ │ ├── 4@2x.png │ │ ├── 5.png │ │ ├── 5@2x.png │ │ ├── 6.png │ │ ├── 6@2x.png │ │ ├── 7.png │ │ ├── 7@2x.png │ │ ├── 8.png │ │ ├── 8@2x.png │ │ ├── 9.png │ │ ├── 9@2x.png │ │ ├── a.png │ │ ├── a@2x.png │ │ ├── b.png │ │ ├── b@2x.png │ │ ├── c.png │ │ ├── c@2x.png │ │ ├── d.png │ │ ├── d@2x.png │ │ ├── e.png │ │ ├── e@2x.png │ │ ├── f.png │ │ ├── f@2x.png │ │ ├── g.png │ │ ├── g@2x.png │ │ ├── h.png │ │ ├── h@2x.png │ │ ├── i.png │ │ ├── i@2x.png │ │ ├── j.png │ │ ├── j@2x.png │ │ ├── k.png │ │ ├── k@2x.png │ │ ├── l.png │ │ ├── l@2x.png │ │ ├── m.png │ │ ├── m@2x.png │ │ ├── n.png │ │ ├── n@2x.png │ │ ├── o.png │ │ ├── o@2x.png │ │ ├── p.png │ │ ├── p@2x.png │ │ ├── q.png │ │ ├── q@2x.png │ │ ├── r.png │ │ ├── r@2x.png │ │ ├── s.png │ │ ├── s@2x.png │ │ ├── t.png │ │ ├── t@2x.png │ │ ├── u.png │ │ ├── u@2x.png │ │ ├── v.png │ │ ├── v@2x.png │ │ ├── w.png │ │ ├── w@2x.png │ │ ├── x.png │ │ ├── x@2x.png │ │ ├── y.png │ │ ├── y@2x.png │ │ ├── z.png │ │ └── z@2x.png │ ├── Letters │ │ ├── 0.png │ │ ├── 0@2x.png │ │ ├── 1.png │ │ ├── 1@2x.png │ │ ├── 2.png │ │ ├── 2@2x.png │ │ ├── 3.png │ │ ├── 3@2x.png │ │ ├── 4.png │ │ ├── 4@2x.png │ │ ├── 5.png │ │ ├── 5@2x.png │ │ ├── 6.png │ │ ├── 6@2x.png │ │ ├── 7.png │ │ ├── 7@2x.png │ │ ├── 8.png │ │ ├── 8@2x.png │ │ ├── 9.png │ │ ├── 9@2x.png │ │ ├── a.png │ │ ├── a@2x.png │ │ ├── b.png │ │ ├── b@2x.png │ │ ├── c.png │ │ ├── c@2x.png │ │ ├── d.png │ │ ├── d@2x.png │ │ ├── e.png │ │ ├── e@2x.png │ │ ├── f.png │ │ ├── f@2x.png │ │ ├── g.png │ │ ├── g@2x.png │ │ ├── h.png │ │ ├── h@2x.png │ │ ├── i.png │ │ ├── i@2x.png │ │ ├── j.png │ │ ├── j@2x.png │ │ ├── k.png │ │ ├── k@2x.png │ │ ├── l.png │ │ ├── l@2x.png │ │ ├── m.png │ │ ├── m@2x.png │ │ ├── n.png │ │ ├── n@2x.png │ │ ├── o.png │ │ ├── o@2x.png │ │ ├── p.png │ │ ├── p@2x.png │ │ ├── q.png │ │ ├── q@2x.png │ │ ├── r.png │ │ ├── r@2x.png │ │ ├── s.png │ │ ├── s@2x.png │ │ ├── t.png │ │ ├── t@2x.png │ │ ├── u.png │ │ ├── u@2x.png │ │ ├── v.png │ │ ├── v@2x.png │ │ ├── w.png │ │ ├── w@2x.png │ │ ├── x.png │ │ ├── x@2x.png │ │ ├── y.png │ │ ├── y@2x.png │ │ ├── z.png │ │ └── z@2x.png │ ├── PinkLine@2x.png │ ├── colorPicker.png │ ├── colorPicker@2x.png │ ├── handle.png │ ├── handle@2x.png │ ├── pinkLine.png │ ├── selectedLetter.png │ ├── selectedLetter@2x.png │ ├── tile-dark.png │ └── tile-dark@2x.png ├── android │ ├── appicon.png │ └── default.png ├── app.js ├── data │ └── settings.js ├── iphone │ ├── Default-568h@2x.png │ ├── Default-Landscape.png │ ├── Default-Landscape@2x.png │ ├── Default-Portrait.png │ ├── Default-Portrait@2x.png │ ├── Default.png │ ├── Default@2x.png │ ├── appicon-29.png │ ├── appicon-29@2x.png │ ├── appicon-60.png │ ├── appicon-60@2x.png │ ├── appicon-72.png │ ├── appicon-72@2x.png │ ├── appicon-76.png │ ├── appicon-76@2x.png │ ├── appicon-Small-40.png │ ├── appicon-Small-40@2x.png │ ├── appicon-small-50.png │ ├── appicon-small-50@2x.png │ ├── appicon-small.png │ ├── appicon-small@2x.png │ ├── appicon.png │ ├── appicon@2x.png │ ├── iTunesArtwork.png │ └── iTunesArtwork@2x.png ├── lib │ ├── animations.js │ ├── events.js │ └── utils.js └── ui │ ├── body.js │ ├── colorPicker.js │ ├── paintView.js │ ├── toast.js │ ├── top.lower.js │ └── top.upper.js ├── manifest ├── psd ├── icon-ios.psd ├── icon-ios7.psd ├── ui.psd └── ui@2x.psd ├── screenshots ├── i4.1.png ├── i4.2.png ├── i4.3.png ├── i4.4.png ├── i5.1.png ├── i5.2.png ├── i5.3.png ├── i5.4.png ├── ip3.1.png ├── ip3.2.png ├── ip3.3.png └── ip3.4.png └── tiapp.xml /.gitignore: -------------------------------------------------------------------------------- 1 | build/iphone/* 2 | modules/iphone/* 3 | .DS_Store 4 | .project 5 | .settings 6 | build.log 7 | build/* 8 | modules 9 | /.idea/ -------------------------------------------------------------------------------- /CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | v1.0 2 | Internal prototype release -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2009-2011 Appcelerator, Inc. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | (or the full text of the license is below) 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. 16 | 17 | 18 | 19 | Apache License 20 | Version 2.0, January 2004 21 | http://www.apache.org/licenses/ 22 | 23 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 24 | 25 | 1. Definitions. 26 | 27 | "License" shall mean the terms and conditions for use, reproduction, 28 | and distribution as defined by Sections 1 through 9 of this document. 29 | 30 | "Licensor" shall mean the copyright owner or entity authorized by 31 | the copyright owner that is granting the License. 32 | 33 | "Legal Entity" shall mean the union of the acting entity and all 34 | other entities that control, are controlled by, or are under common 35 | control with that entity. For the purposes of this definition, 36 | "control" means (i) the power, direct or indirect, to cause the 37 | direction or management of such entity, whether by contract or 38 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 39 | outstanding shares, or (iii) beneficial ownership of such entity. 40 | 41 | "You" (or "Your") shall mean an individual or Legal Entity 42 | exercising permissions granted by this License. 43 | 44 | "Source" form shall mean the preferred form for making modifications, 45 | including but not limited to software source code, documentation 46 | source, and configuration files. 47 | 48 | "Object" form shall mean any form resulting from mechanical 49 | transformation or translation of a Source form, including but 50 | not limited to compiled object code, generated documentation, 51 | and conversions to other media types. 52 | 53 | "Work" shall mean the work of authorship, whether in Source or 54 | Object form, made available under the License, as indicated by a 55 | copyright notice that is included in or attached to the work 56 | (an example is provided in the Appendix below). 57 | 58 | "Derivative Works" shall mean any work, whether in Source or Object 59 | form, that is based on (or derived from) the Work and for which the 60 | editorial revisions, annotations, elaborations, or other modifications 61 | represent, as a whole, an original work of authorship. For the purposes 62 | of this License, Derivative Works shall not include works that remain 63 | separable from, or merely link (or bind by name) to the interfaces of, 64 | the Work and Derivative Works thereof. 65 | 66 | "Contribution" shall mean any work of authorship, including 67 | the original version of the Work and any modifications or additions 68 | to that Work or Derivative Works thereof, that is intentionally 69 | submitted to Licensor for inclusion in the Work by the copyright owner 70 | or by an individual or Legal Entity authorized to submit on behalf of 71 | the copyright owner. For the purposes of this definition, "submitted" 72 | means any form of electronic, verbal, or written communication sent 73 | to the Licensor or its representatives, including but not limited to 74 | communication on electronic mailing lists, source code control systems, 75 | and issue tracking systems that are managed by, or on behalf of, the 76 | Licensor for the purpose of discussing and improving the Work, but 77 | excluding communication that is conspicuously marked or otherwise 78 | designated in writing by the copyright owner as "Not a Contribution." 79 | 80 | "Contributor" shall mean Licensor and any individual or Legal Entity 81 | on behalf of whom a Contribution has been received by Licensor and 82 | subsequently incorporated within the Work. 83 | 84 | 2. Grant of Copyright License. Subject to the terms and conditions of 85 | this License, each Contributor hereby grants to You a perpetual, 86 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 87 | copyright license to reproduce, prepare Derivative Works of, 88 | publicly display, publicly perform, sublicense, and distribute the 89 | Work and such Derivative Works in Source or Object form. 90 | 91 | 3. Grant of Patent License. Subject to the terms and conditions of 92 | this License, each Contributor hereby grants to You a perpetual, 93 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 94 | (except as stated in this section) patent license to make, have made, 95 | use, offer to sell, sell, import, and otherwise transfer the Work, 96 | where such license applies only to those patent claims licensable 97 | by such Contributor that are necessarily infringed by their 98 | Contribution(s) alone or by combination of their Contribution(s) 99 | with the Work to which such Contribution(s) was submitted. If You 100 | institute patent litigation against any entity (including a 101 | cross-claim or counterclaim in a lawsuit) alleging that the Work 102 | or a Contribution incorporated within the Work constitutes direct 103 | or contributory patent infringement, then any patent licenses 104 | granted to You under this License for that Work shall terminate 105 | as of the date such litigation is filed. 106 | 107 | 4. Redistribution. You may reproduce and distribute copies of the 108 | Work or Derivative Works thereof in any medium, with or without 109 | modifications, and in Source or Object form, provided that You 110 | meet the following conditions: 111 | 112 | (a) You must give any other recipients of the Work or 113 | Derivative Works a copy of this License; and 114 | 115 | (b) You must cause any modified files to carry prominent notices 116 | stating that You changed the files; and 117 | 118 | (c) You must retain, in the Source form of any Derivative Works 119 | that You distribute, all copyright, patent, trademark, and 120 | attribution notices from the Source form of the Work, 121 | excluding those notices that do not pertain to any part of 122 | the Derivative Works; and 123 | 124 | (d) If the Work includes a "NOTICE" text file as part of its 125 | distribution, then any Derivative Works that You distribute must 126 | include a readable copy of the attribution notices contained 127 | within such NOTICE file, excluding those notices that do not 128 | pertain to any part of the Derivative Works, in at least one 129 | of the following places: within a NOTICE text file distributed 130 | as part of the Derivative Works; within the Source form or 131 | documentation, if provided along with the Derivative Works; or, 132 | within a display generated by the Derivative Works, if and 133 | wherever such third-party notices normally appear. The contents 134 | of the NOTICE file are for informational purposes only and 135 | do not modify the License. You may add Your own attribution 136 | notices within Derivative Works that You distribute, alongside 137 | or as an addendum to the NOTICE text from the Work, provided 138 | that such additional attribution notices cannot be construed 139 | as modifying the License. 140 | 141 | You may add Your own copyright statement to Your modifications and 142 | may provide additional or different license terms and conditions 143 | for use, reproduction, or distribution of Your modifications, or 144 | for any such Derivative Works as a whole, provided Your use, 145 | reproduction, and distribution of the Work otherwise complies with 146 | the conditions stated in this License. 147 | 148 | 5. Submission of Contributions. Unless You explicitly state otherwise, 149 | any Contribution intentionally submitted for inclusion in the Work 150 | by You to the Licensor shall be under the terms and conditions of 151 | this License, without any additional terms or conditions. 152 | Notwithstanding the above, nothing herein shall supersede or modify 153 | the terms of any separate license agreement you may have executed 154 | with Licensor regarding such Contributions. 155 | 156 | 6. Trademarks. This License does not grant permission to use the trade 157 | names, trademarks, service marks, or product names of the Licensor, 158 | except as required for reasonable and customary use in describing the 159 | origin of the Work and reproducing the content of the NOTICE file. 160 | 161 | 7. Disclaimer of Warranty. Unless required by applicable law or 162 | agreed to in writing, Licensor provides the Work (and each 163 | Contributor provides its Contributions) on an "AS IS" BASIS, 164 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 165 | implied, including, without limitation, any warranties or conditions 166 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 167 | PARTICULAR PURPOSE. You are solely responsible for determining the 168 | appropriateness of using or redistributing the Work and assume any 169 | risks associated with Your exercise of permissions under this License. 170 | 171 | 8. Limitation of Liability. In no event and under no legal theory, 172 | whether in tort (including negligence), contract, or otherwise, 173 | unless required by applicable law (such as deliberate and grossly 174 | negligent acts) or agreed to in writing, shall any Contributor be 175 | liable to You for damages, including any direct, indirect, special, 176 | incidental, or consequential damages of any character arising as a 177 | result of this License or out of the use or inability to use the 178 | Work (including but not limited to damages for loss of goodwill, 179 | work stoppage, computer failure or malfunction, or any and all 180 | other commercial damages or losses), even if such Contributor 181 | has been advised of the possibility of such damages. 182 | 183 | 9. Accepting Warranty or Additional Liability. While redistributing 184 | the Work or Derivative Works thereof, You may choose to offer, 185 | and charge a fee for, acceptance of support, warranty, indemnity, 186 | or other liability obligations and/or rights consistent with this 187 | License. However, in accepting such obligations, You may act only 188 | on Your own behalf and on Your sole responsibility, not on behalf 189 | of any other Contributor, and only if You agree to indemnify, 190 | defend, and hold each Contributor harmless for any liability 191 | incurred by, or claims asserted against, such Contributor by reason 192 | of your accepting any such warranty or additional liability. 193 | 194 | END OF TERMS AND CONDITIONS 195 | 196 | APPENDIX: How to apply the Apache License to your work. 197 | 198 | To apply the Apache License to your work, attach the following 199 | boilerplate notice, with the fields enclosed by brackets "[]" 200 | replaced with your own identifying information. (Don't include 201 | the brackets!) The text should be enclosed in the appropriate 202 | comment syntax for the file format. We also recommend that a 203 | file or class name and description of purpose be included on the 204 | same "printed page" as the copyright notice for easier 205 | identification within third-party archives. 206 | 207 | Copyright [yyyy] [name of copyright owner] 208 | 209 | Licensed under the Apache License, Version 2.0 (the "License"); 210 | you may not use this file except in compliance with the License. 211 | You may obtain a copy of the License at 212 | 213 | http://www.apache.org/licenses/LICENSE-2.0 214 | 215 | Unless required by applicable law or agreed to in writing, software 216 | distributed under the License is distributed on an "AS IS" BASIS, 217 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 218 | See the License for the specific language governing permissions and 219 | limitations under the License. -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Place your license text here. This file will be incorporated with your app at package time. -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | Welcome to the ABC's Writer open source project. 2 | 3 | ABC's Writer is licensed under the OSI approved Apache Public License (version 2). Please see the LICENSE file for specific details. 4 | 5 | ---------------------------------- 6 | Appcelerator, Appcelerator Titanium and associated marks and logos are 7 | trademarks of Appcelerator, Inc. 8 | 9 | Titanium is Copyright (c) 2009-2011 by Appcelerator, Inc. All Rights Reserved. 10 | 11 | Titanium is licensed under the Apache Public License (Version 2). Please 12 | see the LICENSE file for the full license. 13 | 14 | -------------------------------------------------------------------------------- /Resources/Images/Background-72.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Background-72.jpg -------------------------------------------------------------------------------- /Resources/Images/Background-72@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Background-72@2x.jpg -------------------------------------------------------------------------------- /Resources/Images/Background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Background.jpg -------------------------------------------------------------------------------- /Resources/Images/Background@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Background@2x.jpg -------------------------------------------------------------------------------- /Resources/Images/Buttons/Clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/Clear.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/Clear@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/Clear@2x.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/Eraser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/Eraser.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/Eraser@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/Eraser@2x.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/Save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/Save.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/Save@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/Save@2x.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/arrow-down.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/arrow-down@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/arrow-down@2x.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/arrow-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/arrow-up.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/arrow-up@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/arrow-up@2x.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/pen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/pen.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/pen@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/pen@2x.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/undo.png -------------------------------------------------------------------------------- /Resources/Images/Buttons/undo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Buttons/undo@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/0.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/0@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/1.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/1@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/2.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/2@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/3.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/3@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/4.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/4@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/5.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/5@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/6.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/6@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/7.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/7@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/7@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/8.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/8@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/8@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/9.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/9@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/9@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/a.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/a@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/a@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/b.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/b@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/b@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/c.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/c@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/c@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/d.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/d@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/d@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/e.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/e@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/e@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/f.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/f@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/f@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/g.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/g@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/g@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/h.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/h@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/i.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/i@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/i@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/j.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/j@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/j@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/k.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/k@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/k@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/l.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/l@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/l@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/m.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/m@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/m@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/n.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/n@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/n@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/o.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/o.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/o@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/o@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/p.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/p.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/p@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/p@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/q.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/q.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/q@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/q@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/r.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/r@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/r@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/s.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/s@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/s@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/t.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/t@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/t@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/u.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/u.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/u@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/u@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/v.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/v@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/v@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/w.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/w@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/w@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/x@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/x@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/y.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/y@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/y@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/z.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/z.png -------------------------------------------------------------------------------- /Resources/Images/Letters-72/z@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters-72/z@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/0.png -------------------------------------------------------------------------------- /Resources/Images/Letters/0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/0@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/1.png -------------------------------------------------------------------------------- /Resources/Images/Letters/1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/1@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/2.png -------------------------------------------------------------------------------- /Resources/Images/Letters/2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/2@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/3.png -------------------------------------------------------------------------------- /Resources/Images/Letters/3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/3@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/4.png -------------------------------------------------------------------------------- /Resources/Images/Letters/4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/4@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/5.png -------------------------------------------------------------------------------- /Resources/Images/Letters/5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/5@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/6.png -------------------------------------------------------------------------------- /Resources/Images/Letters/6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/6@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/7.png -------------------------------------------------------------------------------- /Resources/Images/Letters/7@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/7@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/8.png -------------------------------------------------------------------------------- /Resources/Images/Letters/8@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/8@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/9.png -------------------------------------------------------------------------------- /Resources/Images/Letters/9@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/9@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/a.png -------------------------------------------------------------------------------- /Resources/Images/Letters/a@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/a@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/b.png -------------------------------------------------------------------------------- /Resources/Images/Letters/b@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/b@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/c.png -------------------------------------------------------------------------------- /Resources/Images/Letters/c@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/c@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/d.png -------------------------------------------------------------------------------- /Resources/Images/Letters/d@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/d@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/e.png -------------------------------------------------------------------------------- /Resources/Images/Letters/e@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/e@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/f.png -------------------------------------------------------------------------------- /Resources/Images/Letters/f@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/f@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/g.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/g.png -------------------------------------------------------------------------------- /Resources/Images/Letters/g@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/g@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/h.png -------------------------------------------------------------------------------- /Resources/Images/Letters/h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/h@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/i.png -------------------------------------------------------------------------------- /Resources/Images/Letters/i@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/i@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/j.png -------------------------------------------------------------------------------- /Resources/Images/Letters/j@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/j@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/k.png -------------------------------------------------------------------------------- /Resources/Images/Letters/k@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/k@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/l.png -------------------------------------------------------------------------------- /Resources/Images/Letters/l@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/l@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/m.png -------------------------------------------------------------------------------- /Resources/Images/Letters/m@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/m@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/n.png -------------------------------------------------------------------------------- /Resources/Images/Letters/n@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/n@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/o.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/o.png -------------------------------------------------------------------------------- /Resources/Images/Letters/o@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/o@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/p.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/p.png -------------------------------------------------------------------------------- /Resources/Images/Letters/p@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/p@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/q.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/q.png -------------------------------------------------------------------------------- /Resources/Images/Letters/q@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/q@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/r.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/r.png -------------------------------------------------------------------------------- /Resources/Images/Letters/r@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/r@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/s.png -------------------------------------------------------------------------------- /Resources/Images/Letters/s@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/s@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/t.png -------------------------------------------------------------------------------- /Resources/Images/Letters/t@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/t@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/u.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/u.png -------------------------------------------------------------------------------- /Resources/Images/Letters/u@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/u@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/v.png -------------------------------------------------------------------------------- /Resources/Images/Letters/v@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/v@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/w.png -------------------------------------------------------------------------------- /Resources/Images/Letters/w@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/w@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/x@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/x@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/y.png -------------------------------------------------------------------------------- /Resources/Images/Letters/y@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/y@2x.png -------------------------------------------------------------------------------- /Resources/Images/Letters/z.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/z.png -------------------------------------------------------------------------------- /Resources/Images/Letters/z@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/Letters/z@2x.png -------------------------------------------------------------------------------- /Resources/Images/PinkLine@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/PinkLine@2x.png -------------------------------------------------------------------------------- /Resources/Images/colorPicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/colorPicker.png -------------------------------------------------------------------------------- /Resources/Images/colorPicker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/colorPicker@2x.png -------------------------------------------------------------------------------- /Resources/Images/handle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/handle.png -------------------------------------------------------------------------------- /Resources/Images/handle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/handle@2x.png -------------------------------------------------------------------------------- /Resources/Images/pinkLine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/pinkLine.png -------------------------------------------------------------------------------- /Resources/Images/selectedLetter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/selectedLetter.png -------------------------------------------------------------------------------- /Resources/Images/selectedLetter@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/selectedLetter@2x.png -------------------------------------------------------------------------------- /Resources/Images/tile-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/tile-dark.png -------------------------------------------------------------------------------- /Resources/Images/tile-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/Images/tile-dark@2x.png -------------------------------------------------------------------------------- /Resources/android/appicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/android/appicon.png -------------------------------------------------------------------------------- /Resources/android/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/android/default.png -------------------------------------------------------------------------------- /Resources/app.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This is a quick example of how to use the paint module in a real world application. 3 | */ 4 | var U = require('lib/utils'); 5 | 6 | var win = Ti.UI.createWindow({ 7 | backgroundImage: U.ipad ? '/images/background-72.jpg' : '/images/background.jpg', 8 | fullscreen: true 9 | }); 10 | 11 | require('ui/body').addToView(win); 12 | require('ui/paintView').init(); 13 | require('ui/paintView').addToView(win); 14 | require('ui/top.lower').addToView(win); 15 | require('ui/top.upper').addToView(win); 16 | 17 | win.open(); -------------------------------------------------------------------------------- /Resources/data/settings.js: -------------------------------------------------------------------------------- 1 | var E = require('lib/events'); 2 | 3 | /* 4 | Initialization. 5 | */ 6 | var version = 1; 7 | 8 | /* 9 | Public API. 10 | */ 11 | exports.defaultPenWidth = defineSetting('Double', 'defaultPenWidth', 10); 12 | exports.defaultPenColor = defineSetting('String', 'defaultPenColor', '#00ff00'); 13 | exports.defaultPenHueColor = defineSetting('String', 'defaultPenHueColor', '#00ff00'); 14 | exports.defaultPenStrokeHueRatio = defineSetting('Double', 'defaultPenStrokeHueRatio', 0.7); 15 | exports.defaultPenStrokeRatioX = defineSetting('Double', 'defaultPenStrokeRatioX', 0); 16 | exports.defaultPenStrokeRatioY = defineSetting('Double', 'defaultPenStrokeRatioY', 0); 17 | 18 | /* 19 | Implementation. 20 | */ 21 | function defineSetting(type, key, def) { 22 | return function(val) { 23 | var identifier = 'Settings-' + version + '-' + key, 24 | existing = Ti.App.Properties['get' + type](identifier, def); 25 | 26 | if (val !== undefined) { 27 | if (val !== existing) { 28 | Ti.App.Properties['set' + type](identifier, val); 29 | E.fireEvent('update' + key, { value: val }); 30 | } 31 | } 32 | else { 33 | return existing; 34 | } 35 | }; 36 | } -------------------------------------------------------------------------------- /Resources/iphone/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/Default-568h@2x.png -------------------------------------------------------------------------------- /Resources/iphone/Default-Landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/Default-Landscape.png -------------------------------------------------------------------------------- /Resources/iphone/Default-Landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/Default-Landscape@2x.png -------------------------------------------------------------------------------- /Resources/iphone/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/Default-Portrait.png -------------------------------------------------------------------------------- /Resources/iphone/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/Default-Portrait@2x.png -------------------------------------------------------------------------------- /Resources/iphone/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/Default.png -------------------------------------------------------------------------------- /Resources/iphone/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/Default@2x.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-29.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-29@2x.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-60.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-60@2x.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-72.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-72@2x.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-76.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-76@2x.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-Small-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-Small-40.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-Small-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-Small-40@2x.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-small-50.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-small-50@2x.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-small.png -------------------------------------------------------------------------------- /Resources/iphone/appicon-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon-small@2x.png -------------------------------------------------------------------------------- /Resources/iphone/appicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon.png -------------------------------------------------------------------------------- /Resources/iphone/appicon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/appicon@2x.png -------------------------------------------------------------------------------- /Resources/iphone/iTunesArtwork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/iTunesArtwork.png -------------------------------------------------------------------------------- /Resources/iphone/iTunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/Resources/iphone/iTunesArtwork@2x.png -------------------------------------------------------------------------------- /Resources/lib/animations.js: -------------------------------------------------------------------------------- 1 | /* 2 | State. 3 | */ 4 | var simplify = Ti.Platform.osname === 'mobileweb'; 5 | var currentFlashes = {}; 6 | const DEFAULT_FADE_LENGTH = 250; 7 | 8 | /* 9 | Public API. 10 | */ 11 | exports.chainAnimateForever = chainAnimateForever; 12 | exports.chainAnimate = chainAnimate; 13 | exports.toggleFlashing = toggleFlashing; 14 | exports.flash = flash; 15 | exports.shake = shake; 16 | exports.popOut = popOut; 17 | exports.popIn = popIn; 18 | exports.fade = fade; 19 | exports.fadeOutAndRemove = fadeOutAndRemove; 20 | exports.crossFade = crossFade; 21 | 22 | /* 23 | Implementation. 24 | */ 25 | function crossFade(viewFadingOut, viewFadingIn, duration, callback) { 26 | if (simplify) { 27 | viewFadingOut && (viewFadingOut.opacity = 0); 28 | viewFadingIn && (viewFadingIn.opacity = 1); 29 | callback && callback(); 30 | return; 31 | } 32 | 33 | if (viewFadingOut) { 34 | viewFadingOut.animate({ 35 | opacity: 0, 36 | duration: duration || DEFAULT_FADE_LENGTH 37 | }); 38 | } 39 | if (viewFadingIn) { 40 | viewFadingIn.animate({ 41 | opacity: 1, 42 | duration: duration || DEFAULT_FADE_LENGTH 43 | }); 44 | } 45 | if (callback) { 46 | setTimeout(callback, duration + DEFAULT_FADE_LENGTH); 47 | } 48 | } 49 | 50 | function fadeOutAndRemove(view, duration, callback, delay) { 51 | if (delay) { 52 | setTimeout(function() { 53 | fadeOutAndRemove(view, duration, callback); 54 | view = duration = callback = delay = null; 55 | }, delay); 56 | return; 57 | } 58 | if (view) { 59 | if (simplify) { 60 | view.opacity = 0; 61 | var parent = view.parent; 62 | parent && parent.remove(view); 63 | callback && callback(); 64 | return; 65 | } 66 | view.animate({ 67 | opacity: 0, 68 | duration: duration || DEFAULT_FADE_LENGTH 69 | }, function() { 70 | var parent = view.parent; 71 | parent && parent.remove(view); 72 | callback && callback(); 73 | view = duration = callback = delay = null; 74 | }); 75 | } 76 | } 77 | 78 | function fade(view, opacity, duration, delay, callback) { 79 | if (!view) { 80 | return; 81 | } 82 | if (simplify) { 83 | view.opacity = opacity || 0; 84 | callback && callback(); 85 | return; 86 | } 87 | if (delay && delay > 0) { 88 | setTimeout(function() { 89 | view.animate({ 90 | opacity: opacity || 0, 91 | duration: duration || DEFAULT_FADE_LENGTH 92 | }); 93 | callback && callback(); 94 | view = null; 95 | }, delay); 96 | } else { 97 | view.animate({ 98 | opacity: opacity || 0, 99 | duration: duration || DEFAULT_FADE_LENGTH 100 | }); 101 | callback && callback(); 102 | } 103 | } 104 | 105 | function popIn(view, sourceCenter, dialogCenter, callback) { 106 | if (simplify) { 107 | callback && callback(); 108 | return; 109 | } 110 | 111 | view.transform = (sourceCenter && dialogCenter) 112 | ? Ti.UI.create2DMatrix().translate(sourceCenter.x - dialogCenter.x, sourceCenter.y - dialogCenter.y).scale(0.1, 0.1) 113 | : Ti.UI.create2DMatrix().scale(0, 0); 114 | 115 | var animate1 = Ti.UI.createAnimation({ 116 | transform: Ti.UI.create2DMatrix().scale(1.1, 1.1), 117 | duration: DEFAULT_FADE_LENGTH 118 | }); 119 | var animate2 = Ti.UI.createAnimation({ 120 | transform: Ti.UI.create2DMatrix().scale(0.94, 0.94), 121 | duration: 100 122 | }); 123 | var animate3 = Ti.UI.createAnimation({ 124 | transform: Ti.UI.create2DMatrix(), 125 | duration: 150 126 | }); 127 | 128 | exports.chainAnimate(view, Ti.Platform.name === 'iPhone OS' 129 | ? [ animate1, animate2, animate3 ] // iOS bounces when popping things in 130 | : [ animate3 ], callback); // Others just pops them straight to size. 131 | } 132 | 133 | function popOut(view, sourceCenter, dialogCenter) { 134 | if (simplify) { 135 | view.transform = Ti.UI.create2DMatrix().scale(0, 0); 136 | return; 137 | } 138 | view.animate(Ti.UI.createAnimation({ 139 | transform: (sourceCenter && dialogCenter) 140 | ? Ti.UI.create2DMatrix().translate(sourceCenter.x - dialogCenter.x, sourceCenter.y - dialogCenter.y).scale(0.1, 0.1) 141 | : Ti.UI.create2DMatrix().scale(0, 0), 142 | duration: 200 143 | })); 144 | } 145 | 146 | function shake(view, delay) { 147 | var shake1 = Ti.UI.createAnimation({ 148 | transform: Ti.UI.create2DMatrix().translate(5, 0), 149 | duration: 100 150 | }); 151 | var shake2 = Ti.UI.createAnimation({ 152 | transform: Ti.UI.create2DMatrix().translate(-5, 0), 153 | duration: 100 154 | }); 155 | var shake3 = Ti.UI.createAnimation({ 156 | transform: Ti.UI.create2DMatrix().translate(5, 0), 157 | duration: 80 158 | }); 159 | var shake4 = Ti.UI.createAnimation({ 160 | transform: Ti.UI.create2DMatrix().translate(-5, 0), 161 | duration: 100 162 | }); 163 | var shake5 = Ti.UI.createAnimation({ 164 | transform: Ti.UI.create2DMatrix(), 165 | duration: 100 166 | }); 167 | if (delay) { 168 | setTimeout(function() { 169 | exports.chainAnimate(view, [ shake1, shake2, shake3, shake4, shake5 ]); 170 | view = shake1 = shake2 = shake3 = shake4 = shake5 = null; 171 | }, delay); 172 | } 173 | else { 174 | exports.chainAnimate(view, [ shake1, shake2, shake3, shake4, shake5 ]); 175 | } 176 | } 177 | 178 | function flash(view, delay, low, high) { 179 | var flash1 = Ti.UI.createAnimation({ 180 | opacity: low === undefined ? 0.7 : low, 181 | duration: 100 182 | }); 183 | var flash2 = Ti.UI.createAnimation({ 184 | opacity: high === undefined ? 1 : high, 185 | duration: 100 186 | }); 187 | var flash3 = Ti.UI.createAnimation({ 188 | opacity: low === undefined ? 0.7 : low, 189 | duration: 100 190 | }); 191 | var flash4 = Ti.UI.createAnimation({ 192 | opacity: high === undefined ? 1 : high, 193 | duration: 100 194 | }); 195 | if (delay) { 196 | setTimeout(function() { 197 | exports.chainAnimate(view, [ flash1, flash2, flash3, flash4 ]); 198 | view = flash1 = flash2 = flash3 = flash4 = null; 199 | }, delay); 200 | } 201 | else { 202 | return exports.chainAnimate(view, [ flash1, flash2, flash3, flash4 ]); 203 | } 204 | } 205 | 206 | function toggleFlashing(on, id, view) { 207 | if (on) { 208 | currentFlashes[id] = setInterval(function() { 209 | exports.flash(view); 210 | }, 1000); 211 | } 212 | else { 213 | clearInterval(currentFlashes[id]); 214 | } 215 | } 216 | 217 | function chainAnimate(view, animations, callback) { 218 | var animation; 219 | 220 | function step() { 221 | if (animation) { 222 | animation.removeEventListener('complete', step); 223 | animation = null; 224 | } 225 | if (animations.length == 0) { 226 | callback && callback(); 227 | view = animations = callback = step = null; 228 | return; 229 | } 230 | animation = animations.shift(); 231 | animation.addEventListener('complete', step); 232 | view.animate(animation); 233 | } 234 | 235 | step(); 236 | 237 | return function stop() { 238 | animation && animation.removeEventListener('complete', step); 239 | animation = null; 240 | } 241 | } 242 | 243 | function chainAnimateForever(view, animations) { 244 | for (var i = 0, l = animations.length; i < l; i++) { 245 | animations[i].addEventListener('complete', step); 246 | } 247 | 248 | var currentStep = 0; 249 | 250 | function step() { 251 | if (currentStep === -1) { 252 | return; 253 | } 254 | if (currentStep === animations.length) { 255 | currentStep = 0; 256 | } 257 | view.animate(animations[currentStep]); 258 | currentStep += 1; 259 | } 260 | 261 | function stop() { 262 | for (var i = 0, l = animations.length; i < l; i++) { 263 | animations[i].removeEventListener('complete', step); 264 | } 265 | 266 | view = animations = step = stop = currentStep = null; 267 | } 268 | 269 | step(); 270 | 271 | return stop; 272 | } -------------------------------------------------------------------------------- /Resources/lib/events.js: -------------------------------------------------------------------------------- 1 | var listeners = {}; 2 | 3 | exports.addEventListener = function(name, func) { 4 | if (!listeners[name]) { 5 | listeners[name] = []; 6 | } 7 | listeners[name].push(func); 8 | return exports; 9 | }; 10 | 11 | exports.hasEventListeners = function(name) { 12 | return !!listeners[name]; 13 | }; 14 | 15 | exports.clearEventListeners = function() { 16 | listeners = {}; 17 | return exports; 18 | }; 19 | 20 | exports.fireEvent = function(name, data) { 21 | if (listeners[name]) { 22 | var args = Array.prototype.slice.call(arguments, 1); 23 | for (var l in listeners[name]) { 24 | listeners[name][l].apply(this, args); 25 | } 26 | } 27 | return exports; 28 | }; 29 | 30 | exports.curryFireEvent = function(name, data) { 31 | var args = arguments; 32 | return function() { 33 | return exports.fireEvent.apply(this, args); 34 | }; 35 | }; 36 | 37 | exports.removeEventListener = function(name, func) { 38 | if (listeners[name]) { 39 | for (var l in listeners[name]) { 40 | if (listeners[name][l] === func) { 41 | listeners[name].splice(l, 1); 42 | break; 43 | } 44 | } 45 | } 46 | return exports; 47 | }; -------------------------------------------------------------------------------- /Resources/lib/utils.js: -------------------------------------------------------------------------------- 1 | exports.android = Ti.Platform.name === 'android'; 2 | exports.ios = Ti.Platform.name === 'iPhone OS'; 3 | exports.ipod = Ti.Platform.model.indexOf('iPod') >= 0; 4 | exports.iphone = Ti.Platform.model.indexOf('iPhone') >= 0; 5 | exports.ipad = Ti.Platform.osname === 'ipad'; 6 | exports.iosRetina = Ti.Platform.name === 'iPhone OS' && Ti.Platform.displayCaps.density == 'high'; 7 | exports.mobileweb = Ti.Platform.osname === 'mobileweb'; 8 | exports.tablet = Math.min(Ti.Platform.displayCaps.platformWidth, Ti.Platform.displayCaps.platformHeight) > 500; 9 | 10 | exports.dbg = false; 11 | 12 | exports.def = function(dict, defs) { 13 | dict = dict || {}; 14 | // This implementation is a bit simplistic, but that's alright for now. Light and fast. 15 | for (var key in defs) { 16 | if (!defs.hasOwnProperty(key)) { 17 | continue; 18 | } 19 | if (dict[key] === undefined || dict[key] === 'undefined') { 20 | dict[key] = defs[key]; 21 | } 22 | } 23 | return dict; 24 | }; 25 | 26 | /** 27 | * Throws an exception if an argument has not been provided, or is not of the expected type. 28 | * @param name The string display name of the argument (such as 'data') 29 | * @param arg The actual provided argument 30 | * @param type The string value of the expected argument type (such as 'object' or 'string'). 31 | */ 32 | exports.requireArgument = function(name, arg, type) { 33 | if (arg === undefined) { 34 | throw 'Argument ' + name + ' was not provided!'; 35 | } 36 | if (typeof(arg) != type) { 37 | throw 'Argument ' + name + ' was an unexpected type! Expected: ' + type + ', Received: ' + typeof(arg); 38 | } 39 | }; 40 | 41 | exports.dpToPX = function(val) { 42 | if (!exports.android) { 43 | return val; 44 | } 45 | return val * Ti.Platform.displayCaps.dpi / 160; 46 | }; 47 | exports.pxToDP = function(val) { 48 | if (!exports.android) { 49 | return val; 50 | } 51 | return val / Ti.Platform.displayCaps.dpi * 160; 52 | }; 53 | exports.pointPXToDP = function(pt) { 54 | if (!exports.android) { 55 | return pt; 56 | } 57 | return { x: exports.pxToDP(pt.x), y: exports.pxToDP(pt.y) }; 58 | }; 59 | 60 | exports.currySingleUse = function(obj, methodName) { 61 | var args = Array.prototype.slice.call(arguments, 2); 62 | return function() { 63 | obj[methodName].apply(obj, args); 64 | obj = methodName = args = null; 65 | }; 66 | }; 67 | 68 | exports.gcd = function gcd(a, b) { 69 | if (b == 0) { 70 | return a; 71 | } else { 72 | return gcd(b, a % b); 73 | } 74 | }; 75 | 76 | exports.formatNumber = function(value) { 77 | value = String(value); 78 | var x = value.split('.'); 79 | var x1 = x[0]; 80 | var x2 = x.length > 1 ? '.' + x[1] : ''; 81 | var rgx = /(\d+)(\d{3})/; 82 | while (rgx.test(x1)) { 83 | x1 = x1.replace(rgx, '$1' + ',' + '$2'); 84 | } 85 | return x1 + x2; 86 | }; 87 | 88 | exports.formatCurrency = function(amount) { 89 | return String.formatCurrency(Number(amount)); 90 | }; 91 | 92 | exports.confirm = function(args) { 93 | var alertDialog = Ti.UI.createAlertDialog({ 94 | title: args.title || L('Confirm', 'Confirm)'), 95 | message: args.message || L('Are you sure?', 'Are you sure?'), 96 | buttonNames: [ 97 | args.no || L('No', 'No'), 98 | args.yes || L('Yes', 'Yes') 99 | ], 100 | cancel: 0 101 | }); 102 | alertDialog.addEventListener('click', function(evt) { 103 | if (evt.index) { 104 | args.callback && args.callback(args.evt || {}); 105 | } 106 | args = null; 107 | }); 108 | alertDialog.show(); 109 | }; 110 | 111 | /** 112 | * Returns a function that will only be executed after being called N times. 113 | * Taken from underscore.js. 114 | */ 115 | exports.after = function(times, func) { 116 | if (times <= 0) { 117 | return func(); 118 | } 119 | return function() { 120 | if (--times < 1) { 121 | return func.apply(this, arguments); 122 | } 123 | }; 124 | }; 125 | 126 | /** 127 | * Returns a function, that, as long as it continues to be invoked, will not be triggered. The function will be 128 | * called after it stops being called for N milliseconds. If `immediate` is passed, trigger the function on the 129 | * leading edge, instead of the trailing. 130 | * @param func 131 | * @param wait 132 | * @param immediate 133 | * @return {Function} 134 | */ 135 | exports.debounce = function(func, wait, immediate) { 136 | var timeout = null; 137 | return function() { 138 | var context = this, args = arguments; 139 | var later = function() { 140 | timeout = null; 141 | if (!immediate) { 142 | func.apply(context, args); 143 | } 144 | }; 145 | if (immediate && !timeout) { 146 | func.apply(context, args); 147 | } 148 | timeout !== null && clearTimeout(timeout); 149 | timeout = setTimeout(later, wait); 150 | }; 151 | }; 152 | 153 | exports.curryParallel = function(count, callback) { 154 | var results = []; 155 | 156 | if (count === 0) { 157 | callback(results.length ? results : undefined); 158 | return function() { 159 | }; 160 | } 161 | 162 | return function(result) { 163 | if (result) { 164 | results.push(result); 165 | } 166 | count -= 1; 167 | if (count <= 0) { 168 | callback && callback(results.length ? results : undefined); 169 | results = callback = null; 170 | } 171 | }; 172 | }; -------------------------------------------------------------------------------- /Resources/ui/body.js: -------------------------------------------------------------------------------- 1 | var U = require('lib/utils'), 2 | E = require('lib/events'); 3 | 4 | /* 5 | Public API. 6 | */ 7 | exports.addToView = addToView; 8 | 9 | /* 10 | Implementation. 11 | */ 12 | function addToView(win) { 13 | 14 | var container = Ti.UI.createView({ 15 | top: 40, right: 0, bottom: 0, left: 0, 16 | zIndex: 0 17 | }); 18 | win.add(container); 19 | 20 | var guideSize = U.ipad ? { 21 | width: 600, height: 375, 22 | topOffset: 96, 23 | barHeight: 280 24 | } : { 25 | width: 320, height: 200, 26 | topOffset: 52, 27 | barHeight: 150 28 | }; 29 | 30 | /** 31 | * Draw the center of the app. We'll create our paint view as well as the various guides. 32 | */ 33 | 34 | var guides = Ti.UI.createView({ 35 | height: guideSize.barHeight, 36 | opacity: 0.6, 37 | visible: false 38 | }); 39 | 40 | // top 41 | guides.add(Ti.UI.createView({ 42 | height: 1, top: 0, 43 | backgroundColor: '#82cafa' 44 | })); 45 | guides.add(Ti.UI.createView({ 46 | height: 1, top: 1, 47 | backgroundColor: '#000' 48 | })); 49 | 50 | // middle 51 | guides.add(Ti.UI.createImageView({ 52 | image: '/images/pinkLine.png', 53 | width: 1024, height: 2, 54 | bottom: guideSize.barHeight / 2, 55 | hires: true 56 | })); 57 | 58 | // bottom 59 | guides.add(Ti.UI.createView({ 60 | height: 1, bottom: 1, 61 | backgroundColor: '#82cafa' 62 | })); 63 | guides.add(Ti.UI.createView({ 64 | height: 1, bottom: 0, 65 | backgroundColor: '#000' 66 | })); 67 | 68 | container.add(guides); 69 | 70 | var letterContainer = Ti.UI.createView({ 71 | width: guideSize.width, height: guideSize.height + guideSize.topOffset 72 | }); 73 | var letterDisplay = Ti.UI.createView({ 74 | top: guideSize.topOffset, 75 | width: guideSize.width, height: guideSize.height 76 | }); 77 | letterContainer.add(letterDisplay); 78 | container.add(letterContainer); 79 | 80 | E.addEventListener('switchToLetter', switchToLetter); 81 | 82 | function switchToLetter(letter) { 83 | guides.visible = letter != ' '; 84 | letterDisplay.backgroundImage = letter != ' ' ? '/images/letters-72/' + letter.toLowerCase() + '.png' : null; 85 | Ti.App.Properties.setString('lastLetter', letter); 86 | } 87 | } -------------------------------------------------------------------------------- /Resources/ui/colorPicker.js: -------------------------------------------------------------------------------- 1 | var U = require('lib/utils'), 2 | A = require('lib/animations'), 3 | S = require('data/settings'); 4 | 5 | var paintMin = 1, paintMax = 50; 6 | var dragMin = 15, dragMax = 220; 7 | var colorDragMin = 75, colorDragMax = 287; 8 | 9 | var hues = [ 10 | [255, 0, 0], 11 | [255, 0, 255], 12 | [0, 0, 255], 13 | [0, 255, 255], 14 | [0, 255, 0], 15 | [255, 255, 0], 16 | [255, 0, 0] 17 | ]; 18 | 19 | exports.createView = function(args, paintView, penDot, penDotShadow, listener) { 20 | var pickerMode; 21 | 22 | var strokeWeight = S.defaultPenWidth(), 23 | strokeColor = S.defaultPenColor(), 24 | defaultHueColor = S.defaultPenHueColor(), 25 | lastHueColor = S.defaultPenHueColor(), 26 | lastHueRatio = S.defaultPenStrokeHueRatio(), 27 | lastStrokeRatioX = S.defaultPenStrokeRatioX(), 28 | lastStrokeRatioY = S.defaultPenStrokeRatioY(); 29 | /* 30 | Color Picker. 31 | */ 32 | var colorPicker = Ti.UI.createView(U.def(args, { 33 | width: 353, height: 259, 34 | touchEnabled: false, 35 | opacity: 0, 36 | zIndex: 3 37 | })); 38 | var colorFill = Ti.UI.createView({ 39 | backgroundColor: defaultHueColor, 40 | top: 20, right: 64, bottom: 20, left: 70, 41 | borderRadius: 3 42 | }); 43 | colorPicker.add(colorFill); 44 | colorPicker.add(Ti.UI.createView({ 45 | backgroundImage: '/images/colorPicker.png' 46 | })); 47 | 48 | var handles = { 49 | size: Ti.UI.createView({ 50 | backgroundImage: '/images/handle.png', 51 | width: 25, height: 25, 52 | left: 25, 53 | top: 0, 54 | touchEnabled: false 55 | }), 56 | color: Ti.UI.createView({ 57 | backgroundImage: '/images/handle.png', 58 | width: 25, height: 25, 59 | left: 150, 60 | top: 0, 61 | touchEnabled: false 62 | }), 63 | hue: Ti.UI.createView({ 64 | backgroundImage: '/images/handle.png', 65 | width: 25, height: 25, 66 | left: 305, 67 | top: 0, 68 | touchEnabled: false 69 | }) 70 | }; 71 | 72 | function updateHandleTop(id, percent) { 73 | handles[id].top = dragMin + (1 - percent) * (dragMax - dragMin); 74 | } 75 | 76 | function updateHandleTopLeft(id, percentX, percentY) { 77 | handles[id].applyProperties({ 78 | top: (dragMin + percentY * (dragMax - dragMin)), 79 | left: (colorDragMin + (1 - percentX) * (colorDragMax - colorDragMin - 8)) - 10 80 | }); 81 | } 82 | 83 | updateHandleTop('size', strokeWeight / paintMax); 84 | 85 | function pickerStart(evt) { 86 | if (evt.x < 62) { 87 | pickerMode = 'size'; 88 | } 89 | else if (evt.x < 295) { 90 | pickerMode = 'color'; 91 | } 92 | else { 93 | pickerMode = 'hue'; 94 | } 95 | } 96 | 97 | /** 98 | * Note that the algorithm for the color and hue selection was created by me (Dawson Toth) for another project. 99 | * @param evt 100 | */ 101 | function pickerMove(evt) { 102 | var percent, color; 103 | switch (pickerMode) { 104 | case 'size': 105 | percent = 1 - Math.min(Math.max(evt.y - dragMin, 0) / dragMax, 1); 106 | strokeWeight = Math.max(percent * paintMax, paintMin); 107 | invokeListener(); 108 | penDot && penDot.applyProperties({ width: strokeWeight, height: strokeWeight }); 109 | penDot && (penDot.borderRadius = strokeWeight / 2); 110 | penDotShadow && penDotShadow.applyProperties({ width: strokeWeight, height: strokeWeight }); 111 | penDotShadow && (penDotShadow.borderRadius = strokeWeight / 2); 112 | paintView && paintView.strokeWidth(strokeWeight); 113 | updateHandleTop('size', percent); 114 | break; 115 | case 'color': 116 | var whiteRatio = 1 - Math.min(Math.max(evt.x - colorDragMin, 0) / (colorDragMax - colorDragMin), 1); 117 | var blackRatio = Math.min(Math.max(evt.y - dragMin, 0) / dragMax, 1); 118 | updateHandleTopLeft('color', whiteRatio, blackRatio); 119 | updateStrokeColor(whiteRatio, blackRatio); 120 | break; 121 | case 'hue': 122 | lastHueRatio = Math.min(Math.max(evt.y - dragMin, 0) / dragMax, 1); 123 | updateHandleTop('hue', 1 - lastHueRatio); 124 | lastHueColor = calculateHue(lastHueRatio); 125 | colorFill.backgroundColor = lastHueColor; 126 | updateStrokeColor(lastStrokeRatioX, lastStrokeRatioY); 127 | invokeListener(); 128 | break; 129 | } 130 | } 131 | 132 | updateHandleTopLeft('color', lastStrokeRatioX, lastStrokeRatioY); 133 | updateHandleTop('hue', 1 - lastHueRatio); 134 | 135 | function updateStrokeColor(ratioX, ratioY) { 136 | lastStrokeRatioX = ratioX; 137 | lastStrokeRatioY = ratioY; 138 | strokeColor = calculateColor(ratioX, ratioY, lastHueColor); 139 | paintView && paintView.strokeColor(strokeColor); 140 | penDot && (penDot.backgroundColor = strokeColor); 141 | invokeListener(); 142 | } 143 | 144 | function invokeListener() { 145 | listener && listener(strokeWeight, strokeColor, lastHueColor, lastHueRatio, lastStrokeRatioX, lastStrokeRatioY); 146 | } 147 | 148 | colorPicker.addEventListener('touchstart', pickerStart); 149 | colorPicker.addEventListener('touchmove', pickerMove); 150 | colorPicker.addEventListener('touchend', pickerMove); 151 | colorPicker.addEventListener('touchcancel', pickerMove); 152 | 153 | colorPicker.add(handles.size); 154 | colorPicker.add(handles.color); 155 | colorPicker.add(handles.hue); 156 | 157 | return colorPicker; 158 | }; 159 | 160 | function calculateHue(ratio) { 161 | // Figure out how far along they clicked 162 | // Scale this to be an index in our mainColors array 163 | var scaledRatio = ratio * (hues.length - 1); 164 | // Floor it so that we have a real integer to work with as an index accessor 165 | var f = Math.min(Math.max(Math.floor(scaledRatio) | 0, 0), hues.length - 2); 166 | // Grab the fractional component of our original scaled ratio. 167 | var percent = scaledRatio - f; 168 | // We'll store our new faded color in this variable. But we have to put it together piece by piece first! 169 | var newColor = 0; 170 | // We will calculate the 3 parts of the color (red, green, and blue) in three different iterations below... 171 | for (var i = 0; i < 3; i++) { 172 | // Now, using the index we figured out earlier, calculate the faded value between the two pure colors 173 | // There's two math equations going on here: 174 | // 1) To fade between a and b by a ratio of r: a-(((a-b)*r) 175 | // 2) Next, to take our 0-255 value to the proper component of a HEX color, perform a bitwise shift 16, 8, 176 | // or 0 digits 177 | newColor += hues[f][i] - ((hues[f][i] - hues[(f + 1)][i]) * percent) << (2 - i) * 8; 178 | } 179 | // By this point, we figured out our color! As an integer... so let's turn it to its HEX value! 180 | var color = newColor.toString(16); 181 | // And then let's pad the left of it with 0s... 182 | for (var j = color.length; j < 6; j++) { 183 | color = '0' + color; 184 | } 185 | // That wasn't so bad, now was it? (I may have cried when I finished programming this. MAY HAVE.) 186 | return '#' + color; 187 | } 188 | 189 | function calculateColor(whiteRatio, blackRatio, hue) { 190 | // The algorithm we will use here is very similar to what we use below in the "hue" function, so I 191 | // won't provide a step-by-step. 192 | var base = hue.substring(1); 193 | var splitColor = []; 194 | if (base.length == 3) { 195 | splitColor = [ 196 | parseInt(base[0] + base[0], 16), 197 | parseInt(base[1] + base[1], 16), 198 | parseInt(base[2] + base[2], 16) 199 | ]; 200 | } 201 | else { 202 | splitColor = [ 203 | parseInt(base[0] + base[1], 16), 204 | parseInt(base[2] + base[3], 16), 205 | parseInt(base[4] + base[5], 16) 206 | ]; 207 | } 208 | // Apply the white ratio to it. This will fade the rgb components closer to white. 209 | for (var i = 0; i < 3; i++) { 210 | splitColor[i] = 255 - ((255 - splitColor[i]) * (1 - whiteRatio)); 211 | } 212 | // Apply the black ratio, and merge it in to an actual integer. 213 | var newColor = 0; 214 | for (var j = 0; j < 3; j++) { 215 | newColor += 0 - ((0 - splitColor[j]) * (1 - blackRatio)) << (2 - j) * 8; 216 | } 217 | // By this point, we figured out our color! As an integer... so let's turn it to its HEX value! 218 | var color = newColor.toString(16); 219 | // And then let's pad the left of it with 0s... 220 | for (var k = color.length; k < 6; k++) { 221 | color = '0' + color; 222 | } 223 | // Phew! 224 | return '#' + color; 225 | } -------------------------------------------------------------------------------- /Resources/ui/paintView.js: -------------------------------------------------------------------------------- 1 | var Paint = require('ti.paint'), 2 | E = require('lib/events'), 3 | S = require('data/settings'), 4 | T = require('ui/toast'); 5 | 6 | var win, 7 | didPaint = false, 8 | paintWrapper, 9 | clearedPaintWrapper, 10 | paintsByLetter = {}; 11 | 12 | /* 13 | Public API. 14 | */ 15 | exports.init = init; 16 | exports.addToView = addToView; 17 | exports.eraseMode = eraseMode; 18 | exports.strokeColor = strokeColor; 19 | exports.strokeWidth = strokeWidth; 20 | 21 | /* 22 | Implementation. 23 | */ 24 | function init() { 25 | paintWrapper = createView(); 26 | 27 | E 28 | .addEventListener('paint:save', save) 29 | .addEventListener('paint:clear', clear) 30 | .addEventListener('paint:swap-cleared', swapCleared) 31 | .addEventListener('switchToLetter', switchToLetter) 32 | ; 33 | } 34 | 35 | function addToView(_win) { 36 | win = _win; 37 | bind(); 38 | } 39 | 40 | function eraseMode(val) { 41 | if (!paintWrapper) { 42 | return; 43 | } 44 | if (val === undefined) { 45 | return paintWrapper.view.eraseMode; 46 | } 47 | else { 48 | return paintWrapper.view.eraseMode = val; 49 | } 50 | } 51 | 52 | function strokeColor(val) { 53 | if (!paintWrapper) { 54 | return; 55 | } 56 | if (val === undefined) { 57 | return paintWrapper.view.strokeColor; 58 | } 59 | else { 60 | return paintWrapper.view.strokeColor = val; 61 | } 62 | } 63 | 64 | function strokeWidth(val) { 65 | if (!paintWrapper) { 66 | return; 67 | } 68 | if (val === undefined) { 69 | return paintWrapper.view.strokeWidth; 70 | } 71 | else { 72 | return paintWrapper.view.strokeWidth = val; 73 | } 74 | } 75 | 76 | /* 77 | Utility. 78 | */ 79 | 80 | function save() { 81 | if (Ti.Android) { 82 | try { 83 | var now = new Date(); 84 | var fileName = 'Painting-' + now.toLocaleString() + '.png'; 85 | var imageFile = Ti.Filesystem.getFile('file:///sdcard/').exists() 86 | ? Ti.Filesystem.getFile('file:///sdcard/', fileName) 87 | : Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, fileName); 88 | imageFile.write(paintWrapper.container.toImage().media); 89 | Ti.Media.Android.scanMediaFiles([ imageFile.nativePath ], null, saveSuccess); 90 | } 91 | catch (err) { 92 | saveFailure(err); 93 | } 94 | } 95 | else { 96 | Ti.Media.saveToPhotoGallery(paintWrapper.container.toImage(null, true), { 97 | success: saveSuccess, 98 | failure: saveFailure 99 | }); 100 | } 101 | } 102 | 103 | function clear() { 104 | win.remove(paintWrapper.container); 105 | clearedPaintWrapper = paintWrapper; 106 | paintWrapper = createView(); 107 | bind(); 108 | } 109 | 110 | function swapCleared() { 111 | win.remove(paintWrapper.container); 112 | var temp = paintWrapper; 113 | paintWrapper = clearedPaintWrapper; 114 | clearedPaintWrapper = temp; 115 | bind(); 116 | } 117 | 118 | function switchToLetter(letter, oldLetter) { 119 | if (!paintWrapper) { 120 | return; 121 | } 122 | win.remove(paintWrapper.container); 123 | paintsByLetter[oldLetter] = paintWrapper; 124 | clearedPaintWrapper = null; 125 | didPaint = false; 126 | if (paintsByLetter[letter]) { 127 | paintWrapper = paintsByLetter[letter]; 128 | } 129 | else { 130 | paintWrapper = createView(); 131 | } 132 | bind(); 133 | } 134 | 135 | function bind() { 136 | didPaint = false; 137 | paintWrapper.container.addEventListener('touchmove', paintLayerTouchMoveListener); 138 | if (clearedPaintWrapper) { 139 | persistPaintProperties(clearedPaintWrapper.view, paintWrapper.view); 140 | } 141 | win.add(paintWrapper.container); 142 | } 143 | 144 | function createView() { 145 | var container = Ti.UI.createScrollView({ 146 | top: 0, left: 0, 147 | contentHeight: '1', contentWidth: '1', 148 | verticalBounce: false, horizontalBounce: false, 149 | disableBounce: true, 150 | scrollingEnabled: false, 151 | zIndex: 1 152 | }); 153 | var maxDimension = Math.max(Ti.Platform.displayCaps.platformHeight, Ti.Platform.displayCaps.platformWidth); 154 | var view = Paint.createPaintView({ 155 | width: maxDimension, height: maxDimension, 156 | strokeColor: S.defaultPenColor(), strokeWidth: S.defaultPenWidth(), 157 | eraseMode: false 158 | }); 159 | container.add(view); 160 | return { container: container, view: view }; 161 | } 162 | 163 | function persistPaintProperties(from, to) { 164 | to.strokeColor = from.strokeColor; 165 | to.strokeWidth = from.strokeWidth; 166 | to.eraseMode = from.eraseMode; 167 | } 168 | 169 | function paintLayerTouchMoveListener() { 170 | didPaint = true; 171 | paintWrapper.container.removeEventListener('touchmove', paintLayerTouchMoveListener); 172 | E.fireEvent('paint:first-draw'); 173 | } 174 | 175 | function saveSuccess() { 176 | T.show('Your drawing was saved to the photo gallery!', win, 2000); 177 | } 178 | 179 | function saveFailure(err) { 180 | Ti.UI.createAlertDialog({ 181 | title: 'Failure', 182 | message: 'We had some trouble saving it: ' + err + '.' 183 | }).show(); 184 | } -------------------------------------------------------------------------------- /Resources/ui/toast.js: -------------------------------------------------------------------------------- 1 | var A = require('lib/animations'); 2 | 3 | var $ = {}; 4 | 5 | exports.show = function(text, parent, time) { 6 | clean(); 7 | 8 | var view = $.last = Ti.UI.createView({ 9 | opacity: 0, 10 | backgroundColor: 'rgba(0, 0, 0, 0.7)', 11 | borderRadius: 6, 12 | layout: 'vertical', 13 | width: 280, height: Ti.UI.SIZE 14 | }); 15 | view.add(Ti.UI.createLabel({ 16 | top: 10, right: 10, bottom: 10, left: 10, 17 | text: text, textAlign: 'center', 18 | font: { fontSize: 12, fontWeight: 'bold' }, 19 | height: Ti.UI.SIZE, 20 | color: '#fff', shadowColor: '#000', shadowOffset: { x: 0, y: -1 } 21 | })); 22 | parent.add(view); 23 | 24 | A.fade(view, 1); 25 | A.fadeOutAndRemove(view, null, null, time || 3000); 26 | }; 27 | 28 | exports.clean = clean; 29 | function clean() { 30 | if ($.last) { 31 | var lastParent = $.last.parent; 32 | lastParent && lastParent.remove($.last); 33 | $.last = null; 34 | } 35 | $ = exports.$ = {}; 36 | } -------------------------------------------------------------------------------- /Resources/ui/top.lower.js: -------------------------------------------------------------------------------- 1 | var ColorPicker = require('./colorPicker'), 2 | PaintView = require('./paintView'), 3 | U = require('lib/utils'), 4 | A = require('lib/animations'), 5 | E = require('lib/events'), 6 | S = require('data/settings'); 7 | 8 | /* 9 | Public API. 10 | */ 11 | exports.addToView = addToView; 12 | 13 | /* 14 | Implementation. 15 | */ 16 | function addToView(win) { 17 | /* 18 | Draw the top bar. This is where the user can choose size color and eraser mode, as well as saving and clearing. 19 | */ 20 | var bar = exports.lastView = Ti.UI.createView({ 21 | top: 40, right: 0, left: 0, 22 | height: 41, 23 | zIndex: 3 24 | }); 25 | win.add(bar); 26 | 27 | /* 28 | Create a save button. This will save the drawing to the user's photo gallery. 29 | */ 30 | var save = Ti.UI.createButton({ 31 | backgroundImage: '/images/buttons/save.png', 32 | width: 70, height: 41, 33 | left: 0, top: 0 34 | }); 35 | save.addEventListener('singletap', E.curryFireEvent('paint:save')); 36 | bar.add(save); 37 | 38 | /* 39 | Pen Stroke. 40 | */ 41 | var pen = Ti.UI.createView({ 42 | backgroundImage: '/images/buttons/pen.png', 43 | width: 70, height: 41, 44 | top: 0, left: 70 45 | }); 46 | pen.addEventListener('singletap', clickPen); 47 | function clickPen() { 48 | var makeVisible = colorPicker.isVisible = !colorPicker.isVisible; 49 | colorPicker.touchEnabled = makeVisible; 50 | A.fade(colorPicker, makeVisible ? 1 : 0); 51 | A.fade(penHighlight, makeVisible ? 1 : 0); 52 | if (makeVisible && PaintView.eraseMode()) { 53 | toggleEraser(); 54 | } 55 | } 56 | 57 | var penStroke = Ti.UI.createView({ 58 | width: S.defaultPenWidth(), height: S.defaultPenWidth(), 59 | borderRadius: S.defaultPenWidth() / 2, 60 | backgroundColor: S.defaultPenColor(), 61 | touchEnabled: false 62 | }); 63 | var penStrokeShadow = Ti.UI.createView({ 64 | width: S.defaultPenWidth(), height: S.defaultPenWidth(), 65 | center: { x: pen.width / 2, y: pen.height / 2 + 1 }, 66 | borderRadius: S.defaultPenWidth() / 2, 67 | backgroundColor: '#fff', 68 | opacity: 0.75, 69 | touchEnabled: false 70 | }); 71 | var penHighlight = Ti.UI.createView({ 72 | backgroundColor: 'rgba(0, 0, 0, 0.6)', 73 | top: -10, right: 1, bottom: 1, left: -10, 74 | borderRadius: 6, 75 | opacity: 0, 76 | touchEnabled: false 77 | }); 78 | pen.add(penHighlight); 79 | pen.add(penStrokeShadow); 80 | pen.add(penStroke); 81 | bar.add(pen); 82 | 83 | /* 84 | Eraser. 85 | */ 86 | var eraser = Ti.UI.createView({ 87 | backgroundImage: '/images/buttons/eraser.png', 88 | width: 70, height: 41, 89 | top: 0, right: 70 90 | }); 91 | eraser.addEventListener('singletap', toggleEraser); 92 | var eraserHighlight = Ti.UI.createView({ 93 | backgroundColor: 'rgba(0, 0, 0, 0.6)', 94 | top: -10, right: -10, bottom: 1, left: 1, 95 | borderRadius: 6, 96 | opacity: 0, 97 | touchEnabled: false 98 | }); 99 | eraser.add(eraserHighlight); 100 | bar.add(eraser); 101 | 102 | var flashEraserIntervalID, stopFlash; 103 | 104 | function toggleEraser() { 105 | PaintView.eraseMode(!PaintView.eraseMode()); 106 | if (PaintView.eraseMode()) { 107 | A.fade(eraserHighlight, 1); 108 | flashEraserIntervalID = setInterval(flashEraser, 1000); 109 | } 110 | else { 111 | clearEraserFlash(); 112 | } 113 | } 114 | 115 | function flashEraser() { 116 | stopFlash = A.flash(eraserHighlight, undefined, 0.5, 1); 117 | } 118 | 119 | function clearEraserFlash() { 120 | if (flashEraserIntervalID) { 121 | clearInterval(flashEraserIntervalID); 122 | stopFlash && stopFlash(); 123 | A.fade(eraserHighlight, 0); 124 | flashEraserIntervalID = null; 125 | } 126 | } 127 | 128 | /* 129 | Collapse / expand. 130 | */ 131 | var arrowUp = Ti.UI.createButton({ 132 | backgroundImage: '/images/buttons/arrow-up.png', 133 | width: 40, height: 40, 134 | top: 0 135 | }); 136 | arrowUp.addEventListener('singletap', collapse); 137 | bar.add(arrowUp); 138 | var arrowDown = Ti.UI.createButton({ 139 | transform: Ti.UI.create2DMatrix().translate(0, -40), 140 | backgroundImage: '/images/buttons/arrow-down.png', 141 | width: 40, height: 40, 142 | top: 0, 143 | opacity: 0, 144 | zIndex: 2 145 | }); 146 | arrowDown.addEventListener('singletap', expand); 147 | win.add(arrowDown); 148 | 149 | function collapse() { 150 | if (colorPicker.isVisible) { 151 | clickPen(); 152 | } 153 | slide(require('ui/top.upper').lastView, -80, 0); 154 | slide(bar, -80, 0); 155 | slide(arrowDown, 0, 1); 156 | } 157 | 158 | function expand() { 159 | slide(require('ui/top.upper').lastView, 0, 1); 160 | slide(bar, 0, 1); 161 | slide(arrowDown, -40, 0); 162 | } 163 | 164 | /* 165 | Create a clear button. 166 | */ 167 | var clear = Ti.UI.createButton({ 168 | backgroundImage: '/images/buttons/clear.png', 169 | width: 70, height: 41, 170 | right: 0, top: 0 171 | }); 172 | clear.addEventListener('singletap', doClear); 173 | bar.add(clear); 174 | 175 | function doClear() { 176 | 177 | if (clear.undoMode) { 178 | E.fireEvent('paint:swap-cleared'); 179 | syncUndoMode(false); 180 | } 181 | else { 182 | E.fireEvent('paint:clear'); 183 | syncUndoMode(true); 184 | } 185 | } 186 | 187 | E.addEventListener('switchToLetter', function() { 188 | syncUndoMode(false); 189 | }); 190 | 191 | function syncUndoMode(on) { 192 | clear.undoMode = on; 193 | clear.backgroundImage = '/images/buttons/' + (on ? 'undo' : 'clear') + '.png'; 194 | } 195 | 196 | E.addEventListener('paint:first-draw', function() { 197 | if (clear.undoMode) { 198 | clear.backgroundImage = '/images/buttons/clear.png'; 199 | } 200 | clear.undoMode = false; 201 | }); 202 | 203 | var colorPicker = exports.colorPicker = ColorPicker.createView({ 204 | top: 75, left: -16 205 | }, PaintView, penStroke, penStrokeShadow); 206 | win.add(colorPicker); 207 | } 208 | 209 | function slide(view, where, opacity) { 210 | view.animate(Ti.UI.createAnimation({ 211 | opacity: opacity, 212 | transform: Ti.UI.create2DMatrix().translate(0, where), 213 | curve: U.ios ? Ti.UI.iOS.ANIMATION_CURVE_EASE_IN_OUT : undefined, 214 | duration: 300 215 | })); 216 | } -------------------------------------------------------------------------------- /Resources/ui/top.upper.js: -------------------------------------------------------------------------------- 1 | var E = require('lib/events'); 2 | 3 | /* 4 | Public API. 5 | */ 6 | exports.addToView = addToView; 7 | 8 | /* 9 | Implementation. 10 | */ 11 | 12 | function addToView(win) { 13 | var bar = exports.lastView = Ti.UI.createScrollView({ 14 | backgroundImage: '/images/tile-dark.png', 15 | top: 0, right: 0, left: 0, 16 | height: 41, 17 | contentWidth: 'auto', 18 | scrollType: 'horizontal', 19 | showHorizontalScrollIndicator: false, 20 | horizontalBounce: true, 21 | zIndex: 3 22 | }); 23 | win.add(bar); 24 | 25 | bar.addEventListener('singletap', clickLetter); 26 | 27 | var letters = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 28 | lastLetter = Ti.App.Properties.getString('lastLetter', ' '); 29 | for (var k = 0, kL = letters.length; k < kL; k++) { 30 | var label = Ti.UI.createLabel({ 31 | text: letters[k], textAlign: 'center', 32 | top: 0, left: (40 * k), 33 | width: 40, height: 38, 34 | font: { fontWeight: 'bold', fontSize: 20 }, 35 | color: '#fff' 36 | }); 37 | if (Ti.Platform.osname != 'android') { 38 | label.opacity = 0.5; 39 | } 40 | bar.add(label); 41 | if (letters[k] == lastLetter) { 42 | bar.scrollTo(k * 40, 0); 43 | label.fireEvent('singletap', { source: label }); 44 | } 45 | } 46 | } 47 | 48 | var lastLabel = null; 49 | 50 | function clickLetter(evt) { 51 | var lastLetter; 52 | if (lastLabel != null) { 53 | if (Ti.Platform.osname != 'android') { 54 | lastLabel.opacity = 0.5; 55 | } 56 | lastLabel.backgroundImage = null; 57 | lastLetter = lastLabel.text; 58 | } 59 | lastLabel = evt.source; 60 | if (Ti.Platform.osname != 'android') { 61 | lastLabel.opacity = 1; 62 | } 63 | lastLabel.backgroundImage = '/images/selectedLetter.png'; 64 | E.fireEvent('switchToLetter', lastLabel.text, lastLetter); 65 | } -------------------------------------------------------------------------------- /manifest: -------------------------------------------------------------------------------- 1 | #appname: ABC's Writer 2 | #publisher: Appcelerator 3 | #url: www.appcelerator.com 4 | #image: appicon.png 5 | #appid: com.appcelerator.apps.abcswriter 6 | #desc: undefined 7 | #type: ipad 8 | #guid: af3b196e-47f9-40bd-8a06-4e1a44b228bf 9 | -------------------------------------------------------------------------------- /psd/icon-ios.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/psd/icon-ios.psd -------------------------------------------------------------------------------- /psd/icon-ios7.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/psd/icon-ios7.psd -------------------------------------------------------------------------------- /psd/ui.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/psd/ui.psd -------------------------------------------------------------------------------- /psd/ui@2x.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/psd/ui@2x.psd -------------------------------------------------------------------------------- /screenshots/i4.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/i4.1.png -------------------------------------------------------------------------------- /screenshots/i4.2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/i4.2.png -------------------------------------------------------------------------------- /screenshots/i4.3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/i4.3.png -------------------------------------------------------------------------------- /screenshots/i4.4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/i4.4.png -------------------------------------------------------------------------------- /screenshots/i5.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/i5.1.png -------------------------------------------------------------------------------- /screenshots/i5.2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/i5.2.png -------------------------------------------------------------------------------- /screenshots/i5.3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/i5.3.png -------------------------------------------------------------------------------- /screenshots/i5.4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/i5.4.png -------------------------------------------------------------------------------- /screenshots/ip3.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/ip3.1.png -------------------------------------------------------------------------------- /screenshots/ip3.2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/ip3.2.png -------------------------------------------------------------------------------- /screenshots/ip3.3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/ip3.3.png -------------------------------------------------------------------------------- /screenshots/ip3.4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/appcelerator-archive/sample-abcs-writer/2413fe6e0d425a89c0b9362c42a0b06f8da0fb8b/screenshots/ip3.4.png -------------------------------------------------------------------------------- /tiapp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | true 6 | true 7 | 8 | com.dawson.abcswriter 9 | ABCs Writer 10 | 1.2.0 11 | 3.1.3.GA 12 | Appcelerator 13 | http://www.appcelerator.com 14 | Trace letters with this interactive drawing app. 15 | 2013 by Appcelerator, Inc. 16 | appicon.png 17 | false 18 | false 19 | default 20 | true 21 | true 22 | true 23 | true 24 | af3b196e-47f9-40bd-8a06-4e1a44b228bf 25 | dp 26 | 27 | 28 | Ti.UI.PORTRAIT 29 | Ti.UI.UPSIDE_PORTRAIT 30 | Ti.UI.LANDSCAPE_LEFT 31 | Ti.UI.LANDSCAPE_RIGHT 32 | 33 | 34 | Ti.UI.PORTRAIT 35 | Ti.UI.UPSIDE_PORTRAIT 36 | Ti.UI.LANDSCAPE_LEFT 37 | Ti.UI.LANDSCAPE_RIGHT 38 | 39 | 40 | 41 | 42 | 43 | ti.paint 44 | ti.paint 45 | 46 | 47 | --------------------------------------------------------------------------------