Xojo 2018 Release 2

Xojo 2018 Release 2 is now available.  This release is heavy on fixes with some for the IDE, for Windows, Linux, and some new features for iOS.  

In iOS, the iOSTable now supports Pull-To-Refresh.  iOSTable now does a better job with variable height rows by setting the UseDynamicHeight property and lets the row height be determined by the content of the cell.  The inserting and removing of rows and sections is now animated if they are in the visible section of the table.  The IOSHTMLViewer is now using WKWebView instead of UIWebView.  A fix to the AutoLayout editor now tries to keep you from making constraints that could cause crashes.

Windows received a ton of love in this release but the biggest change is related to drawing.  Xojo 2018 R1 introduced a new way of drawing in Windows that effectively eliminated flicker but it also severely limited the speed of drawing.  R2 appears to have mostly fixed this issue by calling additional Paint events rather than caching pictures.  As always you should test the Windows versions of your apps to see if the drawing speed is acceptable for you.  Many of the old ways to eliminate flicker actually make drawing really slow now so test, test, test!

Besides the drawing issues there were plenty of other Windows changes as well.  Printing in no longer limited to 96 DPI.  BevelButton, HTMLViewer, Listbox, Xojo.IO.TextOutputStream/BinaryStream, Xojo.Net.HTTPSocket, Sliders, Object2D, OpenGLSurface, ContainerControls, and TabPanels were all touched in this release.

Linux and Raspberry Pi wasn’t ignored in this release either.  BevelButton, Listbox, HTMLViewer, and GroupBox received updates to fix various bugs.  Of note, the HTMLViewer on the Pi no longer hard crashes the application.

A change that could affect some people is that Graphics API now takes Doubles instead of Integers for better precision.  It probably won’t be a big deal for many developers but you will definitely want to try your drawing in non-HiDPI and HiDPI modes to see if anything has changed.  I did a quick test with Shorts, Formatted Text Control, and Tab Control and didn’t notice any drawing glitches so it’s possible that the average developer will be unaffected by it.  

Another graphics change is a new AntiAliasMode property that controls the quality level when drawing scaled pictures.  There are three modes:  Low, Default, and HighQuality.  Default Quality, I think, is simply what we have now.  The documentation (AntiAliasMode is missing from the built-in documentation but is online) is unclear as to how Default compares to Low and High Quality.  Testing should reveal this.  Also unclear from the documentation is how this affects speed but one can presume that High Quality will be a little slower but I have not tested this.

There are two new functions added to the SpecialFolder class.  The new Resources function returns the appropriate platform specific resources directory if it exists.  The new GetResource takes the passed in name and returns the file (if found).  Neither of these new functions are found in either the built-in or online documentation.

As always please review the Release Notes to see if anything affects you or interests you.

Documentation and examples are one of those things that no one likes to do.  But given the audience that Xojo caters to (the Citizen Developer) I am always amazed that things that are added to the framework often don’t have an example project.  I might be wrong (because I didn’t check every single example) but the new IOSTableRefresh and new animations don’t have an example project.  Nor is there anything for the new AntiAliasMode.  

The new SharedFolder.Resources and GetResource methods aren’t in any of the available documentation (other than release notes) but at least Resources is used in the SpecialFolderPaths project.  However, that example isn’t listed in the Release Notes as being changed.

The documentation not being available at release is simply unacceptable.  Each new feature should have an easy to find example project demonstrating its use (preferably available during the beta period too).  I also recommend having a folder for each version that has shortcuts to all of the examples that are new or modified for the current release.  Every release this list changes so the examples list doesn’t get loaded up with folders from old releases.  Regardless, I’m very disappointed the documentation in this release.  Xojo needs to do better.

Anything in this release that you’re happy, or unhappy, about?

13 thoughts on “Xojo 2018 Release 2

  1. Okay. So adding g.AntiAliasMode = Graphics.AntiAliasModes.HighQuality to a Paint event throws a compiler error.

    Yet another example of why having working examples of each new feature would eliminate this sort of crap.

    • This was reported including a workaround but did not make it into the release. Try g.AntiAliasMode = Global.Graphics.AntiAliasModes.HighQuality

    • Each and every new or changed feature should be proven tested by somebody who’s not the engineer/developer of it.
      The example project is the proof of the pudding.
      Undocumented stuff simply doesn’t exist and should not be mentioned in the release notes till test and documentation is in place.
      Why am I telling what everybody knows already ? 🙂

    • This one of many examples why I have given up on Xojo. In potential it might be a good product, but these kind of errors (besides the missing and/or bad sample projects) are at amateur level imho.

      I’ve been working with Xamarin Forms for some months now. I dare to say it’s easier than Xojo. In Xamarin you have al the options, without all those declares (“Xojoj = easy” ?). I didn’t know PullToRefresh was missing; really embarrassing for such a standard function ….

      Microsoft’s developer products are becoming great for cross-platform stuff; like for example .NET Core and Xamarin Forms (mobile and desktop).

      I really hope that Xojo survives ….

    • Sorry, there’s a typo in that code sample. It should be:

      g.AntiAliasMode = Global.Graphics.AntiAliasModes.HighQuality

      In r3, when the Graphics property is removed, then Global will no longer be necessary.

      • This is the Windows and Canvas graphics *properties*. It will still be available in the Paint event.

        The ability to draw directly into the Graphics object (property) has been deprecated for nearly 10 years. This is just removing the property.

        So, once that’s done we won’t need the Global in front of the enum.

        Thanks to Paul Lefebvre for clarifying this information.

    • Xojo could have mentioned that in the documentation since the majority of customers is using plugins in addition to what xojo offers native.

  2. I have (at least temporarily) stopped giving money to Xojo, since the Windows fiasco of 2018r1 and onwards is forcing me to stick to 2017r3 for the foreseeable future, at least as far as Windows builds are concerned. I have no interest in using the tiny subset of iOS offered by Xojo, with Xcode being free and Swift being one sweeeeet language. I imagine the Xojo Android offering will be just as limiting.

  3. We appreciate the feedback, here are some links to address a few of the things you brought up:

    The SpecialFolder stuff is in place in the online wiki here:


    There is a new iOS example for the iOSCustomTableCells.UseDynamicHeight (Examples/iOS/Controls/Table/CustomCellDynamicHeight). We don’t have an example for the iOS table refresh but we can look at adding one. You can read about it (along with the other new iOS improvements) in this blog post: https://blog.xojo.com/2018/08/07/ios-improvements-in-xojo-2018-release-2/

    The Graphics thing requires “Global” in front as the removal of the old Canvas.Graphics property is not happening until r3. We have updated the doc page code sample with that:

    g.AntiAliasMode = Global.Graphics.AntiAliasModes.HighQuality

    We are always open to suggestions and appreciate your feedback.

  4. Not renewing my pro license this year after having done it for almost a decade. To be honest, my only motivation to keep paying was the prospect of fundamental improvements to the framework (for starters, a decent iOS implementation that doesn’t require one to depend on declares for the most basic things). The license structure does not motivate me to pay on a recurring basis if the changes that I need are not being worked on. Will come back when/if that ever happens.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.