Skip to main content

Changelog

Version 4.22.1

  • Release date: September 8th, 2023

  • Bugfixes in TouchGFX Designer:

    • Fixed crash bug when font for language setting was missing.
    • Fixed crash bug when generating very large projects.
    • Fixed visibility parameter for SVG Image widget not being generated.
    • Fixed erroneous links for the "Request feature" and "Q&A" buttons.
    • Fixed not being able to set "Size in bytes" when toggling "Override default buffer size".
    • Fixed "Images" being empty when importing a GUI.
    • Fixed being able to insert a Custom Container in another Custom Container.
    • Fixed crash bug when no widget property is selected and the keyboard arrow keys are clicked.
    • Fixed bug where fonts with predefined bitmaps were not rendering when selecting a size that was not included in the list of available sizes.
  • Bugfixes in TouchGFX Core:

    • Fixed bug in ScrollWheel overshoot.
    • Fixed bug in rendering SVG Image together with a Texture Mapper.
    • Fixed linker issue seen with nemagfx_core_release.a library for Cortex-M7.
    • Optimized blending for non-transparent elements on STM32U5 platforms.

Version 4.22.0

  • Release date: June 19th, 2023

  • New TouchGFX Designer Features:

    • Added ability to specify L8 compression for images.
    • Added direct user communication.
    • Improved proxy authentication management.
    • Added description tooltips to the different image formats.
    • Containers can now be marked as cachable from inside TouchGFX Designer.
    • Drag and drop SVG images to TouchGFX Designer now creates an SVG image widget.
    • Added the ability to cancel "Generate Code", "Run Simulator" and "Run Target" commands.
    • The MJPEG software converter is now included when video is enabled in additional features.
    • Right-clicking a widget in the canvas tree view when having multiple widgets selected now affects all selected widgets.
    • The context menu inside the image tab is now identical between the tree view and the image table.
    • When deleting multiple text groups inside the text tab, the prompt now asks for confirmation for all selected text groups.
    • Added SetBorderSize action.
  • Bugfixes in TouchGFX Designer:

    • Fixed discrepancy between canvas and simulator when positioning texts.
    • Fixed bug where the "Run Simulator" tooltip would not disappear.
    • Fixed faulty memory usage when using large values for SVG image widget.
    • Fixed errors regarding interactions sometimes not showing.
    • Fixed faulty keyboard focus in the widget menu, when previous focus is outside of TouchGFX Designer.
    • Fixed renaming an interaction not triggering a refresh of the name in places where the renamed interaction is used.
    • Fixed scenarios where a backup .touchgfx file would be unnecessarily created.
    • Fixed whitespace characters in wildcards being ignored and removed by the Designer.
    • Fixed "Unsaved Changes" popup appearing sometimes when no changes were made.
    • Fixed crash when loading a read-only .touchgfx file.
    • Resizing tab with the mouse made easier.
    • Moving TouchGFX Designer to a secondary extended screen could cause TouchGFX Designer to not show the canvas.
    • Fixed issue where pressing the F5 key twice would run the simulator but TouchGFX Designer would output an unwarranted error in console.
    • Cleaned up some generated code for ScrollList.
    • Fixed having a space in Windows path would cause different behaviour when opening a project from inside TouchGFX Designer versus opening the file directly from the Windows path.
    • Fixed dragging texts in the text tree view would have no effect.
    • Generating code which includes button widgets could make the unsaved circle appear after generating code.
    • Fixed edits made to files via Visual Studio not being detected by TouchGFX Designer.
    • Removed an extra generated semicolon from ScreenPresenter.hpp.
    • Fixed faulty keyboard focus in the text tab.
    • Fixed a bug where copy and pasting a screen with a Set Text interaction, and then deleting the interaction from one of the screens, would wrongly remove the text used from both interactions.
    • Fixed the red error dot only showing on a screen tree view node when the node is collapsed.
    • Enlarged the splitter area needed to change the width of text tree tab.
    • Fixed code generation in file FrontendApplicationBase.cpp.
    • Fixed removing the hour and the minute hand in an analog clock causing the second hand to not show on canvas.
    • Fixed having multiple text translations for the same language corrupting the project.
    • Fixed deleting an interaction which triggers another interaction would not giving an error on the second interaction.
    • Fixed videos showing with different colors in the simulator when the project uses 32 bits per pixel.
    • Fixed elements being rendered on the canvas in reverse order for dynamic/static graphs.
  • New TouchGFX Core Features:

    • Added L8 Image Compression for 16bpp, 24bpp and 32bpp framebuffer formats.
    • Added IAR 9.20.1 libraries for cortex M0+, M4f, M7, M33, and M55. Removed IAR 7 library for M7.
  • Bugfixes in TouchGFX Core:

    • Deleting the last page in a SwipeContainer was not possible.
    • Unicode::snprintfFloats() rounding error fixed.
    • Setting new bitmaps on a Slider would not update the screen correctly.
    • Slider now uses int16_t consistently to allow for use of negative values. Indicator position is more precisely calculated.
    • ScrollWheel now respects setOvershootPercentage().
    • Fixed parser error in SVG ArcTo command.
    • Fixed assert in LCD.cpp regarding Wide Text with ellipsis.
    • Fixed issue on GPU2D (NeoChrom) targets where changing X and Y angle of TextureMapper widgets did not render correctly.
    • Fixed issue on GPU2D (NeoChrom) targets where HAL::lockFrameBuffer() did not properly process queued draw operations prior to returning.

Version 4.21.4

  • Release date: April 24th, 2023

  • Bugfixes in TouchGFX Designer:

    • Fixed bug where selecting an image for an Image Button Style in a Flex Button was not possible.
    • Fixed bug where the order of graph drawer elements in the generated code for Dynamic and Static Graph was reversed.

Version 4.21.3

  • Release date: March 14th, 2023

  • New TouchGFX Generator Features:

    • FreeRTOS CMSIS V2 support with GPU2D (NeoChrom).
  • Bugfixes in TouchGFX Generator:

    • GPU2D (NeoChrom) memory pool was not always aligned properly in memory.

Version 4.21.2

  • Release date: March 1st, 2023

  • Bugfixes in TouchGFX Designer:

    • Fixed crash related to interactions.
    • Fixed crash related to deleting texts in search results.
    • Fixed SVG picker showing duplicates when undoing selected SVG.
    • Fixed physical button names not being visible in interactions.
    • Fixed erroneous code generation for Dynamic/Static Graph widget.
    • Fixed faulty memory usage related to texts.

Version 4.21.1

  • Release date: January 16th, 2023

  • Bugfixes in TouchGFX Designer:

    • Fixed bug where locking a widget would cause it to appear in position (0,0) when compiling the code
    • Fixed faulty memory usage when switching between screens
    • Fixed case where importing a Custom Container containing a font already existing in the project could cause a crash
    • Fixed a case where some widgets would not show their used images correctly when copy/pasted
  • Bugfixes in TouchGFX Core:

    • Solid colors in SVGs would wrongly be placed in RAM.

Version 4.21.0

  • Release date: December 19th, 2022

  • New TouchGFX Designer Features:

    • TouchGFX Stock added. Free designs, images and icons provided within TouchGFX Designer.
    • Access to material icons made by Google.
    • New SVG Image widget.
    • New image picker for all image-related widgets.
    • New preset picker for browsing themes and presets.
    • Mouse coordinates shown when hovering canvas.
    • New action for setting border color on box with border widget.
    • Now able to navigate widget menu using arrow keys.
    • Progress indicator widgets now support two new triggers, ValueUpdated and ValueUpdatedCompleted.
    • Ability to close current project from file menu.
    • Designer now remembers start up and save folder.
    • Added tooltips for visibility and lock buttons in tree view of canvas.
    • Added new icon for lock button in tree view of canvas, to make it more clear if a widget is locked or unlocked.
    • Added delay property to move and fade actions.
  • Bugfixes in TouchGFX Designer:

    • Fixed bug regarding DPI of images used in Analog clock.
    • Fixed bugs regarding linespacing.
    • Fixed bug with minimum and maximum check for x-range in Static Graph.
    • Fixed bug regarding auto-size in TextArea widget.
    • Fixed being able to set negative border width on box with border widget.
    • Fixed disappearing interaction when undoing.
    • Fixed bug with DPI in images used by Gauge widget.
    • Fixed bug with not showing an error when deleting wildcard character in TextProgress and DigitalClock widgets.
    • Fixed bug with long names in interactions.
    • Fixed bug with escaped characters in text.
    • Changing startup screen now results in unsaved changes.
    • Fixed bug with code generation regarding ScreenAnimationEnded trigger.
    • Fixed bug happening when users attempt to open a project with an unknown version.
    • Text field size in Widget tree view increased.
    • Fixed the ability to select multiple screens using right mouse click.
    • Fixed being able to set radius of a Circle Widget to a negative number
    • Fixed text for checkboxes not wrapping.
    • Fixed image icon not updating when changing simulator skin image.
  • New TouchGFX Core Features:

    • New widget: SVG Image
    • Support in image converter to read basic SVG images. These are converted to binary data that can be drawn using the SVG Image widget. See the documentation for more information.
    • New wide text actions and redefinition of two existing formats:
      • WIDE_TEXT_NONE: No change, no automatic line breaks.
      • WIDE_TEXT_WORDWRAP: Changed, will keep adding line breaks and will not add ellipsis.
      • WIDE_TEXT_WORDWRAP_ELLIPSIS: New, will add ellipsis as late as possible (even mid-word) on the last line in the TextArea.
      • WIDE_TEXT_WORDWRAP_ELLIPSIS_AFTER_SPACE: No change, automatic line breaks, ellipsis will not be in the middle of a word.
      • WIDE_TEXT_CHARWRAP: Changed, will keep adding line breaks and will not add allipsis.
      • WIDE_TEXT_CHARWRAP_ELLIPSIS: New, will add ellipsis at end of last line in the TextArea.
      • WIDE_TEXT_CHARWRAP_DOUBLE_ELLIPSIS: No change, will add two ellipsis at end of the last line in the TextArea.
    • AbstractShape::setFillingRule() added to also allow EVEN-ODD filling, in addition to the default NON-ZERO filling.
    • As images on monochrome displays do not support alpha channel, any alpha value is now applied to each pixel before converting to BW.
    • Optimized SlideTransition and CoverTransition.
    • Class FullSolidRect has been removed from WipeTransition.
    • ImageConvert is using updated libpng 1.6.38. Generated images look the same.
  • Bugfixes in TouchGFX Core:

    • Font metrics are handled better so now font height does not depend on which letters are actually being used. This means that default line spacing might be different - this can be adjusted using TextArea::setLinespacing(). For GraphLabels and ButtonWithLabel, texts might be placed better, depending on your font.
    • Setting a negative radius on a Circle will set the radius to zero.
    • Setting a negative line width on a Circle will set the line width to zero (causing a filled circle to be drawn).
    • More robust handling of timer widgets in cases with lots of timer widgets.
    • Fixed performance issue observed when upgrading to TouchGFX 4.19.0, 4.19.1, 4.20.0 (Removed Container::invalidateContent())
    • Font::getSpacingAbove() return type changed from uint8_t to int16_t to prevent overflow.
  • Deprecated TouchGFX Core Features:

    • Font::getMaxTextHeight() and Font::getMinimumTextHeight() have been replaced by Font::getHeight(). Returns the height of the font.
    • Font::getFontHeight() has been replaced by Font::getBaseline(). Returns the distance to the baseline.

