Browse Source

Add entire vstgui

Signed-off-by: falkTX <falktx@gmail.com>
vstgui
falkTX 5 years ago
parent
commit
b049489f54
Signed by: falkTX <falktx@gmail.com> GPG Key ID: 2D3445A829213837
100 changed files with 25654 additions and 0 deletions
  1. +42
    -0
      vstgui/.gitignore
  2. +49
    -0
      vstgui/.travis.yml
  3. +27
    -0
      vstgui/LICENSE
  4. +52
    -0
      vstgui/README.md
  5. +24
    -0
      vstgui/vstgui/.vscode/c_cpp_properties.json
  6. +36
    -0
      vstgui/vstgui/.vscode/launch.json
  7. +51
    -0
      vstgui/vstgui/.vscode/settings.json
  8. +188
    -0
      vstgui/vstgui/CMakeLists.txt
  9. +1776
    -0
      vstgui/vstgui/Changelog
  10. +73
    -0
      vstgui/vstgui/Documentation/Migrating from 2.3.rtf
  11. +11
    -0
      vstgui/vstgui/Documentation/index.html
  12. +106
    -0
      vstgui/vstgui/_clang-format
  13. +26
    -0
      vstgui/vstgui/contrib/ciboxblurfilter.h
  14. +81
    -0
      vstgui/vstgui/contrib/ciboxblurfilter.mm
  15. +1411
    -0
      vstgui/vstgui/contrib/keyboardview.cpp
  16. +269
    -0
      vstgui/vstgui/contrib/keyboardview.h
  17. +2493
    -0
      vstgui/vstgui/doxygen/Doxyfile
  18. +85
    -0
      vstgui/vstgui/doxygen/doc.h
  19. +836
    -0
      vstgui/vstgui/doxygen/doxydocu.css
  20. +12
    -0
      vstgui/vstgui/doxygen/page_changelog.h
  21. +298
    -0
      vstgui/vstgui/doxygen/page_changes.h
  22. +25
    -0
      vstgui/vstgui/doxygen/page_keyeventflow.h
  23. +38
    -0
      vstgui/vstgui/doxygen/page_license.h
  24. +197
    -0
      vstgui/vstgui/doxygen/page_tutorial.h
  25. BIN
      vstgui/vstgui/doxygen/screenshots/contextmenu.png
  26. BIN
      vstgui/vstgui/doxygen/screenshots/inspector_overview.png
  27. BIN
      vstgui/vstgui/doxygen/screenshots/ui_editor.png
  28. BIN
      vstgui/vstgui/doxygen/screenshots/ui_editor_bitmaps_browser.png
  29. BIN
      vstgui/vstgui/doxygen/screenshots/ui_editor_colors_browser.png
  30. BIN
      vstgui/vstgui/doxygen/screenshots/ui_editor_fonts_browser.png
  31. BIN
      vstgui/vstgui/doxygen/screenshots/ui_editor_tags_browser.png
  32. BIN
      vstgui/vstgui/doxygen/screenshots/ui_editor_views_browser.png
  33. +55
    -0
      vstgui/vstgui/doxygen/tutorial.h
  34. +303
    -0
      vstgui/vstgui/lib/CMakeLists.txt
  35. +367
    -0
      vstgui/vstgui/lib/animation/animations.cpp
  36. +119
    -0
      vstgui/vstgui/lib/animation/animations.h
  37. +368
    -0
      vstgui/vstgui/lib/animation/animator.cpp
  38. +93
    -0
      vstgui/vstgui/lib/animation/animator.h
  39. +30
    -0
      vstgui/vstgui/lib/animation/ianimationtarget.h
  40. +26
    -0
      vstgui/vstgui/lib/animation/itimingfunction.h
  41. +201
    -0
      vstgui/vstgui/lib/animation/timingfunctions.cpp
  42. +133
    -0
      vstgui/vstgui/lib/animation/timingfunctions.h
  43. +306
    -0
      vstgui/vstgui/lib/cbitmap.cpp
  44. +238
    -0
      vstgui/vstgui/lib/cbitmap.h
  45. +930
    -0
      vstgui/vstgui/lib/cbitmapfilter.cpp
  46. +233
    -0
      vstgui/vstgui/lib/cbitmapfilter.h
  47. +95
    -0
      vstgui/vstgui/lib/cbuttonstate.h
  48. +319
    -0
      vstgui/vstgui/lib/ccolor.cpp
  49. +126
    -0
      vstgui/vstgui/lib/ccolor.h
  50. +1111
    -0
      vstgui/vstgui/lib/cdatabrowser.cpp
  51. +129
    -0
      vstgui/vstgui/lib/cdatabrowser.h
  52. +381
    -0
      vstgui/vstgui/lib/cdrawcontext.cpp
  53. +302
    -0
      vstgui/vstgui/lib/cdrawcontext.h
  54. +68
    -0
      vstgui/vstgui/lib/cdrawdefs.h
  55. +144
    -0
      vstgui/vstgui/lib/cdrawmethods.cpp
  56. +70
    -0
      vstgui/vstgui/lib/cdrawmethods.h
  57. +89
    -0
      vstgui/vstgui/lib/cdropsource.cpp
  58. +50
    -0
      vstgui/vstgui/lib/cdropsource.h
  59. +242
    -0
      vstgui/vstgui/lib/cfileselector.cpp
  60. +169
    -0
      vstgui/vstgui/lib/cfileselector.h
  61. +177
    -0
      vstgui/vstgui/lib/cfont.cpp
  62. +91
    -0
      vstgui/vstgui/lib/cfont.h
  63. +1932
    -0
      vstgui/vstgui/lib/cframe.cpp
  64. +345
    -0
      vstgui/vstgui/lib/cframe.h
  65. +65
    -0
      vstgui/vstgui/lib/cgradient.h
  66. +171
    -0
      vstgui/vstgui/lib/cgradientview.cpp
  67. +73
    -0
      vstgui/vstgui/lib/cgradientview.h
  68. +152
    -0
      vstgui/vstgui/lib/cgraphicspath.cpp
  69. +153
    -0
      vstgui/vstgui/lib/cgraphicspath.h
  70. +154
    -0
      vstgui/vstgui/lib/cgraphicstransform.h
  71. +239
    -0
      vstgui/vstgui/lib/clayeredviewcontainer.cpp
  72. +58
    -0
      vstgui/vstgui/lib/clayeredviewcontainer.h
  73. +91
    -0
      vstgui/vstgui/lib/clinestyle.cpp
  74. +69
    -0
      vstgui/vstgui/lib/clinestyle.h
  75. +56
    -0
      vstgui/vstgui/lib/coffscreencontext.cpp
  76. +82
    -0
      vstgui/vstgui/lib/coffscreencontext.h
  77. +145
    -0
      vstgui/vstgui/lib/controls/cautoanimation.cpp
  78. +56
    -0
      vstgui/vstgui/lib/controls/cautoanimation.h
  79. +1072
    -0
      vstgui/vstgui/lib/controls/cbuttons.cpp
  80. +276
    -0
      vstgui/vstgui/lib/controls/cbuttons.h
  81. +594
    -0
      vstgui/vstgui/lib/controls/ccolorchooser.cpp
  82. +95
    -0
      vstgui/vstgui/lib/controls/ccolorchooser.h
  83. +264
    -0
      vstgui/vstgui/lib/controls/ccontrol.cpp
  84. +148
    -0
      vstgui/vstgui/lib/controls/ccontrol.h
  85. +297
    -0
      vstgui/vstgui/lib/controls/cfontchooser.cpp
  86. +92
    -0
      vstgui/vstgui/lib/controls/cfontchooser.h
  87. +816
    -0
      vstgui/vstgui/lib/controls/cknob.cpp
  88. +159
    -0
      vstgui/vstgui/lib/controls/cknob.h
  89. +102
    -0
      vstgui/vstgui/lib/controls/cmoviebitmap.cpp
  90. +35
    -0
      vstgui/vstgui/lib/controls/cmoviebitmap.h
  91. +168
    -0
      vstgui/vstgui/lib/controls/cmoviebutton.cpp
  92. +44
    -0
      vstgui/vstgui/lib/controls/cmoviebutton.h
  93. +770
    -0
      vstgui/vstgui/lib/controls/coptionmenu.cpp
  94. +340
    -0
      vstgui/vstgui/lib/controls/coptionmenu.h
  95. +504
    -0
      vstgui/vstgui/lib/controls/cparamdisplay.cpp
  96. +153
    -0
      vstgui/vstgui/lib/controls/cparamdisplay.h
  97. +402
    -0
      vstgui/vstgui/lib/controls/cscrollbar.cpp
  98. +109
    -0
      vstgui/vstgui/lib/controls/cscrollbar.h
  99. +165
    -0
      vstgui/vstgui/lib/controls/csearchtextedit.cpp
  100. +37
    -0
      vstgui/vstgui/lib/controls/csearchtextedit.h

