pending | 14 Nov 2024 |
Partial Swift 6 Concurrency. |
8 Nov 2024 |
Rewrote undo/redo manager for future compatibility with Swift 6. |
|
3.0.6 | 4 Nov 2024 |
Version 3.0.5 produced a completely empty drawing when running on iOS 18.1. Simply re-compiling the app solved the problem. |
3.0.5 | 26 Oct 2023 |
Removes temporary code needed to work around a bug in iOS 17.0.x. This new version runs correctly on iOS 15, 16 and 17.1 or later. |
3.0.4 | 2 Oct 2023 |
Adjusted navigation bar for iOS 17 compatibility. When running on iOS 17, the navigation bar includes a drop-down menu that lets you • export your drawing's source code • rename your drawing (However, iOS 17.0.2 is a bit quirky about how it updates the navigation bar: you'll see the new name, then the old name, and then — after a short wait — the new name again.) |
3.0.3 | 13 Sep 2023 |
Fixed bug that image wasn't getting refreshed after snapToViewAlignment(). Shear snaps to half-integers to support precise "half drop" patterns. Thanks to Rebecca Elfast for this suggestion. |
11 Sep 2023 |
Added keepCenteredInUnitCell() to keep a curve properly centered in the unit cell at all times, even if the user "walks it along". Thanks to Francine Champagne for reporting this bug. |
|
3.0.2 | 3 Mar 2023 |
Removes a no-longer-valid constraint from an older version of KaleidoPaint that was preventing the pen from resizing correctly when you set the aspect ratio to an extreme value. Thanks to Francine Champagne for reporting this bug. |
3.0.1 | 28 Dec 2022 |
On iOS 16, moves the drawing title up to the navigation bar, to allow more space for the drawing itself. |
3.0 | 10 Oct 2022 |
Entire app re-written in Swift and SwiftUI. File browser lets you organize your drawings into folders. File browser supports iCloud Drive as well as local storage on device. Color picker offers a choice of five color selection methods (grid, spectrum, sliders, eyedropper or hex code) and a user-customizable saved-color palette. Separate line color ("paintbrush") and fill color ("paint bucket"). You can copy the color of any dot, line or filled region directly to the paintbrush, the paint bucket or any other dot, line or filled region. You can copy the thickness of any dot or line directly to the paintbrush or any other dot or line. Options to "change all of same color", "change all of same thickness" or "delete all of same color". Exports images to any folder. Option to export drawings with transparent background. Adjustable parameter for less vigorous or more vigorous line smoothing. Simple slider-based interface to adjust drawing's aspect ratio and shear. Default grid alignment is now consistent among the symmetry patterns *2222, 2222, 2*22, 22*, 22×, **, *× and ××, in the sense that mirror lines and rotation points agree, to make it easier to see the relationships among those symmetry patterns. Symmetry panel now positions the buttons for the families (**, *× and ××), (22*, 22×) and (*2222, 2222, 2*22) consistently, so you can easily see what symmetries change and what symmetries stay the same as you switch from one pattern to a different pattern in the same family. This also lets you see how the drawing's symmetries relate to the pattern's name in orbifold notation. Many thanks to Francine Champagne, Amber van Hoek and Geneviève Crabe for their extensive help improving KaleidoPaint. KaleidoPaint is far better thanks to their ideas. Special thanks to Francine for creating the icons for the symmetry pattern buttons as well as for her instructional videos and web pages. Special thanks to Amber for creating KaleidoPaint's elegant icon and for providing spectacularly good drawings for KaleidoPaint's App Store screenshots. |
28 Aug 2022 |
Changed iOS Deployment Target to iOS 15, because it's now widely used, and I have no iOS 14 device to test on. |
|
24 Jun 2022 |
Separate dot/line (paintbrush) and fill (paint bucket) colors. |
|
19 Dec 2021 |
(legacy iOS) Changed iOS Deployment Target to iOS 14, because Apple has stopped supporting iOS 12. Thus, in particular, I no longer have a maintainable iOS 12 device to test on. (legacy iOS) Added UINavigationBarAppearance so that navigation bars will have an opaque background when running on iOS 15. |
|
22 Nov 2020 |
Changed various GPU uniforms, colors in buffers, etc. to half-precision (__fp16 and faux_simd_half4) where appropriate. |
|
5 Nov 2020 |
Removed workaround for bug that function-constant assignments like |
|
2.10.4 | 14 Aug 2020 |
Added Portuguese translation, thanks to Nuno Fernandes. |
25 Jun 2020 |
Uses non-uniform threadgroup sizes on A11 GPUs and later (iPhone 8 and later). Increases number of threads per threadgroup for more efficient GPU usage. |
|
22 May 2020 |
Implemented -gestureRecognizerShouldBegin: to return NO, to fix a bug that had allowed a drag in KaleidoPaint's color picker to get "stolen" and re-interpreted as a scroll of the enclosing popover. |
|
28 Apr 2020 |
Lowered deployment target back to iOS 12.0 by letting the intermediate unit cell textures use Linear Display P3 color coordinates, while the final drawing using Gamma-encoded sRGB. |
|
21 Apr 2020 |
Raised deployment target to iOS 13.0. Most iDevices that support iOS 13 have A9 processors or higher, which belong to MTLGPUFamilyApple3, which fully supports all the extended range pixel formats. The only exceptions are the iPad Air 2 (which I happen to own) and the iPad Mini 4, which have only an A8 or A8X processor, which belong to MTLGPUFamilyApple2, which doesn't support extended range pixel formats. But neither of those two devices supports Wide Color, so on either one, KaleidoPaint will fall back to the non-extended BGRA8Unorm_sRGB pixel format, which MTLGPUFamilyApple2 fully supports. Whew! |
|
21 Apr 2020 |
The FactoredColor struct now keeps itsBase in Linear Display P3 color coordinates, converting to Linear Extended sRGB coordinates only when passing them to the shader, which uses the latter exclusively (Metal will clamp to [0,1] when writing to the frame buffer on non-Wide-Color devices.) KaleidoPaint now saves to File Format 1.4, which stores all colors as Linear Display P3. When reading File Format 1.3 and earlier, KaleidoPaint converts from Linear sRGB to Linear Display P3. |
|
19 Apr 2020 |
The new _sRGB pixel formats automatically does the gamma-encoding that had been missing in the previous version, but even though the new version is more correct, it would alter the colors that artists have chosen in their existing drawings. To compensate, when KaleidoPaint opens a drawing in File Format 1.2 or earlier, it gamma-decodes them, so that after they get (correctly!) gamma-encoded at render time, the drawing will still look the same as before. All drawings, with corrected colors, now get saved in File Format 1.3. |
|
16 Apr 2020 |
Renders to Wide Color (Display P3) when available. Some of the shared code that won't be needed in the upcoming SwiftUI versions of the Geometry Games apps has been migrated to "-LEGACY" files, to allow the SwiftUI versions to include desired utilities without including legacy cruft like PixelRGBA, ImageRGBA, etc. |
|
2.10.3 | 6 Apr 2020 |
Cropped icon to Apple's "squircle" shape and added a white border. |
2.10.2 | 31 Mar 2020 |
(iOS) Converted launch screen format from .xib to .storyboard to comply with new App Store requirements. New icon, thanks to Amber van Hoek. |
2.10.1 | 8 Nov 2019 |
Replaced functions deprecated in iOS 13 or macOS 10.15 with non-deprecated alternatives. |
2.10 | 11 Nov 2018 |
(macOS) Enabled Hardened Runtime to allow Notarization by Apple. |
17 Oct 2018 |
(iOS) Table images, toolbar icons and other images re-created at @1x, @2x and @3x. Source files for those images all simplified and tidied up (now mostly as iDraw files). (iOS) Toolbar icons resized to 24pt, which is the new recommended size. (iOS) KaleidoPaint has a very full toolbar, so on older devices with 320pt wide displays (namely iPhone 5s, iPhone SE and iPod Touch) it downsamples the 24pt toolbar buttons back to 20pt. |
|
17 Oct 2018 |
(iOS) KaleidoPaintColorPickerController accounts for safeAreaInsets to keep its brightness slider clear of the iPhone X's Home Indicator. |
|
16 Sep 2018 |
(iOS) Now Metal-only. Removed all OpenGL ES code. |
|
30 Apr 2018 |
(macOS) On multi-GPU systems, selects the GPU that's already running the displays attached to the main computer (but ignores any externally attached removable GPUs). If the system switches to a different GPU, this app switches to that GPU as well. (macOS) No longer calls [[NSNotificationCenter defaultCenter] removeObserver:self] because it's no longer necessary. |
|
14 Apr 2018 |
(macOS) Main content view is now layer-backed. When going fullscreen, avoids macOS 10.13.4 bug. |
|
2.9 | 29 Oct 2017 |
(iOS) Graphics rewritten using Apple's “Metal” graphics library, with fallback to OpenGL ES on older devices (pre-A7) or on iOS 9. (iOS) Computes flood-fills directly on the GPU. Makes use of the GPU's parallel processing capabilities to achieve a 2-fold to 24-fold speed-up, depending on number of symmetries in the particular wallpaper group. (Metal version only) (iOS) KaleidoPaint's memory demands have been reduced 1000-fold by storing flood-fills using run-length encoding (RLE) instead of raw bitmaps. For example, at Medium Resolution, each filled region required a 1 MB mask in the previous version of KaleidoPaint, but in the new version the same filled region requires only ~1 KB. (Metal version only) (iOS) Redraws flood-fills from RLE data directly on the GPU, making full use of the GPU's parallel processing capabilities. (Metal version only) (iOS) Added High Resolution. (Metal version only) Improved support for iPencil and other stylus input. Thanks to Francine Champagne for reporting this issue. (Metal and OpenGL ES both) Fixed bug that was causing slowly-drawn lines to retain too many nodes. Again, thanks to Francine Champagne for reporting this bug. (Metal and OpenGL ES both) Offsets input touches so that the curve-in-progress will appear even when the user starts drawing in a distant translate of the main unit cell. Thanks to Jeff Racinski for reporting this bug. (Metal and OpenGL ES both) |
27 Sep 2017 |
CPU code consistently uses "double" (rather than "float") for essentially everything except colors. |
|
2.8.3 | 29 Dec 2016 |
Saves exported images with the current screen's color profile (either sRGB or Display P3 on iOS, the display's color profile on macOS). |
22 Dec 2016 |
Save Tileable Image uses a new algorithm which handles all 17 wallpaper groups, including the two which may be arbitrary parallelograms (namely o and 2222). |
|
12 Dec 2016 |
(macOS) Exports images as PNG instead of TIFF. |
|
30 Nov 2016 |
Created a single project document with targets for iOS and macOS. Created that single project document from scratch, to get rid of years of legacy cruft. Retired the Android code. |
|
2.8.2 | 24 Aug 2016 |
(iOS) Added "Save Tileable Rectangle" (thanks to Ellie Baker and others for this suggestion). |
24 Aug 2016 |
(iOS) Supports 400% size image export on iPad Pro (thanks to Herman van Boeijen for reporting this bug). |
|
24 Aug 2016 |
(iOS) KaleidoPaint is now "device-assignable" for easy installation on school iPads via MDM (thanks to James Eichmiller for this suggestion). |
|
15 May 2016 |
Separated OpenGL(ES)-specific data and code from graphics-system-independent data and code, in preparation for a migration from OpenGL(ES) to Metal on iOS and Mac (and maybe eventually to Vulkan on Android and to DX12 on Windows). |
|
2.8.1 | 5 Apr 2016 |
(Android) Disabled COMPILE_ANDROID_FOR_GLES2, so app now requires OpenGL ES 3 on Android. (Android) Disabled USE_UNIFORMS_INSTEAD_OF_CONSTANT_VERTEX_ATTRIBUTES, so app now requires Android 4.4 or higher to avoid constant vertex attributes bug on Nexus 7 (and maybe on lots of other devices too). |
2.8 | 27 Mar 2016 |
Added version for Android. |
18 Mar 2016 |
New HSB color picker |
|
2.7 | 15 Feb 2016 |
Symmetry group changes now undoable. 3-finger reshaping (skew) now undoable, but 2-finger reshaping (translation, rotation, dilation) remains intentionally not undoable because it’s not considered an intrinsic part of the drawing. |
11 Feb 2016 |
Added menu to select among the line thicknesses already present in the drawing (analogous to the menu that lets the user select among the colors already present in the drawing). |
|
12 Jan 2016 |
(iOS) Updated for iOS 8/9. Extensive internal changes. |
|
17 Nov 2015 |
(Mac) Updated code for Mac OS X 10.10, replacing all deprecated method calls. |
|
12 Nov 2015 |
(iOS, Mac) Converted memory management from Manual Retain-Release (MRR) to Automatic Reference Counting (ARC). |
|
2.6.1 | 21 Oct 2015 |
Added Editor help pages in Japanese and German. |
16 Oct 2015 |
Suppressed the Language menu to avoid displaying UniHan characters incorrectly (and also because the Language menu wasn't really useful except in the Torus Games). |
|
28 Sep 2015 |
(iOS) Updated to require iOS 6. Removed -viewDidUnload and -shouldAutorotateToInterfaceOrientation. |
|
2.6 | 22 Sep 2015 |
Rewrote Editor to let user edit all dots, lines and fills at once (no more scrolling list). Added support for iPhone and iPod Touch. Small local improvements. |
2.5 | 21 Jul 2015 |
Added current-color marker to Color Picker. Thanks to Francine Champagne for suggesting this. |
16 Jul 2015 |
Added MOTION_THRESHOLD so that even on newer iPads with higher-resolution touch sensors, tiny (unintended!) finger motions don't get interpreted as lines, when really the user is trying to tap, double-tap or pinch/rotate. Thanks to Francine Champagne for reporting the problem with double-taps and pinch/rotate gestures. |
|
15 Jul 2015 |
Added "Realign" button to undo current skew (and also translation, rotation and rescaling). Thanks to Francine Champagne for reporting the problem with undoing unintentional skews. |
|
25 Jan 2015 |
(iOS) Finally figured out how to get separator lines to span full width of used-colors table in iOS 7 and iOS 8. |
|
19 Dec 2014 |
Set KaleidoPaintDrawingController’s root view’s background color to white, so the translucent navigation bar looks cleaner and brighter. |
|
2.4 | 8 Dec 2014 |
(iOS) Drawing picker completely written with App Kit instead of OpenGL. Caches thumbnails for vastly improved performance when handling large numbers of drawings (800+). (iOS) Portfolio-based user interface moved into code shared with 4D Draw. (iOS) Drag thumbnails to re-order drawings. (iOS) Lock/unlock drawings. |
2.3.2 | 22 Aug 2014 |
(iOS) Minor changes for 64-bit iOS compatibility. |
22 Aug 2014 |
Further migration to Char16. |
|
21 Aug 2014 |
Expanded visibility of OpenGL headers, so the ModelData can refer to OpenGL objects as GLuint instead of "unsigned int", thus improving clarity and avoiding integer conversion warnings. |
|
20 Aug 2014 |
Replaced L"…" → u"…" and L'·' → u'·'. The L syntax required -fshort-wchar to get 16-bit wide characters and generated copious warnings in Android, while the u syntax is part of the C11 standard. |
|
19 Aug 2014 |
Completed deferred maintenance of Windows version (accommodated changes from last 15 months when I had no Windows computer). |
|
22 Apr 2014 |
Curve Editor lists elements newest-to-oldest, because the user typically wants to edit the most recently drawn element. |
|
16 Dec 2013 |
Handles localized text as UTF-16 instead of UTF-8. |
|
2.3.1 | 2 Sep 2013 |
Thumbnails impose a minimum line thickness to avoid too thin lines that would let flood fills leak through. |
30 Aug 2013 |
Export at 1×, 2×, 4×. |
|
2.3 | 9 May 2013 |
First version requiring OpenGL 3.2 or OpenGL ES 2.0. |
2.2 | 2 May 2013 |
Last version compatible with OpenGL 2. |
24 Apr 2013 |
(Win) Moved much functionality from individual applications to shared code. (Win) Simplified implementation of various features. Removed cruft. |
|
5 Apr 2013 |
Added traditional Chinese (Hant) localization, separate from simplified Chinese (Hans) localization. |
|
1 Apr 2013 |
(Mac, iOS) Added traditional Chinese (Hant) localization of infoPlist.strings, so app will launch in Chinese when user's preferred language is zh-Hant. Otherwise on a zh-Hant system the app would launch in English, not zh-Hans. On iOS it seems that English is always the second-choice language – no way to change that. |
|
22 Mar 2013 |
(iOS) Moved much functionality from individual applications to shared code. |
|
8 Mar 2013 |
(Mac) Moved much functionality from individual applications to shared code. |
|
5 Mar 2013 |
Replaced platform-specific language lists with a single language list in app's common code. Simplified language menu handling. Moved endonyms and Win32 LANGIDs to Geometry Games shared code. |
|
28 Feb 2013 |
(iOS, Mac) Updated Objective-C syntax to use @{}, @[], @() and @autorelease. |
|
2.1 | 29 Jan 2013 |
(iOS) Curve editor |
21 Nov 2012 |
(iOS, Mac) Re-organized instance variables, moving them from .h to .m files (@interface to @implementation) as allowed by the “new” Objective-C runtime. |
|
2 Oct 2012 |
(Win) To avoid bugs in Intel Integrated Graphics drivers, ignores VAO extension and directs all OpenGL 2 users (on Windows) to the legacy version of the program. Simplified extensions handling. |
|
2.0.2 | 23 May 2012 |
Better algorithm for clamping to valid colors in color selector, in particular now clamps to corners easily. Suppressed light-dark checkerboard pattern from wooden desktop background texture. |
2.0.1 | 16 May 2012 |
Released under GNU Public Licence. Brought Windows version up-to-date, in the sense that it compiles and runs cleanly, even though there is still no Windows user interface. Posted source code online. |
14 May 2012 |
Added run-time option to increase unit cell resolution from 512×512 to 1024×1024. |
|
2.0 | 26 Apr 2012 |
Re-written from scratch using OpenGL for all animations, to minimize demands on the system. Unlike version 1.0.x, version 2.0 never crashes, even when other apps are using lots of memory. |
1.0.4 | 20 Jan 2012 |
First version to require Vertex Array Objects. |
1.0.3 | 20 Jan 2012 |
Last version to run without Vertex Array Objects. |
18 Jan 2012 |
Disentangled Vertex Array Object (VAO) code from Vertex Buffer Object (VBO) code. |
|
1 Jun 2011 |
(iOS) Reorganized project. (iOS) New project document uses Xcode 4. |
|
1.0.2 | 2 Mar 2011 |
Shows Help panel at first launch. |
28 Feb 2011 |
Moved SetUpOneShader() to shared code, and simplified parameter handling. |
|
24 Feb 2011 |
Replaced application-wide texture settings (for mipmapping, anisotropic filtering, etc.) with per-texture settings. The finer control lays the foundation for iOS versions of the software, where trilinear mipmapping and anisotropic filtering are computationally more expensive. Moved SetUpOneTexture() to shared code. |
|
23 Feb 2011 |
Render() now takes aConceptualWidthPt and aConceptualHeightPt as md->itsConceptualWidthPt and md->itsConceptualHeightPt, for consistency with the other Geometry Games, so it can share the same callback syntax. For offscreen drawing, CreateDrawingPixels() no longer creates its own buffers, but instead calls the shared RenderToBuffer(). Various cascading simplifications. |
|
11 Feb 2011 |
Extension checking moved to shared Geometry Games utilities. |
|
7 Feb 2011 |
Eliminated KPDrawingLayer, KPColorPickerLayer and -drawRect. (Eliminating -drawRect may avoid the problems KaleidoPaint was having under iOS 3.2 when Safari had too much memory in use. I can't confirm this directly, though, because I've been unable to reproduce the problem since installing iOS 4.2.) |
|
28 Jan 2011 |
Eliminated itsDrawingWidth, itsDrawingHeight. Passes conceptual and actual dimensions at render time. Enabled VAO usage in KPColorPickerView. |
|
1.0.1 | 6 Jan 2011 |
Allows rotation and skewing even while keeping the unit cell's area from dropping below the minimum. |
31 Dec 2010 |
When memory is low, provides instructions to close pages in Safari. |
|
9 Nov 2010 |
Uses shared Geometry Games utilities, except for *UserPref*() and GetLocalizedText(), which it handles with the native iOS equivalents NSUserDefaults and NSLocalizedString. |
|
2 Nov 2010 |
Enabled VAO usage, tested on pre-release iOS 4.2 simulator. |
|
1.0 | 29 Oct 2010 |
Initial release |