Date Released #

Version Release Date
Final October 22, 2019
Release Candidate 4 October 11, 2019
Release Candidate 3 Desktop Only October 1, 2019
Release Candidate 2 Desktop Only October 1, 2019
Release Candidate 1 September 30, 2019
Beta 3 September 18, 2019
Beta 2 September 17, 2019
Beta 1 August 18, 2019
Alpha 6 July 28, 2019
Alpha 5 July 17, 2019
Alpha 4 July 9, 2019
Alpha 3 June 28, 2019
Alpha 2 June 22, 2019
Alpha 1 June 13, 2019

Desktop #

Type Change
NEW Version information can be found in each class’s GraffitiSuiteVersion Constant
NEW GraffitiAccordion 2.0
NEW GraffitiAnimator
NEW GraffitiCard
NEW GraffitiColors
NEW GraffitiDrillMenu
NEW GraffitiFieldLabelContainer for hosting ContainerControls.
NEW GraffitiImmersiveLabel
NEW GraffitiImmersiveTextArea
NEW GraffitiImmersiveTextField
NEW GraffitiImmersiveWindow
NEW GraffitiListbox
NEW GraffitiNSImages
NEW GraffitiOptionBox
NEW GraffitiPagination
NEW GraffitiPopupMenu
NEW GraffitiWall
ADD GraffitiActionBar now has a ButtonPosition property for drawing buttons on the left or right.
ADD GraffitiActionBar now has an Alignments enumeration for ButtonPosition.
ADD GraffitiActionBar now has a new MinimumLeft property for determining the minimum value on the left.
ADD GraffitiActionBar now has a new MinimumRight property for determining the minimum value on the right.
ADD GraffitiButton no longer draws icons cut-off when using a font size for single-line text that is smaller than the icon’s height.
ADD GraffitiColorPicker’s window now supports click-to-reveal customization of color parts by clicking the value label to the left of the slider.
ADD GraffitiColorPicker now uses GraffitiColors to populate Named and System lists.
ADD GraffitiColorPicker now has a Color Wheel selector.
ADD GraffitiColorPicker now has a Color Spectrum selector.
ADD GraffitiColorPicker now supports click-to-reveal editing on RGBA labels.
ADD GraffitiDesktopControl components (Calendar, HTMLEditor, SyntaxEditor) now have a UseXHR property which defaults to false for using XmlHttpRequests to pass large data back to Xojo from JavaScript at vastly improved speeds. Falls back to viewer events on failure, and includes a lot of exception handling and content validation. This opens a port on the loopback interface to listen for the requests. USE AT YOUR OWN RISK. Must be set in the inspector. This will default to True in R31 and later. Test liberally.
ADD GraffitiDesktopControl components (Calendar, HTMLEditor, SyntaxEditor) now alert if they’re using the Native renderer on Windows.
ADD GraffitiGradientSlider now supports transparency.
ADD GraffitiHTMLEditor now makes as many styles inline as possible by default.
ADD GraffitiHTMLEditor now defers data transfer for a short period on TextChange and SelChange to reduce input lag.
ADD GraffitiHTMLEditor now immediately updates data when the editor loses focus.
ADD GraffitiHTMLEditor now parses tables pasted from Excel or OpenOffice Calc.
ADD GraffitiHTMLEditor now has an ExportCSS() as String method to get all CSS applied to the content area.
ADD GraffitiHTMLEditor now has a toPage(pageTitle as String, includeStyleBlock as Boolean = False) as String method for returning an HTML document containing the content.
ADD GraffitiHTMLEditor now has a toPageInline(pageTitle as String, Minimize as Boolean = True) as String method for returning an HTML document containing the content with all styles that can be made inline applied directly to the effected tags for better appearance of quotes, code blocks, and other block-level elements.
ADD GraffitiHTMLEditor now exposes a jsTwitter_Preview constant for adding before the </body> tag to generate full HTML documents with embedded tweets.
ADD GraffitiHTMLEditor’s EditorDefaults event now has an AllowNesting parameter. Setting this to False will disallow nesting of lists in the editor to be compliant with some email clients.
ADD GraffitiHTMLExporter now has a new toInlineStyles method for converting HTML+CSS to HTML with inline style Attributes.
ADD GraffitiHTMLLabel now has a CharacterSpacing as Double property. 1.0 = 100% of the character width.
ADD GraffitiHTMLLabel now has a LineSpacing as Double property. 1.0 = 100% of the line height. No value less than 1.0 is valid.
ADD GraffitiHTMLLabel now has a LinkColor property for setting the global link color.
ADD GraffitiFieldLabel now has a TextChanged event.
ADD GraffitiFieldLabel now supports all controls types as the Field Property is now defined as Field As RectControl.
ADD GraffitiFieldLabel now has a ResizeFieldWidth as Boolean = True property.
ADD GraffitiFieldLabel now has a ResizeFieldHeight as Boolean = True property.
ADD GraffitiRadialProgress now has a TextSizeConstraint as Integer property for ensuring text size does not exceed the specified percentage of the progress area.
ADD GraffitiTabBar has a new MinimumTabWidth as Integer property.
FIX GraffitiAccordion no longer renders changes based on mouse movement when Enabled = False
FIX GraffitiCard no longer strips empty lines from Content.
FIX GraffitiColorPicker’s Gradient Slider instances are now properly colored or, in the case of the alpha slider, show a transparent gradient.
FIX GraffitiColors no longer fails to link on macOS with regards to dwmapi.dll.
FIX GraffitiDateTimePicker no longer improperly spaces day number rows vertically at small widths.
FIX GraffitiFieldLabel now fires ClearClicked regardless of content.
FIX GraffitiGrid now properly positions controls and containers when scrolled.
FIX GraffitiGrid now displays a single row when that’s all that has been added instead of requiring multiple rows.
FIX GraffitiGrid now properly positions embedded controls regardless of their column’s ControlSizing property.
FIX GraffitiGrid child controls and containers can no longer overlap the scrollbars.
FIX GraffitiGrid can no longer encounter an OutOfBoundsException on columns that are too small for the display area.
FIX GraffitiGrid child controls will now hide if they partially fall outside the viewer on macOS.
FIX GraffitiGrid scrollbars are no longer invisible before the first repaint after the Open event.
FIX GraffitiGrid now applies blank lines for spacing before and after tables.
FIX GraffitiHTMLEditor once again fires the LostFocus and GotFocus events.
FIX GraffitiHTMLEditor once again properly wraps paragraph blocks on Windows.
FIX GraffitiHTMLEditor now uses a margin style for indented blocks rather than a class.
FIX GraffitiHTMLEditor should now properly return correct SelStart, SelLength and SelText.
FIX GraffitiHTMLEditor now relies entirely on QuillJS to do the heavy lifting in SelStart, SelLength, and SelText. This should fix a number of rarely reported issues where these properties would be offset by the number of block elements appearing in the text above the selection.
FIX GraffitiHTMLEditor now relies on Quill to pass back the plain text, rather than stripping this itself. Should be the best forward-compatible option.
FIX GraffitiHTMLEditor now does a lexical comparison on changes to HTML when receiving the text changed notification rather than a simple equals comparison.
FIX GraffitiHTMLEditor now handles raw HTML not generated by QuillJS a bit better.
FIX GraffitiHTMLEditor now has a bit more exception handling on the table functionality.
FIX GraffitiHTMLEditor’s bottom border is no longer cut off.
FIX GraffitiHTMLEditor once again loads properly on macOS 10.10 (issue introduced in R29 Final).
FIX GraffitiHTMLEditor no longer sets the clipboard’s text value after defining the HTML type on the clipboard. Was potentially overwriting.
FIX GraffitiHTMLEditor once again fires the format update event when the current selection has no formatting applied.
FIX GraffitiHTMLEditor now updates selection more quickly.
FIX GraffitiHTMLEditor no longer loses its HTML content when setting Spellcheck = True in the Open event.
FIX GraffitiHTMLEditor once again supports wrapping images in links.
FIX GraffitiHTMLEditor now properly detects the altimage type in hasMedia.
FIX GraffitiHTMLEditor no longer strips ampersands.
FIX GraffitiHTMLEditor no longer strips selected text when clicking the “Custom” button in the color menu.
FIX GraffitiHTMLEditor once again properly returns the format value for checked lists.
FIX GraffitiHTMLEditor once again properly applies SelList* setting when set via property.
FIX GraffitiHTMLEditor once again properly applies SelHeader setting when set via property.
FIX GraffitiHTMLEditor once again properly applies SelAlign setting when set via property.
FIX GraffitiHTMLEditor now performs a full format reset before setting content via the HTML and PlainText properties.
FIX GraffitiHTMLEditor now encodes special characters when setting content via the PlainText property.
FIX GraffitiHTMLEditor no longer inappropriately applies some block styles to the entire document when setting content via the HTML property.
FIX GraffitiHTMLEditor now properly resizes image height when both height and width are defined via InsertImage or HTML tag.
FIX GraffitiHTMLExporter now does a case sensitive compare when encoding and decoding HTML entities.
FIX GraffitiHTMLExporter now only replaces repeating spaces when encoding.
FIX GraffitiHTMLExporter’s HTMLEntity* methods should be much faster now.
FIX GraffitiHTMLExporter.toEmail should no longer strip spaces around some tags and add spaces around others.
FIX GraffitiHTMLExporter.toEmail now uses the current system’s EndOfLine setting.
FIX GraffitiHTMLExporter.toEmail once again properly numbers ordered lists.
FIX GraffitiHTMLExporter.FromEntity no longer strips ampersands.
FIX GraffitiHTMLExporter.CleanupHTML now removes blank paragraph tags. Blank paragraph tags are stripped out by QuillJS and appear to be ignored in most browsers.
FIX GraffitiHTMLLabel now properly draws text on HiDPI displays.
FIX GraffitiHTMLLabel can no longer rarely encounter OutOfBoundsExceptions when drawing under an overly-specific set of circumstances.
FIX GraffitiMenuWindow now appropriately sizes to its container if the dimensions have changed when you call ShowInPlace.
FIX GraffitiMenuWindow now uses Cocoa declares for determining position when building for Cocoa.
FIX GraffitiPropertyList should no longer encounter OutOfBoundsExceptions when editing a password cell after performing actions outside the cell.
FIX GraffitiRadialProgress is now HiDPI-aware.
FIX GraffitiRadialProgress once again honors the TextSize property. If TextSize is -1, then it will automatically calculate the size to fill the display.
FIX GraffitiRadialProgress no longer draws some custom colors as white for certain styles.
FIX GraffitiStepBar now uses a color-based hit detection method to get more accurate results on mouse events.
FIX GraffitiSyntaxEditor now longer forces soft tabs on HTML and PHP modes even when UseSoftTabs = False.
FIX GraffitiSyntaxEditor now allows pasting in to Find and Replace fields of the built-in search pane.
FIX GraffitiSyntaxEditor now performs SelectAll on Find and Replace fields of the built-in search pane when triggered.
FIX GraffitiSyntaxEditor now allows copying from Find and Replace fields of the built-in search pane.
FIX GraffitiSyntaxEditor now allows cutting from Find and Replace fields of the built-in search pane.
FIX GraffitiSyntaxEditor now allows Undo and Redo on Find and Replace fields of the built-in search pane.
FIX GraffitiSyntaxEditor Tab and Shift+Tab keys now indent and outdent properly once again on macOS.
FIX GraffitiSyntaxEditor now properly accepts focus on open.
FIX GraffitiTabBar close icons now draw properly on the Y-axis.
FIX Changed to using Global.Tooltip for future compatibility.
FIX More analysis warnings.
NOTE GraffitiGrid rendering speed improvements. Note that large data sets will cause slowdowns the further in to the set you scroll. This is a result of tracking of variable row height support, and is unavoidable. Paging is recommended.
NOTE GraffitiGrid requires embedded ContainerControls to have a Transparent property value of False. It will set the backdrop accordingly.
NOTE GraffitiHTMLEditor updated to QuillJS 1.3.6
NOTE This version represents a pretty major shift for GraffitiHTMLEditor as we finally move to inline styling for greater outside compatibility. Test liberally.
NOTE Folder names have changed to avoid a naming collision when using IDE Scripts to automate changes.
NOTE GraffitiTextField is now rebranded as GraffitiFieldLabel
NOTE All classes now rely on the functionality in GraffitiColors for determining the system’s appearance setting (Dark/Light).
NOTE All calls to CType replaced with casting.
NOTE As of Release Candidate 1, methods in the Immersive module no longer begin with Immersive.

