smooth logo
Copyright (C) 2015 The smooth project

Welcome to the smooth Class Library project

smooth is an object oriented C++ class library for Windows, Linux and most Unix-like operating system. 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".

03.08.2015 - smooth version

Version of the smooth Class Library has been released today. This service release introduces a flat titlebar style for Windows 8.x and 10 and fixes several minor issues found in earlier releases.

ChangeLog for smooth

03.08.15 13:58 - smooth alpha

- window.cpp		- fixed handling of modal windows
			- fixed restoring after maximized window was minimized
- windowgdi.cpp		- fixed maximized window glitches on Windows 8 and 10
- widget.cpp		- added mouse jitter tolerance to tooltip code
- titlebar.cpp		- use a flat titlebar style on Windows 8.x and 10
- menubarentry.cpp	- make sure to close popup before firing action

29.11.2014 - smooth version

Version of the smooth Class Library has been released today. This service release fixes several problems found in smooth

29.11.14 23:34 - smooth alpha

- droparea.cpp		- fixed some issues with drop position calculation
- titlebar.cpp		- do not close main window when pressing escape
- file.cpp		- added support for moving/deleting files with read-only attribute
- translator.cpp	- added Serbian (Cyrillic) language support

- upgraded libxml2 to version 2.9.2

28.07.2014 - smooth version

Version of the smooth Class Library has been released today. This service release fixes several problems found in smooth

28.07.14 14:07 - smooth alpha

- translator.cpp	- added Afrikaans language support
- windowgdi.cpp		- use asynchronous versions of ShowWindow and SetWindowPos to prevent artifacts
- cursor.cpp		- fixed CJK input method editor appearing offset in Windows Vista/7/8 default designs
- string.cpp		- fixed a possible memory access error
- file.cpp		- fixed a possible memory leak

- fixed blurry GUI on Windows with high resolution displays
- fixed compilation with Microsoft Visual C++
- fixed compilation on Linux and OS X

31.08.2013 - Using Coverity Scan to identify defects

The smooth Class Library project now uses Coverity Scan to automatically find possible defects in the library and help improve the projects software quality.

Coverity Scan is a static analysis service provided for free to Open Source projects by Coverity, Inc. It automatically scans for several types of defects such as memory leaks, null-pointer dereferences or use of uninitialized variables.

In the first run, Coverity Scan found a total of 61 defects in smooth's source code. This put it at 0.40 defects per 1000 lines of code which already was a very good value considering that 1.00 defects are considered industry standard and the average value for projects using Coverity Scan is 0.69 defects per 1000 lines of code.

In the past few days, several issues have already been fixed and some others identified as false positives. Currently, there are 13 open defects or 0.09 defects per 1000 lines of code left to be addressed.

The goal is to have zero defects left for the upcoming smooth release.

15.06.2013 - smooth version

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

Among other features, the new release improves Linux support and adds support for other Unix-like operating systems.

15.06.13 14:48 - smooth alpha

- window.cpp		- renamed doQuit to doClose
			- removed onPeek
			- removed support for the WF_SYSTEMMODAL and WF_APPTOPMOST flags
- listbox.cpp		- show partially visible entries again
- listentry.cpp		- entries in a subordinate list now respect the outer lists columns
- combobox.cpp		- improved drop-down list size adjustment
- number.cpp		- fixed floating point number -> string conversion
			- fixed integer -> string conversion
- pointer.cpp		- new class: Pointer, replaces class Input and parts of LiSA library
- keyboard.cpp		- new class: Keyboard, represents keyboard state
- widget.cpp		- new function: GetVisibleArea(), returns the area of the widget that is actually visible (considering clipping through containers)
			- new attribute: independent, makes a widget independent of its container
			- made textSize attribute protected and added getter methods
- string.cpp		- new function: Explode(), splits a string at a delimiter
			- new function: Implode(), concatenates strings from an array
			- new function: Contains(), true if the string contains another one
- stringcase.cpp 	- case conversion functions are now generated from UnicodeData.txt
			- added title case conversion function
- translator.cpp	- new function: SelectUserDefaultLang(), selects the best fit language available
			- added support for translation contexts
- imagereader.cpp 	- added support for JPEG and PNG images
- titlebar.cpp		- pressing the escape key now closes the active window
- imagebox.cpp		- new widget: a box containing selectable images
- sha1.cpp		- new class: SHA1, implements the SHA-1 hash algorithm
- math.cpp		- fixed rounding of negative values
- cursor.cpp		- fixed support for right-to-left scripts
			- fixed text selection issues
			- added default context menu
			- added undo and redo support
- cpu.cpp		- added CPUID support
- fontgdi.cpp		- added support for font scaling
- fontcairo.cpp		- fixed a ressource leak
- surfacegdi.cpp	- now using clipping instead of buffering to speed up drawing
- surfacecairo.cpp	- now using clipping instead of buffering to speed up drawing
- colordlg.cpp		- fixed color selection dialog
- tipodaydlg.cpp	- made dialog width adjust to button size
- charsetdetector.cpp	- new class: CharsetDetector, detects the character set of a string
- mutexwin32.cpp	- now using critical sections instead of Win32 mutexes
- access.cpp		- new class: functions for threads save variable access
- clipboard.cpp		- new class: Clipboard, implements clipboard support
- timerposix.cpp	- new class: TimerPOSIX, POSIX timer backend
- document.cpp		- added support for parsing CDATA nodes
			- fixed Unicode filename support
- messagebox.cpp	- replaced Windows message box defines with own constants
- screen.cpp		- new class: Screen, replaces MultiMonitor

- removed TreeView widget (use ListBox instead)
- removed SDL backends
- removed LiSA library
- added support for path names exceeding MAX_PATH
- fixed implementation of callback signals
- fixed implementation of Array<>
- fixed file IO problems on Windows 9x with Unicows
- updated Translator utility to support template files
- improved international language support
- removed Extended<> template
- removed Pointer<> template
- improved Linux support
- ported to FreeBSD, OpenBSD, NetBSD, Solaris, Mac OS X, QNX and Hurd
- upgraded libbzip2 to version 1.0.6
- upgraded fribidi2 to version 0.19.5
- upgraded libiconv to version 1.14
- upgraded libxml2 to version 2.9.1