Version 4.20.0

  • Release date: June 22nd, 2022

  • New TouchGFX Designer Features:

    • Import and Export of custom containers.
    • A new notification will tell why F5- and F6-shortcuts are unavailable.
    • A new Code-menu with the ability to run simulator, run target, generate code and open project files.
    • New trigger added, with the ability to trigger on every N-tick.
    • Ability to copy text ressource Id, similar to copying image-Id.
  • Bugfixes in TouchGFX Designer:

    • Run-buttons update when validation changes.
    • Some widgets now support non-int radius, including circle.
    • Fixed Menu-items being available via shortcuts in the lobby.
    • Fixed SetShapeColor Action not generating correct code.
    • Fixed TextArea widget was not showing text when outside its parent, when canvas was set to show clipped content.
    • Fixed text alignment for auto-generated text not being copied correctly when copying and pasting a widget using the text.
    • Removed "FileNameImage"-property from the .touchgfx file which appeared by clicking "Image"-button, the "Color"-button and then generating code.
    • Changed order and categorization ButtonWithLabel of properties.
    • Fixed rotation of text in TextArea widget not rotating as expected.
    • Fixed not being able to write a newline in text-fields.
    • Action SetLanguage will now work without a text area.
    • Fixed fonts in font picker dropdown not being sorted alphabetically.
    • Fixed dropdowns not responding to keyboard input to navigate to a desired item.
  • New TouchGFX Core Features:

    • Canvas Widget Renderer (CWR) is now significantly faster. CWR has been optimized and all painters have been rewritten and optimized to give faster rendering even with less memory. Painters now have a new interface, so old custom painters have to be rewritten, e.g. by altering one of the painters included in TouchGFX or reading the article on the subject. Further, painters for 16bpp and 24bpp will use hardware acceleration (when possible).
    • If using CanvasWidgetRenderer::setupBuffer(), remember to include the line #include <touchgfx/canvas_widget_renderer/CanvasWidgetRenderer.hpp>
    • Function mixColors() has been renamed to alphaBlend() in AbstractPainters for 16bpp and 8bpp.
    • Text remapping in TextConvert has been changed slightly so "yes" works the same, but "no" will remap texts within a language, not across languages.
    • Updated Freetype 2.11.0 to 2.12.1 (used by the font convert utility).
    • Updated zlib 1.2.11 to 1.2.12 (used by the font/image convert utility).
    • Applications compiled using arm gcc are now approximately 15Kb smaller and 1% faster (due to removal of debug code in the library).
  • Bugfixes in TouchGFX Core:

    • Slide transition did not work in portrait mode on 16bpp and 24bpp.
    • TextArea::getTypedText(), TextProgress::getTypedText(), GraphTitle::getTitleTypedText() and GraphLabelsBase::getLabelTypedText() now returns a "const TypedText &".
    • Special fonts, such as wingding.ttf, are now supported.
    • Unicode::snprintf no longer sign extends char values from 128 to 255 in the format string.
  • Deprecated TouchGFX Core Features:

    • CanvasWidget::resetMaxRenderLines() has been removed as it has no function with the rewritten CWR.
    • Color::getColorFrom24BitRGB() removed. Use Color::getColorFromRGB().
    • Color::getRedColor() removed. Use Color::getRed().
    • Color::getGreenColor() removed. Use Color::getGreen().
    • Color::getBlueColor() removed. Use Color::getBlue().
    • Color::getRGBFrom24BitHSV() removed. Use Color::getRGBFromHSV().
    • Color::getHSVFrom24BitRGB() removed. Use Color::getHSVFromRGB().
    • Color::getRGBFrom24BitHSL() removed. Use Color::getRGBFromHSL().
    • Color::getHSLFrom24BitRGB() removed. Use Color::getHSLFromRGB().
    • Color::getHSVFromHSL(uint8_t, uint8_t&, uint8_t, uint8_t&) removed. Use Color::getHSVFromHSL(uint8_t,uint8_t,int8_t,uint8_t&,uint8_t&,uint8_t&).
    • Color::getHSLFromHSV(uint8_t, uint8_t&, uint8_t, uint8_t&) removed. Use Color::getHSLFromHSV(uint8_t,uint8_t,int8_t,uint8_t&,uint8_t&,uint8_t&).

Version 4.19.1

  • Release date: April 4th, 2022

  • New TouchGFX Designer Features:

  • Bugfixes in TouchGFX Designer:

    • Fixed missing color properties for Text Button Style on a Flex Button Widget.
    • Fixed erroneous wildcard code generation for Text Button Style on a Flex Button Widget.
    • Fixed erroneous code generation when using a Flex Button in InteractionEndedCallBacks.
    • Fixed erroneous 'Text' property label for Dynamic- & Static Graph labels.
    • Fixed touchgfx_components folder not being deleted after version upgrade.
    • When a cell lost focus in the text grid, it would sometimes result in a crash
  • New TouchGFX Core Features:

  • Bugfixes in TouchGFX Core:

    • Fixed FontConvert not generating new code if only change was ellipsis character.
    • Fixed bug in Video Widget destructor that could cause failure in some applications.

Version 4.19.0

  • Release date: March 21st, 2022

  • New TouchGFX Designer Features:

    • New and improved interface for text and typography handling for easier overview and management of large amounts of text.
      • Added features for text and typography management include:
        • Merging of single use and resources to one grid.
        • Easy conversion of texts.
        • Grouping.
        • Rearrange and copy texts in grid.
        • Search.
        • Hide language columns in grid.
        • Language settings for typographies.
    • New widget: Static Graph
  • Bugfixes in TouchGFX Designer:

  • New TouchGFX Core Features:

    • New widget: Graph.
    • New texts.xml format supporting texts in groups and language specific settings for typographies.
    • Added HAL::setAnimationStorage().
    • Added ScrollBase::setOvershootPercentage(), and getOvershootPercentage(), for drag events at end of lists that are not circular. This works for ScrollLists and ScrollWheels.
    • Event::getEventType() is now const.
    • Pressing F5 in the simulator will call Application::changeToStartScreen() which can be implemented in FrontendApplication.
    • The simulator ability to flash each invalidated area can be set from code using HALSDL2::setFlashInvalidatedAreas().
    • New function invalidateContent() to only invalidate the part of a widget that contains a graphical element, has been added to Drawable, Containers, Widgets and Mixins. Using this new function instead of invalidate() can result in performance improvements.
    • Added TextureMapper::updateScale() which will invalidate to ensure correct update of the screen when scaling. AnimationTextureMapper has been updated accordingly.
    • FadeAnimator only invalidates if the alpha changes. The Widget being faded must have function getAlpha().
    • Some internal graph classes have been renamed:
      • AbstractDataGraphWithY -> DynamicDataGraph
      • DataGraphScroll -> GraphScrollData
      • DataGraphWrapAndClear -> GraphWrapAndClearData
      • DataGraphWrapAndOverwrite -> GraphWrapAndOverwriteData
    • New functions in graph classes allow an already scaled value to be added. If scale is 10, adding a scaled value of 15 is equivalent to adding the floating point value 1.5f. This can avoid introducing floating point arithmetics. The new functions all end in the word "Scaled".
    • Added Video::showFrame() to show a specific frame in a video.
    • Added LCD::copyAreaFromTFTToClientBuffer() copy new pixels between TFT and client buffer.
    • LCDNemaP renamed to LCDGPU2D.
    • Added support for Microsoft Visual Studio 2022.
    • Renamed existing Keil libraries from "touchgfx_core.lib" to "touchgfx_core_wchar32.lib".
    • Added Keil libraries compiled for short enum/wchar: "touchgfx_core_wchar16.lib".
  • Bugfixes in TouchGFX Core:

    • Proper handling if the ellipsis character for a text does not exist.
    • LCD16bppSerialFlash::blitCopyRGB888() did not check if the image could be read from flash.
    • Function HAL::copyFrameBufferRegionToMemory() would sometimes set a wrong SolidRect.
    • On rotated display with a framebuffer height larger than the display width, the wrong part of the framebuffer would be written to.
    • ScrollList::setWindowSize() will be limited to the number of entirely visible items (including margins).
    • EasingEquations::backEaseInOut() had a rounding bug when the change was an odd number.
  • Deprecated TouchGFX Core Features:

    • TextureMapper::invalidateBoundingRect() is deprecated. Use invalidateContent().
    • Application::cacheDrawOperations() is removed. Use clearCachedAreas() and drawCachedAreas().
    • Function setXAxisScale() on Dynamic Graphs is now called setXAxisFactor().
    • Function getXAxisScaleAsInt() on Dynamic Graphs is now called getXAxisFactorAsInt().
    • Function getXAxisScaleAsFloat() on Dynamic Graphs is now called getXAxisFactorAsFloat().
    • GraphElementArea::setBaseline() and GraphElementHistogram::setBaseline() no longer automatically redraws the graph. An explicit call to e.g. invalidateGraphArea() is required.

Version 4.18.1

  • Release date: December 7th, 2021

  • New TouchGFX Designer Features:

  • Bugfixes in TouchGFX Designer:

    • Various network stability fixes
    • Adding images to a project that contains a Progress Indicator while TouchGFX Designer is open could result in a crash
    • Add Widget Menu could enter a state where the search text box was not focused when opening the menu
    • Resources Texts could not be selected for a "Set wildcard" action
    • Missing BW_RLE format for 1bpp color depth
    • Wrong error reporting when deleting a typography being used on a text
    • Toggle Visibility button in Widget Tree View did not respond to mouse over
    • Switch theme option in file menu did not report the current theme correctly
  • New TouchGFX Core Features:

  • Bugfixes in TouchGFX Core:

    • Videos.s file is only generated for Keil projects with videos.
    • CWR PainterARGB8888Bitmap would not work with RGB565 images with alpha channel
    • Fixed possible display bug using Keyboard widget when pressing outside a key in the layout.
    • Event::getEventType() is now const.

Version 4.18.0

  • Release date: October 20th, 2021

  • New TouchGFX Designer Features:

    • New Widget: Video.
    • Added support for new .xml text database.
    • Removed TextEntries database from .touchgfx file.
    • Added support for XRGB.
    • Added full path of applications in recent applications list.
    • Added various animations to icons.
  • Bugfixes in TouchGFX Designer:

    • Fixed missing proxy dialog.
    • Fixed Gauge widget code generation error when placed in Custom Container Definition.
    • Fixed TouchGFX Designer reporting file changes on disk, when files were opened in other editors.
    • Fixed Analog Clock being able to resize.
    • Fixed typography selector in text manager not resizing correctly.
    • Fixed drop down controls sometimes autoselecting.
    • Improved performance of text manager.
    • Improved performance of color pickers.
    • Improved UX behaviour of alpha slider controls.
    • Fixed numeric property up/down controls not working after using mouse wheel.
    • Fixed tabbing between property controls.
    • Fixed dither algorithm selector items missing their names.
    • Fixed ScrollWheel widget erroneous state after deleting the custom container used for Selected Style template.
    • Fixed crash when trying to open recent application that has been deleted on disk.
  • New TouchGFX Core Features:

    • Texts and Languages (translations) are now stored in texts.xml instead of texts.xlsx (Excel format). Tool for exporting and importing translations have been added (touchgfx/framework/tools/textconvert/translation.rb).
    • New Widget: VideoWidget.
    • Added libjpeg libraries for Linux and Windows in 3rdparty/libjpeg (note that Red and Blue are swapped compared to official libjpeg).
    • The simulator can now handle display size not equal to framebuffer size. After call to touchgfx_generic_init() use HAL::setFrameBufferSize() to set the (larger) framebuffer size.
    • Added Drawable::center(), centerX(), centerY() to center a drawable inside its parent.
    • Added Drawable::expand() to make a Drawable the same size as its parent, optionally with a margin around the edge.
    • Added LCD::fillBuffer() to fill a color pattern in any memory buffer.
    • Added ScrollableContainer::getChildrenContainedArea().
    • Faster drawing of ARGB8888 images on 16bpp LCD's.
    • Application::getCurrentScreen() is now static for ease of use.
    • Updated Freetype 2.10.4 to 2.11.0 (used by the font convert utility).
    • Updated nlohmann json 3.9.1 to 3.10.2 (used by the image convert utility).
    • Updated Ruby 1.9.3 to 3.0.2 (used by the text convert utility).
    • ScrollableContainer::doScroll() is now public and ensures that scrolling is valid.
    • The position and size of the root Container in a Screen can now be set.
    • All Bitmap Painters can offset the bitmap, and can tile the bitmap (to help save memory).
  • Bugfixes in TouchGFX Core:

    • TextArea automatic wordwrapping (WideTextAction) did not take indentation into account.
    • ImageConvert would not allow writing to another drive or a full path.
    • TextProvider::initialize() with ... parameter could generate unexpected results.
    • All extern declarations in generated files now match the actual declarations.
    • Possible mess up of FRAME_BUFFER_WIDTH and FRAME_BUFFER_HEIGHT when performing display orientation change.
    • ProgressIndicators and Gauges could not be used with mixins with a timer.
    • PixelDataWidget::getSolidRect() now returns empty Rect when no pixel data buffer has been set.
    • PixelDataWidget::getPixelData() and PixelDataWidget::getBitmapFormat() added.
    • Made simulator applications more responsive to mouse and keyboard events.
    • ScrollableContainer::moveChildrenRelative() now updates values for getScrolledX() and getScrolledY(), but does not update scrollbars. However, moveChildrenRelative() is scheduled to be deprecated, please use doScroll() instead.
    • Fix incorrect use of relative coordinates in ScrollableContainer.
    • Fixed EasingEquations::elasticEaseIn(), EasingEquations::elasticEaseOut() and EasingEquations::elasticEaseInOut().
    • Some 8bpp painters would use the wrong color and in rare cases L8_RGB888 on 32bpp displays would be wrong.
    • LCD16bpp::blitCopy() did not support RGB888.
    • LCD16bpp::fillRect() and LCD16bpp::drawGlyph() now passes 24bit color instead of native 16bit color to DMA.
  • Deprecated TouchGFX Core Features:

    • TouchGFX will soon have support for RGB565 with alpha channel removed. ImageConvert will report this to help a move to e.g. ARGB8888.
    • SDL2 for Linux is no longer included in TouchGFX. Please install package libsdl2-dev and libsdl2-image-dev in your Linux environment.
    • TextureMapper::invalidateBoundingRect() is deprecated. Use invalidateContent().

