smooth logo
Copyright (C) 2020 The smooth project

Welcome to the smooth Class Library project

smooth is an object oriented C++ class library for Windows, macOS, Linux and most Unix-like operating systems. It provides basic functionality and platform support for applications and libraries.

Features provided by smooth include:

  • a user interface API with various widgets
  • a simple to use multithreading API
  • a file and network IO interface
  • completely transparent Unicode and software internationalization support
  • a libxml2 based XML parser

smooth is Free Software and is made available under the terms of "The Artistic License, Version 2.0".

09.02.2020 - smooth version 0.9.2

Version 0.9.2 of the smooth Class Library has been released today. This service release fixes some issues found in smooth 0.9.1, adds support for dark mode on Windows and updates dependencies.

09.02.20 16:26 - smooth alpha 0.9.2

- string.cpp		- fixed compatibility issues with Windows 10 UTF-8 codepage beta setting
- windowxlib.cpp	- fixed a crash when placing a text cursor on some systems without an input manager
- windowgdi.cpp		- fixed mouse events still arriving at parent window after opening popup menu
- driver_ansi.cpp	- fixed issues with setting buffer size on macOS
- backendwin32.cpp	- added support for Windows 10 dark mode
- backendhaiku.cpp	- set locale to user default at startup
- button.cpp		- draw icons in gray when buttons are disabled
- messagebox.cpp	- also look for icons in path relative to application directory
			- fixed text placement when no icon is available

- added a Makefile target for code signing
- upgraded libjpeg to version 9d
	  

09.02.2020 - smooth version 0.8.71.9

Version 0.8.71.9 of the smooth Class Library has been released today. This service release updates auxillary libraries and fixes some issues.

09.02.20 16:21 - smooth alpha 0.8.71.9

- string.cpp		- fixed compatibility issues with Windows 10 UTF-8 codepage beta setting
- png.cpp		- fixed loading of PNG files

- updated Visual Studio project files for Visual Studio 2019
- upgraded libcurl to version 7.68.0
- upgraded libpng to version 1.6.37
- upgraded libjpeg to version 9d
- upgraded libiconv to version 1.16
- upgraded libxml2 to version 2.9.10
- upgraded libbzip2 to version 1.0.8
- upgraded fribidi to version 1.0.8
- upgraded libcpuid to version 0.4.1
	  

You should upgrade to this release if you are still developing with smooth 0.8.71.x. Users already on smooth 0.8.73.0 or later should continue using those versions.

12.01.2020 - smooth version 0.9.1

Version 0.9.1 of the smooth Class Library has been released today. This service release fixes minor issues found in smooth 0.9.0 and updates dependencies.

12.01.20 17:52 - smooth alpha 0.9.1

- backendwin32.cpp	- added support for Windows 10 accent colors
- driver_ansi.cpp	- fixed switching between read and write mode
- widget.cpp		- fixed artifacts when hiding child widgets extending outside their containers
- optionbox.cpp		- fixed placement of selection indicator
- windowhaiku.cpp	- fixed possible crash when exiting programs
- eventhaiku.cpp	- ensure message queue locking is enabled before enqueuing messages
- windowxlib.cpp	- actually keep topmost windows on top
			- reset input context before deleting it

- fixed interaction with topmost windows when a modal window is active on non-Windows platforms
- upgraded libcurl to version 7.68.0
	  

15.12.2019 - smooth version 0.9.0

Version 0.9.0 of the smooth Class Library has been released today. It is a major update from the v0.8.73.x series and includes lots of improvements and bug fixes.

15.12.19 12:54 - smooth alpha 0.9.0

- application.cpp	- new Application::Lock class implementing a global lock for UI processing
- widget.cpp		- explicitly show/hide child widgets in Show/Hide methods
- layer.cpp		- use standard widget implementations of Show/Hide methods
- menu.cpp		- simplified API for adding menu entries
- combobox.cpp		- fixed selected entry not being updated when new entry has the same memory address
- cursor.cpp		- fixed text not being drawn correctly after undo/redo
			- fixed multi-line cursors not responding after clicking below the last line
			- performance optimizations for text input
- scrollbar.cpp		- added support for smooth scrolling
- container.cpp		- new common base class for menus and lists
- tree.cpp		- draw horizontal branch lines to improve tree look
- tabwidget.cpp		- added support for displaying bitmaps on tab handles
- image.cpp		- set background color for bitmaps
- hyperlink.cpp		- set background color for bitmaps
- backendxlib.cpp	- allow console applications to run without an X display available
- windowxlib.cpp	- fixed thread-safety issues with Xlib windows
- windowgdi.cpp		- added support for high precision touchpad scrolling
- windowcocoa.mm	- made drag & drop work more reliably on macOS
			- added support for high precision scrolling on macOS 10.7 and later
