Table of Contents

Release Information

Platform Version Release Date
All Final April 16, 2020
Web Beta 6 April 6, 2020 Private
Web Beta 5 March 26, 2020 Private
Desktop Beta 4 March 19, 2020 Private
Web Beta 4 March 13, 2020 Private
All Beta 3 March 11, 2020
Web Beta 2 February 10, 2020
All Beta 1 February 8, 2020
Desktop Alpha 4 January 26, 2020 Private
Web Alpha 4 Januage 18, 2020 Private
Desktop Alpha 3 January 4, 2020 Private
Web Alpha 3 January 2, 2020 Private
All Alpha 2 December 16, 2019
All Alpha 1 November 30, 2019

Desktop

Type Change
NEW GraffitiDropzone
NEW GraffitiImmersiveApp
NEW GraffitiImmersiveCheckbox
NEW GraffitiSegButton
NEW KillerToolbar now has a DarkTab style.
ADD GraffitiCalendar now supports ICSImport and ICSExport methods.
ADD GraffitiColorPicker is no longer modal/sheet. Updates are immediate. OK to save to recent.
ADD GraffitiColorPicker now uses localized strings for labels and captions. See GraffitiColorPickerStrings module to add translations
ADD GraffitiColors.MacOS.IsColorDifferentiated returns True when the user has Differentiate without color unchecked in Display Accessibility settings.
ADD GraffitiColors.MacOS.IsHighContrast returns True when the user has checked Increase contrast in Display Accessibility settings.
ADD GraffitiColors.MacOS.IsInvertedColors returns True when the user has checked Invert colors in Display Accessibility settings.
ADD GraffitiColors.MacOS.IsReducedMotion returns True when the user has checked Reduce motion in Display Accessibility settings.
ADD GraffitiColors.MacOS.IsReducedTransparency returns True when the user has checked Reduce transparency in Display Accessibility settings.
ADD GraffitiColors.MacOS now has methods to return older system colors: Black, Cyan, DarkGray, LightGray, Magenta, Purple, and White. (13714)
ADD GraffitiColorWheel in GraffitiColorPicker is now fully drawn in Xojo code, removing the color wheel image assets.
ADD GraffitiDesktopControl-based components (Calendar, HTMLEditor, SyntaxEditor) now have a UIReady event that is raised when loading and initialization is, more-or-less, complete.
ADD GraffitiHTMLEditor has a new LinkPreview(URL as String) as Boolean event for when users click the preview link in the link editor popup. Return True to cancel ShowURL call.
ADD GraffitiHTMLEditor has a new Autoheight as Boolean = False property. When True, the editor will automatically size to fit the toolbar plus the content. (14063)
ADD GraffitiHTMLEditor has a new MinimumHeight as Integer = 100 property. When Autoheight = True, the editor will not resize to a height below this value. (14063)
ADD GraffitiHTMLEditor has a new MaximumHeight as Integer = 1000 property. When Autoheight = True, the editor will not resize to a height greater than this value. (14063)
ADD GraffitiHTMLEditor has a new event KeyPress(keyChar as String, AltKey as Boolean, CtrlKey as Boolean, MetaKey as Boolean, ShiftKey as Boolean) (14063)
ADD GraffitiHTMLEditor has a new isDirty as Boolean = False property. If this property is True then changes have been made to the editor text that have not yet been received by the Xojo code.
ADD GraffitiHTMLEditor has a new MouseWheel( X as Integer, Y as Integer, deltaX as Integer, deltaY as Integer ) event. (14105)
ADD GraffitiListbox has a new IsHorizontalScrollVisible as Boolean property for determining if the horizontal scrollbar is currently shown in the display.
ADD GraffitiListbox has a new IsVerticalScrollVisible property that returns True when the vertical scrollbar is visible.
ADD GraffitiListbox has a new ColumnResizing(column as Integer) event.
ADD GraffitiListbox has a new ColumnResized(column as Integer) event.
ADD GraffitiListbox has a new CellBounds(Row as Integer, Column as Integer) as REALbasic.Rect method for determining the relative on-screen location of the specified cell.
ADD GraffitiNSImages.FromName now has optional Width and Height parameters.
ADD GraffitiNSImages now has named functions for more than 200 OS-provided images on macOS.
ADD GraffitiSegmentButtonItem now has new properties for Background and Text color settings: BackgroundColor, BackgroundColorHighlight, BackgroundColorSelected, TextColor, TextColorHighlight, TextColorSelected, CustomColors. (13834)
ADD GraffitiSyntaxEditor has a new Autocomplete as Boolean = True property for enabling or disabling the autocomplete functionality. (14019)
ADD GraffitiSyntaxEditor has a new property FileDropAllowed as Boolean = True. (13995)
ADD GraffitiSyntaxEditor has a new property FileDropCaption as String = “Drop file to load”. (13995)
ADD GraffitiSyntaxEditor has a new property FileDropCaptionWorking as String = “Loading file…”. (13995)
ADD GraffitiSyntaxEditor has a new event FileDropped(Name as String, Content as String). (13995)
ADD GraffitiSyntaxEditor has a new isDirty as Boolean = False property. If this property is True then changes have been made to the editor text that have not yet been received by the Xojo code. (14111)
FIXED GraffitiButton once again positions text and icons properly.
FIXED GraffitiCalendar no longer fails to load properly in Xojo 2019R3 on Windows. (13893)
FIXED GraffitiColorPicker no longer closes the selection window when hitting Enter on a click-to-reveal component customization field.
FIXED GraffitiColors should no longer throw a loader.cpp exception on app launch in Windows 7 and below. (13821)
FIXED GraffitiDatePicker no longer draws the time colon too far right on macOS. (14171)
FIXED GraffitiGrid no longer uses an invalid value for determining vertical scroll maximums. (14122)
FIXED GraffitiHTMLEditor no longer fails to load properly in Xojo 2019R3 on Windows. (13893)
FIXED GraffitiHTMLEditor can no longer enter an error state where adding an apostrophe followed by a space in a formatted line will remove the entire format block.
FIXED GraffitiHTMLEditor once again properly positions link inserts.
FIXED GraffitiHTMLEditor no longer returns HTML encoded ampersands in link HREFs. (13806)
FIXED GraffitiHTMLEditor now properly parses Paste content for tables on macOS. (13999)
FIXED GraffitiHTMLEditor now parses tables properly when setting content via the HTML property. (13999)
FIXED GraffitiHTMLExporter will no longer improperly Encode entities when it should be Decoding and no HTML content is present. (13806)
FIXED GraffitiImmersiveApp once again raises the Open event.
FIXED GraffitiImmersiveWindow now properly themes the titlebar in dark mode on Windows when the window is inactive.
FIXED GraffitiImmersiveWindow now properly themes menubar child menus on Windows.
FIXED GraffitiListbox no longer has a dead space between the header and list contents on Windows.
FIXED GraffitiListbox is now properly colors on Windows 7 and below. (13821)
FIXED GraffitiListbox no longer loses column headings that are set in the Open event.
FIXED GraffitiListbox now exposes MouseEnter and MouseExit events
FIXED GraffitiListbox now themes cell editor TextFields and TextAreas on Windows.
FIXED GraffitiListbox now uses the proper text color for selected rows on Yosemite. (13613)
FIXED GraffitiListbox now uses the appropriate color for border when the system Increase contrast is check on MacOS.
FIXED GraffitiListbox now fires both the DropObject and DropObjectOnRow events when dropping an object on the header.
FIXED GraffitiPopupMenu no longer throws a NilObjectException when hosted inside a ContainerControl
FIXED GraffitiPopupMenu now honors the UseFocusRing property on Windows and Linux.
FIXED GraffitiPropertyList single line text editor TextHeight is no longer ridiculously large on HiDPI displays.
FIXED GraffitiRibbon will no longer fire events on disabled Tabs or Buttons. (14032)
FIXED GraffitiRibbon no longer fires click events twice on buttons with menus. (14032)
FIXED GraffitiSearchCanvas no longer improperly selects the first autocomplete value when AutoComplete is enabled and the Clear button is clicked.
FIXED GraffitiSettings updated for Catalina compatibility. (13801)
FIXED GraffitiSyntaxEditor no longer fails to load properly in Xojo 2019R3 on Windows. (13893)
FIXED GraffitiSyntaxEditor now defers sending changes for one second after the change to reduce traffic. (13995)
FIXED GraffitiSyntaxEditor now BASE64 encodes data for transmission to alleviate issues with lost characters on very large files. (13995)
FIXED GraffitiSyntaxEditor no longer maintains focus on the editor when using the built-in find and other facilities. (14110)
FIXED GraffitiSyntaxEditor now uses a safer method of returning data from the JavaScript code to the Xojo code for selected text. (14111)
FIXED GraffitiThumbList now draws images proportionally scaled. (14012)
FIXED GraffitiThumbList once again scrolls properly. (14012)
FIXED GraffitiThumbList selection using mouse once again works properly all display scaling. (14012)
CHANGED GraffitiDesktopControl-based components now use a new XmlHttpRequest method which is more stable for large amounts of text.
CHANGED GraffitiSearchCanvas' ClearClicked event now returns a Boolean. Return True if you've handled the operation.
NOTE GraffitiDesktopControl-based components now use XmlHttpRequests on loopback for data passing by default, with fallback on failure.