Version 4.17.0

  • Release date: June 30th, 2021

  • New TouchGFX Designer Features:

    • TouchGFX Designer has had its UI reworked completely. All known features are still available but through easier-to-use and intuitive interaction scheme. Additional features, such as multiple color themes, have been added as well.
  • Bugfixes in TouchGFX Designer:

  • New TouchGFX Core Features:

    • Added functions setAngles(), setXAngle(), setYAngle() and setZAngle() to TextureMapper. These functions are slightly faster, compared to the corresponding update functions, as they do not perform any invalidation.
    • Added TextureMapper::updateScale() which will both set new scale and invalidate (as little as possible). AnimationTextureMapper is now using this function.
    • Pressing F1 in the simulator now shows RGB color value of pixel (in hexadecimal), as well as the X,Y coordinates.
    • Simulator will assert if framebuffer is not unlocked after being locked.
    • SwipeContainer::setPageIndicatorCenteredX() will center the page indicator at the current y coordinate of the page indicator.
    • Implementation of colortype has been changed to always store 8 bits for red, 8 bits for green and 8 bits for blue, regardless of color depth of the active display (even gray and black-white displays). Some color functions have been removed or renamed, see the Deprecated section.
    • Added Screen::insert(), Screen::invalidate() and Screen:invalidateRect() to allow use of eg. "invalidate()" instead of "container.invalidate()" in screens.
    • CacheableContainer now supports setAlpha and getAlpha to allow fading.
    • LCD16bpp and LCD16bppSerialFlash support blit copy of RGB888 images.
    • Extracted DebugPrinter implementations from LCD drivers to separate files.
    • Added Bitmap::dynamicBitmapCreateL8() to allow creation of dynamic L8 bitmaps having a palette with fewer than 256 entries (to save space).
    • Added Bitmap::dynamicBitmapCreateCopy() to create a copy of an existing (static or dynamic) bitmap. RGB565 alpha channel cannot be copied.
    • Added Bitmap::dynamicBitmapFill() and Bitmap::dynamicBitmapFillRect() to fill all or parts of a dynamic bitmap with a given color.
    • Added Screen::getScreenWidth() and Screen::getScreenHeight() which should be used instead of HAL::DISPLAY_WIDTH and HAL::DISPLAY_HEIGHT.
    • Updated Freetype 2.10.2 to 2.10.4 (as used by the font convert utility).
    • Added function OSWrappers::taskYield().
    • HAL::initialize() has been made virtual.
    • Added LCD32bpp_XRGB8888 display driver to draw on 32 bit display with no alpha channel in the framebuffer.
    • BlitOp L8 added to be able to draw L8 images using DMA when hardware supports this.
  • Bugfixes in TouchGFX Core:

    • HALSDL2 now reacts to SDL_WINDOWEVENT_EXPOSED to redraw the window.
    • Fixed bug in color conversion from HSV to HSL.
    • Fixed crash in Graph when no DragAction is defined.
    • HAL::drawDrawableInDynamicBitmap() now works when the bitmap is smaller than the drawable.
    • TouchGFX Projects can be placed in a folder with international characters in the path, e.g. "Wunderschön_Projekt" or "Lækkert_Projekt".
    • SwipeContainer page indicator, and selected page was not updated after adding or removing a page.
    • Fixed redraw issue in Graph VerticalFrontline.
    • Fixed rare redraw issue in Graph::Line.
    • HAL::setRenderingVariant is renamed to HAL::setRenderingMethod to avoid name conflict.
    • In rare cases CanvasWidgets would invalidate an area outside the canvas.
    • Internal TouchGFX #include's have been cleaned up. This means that you may need to include <touchgfx/hal/HAL.hpp> and others. Previously these files would be included by e.g. Color.hpp by mistake.
    • Fixed alpha blending on LCD2bpp.
    • Better alpha blending on LCD16bpp for 24/32bpp bitmaps as well as text.
  • Deprecated TouchGFX Core Features:

    • For speed reasons alpha has been removed from all Canvas Painters. Set the alpha on the Canvas Widget instead (Circle, Line, ...).
    • Color::getHSVFromHSL and Color::getHSLFromHSV with 4 parameters have been deprecated. Please use the new versions with 6 parameters.
    • The functions getColorFrom24BitRGB, getColorFromRGB, getRedColor, getRedFromColor, gerGreenColor, getGreenFromColor, getBlueColor, getBlueFromColor have been removed from the LCD classes. Colors are now stored in the same format for all display types, so just use the functions in class Color.
    • Renamed functions:
      • Color::getColorFrom24BitRGB() is now Color::getColorFromRGB()
      • Color::getColorFrom24BitHSV() is now Color::getColorFromHSV()
      • Color::getColorFrom24BitHSL() is now Color::getColorFromHSL()
      • Color::getRGBFrom24BitHSV() is now Color::getRGBFromSHV()
      • Color::getHSVFrom24BitRGB() is now Color::getHSVFromRGB()
      • Color::getRGBFrom24BitHSL() is now Color::getRGBFromHSL()
      • Color::getHSLFrom24BitRGB() is now Color::getHSLFromRGB()
      • Color::getRedColor() is now Color::getRed()
      • Color::getGreenColor() is now Color::getGreen()
      • Color::getBlueColor() is now Color::getBlue()
    • ZoomAnimationImage::setDimension has been removed. Use setWidthHeight().
    • AbstractProgressIndicator::getRange with int16_t& parameters has been removed.
    • Image::getBitmapId() is no longer marked @deprecated.
    • Application::draw() is no longer marked @deprecated.

Version 4.16.1

  • Release date: February 8th, 2021

  • Bugfixes in TouchGFX Designer:

    • Fixed bug in ListLayout widget preventing setting the Direction to a value other than East.
    • Fixed erroneous tooltips on Slider widget orientation selector.
    • Fixed Code Generation bug when using a NemaP LCD.
    • Fixed icons for Bring Forward and Send Backwards being identical.
    • Fixed missing help text for Gauge widget.
  • New TouchGFX Core Features:

    • Added LCD::drawQuad method for better performance with NeoChrom.
    • Widgets TextureMapper and ScalableImage changed to use LCD::drawQuad.
  • Bugfixes in TouchGFX Core:

    • Variable dragAction in Graph was not initialized causing a crash.
    • BlockTransition did not work for landscape displays on portrait hardware.
    • Fixed assert caused by PartialFrameBufferManager::tryTransmitBlock.

Version 4.16.0

  • Release date: December 15th, 2020

  • New TouchGFX Designer Features:

    • New widget: Gauge.
    • Added new trigger "When Screen Transition Begins".
    • Renamed "When Screen Entered" Trigger to "When Screen Transition Ends".
    • Added new "Set Language" Action.
    • Adding one image via the Image Picker on a widget now selects it.
    • Added link to shortcuts documentation in 'Help->Keyboard Shortcuts'.
    • Added a better code editor for 'Execute C++ code' actions.
    • Added new Block Transition for 'go to screen' actions.
    • Improved usability/user experience of 'Add Widget' menu.
    • Added preliminary support for LCDNemaP.
  • Bugfixes in TouchGFX Designer:

    • Fixed generated mainBase.cpp compilation failing on unix by adding '#include <string.h>'.
    • Fixed image file validation reporting an image to be erroneous when file name contained underscores.
    • Fixed being able to create an application with a space in its name.
    • Fixed Dynamic Graph callback handlers being generated twice in Custom Containers.
    • Fixed Dynamic Graph crashing the TouchGFX Designer in certain edge cases.
    • Fixed labels in Dynamic Graph not updating when switching between single use and resource text.
    • Fixed labels in Dynamic Graph not updating their position when changing the size og the Dynamic Graph.
  • New TouchGFX Core Features:

    • New invalidation algorithm for improved performance.
    • Added new container Gauge.
    • BoxWithBorder is now a subclass of Box.
    • LCD16 and LCD8 fillRect functions now write 32/16 bits at a time for improved performance.
    • Added CanvasWidget::resetMaxRenderLines().
    • Moved LCD2shiftVal(), LCD2getPixel() and LCD2setPixel() to class LCD2bpp.
    • Moved LCD4getPixel() and LCD4setPixel() to class LCD4bpp.
    • ScrollableContainer::setScrollbarsPermanentlyVisible() now takes a boolean argument to allow disabling permanently visibility.
    • TextureMapper and ScalableImage are now each a subclass of Image.
    • Added AnimatedImage::setEndBitmap().
    • Added AbstractClock::getCurrent12Hours and AbstractClock::getCurrentAM().
    • Unicode::itoa() and Unicode::utoa() can handle radix up to 36.
    • Added AnalogClock::setAlpha() and getAlpha().
    • ScrollableContainer::setScrollbarsPermanentlyVisible() now takes a boolean argument to allow disabling permanently visibility.
    • Added TextArea::resizeHeightToCurrentTextWithRotation().
    • Added Drawable::setWidthHeight() to set width and height in one call given by (width,height), Drawable, Bitmap or Rect.
    • Added Drawable::setXY(Drawable&) to set top left corner of a Drawable at the same position as a nother Drawable.
    • Added Drawable::setPosition(Drawable&) to place a Drawable at the same position as another Drawable.
    • Added Color::getRGBFrom24BitHSV() and Color::getHSVFrom24BitRGB() to convert between (hue, saturation, value) and (red, green, blue).
    • Added Color::getColorFrom24BitHSV() and Color::getHSVFromColor() to convert between (hue, saturation, value) and colortype.
    • Added Color::getHSVFromHSL() and Color::getHSLFromHSV() to convert between value and luminance
    • Added Color::getRGBFrom24BitHSL() and Color::getHSLFrom24BitRGB() to convert between (hue, saturation, luminance) and (red, green, blue).
    • Added Color::getColorFrom24BitHSL() and Color::getHSLFromColor() to convert between (hue, saturation, luminance) and colortype.
    • PainterBW now supports alpha.
    • SnprintFloat(s) now handles NaN ("nan") and Inf ("inf").
    • SnprintFloat(s) now defaults to 6 digits after the decimal point instead of 3. ANSI C says "If the precision is missing, 6 digits are given".
    • Added Circle::setPixelCenter().
    • Added updateValue(), setEasingEquation(), setValueSetAction() and setValueUpdatedAction() to progress indicators, to allow smooth transition from one value to another value.
    • Added SwipeContainer::getSelectedPage.
    • Added BlockTransition.
    • Added CacheableContainer::setSolidRect() and getCacheBitmap().
  • Bugfixes in TouchGFX Core:

    • Corrected spelling of getGraphAreaPaddingRight().
    • In rare occasions the TextureMapper would draw some scanlines twice.
    • AnimationTextureMapper, ZoomAnimationImage, MoveAnimation and FadeAnimation all work if steps=0 and will notify of animation ended on the last animation step.
    • Fixed bug in Keyboard when dragging away from pressed key, and releasing.
    • Slider::getIndicatorMin() would return indicator max instead of min.
    • ImageConvert would corrupt the heap (and most likely crash) on BMP images.
    • Fixed the border of images drawn in bilinear mode by the texture mapper.
    • Fixed BoxWithBorder with a very wide border when alpha<255.
    • Fixed ProgressIndicators' range and value to all be type 'int'.
    • Fixed Cacheable Container for display orientation.
  • Deprecated TouchGFX Core Features:

    • All deprecated functions from 4.15 and earlier has been removed.
    • Removed ST1232TouchController.
    • ZoomAnimationImage::setDimension is deprecated. Use setWidthHeight.
    • Drawable::setXY and Drawable::setPosition are no longer virtual functions. Only setX, setY, setWidth and setHeight are virtual.
    • AbstractProgressIndicator::getRange methods with int16_t& parameters.