Web #

Type Change
NEW Version information can be found in each class’s GraffitiSuiteVersion Constant
ADD GraffitiHTMLExporter now has a new toInlineStyles method for converting HTML+CSS to HTML with inline style Attributes.
ADD GraffitiWebAlert now has a MessageShown(message as GraffitiWebAlertMessage) event that fires after the message is visible in the browser.
ADD GraffitiWebAlerts that contain a Button with Default = True will now trigger that button’s action when pressing Enter/Return.
ADD GraffitiWebAlertButton now has a Default as Boolean = False property.
ADD GraffitiWebButton now has an AutoDisable property to prevent subsequent unnecessary clicks while performing operations.
ADD GraffitiWebFavIcon now has a DetachFrom(Target as WebImageView) method. Call this method before any Close events to remove the reference from the browser that is created by AttachTo.
ADD GraffitiWebFavIcon now supports arbitrary text in the notification icon by using the SetIconText method.
ADD GraffitiWebGrid now has a CellMouseEnter(row as GraffitiWebGridRow, column as GraffitiWebGridColumn) event.
ADD GraffitiWebGrid now has a CellMouseExit(row as GraffitiWebGridRow, column as GraffitiWebGridColumn) event.
ADD GraffitiWebGrid now supports editing time values using the TimePicker and the following enum values: EditTypes.TimeWithSeconds, EditTypes.TimeWithoutSeconds.
ADD GraffitiWebGrid now supports formatting time values with the following enum values: FormatTypes.TimeWithSeconds, FormatTypes.TimeWithoutSeconds.
ADD GraffitiWebGrid has a new NextRowOnEnter property. When false, the Grid will attempt to navigate horizontally when the enter key is pressed. This should only be used in scenarios where SelectionType is set to Cell.
ADD GraffitiWebGrid’s EditBegin event has four new additional parameters for the location of the cell on the screen and dimensions: cellLeft as Integer, cellTop as Integer, cellWidth as Integer, cellHeight as Integer
ADD GraffitiWebGrid’s CellClick event now has parameters for the cell’s Left, Top, Width and Height relative to the page.
ADD GraffitiWebGrid’s CellDoubleClick event now has parameters for the cell’s Left, Top, Width and Height relative to the page.
ADD GraffitiWebGrid’s ContextClick event now has parameters for the cell’s Left, Top, Width and Height relative to the page.
ADD GraffitiWebGrid has a new EditorText(Assigns newValue as String) method for setting the text value of the editor field while Editing = True. Should only be used on EditTypes.Text.
ADD GraffitiWebGrid has a new EditKeyPress(Row as GraffitiWebGridRow, Column as GraffitiWebGridColumn, KeyCode as Integer, AltKey as Boolean, CtrlKey as Boolean, ShiftKey as Boolean, MetaKey as Boolean, EditorValue as String) event for catching key presses in the editor. Does not catch modifier keys alone.
ADD GraffitiWebHTMLEditor now has a DarkMode as Boolean property.
ADD GraffitiWebPopupMenu now exposes GotFocus and LostFocus events.
ADD GraffitiWebTabPanel now has an Item(index as Integer) method for retrieving the specified item.
ADD GraffitiWebTabPanel now has an ItemCount() as Integer method for retrieving the number of items currently added (Ubound + 1).
ADD GraffitiWebTabPanel now has an ItemIndex(item as GraffitiWebTabPanelItem) as Integer method for retrieving the index of the specified item.
ADD GraffitiWebTabPanel now has a Value() as GraffitiWebTabPanelItem property for setting or retrieving the current value.
ADD GraffitiWebTabPanelItem now has a Style property for setting the tab style. Must be set upon creation.
ADD GraffitiWebTabPanelItem now has a StyleActive property for setting the tab style when active. Must be set upon creation.
ADD GraffitiWebTabPanelItem now has a PageStyle property for setting the style of the tab’s contents container. Must be set upon creation.
ADD GraffitiWebTextField now has a MaxLength as Integer = -1 property. Set to -1 for the maximum HTML limit of 524288.
FIX Under certain scenarios, NilObjectExceptions could be encountered when executing code in Destructors of pages or Containers that caused a NilObjectException in GraffitiControlWrapper. These are now logged when not debugging to prevent unhandled exception issues in compiled apps.
FIX Loading FontAwesome no longer causes a load slowdown and errors in the console.
FIX All classes that support embedding FontAwesome icons no longer improperly render when using non-English characters.
FIX GraffitiWebAlert now uses UUIDs from GraffitiWebAlertMessages and GraffitiWebAlertButtons rather than names internally.
FIX GraffitiHTMLExporter now does a case sensitive compare when encoding and decoding HTML entities.
FIX GraffitiWebAdSense no longer throws a JavaScript exception on the first ad shown in Edge.
FIX GraffitiWebAccordion no longer applies an unnecessary text color to labels contained within.
FIX GraffitiWebAccordion no longer hides separators.
FIX GraffitiWebAlert will no longer throw JavaScript exceptions on unsafe GraffitiWebAlertButton names. These are now altered to be safe and may be different than the name you assign. Please update your code.
FIX GraffitiWebAlert no longer has a typo in the “theMessage” parameter. Handler code changes will be necessary.
FIX GraffitiWebBarcodeReader once again functions properly on iOS Safari.
FIX GraffitiWebButton no longer loads all event code, even when handlers aren’t used.
FIX GraffitiWebButton has improved icon parsing.
FIX GraffitiWebButton no longer fires events multiple times on pages that Shown, then Hidden, then Shown again.
FIX GraffitiWebButtonSegment has improved icon parsing.
FIX GraffitiWebCalendar now properly filters repeating events based on view.
FIX GraffitiWebCalendar no longer displays a start time for repeating All Day events.
FIX GraffitiWebCalendar now properly applies StyleDayToday and StyleDayFuture after switching views.
FIX GraffitiWebCamera once again functions properly on iOS Safari.
FIX GraffitiWebDatePicker variants once again properly apply StartDate and EndDate without either failing or causing other issues.
FIX GraffitiWebDatePicker no longer loses all default styling when a custom style is applied. This allows for additive styling of, for example, a border color to show invalid entry.
FIX GraffitiWebDatePicker variants once again properly disable and enable dates without throwing a JavaScript exception.
FIX GraffitiWebDatePicker variants have improved WebStyle handling.
FIX GraffitiWebDatePicker variants now display Spanish Day/Month names in lowercase in accordance with rules set forth by the Royal Spanish Language Academy.
FIX GraffitiWebDatePicker variants now more appropriately position the popup when certain styles are applied to the <body> tag.
FIX GraffitiWebFavIcon will no longer throw a NilObjectException in some scenarios when calling SetIconCount.
FIX GraffitiWebFavIcon will no longer throw a NilObjectException when flashing and the instance is destroyed.
FIX GraffitiWebFieldMask should no longer encounter NilObjectExceptions when initialized improperly.
FIX GraffitiWebFontAwesome once again loads properly in Firefox.
FIX GraffitiWebGrid once again allows mouse selection in cell editor.
FIX GraffitiWebGrid’s Currency EditType no longer causes a JavaScript error in Safari.
FIX GraffitiWebGrid scrolling should be much faster in all scenarios.
FIX GraffitiWebGrid’s DeselectAll method now works when SelectionMode = Single.
FIX GraffitiWebGrid no longer throws a JavaScript exception when loading data that contains doubles or currency before adding columns.
FIX GraffitiWebGrid no longer throws a JavaScript exception in Edge when collapsing a tree parent row.
FIX GraffitiWebGrid columns can once again be both resized and reordered in the browser.
FIX GraffitiWebGrid once again clears the in-browser data when calling ResetGrid.
FIX GraffitiWebGrid no longer retains a large empty space when hiding the first column.
FIX GraffitiWebGrid no longer fires SelectionChange twice.
FIX GraffitiWebGrid loading has been optimized a bit more. It no longer sends data to the browser on each property change before the first full load.
FIX GraffitiWebHTMLEditor no longer inappropriately exposes the Length property in the inspector.
FIX GraffitiWebHTMLEditor no longer inappropriately exposes the PlainText property in the inspector. You can assign PlainText to the HTML property.
FIX GraffitiWebHTMLEditor no longer throws a JavaScript exception when attempting to load Tweets.
FIX GraffitiWebHTMLEditor now relies entirely on QuillJS to do the heavy lifting in SelStart, SelLength, and SelText. This should fix a number of rarely reported issues where these properties would be offset by the number of block elements appearing in the text above the selection.
FIX GraffitiWebHTMLEditor now relies on Quill to pass back the plain text, rather than stripping this itself. Should be the best forward-compatible option, although causes more data to be passed between the server and client.
FIX GraffitiWebHTMLEditor now does a lexical comparison on changes to HTML when receiving the text changed notification rather than a simple equals comparison.
FIX GraffitiWebHTMLEditor now handles raw HTML not generated by QuillJS a bit better.
FIX GraffitiWebHTMLEditor no longer throws a JavaScript exception on getFormat.
FIX GraffitiWebHTMLEditor now properly returns format properties on selection change.
FIX GraffitiWebHTMLEditor now uses the new table style as seen in the desktop version.
FIX GraffitiWebHTMLEditor no longer removes spaces while typing in Firefox.
FIX GraffitiWebHTMLEditor once again honors the WordWrap property.
FIX GraffitiWebLabel has improved icon parsing.
FIX GraffitiWebPDF once again honors table LineHeight properties.
FIX GraffitiWebPDF no longer forces a download when using FromHTML. You should use the Download() method instead.
FIX GraffitiWebPDFCellStyle no longer exposes the unused HasFillColor property.
FIX GraffitiWebPopupMenu now properly sizes on GraffitiWebSidebar.
FIX GraffitiWebPopupMenu now honors lock properties on containers in GraffitiWebSidebar.
FIX GraffitiWebPopupMenu now sets the SelectedItem property for single select instances when the item is set as selected when added.
FIX GraffitiWebPopupMenu now properly removes previous StyleTag values when set to Nil.
FIX GraffitiWebPopupMenu now properly removes SkinTag values when set to None on MultipleSelect variants.
FIX GraffitiWebProgressRadial has improved icon parsing.
FIX GraffitiWebProgressSemiCircle has improved icon parsing.
FIX GraffitiWebTabBar no longer throws a NilObjectException when removing tabs under certain circumstances.
FIX GraffitiWebTabPanel’s Items property is no longer exposed. Use methods for add/remove/retrieve.
FIX GraffitiWebTextField no longer appears to be disabled when ReadOnly = True.
FIX GraffitiWebTextField has improved icon parsing.
FIX GraffitiWebTimePicker will now attempt to ensure that it remains positioned within the browser’s viewport.
FIX GraffitiWebToolbar now properly updates GraffitiWebToolbarButton width in the browser when changed directly via buttonInstance.Width = <n>
FIX GraffitiWebTree once again raises the Open event.
FIX GraffitiWebTree’s CheckAll and UncheckAll methods once again function correctly.
FIX GraffitiWebTree’s GetIndexOf method now uses the framework’s IndexOf method.
FIX GraffitiWebTree’s ItemChecked and ItemUnchecked events no longer fire when the selection is changed programmatically.
CHANGE GraffitiWebAccordionNavItem.NotificationCount is now a Double, and all Constructors updated to match.
CHANGE GraffitiWebAccordionNavItem.NotificationCount is now formatted to the user’s locale.
NOTE Removed deprecated GraffitiWebAlert.ButtonClick event with string parameters. Use GraffitiWebAlert.ButtonClicked.
NOTE Removed deprecated GraffitiWebAlert.ButtonClick_O event. Use GraffitiWebAlert.ButtonClicked.
NOTE Replaced deprecated GraffitiWebAlert.MessageClosed with parameters and functionality from MessageClosed_O.
NOTE Removed deprecated GraffitiWebAlert.MessageClosed_O event. Use GraffitiWebAlert.MessageClosed.
NOTE Folder names have changed to avoid a naming collision when using IDE Scripts to automate changes.
NOTE GraffitiWebHTMLEditor updated to QuillJS 1.3.6
NOTE FontAwesome support updated to Version 5.10.1
NOTE Various Edge browser issues fixed.