+ 42
- 0
vstgui/.gitignore View File

@@ -0,0 +1,42 @@
vstgui/ide/xcode4/build
vstgui/ide/xcode4/DerivedData
vstgui/ide/xcode4/vstgui.xcodeproj/xcuserdata
vstgui/tests/uidescription vst3/mac/build
vstgui/tests/uidescription vst3/mac/DerivedData
vstgui/tests/uidescription vst3/mac/uidescription test.xcodeproj/xcuserdata
vstgui/tests/unittest/lcov/out
vstgui-coverage.info
vstgui/tests/uidescription vst3/mac/uidescription test.xcodeproj/project.xcworkspace
vstgui/tests/ios standalone/build
vstgui/tests/ios standalone/DerivedData
vstgui/tests/ios standalone/iOS Standalone.xcodeproj/project.xcworkspace
vstgui/tests/ios standalone/iOS Standalone.xcodeproj/xcuserdata
vstgui/ide/visualstudio/vs2015/build
*.VC.opendb
vstgui/tests/uidescription vst3/win/x64
vstgui/tests/uidescription vst3/win/Win32
vstgui/ide/xcode4/vstgui.xcodeproj/project.xcworkspace
vstgui/ide/visualstudio/vs2013/build
vstgui.opensdf
vstgui/tests/standalone/mac/build
vstgui/tests/standalone/mac/DerivedData
vstgui/tests/standalone/mac/VSTGUIStandalone.xcodeproj/project.xcworkspace
vstgui/tests/standalone/mac/VSTGUIStandalone.xcodeproj/xcuserdata
vstgui/tests/standalone/win/vs2015/x64
*.vcxproj.user
vstgui/tests/standalone/win/vs2015/.vs
vstgui/CMakeFiles
CMakeCache.txt
compile_commands.json
vstgui.sdf
vstgui.v12.suo
vstgui/ide/visualstudio/vs2015/.vs
vstgui/build
vstgui/tests/uidescription vst3/win/.vs
vstgui/Documentation/html
/vstgui/uidescription/editing/editoruidesc.h
CMakeLists.txt.user
build
vstgui/gdk
vstgui/gdkmm
vstgui/gtk

+ 49
- 0
vstgui/.travis.yml View File

@@ -0,0 +1,49 @@
language: cpp

matrix:
include:

# macOS
- os: osx
osx_image: xcode7.3
compiler: clang
env: CPPCOMPILER='clang++' CCOMPILER='clang' BUILD_TYPE='Debug'
- os: osx
osx_image: xcode9.4
compiler: clang
env: CPPCOMPILER='clang++' CCOMPILER='clang' BUILD_TYPE='Debug'

# linux
- os: linux
compiler: gcc
addons: &gcc7
apt:
sources: ['ubuntu-toolchain-r-test']
packages: [
'g++-7',
'libxcb-util0-dev',
'libxcb-xkb-dev',
'libgtkmm-3.0-dev',
'libxcb-cursor-dev',
'libxkbcommon-dev',
'libxkbcommon-x11-dev',
'libxcb-keysyms1-dev'
]
env: CPPCOMPILER='g++-7' CCOMPILER='gcc-7' BUILD_TYPE='Debug'

install:
true