Web

Type Change
NEW GraffitiWebTimeline
NEW GraffitiWebChartPoint class (13882)
ADD GraffitiWebAccordion now has an AutoHeight property. SingleSelect must be False.
ADD GraffitiWebAccordion now has a HeightChanged event for use when AutoHeight is True and SingleSelect is False.
ADD GraffitiWebAccordionNav has a new HeaderRowHeight as Integer = 24 property. (13916)
ADD GraffitiWebAccordionNav has a new ChildRowHeight as Integer = 24 property. (13916)
ADD GraffitiWebCalendar now allows arbitrary HTML in event titles.
ADD GraffitiWebCalendar's EventSelected event now has an atDate as Date parameter for determining the date on which a recurring event was clicked. (13674)
ADD GraffitiWebCalendar has a new DateDoubleClick(theDate as Date) event. (13702)
ADD GraffitiWebCalendar has a new EventDoubleClick( theEvent as GraffitiWebCalendarEvent, atDate as Date ) event. (13702)
ADD GraffitiWebCalendar has a new DisplayEventTime as Boolean = True property for controlling the visibility of time in event display. (13777)
ADD GraffitiWebCalendar now has a ShowNavButtonsAtToday as Boolean = False property for showing the Previous and Next view buttons on either side of the Today button. (13951)
ADD GraffitiWebCalendar has a new method AddViewButton(View as GraffitiWebCalendar.Views) for adding view buttons to the right side of the calendar header. (14042)
ADD GraffitiWebCalendar has a new method RemoveAllViewButtons() for removing all view buttons from the right side of the calendar header. (14042)
ADD GraffitiWebCalendar has a new method RemoveViewButton(index as Integer) for removing view buttons from the right side of the calendar header. (14042)
ADD GraffitiWebCalendar has a new method ViewButton(index as Integer) as GraffitiWebCalendar.Views for retrieving the view button at the specified index. (14042)
ADD GraffitiWebCalendar has a new method ViewButtonCount() as Integer. (14042)
ADD GraffitiWebChart has a new DatapointClicked(Datapoint as GraffitiWebChartPoint) event. (13882)
ADD GraffitiWebCheckbox has new StyleIcon and StyleIconTrue properties for setting the WebStyle of the icon. Note that setting the font face may break icon display. (13830)
ADD GraffitiWebCheckbox has new Icon and IconTrue properties that accept FontAwesome icon names in format similar to “fa-check”. (13830)
ADD GraffitiWebDatePickerRange now has ToLabelText property for setting the “to” label between the fields.
ADD GraffitiWebGrid has a new Sortable as Boolean = True property. When True, TreeView is disabled. (13974)
ADD GraffitiWebGrid has a new TreeView as Boolean = False property. When True, column sorting is disabled. (13974)
ADD GraffitiWebGrid has a new SortDirections enumeration. (14090)
ADD GraffitiWebGrid has a new method SortBy(Column as GraffitiWebGridColumn, Direction as GraffitiWebGrid.SortDirections). (14090)
ADD GraffitiWebGridColumn has a new Read Only property SortDirection as GraffitiWebGrid.SortDirections. (14090)
ADD GraffitiWebPDF now has an override for AddImage that accepts a Picture object as the first parameter. (13851)
ADD GraffitiWebPDFTable will now raise an OutOfBoundsException if you attempt to call AddCellStyle using row or column indices that do not yet exist in the dataset. (14049)
ADD GraffitiWebPopupMenu has a new LocaleCustom as Boolean = False property for defining custom locale strings. (14038)
ADD GraffitiWebPopupMenu has a new LocalInputTooShort as String property for display when more input is needed. (14038)
ADD GraffitiWebPopupMenu has a new LocaleInputTooLong as String property for display when the user has exceeded the amount of allowed search characters. (14038)
ADD GraffitiWebPopupMenu has a new LocaleSelectionTooLarge property for display when the user has selected an amount of items equal to or greater than the maximum allowed. (14038)
ADD GraffitiWebSidebar has a new BindTo(element as WebControl) method for offloading the toggling of the sidebar entirely browser-side.
ADD GraffitiWebSignature now loads images using the session's ScaleFactor. Some image adjustments may be needed depending on desired outcome. (13957)
ADD GraffitiWebSignature has a new SignatureImage property to allow setting or retrieving the actual image. (13957)
ADD GraffitiWebToggle now has an AcceptFocus property. When True, users may tab to select the toggle element. (13825)
ADD GraffitiWebToggle now responds to Space and Enter key presses to toggle the current value. (13825)
ADD GraffitiWebToolbar now has an AutoDisable property. When True, individual buttons will be automatically disabled when clicked and must be programmatically re-enabled in the Action event. (13845)
FIXED Components that allow for icons in captions should once again properly parse raw HTML.
FIXED GraffitiHTMLExporter will no longer improperly Encode entities when it should be Decoding and no HTML content is present. (13806)
FIXED GraffitiWebCalendar no longer shortens recurring events by one day. (13625)
FIXED GraffitiWebCalendar now properly removes recurring events when calling RemoveAll. (13625)
FIXED GraffitiWebCalendar once again honors CanMove and CanResize properties of GraffitiWebCalendarEvent.
FIXED GraffitiWebCalendar once again honors line-breaks in event titles.
FIXED GraffitiWebCalendar now supports adding AllDay events that span multiple days without the need to add one for a single-day then resize.
FIXED GraffitiWebCalendar no longer flickers when modifying non-recurring events. (13701)
FIXED GraffitiWebCalendar now appropriately sets the end date when modifying AllDay events that span multiple days. (13701)
FIXED GraffitiWebCalendar can once again import Google Calendars.
FIXED GraffitiWebCalendar once again properly updates the current view date after adding events. (13871)
FIXED GraffitiWebChart no longer displays X-Axis labels when LabelsVisible = False. (14155)
FIXED GraffitiWebCheckbox now supports dimensions below 36×36. (13797)
FIXED GraffitiWebContextMenu submenus should now position more intelligently on mobile displays. (13920)
FIXED GraffitiWebDatePickerSingle once again raises the TextChanged event when ForceParse = False. (13633)
FIXED GraffitiWebFontAwesome will no longer respond to clicks when disabled. (13647)
FIXED GraffitiWebFile.SaveTo method once again honors the Overwrite parameter.
FIXED GraffitiWebFile.SaveTo now handles file data that does not include a BASE64 mime type identifier.
FIXED GraffitiWebGrid Cell Styles are now persistent when sorting or otherwise modifying data. (13769)
FIXED GraffitiWebGrid's ForceFitColumns property can now be set at runtime. (13593)
FIXED GraffitiWebGrid no longer causes a KeyNotFoundException when editing rows that do not already have a value for the specified column.
FIXED GraffitiWebGrid no longer retains rows as Selected when they have been removed.
FIXED GraffitiWebGrid once again honors rows that are selected programmatically after load. (13588)
FIXED GraffitiWebGrid once again retains cell style settings after Sort. (13754)
FIXED GraffitiWebGrid no longer throws a Javascript error when setting cell values directly on a row. (13941)
FIXED GraffitiWebGrid once again properly word wraps cells with the LongText formatter.
FIXED GraffitiWebGrid's scroll events no longer break when there is more than one instance on a page. (13595)
FIXED GraffitiWebGrid rendering speed is improved as a result of changes to Cell Style handling. (13769)
FIXED GraffitiWebGrid now does a locale-aware comparison when sorting rows. (14090)
FIXED GraffitiWebGridRow's Cell method now properly formats negative numeric values. (13753)
FIXED GraffitiWebHTMLEditor now fires the Toolbar_VideoClick event when clicking the Video button on the toolbar.
FIXED GraffitiWebHTMLEditor no longer ignores the Visible property when set in the inspector.
FIXED GraffitiWebHTMLEditor no longer returns HTML encoded ampersands in link HREFs. (13806)
FIXED GraffitiWebHTMLEditor once again fires SelectionChange when no test is selected. (13980)
FIXED GraffitiWebHTMLEditor's HTML property can now be set while disabled. (14009)
FIXED GraffitiWebHTMLEditor's PlainText property can now be set while disabled. (14009)
FIXED GraffitiWebHTMLEditor no longer displays wrapping issues due to improper entity encoding when setting HTML. (14108)
FIXED GraffitiWebPagination no longer raises the PageChanged event on load and when setting the CurrentPage value. (13970)
FIXED GraffitiWebPDF once again draws borders by default as defined in the table object. (13869)
FIXED GraffitiWebPDF once again honors EndOfLine in AddText. (13931)
FIXED GraffitiWebPDF once again honors the X value for table placement on the page. (14007)
FIXED GraffitiWebPDF should now draw styled table cells properly when the line height remains unset. (14049)
FIXED GraffitiWebPopupMenu should no longer enter an error state when placed on GraffitiWebSidebar that causes the menu to remain open indefinitely. (13640)
FIXED GraffitiWebPopupMenu once again honors changes to Left/Top after loaded. (13775)
FIXED GraffitiWebPopupMenu's SetFocus method once again properly sets the focus to the element regardless of type. (13827)
FIXED GraffitiWebPopupMenu no longer selects the wrong item via mouse in IE11.
FIXED GraffitiWebPopupMenu now retains focus after selection. (13827)
FIXED GraffitiWebRadioButton now supports dimensions below 36×36. (13797)
FIXED GraffitiWebSidebar no longer loses labels when switching pages while any contained sidebars are closed.
FIXED GraffitiWebSidebar no longer applies dark styles to form elements by default. The end result should now better match user expectations, and the individual components can be styles to the user's preference.
FIXED GraffitiWebSidebar can no longer get in to a state where it is closed but cannot reopen when using Toggle.
FIXED GraffitiWebSignature now displays signature data as expected despite varied scale factors between capture and display. (13957)
FIXED GraffitiWebSignature no longer contains an error that prevents running the project in R3.1+.
FIXED GraffitiWebSignature will now draw loaded images at their original size rather than resizing them to fill the pad. For some OSes this was created low quality or incorrectly sized images. (14071)
FIXED GraffitiWebTabPanel no longer shows excessing padding around containers.
FIXED GraffitiWebTabPanel now properly resizes containers.
FIXED GraffitiWebTabPanel styling functionality significantly reworked.
FIXED GraffitiWebTabPanel once again fires the TabChanged event. (14086)
FIXED GraffitiWebTextField's SetFocus method is now overridden to work properly. (13721)
FIXED GraffitiWebToggle no longer toggles the value when setting it to specifically either True or False. (13790)
FIXED GraffitiWebWall once again properly flushes the LockUpdate buffer when setting LockUpdate = False (13567)
FIXED GraffitiWebWall should once again return containers to the page the Wall instance is on when calling RemovePanel. (14073)
FIXED GraffitiWebWall should no longer encounter a JavaScript exception when removing a panel. (14184)
FIXED GraffitiWebWall should now properly honor and restore LockUpdate setting when calling RemoveAll. (14184)
FIXED LockHorizontal and LockVertical should now be applied as expected for most components. (13966)
REMOVED GraffitiWebChart no longed exposes the PointsClicked event. Please use DataPointClicked event instead. (13882)
REMOVED GraffitiWebPopupMenu no longer supports placeholders in IE11 for single-select search due to an IE bug.
CHANGED GraffitiWebCheckbox now has improved Style handling which is offloaded to the browser.
CHANGED GraffitiWebDatePickerSingle will no longer fire the ValueChange event if ForceParse = False. This was inconsistent with user expectations.
CHANGED GraffitiWebDatePickerSingle will no longer fire the TextChange event if ForceParse = True. This was inconsistent with user expectations.
CHANGED GraffitiWebGrid.AddCellStyle is now called SetCellStyle to more appropriately match the functionality. (13769)
CHANGED GraffitiWebGrid's Sorted event now has a single parameter: ByColumn as GraffitiWebGridColumn. Direction should be accessed by using the column's SortDirection property.
CHANGED GraffitiWebRadioButton now uses higher resolution value images.
NOTE GraffitiWebFile is no longer grouped with GraffitiWebUploader since it is also used in GraffitiWebImagePicker
NOTE GraffitiWebUploader is no longer in the gsWebUploader folder, but stored in the main GraffitiSuite folder.
NOTE Switched to Xojo 2019R3.1, includes fixes for that version.
FIXED GraffitiWebLayout no longer fails to properly initialize panels that are set after opening. (14161)