Version 4.15.0

  • Release date: October 5th, 2020

  • New TouchGFX Designer Features:

    • New widget: Dynamic Graph.
    • M0 platforms now have all texture mapper features disabled by default.
    • Added support for Wipe-transition.
    • Overhauled the Add Widget Menu (is now found by clicking a button in the top left of the canvas toolbar or pressing 'A' on the keyboard): added search functionality, resizability.
    • The whole bottom status bar can now be clicked to bring forward the log.
    • The status bar now turns red on error and green on success.
    • Moved zoom functionality to top right of toolbar.
    • Added button to center canvas in the viewport.
    • Added keyboard shortcuts for zoom in (Ctrl + '+'), zoom out (Ctrl + '-') and reset zoom (Ctrl + 0).
    • It is now possible to lock the position of a widget, which also disables selection on canvas (useful for background images, boxes).
    • A black Box is now always generated in base views for a better experience when inserting widgets on an empty canvas.
    • Many tooltips have received a visual overhaul and also display keyboard shortcuts.
    • It is now possible to select if fonts should be output in mapped or unmapped format.
  • Bugfixes in TouchGFX Designer:

    • Designer would sometimes crash when importing a project with identical fonts, bitmaps.
    • Generated code in FrontendHeapBase.hpp would include multiple copies of the same transition header file.
    • It was possible to drag and drop widgets into a scroll-list or scroll-wheel in the treeview.
    • "Choose button key" for interactions were cleared when adding widgets.
    • Wrong default version of packages were sometimes chosen.
    • Packages would be downloaded even if they already existed on disk.
  • New TouchGFX Core Features:

    • New font format that allows most font data to be stored in unmapped flash.
    • Improved partial framebuffer block transfer algorithm.
    • Added new prototypes to OSWrapper: isVSyncAvailable() and signalRenderingDone() for use on platforms that cannot be block in waitForVSync.
    • touchgfx::SingleBlockAllocator is removed, use touchgfx::ManyBlockAllocator<block_size, 1, bytes_per_pixel>
    • New method on HAL, enableDMAAcceleration(), to disable hardware accelerations.
    • Added TextureMapper::invalidateBoundingRects().
    • ImageConvert is using updated nlohmann-json 3.9.1. Generated images look the same.
    • Added single stepping in simulator. Pressing F9 will start/stop execution. Pressing F10 will execute one tick. This can also be controlled using HALSDL2::setSingleStepping(), HALSDL2::isSingleStepping() and HALSDL2::singleStep().
    • Added new Graph classes.
    • Added WipeTransition.
  • Bugfixes in TouchGFX Core:

    • Armenian (and some Cyrillic) characters were written right-to-left.
    • Quick touch and release after swipe could result in an extra unwanted GestureEvent.
    • Very large glyphs that required only partial redraw would not render correctly.
  • Update procedure:

Version 4.14.0

  • Release date: July 2nd, 2020

  • New TouchGFX Designer Features

    • Updated all links to direct to new documentation website.
    • Added support for the SlideMenu widget.
  • Bugfixes in TouchGFX Designer:

    • FrontendHeap.hpp model declared before app to prevent potential errors.
    • Fixed UI Template selector not comparing available color-depths correctly.
    • Fixed .touchgfx.part file version not being checked before loading.
    • Fixed code generation of included painter when selecting a specific format for an image, L8 images and all 8 bit LCDs supported.
    • Fixed application name validation when creating new application.
    • Fixed error when dragging container type widgets inside themselves via treeview.
  • New TouchGFX Core Features:

    • HAL::lockDMAToPorch default value is set to false instead of true.
    • Font::getDataFormatA4() is now called Font::getByteAlignRow() as it may be set for 2bpp fonts and 1bpp fonts as well as 4bpp fonts.
    • GestureType is now called GestureEventType for consistency. GestureType has been deprecated and will be removed soon.
    • Added Version.hpp with macros for current version of TouchGFX.
    • ImageConvert supports image files starting with a digit.
    • ImageConvert output .cpp files with "image_" prefix.
    • ImageConvert built-in help improved.
    • ImageConvert can write an application.config template file.
    • Added Unicode::strncmp_ignore_whitespace which ignores whitespace and not just spaces.
    • FontConvert is using updated freetype 2.10.2. This results in slightly nicer and better aligned characters.
    • ImageConvert is using updated libpng 1.6.37. Generated images look the same.
    • Added setDurationSpeedup, getDurationSpeedup, setDurationSlowdown and getDurationSlowdown to ScrollableContainer. This allows better control of the number of animation steps to use on a swipe gesture.
    • Extended SlideMenu widget with possibility of not needing a button.
    • Using a colortype variable as a number will automatically cast it to uint32_t instead of uint16_t.
    • Added ARMCLANG-6.x support in Keil project.
    • Support for Cortex-M33.
  • Bugfixes in TouchGFX Core:

    • BoxWithBorder would not set borderColor and borderSize in constructor.
    • Several fixes in Unicode::snprintf(): Removed limit of 64 characters for format string. Do not force sign character on %o, %x and %X. No zeroes prefixed on %05c. Correct handling of %c with 0 as value. Sign on %s (%+s, %0s) handled properly.
    • ScrollListWithCenterSelect could crash if size was changed.
    • ScrollList with snapping would not report the correct clicked item.
    • ScrollList without snapping, non-circular could report wrong item.
    • ScrollList repects padding when item is clicked.
    • CWR Painters with setColor(color,alpha) now only accepts color. Use setAlpha(alpha) to set the alpha.
    • Cached bitmaps was not 32bit aligned with an unenven number of dynamic bitmaps.
    • LED.hpp no longer includes lpc_types.h.
  • Deprecated TouchGFX Core Features:

    • Deprecated functions are now marked deprecated so the compiler can issue a warning on these functions. Deprecated functions will be removed in the future.
    • Removed definition of Unicode::EMPTY.
    • Definition of PI moved from Math3D.hpp to Types.hpp.
    • The 'pi' defined in EasingEquation.hpp has been replaced by PI.
    • ImageConvert no longer supports -f, -o and -header.
    • Image::hasTransparentPixels removed.
  • Update procedure:

Version 4.13.4

  • Release date: July 27th, 2020

  • Bugfixes in TouchGFX Core:

    • Armenian (and some Cyrillic) characters were written right-to-left.

Version 4.13.3

  • Release date: May 29th, 2020

  • New TouchGFX Core Features:

    • Text rendering performance improvement for Arabic, Hindi, Thai and other complex languages. Decreased rendering time in the range of -20% to -33% depending on the language.
  • Bugfixes in TouchGFX Core:

    • ScrollLists and ScrollWheels would in very rare cases scroll in the wrong direction, or scroll far too much.

Version 4.13.2

  • Release date: April 28th, 2020

  • Bugfix in TouchGFX Core:

    • Fixed Arabic ligature when connecting to Hamza.
    • Fixed Arabic ligature for Lam + Alef in some cases.
    • Fixed placement of Arabic accents.

Version 4.13.1

  • Release date: March 4th, 2020

  • New TouchGFX Core Features:

    • Ability to draw RGB565 dynamic bitmaps on LCD24.
    • Improved some Arabic character sequences.
  • Bugfix in TouchGFX Core:

    • Font Converter would sometimes include too many glyphs from font.
    • Fix for Unicode U+200B (Zero Width Space).

Version 4.13.0

  • Release date: December 12th, 2019

  • New TouchGFX Designer Features

    • Support for ".touchgfx.part" files. These can be used for external input to a project (e.g. CubeMX integration).
    • Select supported image formats for the TextureMapper by navigating to the "Framework Features" category in the "Config" tab.
    • It is now possible to override the Generate Assets, Post Generate, Compile Simulator, Run Simulator, Compile Target and Flash Target commands from within the Designer.
    • Improved zoom/scroll on canvas and auto scrolling is now enabled when dragging widgets to the outskirts of the canvas.
    • The Generate Code button shows if the current code is up to date, by displaying a blue dot if it is out of date.
    • The File, Edit and Help menus can now be opened with the shortcuts Alt + F, Alt + E, and Alt + H.
    • The Help menu includes a direct link to the TouchGFX Help Center.
    • Modify text configurations through the "Config" tab
    • The detailed log can be floated or docked within the Designer and can be opened with the shortcut Alt + L.
    • The Designer version is shown in the title bar of the window.
    • The Recent Projects list now displays the full path to a project instead of just the project name.
    • Performance improvements when moving widgets on the canvas.
    • Performance improvements when rendering rows in the image manager.
    • Performance improvements when reordering items in the widget tree.
  • Bugfixes in TouchGFX Designer

    • Fixed a bug where having delay and button callback interactions could cause faulty generated code.
    • Fixed a bug where using the TouchGFX CLI to generate projects did not properly include used TouchGFX assets.
    • Fixed a bug where the canvas buffer for a screen would not be properly updated in some cases.
    • Fixed a visual bug where the error message displayed on the startup window would not disappear when retrying a download.
    • Fixed a bug where the function name of a call virtual function interaction was not properly validated.
    • Fixed a bug where progress indicator in some cases would not render correctly on the Designer canvas.
    • Fixed a bug where creating a new project and not saving would cause the default typographies to disappear when reloading the project.
    • Fixed a visual bug where the text manager would seemingly keep focus on wrong cells.
    • Fixed a bug where the properties tab for a widget would not properly display errors.
    • Fixed a bug where generating button click handlers would sometimes yield empty if/else statements.
    • Improved search fields in startup window.
    • Fixed a bug where copying a shape widget and editing a point in one of them would cause the change to happen for both.
    • Fixed a bug where scrolling by using the mouse wheel while changing fonts from within the typography picker would close the popup.
    • Fixed a bug where loading project containing a go to screen action would not load correctly.
    • Fixed a bug where expanding/collapsing a node in the widget tree view would also select the node.
    • Fixed a bug where some values were imported incorrectly when importing a UI into an application.
    • Fixed a bug where navigating through folders in the image picker was faulty.
    • Fixed a bug where the order of pages in a swipe container was presented wrongly.
    • Fixed a bug where the rendering of the texture mapper on the Designer canvas was faulty.
    • Fixed a bug where validation of a removed interaction source was faulty.
    • Fixed a bug where renaming a folder with subfolders located under assets/images could crash the Designer.
    • Fixed interactions on RadioButtons generating duplicate code.
    • Fixed a bug where dragging the same image from file explorer to the Designer twice would result in faulty behavior.
    • Fixed a bug where radio button interactions would sometimes generate duplicate code.
    • Fixed a bug where overriding a canvas buffer could result in a newline missing in the generated code.
    • Fixed a bug where the Designer would generate faulty code when using Turkish region format.
    • Fixed a visual bug where having long text in custom action/trigger text boxes would cause unwanted shifts in the UI.
    • Fixed a crash bug where a sequence of steps after deleting the last custom container in an application would cause the Designer to crash.
    • Fixed a bug where copying a custom container instance from a screen to a custom container definition did not work.
    • Fixed the Matching UI Templates filter not working as intended.
    • The Designer now supports application names that include periods.
    • Fixed a bug where changing a slider with a style from horizontal to vertical would result in the style not being correctly set.
    • Fixed a bug where changing the font of a typography would visually not display the correct font name some places in the UI.
  • New TouchGFX Core Features:

  • Bugfixes in TouchGFX Core:

    • TextureMapper: blending on edges corrected/improved in Bilinear mode.
    • TextureMapper: minor image quality improvements in Nearest Neighbor mode.
    • Bugfix for text order in arabic text "12:34" which would previously render as "34:12" in RTL.
  • Deprecated TouchGFX Core Features:

    • Removed definition of deprecated TRANSPARENT_COL.
    • Removed Drawable::getType().
    • Removed HAL::blitSetTransparencyKey().
    • Removed HAL::registerTextCache().
    • Removed HAL::cacheTextString().
  • Update procedure:

Version 4.12.3

  • Release date: September 25th, 2019

  • New TouchGFX Core Features (since 4.12.0):

    • Binary Fonts: Binary fonts can be used as an alternative to compiling and linking font information in to your application. The main advantages of this approach is to get a smaller application binary and get a flexibility in providing different sets of fonts with your device.
    • Font Caching: Support for caching binary fonts, suitable for loading only the required characters from a file system, when a string is displayed.
    • Binary Translations: Support for binary translations, suitable for loading translations from a file system as opposed to linking them into the application. Read more about these feature here: https://touchgfx.zendesk.com/hc/en-us/articles/360024979552
    • Support for non-memory-mapped flash storage for 16bpp displays, allows storage of images and fonts in e.g. inexpensive SPI flashes.
    • Recognition of Unicode sequences for Arabic ligatures Allah, Akbar, Mohammad, Salam, Rasoul, Alayhe, Wasallam and Rial Sign.
  • Bugfixes in TouchGFX Core:

    • TextureMapper (bilinear) would fail to draw L8_RGB888 and RGB888 bitmaps on 24bpp displays correctly.
    • Setting a text with a wildcard in a TextArea without wildcard support in combination with RTL could cause a crash.
    • If a CacheableContainer was smaller than the associated bitmap, the size of the container would not be correct.
    • Fixed SnapshotWidget on 8bpp LCDs.
    • Fixed rendering of some Arabic ligatures.
    • Fixed rendering of some Hindi ligatures.
    • Fixed bug when applying certain GSUB substitution rules.
    • Fixed bug that binary fonts contained extra rules.

Version 4.12.2

  • Release date: August 22nd, 2019

  • New TouchGFX Core Features:

    • WordWrapping wide text using TextArea::setWideTextAction() now wraps at normal space as well as Unicode characters 0x200B (Zero Width Space).
  • Bugfixes in TouchGFX Core:

    • Binary fonts: The fontConverter tool was not writing kerning data into binary font files when the "binary_fonts" option was specified in the application configuration. This caused texts to appear incorrect when using binary fonts.

Version 4.12.1

  • Release date: August 15th, 2019

  • Updated "Third Party Components.pdf" to reflect updated components

    • libpng-1.6.36
    • zlib-1.2.11
    • freetype-2.9.1
  • Bugfixes in TouchGFX Designer:

    • Fixed a bug where having a delay action together with a button clicked action would result in compilation errors.
    • Fixed a bug where Canvas Buffer for a Screen was not correctly updated when adding a Canvas Widget to a Custom Container Instance.
    • Fixed a bug where an error message in the Online Applications window would get stuck.
    • Fixed faulty rendering on the Canvas in the Designer when using the Alpha value of the different Progress Indicators.
    • Fixed a bug where creating a new project, closing the Designer without saving it, and reloading the project would cause the project to have no available typographies.
    • Updated error message when trying to import an already open UI into another project to be more clear.
    • Fixed a bug where the Text Manager could have multiple foci visually in a specific circumstance.
    • Fixed a bug where the Properties tab for a Widget would not display a red border correctly, when an error is present on the Widget.
    • Fixed a bug where using the Consolas font would render incorrectly on the Canvas in the Designer after reloading a project using that font.
  • Bugfixes in TouchGFX Core:

    • TextureMapper bug if Display Rotation was in use.
    • Disregard kerning data for CachedFont.
    • CachedFont did not look in font cache for the fallback character.

Version 4.12.0

  • Release date: 06-07-2019

  • Important upgrade information:

    • Public version of drawGlyph has been removed. Use drawString instead.
    • Using bitmap format ARGB8888 for opaque images will no longer dither to 565 but keep full 888 colors. Using ARGB8888 for non-opaque images will still dither to 565 when the opaque format is RGB565.
    • Images converted to BW_RLE will no longer fall back to BW if the BW_RLE format causes the converted image to be larger. Instead a warning will be generated by the image converter. Use the Designer (or the new configuration file) to specify BW or BW_RLE for each individual image.
  • New TouchGFX Designer Features:

    • A custom container can now be nested within another custom container. This enables composing custom components into larger custom components indefinitely.
    • A custom container supports defining custom triggers and custom actions, a screen supports defining custom actions. These triggers and actions support the flow of information from one component to another component. Using such triggers and actions in interactions within the Designer enables doing more real world application behaviour without leaving the Designer. Check out the documentation for further introduction.
    • A Container can now be generated as a CacheableContainer.
    • A new "Images" tab has been added for setting up individual image configurations (Image Format, Dither Algorithm, Layout Rotation, etc.).
    • Application settings and other new settings have been relocated to the "Config" tab.
  • New TouchGFX Core Features:

    • Upgraded 3rd party libraries used by framework tools. This results in much nicer looking texts.
    • Improved kerning through larger kerning table.
    • Thai fonts are now rendered better with tighter line spacing and better rendering of Sara Am in some cases.
    • Preliminary support for Hindi (Devanagari). The following GSUB tables are applied: nukt (Nukta Forms), akhn (Akhands), rkrf (Rakar Forms), cjct (Conjunct Forms), vatu (Vattu Variants), rphf (Reph Forms), pref (Pre-Base Forms), half (Half Forms), blwf (Below-base Forms), abvf (Above-base Forms), pstf (Post-base Forms), and cfar (Conjunct Form After Ro). The following are NOT currently supported: abvs (Above-base Substitutions), blws (Below-base Substitutions), and psts (Post-base Substitutions). Also, not all GSUB tables types are supported.
    • Added a new Line::updateLengthAndAngle() API.
    • Added support for partial framebuffers rendering and updates.
    • Added simple string printing for debugging.
    • Allow changing the BitmapCache after initialization.
    • New macros for setting sections names for flash programming.
    • Added Circle::updateArc() to update arc start and arc end with minimal invalidation areas.
    • Updated CircleProgress to use higher precision calculations for updates.
    • Added CacheableContainer for offscreen widgets rendering.
    • Added support for L8 graphics assets with 16bit, 24bit and 32bit palettes.
    • Added support for L8 hardware acceleration via DMA2D.
    • Added new LCD32bpp framebuffer renderer.
  • Bugfixes in TouchGFX Designer:

    • ProgressIndicator is updated automatically after call to CircleProgress::setStartEndAngle(), ImageProgress::setAnchorAtZero() and TextProgress::setNumberOfDecimals().
  • Bugfixes in TouchGFX Core:

    • Fixed redraw of circleProgressIndicator when setting new value.
    • Removed additional screen redraw after a screen transition is complete. This additional redraw caused performance issues on some platforms. Invalidating the entire screen in Screen::afterTransition(), if required, is now the responsibility of the application developer.
  • Update procedure:

Version 4.11.0

  • Release date: March 1st, 2019

  • Important upgrade information:

    • If your application includes LCD.hpp and expects to have access to HAL, this will no longer work since LCD.hpp no longer includes HAL.hpp. Make sure to include HAL.hpp in this case. Older versions of sample applications Demo1 and Demo2 had this issue and have been updated.
  • New TouchGFX Designer Features:

    • Added Bring Forward/Send Backwards support for widgets, via UI Buttons and keyboard shortcuts Ctrl + F, Ctrl + B.
    • Added support for copy and paste of Screens and CustomContainerDefinitons.
    • Added support for reordering CustomContainerDefinitions.
    • Switching between Screen and CustomContainerDefinitions now remembers the previously selected Screen and CustomContainerDefinition.
    • The last used typography is now used when creating new texts and widgets that use text.
    • Added new tree icon for CustomContainerInstances.
    • Disabled continuous code generation and compiling.
    • Improved readability of the output in Detailed Log window.
    • Widget Wildcard Characters added to the Texts tab, which adds default wildcard characters when using some widgets
    • Improved performance when loading a project.
    • Improved performance when generating a project.
    • Improved performance of validation engine.
    • Added support for 6 bit color displays (8bpp).
    • Added support for setting RadioButtonGroup for RadioButtons.
    • Added support for Display Rotation (Landscape/Portrait).
    • Added support for setting Landscape/Portrait simulator skins in the Designer.
    • Added support for the following widgets: AnalogClock, DigitalClock, TextureMapper, AnimatedTextureMapper & Shape.
    • The Designer now generates the Makefile and Visual Studio files used for running the Simulator.
  • New TouchGFX Core Features:

    • Added support for 6 bit color displays (RGBA2222, BGRA2222, ARGB2222 and ABGR2222 framebuffer formats).
    • Added support for Thai.
    • Improved rendering of Arabic text.
    • Added handling of negative line spacing.
  • Bugfixes in TouchGFX Designer:

    • Fixed Ctrl + A (select all) not working for CustomContainerDefinitions.
    • Fixed reordering of Screens selecting the first screen in the list and deleting the undo/redo history for the Screen that was moved.
    • Fixed bug where the undo/redo history would become broken after selecting the Application node.
    • Fixed application names not being allowed to start with a number or contain "-" or "_".
    • Fixed loading an application while on the CustomContainer tab resulting in erroneous content on the canvas.
    • Fixed pressing undo after moving multiple elements into a container resulting in a crash.
    • Fixed font files being locked when loading a project.
    • Fixed error not showing up on components that use text, when removing their Resource Text.
    • Fixed bug where loading a faulty application by double-clicking a TouchGFX file would cause the splash screen to get stuck.
    • Fixed faulty position code generation for ModalWindow.
    • Fixed missing "Move widget" interaction support for ScrollableContainer, ScrollList & ScrollWheel.
    • Fixed the ordering of the Recent Applications list. Now correctly updates when opening an application.
    • Fixed bug where inserting a widget could add an empty undo item to the undo/redo history.
    • Fixed missing header text and description in the properties pane for CustomContainerDefinitions.
    • Fixed bug where idle CPU usage was higher than expected.
    • Fixed bug where setting an interaction on a FlexButton inside a CustomContainer would generate faulty code.
    • Fixed bug where setting a mixin on a widget was not undo-able.
    • Fixed missing undo/redo functionality for adding styles to FlexButton.
    • Fixed wrong order of initializations when using numerous slider callbacks in interactions.
  • Bugfixes in TouchGFX Core:

    • Fixed precision in CWR Painters for 4bpp and 2bpp.
    • Fixed precision in alpha blending formulaes for 8bpp, 16bpp and 24bpp.
  • Update procedure:

Version 4.10.0

  • Release date: November 5th, 2018

  • Requirements:

    • TouchGFX is now only available for STM32 microcontrollers.
  • New TouchGFX Designer Features:

    • Added support for the following widgets: ImageProgress, BoxProgress, TextProgress, LineProgress, CircleProgress, Line, Circle, BoxWithBorder, FlexButton, ScrollList, ScrollWheel and SwipeContainer.
    • Canvas Buffer setting can be adjusted on screens.
    • Support for screen transition: CoverTransition.
    • Now logs the following system information for use in support scenarios: Username, Designer version, Designer installation path, Windows version, Current culture, Installed .NET versions.
    • It is now possible to import a UI with any resolution to an application (resolution check has been removed).
    • Added button to show/hide clipped widgets.
    • Improved performance when dragging and resizing widgets on the canvas.
  • New TouchGFX Core Features:

    • Circle and AbstractShape now supports higher precision on arc start and arc end for smoother arcs.
    • The internal Q5 structure now uses 32 bit instead of 16 bits for increased value range.
    • Added Circle::getPrecision().
    • Added functons FadeAnimator::isFadeAnimationRunning(), MoveAnimator::isMoveAnimationRunning(), AnimatedImage::isAnimatedImageRunning() and ZoomAnimationImage::isZoomAnimationImageRunning(). The old isRunning() functions have been deprecated.
    • ListLayout::setDirection() and getDirection() added.
    • Updated roo gem from 1.13.1 to 2.7.1.
    • Pressing SHIFT-F3 will copy the screen to the clipboard (Windows only).
    • Pressing CTRL-F3 will save the next 50 screens to the screenshots folder.
    • Generated assets are now indented properly.
    • ScrollableContainer::setScrollbarsPermanentlyVisible() added.
  • Bugfixes in TouchGFX Designer

    • Fixed ModalWindow widget not resizing when Screen or Custom Container size changes.
    • Fixed generating code failing if a files hidden attribute was set to hidden.
    • Fixed changing the casing of a screen or custom container name resulting in a recompilation error.
    • Fixed bug where internet loss would crash the Designer if no Online Applications are available.
    • Fixed ModalWindow widget position being generated incorrectly after loading a project.
    • Removed unnecessary recompilation when loading Designer project.
    • Fixed visual bug in ImagePicker where the "empty placeholder" would show up even though you have subfolders in current folder.
    • Fixed bug where the Designer was not using default credentials through proxy server.
    • Fixed bug where the Designer would not correctly report an error when trying to flash to a wrong target.
    • Fixed bug where having insufficient permissions to write to the chosen touchgfx path would crash the Designer.
    • Fixed bug where the Designer was incorrectly interpreting screen changes as an unsaved change.
    • Fixed a visual bug, where widgets inside a Container would not display properly when resizing the Container.
    • The Designer now closes a running Simulator process, when you load another application.
    • Fixed a bug where it was possible to drag widgets inside an instance of a Custom Container.
    • Circle did sometimes not render correctly, and invalidated rectangle was not calculated properly.
    • Fixed Circle when half line width was greater than radius.
  • Bugfixes in TouchGFX Core:

    • Fixed erroneous calculation of x & y values in setValue in LineProgress.cpp.
    • Circle did sometimes not render correctly, and invalidated rectangle was not calculated properly.
    • Fixed Circle when half line width was greater than radius.
    • Fixed drawing lines longer than 2047 pixels, e.g. 1449 pixels wide and 1449 pixels high.
    • Fixed bug preventing some Arabic ligatures from being rendered correctly.
  • Update procedure:

Version 4.9.4

  • Release date: January 25th, 2018

  • Bugfixes:

    • Reduced the time it takes to load an application in the Designer.

Version 4.9.3

  • Release date: December 15th, 2017

  • Bugfixes:

    • Designer now uses default Windows proxy settings.
    • Package manager updates available packages when online.
    • Improved error description when offline.
    • Set text interaction works with resource texts.
    • Project updater updates MSVS projects with correct image formats.
    • Text size calculated wrongly in Designer in rare occasions.
    • Recent files ordered by date.
    • Corrected initialization of counter in Wait For interaction.
    • Fixed drawing of child elements in list layout, when resized.
    • Fixed loading of application with list layout widgets.
    • .otf font files now correctly rendered.
    • Dragging containers could in rare cases introduce wrong coordinates.
    • Fixed null-termination of wildcard text buffers.
    • Button With Label text rendering correction.
    • tgfx.exe packager works for more complex file layouts.
    • Source code included for containers.
    • Additional minor Designer UI fixes and improvements.

Version 4.9.2

  • Release date: November 20th, 2017

  • Bugfixes:

    • Fixed Designer issue where dragging elements on the canvas would in some cases cause an exception.

Version 4.9.1

  • Release date: November 16th, 2017

  • Bugfixes:

    • Fixed several Designer issues with TextArea widgets when placed inside containers.
    • Fixed an issue with interactions triggered by "Another interaction is done" dissappearing when loading a project.
    • On PCs with certain security policy configurations, the Designer was not able to create new projects correctly.
    • Improved error handling in Designer if the asset generation, code compilation or post generation commands fail.
    • Fixed an issue where the TouchgfxPath in Designer project files was not interpreted correctly.
    • Some typography changes in Designer did not cause new code to be generated.
    • Fixed issue with ImageConverter when assets folder was under svn control.
    • ImageConverter could in certain cases fail to detect changes in assets.

Version 4.9.0

  • Release date: November 8th, 2017

  • New Features:

    • Added a package manager for handling board support packages, demos and examples. The Designer will now fetch these from an online repository.
    • All the old examples, demos and ports for various boards have been removed from the framework, and are now available as packages instead.
    • Substantially improved text handling in the Designer. It is now possible to work with translations and wildcards in the Designer, so it should no longer be necessary to edit the texts.xlsx file manually.
    • Designer is now much more flexible regarding application file structure, and is now able to auto-update IAR and Keil IDE projects regardless of file location.
    • Added Designer support for the ScrollableContainer and ListLayout widgets.
    • Added support for the SW4STM32 IDE.
    • Added support for version 8.10 of IAR Embedded Workbench.
    • Image converter now has an option to operate on folders, instead of being invoked once per .png file. This substantially speeds up the process of converting images. This mode is the default behavior for new projects.
    • The GNU Arm Embedded toolchain (GCC cross-compiler) has been updated to version 6-2017-q2-update (gcc version 6.3.1).
    • The GNU compiler for the PC simulator has been updated to version 6.3.0.
    • Added gcc core libs compiled with -mfloat-abi=hard for Cortex-M4f and Cortex-M7.
    • Increased number of widgets that can be registered as timer widgets from 24 to 32. Also added functions for obtaining information about which widgets are currently registered.
  • Bugfixes:

    • AnimationTextureMapper::cancelMoveAnimation() is renamed to cancelAnimationTextureMapperAnimation() to avoid problems with MoveAnimator::cancelMoveAnimation().
    • Fixed bug in PainterRGB565Bitmap when rendering solid pixels from an ARGB8888 Bitmap.
    • Fixed rare bug in FontConvert if all used characters are missing from the font.
    • Fixed uninitialized variables in the DMA class.
  • Update procedure:

    • For this release additional steps might be needed.

Version 4.8.0

  • Release date: March 10th, 2017

  • Performance

    • LCD4bpp now draws characters up to 15% faster.
    • Canvas widgets now render slightly faster in certain situations.
  • New Features:

    • TouchGFX Designer released. The core framework, Designer and environment shell are now bundled in a single installation.
    • Support for Farsi and Arabic ligatures where squences of up to three character are recognized.
    • Added support for Microsoft Visual Studio 2017.
    • TextArea and TextAreaWithWildcard(s) now support setWideTextAction() to automatically break lines and insert ellipsis at end of line, when the line is too long.
    • Added getter functions to Slider.
    • MoveAnimator and FadeAnimator can now clear the callback set for animation ended.
    • Errors from ImageConvert, TextConvert and FontConvert are now shown in the Error List window of Visual Studio.
    • Simulator applications are now Windows programs instead of Console programs.
  • Bugfixes

    • AbstractShape::updateAbstractShapeCache() is now a public function and should be called after one or more calls to AbstractShape::setCorner(), to ensure shape is correct.
    • Simulator window can no longer be unintentionally resized.
    • F2 to highlight invalidated areas now works with old HALSDL.
    • PainterGRAY2Bitmap, PainterGRAY4Bitmap, PainterRGB565Bitmap and PainterRGB888Bitmap all failed to validate that painting was inside the size of the bitmap in some situations.
    • HALSDL2 (simulator) now uses 24bpp on screen to make colors in screenshots correct.
    • TiledImage::setOffset() now handles an empty bitmap correctly.
    • TiledImage::getSolidRect() would sometimes report wrong rect.
    • If text in a TextArea was rotated, resizeToCurrentText() and resizeHeightToCurrentText() would swap the width/height.
    • Function getTextHeight() would not take line spacing into account. Functions like resizeToCurrentText() and others that use the getTextHeight() function would not resize correctly.
    • SlideMenu::setState() did not handle EXPANDED state correctly.
  • Update Procedure

    • Due to the addition of TouchGFX Designer, installation is now done via an .msi installer.
    • Compatible with existing 4.x applications and HAL ports.