script:
- export CXX=${CPPCOMPILER}
- export CC=${CCOMPILER}
- mkdir -p build
- cd build
- |
if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
cmake -GXcode -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../vstgui/
elif [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
cmake -DVSTGUI_STANDALONE=OFF -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../vstgui/
fi
- cmake --build .


+ 27
- 0
vstgui/LICENSE View File

@@ -0,0 +1,27 @@
//-----------------------------------------------------------------------------
// VSTGUI LICENSE
// (c) 2018, Steinberg Media Technologies, All Rights Reserved
//-----------------------------------------------------------------------------
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
// * Neither the name of the Steinberg Media Technologies nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
// OF THE POSSIBILITY OF SUCH DAMAGE.
//-----------------------------------------------------------------------------

+ 52
- 0
vstgui/README.md View File

@@ -0,0 +1,52 @@
# VSTGUI
[![Build Status](https://travis-ci.com/scheffle/vstgui.svg?branch=master)](https://travis-ci.com/scheffle/vstgui)

VSTGUI is a user interface toolkit mainly for audio plug-ins (VST, AAX, AudioUnit, etc...)
and it is designed for working well with VST3 plug-ins.

## History
- First developed inhouse of Steinberg Media Technologies (around 1998) for their first VST plug-ins.
- Later added as binary libraries to the official VST SDK.
- Since May 2003 VSTGUI is open source.

## System requirements
Supported OS:

- Microsoft Windows 7-10
- Apple OSX 10.9-10.13
- Apple iOS 8-11
- Linux (Preview)

Supported IDE:
- Visual Studio 2015/2017
- minimum Xcode 8
- Qt Creator

## License
BSD style

VSTGUI LICENSE
(c) Steinberg Media Technologies, All Rights Reserved

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Steinberg Media Technologies nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.

+ 24
- 0
vstgui/vstgui/.vscode/c_cpp_properties.json View File

@@ -0,0 +1,24 @@
{
"configurations": [
{
"name": "Linux",
"browse": {
"path": [
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true
},
"includePath": [
"${workspaceFolder}"
],
"defines": [],
"compilerPath": "/usr/bin/clang",
"cStandard": "c11",
"cppStandard": "c++17",
"compileCommands": "build/compile_commands.json",
"intelliSenseMode": "clang-x64",
"configurationProvider": "vector-of-bool.cmake-tools"
}
],
"version": 4
}

+ 36
- 0
vstgui/vstgui/.vscode/launch.json View File

@@ -0,0 +1,36 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) standalone",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/Debug/standalone/standalone",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/build/Debug/",
"environment": [
{
"name": "LD_LIBRARY_PATH",
"value": "/home/scheffle/tmp/gtk+3.0-3.22.11/debian/build/shared/gdk/.libs;/home/scheffle/tmp/gtkmm3.0-3.22.0/gdk/gdkmm/.libs;/home/scheffle/tmp/cairomm-1.12.0/debian/libcairomm-1.0-1v5/usr/lib/x86_64-linux-gnu"
},
// {
// "name": "DISPLAY",
// "value": ":9"
// }
],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

+ 51
- 0
vstgui/vstgui/.vscode/settings.json View File

@@ -0,0 +1,51 @@
{
"files.associations": {
"deque": "cpp",
"vector": "cpp",
"*.tcc": "cpp",
"fstream": "cpp",
"valarray": "cpp",
"array": "cpp",
"chrono": "cpp",
"functional": "cpp",
"ratio": "cpp",
"type_traits": "cpp",
"tuple": "cpp",
"utility": "cpp",
"atomic": "cpp",
"bitset": "cpp",
"cctype": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"complex": "cpp",
"condition_variable": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cstring": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"list": "cpp",
"unordered_map": "cpp",
"exception": "cpp",
"initializer_list": "cpp",
"iosfwd": "cpp",
"iostream": "cpp",
"istream": "cpp",
"limits": "cpp",
"memory": "cpp",
"mutex": "cpp",
"new": "cpp",
"ostream": "cpp",
"sstream": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"system_error": "cpp",
"thread": "cpp",
"typeinfo": "cpp"
},
"cmake.configureOnOpen": true,
}

+ 188
- 0
vstgui/vstgui/CMakeLists.txt View File

@@ -0,0 +1,188 @@
##########################################################################################
cmake_minimum_required(VERSION 3.5)

if(NOT PROJECT_NAME)
project(vstgui)
set(VSTGUI_MAIN_PROJECT_BUILD 1)
endif()

set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9)

if (UNIX AND NOT CMAKE_HOST_APPLE)
set(LINUX TRUE)
endif()

##########################################################################################
function(vstgui_set_cxx_version target version)
set_property(TARGET ${target} PROPERTY CXX_STANDARD ${version})
set_property(TARGET ${target} PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET ${target} PROPERTY CMAKE_CXX_STANDARD_REQUIRED ON)
if(APPLE)
target_compile_options(${target} PUBLIC "-stdlib=libc++")
endif()
endfunction(vstgui_set_cxx_version target version)

##########################################################################################
function(vstgui_source_group_by_folder target)
if(CMAKE_CONFIGURATION_TYPES)
set(SOURCE_GROUP_DELIMITER "/")
set(last_dir "")
set(files "")
foreach(file ${${target}_sources})
get_filename_component(dir "${file}" DIRECTORY)
string(FIND "${dir}" ${target} isTargetFolder)
if (${isTargetFolder} EQUAL 0)
string(LENGTH ${target} offset)
string(SUBSTRING "${dir}" ${offset} -1 dir)
endif(${isTargetFolder} EQUAL 0)
if (NOT "${dir}" STREQUAL "${last_dir}")
if (files)
source_group("${last_dir}" FILES ${files})
endif (files)
set(files "")
endif (NOT "${dir}" STREQUAL "${last_dir}")
set(files ${files} ${file})
set(last_dir "${dir}")
endforeach(file)
if (files)
source_group("${last_dir}" FILES ${files})
endif (files)
endif(CMAKE_CONFIGURATION_TYPES)
endfunction(vstgui_source_group_by_folder)

##########################################################################################
if(CMAKE_CONFIGURATION_TYPES)
set(CMAKE_CONFIGURATION_TYPES Debug Release ReleaseLTO)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
endif()

##########################################################################################
set(VSTGUI_COMPILE_DEFINITIONS_DEBUG "VSTGUI_LIVE_EDITING;DEBUG")
set(VSTGUI_COMPILE_DEFINITIONS_RELEASE "NDEBUG;RELEASE")
if(CMAKE_HOST_APPLE)
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 7)
set(VSTGUI_LTO_COMPILER_FLAGS "-O3 -flto=thin")
else()
set(VSTGUI_LTO_COMPILER_FLAGS "-O3 -flto")
endif()
set(VSTGUI_LTO_LINKER_FLAGS "")
endif()
if(LINUX)
set(VSTGUI_LTO_COMPILER_FLAGS "-O3 -flto")
set(VSTGUI_LTO_LINKER_FLAGS "")
find_package(X11 REQUIRED)
find_package(Freetype REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBXCB REQUIRED xcb)
pkg_check_modules(LIBXCB_UTIL REQUIRED xcb-util)
pkg_check_modules(LIBXCB_CURSOR REQUIRED xcb-cursor)
pkg_check_modules(LIBXCB_KEYSYMS REQUIRED xcb-keysyms)
pkg_check_modules(LIBXCB_XKB REQUIRED xcb-xkb)
pkg_check_modules(LIBXKB_COMMON REQUIRED xkbcommon)
pkg_check_modules(LIBXKB_COMMON_X11 REQUIRED xkbcommon-x11)
set(LINUX_LIBRARIES
${X11_LIBRARIES}
${FREETYPE_LIBRARIES}
${LIBXCB_LIBRARIES}
${LIBXCB_UTIL_LIBRARIES}
${LIBXCB_CURSOR_LIBRARIES}
${LIBXCB_KEYSYMS_LIBRARIES}
${LIBXCB_XKB_LIBRARIES}
${LIBXKB_COMMON_LIBRARIES}
${LIBXKB_COMMON_X11_LIBRARIES}
cairo
fontconfig
dl
)
if(VSTGUI_WARN_EVERYTHING)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-multichar")
endif()
if(MSVC)
set(VSTGUI_COMPILE_DEFINITIONS_DEBUG "${VSTGUI_COMPILE_DEFINITIONS_DEBUG};_CRT_SECURE_NO_WARNINGS")
set(VSTGUI_COMPILE_DEFINITIONS_RELEASE "${VSTGUI_COMPILE_DEFINITIONS_RELEASE};_CRT_SECURE_NO_WARNINGS")
set(VSTGUI_LTO_COMPILER_FLAGS "/GL /MP")
set(VSTGUI_LTO_LINKER_FLAGS "/LTCG")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /IGNORE:4221")
endif()

set(VSTGUI_COMPILE_DEFINITIONS PRIVATE
$<$<CONFIG:Debug>:${VSTGUI_COMPILE_DEFINITIONS_DEBUG}>
$<$<CONFIG:Release>:${VSTGUI_COMPILE_DEFINITIONS_RELEASE}>
$<$<CONFIG:ReleaseLTO>:${VSTGUI_COMPILE_DEFINITIONS_RELEASE}>
)

set(CMAKE_CXX_FLAGS_RELEASELTO
"${CMAKE_CXX_FLAGS_RELEASE} ${VSTGUI_LTO_COMPILER_FLAGS}"
)
set(CMAKE_EXE_LINKER_FLAGS_RELEASELTO
"${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${VSTGUI_LTO_LINKER_FLAGS}"
)
set(CMAKE_STATIC_LINKER_FLAGS_RELEASELTO
"${CMAKE_STATIC_LINKER_FLAGS_RELEASE} ${VSTGUI_LTO_LINKER_FLAGS}"
)

##########################################################################################
if(NOT CMAKE_CONFIGURATION_TYPES)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug)
endif()

message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
endif()

if(VSTGUI_MAIN_PROJECT_BUILD)
message("Building only vstgui")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
$<$<CONFIG:Debug>:${CMAKE_BINARY_DIR}/Debug/>$<$<CONFIG:Release>:${CMAKE_BINARY_DIR}/Release/>$<$<CONFIG:ReleaseLTO>:${CMAKE_BINARY_DIR}/ReleaseLTO/>
)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
$<$<CONFIG:Debug>:${CMAKE_BINARY_DIR}/Debug/libs/>$<$<CONFIG:Release>:${CMAKE_BINARY_DIR}/Release/libs/>$<$<CONFIG:ReleaseLTO>:${CMAKE_BINARY_DIR}/ReleaseLTO/libs/>
)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
$<$<CONFIG:Debug>:${CMAKE_BINARY_DIR}/Debug/libs>$<$<CONFIG:Release>:${CMAKE_BINARY_DIR}/Release/libs>$<$<CONFIG:ReleaseLTO>:${CMAKE_BINARY_DIR}/ReleaseLTO/libs>
)
endif()

##########################################################################################
add_subdirectory(lib)
add_subdirectory(uidescription)

if(LINUX)
set(VSTGUI_DISABLE_UNITTESTS 1)
endif()

if(NOT DEFINED VSTGUI_STANDALONE)
option(VSTGUI_STANDALONE "VSTGUI Standalone library" ON)
if(NOT DEFINED VSTGUI_STANDALONE_EXAMPLES)
option(VSTGUI_STANDALONE_EXAMPLES "VSTGUI Standalone examples" ON)
endif()
endif()

