This file lists the main changes with each version of the Fyne toolkit. More detailed release notes can be found on the releases page.
- Use icons for file dialog favourites (#1186)
- Add ScrollContainer ScrollToBottom and ScrollToTop
- Make file filter case sensitive (#1185)
- Allow popups to create dialogs (#1176)
- Use default cursor for dragging scrollbars (#1172)
- Correctly parse SVG files with missing X/Y for rect
- Fix visibility of Entry placeholder when text is set (#1193)
- Fix encoding issue with Windows notifications (#1191)
- Fix issue where content expanding on Windows could freeze (#1189)
- Fix errors on Windows when reloading Fyne settings (#1165)
- Dialogs not updating theme correctly (#1201)
- Update the extended progressbar on refresh (#1219)
- Segfault if font fails (#1200)
- Slider rendering incorrectly when window maximized (#1223)
- Changing form label not refreshed (#1231)
- Files and folders starting "." show no name (#1235)
- Linux packaged apps now include a Makefile to aid install
- Fyne package supports specific architectures for Android
- Reset missing textures on refresh
- Custom confirm callbacks now called on implicitly shown dialogs
- SelectEntry can update drop-down list during OnChanged callback
- TextGrid whitespace color now matches theme changes
- Order of Window Resize(), SetFixedSize() and CenterOnScreen() does no matter before Show()
- Containers now refresh their visuals as well as their Children on Refresh()
- Capped StrokeWidth on canvas.Line (#831)
- Canvas lines, rectangles and circles do not resize and refresh correctly
- Black flickering on resize on MacOS and OS X (possibly not on Catalina) (#1122)
- Crash when resizing window under macOS (#1051, #1140)
- Set SetFixedSize to true, the menus are overlapped (#1105)
- Ctrl+v into text input field crashes app. Presumably clipboard is empty (#1123, #1132)
- Slider default value doesn't stay inside range (#1128)
- The position of window is changed when status change from show to hide, then to show (#1116)
- Creating a windows inside onClose handler causes Fyne to panic (#1106)
- Backspace in entry after SetText("") can crash (#1096)
- Empty main menu causes panic (#1073)
- Installing using
fyne install
on Linux now works on distrubutions that don't use/usr/local
- Fix recommendations from staticcheck
- Unable to overwrite file when using dialog.ShowFileSave (#1168)
- File open and save dialogs (#225)
- Add notifications support (#398)
- Add text wrap support (#332)
- Add Accordion widget (#206)
- Add TextGrid widget (#115)
- Add SplitContainer widget (#205)
- Add new URI type and handlers for cross-platform data access
- Desktop apps can now create splash windows
- Add ScaleMode to images, new ImageScalePixels feature for retro graphics
- Allow widgets to influence mouse cursor style (#726)
- Support changing the text on form submit/cancel buttons
- Support reporting CapsLock key events (#552)
- Add OnClosed callback for Dialog
- Add new image test helpers for validating render output
- Support showing different types of soft keyboard on mobile devices (#971, #975)
- Upgraded underlying GLFW library to fix various issues (#183, #61)
- Add submenu support and hover effects (#395)
- Default to non-premultiplied alpha (NRGBA) across toolkit
- Rename FixedGridLayout to GridWrapLayout (deprecate old API) (#836)
- Windows redraw and animations continue on window resize and move
- New...PopUp() methods are being replaced by Show...Popup() or New...Popup().Show()
- Apps started on a goroutine will now panic as this is not supported
- On Linux apps now simulate 120DPI instead of 96DPI
- Improved fyne_settings scale picking user interface
- Reorganised fyne_demo to accommodate growing collection of widgets and containers
- Rendering now happens on a different thread to events for more consistent drawing
- Improved text selection on mobile devices
- Panic when trying to paste empty clipboard into entry (#743)
- Scale does not match user configuration in Windows 10 (#635)
- Copy/Paste not working on Entry Field in Windows OS (#981)
- Select widgets with many options overflow UI without scrolling (#675)
- android: typing in entry expands only after full refresh (#972)
- iOS app stops re-drawing mid frame after a while (#950)
- Too many successive GUI updates do not properly update the view (904)
- iOS apps would not build using Apple's new certificates
- Preserve aspect ratio in SVG stroke drawing (#976)
- Fixed many race conditions in widget data handling
- Various crashes and render glitches in extended widgets
- Fix security issues reported by gosec (#742)
- Added Direction field to ScrollContainer and NewHScrollContainer, NewVScrollContainer constructors (#763)
- Added Scroller.SetMinSize() to enable better defaults for scrolled content
- Added "fyne vendor" subcommand to help packaging fyne dependencies in projects
- Added "fyne version" subcommand to help with bug reporting (#656)
- Clipboard (cut/copy/paste) is now supported on iOS and Android (#414)
- Preferences.RemoveValue() now allows deletion of a stored user preference
- Report keys based on name not key code - fixes issue with shortcuts with AZERTY (#790)
- Mobile builds now support go modules (#660)
- Building for mobile would try to run desktop build first
- Mobile apps now draw the full safe area on a screen (#799)
- Preferences were not stored on mobile apps (#779)
- Window on Windows is not controllable after exiting FullScreen mode (#727)
- Soft keyboard not working on some Samsung/LG smart phones (#787)
- Selecting a tab on extended TabContainer doesn't refresh button (#810)
- Appending tab to empty TabContainer causes divide by zero on mobile (#820)
- Application crashes on startup (#816)
- Form does not always update on theme change (#842)
- Add media and volume icons to default themes (#649)
- Add Canvas.PixelCoordinateForPosition to find pixel locations if required
- Add ProgressInfinite dialog
- Warn if -executable or -sourceDir flags are used for package on mobile (#652)
- Update scale based on device for mobile apps
- Windows without a title will now be named "Fyne Application"
- Revert fix to quit mobile apps - this is not allowed in guidelines
- App.UniqueID() did not return current app ID
- Fyne package ignored -name flag for ios and android builds (#657)
- Possible crash when appending tabs to TabContainer
- FixedSize windows not rescaling when dragged between monitors (#654)
- Fix issues where older Android devices may not background or rotate (#677)
- Crash when setting theme before window content set (#688)
- Correct form extend behaviour (#694)
- Select drop-down width is wrong if the drop-down is too tall for the window (#706)
- Add SelectedText() function to Entry widget
- New mobile.Device interface exposing ShowVirtualKeyboard() (and Hide...)
- Scale calculations are now relative to system scale - the default "1" matches the system
- Update scale on Linux to be "auto" by default (and numbers are relative to 96DPI standard) (#595)
- When auto scaling check the monitor in the middle of the window, not top left
- bundled files now have a standard header to optimise some tools like go report card
- Shortcuts are now handled by the event queue - fixed possible deadlock
- Scroll horizontally when holding shift key (#579)
- Updating text and calling refresh for widget doesn't work (#607)
- Corrected visual behaviour of extended widgets including Entry, Select, Check, Radio and Icon (#615)
- Entries and Selects that are extended would crash on right click.
- PasswordEntry created from Entry with Password = true has no revealer
- Dialog width not always sufficient for title
- Pasting unicode characters could panic (#597)
- Setting theme before application start panics on macOS (#626)
- MenuItem type conflicts with other projects (#632)
- Add TouchDown, TouchUp and TouchCancel API in driver/mobile for device specific events
- Add support for adding and removing tabs from a tab container (#444)
- Issues when settings changes may not be monitored (#576)
- Layout of hidden tab container contents on mobile (#578)
- Mobile apps would not quit when Quit() was called (#580)
- Shadows disappeared when theme changes (#589)
- iOS apps could stop rendering after many refreshes (#584)
- Fyne package could fail on Windows (#586)
- Horizontal only scroll container may not refresh using scroll wheel
- Mobile support - iOS and Android, including "fyne package" command
- Support for OpenGL ES and embedded linux
- New BaseWidget for building custom widgets
- Support for diagonal gradients
- Global settings are now saved and can be set using the new fyne_settings app
- Support rendering in Go playground using playground.Render() helpers
- "fyne install" command to package and install apps on the local computer
- Add horizontal scrolling to ScrollContainer
- Add preferences API
- Add show/hide password icon when created from NewPasswordEntry
- Add NewGridLayoutWithRows to specify a grid layout with a set number of rows
- Add NewAdaptiveGridLayout which uses a column grid layout when horizontal and rows in vertical
- New Logo! Thanks to Storm for his work on this :)
- Applications no longer have a default (Fyne logo) icon
- Input events now execute one at a time to maintain the correct order
- Button and other widget callbacks no longer launch new goroutines
- FYNE_THEME and FYNE_SCALE are now overrides to the global configuration
- The first opened window no longer exits the app when closed (unless none others are open or Window.SetMaster() is called)
- "fyne package" now defaults icon to "Icon.png" so the parameter is optional
- Calling ExtendBaseWidget() sets up the renderer for extended widgets
- Entry widget now has a visible Disabled state, ReadOnly has been deprecated
- Bundled images optimised to save space
- Optimise rendering to reduce refresh on TabContainer and ScrollContainer
- Correct the color of Entry widget cursor if theme changes
- Error where widgets created before main() function could crash (#490)
- App.Run panics if called without a window (#527)
- Support context menu for disabled entry widgets (#488)
- Fix issue where images using fyne.ImageFillOriginal may not show initially (#558)
- Default scale value for canvases is now 1.0 instead of Auto (DPI based)
- Correct icon name in linux packages
- Fullscreen before showing a window works again
- Incorrect MinSize of FixedGrid layout in some situations
- Update text size on theme change
- Text handling crashes (#411, #484, #485)
- Layout of image only buttons
- TabItem.Content changes are reflected when refreshing TabContainer (#456)
- Add support for custom Windows manifest files in fyne package
- Dismiss non-modal popovers on secondary tap
- Only measure visible objects in layouts and minSize calculations (#343)
- Don't propagate show/hide in the model - allowing children of tabs to remain hidden
- Disable cut/copy for password fields
- Correctly calculate grid layout minsize as width changes
- Select text at end of line when double tapping beyond width
- Scale could be too large on macOS Retina screens
- Window with fixed size changes size when un-minimized on Windows (#300)
- Setting text on a label could crash if it was not yet shown (#381)
- Multiple Entry widgets could have selections simultaneously (#341)
- Hover effect of radio widget too low (#383)
- Missing shadow on Select widget
- Incorrect rendering of subimages within Image object
- Size calculation caches could be skipped causing degraded performance
- Menubar and PopUpMenu (#41)
- PopUp widgets (regular and modal) and canvas overlay support (#242)
- Add gradient (linear and radial) to canvas
- Add shadow support for overlays, buttons and scrollcontainer
- Text can now be selected (#67)
- Support moving through inputs with Tab / Shift-Tab (#82)
- canvas.Capture() to save the content of a canvas
- Horizontal layout for widget.Radio
- Select widget (#21)
- Add support for disabling widgets (#234)
- Support for changing icon color (#246)
- Button hover effect
- Pointer drag event to main API
- support for desktop mouse move events
- Add a new "hints" build tag that can suggest UI improvements
- TabContainer tab location can now be set with SetTabLocation()
- Dialog windows now appear as modal popups within a window
- Don't add a button bar to a form if it has no buttons
- Moved driver/gl package to internal/driver/gl
- Clicking/Tapping in an entry will position the cursor
- A container with no layout will not change the position or size of it's content
- Update the fyne_demo app to reflect the expanding feature set
- Allow scrollbars to be dragged (#133)
- Unicode char input with Option key on macOS (#247)
- Resizng fixed size windows (#248)
- Fixed various bugs in window sizing and padding
- Button icons do not center align if label is empty (#284)
- Support for go modules
- Transparent backgrounds for widgets
- Entry.OnCursorChanged()
- Radio.Append() and Radio.SetSelected() (#229)
- Clicking outside a focused element will unfocus it
- Handle key repeat for non-runes (#165)
- Remove duplicate options from a Radio widget (#230)
- Issue where paste shortcut is not called for Ctrl-V keyboard combination
- Cursor position when clearing text in Entry (#214)
- Antialias of lines and circles (fyne-io/examples#14)
- Crash on centering of windows (#220)
- Possible crash when closing secondary windows
- Possible crash when showing dialog
- Initial visibility of scroll bar in ScrollContainer
- Setting window icon when different from app icon.
- Possible panic on app.Quit() (#175)
- Various caches and race condition issues (#194, #217, #209).
The first major release of the Fyne toolkit delivers a stable release of the main functionality required to build basic GUI applications across multiple platforms.
- Canvas API (rect, line, circle, text, image)
- Widget API (box, button, check, entry, form, group, hyperlink, icon, label, progress bar, radio, scroller, tabs and toolbar)
- Light and dark themes
- Pointer, key and shortcut APIs (generic and desktop extension)
- OpenGL driver for Linux, macOS and Windows
- Tools for embedding data and packaging releases