- surfacecocoa.mm	- added support for dark mode on macOS
- keyboard.cpp		- improved thread-safety
- crc16.cpp		- added Hash::CRC16 class to calculate 16 bit CRCs
- driver_posix.cpp	- fixed permissions of newly created files to respect umask setting
- driver.cpp		- added Truncate() and Close() methods to public API
			- added IsBuffered() and SetBufferSize() methods to control buffering
			- implemented Flush() method for file drivers
- outstream.cpp		- added Truncate() method
- directory.cpp		- Copy() and Move() method now take a const Directory & argument
			- fixed permissions of newly created directories to respect umask setting
- file.cpp		- Copy() and Move() method now take a const File & argument
			- added methods to change modification and access time
- string.cpp		- added scoped string format setters String::InputFormat and String::OutputFormat
- system.cpp		- added GetApplicationCacheDirectory() method
- thread.cpp		- added GetCurrentThreadID() method
- math.cpp		- added methods for pseudo random number generation
- datetime.cpp		- fixed possible crashes
- cpu.cpp		- added support for querying CPU vendor and brand strings
			- added support for measuring CPU clock rate

- added Float32 and Float64 type defintions
- added support for Unicode console I/O on Windows
- added stream API to CRC32 and CRC64 classes
- performance improvements for CRC calculations
- added plain text export to Translator utility
- removed support for building with Xlib backend on macOS
- removed dependency on libXmu
- upgraded libcurl to version 7.56.1
- upgraded libpng to version 1.6.37
- upgraded libjpeg to version 9c
- upgraded libiconv to version 1.16
- upgraded libxml2 to version 2.9.10
- upgraded libbzip2 to version 1.0.8
- upgraded fribidi to version 1.0.8
- upgraded libcpuid to version 0.4.1
	  

13.03.2018 - smooth version 0.8.71.8

Version 0.8.71.8 of the smooth Class Library has been released today. This service release updates the included libjpeg to version 9c.

13.03.18 12:06 - smooth alpha 0.8.71.8

- upgraded libjpeg to version 9c
	  

You should upgrade to this release if you are still developing with smooth 0.8.71.x. Users already on smooth 0.8.72.0 or 0.8.73.0 should continue using those versions.

24.11.2017 - smooth version 0.8.71.7

Version 0.8.71.7 of the smooth Class Library has been released today. This service release backports the use of libcurl for HTTP transfers from the 0.8.73.0 release to the 0.8.71.x series and updates auxiliary libraries to the latest versions.

24.11.17 02:02 - smooth alpha 0.8.71.7

- http.cpp		- use libcurl for HTTP transport
			- added support for HTTPS

- upgraded libpng to version 1.6.34
- upgraded libxml2 to version 2.9.7
	  

You should upgrade to this release if you are still developing with smooth 0.8.71.x. Users already on smooth 0.8.72.0 or 0.8.73.0 should continue using those versions.

19.11.2017 - smooth version 0.8.73.0

Version 0.8.73.0 of the smooth Class Library has been released today. It is a major update from the v0.8.71.x and v0.8.72.x series and includes lots of bug fixes and new features.

Among other changes, the new release now uses libcurl for HTTP transfers and adds support for using HTTPS.

19.11.17 17:34 - smooth alpha 0.8.73.0

- surfacecocoa.mm	- fix hangs on macOS 10.11 El Capitan
- fontbackend.cpp	- cache computed text extents
- window.cpp		- added handleSystemMessage callback
- windowgdi.cpp		- don't update coordinates for minimized windows
- windowcocoa.mm	- added support for SetProgressIndicator()
- system.cpp		- added GetResourcesDirectory() method
- mutex.cpp		- added TryLock() method
			- added scoped locker class Lock
			- changed the return type of lock methods to Bool
- semaphore.cpp		- added TryWait() method
			- added scoped locker class Wait
			- changed the return type of lock methods to Bool
- rwlock.cpp		- added scoped locker classes LockForRead/LockForWrite
			- changed the return type of lock methods to Bool
- jpeg.cpp		- avoid temporary files when reading JPEG data from memory
			- check for JPEG signature before trying to open files
- png.cpp		- check for PNG signature before trying to open files
- crc32.cpp		- added method to calculate CRC on plain UnsignedByte * buffers
- crc64.cpp		- added Hash::CRC64 class to calculate 64 bit CRCs
- string.cpp		- added ComputeCRC64() method
- datetime.cpp		- reworked DateTime interface and implementation
- http.cpp		- use libcurl for HTTP transport
			- added support for HTTPS
- listentry.cpp		- added static member: tabDelimiter, use it to delimit list entry tabs
			- tab delimiter changed from horizontal to vertical tab character
- cursor.cpp		- performance improvements
- tipodaydlg.cpp	- tips can now be marked and copied

- ported to Haiku OS
- removed support for QNX
- upgraded libjpeg to version 9b
- upgraded libpng to version 1.6.34
- upgraded libxml2 to version 2.9.7
- upgraded zlib to version 1.2.11