if(NOT VSTGUI_STANDALONE AND VSTGUI_STANDALONE_EXAMPLES)
set(VSTGUI_STANDALONE_EXAMPLES OFF)
endif()

option(VSTGUI_TOOLS "VSTGUI Tools" ON)

if(VSTGUI_STANDALONE)
add_subdirectory(standalone)
if(NOT VSTGUI_DISABLE_UNITTESTS)
add_subdirectory(tests/gfxtest)
add_subdirectory(tests/base64codecspeed)
endif()
endif()
if(NOT VSTGUI_DISABLE_UNITTESTS)
add_subdirectory(tests)
endif()
if(VSTGUI_TOOLS)
add_subdirectory(tools)
endif()

get_directory_property(hasParent PARENT_DIRECTORY)
if(hasParent)
set(VSTGUI_COMPILE_DEFINITIONS ${VSTGUI_COMPILE_DEFINITIONS} PARENT_SCOPE)
set(VSTGUI_LTO_COMPILER_FLAGS ${VSTGUI_LTO_COMPILER_FLAGS} PARENT_SCOPE)
endif()

+ 1776
- 0
vstgui/vstgui/Changelog
File diff suppressed because it is too large
View File


+ 73
- 0
vstgui/vstgui/Documentation/Migrating from 2.3.rtf View File