Version 4.7.0

  • Release date: December 14th, 2016

  • New Features:

    • Source code for all the standard widgets and containers is now included. See the touchgfx/framework/source/touchgfx directory. Note that these classes are still present in the core library, and the source code files are not added to the IAR/Keil/gcc projects per default.
    • Optimized the handling of single framebuffer configuration on TFT controller based platforms, which in many cases eliminate the need for external RAM.
    • Substantial performance optimizations of the canvas widget system and all the standard painters. Expect a very significant increase in performance if many pixels are being drawn, and a smaller increase in performance for minor shapes (e.g. graph lines). The "PainterVerticalAlpha" used in our demos have also been updated.
    • The text converter tool will now combine identical translations across all languages, resulting in reduced footprint. The result of this process will be printed during asset generation. NOTE: This behavior is enabled by default. If you have an existing project where you manipulate the text data structures (e.g. load a single language into RAM), this optimization might break your code. The optimization can be disabled by adding the following remap_identical_texts := no (for "make"-based generation) <RemapIdenticalTexts>no</RemapIdenticalTexts> (for MSVS)
    • Updated SDL version used by simulator from 1.2 to 2.0.4. SDL1.2 is still present in the distribution, but all examples and projects now use SDL2.
    • Support for skinning the simulator with .png files. If the .png files contain non-opaque areas, the simulator window will be shaped accordingly. See display_orientation_example for a code example.
    • On ST targets with Chrom-ART, the Box widget will now be drawn by DMA even when alpha < 255 (BLIT_OP_FILL_WITH_ALPHA support).
    • TextArea and TextArea with wildcard(s) now support setWideTextAction() to automatically wrap long lines.
    • Added the ability to display a "fallback" character in case a non-existing glyph is encountered at runtime. This is configured in the typography sheet of the text database.
    • Added options for forcing the inclusion of additional glyphs in a font. This makes it much easier to handle dynamic texts where the glyphs are not known at compile time. This is configured in the typography sheet of the text database.
    • Output from the TextConvert utility is now post-processed to give significant saving by mapping identical strings to the same memory areas.
    • Added built-in BitmapId called BITMAP_ANIMATION_STORAGE which can be used to refer to the animation storage when assigning a Bitmap to a widget.
    • Added dither algorithm selection from config/gcc/app.mk and config/msvs/Application.props.
    • It is possible to save a simulator screenshot programatically, by using: #ifdef SIMULATOR (static_cast<HALSDL2*>(HAL::getInstance()))->saveScreenshot(); #endif
    • ScrollableContainer now properly ignores invisible elements.
    • DigitalClock now supports a zero to be displayed in front of the hour indicator (if hour < 10).
    • The simulator can now highlight the areas being invalidated. Press F2 to toggle this feature.
    • Added Unicode::vsnprintf functions that take va_list arguments instead of ellipsis.
  • Bugfixes

    • Unicode::sprintfFloat did not print <space> instead of '+' if the format string was "% f". Also, the sign of floating point numbers in range ]-1..0[ would not be printed with sign so for example -0.5 would print as 0.5.
    • Fixed a bug that could cause TextureMapper to read outside source bitmap memory area.
    • GPIO.cpp for STM32F769-Discovery and Eval boards had some incorrect GPIO pin manipulations (used for performance measurement).
    • Some methods in Slider.hpp were missing a virtual declaration.
    • Fixed a bug in BoardConfiguration for STM32F769-Discovery board causing 24bpp color mode to be displayed incorrectly.
    • AnimatedImage - setBitmap(..) should not be used and is now private For AnimatedImage use setBitmaps(..) instead.
    • Project files and Makefile have been updated to allow the TouchGFX framework to be placed on another disk drive than the project being developed.
  • TouchGFX Environment (version 2.8)

    • "make.exe" is now version 4.1 which allows for parallel compilation, by adding e.g. "-j8" to your make command. This substantially speeds up compilation. If your makefile is from TouchGFX 4.2.0 or earlier, you will need to either update it, or to use make-3.81.exe
    • g++ could in some cases report "There is no disk in the drive. Please insert a disk into drive E:.". This has been fixed by upgrading gcc from version 4.8.1 to version 4.9.3.

Version 4.6.1

  • Release date: September 12th, 2016

  • Performance

    • Optimization improvements of core library for GCC on Cortex-M4 and Cortex-M7, providing significant speeedup of especially TextureMapper and Canvas widgets compared to TouchGFX 4.6.0.
  • New Features

    • New function in HALSDL to set title of simulator window see HALSDL::setWindowTitle().
    • BW_RLE format (1bpp displays) now compresses better. Remember to remove old generated files and re-generate assets.
    • STM32F756G-EVAL using IAR now supports flashing of external memory.
  • Bugfixes

    • Added IAR linker redirect commands to fix linker errors when compiling a Cortex-M4 based target with IAR 7.x.
    • Assigning different memory buffers to CanvasWidgetRenderer using setupBuffer() could in rare cases result in memory corruption.
    • TextureMapper could in rare cases draw outside the framebuffer.
    • Setting the offset of a TiledImage did not work properly.
    • Fixed two issues that would in some cases cause memory corruption when deleting dynamic bitmaps.
    • Missing virtual method declarations in AnalogClock added.
    • Fixed a problem in GCC linker script for LPC4088DisplayModule which caused texts and fonts to be placed in external flash.
    • For those using fontconvert.out on its own, the output directory is now automatically created if it does not exist.
    • ScrollableContainers could in rare cases send a wrong drag event to a child.
    • Monochrome (1bpp) displays with width not divisible by 8 would not display text correctly.
    • Slightly increased default touch sample rate on STM32F746G Discovery board.

Version 4.6.0

  • Release date: June 14th, 2016

  • New features

    • Added support for 2bpp grayscale displays.
    • Added support for 4bpp grayscale displays.
    • New widget TiledImage. Will display one or more repetions of an image. The number of repetitions depends on the size of the widget and the size of the image.
    • New widget RepeatButton. A button that will repeatedly fire click events when pressed.
    • New widget AnimationTextureMapper. TextureMapper with build in animation features. See animation_texture_mapper_example.
    • New containers AnalogClock and DigitalClock, see clock_example.
    • New containers ProgressIndicators, see progress_indicator_example.
    • New container ModalWindow. Creates a window on top of the main screen and a shade on the rest of the main screen. No clicks are passed on to the main screen as long as the modal window is visible. See example modal_window_example.
    • New container SlideMenu. Animating side/top/bottom-menu that has an activate button for sliding it in/out of the screen. A timeout can be set for automitical hiding when idle for a period of time.
    • Canvas Widget Line supports ROUND_CAP_ENDING and setCapPrecision() to control the round cap.
    • Simulator can now generate ticks very close to the frequency of the hardware.
    • Mouse X and Y coordinates are put in the title of the window in the simulator. (press F1 to (de)active this when running the simulator).
    • ST Cube drivers updated to version 1.4.0 for STM32F7 MCU and STM32F7 based boards.
    • Added support for the STM32769I-EVAL board.
    • Added support for the STM32F769I-Discovery board.
    • Screenshots made from the simulator (F3) are now saved under a name with timestamp to prevent old screenshots to be overwritten by accident.
    • Simulator now outputs canvas widget memory usage to easily find optimal canvas memory buffer size.
  • Bugfixes

    • DMA drivers for ST boards: express DMA2D instance initialization for STM32F7. Fixed incorrect used of CLUT_CM for F4-Discovery.
    • DMA drivers for LPC17xx, LPC18xx, LPC43xx did not behave correctly if other DMA channels are in use simulatenously. They now properly look at flags for channel 0 only.
    • Touch controller drivers for ST boards now properly checks that initialization was OK before querying.
    • Mouse clicks in the simulator would not always be detected.
    • ImageConvert.exe has RGB565 as default (and sensible defaults for other opque formats)
    • ImageConvert would not work for a BW image scheduled for compression (BW_RLE) and rotation (.90. in filename) if the image would become too large if compressed (falling back to BW format).
    • All Makefiles now use abspath instead of realpath.
    • AnimatedImage now allows the animation to be restarted from the AnimationEnded callback function.
    • QSPI flash size corrected to 64MBytes for STM32756G-EVAL board.
    • Added D-cache invalidation to STM32F7HAL::flushFrameBuffer. This fixes occasional graphics errors on STM32F7 when in single frame buffer mode and fb was located in SRAM.
    • The otm8009a displays (STM32769-DISCO, STM32769-EVAL, STM32469-DISCO, STM32469-EVAL) are now using maximum display brightness.
    • Added a workaround for a bug in IAR 7.50.x regarding va_list name mangling.
  • Update Procedure

    • Compatible with existing 4.x applications and HAL ports.

Version 4.5.1

  • Release date: March 14th, 2016

  • Bugfixes

    • Fixed two IAR linker issues related to resolving the va_list symbol, which would cause some versions of IAR being unable to link the example projects.
    • STM32F4-Discovery board would draw solid rectangles with the wrong color in 16bpp mode.
    • The Canvas Widget Renderer no longer performs unaligned memory accesses.
    • vApplicationIdleHook (FreeRTOS specific) no longer blocks, which previously prevented FreeRTOS from freeing memory if tasks were deleted.
    • Arabic words with accent in the middle would not render properly.
    • Added PixelDataWidget::getAlpha().
    • Unicode::strncpy() with a char* as source would not copy characters with ascii codes above 127 properly.

Version 4.5.0

  • Release date: February 2nd, 2016

  • New features

    • Support for two new languages, Arabic and Hebrew, with right-to-left text rendering. RTL strings can be mixed with LTR texts and numbers.
    • Support for 24 bits per pixel framebuffers. Images look more detailed, but also consume more memory.
    • Bitmaps can now be created at runtime using method Bitmap::dynamicBitmapCreate. Useful for e.g. displaying .bmp files loaded from an SD card. See dynamic_bitmap_example.
    • Frame rate compensation feature which provides smoother animations if frame rate occasionally drops. Not enabled by default.
    • Bitmap caching is enhanced to allow removal of bitmaps from the cache to make room for caching of other bitmaps.
    • A new widget, PixelDataWidget, is introduced. This widget makes it possible to display raw pixel data obtained at runtime (e.g. video samples).
    • The simulator executable on windows now features an icon for easier identification in the task bar.
    • ST boards supported by TouchGFX can now have just their internal flash programmed from the command using 'make intflash' provided that ST-Link Utility Release 3.7+ is installed.
    • Unicode::snprintf() has been improved and updated substantially to support more of the standard format specifiers like %02d.
    • Unicode::snprintfFloat() added to support floats (in separate function because the "%f" va_args approach would force inclusion of doubles).
    • Quality of image converter dithering has been improved (floating point arithmetics). Also added support for new types of dither algorithms, and can take into account hardware with various wiring of the low (unused) bits in 16/18 bit displays.
    • touchgfx::ButtonWithLabel now contains a method, updateTextPosition(), that can be used to ensure horizontal text centering when changing label content (e.g. when changing language).
    • touchgfx::TextArea has a new method, setBaselineY(), that allows placing texts according to a text baseline instead of upper left corner.
    • The internal format of glyph encoding now stores the first pixel in the least significant bit instead of the most significant bit.
    • Specification of color values has been switched from uint16_t to colortype to support seamless switching between 16 and 24 bit colors.
    • The touchgfx::TextArea class now has a method, setIndentation(), that can prevent the glyph of characters from being cut off in the rare case where it extends under the previous character (similarly for touchgfx::Keyboard class which has a new setTextIndentation() method).
    • STM32F7xx and STM32F4x9 ports now support DMA transfers of touchgfx::Box.
    • The GPIO::VSYNC_FREQ signal was previously "toggled" exclusively on "VSYNC" interrupt (NXP LPC18xx, NXP LPC43xx, Freescale MK70F12, ST stm32f4x9). The signal is now high on "VSYNC" interrupt and low on "Front-Porch-Entered" interrupt.
    • GCC support for Cortex-M3.
  • Bugfixes

    • Fixed rare crash on STM32F7 caused by speculative caching of invalid QSPI memory region. Update your BoardConfiguration if yours is based on 4.4.x.
    • Fixed occasional display flickering on STM32F746G-DISCO board caused by cache access on FMC bank 1.
    • Handling of the character "%"" in touchgfx::TextAreaWithWildcards has been improved to prevent inserting %% in some special cases.
    • touchgfx::DragEvent and touchgfx::GestureEvent now use and report signed coordinates instead of unsigned. This makes more sense as drags/gestures are expressed in coordinates relative to the drawable receiving them.
    • snprintf("%x") would generate uppper case hex. Now "%X" generates uppercase hex and "%x" generates lower case hex, just like the standard snprintf().
    • Fixed randomness for demos when running on Linux.
    • Fixed redrawing when using heavily italicized fonts.
    • Pointer to ModelListener in Model class for all TouchGFX applications was not properly initialized (NULL).
    • Fixed support for heavily italicized fonts in touchgfx::TextArea.
    • Subtle error in the Image Converter where column 0 could get slightly incorrect pixel colors. As a result the entire image could be slightly wrong, probably not noticeable.
    • Minor error in Slider where values were not distributed evenly.
  • Deprecated

    • LCD::drawGlyph() has been deprecated. Use LCD::drawString instead.
  • Update Procedure

    • Compatible with existing 4.x applications and HAL ports.

Version 4.4.2

  • Release date: November 26th, 2015

  • Bugfixes:

    • Corrected rare GUI task hangup on STM32F7 targets when compiling with IAR 7.x

Version 4.4.1

  • Release date: October 27th, 2015

  • Bugfixes:

    • Corrected occasional GUI task hangup on STM32F7 targets when compiling with Keil 5.x
    • Fixed occasional tearing on STM32 F469 EVAL/Discovery boards when using DSI in landscape orientation and single framebuffer mode.
    • Modified IAR flash loader settings for STM32 F469 boards to enable programming of internal flash (Note: QuadSPI flash must still be programmed from ST-Link Utility as there are no IAR loaders for this)
    • GPIO class for perf. measurement for STM32F746G-EVAL boards now properly uses the BSP_LED functions. Note that only two signals are active on this board per default because LED2 and LED4 use IO Expander, making them unsuited for measuring performance.
    • Removed annoying "Get Alternative File" dialog popups in IAR Workbench when debugging Cortex-M7 applications.

Version 4.4.0

  • Release date: October 6th, 2015

  • New features

    • Added support for the Cortex-M7 core.
    • Introduced concept of "finger size" for touch input. When used, TouchGFX will attempt to find touchable widgets in the area surrounding the reported x,y coordinates, so users no longer have to click precisely on a widget. This feature makes it substantially easier to hit small buttons. See HAL::setFingerSize().
    • Supports Visual Studio 2015
    • Visual Studio projects for Demos and Examples now include Application.props under Resources for quick access. As always a rebuild might be required when altering the contents of Application.props.
    • Support for Bitmap Fonts in BDF format. If the requested font size is not available in the font file, the font converter will write the supported font size(s) in the error message. See the example monochrome_example for usage.
    • Generating assets now issues better error messages when spaces are detected in paths and file names.
    • All ST boards can now be flashed from the command line provided that ST-Link Utility Release 3.7 has been installed. Simply use 'make -f target/ST/<board>/Makefile flash' to build and flash your application to the connected board. If timeouts occur during flashing, go to Device Manager in Windows and disable "MBED microcontroller USB Device" under "Disk drives".
    • New touchgfx-env version 2.5 available with new gcc cross compiler version 4.9.3. The older version 4.8.4 could generate invalid code for Cortex-M7 cores in rare cases.
  • Board support

    • Added support for the STM32F7xx processors
    • Added support for the STM32F746G-DISCO and STM32756G-EVAL boards
    • Added support for the STM32F469 processor with DSI displays
    • Added support for the STM32469I-EVAL and STM32469I-Discovery boards
  • Bugfixes

    • TextureMapper and ScaleableImage now draws images correctly when using "rotate90".
    • Fixed potential initialization order bug in STM32F4DMA.cpp
    • Fixed bug that limited number of glyphs in a single font to 32768. Now supports 65536 glyphs per font as intended.
    • Fixed bug that caused hal.lockDMAToFrontPorch(false) to not have any effect in single framebuffer mode.
    • ButtonWithLabel correctly center texts vertically if text contains newlines

Version 4.3.0

  • Release date: June 8th, 2015

  • New features

    • TextureMapper widget added. The TextureMapper is a highly optimized image renderer that can be used for displaying an image that is scaled and/or rotated in two or three dimensions during run time. This can be used for doing advanced rotation animations of images. See manual or texture_mapper_example for more information. LCD has new methods for drawing triangles and corresponding scan lines, drawTextureMapTriangle and drawTextureMapScanLine
    • Alpha Channel Dithering. Images with alpha channel can now get the alpha channel dithered for smoother alpha gradients, see examples or Application Development section in manual for details
    • Compression of 1BPP (monochrome) bitmaps. Added image format option of BW_RLE, which will cause bitmaps to be automatically run-length encoded if that takes up less space than the regular per-pixel format. Yields substantially smaller bitmap footprint in many cases. See advanced chapter in manual for details.
    • Slider widget added. See manual or slider_example for more information.
    • Makefiles has been updated to work with make-4.1.
    • Added support for the LPC4088 processor and the Embedded Artists LPC4088 Display Module board.
    • Individual bitmaps can now be placed in internal flash instead of external by having the bitmap file name include the string ".int."
    • MoveAnimator, FadeAnimator and ZoomAnimationImage now have a cancelMoveAnimation/cancelFadeAnimation/cancelZoomAnimation method.
  • Update procedure

    • Compatible with existing 4.X applications. Just replace the touchgfx folder.
    • Check Known Issues in the documentation.
  • Info

    • The evaluation version of TouchGFX is now distributed with source code for the hardware abstraction layer instead of a precompiled library. This makes it possible to port the evaluation version to custom hardware instead of it being limited to the supported eval boards only. Instead, the evaluation version now has a TouchGFX watermark which will appear occasionally.
    • Memory consumption reduced due to improved rendering algorithm. Will typically allow GUI task stack to be reduced by around 1400 bytes compared to version 4.2.0 (depending on actual application). Additionally the statically allocated memory is also reduced by around 1KB.
    • Maximum number of visible widgets limit of 150 removed.
    • Added two new demos for 640x480 and 480x272 resolutions showcasing new features, graphs, internationalization and custom widgets.
    • Drawable.setPosition() now calls setXY(), setWidth() and setHeight() for easier subclassing.
    • AbstractPainterRGB565 and AbstractPainterBW are recommended as base classes when implementing your own painters.
    • CanvasWidgets now have setAlpha() and getAlpha() methods. Your custom Painter classes must implement this, or inherit from the AbstractPainterRGB565 class
    • Maximum number of registered timer widgets increased from 16 to 24.
    • touchgfx-env updated to 2.4. The environment does not beep anymore.
    • Board Support Package for STM324x9I-EVAL is now based on the STMCubeF4 drivers.
  • Bugfixes

    • Screen::handleGestureEvent now converts x/y to relative coordinates
    • Fixed bug when drawing several objects on the same canvas using moveTo() more than once.
    • ZoomAnimationImage movement relative to scaling did not use correct easing equation.
    • PainterRGB565 did not blend green alpha correctly.
    • RadioButtonGroup now initializes callbacks to zero.
    • ScalableImage now works with bitmaps with transparancy.
    • AnimatedImage would display the start and end of an animation twice.
    • Default implementation of CanvasWidget::getMinimalRect() returned coordinates relative to its parent, not itself.
    • ScrollableContainer erroneously unregistered itself as a timer widget at every tick, which made it difficult to use with other timer-based operations.
  • Performance

    • ScalableImage and ZoomAnimationImage has been optimized for better performance.

Version 4.2.0

  • Release date: January 14th, 2015

  • Performance

    • Substantially improved rendering performance, which in most cases will result in a 25% reduction of time it takes to render a frame. NOTE: This optimization does not necessarily work on all targets so it must be manually enabled. See the "Optimization" chapter in the porting guide for how to enable this optimization for existing portings. It is STRONGLY recommended that the optimization is enabled. This optimization is enabled for all appropriate evaluation boards in the 4.2.0 board packages.
  • Major new features

    • Added CanvasWidgets for smooth, anti-aliased drawing of geometric shapes. Currently Line, Circle and a more generic Shape have been implemented. CanvasWidgets can be painted with a solid color (+ alpha), a bitmap (including alpha) or a custom painter. Read more on Canvas Widgets and Painters in the documentation.
    • Added support for the Keil compiler and uVision4 IDE. Please refer to the "Supported Hardware" section of the TouchGFX Distribution chapter in the documentation for a list of Keil-supported targets.
  • New features

    • It is now possible to specify an animation start delay on ZoomAnimationImage, MoveAnimator and FadeAnimator.
    • Added Board support for 4.3" TouchGFX Demo board w. LPC4350 (No internal flash)
    • RadioButton and RadioButtonGroup widgets added. See app/examples/radio_button_example and documentation.
    • LPC43XX and LPC1788 can now fill rectangles using DMA.
    • Visual Studio 2013 is now supported.
    • Preliminary support for Visual Studio 2015 Preview version.
    • Improved performance when generating assets.
    • New canvas_widget_example added to the example directory.
    • The "using namespace touchgfx" present in various header files can now be avoided by defining the symbol NO_USING_NAMESPACE_TOUCHGFX in your project.
  • TouchGFX env

    • The message displayed when starting a shell has been fixed with correct path to examples.
  • Bugfixes

    • Fixed bug in simulator for 1bpp displays when width and/or height was not not a multiple of 8.
    • Fixed bug in ScrollableContainer where CANCEL events where not always delegated to correct child, causing e.g. buttons to remain pressed when dragging outside SC area.
    • Fixed bug when rendering chromArt fonts with a rotated display.
    • Fixed bug - Keyboard widget setTouchable(false) had no effect.
    • Freescale K70 DMA now checks the appropriate DONE bit in TCD0_CSR.
    • On ST processors fixed bug with rotated texts rendered by ChromArt when in non-native display orientation.
  • Board support

    • Embedded Artists LPC4357DevKit board package: CPU clocked to 204Mhz (previously 96Mhz). Now uses SPIFI flash instead of NOR.
  • Update procedure

    • Compatible with existing 4.X applications. Just replace the touchgfx folder.
  • Info

    • Documentation has been updated.

Version 4.1.1

  • Release date: October 29th, 2014

  • New features

    • Mixin: MoveAnimator added. The MoveAnimator mixin makes the template class T able to animate a movement from its current position to a specified end position. See app/example/move_fade_example.
    • Mixin: FadeAnimator added. The FadeAnimator mixin makes the template class T able to animate an alpha fade from its current alpha value to a specified end alpha value. See app/example/move_fade_example.
    • ScalableImage and ZoomAnimationImage now support alpha per pixel bitmaps and alpha per bitmap
    • ScalableImage and ZoomAnimationImage now support ARGB8888 format bitmaps
  • Bugfixes

    • Fixed a bug causing the Keyboard widget to render incorrectly in rare cases.
    • Fixed a bug causing drag event coordinates to be incorrect for widgets when placed in a Container with coords != {0,0} which itself was placed in a ScrollableContainer.
    • The Application class now properly keeps track of number of times registerTimerWidget vs. unregisterTimerWidget is called for a given widget, meaning that if registered several times it now requires same number of unregisters before widget no longer receives tick events.
    • Some ZoomAnimationImage functions were not virtual as they should be.
    • Some widgets were missing certain getter functions.
  • Update procedure

    • Compatible with existing 4.X applications. Just replace the touchgfx folder.

Version 4.1.0

  • Release date: October 17th, 2014

  • New features

    • Now supports monochrome 1BPP displays. See manual for details.
    • Support for dynamic screen orientation change (landscape/portrait)
    • Support for scaling images (See ScalableImage and ZoomAnimationImage drawables)
  • Demo

    • Home Control Demo now support 640x480 mode.
    • Home Control Demo now supports STM324xI-EVAL 5.7" board.
  • Board support changes

    • Added support for STM324xI-EVAL 5.7" board (IAR+gcc).
    • Added gcc support for the EmbeddedArtists LPC4357DevKit board.
    • Optimized SPIFI initialization for TouchGFX eval board.
  • Bugfixes

    • Adding a persistent Drawable to a ScrollableContainer could cause assertion
    • Support for much larger fonts
  • Update procedure

    • Compatible with existing 4.X applications. Just replace the touchgfx folder.

Version 4.0.0

  • Release date: September 26th, 2014

  • New features

    • TouchEvent refactoring (API breaking):
      • Drawable::setActive is renamed to Drawable::setTouchable
      • Drawable::isActive is renamed to Drawable::isTouchable
      • Drawable::hijackTouchEvent is deprecated
      • Drawables are now per default not touchables
      • TouchEvents are now always propagated to all containers children
    • Language specific typography and alignment columns support added to text converter. Read more about this feature in the documentation.
    • Font rendering has been vastly improved with regards to font shapes and kerning.
    • Simulator - assert check on new view/presenter/transition size when doing screen transition. Failed assert checks probably due to missing definition of view/presenter/transition in FrontEndHeap.
    • TextArea and ButtonWithLabel now support text rotated 0, 90, 180 or 270 degrees.
    • Text centering on ButtonWithLabel has been improved in special cases.
    • Hardware Accelerated text rendering (4 and 8bpp) on supported ST platforms.
    • Ability to cache all items in the bitmap database in external RAM.
    • Support for Freescales K70 MCU.
    • Translation Sheet: Instances of "\<" and "\>" are converted into "<" and ">" respectively. This enables literal translated strings such as "<Not a wildcard>" using "\<Not a wildcard\>".
    • Support for NXP LPC18XX series of MCU's.
  • Bugfixes

    • Rendering error of images with odd width and alpha value less than 255
    • Correct handling of TextArea::getTextHeight in case of non initialized textArea
    • TextAreaWithWildcard::getTextWidth now includes the width of the wildcard text
    • gcc Makefiles now includes .BMP and .PNG from image assets.
    • Do not trim leading and trailing white space from any translations in the texts sheet.
    • Font converter did not generate font data properly for 8bpp.
    • ButtonWithIcon::setBitmaps - Suppress IAR warning for intentional virtual function override.
    • ButtonWithIcon optimized draw functionality
    • In extremely rare cases text could be written slightly outside the text area
  • Update procedure

    • Due to the TouchEvent refactoring you have to rename functions accordingly. You also need to state in any custom widget or containers if they need to receive touch events. If you were using hijackTouchEvent to prevent children of getting touch events, you now need to make sure that all children is not touchable instead.
    • Main.cpp for simulators need to be updated by replacing the line: TypedText::registerTypedTextDatabase(TypedTextDatabase::getInstance(), TypedTextDatabase::getInstanceSize()) with: Texts::setLanguage(0) You can also specify a specific language from your text database e.g. Texts::setLanguage(GB) In that case you also need to: #include <texts/TextKeysAndLanguages.hpp>
    • Rebuild entire project.
  • Info

    • The TouchGFX Manual has been updated considerably.

Version 3.1.0

  • New features

    • Added support for FDI uEZGUI-1788-70WVT eval board (NXP LPC-1788 Cortex M3).
    • Added support for Mjolner TouchGFX Demo Board Rev. 1.1 eval board (NXP LPC-4353 Cortex M4/M0 4.3").
  • Bugfixes

    • Visual Studio build now rebuild BitmapDatabase.h when new images are added to the assets/images folder.
  • Update procedure

    • Only if using Visual Studio: Update TouchGFXReleasePath in your Visual Studio .props file. Simply edit the file in a text editor. The path should be extended with "touchgfx\". See the template_application for inspiration.
    • Only if using Visual Studio: Update your Visual Studio project file (.vcxproj file). Simply edit the file in a text editor. Replace all paths on the form "$(TouchGFXReleasePath)\framework\config\msvs\touchgfx_prebuild.targets" with "$(TouchGFXReleasePath)\config\msvs\touchgfx_prebuild.targets".
  • Info

    • Hardware Abstraction Layer architecture has been reworked so that all common code for various hardware components (MCUs and drivers) is now shared across different target boards. This greatly simplifies the porting effort for new/custom boards as long as they contain one or more hardware components already supported by TouchGFX.

Version 3.0.0

  • New features

    • Visual Studio 2010/2012 support.
    • Added support for png images with alpha channel.
    • Added support for subfolders in assets/bitmaps folder
    • Added support for ST STM32F4X9I-EVAL eval board.
    • Added support for Robert Penners Easing Equations (see touchgfx/EasingEquations.hpp).
    • Image converter: Added sanity check of input image file names, must not start with digit and must be alphanumeric.
    • Image converter: Added checking against case insensitively file name duplicates in input list.
    • Text converter: Added build stopping sanity checks for bpp and font_size values.
    • ScrollableContainer: Now supports setScrollbarPadding, setScrollbarWidth, setScrollbarColor, and setScrollbarAlpha.
    • ScrollableContainer: Set default value of ScrollThreshold to 5 pixels, instead of 1.
    • Added support for alpha blending of fonts (TextArea::setAlpha(uint8_t alpha))
    • ImageConvert support two different output formats: RGB565 and ARGB8888
    • ImageConvert - two options added to control output format for images with/without an alpha channel
    • Touchgfx environment under MinGW is updated due to linker errors for large projects. g++ version is updated from 4.6.2 -> 4.8.1
    • Internal RAM footprint improvements
    • Structural changes of target library and hardware abstraction layers
  • Bugfixes

    • Fill operation (Box widget) resulted in a crash on the lpc4357_emb_artist board
    • Textconvert & fontconvert: Different typographies may now have identical properties.
    • Imageconvert & fontconvert: Better error handling for POSIX compliant platforms
    • HALSDL: Do not overflow key data type.
    • LanguageXX.cpp files now end with a newline (removing warnings).
    • TextArea::draw now handles non initialized TypedText correctly.
  • Update procedure

    • The folders assets/bitmaps and generated/bitmaps must be renamed to assets/images and generated/images.
    • Upgrade TouchGFX environment to version 2.0
    • Update any application Makefile to adhere with the Makefile specified in the updated template_application
    • Rebuild entire project
    • Convert bmp images that contains the former transparent color to png images that uses alpha channels. This can be done automatically using a free tool called imagemagick. More info and hints can be acquired by writing touchgfx-support@mjolner.com
    • Custom HAL implementations must be updated to conform with the new structure
  • Info

    • The "magic" transparent color that was previously used for transparent color in the bmp format is no longer supported. Instead use png images with alpha channel.

Version 2.2.0

  • New features
    • Added support for portrait mode with landscape displays at zero performance/resource cost.
    • Added kerning support.
    • Added Keyboard example (with IAR project for the Energy Micro DK3750 eval board)
    • Changed interface for blitCopy method in LCD.
    • Removed SyncBackBuffer method from HAL.
    • Removed clearLCD method from LCD.
    • Removed fillGradientRect method from LCD.
    • ScrollableContainer supports setScrollbarsVisible(bool visible).

Version 2.1.0

  • First release of TouchGFX as a commercially available framework.