@@ -0,0 +1,73 @@
{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf100
{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;\red255\green0\blue24;}
\paperw11900\paperh16840\margl1440\margr1440\vieww21420\viewh15340\viewkind0
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural

\f0\b\fs38 \cf0 \ul \ulc0 Migrating from VSTGUI 2.3 to VSTGUI 3.0\

\f1\b0\fs22 \ulnone \

\f0\b\fs26 \ul Things you need to change in your code:\

\f1\b0\fs22 \ulnone \
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li560\fi-560\ql\qnatural

\fs24 \cf0 - CFrame::removeView (CView *pView, const bool &withForget = true) The second parameter (withForget) has changed its default parameter.\
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural
\cf0 \
- CDrawContext::getMouseLocation (CPoint &point)\
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li560\fi-560\ql\qnatural
\cf0 This call will always report the global frame coordinate of the mouse. If you need the mouse coordinates relative to a view, use view->getMouseLocation (context, point)\
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural
\cf0 \
- The following CView methods are deprecated :\
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li560\fi-560\ql\qnatural
\cf0 virtual void setParentView (CView *pParentView);\
virtual void setFrame (CFrame *pParent);\
virtual void getFrameTopLeftPos (CPoint& topLeft) const;\
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural
\cf0 \
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li140\fi-140\ql\qnatural
\cf0 - Don't call frame->beginEdit(..) and frame->endEdit(..) in your subclassed controls. Use the CControl methods beginEdit, endEdit.\
\
- Nearly all getter methods have changed to be const. Check all your subclasses, so that your methods don't hide the inherited virtual functions.\
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li140\fi20\ql\qnatural
\cf0 This may be the most important methods from CView and CControl\
- CView::checkUpdate ()\
- CView::isDirty ()\
- CControl::getValue ()\
- CControl::getMin ()\
- CControl::getMax ()\
- CControl::getOldValue ()\
- CControl::getDefaultValue ()\
- CControl::getTag ()\
- CControl::getWheelInc ()\
- CControl::getListener ()\
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\li140\fi-140\ql\qnatural
\cf0 \
- Don't call CControl::update (..) anymore to force an control to redraw. Just call CControl::setDirty (true);\
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural
\cf0 \
\pard\tx565\tx1133\tx1700\tx2266\tx2833\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural

\f0\b\fs26 \cf0 \ul How to use PNG Images on Windows:\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2833\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural

\f1\b0\fs24 \cf0 \ulnone - Download libpng and zlib ({\field{\*\fldinst{HYPERLINK "http://libpng.sourceforge.net/"}}{\fldrslt \cf2 http://libpng.sourceforge.net/}}\cf2 , {\field{\*\fldinst{HYPERLINK "http://www.zlib.net/"}}{\fldrslt http://www.zlib.net/}}\cf0 )\
- Add their sources to your project\
- Define the preprocessor macro: USE_LIBPNG=1\
- add your png images to your rc file like this: \
128 PNG bmp00128.png\
- rebuild ;-)\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural

\f0\b\fs26 \cf0 \ul Transparent Bitmaps with QUARTZ on Mac OS X:\
\
\pard\tx565\tx1133\tx1700\tx2266\tx2832\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural

\f1\b0\fs24 \cf0 \ulnone Per default on Mac OS X if you need transparent bitmaps, you should use the alpha channel of a PNG Image. If you need the old behaviour and want to set bitmap->setTransparentColor (someColor) you need to call bitmap->setNoAlpha (true); (This actually is only necessary for PNG images, all other images will get the noAlpha state per default)\
\
}

+ 11
- 0
vstgui/vstgui/Documentation/index.html View File

@@ -0,0 +1,11 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>VSTGUI</title>
<meta http-equiv="refresh" content="0; URL=html/index.html" />
</head>
<body>

</body>
</html>

+ 106
- 0
vstgui/vstgui/_clang-format View File

@@ -0,0 +1,106 @@
Language: Cpp
AccessModifierOffset: -4
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
# AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: true
BinPackArguments: true
BinPackParameters: false
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterControlStatement: true
AfterEnum: true
AfterFunction: true
AfterNamespace: false
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: true
BeforeElse: true
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeInheritanceComma: true
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeComma
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 100
# CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: false
# ForEachMacros:
# - foreach
# - Q_FOREACH
# - BOOST_FOREACH
IncludeBlocks: Preserve
# IncludeCategories:
# - Regex: '^"(llvm|llvm-c|clang|clang-c)/'
# Priority: 2
# - Regex: '^(<|"(gtest|gmock|isl|json)/)'
# Priority: 3
# - Regex: '.*'
# Priority: 1
# IncludeIsMainRegex: '(Test)?$'
IndentCaseLabels: true
IndentPPDirectives: AfterHash
IndentWidth: 4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBlockIndentWidth: 4
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: false
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 80
PointerAlignment: Left
ReflowComments: true
SortIncludes: false
SortUsingDeclarations: false
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: Always
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
TabWidth: 4
UseTab: Always

+ 26
- 0
vstgui/vstgui/contrib/ciboxblurfilter.h View File

@@ -0,0 +1,26 @@
// This file is part of VSTGUI. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE

#pragma once

#include "../lib/cbitmapfilter.h"

//------------------------------------------------------------------------
namespace VSTGUI {
namespace BitmapFilter {

//------------------------------------------------------------------------
class CIBoxBlurFilter : public BitmapFilter::FilterBase
{
public:
CIBoxBlurFilter ();

bool run (bool replace) override;

static IFilter* CreateFunction (IdStringPtr _name) { return new CIBoxBlurFilter (); }
};

//------------------------------------------------------------------------
} // BitmapFilter
} // VSTGUI

+ 81
- 0
vstgui/vstgui/contrib/ciboxblurfilter.mm View File

@@ -0,0 +1,81 @@
// This file is part of VSTGUI. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE

#import "ciboxblurfilter.h"
#import "../lib/platform/mac/cgbitmap.h"
#import "../lib/cbitmap.h"
#import <QuartzCore/QuartzCore.h>

namespace VSTGUI {
namespace BitmapFilter {

//------------------------------------------------------------------------
__attribute__((__constructor__)) static void registerFilter ()
{
Factory::getInstance ().registerFilter (Standard::kBoxBlur, CIBoxBlurFilter::CreateFunction);
}

//------------------------------------------------------------------------
CIBoxBlurFilter::CIBoxBlurFilter () : FilterBase ("A Box Blur Filter using CoreImage")
{
registerProperty (Standard::Property::kInputBitmap,
BitmapFilter::Property (BitmapFilter::Property::kObject));
registerProperty (Standard::Property::kRadius,
BitmapFilter::Property (static_cast<int32_t> (2)));
}

//------------------------------------------------------------------------
bool CIBoxBlurFilter::run (bool replace)
{
CBitmap* inputBitmap = getInputBitmap ();
int32_t radius = static_cast<int32_t> (
static_cast<double> (getProperty (Standard::Property::kRadius).getInteger ()) *
inputBitmap->getPlatformBitmap ()->getScaleFactor ());
if (inputBitmap == nullptr)
return false;

CGBitmap* cgBitmap = dynamic_cast<CGBitmap*> (inputBitmap->getPlatformBitmap ());
if (cgBitmap == nullptr)
return false;

CIImage* inputImage = [[[CIImage alloc] initWithCGImage:cgBitmap->getCGImage ()] autorelease];
if (inputImage == nil)
return false;

CIFilter* filter = [CIFilter filterWithName:@"CIBoxBlur"];

NSMutableDictionary* values = [[NSMutableDictionary new] autorelease];
[values setObject:@(radius) forKey:@"inputRadius"];
[values setObject:inputImage forKey:@"inputImage"];
[filter setValuesForKeysWithDictionary:values];
CIImage* outputImage = [filter valueForKey:@"outputImage"];
if (outputImage == nil)
return false;

SharedPointer<CGBitmap> outputBitmap = owned (new CGBitmap (cgBitmap->getSize ()));
CGContextRef cgContext = outputBitmap->createCGContext ();
if (cgContext == nullptr)
return false;
CGContextScaleCTM (cgContext, 1, -1);
CIContext* context = [CIContext contextWithCGContext:cgContext options:nil];
if (context == nil)
return false;
[context drawImage:outputImage
atPoint:CGPointMake (0, -cgBitmap->getSize ().y)
fromRect:CGRectMake (0, 0, cgBitmap->getSize ().x, cgBitmap->getSize ().y)];
CFRelease (cgContext);

outputBitmap->setScaleFactor (cgBitmap->getScaleFactor ());
if (replace)
{
inputBitmap->setPlatformBitmap (outputBitmap);
return true;
}
return registerProperty (Standard::Property::kOutputBitmap,
BitmapFilter::Property (owned (new CBitmap (outputBitmap))));
}

//------------------------------------------------------------------------
} // BitmapFilter
} // VSTGUI

+ 1411
- 0
vstgui/vstgui/contrib/keyboardview.cpp
File diff suppressed because it is too large
View File


+ 269
- 0
vstgui/vstgui/contrib/keyboardview.h View File

@@ -0,0 +1,269 @@
//------------------------------------------------------------------------
// This file is part of VSTGUI. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
// Flags : clang-format SMTGSequencer

#pragma once

#include "vstgui/lib/vstguifwd.h"
#include "vstgui/lib/ccolor.h"
#include "vstgui/lib/cview.h"
#include "vstgui/lib/dispatchlist.h"
#include "vstgui/lib/itouchevent.h"
#include <array>
#include <bitset>
#include <map>

namespace VSTGUI {

//------------------------------------------------------------------------
class KeyboardViewBase : public CView
{
public:
using NoteIndex = int16_t;
using NumNotes = uint8_t;

static constexpr NumNotes MaxNotes = 128;

enum class BitmapID
{
WhiteKeyPressed = 0,
WhiteKeyUnpressed,
BlackKeyPressed,
BlackKeyUnpressed,
WhiteKeyShadowLeft,
WhiteKeyShadowRight,
NumBitmaps
};

KeyboardViewBase ();

void setKeyPressed (NoteIndex note, bool state);

virtual void setKeyRange (NoteIndex startNote, NumNotes numKeys);
NoteIndex getKeyRangeStart () const { return startNote; }
NumNotes getNumKeys () const { return numKeys; }
NumNotes getNumWhiteKeys () const;

void setWhiteKeyWidth (CCoord width);
void setBlackKeyWidth (CCoord width);
void setBlackKeyHeight (CCoord height);
void setLineWidth (CCoord width);
CCoord getWhiteKeyWidth () const { return whiteKeyWidth; }
CCoord getBlackKeyWidth () const { return blackKeyWidth; }
CCoord getBlackKeyHeight () const { return blackKeyHeight; }
CCoord getLineWidth () const { return lineWidth; }

void setFrameColor (CColor color);
void setFontColor (CColor color);
void setWhiteKeyColor (CColor color);
void setWhiteKeyPressedColor (CColor color);
void setBlackKeyColor (CColor color);
void setBlackKeyPressedColor (CColor color);
CColor getFrameColor () const { return frameColor; }
CColor getFontColor () const { return fontColor; }
CColor getWhiteKeyColor () const { return whiteKeyColor; }
CColor getWhiteKeyPressedColor () const { return whiteKeyPressedColor; }
CColor getBlackKeyColor () const { return blackKeyColor; }
CColor getBlackKeyPressedColor () const { return blackKeyPressedColor; }

void setNoteNameFont (CFontDesc* font);
CFontDesc* getNoteNameFont () const { return noteNameFont; }
void setDrawNoteText (bool state);
bool getDrawNoteText () const { return drawNoteText; }

void setBitmap (BitmapID bID, CBitmap* bitmap);
CBitmap* getBitmap (BitmapID bID) const;

void setWhiteKeyBitmapInset (const CRect& inset); // TODO: uidesc
void setBlackKeyBitmapInset (const CRect& inset); // TODO: uidesc

const CRect& getNoteRect (NoteIndex note) const { return noteRectCache[note]; }
bool isWhiteKey (NoteIndex note) const;

void drawRect (CDrawContext* context, const CRect& dirtyRect) override;
void setViewSize (const CRect& rect, bool invalid = true) override;
bool sizeToFit () override;
//------------------------------------------------------------------------
protected:
using NoteRectCache = std::array<CRect, MaxNotes>;

void invalidNote (NoteIndex note);

NoteIndex pointToNote (const CPoint& p, bool ignoreY) const;
const NoteRectCache& getNoteRectCache () const { return noteRectCache; }

private:
void drawNote (CDrawContext* context, CRect& rect, NoteIndex note, bool isWhite) const;
CRect calcNoteRect (NoteIndex note) const;
void updateNoteRectCache () const;
void createBitmapCache ();

using BitmapArray =
std::array<SharedPointer<CBitmap>, static_cast<size_t> (BitmapID::NumBitmaps)>;

BitmapArray bitmaps;
SharedPointer<CBitmap> whiteKeyBitmapCache;
SharedPointer<CBitmap> blackKeyBitmapCache;
SharedPointer<CFontDesc> noteNameFont;

CRect whiteKeyBitmapInset;
CRect blackKeyBitmapInset;

CCoord whiteKeyWidth {30};
CCoord blackKeyWidth {20};
CCoord blackKeyHeight {20};
CCoord lineWidth {1.};

CColor frameColor {kBlackCColor};
CColor fontColor {kBlackCColor};
CColor whiteKeyColor {kWhiteCColor};
CColor whiteKeyPressedColor {kGreyCColor};
CColor blackKeyColor {kBlackCColor};
CColor blackKeyPressedColor {kGreyCColor};

NumNotes numKeys {88};
NoteIndex startNote {21};
bool drawNoteText {false};
mutable bool noteRectCacheInvalid {true};
mutable NoteRectCache noteRectCache;
std::bitset<MaxNotes> keyPressed {};
};

class KeyboardViewRangeSelector;
//------------------------------------------------------------------------
struct IKeyboardViewKeyRangeChangedListener
{
virtual void onKeyRangeChanged (KeyboardViewRangeSelector*) = 0;

virtual ~IKeyboardViewKeyRangeChangedListener () noexcept = default;
};

//------------------------------------------------------------------------
class KeyboardViewRangeSelector : public KeyboardViewBase
{
public:
struct Range
{
NoteIndex position;
NumNotes length;
Range (NoteIndex position = 0, NumNotes length = 0) : position (position), length (length)
{
}
bool operator!= (const Range& r) const
{
return position != r.position || length != r.length;
}
};

KeyboardViewRangeSelector () = default;

void drawRect (CDrawContext* context, const CRect& dirtyRect) override;

void setKeyRange (NoteIndex startNote, NumNotes numKeys) override;
void setSelectionRange (const Range& range);
void setSelectionMinMax (NumNotes minRange, NumNotes maxRange);
const Range& getSelectionRange () const { return selectionRange; }
NumNotes getSelectionMin () const { return rangeMin; }
NumNotes getSelectionMax () const { return rangeMax; }
NumNotes getNumWhiteKeysSelected () const;

void registerKeyRangeChangedListener (IKeyboardViewKeyRangeChangedListener* listener);
void unregisterKeyRangeChangedListener (IKeyboardViewKeyRangeChangedListener* listener);

//------------------------------------------------------------------------
private:
DispatchList<IKeyboardViewKeyRangeChangedListener*> listeners;

Range selectionRange {0, 12};
NumNotes rangeMin {12};
NumNotes rangeMax {24};

#if VSTGUI_TOUCH_EVENT_HANDLING
void onTouchEvent (ITouchEvent& event) override;
bool wantsMultiTouchEvents () const override;
void onTouchBegin (const ITouchEvent::TouchPair& touch, ITouchEvent& event);
void onTouchMove (const ITouchEvent::TouchPair& touch, ITouchEvent& event);

enum TouchMode {kUnknown, kMoveRange, kChangeRangeFront, kChangeRangeBack};

Range selectionRangeOnTouchStart;
int32_t touchIds[2] {-1};
TouchMode touchMode {kUnknown};
NoteIndex touchStartNote[2];
#else
CMouseEventResult onMouseDown (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseMoved (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseUp (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseCancel () override;

Range moveStartRange;
NoteIndex moveStartNote {-1};
#endif
};

//------------------------------------------------------------------------
struct IKeyboardViewPlayerDelegate
{
using NoteIndex = KeyboardViewBase::NoteIndex;

virtual int32_t onNoteOn (NoteIndex note, double xPos, double yPos) = 0;
virtual void onNoteOff (NoteIndex note, int32_t noteID) = 0;

virtual void onNoteModulation (int32_t noteID, double xPos, double yPos) = 0;

virtual ~IKeyboardViewPlayerDelegate () noexcept = default;
};

//------------------------------------------------------------------------
struct KeyboardViewPlayerDelegate : public IKeyboardViewPlayerDelegate
{
int32_t onNoteOn (NoteIndex note, double xPos, double yPos) override { return -1; }
void onNoteOff (NoteIndex note, int32_t noteID) override {}
void onNoteModulation (int32_t noteID, double xPos, double yPos) override {}
};

//------------------------------------------------------------------------
class KeyboardView : public KeyboardViewBase
{
public:
KeyboardView ();
void setDelegate (IKeyboardViewPlayerDelegate* delegate) { this->delegate = delegate; }

private:
double calcYParameter (NoteIndex note, CCoord y) const;
double calcXParameter (NoteIndex note, CCoord x) const;
#if VSTGUI_TOUCH_EVENT_HANDLING
bool wantsMultiTouchEvents () const override { return true; }
void onTouchEvent (ITouchEvent& event) override;
void onTouchBegin (const ITouchEvent::TouchPair& touch, ITouchEvent& event);
void onTouchMove (const ITouchEvent::TouchPair& touch, ITouchEvent& event);
void onTouchEnd (const ITouchEvent::TouchPair& touch, ITouchEvent& event);

struct NoteTouch
{
NoteIndex note;
int32_t noteID;
NoteTouch (NoteIndex note) : note (note), noteID (-1) {}
};

std::map<int32_t, NoteTouch> noteTouches;
#else
void doNoteOff ();
void doNoteOn (NoteIndex note, double yPos, double xPos);

CMouseEventResult onMouseDown (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseMoved (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseUp (CPoint& where, const CButtonState& buttons) override;
CMouseEventResult onMouseCancel () override;

NoteIndex pressedNote {-1};
int32_t noteID {-1};
#endif

IKeyboardViewPlayerDelegate* delegate {nullptr};
};

//------------------------------------------------------------------------
} // VSTGUI

+ 2493
- 0
vstgui/vstgui/doxygen/Doxyfile
File diff suppressed because it is too large
View File


+ 85
- 0
vstgui/vstgui/doxygen/doc.h View File

@@ -0,0 +1,85 @@
// This file is part of VSTGUI. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE

/**

@mainpage

Welcome to VSTGUI

- @ref intro @n
- @ref page_news_and_changes @n
- @ref page_vst3_inline_editing @n
- @ref page_vst2_tutorial @n
- @ref page_changelog @n
- @ref page_license @n

@section intro Introduction

\par VSTGUI
VSTGUI is a User Interface Toolkit mainly for Audio Plug-Ins (VST, AudioUnit, etc).
\par History
First developed inhouse of Steinberg Media Technologies (around 1998) for their first VST Plug-Ins.
Later added as binary libraries to the official VST SDK.
Since May 2003 VSTGUI is open source, was hosted at sourceforge and now at GitHub https://github.com/steinbergmedia/vstgui.

Currently VSTGUI compiles on
\par Microsoft Windows (with Visual Studio and Windows 7 Platform SDK)
- 7 (32 and 64 bit)
- 8 (32 and 64 bit)
- 10 (32 and 64 bit)
\par Apple Mac OS X (with gcc 4.0/4.2 or Clang 2.0)
- 10.8 - 10.14 (32 and 64 bit)
\par Apple iOS
- 7.0 - 12.0 (32 and 64 bit)
\par Linux (with gcc >= 5.4 or clang >= 3.8)
- Ubuntu 2016.04 or newer

\sa
<a href="https://github.com/steinbergmedia/vstgui target=_blank> VSTGUI @ GitHub </a>

@page page_setup Setup

\par To include VSTGUI in your projects you only have to add

- vstgui_win32.cpp (for Windows)
- vstgui_linux.cpp (for Linux)
- vstgui_mac.mm (for macOS)
- vstgui_ios.mm (for iOS)

to your IDE project and add a search path to the parent of the root folder of vstgui.

\par On macOS, you need to link to the following Frameworks:

- Accelerate
- Carbon
- Cocoa
- OpenGL
- QuartzCore

\par On iOS, you need to link to the following Frameworks:

- UIKit
- CoreGraphics
- ImageIO
- CoreText
- GLKit
- Accelerate
- QuartzCore

\par On Linux you have to install xcb, freetype, fontconfig and cairo

Debian/Ubuntu based distribution:

- libx11-xcb-dev
- libxcb-util-dev
- libxcb-cursor-dev
- libxcb-keysyms1-dev
- libxcb-xkb-dev
- libxkbcommon-dev
- libxkbcommon-x11-dev
- libfontconfig1-dev
- libcairo2-dev

*/

+ 836
- 0
vstgui/vstgui/doxygen/doxydocu.css View File

@@ -0,0 +1,836 @@
/* The standard CSS for doxygen */

body, table, div, p, dl {
font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
font-size: 12px;
}

/* @group Heading Levels */

h1 {
font-size: 150%;
}

.title {
font-size: 150%;
font-weight: bold;
margin: 10px 2px;
}

h2 {
font-size: 120%;
}

h3 {
font-size: 100%;
}

dt {
font-weight: bold;
}

div.multicol {
-moz-column-gap: 1em;
-webkit-column-gap: 1em;
-moz-column-count: 3;
-webkit-column-count: 3;
}

p.startli, p.startdd, p.starttd {
margin-top: 2px;
}

p.endli {
margin-bottom: 0px;
}

p.enddd {
margin-bottom: 4px;
}

p.endtd {
margin-bottom: 2px;
}

/* @end */

caption {
font-weight: bold;
}

span.legend {
font-size: 70%;
text-align: center;
}

h3.version {
font-size: 90%;
text-align: center;
}

div.qindex, div.navtab{
background-color: #E7EEF4;
border: 1px solid #91B0CE;
text-align: center;
margin: 2px;
padding: 2px;
}

div.qindex, div.navpath {
width: 100%;
line-height: 140%;
}

div.navtab {
margin-right: 15px;
}

/* @group Link Styling */

a {
color: #30506F;
font-weight: normal;
text-decoration: none;
}

.contents a:visited {
color: #3A6085;
}

a:hover {
text-decoration: underline;
}

a.qindex {
font-weight: bold;
}

a.qindexHL {
font-weight: bold;
background-color: #88AACB;
color: #ffffff;
border: 1px double #6F98C0;
}

.contents a.qindexHL:visited {
color: #ffffff;
}

a.el {
font-weight: bold;
}

a.elRef {
}

a.code {
color: #3A6085;
}

a.codeRef {
color: #3A6085;
}

/* @end */

dl.el {
margin-left: -1cm;
}

.fragment {
font-family: monospace, fixed;
font-size: 105%;
}

pre.fragment {
border: 1px solid #B8CCE0;
background-color: #FAFCFD;
padding: 4px 6px;
margin: 4px 8px 4px 2px;
overflow: auto;
word-wrap: break-word;
font-size: 9pt;
line-height: 125%;
}

div.ah {
background-color: black;
font-weight: bold;
color: #ffffff;
margin-bottom: 3px;
margin-top: 3px;
padding: 0.2em;
border: solid thin #333;
border-radius: 0.5em;
-webkit-border-radius: .5em;
-moz-border-radius: .5em;
box-shadow: 2px 2px 3px #999;
-webkit-box-shadow: 2px 2px 3px #999;
-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
}

div.groupHeader {
margin-left: 16px;
margin-top: 12px;
font-weight: bold;
}

div.groupText {
margin-left: 16px;
font-style: italic;
}

body {
background: white;
color: black;
margin: 0;
}

div.contents {
margin-top: 10px;
margin-left: 10px;
margin-right: 5px;
}

td.indexkey {
background-color: #E7EEF4;
font-weight: bold;
border: 1px solid #B8CCE0;
margin: 2px 0px 2px 0;
padding: 2px 10px;
}

td.indexvalue {
background-color: #E7EEF4;
border: 1px solid #B8CCE0;
padding: 2px 10px;
margin: 2px 0px;
}

tr.memlist {
background-color: #EAF0F5;
}

p.formulaDsp {
text-align: center;
}

img.formulaDsp {
}

img.formulaInl {
vertical-align: middle;
}

div.center {
text-align: center;
margin-top: 0px;
margin-bottom: 0px;
padding: 0px;
}

div.center img {
border: 0px;
}

address.footer {
text-align: right;
padding-right: 12px;
}

img.footer {
border: 0px;
vertical-align: middle;
}

/* @group Code Colorization */

span.keyword {
color: #008000
}

span.keywordtype {
color: #604020
}

span.keywordflow {
color: #e08000
}

span.comment {
color: #800000
}

span.preprocessor {
color: #806020
}

span.stringliteral {
color: #002080
}

span.charliteral {
color: #008080
}

span.vhdldigit {
color: #ff00ff
}

span.vhdlchar {
color: #000000
}

span.vhdlkeyword {
color: #700070
}

span.vhdllogic {
color: #ff0000
}

/* @end */

/*
.search {
color: #003399;
font-weight: bold;
}

form.search {
margin-bottom: 0px;
margin-top: 0px;
}

input.search {
font-size: 75%;
color: #000080;
font-weight: normal;
background-color: #e8eef2;
}
*/

td.tiny {
font-size: 75%;
}

.dirtab {
padding: 4px;
border-collapse: collapse;
border: 1px solid #91B0CE;
}

th.dirtab {
background: #E7EEF4;
font-weight: bold;
}

hr {
height: 0px;
border: none;
border-top: 1px solid #3E668E;
}

hr.footer {
height: 1px;
}

/* @group Member Descriptions */

table.memberdecls {
border-spacing: 0px;
padding: 0px;
}

.mdescLeft, .mdescRight,
.memItemLeft, .memItemRight,
.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
background-color: #F8FAFB;
border: none;
margin: 4px;
padding: 1px 0 0 8px;
}

.mdescLeft, .mdescRight {
padding: 0px 8px 4px 8px;
color: #555;
}

.memItemLeft, .memItemRight, .memTemplParams {
border-top: 1px solid #B8CCE0;
}

.memItemLeft, .memTemplItemLeft {
white-space: nowrap;
}

.memItemRight {
width: 100%;
}

.memTemplParams {
color: #3A6085;
white-space: nowrap;
}

/* @end */

/* @group Member Details */

/* Styles for detailed member documentation */

.memtemplate {
font-size: 80%;
color: #3A6085;
font-weight: normal;
margin-left: 9px;
}

.memnav {
background-color: #E7EEF4;
border: 1px solid #91B0CE;
text-align: center;
margin: 2px;
margin-right: 15px;
padding: 2px;
}

.mempage {
width: 100%;
}

.memitem {
padding: 0;
margin-bottom: 10px;
margin-right: 5px;
}

.memname {
white-space: nowrap;
font-weight: bold;
margin-left: 6px;
}

.memproto {
border-top: 1px solid #96B4D1;
border-left: 1px solid #96B4D1;
border-right: 1px solid #96B4D1;
padding: 6px 0px 6px 0px;
color: #1A2B3B;
font-weight: bold;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
/* opera specific markup */
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
border-top-right-radius: 8px;
border-top-left-radius: 8px;
/* firefox specific markup */
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-moz-border-radius-topright: 8px;
-moz-border-radius-topleft: 8px;
/* webkit specific markup */
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-webkit-border-top-right-radius: 8px;
-webkit-border-top-left-radius: 8px;
background-image:url('nav_f.png');
background-repeat:repeat-x;
background-color: #DCE6EF;

}

.memdoc {
border-bottom: 1px solid #96B4D1;
border-left: 1px solid #96B4D1;
border-right: 1px solid #96B4D1;
padding: 2px 5px;
background-color: #FAFCFD;
border-top-width: 0;
/* opera specific markup */
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
/* firefox specific markup */
-moz-border-radius-bottomleft: 8px;
-moz-border-radius-bottomright: 8px;
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F5F8FA 95%, #EAF0F5);
/* webkit specific markup */
-webkit-border-bottom-left-radius: 8px;
-webkit-border-bottom-right-radius: 8px;
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F5F8FA), to(#EAF0F5));
}

.paramkey {
text-align: right;
}

.paramtype {
white-space: nowrap;
}

.paramname {
color: #602020;
white-space: nowrap;
}
.paramname em {
font-style: normal;
}

.params, .retval, .exception, .tparams {
border-spacing: 6px 2px;
}

.params .paramname, .retval .paramname {
font-weight: bold;
vertical-align: top;
}
.params .paramtype {
font-style: italic;
vertical-align: top;
}
.params .paramdir {
font-family: "courier new",courier,monospace;
vertical-align: top;
}




/* @end */

/* @group Directory (tree) */

/* for the tree view */

.ftvtree {
font-family: sans-serif;
margin: 0px;
}

/* these are for tree view when used as main index */

.directory {
font-size: 9pt;
font-weight: bold;
margin: 5px;
}

.directory h3 {
margin: 0px;
margin-top: 1em;
font-size: 11pt;
}

/*
The following two styles can be used to replace the root node title
with an image of your choice. Simply uncomment the next two styles,
specify the name of your image and be sure to set 'height' to the
proper pixel height of your image.
*/

/*
.directory h3.swap {
height: 61px;
background-repeat: no-repeat;
background-image: url("yourimage.gif");
}
.directory h3.swap span {
display: none;
}
*/

.directory > h3 {
margin-top: 0;
}

.directory p {
margin: 0px;
white-space: nowrap;
}

.directory div {
display: none;
margin: 0px;
}

.directory img {
vertical-align: -30%;
}

/* these are for tree view when not used as main index */

.directory-alt {
font-size: 100%;
font-weight: bold;
}

.directory-alt h3 {
margin: 0px;
margin-top: 1em;
font-size: 11pt;
}

.directory-alt > h3 {
margin-top: 0;
}

.directory-alt p {
margin: 0px;
white-space: nowrap;
}

.directory-alt div {
display: none;
margin: 0px;
}

.directory-alt img {
vertical-align: -30%;
}

/* @end */

div.dynheader {
margin-top: 8px;
}

address {
font-style: normal;
color: #1F3347;
}

table.doxtable {
border-collapse:collapse;
}

table.doxtable td, table.doxtable th {
border: 1px solid #21374C;
padding: 3px 7px 2px;
}

table.doxtable th {
background-color: #2B4762;
color: #FFFFFF;
font-size: 110%;
padding-bottom: 4px;
padding-top: 5px;
text-align:left;
}

.tabsearch {
top: 0px;
left: 10px;
height: 36px;
background-image: url('tab_b.png');
z-index: 101;
overflow: hidden;
font-size: 13px;
}

.navpath ul
{
font-size: 11px;
background-image:url('tab_b.png');
background-repeat:repeat-x;
height:30px;
line-height:30px;
color:#739BC2;
border:solid 1px #B5CADE;
overflow:hidden;
margin:0px;
padding:0px;
}

.navpath li
{
list-style-type:none;
float:left;
padding-left:10px;
padding-right:15px;
background-image:url('bc_s.png');
background-repeat:no-repeat;
background-position:right;
color:#294560;
}

.navpath li.navelem a
{
height:32px;
display:block;
text-decoration: none;
outline: none;
}

.navpath li.navelem a:hover
{
color:#4E80B1;
}

.navpath li.footer
{
list-style-type:none;
float:right;
padding-left:10px;
padding-right:15px;
background-image:none;
background-repeat:no-repeat;
background-position:right;
color:#294560;
font-size: 8pt;
}


div.summary
{
float: right;
font-size: 8pt;
padding-right: 5px;
width: 50%;
text-align: right;
}

div.summary a
{
white-space: nowrap;
}

div.ingroups
{
font-size: 8pt;
padding-left: 5px;
width: 50%;
text-align: left;
}

div.ingroups a
{
white-space: nowrap;
}

div.header
{
background-image:url('nav_h.png');
background-repeat:repeat-x;
background-color: #F8FAFB;
margin: 0px;
border-bottom: 1px solid #B8CCE0;
}

div.headertitle
{
padding: 5px 5px 5px 10px;
}

dl
{
padding: 0 0 0 10px;
}

dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug
{
border-left:4px solid;
padding: 0 0 0 6px;
}

dl.note
{
border-color: #D0C000;
}

dl.warning, dl.attention
{
border-color: #FF0000;
}

dl.pre, dl.post, dl.invariant
{
border-color: #00D000;
}

dl.deprecated
{
border-color: #505050;
}

dl.todo
{
border-color: #00C0E0;
}

dl.test
{
border-color: #3030E0;
}

dl.bug
{
border-color: #C08050;
}

#projectlogo
{
text-align: center;
vertical-align: bottom;
border-collapse: separate;
}
#projectlogo img
{
border: 0px none;
}
#projectname
{
font: 250% Tahoma, Arial,sans-serif;
margin: 0px;
padding: 0px;
}
#projectbrief
{
font: 80% Tahoma, Arial,sans-serif;
margin: 0px;
margin-bottom: 3px;
padding: 0px;
}

#projectnumber
{
font: 50% Tahoma, Arial,sans-serif;
margin: 0px;
padding: 0px;
}

#titlearea
{
padding: 0px;
margin: 0px;
width: 100%;
border-bottom: 1px solid #44709B;
}

.image
{
text-align: center;
}

.dotgraph
{
text-align: center;
}

.mscgraph
{
text-align: center;
}

.caption
{
font-weight: bold;
}


+ 12
- 0
vstgui/vstgui/doxygen/page_changelog.h View File

@@ -0,0 +1,12 @@
// This file is part of VSTGUI. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE

/**
@page page_changelog Changelog

For newer changes please see the git log.
@include Changelog

*/

+ 298
- 0
vstgui/vstgui/doxygen/page_changes.h View File

@@ -0,0 +1,298 @@
// This file is part of VSTGUI. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE

/**
@page page_news_and_changes New stuff in VSTGUI 4

- @ref version4_introduction @n
- @ref new_stuff @n
- @ref code_changes @n
- @ref hidpi_support @n
- @ref cocoa_support @n
- @ref ios_support @n
- @subpage page_previous_new_stuff

@section version4_introduction Introduction

Version 4 of VSTGUI is a new milestone release with a restructured code base with the focus of code conformity and easier future enhancements.
The result is that code written for any earlier version of VSTGUI is not always compatible.
It's recommended to start new projects with version 4 while old projects should stay with version 3.6.

@section new_stuff New Stuff

@subsection version4_7 Version 4.7

- redesigned drag'n drop
- drags with bitmaps are now supported on Windows
- standalone library support for Windows 7
- new ImageStitcher tool
- the GDI+ draw backend was removed, the Direct2D backend is the replacement

@subsection version4_6 Version 4.6

- new Control: keyboardView
- cmake cleanup
- fix static object initialization order
- fix build warnings/errors depending on macOS SDK use
- remove warnings

@subsection version4_5 Version 4.5

- cmake build system
- preview of @ref standalone_library @n
- new Controls: VSTGUI::CMultiLineTextLabel, VSTGUI::CSearchTextEdit
- adopt many c++11 language features
@subsection version4_4 Version 4.4

- preview Linux version
- support for Windows XP, Mac OS X 10.6 and non c++11 mode will be removed with version 4.5

@subsection version4_3 Version 4.3

- last version to support Windows XP, Mac OS X 10.6 and non c++11 mode
- HiDPI support (aka Retina support) for Quartz2D and Direct2D backends
- support for creating a graphics path from a string
- new Control : VSTGUI::CSegmentButton
- add support for adding a custom view to the split view separator
- transformation matrix support in VSTGUI::CDrawContext
- alternative c++11 callback functions for VSTGUI::CFileSelector::run(), VSTGUI::CVSTGUITimer, VSTGUI::CParamDisplay::setValueToStringFunction, VSTGUI::CTextEdit::setStringToValueFunction and VSTGUI::CCommandMenuItem::setActions

Note: All current deprecated methods will be removed in the next version. So make sure that your code compiles with VSTGUI_ENABLE_DEPRECATED_METHODS=0

@subsection version4_2 Version 4.2

- iOS Support with Multi Touch handling. See @ref ios_support
- support drawing an icon on a VSTGUI::CTextButton
- VSTGUI::CGradientView
- VSTGUI::CDataBrowser now supports multi row selections
- support compiling in c++11 mode with clang and visual studio
- VSTGUI_OVERRIDE_VMETHOD is now used throughout the vstgui sources to indicate methods which are expecting to override a virtual method of its base classes. (c++11 only)

@subsection version4_1 Version 4.1

- @ref page_uidescription_editor @n
- VSTGUI::COpenGLView (only Windows & Mac Cocoa)
- VSTGUI::CRowColumnView
- VSTGUI::CShadowViewContainer
- VSTGUI::BitmapFilter