From 97587996ee9db30ce00190bdcedd8210490b99f5 Mon Sep 17 00:00:00 2001
From: pepper
Date: Sat, 31 Jan 2015 21:41:28 -0800
Subject: backup vst 2.4
---
README-VSTSDK.txt | 7 +
artwork/Thumbs.db | Bin 0 -> 13824 bytes
artwork/VSTLogoAlpha.png | Bin 0 -> 192488 bytes
artwork/VSTLogoBlack.jpg | Bin 0 -> 142191 bytes
artwork/VSTLogoWhite.jpg | Bin 0 -> 147730 bytes
artwork/VST_Logo_Usage_Guideline.pdf | Bin 0 -> 30648 bytes
bin/mac/VSTMonitor.vst/Contents/Info.plist | 26 +
bin/mac/VSTMonitor.vst/Contents/MacOS/VSTMonitor | Bin 0 -> 628468 bytes
bin/mac/VSTMonitor.vst/Contents/PkgInfo | 1 +
.../VSTMonitor.vst/Contents/Resources/bmp50000.bmp | Bin 0 -> 328406 bytes
.../VSTMonitor.vst/Contents/Resources/bmp50001.bmp | Bin 0 -> 1824 bytes
.../VSTMonitor.vst/Contents/Resources/bmp50002.bmp | Bin 0 -> 5096 bytes
.../VSTMonitor.vst/Contents/Resources/bmp50003.bmp | Bin 0 -> 5096 bytes
.../VSTMonitor.vst/Contents/Resources/bmp50004.bmp | Bin 0 -> 5096 bytes
.../VSTMonitor.vst/Contents/Resources/bmp50005.bmp | Bin 0 -> 5096 bytes
.../VSTMonitor.vst/Contents/Resources/bmp50006.bmp | Bin 0 -> 534 bytes
.../VSTMonitor.vst/Contents/Resources/bmp50007.bmp | Bin 0 -> 111190 bytes
.../VSTMonitor.vst/Contents/Resources/bmp50008.bmp | Bin 0 -> 1822 bytes
bin/mac/VSTParamTool.app/Contents/Info.plist | 24 +
.../VSTParamTool.app/Contents/MacOS/VSTParamTool | Bin 0 -> 9723732 bytes
bin/mac/VSTParamTool.app/Contents/PkgInfo | 1 +
.../Contents/Resources/VSTParamTool.rsrc | Bin 0 -> 9921 bytes
bin/win/vstmonitor.dll | Bin 0 -> 630784 bytes
bin/win/vstparamtool.exe | Bin 0 -> 2723840 bytes
doc/VST Licensing Agreement.rtf | 241 +
doc/gfx/folder.gif | Bin 0 -> 377 bytes
doc/gfx/mac.gif | Bin 0 -> 1018 bytes
doc/gfx/vstpluglogo_small.jpg | Bin 0 -> 3249 bytes
doc/gfx/win.gif | Bin 0 -> 1049 bytes
doc/html/Blocksizechange.gif | Bin 0 -> 3907 bytes
doc/html/ControlChanged.gif | Bin 0 -> 5452 bytes
doc/html/IOchange.gif | Bin 0 -> 10017 bytes
doc/html/Initialisation.gif | Bin 0 -> 4730 bytes
doc/html/Offlineprocessing.gif | Bin 0 -> 9541 bytes
doc/html/Sampleratechange.gif | Bin 0 -> 4094 bytes
doc/html/SpeakerarrangementnegotiationforVSTfx.gif | Bin 0 -> 8005 bytes
doc/html/Termination.gif | Bin 0 -> 3395 bytes
doc/html/TurnOff.gif | Bin 0 -> 3326 bytes
doc/html/TurnOn.gif | Bin 0 -> 3275 bytes
doc/html/aeffect_8h.html | 786 ++
doc/html/aeffectx_8h.html | 2072 ++++
doc/html/aeffeditor_8h.html | 49 +
doc/html/annotated.html | 71 +
doc/html/audioeffect_8cpp.html | 50 +
doc/html/audioeffect_8h.html | 49 +
doc/html/audioeffectx_8cpp.html | 119 +
doc/html/audioeffectx_8h.html | 50 +
doc/html/class_a_eff_editor-members.html | 56 +
doc/html/class_a_eff_editor.html | 390 +
doc/html/class_audio_effect-members.html | 93 +
doc/html/class_audio_effect.html | 1703 ++++
doc/html/class_audio_effect.png | Bin 0 -> 391 bytes
doc/html/class_audio_effect_x-members.html | 159 +
doc/html/class_audio_effect_x.html | 2406 +++++
doc/html/class_audio_effect_x.png | Bin 0 -> 382 bytes
doc/html/deprecated.html | 289 +
doc/html/dir_2d3252dd12c84c66c1d25b26bb45a1f5.html | 55 +
doc/html/dir_77c628dfee72e555f82d5ef53b733f38.html | 47 +
doc/html/dir_f81105d3b854bea570aaf3bae5cb64c1.html | 43 +
doc/html/dir_fa0454ab79b4262333bf837ea3d765e9.html | 43 +
doc/html/dirs.html | 45 +
doc/html/doc_8h.html | 45 +
doc/html/doxygen.css | 358 +
doc/html/doxygen.png | Bin 0 -> 1281 bytes
doc/html/files.html | 52 +
doc/html/ftv2blank.png | Bin 0 -> 174 bytes
doc/html/ftv2doc.png | Bin 0 -> 255 bytes
doc/html/ftv2folderclosed.png | Bin 0 -> 259 bytes
doc/html/ftv2folderopen.png | Bin 0 -> 261 bytes
doc/html/ftv2lastnode.png | Bin 0 -> 233 bytes
doc/html/ftv2link.png | Bin 0 -> 358 bytes
doc/html/ftv2mlastnode.png | Bin 0 -> 160 bytes
doc/html/ftv2mnode.png | Bin 0 -> 194 bytes
doc/html/ftv2node.png | Bin 0 -> 235 bytes
doc/html/ftv2plastnode.png | Bin 0 -> 165 bytes
doc/html/ftv2pnode.png | Bin 0 -> 200 bytes
doc/html/ftv2vertline.png | Bin 0 -> 229 bytes
doc/html/functions.html | 89 +
doc/html/functions_0x62.html | 90 +
doc/html/functions_0x63.html | 102 +
doc/html/functions_0x64.html | 93 +
doc/html/functions_0x65.html | 90 +
doc/html/functions_0x66.html | 90 +
doc/html/functions_0x67.html | 126 +
doc/html/functions_0x68.html | 87 +
doc/html/functions_0x69.html | 94 +
doc/html/functions_0x6b.html | 83 +
doc/html/functions_0x6c.html | 86 +
doc/html/functions_0x6d.html | 98 +
doc/html/functions_0x6e.html | 108 +
doc/html/functions_0x6f.html | 92 +
doc/html/functions_0x70.html | 103 +
doc/html/functions_0x72.html | 96 +
doc/html/functions_0x73.html | 128 +
doc/html/functions_0x74.html | 94 +
doc/html/functions_0x75.html | 90 +
doc/html/functions_0x76.html | 87 +
doc/html/functions_0x77.html | 86 +
doc/html/functions_0x78.html | 83 +
doc/html/functions_0x79.html | 83 +
doc/html/functions_0x7e.html | 84 +
doc/html/functions_func.html | 230 +
doc/html/functions_vars.html | 304 +
doc/html/globals.html | 124 +
doc/html/globals_0x62.html | 72 +
doc/html/globals_0x63.html | 93 +
doc/html/globals_0x64.html | 72 +
doc/html/globals_0x65.html | 163 +
doc/html/globals_0x66.html | 73 +
doc/html/globals_0x6b.html | 277 +
doc/html/globals_0x6d.html | 75 +
doc/html/globals_0x74.html | 72 +
doc/html/globals_0x76.html | 168 +
doc/html/globals_defs.html | 71 +
doc/html/globals_enum.html | 85 +
doc/html/globals_eval.html | 115 +
doc/html/globals_eval_0x65.html | 158 +
doc/html/globals_eval_0x6b.html | 270 +
doc/html/globals_eval_0x6d.html | 70 +
doc/html/globals_eval_0x76.html | 123 +
doc/html/globals_func.html | 61 +
doc/html/globals_type.html | 59 +
doc/html/globals_vars.html | 72 +
doc/html/hierarchy.html | 73 +
doc/html/history.html | 62 +
doc/html/index.html | 8 +
doc/html/intro.html | 65 +
doc/html/license.html | 99 +
doc/html/maceditor.html | 76 +
doc/html/main.html | 50 +
doc/html/namespace_host_can_dos.html | 330 +
doc/html/namespace_plug_can_dos.html | 210 +
doc/html/namespacemembers.html | 67 +
doc/html/namespacemembers_vars.html | 67 +
doc/html/namespaces.html | 44 +
doc/html/others.html | 53 +
doc/html/pages.html | 59 +
doc/html/sequences.html | 99 +
doc/html/struct_a_effect-members.html | 65 +
doc/html/struct_a_effect.html | 493 +
doc/html/struct_e_rect-members.html | 46 +
doc/html/struct_e_rect.html | 133 +
doc/html/struct_midi_key_name-members.html | 47 +
doc/html/struct_midi_key_name.html | 153 +
doc/html/struct_midi_program_category-members.html | 46 +
doc/html/struct_midi_program_category.html | 133 +
doc/html/struct_midi_program_name-members.html | 50 +
doc/html/struct_midi_program_name.html | 214 +
doc/html/struct_vst_audio_file-members.html | 64 +
doc/html/struct_vst_audio_file.html | 493 +
doc/html/struct_vst_audio_file_marker-members.html | 47 +
doc/html/struct_vst_audio_file_marker.html | 153 +
doc/html/struct_vst_event-members.html | 47 +
doc/html/struct_vst_event.html | 151 +
doc/html/struct_vst_events-members.html | 45 +
doc/html/struct_vst_events.html | 113 +
doc/html/struct_vst_file_select-members.html | 55 +
doc/html/struct_vst_file_select.html | 310 +
doc/html/struct_vst_file_type-members.html | 49 +
doc/html/struct_vst_file_type.html | 230 +
doc/html/struct_vst_key_code-members.html | 45 +
doc/html/struct_vst_key_code.html | 109 +
doc/html/struct_vst_midi_event-members.html | 53 +
doc/html/struct_vst_midi_event.html | 271 +
doc/html/struct_vst_midi_sysex_event-members.html | 50 +
doc/html/struct_vst_midi_sysex_event.html | 213 +
doc/html/struct_vst_offline_task-members.html | 73 +
doc/html/struct_vst_offline_task.html | 673 ++
.../struct_vst_parameter_properties-members.html | 58 +
doc/html/struct_vst_parameter_properties.html | 371 +
doc/html/struct_vst_patch_chunk_info-members.html | 47 +
doc/html/struct_vst_patch_chunk_info.html | 153 +
doc/html/struct_vst_pin_properties-members.html | 47 +
doc/html/struct_vst_pin_properties.html | 149 +
.../struct_vst_speaker_arrangement-members.html | 45 +
doc/html/struct_vst_speaker_arrangement.html | 114 +
.../struct_vst_speaker_properties-members.html | 49 +
doc/html/struct_vst_speaker_properties.html | 191 +
doc/html/struct_vst_time_info-members.html | 56 +
doc/html/struct_vst_time_info.html | 334 +
doc/html/struct_vst_variable_io-members.html | 48 +
doc/html/struct_vst_variable_io.html | 173 +
doc/html/struct_vst_window-members.html | 52 +
doc/html/struct_vst_window.html | 224 +
doc/html/structfx_bank-members.html | 56 +
doc/html/structfx_bank.html | 337 +
doc/html/structfx_program-members.html | 55 +
doc/html/structfx_program.html | 317 +
doc/html/tab_b.gif | Bin 0 -> 35 bytes
doc/html/tab_l.gif | Bin 0 -> 706 bytes
doc/html/tab_r.gif | Bin 0 -> 2585 bytes
doc/html/tabs.css | 102 +
doc/html/thanks.html | 40 +
doc/html/tree.html | 180 +
doc/html/vstfxstore_8h.html | 138 +
doc/html/vstoffline.html | 1391 +++
doc/html/vstparamstruct.html | 566 ++
doc/html/vstpluglogo.jpg | Bin 0 -> 16944 bytes
doc/html/vstplugmain_8cpp.html | 111 +
doc/html/whatsnew.html | 88 +
doc/sdk.menu.html | 38 +
doc/sdk.overview.html | 301 +
doc/sdkdoc.css | 130 +
index.html | 14 +
pluginterfaces/vst2.x/aeffect.h | 351 +
pluginterfaces/vst2.x/aeffectx.h | 1143 +++
pluginterfaces/vst2.x/vstfxstore.h | 106 +
public.sdk/samples/vst2.x/adelay/adelay.cpp | 216 +
public.sdk/samples/vst2.x/adelay/adelay.h | 93 +
public.sdk/samples/vst2.x/adelay/adelaymain.cpp | 22 +
.../vst2.x/adelay/editor/resources/bmp00128.bmp | Bin 0 -> 116154 bytes
.../vst2.x/adelay/editor/resources/bmp00129.bmp | Bin 0 -> 2634 bytes
.../vst2.x/adelay/editor/resources/bmp00130.bmp | Bin 0 -> 294 bytes
.../adelay/editor/resources/surrounddelay.rc | 10 +
.../samples/vst2.x/adelay/editor/sdeditor.cpp | 235 +
public.sdk/samples/vst2.x/adelay/editor/sdeditor.h | 51 +
public.sdk/samples/vst2.x/adelay/surrounddelay.cpp | 172 +
public.sdk/samples/vst2.x/adelay/surrounddelay.h | 54 +
public.sdk/samples/vst2.x/adelay/win/adelay.vcproj | 400 +
.../samples/vst2.x/adelay/win/surrounddelay.vcproj | 444 +
public.sdk/samples/vst2.x/again/source/again.cpp | 139 +
public.sdk/samples/vst2.x/again/source/again.h | 50 +
public.sdk/samples/vst2.x/again/win/again.vcproj | 396 +
public.sdk/samples/vst2.x/mac/minihost-Info.plist | 20 +
.../mac/vst 2.4 examples.xcodeproj/project.pbxproj | 924 ++
public.sdk/samples/vst2.x/mac/vst2.4Info.plist | 28 +
.../samples/vst2.x/minihost/source/minieditor.cpp | 203 +
.../samples/vst2.x/minihost/source/minihost.cpp | 333 +
.../samples/vst2.x/minihost/win/minihost.vcproj | 364 +
.../samples/vst2.x/vstxsynth/resource/vstxsynth.rc | 3 +
.../vst2.x/vstxsynth/resource/vstxsynth.vstxml | 36 +
.../samples/vst2.x/vstxsynth/source/gmnames.h | 222 +
.../samples/vst2.x/vstxsynth/source/vstxsynth.cpp | 392 +
.../samples/vst2.x/vstxsynth/source/vstxsynth.h | 139 +
.../vst2.x/vstxsynth/source/vstxsynthproc.cpp | 178 +
.../samples/vst2.x/vstxsynth/win/vstxsynth.vcproj | 448 +
public.sdk/samples/vst2.x/win.vc2003/adelay.vcproj | 286 +
public.sdk/samples/vst2.x/win.vc2003/again.vcproj | 266 +
.../samples/vst2.x/win.vc2003/minihost.vcproj | 200 +
public.sdk/samples/vst2.x/win.vc2003/samples.sln | 61 +
.../samples/vst2.x/win.vc2003/surrounddelay.vcproj | 412 +
.../samples/vst2.x/win.vc2003/vstxsynth.vcproj | 309 +
public.sdk/samples/vst2.x/win.vc6/adelay.dsp | 155 +
public.sdk/samples/vst2.x/win.vc6/again.dsp | 151 +
public.sdk/samples/vst2.x/win.vc6/minihost.dsp | 114 +
public.sdk/samples/vst2.x/win.vc6/samples.dsw | 89 +
.../samples/vst2.x/win.vc6/surrounddelay.dsp | 199 +
public.sdk/samples/vst2.x/win.vc6/vstxsynth.dsp | 167 +
public.sdk/samples/vst2.x/win/samples.sln | 76 +
public.sdk/samples/vst2.x/win/vstplug.def | 3 +
public.sdk/source/vst2.x/aeffeditor.h | 61 +
public.sdk/source/vst2.x/audioeffect.cpp | 703 ++
public.sdk/source/vst2.x/audioeffect.h | 177 +
public.sdk/source/vst2.x/audioeffectx.cpp | 1546 +++
public.sdk/source/vst2.x/audioeffectx.h | 252 +
public.sdk/source/vst2.x/vstplugmain.cpp | 68 +
vstgui.sf/drawtest/mac/Info.plist | 28 +
vstgui.sf/drawtest/mac/audiounit.exp | 2 +
vstgui.sf/drawtest/mac/cw_vst_prefix.pch++ | 4 +
vstgui.sf/drawtest/mac/drawtest.cw9prj | Bin 0 -> 152343 bytes
vstgui.sf/drawtest/mac/drawtest.plc | 40 +
.../drawtest/mac/drawtest.xcode/project.pbxproj | 2050 ++++
.../mac/drawtest.xcodeproj/project.pbxproj | 1142 +++
vstgui.sf/drawtest/mac/xcode_au_prefix.h | 8 +
vstgui.sf/drawtest/mac/xcode_vst_prefix.h | 4 +
vstgui.sf/drawtest/resources/audiounit.r | 34 +
vstgui.sf/drawtest/resources/bmp00001.png | Bin 0 -> 58037 bytes
vstgui.sf/drawtest/resources/bmp00100.png | Bin 0 -> 621 bytes
vstgui.sf/drawtest/resources/bmp01000.png | Bin 0 -> 344792 bytes
vstgui.sf/drawtest/resources/bmp10001.bmp | Bin 0 -> 264654 bytes
vstgui.sf/drawtest/resources/bmp10002.bmp | Bin 0 -> 2334 bytes
vstgui.sf/drawtest/resources/bmp10003.bmp | Bin 0 -> 2454 bytes
vstgui.sf/drawtest/resources/bmp10004.bmp | Bin 0 -> 450 bytes
vstgui.sf/drawtest/resources/bmp10005.bmp | Bin 0 -> 9174 bytes
vstgui.sf/drawtest/resources/bmp10006.bmp | Bin 0 -> 9654 bytes
vstgui.sf/drawtest/resources/bmp10007.bmp | Bin 0 -> 2814 bytes
vstgui.sf/drawtest/resources/bmp10008.bmp | Bin 0 -> 150 bytes
vstgui.sf/drawtest/resources/bmp10009.bmp | Bin 0 -> 1056 bytes
vstgui.sf/drawtest/resources/bmp10010.bmp | Bin 0 -> 826 bytes
vstgui.sf/drawtest/resources/bmp10011.bmp | Bin 0 -> 2938 bytes
vstgui.sf/drawtest/resources/bmp10012.bmp | Bin 0 -> 338 bytes
vstgui.sf/drawtest/resources/bmp10013.bmp | Bin 0 -> 338 bytes
vstgui.sf/drawtest/resources/bmp10014.bmp | Bin 0 -> 8070 bytes
vstgui.sf/drawtest/resources/bmp10015.bmp | Bin 0 -> 33654 bytes
vstgui.sf/drawtest/resources/bmp10016.bmp | Bin 0 -> 48054 bytes
vstgui.sf/drawtest/source/controlsgui.cpp | 541 ++
vstgui.sf/drawtest/source/controlsgui.h | 51 +
vstgui.sf/drawtest/source/pdrawtesteditor.cpp | 266 +
vstgui.sf/drawtest/source/pdrawtesteditor.h | 48 +
vstgui.sf/drawtest/source/pdrawtesteffect.cpp | 177 +
vstgui.sf/drawtest/source/pdrawtesteffect.h | 38 +
vstgui.sf/drawtest/source/pdrawtestmain.cpp | 78 +
vstgui.sf/drawtest/source/pdrawtestview.cpp | 299 +
vstgui.sf/drawtest/source/pdrawtestview.h | 44 +
vstgui.sf/drawtest/source/pprimitivesviews.cpp | 245 +
vstgui.sf/drawtest/source/pprimitivesviews.h | 37 +
vstgui.sf/drawtest/win.vc6/drawtest.dsp | 363 +
vstgui.sf/drawtest/win.vc6/drawtest.dsw | 29 +
vstgui.sf/drawtest/win/drawtest.def | 3 +
vstgui.sf/drawtest/win/drawtest.rc | 32 +
vstgui.sf/drawtest/win/drawtest.vcproj | 608 ++
vstgui.sf/vstgui/Changelog | 360 +
.../vstgui/Documentation/Migrating from 2.3.rtf | 82 +
.../Documentation/html/aeffguieditor_8cpp.html | 119 +
.../Documentation/html/aeffguieditor_8h.html | 46 +
vstgui.sf/vstgui/Documentation/html/annotated.html | 92 +
.../Documentation/html/cfileselector_8cpp.html | 195 +
.../Documentation/html/cfileselector_8h.html | 98 +
.../html/class_a_eff_g_u_i_editor-members.html | 58 +
.../html/class_a_eff_g_u_i_editor.html | 570 ++
.../html/class_c_anim_knob-members.html | 180 +
.../Documentation/html/class_c_anim_knob.html | 421 +
.../Documentation/html/class_c_anim_knob.png | Bin 0 -> 679 bytes
.../html/class_c_attribute_list_entry-members.html | 52 +
.../html/class_c_attribute_list_entry.html | 393 +
.../html/class_c_auto_animation-members.html | 157 +
.../Documentation/html/class_c_auto_animation.html | 575 ++
.../Documentation/html/class_c_auto_animation.png | Bin 0 -> 613 bytes
.../Documentation/html/class_c_bitmap-members.html | 69 +
.../vstgui/Documentation/html/class_c_bitmap.html | 846 ++
.../vstgui/Documentation/html/class_c_bitmap.png | Bin 0 -> 405 bytes
.../Documentation/html/class_c_c_view-members.html | 45 +
.../vstgui/Documentation/html/class_c_c_view.html | 184 +
.../html/class_c_control-members.html | 144 +
.../vstgui/Documentation/html/class_c_control.html | 1265 +++
.../vstgui/Documentation/html/class_c_control.png | Bin 0 -> 3399 bytes
.../html/class_c_control_listener-members.html | 42 +
.../html/class_c_control_listener.html | 140 +
.../html/class_c_control_listener.png | Bin 0 -> 570 bytes
.../html/class_c_drag_container-members.html | 58 +
.../Documentation/html/class_c_drag_container.html | 398 +
.../Documentation/html/class_c_drag_container.png | Bin 0 -> 467 bytes
.../html/class_c_draw_context-members.html | 110 +
.../Documentation/html/class_c_draw_context.html | 2235 +++++
.../Documentation/html/class_c_draw_context.png | Bin 0 -> 613 bytes
.../html/class_c_file_selector-members.html | 45 +
.../Documentation/html/class_c_file_selector.html | 190 +
.../Documentation/html/class_c_frame-members.html | 184 +
.../vstgui/Documentation/html/class_c_frame.html | 1886 ++++
.../vstgui/Documentation/html/class_c_frame.png | Bin 0 -> 622 bytes
.../html/class_c_horizontal_slider-members.html | 173 +
.../html/class_c_horizontal_slider.html | 226 +
.../html/class_c_horizontal_slider.png | Bin 0 -> 732 bytes
.../html/class_c_horizontal_switch-members.html | 151 +
.../html/class_c_horizontal_switch.html | 412 +
.../html/class_c_horizontal_switch.png | Bin 0 -> 628 bytes
.../html/class_c_kick_button-members.html | 149 +
.../Documentation/html/class_c_kick_button.html | 345 +
.../Documentation/html/class_c_kick_button.png | Bin 0 -> 597 bytes
.../Documentation/html/class_c_knob-members.html | 172 +
.../vstgui/Documentation/html/class_c_knob.html | 1048 +++
.../vstgui/Documentation/html/class_c_knob.png | Bin 0 -> 696 bytes
.../html/class_c_movie_bitmap-members.html | 150 +
.../Documentation/html/class_c_movie_bitmap.html | 331 +
.../Documentation/html/class_c_movie_bitmap.png | Bin 0 -> 618 bytes
.../html/class_c_movie_button-members.html | 150 +
.../Documentation/html/class_c_movie_button.html | 375 +
.../Documentation/html/class_c_movie_button.png | Bin 0 -> 605 bytes
.../html/class_c_offscreen_context-members.html | 123 +
.../html/class_c_offscreen_context.html | 492 +
.../html/class_c_offscreen_context.png | Bin 0 -> 593 bytes
.../html/class_c_on_off_button-members.html | 151 +
.../Documentation/html/class_c_on_off_button.html | 363 +
.../Documentation/html/class_c_on_off_button.png | Bin 0 -> 729 bytes
.../html/class_c_option_menu-members.html | 225 +
.../Documentation/html/class_c_option_menu.html | 1633 ++++
.../Documentation/html/class_c_option_menu.png | Bin 0 -> 757 bytes
.../html/class_c_option_menu_scheme-members.html | 63 +
.../html/class_c_option_menu_scheme.html | 555 ++
.../html/class_c_option_menu_scheme.png | Bin 0 -> 501 bytes
.../html/class_c_param_display-members.html | 180 +
.../Documentation/html/class_c_param_display.html | 1152 +++
.../Documentation/html/class_c_param_display.png | Bin 0 -> 1369 bytes
.../html/class_c_reference_counter-members.html | 45 +
.../html/class_c_reference_counter.html | 229 +
.../html/class_c_reference_counter.png | Bin 0 -> 7743 bytes
.../html/class_c_rocker_switch-members.html | 150 +
.../Documentation/html/class_c_rocker_switch.html | 437 +
.../Documentation/html/class_c_rocker_switch.png | Bin 0 -> 620 bytes
.../html/class_c_scroll_container-members.html | 148 +
.../html/class_c_scroll_container.html | 397 +
.../html/class_c_scroll_container.png | Bin 0 -> 662 bytes
.../html/class_c_scroll_view-members.html | 154 +
.../Documentation/html/class_c_scroll_view.html | 597 ++
.../Documentation/html/class_c_scroll_view.png | Bin 0 -> 996 bytes
.../html/class_c_scrollbar-members.html | 172 +
.../Documentation/html/class_c_scrollbar.html | 1001 ++
.../Documentation/html/class_c_scrollbar.png | Bin 0 -> 589 bytes
.../Documentation/html/class_c_slider-members.html | 171 +
.../vstgui/Documentation/html/class_c_slider.html | 1136 +++
.../vstgui/Documentation/html/class_c_slider.png | Bin 0 -> 1047 bytes
.../html/class_c_special_digit-members.html | 152 +
.../Documentation/html/class_c_special_digit.html | 372 +
.../Documentation/html/class_c_special_digit.png | Bin 0 -> 621 bytes
.../html/class_c_splash_screen-members.html | 154 +
.../Documentation/html/class_c_splash_screen.html | 500 +
.../Documentation/html/class_c_splash_screen.png | Bin 0 -> 628 bytes
.../html/class_c_splash_screen_view-members.html | 109 +
.../html/class_c_splash_screen_view.html | 204 +
.../html/class_c_splash_screen_view.png | Bin 0 -> 584 bytes
.../html/class_c_tab_button-members.html | 162 +
.../Documentation/html/class_c_tab_button.html | 523 ++
.../Documentation/html/class_c_tab_button.png | Bin 0 -> 715 bytes
.../html/class_c_tab_child_view-members.html | 51 +
.../Documentation/html/class_c_tab_child_view.html | 212 +
.../Documentation/html/class_c_tab_child_view.png | Bin 0 -> 453 bytes
.../html/class_c_tab_view-members.html | 170 +
.../Documentation/html/class_c_tab_view.html | 833 ++
.../vstgui/Documentation/html/class_c_tab_view.png | Bin 0 -> 975 bytes
.../html/class_c_text_edit-members.html | 193 +
.../Documentation/html/class_c_text_edit.html | 619 ++
.../Documentation/html/class_c_text_edit.png | Bin 0 -> 744 bytes
.../html/class_c_text_label-members.html | 186 +
.../Documentation/html/class_c_text_label.html | 294 +
.../Documentation/html/class_c_text_label.png | Bin 0 -> 739 bytes
.../html/class_c_vertical_slider-members.html | 173 +
.../html/class_c_vertical_slider.html | 226 +
.../Documentation/html/class_c_vertical_slider.png | Bin 0 -> 718 bytes
.../html/class_c_vertical_switch-members.html | 151 +
.../html/class_c_vertical_switch.html | 412 +
.../Documentation/html/class_c_vertical_switch.png | Bin 0 -> 624 bytes
.../Documentation/html/class_c_view-members.html | 107 +
.../vstgui/Documentation/html/class_c_view.html | 2253 +++++
.../vstgui/Documentation/html/class_c_view.png | Bin 0 -> 6275 bytes
.../html/class_c_view_container-members.html | 140 +
.../Documentation/html/class_c_view_container.html | 2169 +++++
.../Documentation/html/class_c_view_container.png | Bin 0 -> 1484 bytes
.../html/class_c_vu_meter-members.html | 158 +
.../Documentation/html/class_c_vu_meter.html | 598 ++
.../vstgui/Documentation/html/class_c_vu_meter.png | Bin 0 -> 589 bytes
.../html/class_i_scrollbar_drawer-members.html | 42 +
.../html/class_i_scrollbar_drawer.html | 150 +
.../html/class_plugin_g_u_i_editor-members.html | 63 +
.../html/class_plugin_g_u_i_editor.html | 725 ++
.../Documentation/html/cscrollview_8cpp.html | 94 +
.../vstgui/Documentation/html/cscrollview_8h.html | 53 +
.../vstgui/Documentation/html/ctabview_8cpp.html | 74 +
.../vstgui/Documentation/html/ctabview_8h.html | 46 +
.../vstgui/Documentation/html/deprecated.html | 42 +
vstgui.sf/vstgui/Documentation/html/doc_8h.html | 41 +
vstgui.sf/vstgui/Documentation/html/doxygen.css | 310 +
vstgui.sf/vstgui/Documentation/html/doxygen.png | Bin 0 -> 1281 bytes
vstgui.sf/vstgui/Documentation/html/files.html | 60 +
vstgui.sf/vstgui/Documentation/html/ftv2blank.png | Bin 0 -> 174 bytes
vstgui.sf/vstgui/Documentation/html/ftv2doc.png | Bin 0 -> 255 bytes
.../vstgui/Documentation/html/ftv2folderclosed.png | Bin 0 -> 259 bytes
.../vstgui/Documentation/html/ftv2folderopen.png | Bin 0 -> 261 bytes
.../vstgui/Documentation/html/ftv2lastnode.png | Bin 0 -> 233 bytes
vstgui.sf/vstgui/Documentation/html/ftv2link.png | Bin 0 -> 358 bytes
.../vstgui/Documentation/html/ftv2mlastnode.png | Bin 0 -> 160 bytes
vstgui.sf/vstgui/Documentation/html/ftv2mnode.png | Bin 0 -> 194 bytes
vstgui.sf/vstgui/Documentation/html/ftv2node.png | Bin 0 -> 235 bytes
.../vstgui/Documentation/html/ftv2plastnode.png | Bin 0 -> 165 bytes
vstgui.sf/vstgui/Documentation/html/ftv2pnode.png | Bin 0 -> 200 bytes
.../vstgui/Documentation/html/ftv2vertline.png | Bin 0 -> 229 bytes
vstgui.sf/vstgui/Documentation/html/functions.html | 96 +
.../vstgui/Documentation/html/functions_0x62.html | 114 +
.../vstgui/Documentation/html/functions_0x63.html | 148 +
.../vstgui/Documentation/html/functions_0x64.html | 111 +
.../vstgui/Documentation/html/functions_0x65.html | 88 +
.../vstgui/Documentation/html/functions_0x66.html | 105 +
.../vstgui/Documentation/html/functions_0x67.html | 183 +
.../vstgui/Documentation/html/functions_0x68.html | 94 +
.../vstgui/Documentation/html/functions_0x69.html | 105 +
.../vstgui/Documentation/html/functions_0x6b.html | 110 +
.../vstgui/Documentation/html/functions_0x6c.html | 99 +
.../vstgui/Documentation/html/functions_0x6d.html | 97 +
.../vstgui/Documentation/html/functions_0x6e.html | 99 +
.../vstgui/Documentation/html/functions_0x6f.html | 103 +
.../vstgui/Documentation/html/functions_0x70.html | 117 +
.../vstgui/Documentation/html/functions_0x72.html | 110 +
.../vstgui/Documentation/html/functions_0x73.html | 193 +
.../vstgui/Documentation/html/functions_0x74.html | 98 +
.../vstgui/Documentation/html/functions_0x75.html | 89 +
.../vstgui/Documentation/html/functions_0x76.html | 95 +
.../vstgui/Documentation/html/functions_0x77.html | 91 +
.../vstgui/Documentation/html/functions_0x78.html | 86 +
.../vstgui/Documentation/html/functions_0x79.html | 86 +
.../vstgui/Documentation/html/functions_0x7a.html | 84 +
.../vstgui/Documentation/html/functions_0x7e.html | 122 +
.../vstgui/Documentation/html/functions_eval.html | 78 +
.../vstgui/Documentation/html/functions_func.html | 89 +
.../Documentation/html/functions_func_0x62.html | 82 +
.../Documentation/html/functions_func_0x63.html | 134 +
.../Documentation/html/functions_func_0x64.html | 100 +
.../Documentation/html/functions_func_0x65.html | 80 +
.../Documentation/html/functions_func_0x66.html | 88 +
.../Documentation/html/functions_func_0x67.html | 178 +
.../Documentation/html/functions_func_0x68.html | 82 +
.../Documentation/html/functions_func_0x69.html | 94 +
.../Documentation/html/functions_func_0x6c.html | 84 +
.../Documentation/html/functions_func_0x6d.html | 82 +
.../Documentation/html/functions_func_0x6e.html | 82 +
.../Documentation/html/functions_func_0x6f.html | 94 +
.../Documentation/html/functions_func_0x70.html | 83 +
.../Documentation/html/functions_func_0x72.html | 94 +
.../Documentation/html/functions_func_0x73.html | 168 +
.../Documentation/html/functions_func_0x74.html | 80 +
.../Documentation/html/functions_func_0x75.html | 83 +
.../Documentation/html/functions_func_0x76.html | 83 +
.../Documentation/html/functions_func_0x77.html | 84 +
.../Documentation/html/functions_func_0x7e.html | 118 +
.../vstgui/Documentation/html/functions_rela.html | 57 +
.../vstgui/Documentation/html/functions_vars.html | 85 +
.../Documentation/html/functions_vars_0x62.html | 110 +
.../Documentation/html/functions_vars_0x63.html | 92 +
.../Documentation/html/functions_vars_0x64.html | 89 +
.../Documentation/html/functions_vars_0x65.html | 86 +
.../Documentation/html/functions_vars_0x66.html | 95 +
.../Documentation/html/functions_vars_0x67.html | 83 +
.../Documentation/html/functions_vars_0x68.html | 91 +
.../Documentation/html/functions_vars_0x69.html | 90 +
.../Documentation/html/functions_vars_0x6b.html | 84 +
.../Documentation/html/functions_vars_0x6c.html | 93 +
.../Documentation/html/functions_vars_0x6d.html | 92 +
.../Documentation/html/functions_vars_0x6e.html | 96 +
.../Documentation/html/functions_vars_0x6f.html | 88 +
.../Documentation/html/functions_vars_0x70.html | 112 +
.../Documentation/html/functions_vars_0x72.html | 94 +
.../Documentation/html/functions_vars_0x73.html | 103 +
.../Documentation/html/functions_vars_0x74.html | 96 +
.../Documentation/html/functions_vars_0x75.html | 84 +
.../Documentation/html/functions_vars_0x76.html | 90 +
.../Documentation/html/functions_vars_0x77.html | 86 +
.../Documentation/html/functions_vars_0x78.html | 85 +
.../Documentation/html/functions_vars_0x79.html | 85 +
.../Documentation/html/functions_vars_0x7a.html | 83 +
vstgui.sf/vstgui/Documentation/html/globals.html | 78 +
.../vstgui/Documentation/html/globals_0x61.html | 77 +
.../vstgui/Documentation/html/globals_0x62.html | 78 +
.../vstgui/Documentation/html/globals_0x63.html | 92 +
.../vstgui/Documentation/html/globals_0x65.html | 78 +
.../vstgui/Documentation/html/globals_0x66.html | 78 +
.../vstgui/Documentation/html/globals_0x67.html | 81 +
.../vstgui/Documentation/html/globals_0x6b.html | 175 +
.../vstgui/Documentation/html/globals_0x6d.html | 86 +
.../vstgui/Documentation/html/globals_0x6e.html | 77 +
.../vstgui/Documentation/html/globals_0x6f.html | 78 +
.../vstgui/Documentation/html/globals_0x71.html | 77 +
.../vstgui/Documentation/html/globals_0x72.html | 77 +
.../vstgui/Documentation/html/globals_0x73.html | 82 +
.../vstgui/Documentation/html/globals_0x74.html | 78 +
.../vstgui/Documentation/html/globals_0x75.html | 83 +
.../vstgui/Documentation/html/globals_0x76.html | 146 +
.../vstgui/Documentation/html/globals_0x77.html | 77 +
.../vstgui/Documentation/html/globals_defs.html | 179 +
.../vstgui/Documentation/html/globals_enum.html | 65 +
.../vstgui/Documentation/html/globals_eval.html | 196 +
.../vstgui/Documentation/html/globals_type.html | 54 +
.../vstgui/Documentation/html/globals_vars.html | 67 +
vstgui.sf/vstgui/Documentation/html/hierarchy.html | 114 +
vstgui.sf/vstgui/Documentation/html/index.html | 8 +
vstgui.sf/vstgui/Documentation/html/intro.html | 63 +
vstgui.sf/vstgui/Documentation/html/license.html | 97 +
vstgui.sf/vstgui/Documentation/html/maceditor.html | 73 +
vstgui.sf/vstgui/Documentation/html/main.html | 47 +
vstgui.sf/vstgui/Documentation/html/others.html | 51 +
vstgui.sf/vstgui/Documentation/html/pages.html | 37 +
.../Documentation/html/plugguieditor_8cpp.html | 119 +
.../Documentation/html/plugguieditor_8h.html | 47 +
vstgui.sf/vstgui/Documentation/html/sequences.html | 97 +
.../Documentation/html/struct_c_color-members.html | 49 +
.../vstgui/Documentation/html/struct_c_color.html | 320 +
.../Documentation/html/struct_c_point-members.html | 50 +
.../vstgui/Documentation/html/struct_c_point.html | 349 +
.../Documentation/html/struct_c_rect-members.html | 66 +
.../vstgui/Documentation/html/struct_c_rect.html | 838 ++
.../Documentation/html/struct_e_rect-members.html | 44 +
.../vstgui/Documentation/html/struct_e_rect.html | 148 +
.../html/struct_vst_file_select-members.html | 53 +
.../Documentation/html/struct_vst_file_select.html | 373 +
.../html/struct_vst_file_type-members.html | 47 +
.../Documentation/html/struct_vst_file_type.html | 263 +
.../html/struct_vst_key_code-members.html | 43 +
.../Documentation/html/struct_vst_key_code.html | 123 +
vstgui.sf/vstgui/Documentation/html/tab_b.gif | Bin 0 -> 35 bytes
vstgui.sf/vstgui/Documentation/html/tab_l.gif | Bin 0 -> 706 bytes
vstgui.sf/vstgui/Documentation/html/tab_r.gif | Bin 0 -> 2585 bytes
vstgui.sf/vstgui/Documentation/html/tabs.css | 102 +
vstgui.sf/vstgui/Documentation/html/thanks.html | 38 +
vstgui.sf/vstgui/Documentation/html/tree.html | 238 +
.../Documentation/html/vstcontrols_8cpp.html | 127 +
.../vstgui/Documentation/html/vstcontrols_8h.html | 494 +
.../vstgui/Documentation/html/vstgui_8cpp.html | 835 ++
vstgui.sf/vstgui/Documentation/html/vstgui_8h.html | 1068 +++
.../vstgui/Documentation/html/vstkeycode_8h.html | 303 +
.../vstgui/Documentation/html/vstoffline.html | 33 +
.../vstgui/Documentation/html/vstparamstruct.html | 33 +
.../Documentation/html/vstplugscarbon_8h.html | 293 +
.../vstgui/Documentation/html/vstplugsmac_8h.html | 381 +
.../Documentation/html/vstplugsmacho_8h.html | 418 +
.../Documentation/html/vstplugsquartz_8h.html | 369 +
vstgui.sf/vstgui/Documentation/html/whatsnew.html | 84 +
vstgui.sf/vstgui/Documentation/index.html | 11 +
vstgui.sf/vstgui/aeffguieditor.cpp | 409 +
vstgui.sf/vstgui/aeffguieditor.h | 113 +
vstgui.sf/vstgui/cfileselector.cpp | 1156 +++
vstgui.sf/vstgui/cfileselector.h | 133 +
vstgui.sf/vstgui/cscrollview.cpp | 497 +
vstgui.sf/vstgui/cscrollview.h | 179 +
vstgui.sf/vstgui/ctabview.cpp | 404 +
vstgui.sf/vstgui/ctabview.h | 100 +
vstgui.sf/vstgui/plugguieditor.cpp | 301 +
vstgui.sf/vstgui/plugguieditor.h | 122 +
vstgui.sf/vstgui/vstcontrols.cpp | 5516 +++++++++++
vstgui.sf/vstgui/vstcontrols.h | 996 ++
vstgui.sf/vstgui/vstgui.cpp | 9851 ++++++++++++++++++++
vstgui.sf/vstgui/vstgui.h | 1227 +++
vstgui.sf/vstgui/vstkeycode.h | 91 +
vstgui.sf/vstgui/vstplugscarbon.h | 15 +
vstgui.sf/vstgui/vstplugsmac.h | 15 +
vstgui.sf/vstgui/vstplugsmacho.h | 22 +
vstgui.sf/vstgui/vstplugsquartz.h | 24 +
613 files changed, 121102 insertions(+)
create mode 100644 README-VSTSDK.txt
create mode 100644 artwork/Thumbs.db
create mode 100644 artwork/VSTLogoAlpha.png
create mode 100644 artwork/VSTLogoBlack.jpg
create mode 100644 artwork/VSTLogoWhite.jpg
create mode 100644 artwork/VST_Logo_Usage_Guideline.pdf
create mode 100644 bin/mac/VSTMonitor.vst/Contents/Info.plist
create mode 100644 bin/mac/VSTMonitor.vst/Contents/MacOS/VSTMonitor
create mode 100644 bin/mac/VSTMonitor.vst/Contents/PkgInfo
create mode 100644 bin/mac/VSTMonitor.vst/Contents/Resources/bmp50000.bmp
create mode 100644 bin/mac/VSTMonitor.vst/Contents/Resources/bmp50001.bmp
create mode 100644 bin/mac/VSTMonitor.vst/Contents/Resources/bmp50002.bmp
create mode 100644 bin/mac/VSTMonitor.vst/Contents/Resources/bmp50003.bmp
create mode 100644 bin/mac/VSTMonitor.vst/Contents/Resources/bmp50004.bmp
create mode 100644 bin/mac/VSTMonitor.vst/Contents/Resources/bmp50005.bmp
create mode 100644 bin/mac/VSTMonitor.vst/Contents/Resources/bmp50006.bmp
create mode 100644 bin/mac/VSTMonitor.vst/Contents/Resources/bmp50007.bmp
create mode 100644 bin/mac/VSTMonitor.vst/Contents/Resources/bmp50008.bmp
create mode 100644 bin/mac/VSTParamTool.app/Contents/Info.plist
create mode 100644 bin/mac/VSTParamTool.app/Contents/MacOS/VSTParamTool
create mode 100644 bin/mac/VSTParamTool.app/Contents/PkgInfo
create mode 100644 bin/mac/VSTParamTool.app/Contents/Resources/VSTParamTool.rsrc
create mode 100644 bin/win/vstmonitor.dll
create mode 100644 bin/win/vstparamtool.exe
create mode 100644 doc/VST Licensing Agreement.rtf
create mode 100644 doc/gfx/folder.gif
create mode 100644 doc/gfx/mac.gif
create mode 100644 doc/gfx/vstpluglogo_small.jpg
create mode 100644 doc/gfx/win.gif
create mode 100644 doc/html/Blocksizechange.gif
create mode 100644 doc/html/ControlChanged.gif
create mode 100644 doc/html/IOchange.gif
create mode 100644 doc/html/Initialisation.gif
create mode 100644 doc/html/Offlineprocessing.gif
create mode 100644 doc/html/Sampleratechange.gif
create mode 100644 doc/html/SpeakerarrangementnegotiationforVSTfx.gif
create mode 100644 doc/html/Termination.gif
create mode 100644 doc/html/TurnOff.gif
create mode 100644 doc/html/TurnOn.gif
create mode 100644 doc/html/aeffect_8h.html
create mode 100644 doc/html/aeffectx_8h.html
create mode 100644 doc/html/aeffeditor_8h.html
create mode 100644 doc/html/annotated.html
create mode 100644 doc/html/audioeffect_8cpp.html
create mode 100644 doc/html/audioeffect_8h.html
create mode 100644 doc/html/audioeffectx_8cpp.html
create mode 100644 doc/html/audioeffectx_8h.html
create mode 100644 doc/html/class_a_eff_editor-members.html
create mode 100644 doc/html/class_a_eff_editor.html
create mode 100644 doc/html/class_audio_effect-members.html
create mode 100644 doc/html/class_audio_effect.html
create mode 100644 doc/html/class_audio_effect.png
create mode 100644 doc/html/class_audio_effect_x-members.html
create mode 100644 doc/html/class_audio_effect_x.html
create mode 100644 doc/html/class_audio_effect_x.png
create mode 100644 doc/html/deprecated.html
create mode 100644 doc/html/dir_2d3252dd12c84c66c1d25b26bb45a1f5.html
create mode 100644 doc/html/dir_77c628dfee72e555f82d5ef53b733f38.html
create mode 100644 doc/html/dir_f81105d3b854bea570aaf3bae5cb64c1.html
create mode 100644 doc/html/dir_fa0454ab79b4262333bf837ea3d765e9.html
create mode 100644 doc/html/dirs.html
create mode 100644 doc/html/doc_8h.html
create mode 100644 doc/html/doxygen.css
create mode 100644 doc/html/doxygen.png
create mode 100644 doc/html/files.html
create mode 100644 doc/html/ftv2blank.png
create mode 100644 doc/html/ftv2doc.png
create mode 100644 doc/html/ftv2folderclosed.png
create mode 100644 doc/html/ftv2folderopen.png
create mode 100644 doc/html/ftv2lastnode.png
create mode 100644 doc/html/ftv2link.png
create mode 100644 doc/html/ftv2mlastnode.png
create mode 100644 doc/html/ftv2mnode.png
create mode 100644 doc/html/ftv2node.png
create mode 100644 doc/html/ftv2plastnode.png
create mode 100644 doc/html/ftv2pnode.png
create mode 100644 doc/html/ftv2vertline.png
create mode 100644 doc/html/functions.html
create mode 100644 doc/html/functions_0x62.html
create mode 100644 doc/html/functions_0x63.html
create mode 100644 doc/html/functions_0x64.html
create mode 100644 doc/html/functions_0x65.html
create mode 100644 doc/html/functions_0x66.html
create mode 100644 doc/html/functions_0x67.html
create mode 100644 doc/html/functions_0x68.html
create mode 100644 doc/html/functions_0x69.html
create mode 100644 doc/html/functions_0x6b.html
create mode 100644 doc/html/functions_0x6c.html
create mode 100644 doc/html/functions_0x6d.html
create mode 100644 doc/html/functions_0x6e.html
create mode 100644 doc/html/functions_0x6f.html
create mode 100644 doc/html/functions_0x70.html
create mode 100644 doc/html/functions_0x72.html
create mode 100644 doc/html/functions_0x73.html
create mode 100644 doc/html/functions_0x74.html
create mode 100644 doc/html/functions_0x75.html
create mode 100644 doc/html/functions_0x76.html
create mode 100644 doc/html/functions_0x77.html
create mode 100644 doc/html/functions_0x78.html
create mode 100644 doc/html/functions_0x79.html
create mode 100644 doc/html/functions_0x7e.html
create mode 100644 doc/html/functions_func.html
create mode 100644 doc/html/functions_vars.html
create mode 100644 doc/html/globals.html
create mode 100644 doc/html/globals_0x62.html
create mode 100644 doc/html/globals_0x63.html
create mode 100644 doc/html/globals_0x64.html
create mode 100644 doc/html/globals_0x65.html
create mode 100644 doc/html/globals_0x66.html
create mode 100644 doc/html/globals_0x6b.html
create mode 100644 doc/html/globals_0x6d.html
create mode 100644 doc/html/globals_0x74.html
create mode 100644 doc/html/globals_0x76.html
create mode 100644 doc/html/globals_defs.html
create mode 100644 doc/html/globals_enum.html
create mode 100644 doc/html/globals_eval.html
create mode 100644 doc/html/globals_eval_0x65.html
create mode 100644 doc/html/globals_eval_0x6b.html
create mode 100644 doc/html/globals_eval_0x6d.html
create mode 100644 doc/html/globals_eval_0x76.html
create mode 100644 doc/html/globals_func.html
create mode 100644 doc/html/globals_type.html
create mode 100644 doc/html/globals_vars.html
create mode 100644 doc/html/hierarchy.html
create mode 100644 doc/html/history.html
create mode 100644 doc/html/index.html
create mode 100644 doc/html/intro.html
create mode 100644 doc/html/license.html
create mode 100644 doc/html/maceditor.html
create mode 100644 doc/html/main.html
create mode 100644 doc/html/namespace_host_can_dos.html
create mode 100644 doc/html/namespace_plug_can_dos.html
create mode 100644 doc/html/namespacemembers.html
create mode 100644 doc/html/namespacemembers_vars.html
create mode 100644 doc/html/namespaces.html
create mode 100644 doc/html/others.html
create mode 100644 doc/html/pages.html
create mode 100644 doc/html/sequences.html
create mode 100644 doc/html/struct_a_effect-members.html
create mode 100644 doc/html/struct_a_effect.html
create mode 100644 doc/html/struct_e_rect-members.html
create mode 100644 doc/html/struct_e_rect.html
create mode 100644 doc/html/struct_midi_key_name-members.html
create mode 100644 doc/html/struct_midi_key_name.html
create mode 100644 doc/html/struct_midi_program_category-members.html
create mode 100644 doc/html/struct_midi_program_category.html
create mode 100644 doc/html/struct_midi_program_name-members.html
create mode 100644 doc/html/struct_midi_program_name.html
create mode 100644 doc/html/struct_vst_audio_file-members.html
create mode 100644 doc/html/struct_vst_audio_file.html
create mode 100644 doc/html/struct_vst_audio_file_marker-members.html
create mode 100644 doc/html/struct_vst_audio_file_marker.html
create mode 100644 doc/html/struct_vst_event-members.html
create mode 100644 doc/html/struct_vst_event.html
create mode 100644 doc/html/struct_vst_events-members.html
create mode 100644 doc/html/struct_vst_events.html
create mode 100644 doc/html/struct_vst_file_select-members.html
create mode 100644 doc/html/struct_vst_file_select.html
create mode 100644 doc/html/struct_vst_file_type-members.html
create mode 100644 doc/html/struct_vst_file_type.html
create mode 100644 doc/html/struct_vst_key_code-members.html
create mode 100644 doc/html/struct_vst_key_code.html
create mode 100644 doc/html/struct_vst_midi_event-members.html
create mode 100644 doc/html/struct_vst_midi_event.html
create mode 100644 doc/html/struct_vst_midi_sysex_event-members.html
create mode 100644 doc/html/struct_vst_midi_sysex_event.html
create mode 100644 doc/html/struct_vst_offline_task-members.html
create mode 100644 doc/html/struct_vst_offline_task.html
create mode 100644 doc/html/struct_vst_parameter_properties-members.html
create mode 100644 doc/html/struct_vst_parameter_properties.html
create mode 100644 doc/html/struct_vst_patch_chunk_info-members.html
create mode 100644 doc/html/struct_vst_patch_chunk_info.html
create mode 100644 doc/html/struct_vst_pin_properties-members.html
create mode 100644 doc/html/struct_vst_pin_properties.html
create mode 100644 doc/html/struct_vst_speaker_arrangement-members.html
create mode 100644 doc/html/struct_vst_speaker_arrangement.html
create mode 100644 doc/html/struct_vst_speaker_properties-members.html
create mode 100644 doc/html/struct_vst_speaker_properties.html
create mode 100644 doc/html/struct_vst_time_info-members.html
create mode 100644 doc/html/struct_vst_time_info.html
create mode 100644 doc/html/struct_vst_variable_io-members.html
create mode 100644 doc/html/struct_vst_variable_io.html
create mode 100644 doc/html/struct_vst_window-members.html
create mode 100644 doc/html/struct_vst_window.html
create mode 100644 doc/html/structfx_bank-members.html
create mode 100644 doc/html/structfx_bank.html
create mode 100644 doc/html/structfx_program-members.html
create mode 100644 doc/html/structfx_program.html
create mode 100644 doc/html/tab_b.gif
create mode 100644 doc/html/tab_l.gif
create mode 100644 doc/html/tab_r.gif
create mode 100644 doc/html/tabs.css
create mode 100644 doc/html/thanks.html
create mode 100644 doc/html/tree.html
create mode 100644 doc/html/vstfxstore_8h.html
create mode 100644 doc/html/vstoffline.html
create mode 100644 doc/html/vstparamstruct.html
create mode 100644 doc/html/vstpluglogo.jpg
create mode 100644 doc/html/vstplugmain_8cpp.html
create mode 100644 doc/html/whatsnew.html
create mode 100644 doc/sdk.menu.html
create mode 100644 doc/sdk.overview.html
create mode 100644 doc/sdkdoc.css
create mode 100644 index.html
create mode 100644 pluginterfaces/vst2.x/aeffect.h
create mode 100644 pluginterfaces/vst2.x/aeffectx.h
create mode 100644 pluginterfaces/vst2.x/vstfxstore.h
create mode 100644 public.sdk/samples/vst2.x/adelay/adelay.cpp
create mode 100644 public.sdk/samples/vst2.x/adelay/adelay.h
create mode 100644 public.sdk/samples/vst2.x/adelay/adelaymain.cpp
create mode 100644 public.sdk/samples/vst2.x/adelay/editor/resources/bmp00128.bmp
create mode 100644 public.sdk/samples/vst2.x/adelay/editor/resources/bmp00129.bmp
create mode 100644 public.sdk/samples/vst2.x/adelay/editor/resources/bmp00130.bmp
create mode 100644 public.sdk/samples/vst2.x/adelay/editor/resources/surrounddelay.rc
create mode 100644 public.sdk/samples/vst2.x/adelay/editor/sdeditor.cpp
create mode 100644 public.sdk/samples/vst2.x/adelay/editor/sdeditor.h
create mode 100644 public.sdk/samples/vst2.x/adelay/surrounddelay.cpp
create mode 100644 public.sdk/samples/vst2.x/adelay/surrounddelay.h
create mode 100644 public.sdk/samples/vst2.x/adelay/win/adelay.vcproj
create mode 100644 public.sdk/samples/vst2.x/adelay/win/surrounddelay.vcproj
create mode 100644 public.sdk/samples/vst2.x/again/source/again.cpp
create mode 100644 public.sdk/samples/vst2.x/again/source/again.h
create mode 100644 public.sdk/samples/vst2.x/again/win/again.vcproj
create mode 100644 public.sdk/samples/vst2.x/mac/minihost-Info.plist
create mode 100644 public.sdk/samples/vst2.x/mac/vst 2.4 examples.xcodeproj/project.pbxproj
create mode 100644 public.sdk/samples/vst2.x/mac/vst2.4Info.plist
create mode 100644 public.sdk/samples/vst2.x/minihost/source/minieditor.cpp
create mode 100644 public.sdk/samples/vst2.x/minihost/source/minihost.cpp
create mode 100644 public.sdk/samples/vst2.x/minihost/win/minihost.vcproj
create mode 100644 public.sdk/samples/vst2.x/vstxsynth/resource/vstxsynth.rc
create mode 100644 public.sdk/samples/vst2.x/vstxsynth/resource/vstxsynth.vstxml
create mode 100644 public.sdk/samples/vst2.x/vstxsynth/source/gmnames.h
create mode 100644 public.sdk/samples/vst2.x/vstxsynth/source/vstxsynth.cpp
create mode 100644 public.sdk/samples/vst2.x/vstxsynth/source/vstxsynth.h
create mode 100644 public.sdk/samples/vst2.x/vstxsynth/source/vstxsynthproc.cpp
create mode 100644 public.sdk/samples/vst2.x/vstxsynth/win/vstxsynth.vcproj
create mode 100644 public.sdk/samples/vst2.x/win.vc2003/adelay.vcproj
create mode 100644 public.sdk/samples/vst2.x/win.vc2003/again.vcproj
create mode 100644 public.sdk/samples/vst2.x/win.vc2003/minihost.vcproj
create mode 100644 public.sdk/samples/vst2.x/win.vc2003/samples.sln
create mode 100644 public.sdk/samples/vst2.x/win.vc2003/surrounddelay.vcproj
create mode 100644 public.sdk/samples/vst2.x/win.vc2003/vstxsynth.vcproj
create mode 100644 public.sdk/samples/vst2.x/win.vc6/adelay.dsp
create mode 100644 public.sdk/samples/vst2.x/win.vc6/again.dsp
create mode 100644 public.sdk/samples/vst2.x/win.vc6/minihost.dsp
create mode 100644 public.sdk/samples/vst2.x/win.vc6/samples.dsw
create mode 100644 public.sdk/samples/vst2.x/win.vc6/surrounddelay.dsp
create mode 100644 public.sdk/samples/vst2.x/win.vc6/vstxsynth.dsp
create mode 100644 public.sdk/samples/vst2.x/win/samples.sln
create mode 100644 public.sdk/samples/vst2.x/win/vstplug.def
create mode 100644 public.sdk/source/vst2.x/aeffeditor.h
create mode 100644 public.sdk/source/vst2.x/audioeffect.cpp
create mode 100644 public.sdk/source/vst2.x/audioeffect.h
create mode 100644 public.sdk/source/vst2.x/audioeffectx.cpp
create mode 100644 public.sdk/source/vst2.x/audioeffectx.h
create mode 100644 public.sdk/source/vst2.x/vstplugmain.cpp
create mode 100644 vstgui.sf/drawtest/mac/Info.plist
create mode 100644 vstgui.sf/drawtest/mac/audiounit.exp
create mode 100644 vstgui.sf/drawtest/mac/cw_vst_prefix.pch++
create mode 100644 vstgui.sf/drawtest/mac/drawtest.cw9prj
create mode 100644 vstgui.sf/drawtest/mac/drawtest.plc
create mode 100644 vstgui.sf/drawtest/mac/drawtest.xcode/project.pbxproj
create mode 100644 vstgui.sf/drawtest/mac/drawtest.xcodeproj/project.pbxproj
create mode 100644 vstgui.sf/drawtest/mac/xcode_au_prefix.h
create mode 100644 vstgui.sf/drawtest/mac/xcode_vst_prefix.h
create mode 100644 vstgui.sf/drawtest/resources/audiounit.r
create mode 100644 vstgui.sf/drawtest/resources/bmp00001.png
create mode 100644 vstgui.sf/drawtest/resources/bmp00100.png
create mode 100644 vstgui.sf/drawtest/resources/bmp01000.png
create mode 100644 vstgui.sf/drawtest/resources/bmp10001.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10002.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10003.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10004.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10005.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10006.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10007.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10008.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10009.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10010.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10011.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10012.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10013.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10014.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10015.bmp
create mode 100644 vstgui.sf/drawtest/resources/bmp10016.bmp
create mode 100644 vstgui.sf/drawtest/source/controlsgui.cpp
create mode 100644 vstgui.sf/drawtest/source/controlsgui.h
create mode 100644 vstgui.sf/drawtest/source/pdrawtesteditor.cpp
create mode 100644 vstgui.sf/drawtest/source/pdrawtesteditor.h
create mode 100644 vstgui.sf/drawtest/source/pdrawtesteffect.cpp
create mode 100644 vstgui.sf/drawtest/source/pdrawtesteffect.h
create mode 100644 vstgui.sf/drawtest/source/pdrawtestmain.cpp
create mode 100644 vstgui.sf/drawtest/source/pdrawtestview.cpp
create mode 100644 vstgui.sf/drawtest/source/pdrawtestview.h
create mode 100644 vstgui.sf/drawtest/source/pprimitivesviews.cpp
create mode 100644 vstgui.sf/drawtest/source/pprimitivesviews.h
create mode 100644 vstgui.sf/drawtest/win.vc6/drawtest.dsp
create mode 100644 vstgui.sf/drawtest/win.vc6/drawtest.dsw
create mode 100644 vstgui.sf/drawtest/win/drawtest.def
create mode 100644 vstgui.sf/drawtest/win/drawtest.rc
create mode 100644 vstgui.sf/drawtest/win/drawtest.vcproj
create mode 100644 vstgui.sf/vstgui/Changelog
create mode 100644 vstgui.sf/vstgui/Documentation/Migrating from 2.3.rtf
create mode 100644 vstgui.sf/vstgui/Documentation/html/aeffguieditor_8cpp.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/aeffguieditor_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/annotated.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/cfileselector_8cpp.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/cfileselector_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_a_eff_g_u_i_editor-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_a_eff_g_u_i_editor.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_anim_knob-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_anim_knob.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_anim_knob.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_attribute_list_entry-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_attribute_list_entry.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_auto_animation-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_auto_animation.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_auto_animation.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_bitmap-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_bitmap.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_bitmap.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_c_view-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_c_view.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_control-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_control.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_control.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_control_listener-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_control_listener.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_control_listener.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_drag_container-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_drag_container.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_drag_container.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_draw_context-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_draw_context.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_draw_context.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_file_selector-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_file_selector.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_frame-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_frame.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_frame.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_kick_button-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_kick_button.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_kick_button.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_knob-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_knob.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_knob.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_movie_button-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_movie_button.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_movie_button.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_on_off_button-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_on_off_button.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_on_off_button.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_option_menu-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_option_menu.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_option_menu.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_param_display-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_param_display.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_param_display.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_reference_counter-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_reference_counter.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_reference_counter.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_scroll_container-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_scroll_container.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_scroll_container.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_scroll_view-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_scroll_view.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_scroll_view.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_scrollbar-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_scrollbar.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_scrollbar.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_slider-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_slider.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_slider.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_special_digit-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_special_digit.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_special_digit.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_splash_screen-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_splash_screen.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_splash_screen.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_tab_button-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_tab_button.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_tab_button.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_tab_view-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_tab_view.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_tab_view.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_text_edit-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_text_edit.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_text_edit.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_text_label-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_text_label.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_text_label.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_view-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_view.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_view.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_view_container-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_view_container.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_view_container.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_vu_meter-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_vu_meter.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_c_vu_meter.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_i_scrollbar_drawer-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_i_scrollbar_drawer.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_plugin_g_u_i_editor-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/class_plugin_g_u_i_editor.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/cscrollview_8cpp.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/cscrollview_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/ctabview_8cpp.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/ctabview_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/deprecated.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/doc_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/doxygen.css
create mode 100644 vstgui.sf/vstgui/Documentation/html/doxygen.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/files.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2blank.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2doc.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2folderclosed.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2folderopen.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2lastnode.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2link.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2mlastnode.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2mnode.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2node.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2plastnode.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2pnode.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/ftv2vertline.png
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x62.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x63.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x64.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x65.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x66.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x67.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x68.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x69.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x6b.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x6c.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x6d.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x6e.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x6f.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x70.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x72.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x73.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x74.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x75.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x76.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x77.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x78.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x79.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x7a.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_0x7e.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_eval.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x62.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x63.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x64.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x65.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x66.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x67.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x68.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x69.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x6c.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x6d.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x6e.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x6f.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x70.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x72.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x73.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x74.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x75.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x76.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x77.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_func_0x7e.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_rela.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x62.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x63.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x64.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x65.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x66.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x67.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x68.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x69.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x6b.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x6c.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x6d.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x6e.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x6f.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x70.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x72.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x73.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x74.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x75.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x76.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x77.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x78.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x79.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/functions_vars_0x7a.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x61.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x62.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x63.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x65.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x66.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x67.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x6b.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x6d.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x6e.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x6f.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x71.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x72.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x73.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x74.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x75.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x76.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_0x77.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_defs.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_enum.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_eval.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_type.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/globals_vars.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/hierarchy.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/index.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/intro.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/license.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/maceditor.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/main.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/others.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/pages.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/plugguieditor_8cpp.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/plugguieditor_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/sequences.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_c_color-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_c_color.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_c_point-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_c_point.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_c_rect-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_c_rect.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_e_rect-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_e_rect.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_vst_file_select-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_vst_file_select.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_vst_file_type-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_vst_file_type.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_vst_key_code-members.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/struct_vst_key_code.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/tab_b.gif
create mode 100644 vstgui.sf/vstgui/Documentation/html/tab_l.gif
create mode 100644 vstgui.sf/vstgui/Documentation/html/tab_r.gif
create mode 100644 vstgui.sf/vstgui/Documentation/html/tabs.css
create mode 100644 vstgui.sf/vstgui/Documentation/html/thanks.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/tree.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/vstcontrols_8cpp.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/vstcontrols_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/vstgui_8cpp.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/vstgui_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/vstkeycode_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/vstoffline.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/vstparamstruct.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/vstplugscarbon_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/vstplugsmac_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/vstplugsmacho_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/vstplugsquartz_8h.html
create mode 100644 vstgui.sf/vstgui/Documentation/html/whatsnew.html
create mode 100644 vstgui.sf/vstgui/Documentation/index.html
create mode 100644 vstgui.sf/vstgui/aeffguieditor.cpp
create mode 100644 vstgui.sf/vstgui/aeffguieditor.h
create mode 100644 vstgui.sf/vstgui/cfileselector.cpp
create mode 100644 vstgui.sf/vstgui/cfileselector.h
create mode 100644 vstgui.sf/vstgui/cscrollview.cpp
create mode 100644 vstgui.sf/vstgui/cscrollview.h
create mode 100644 vstgui.sf/vstgui/ctabview.cpp
create mode 100644 vstgui.sf/vstgui/ctabview.h
create mode 100644 vstgui.sf/vstgui/plugguieditor.cpp
create mode 100644 vstgui.sf/vstgui/plugguieditor.h
create mode 100644 vstgui.sf/vstgui/vstcontrols.cpp
create mode 100644 vstgui.sf/vstgui/vstcontrols.h
create mode 100644 vstgui.sf/vstgui/vstgui.cpp
create mode 100644 vstgui.sf/vstgui/vstgui.h
create mode 100644 vstgui.sf/vstgui/vstkeycode.h
create mode 100644 vstgui.sf/vstgui/vstplugscarbon.h
create mode 100644 vstgui.sf/vstgui/vstplugsmac.h
create mode 100644 vstgui.sf/vstgui/vstplugsmacho.h
create mode 100644 vstgui.sf/vstgui/vstplugsquartz.h
diff --git a/README-VSTSDK.txt b/README-VSTSDK.txt
new file mode 100644
index 0000000..bd4555b
--- /dev/null
+++ b/README-VSTSDK.txt
@@ -0,0 +1,7 @@
+Due to licensing restrictions, the VST SDK is not distributed with the
+source code of this project. You must download it separately here:
+
+http://www.steinberg.net/en/company/developer.html
+
+Uncompress the VST SDK zipfile, and then copy the contents of the
+"vstsdk2.4" directory here.
diff --git a/artwork/Thumbs.db b/artwork/Thumbs.db
new file mode 100644
index 0000000..217981f
Binary files /dev/null and b/artwork/Thumbs.db differ
diff --git a/artwork/VSTLogoAlpha.png b/artwork/VSTLogoAlpha.png
new file mode 100644
index 0000000..cad97d9
Binary files /dev/null and b/artwork/VSTLogoAlpha.png differ
diff --git a/artwork/VSTLogoBlack.jpg b/artwork/VSTLogoBlack.jpg
new file mode 100644
index 0000000..3068007
Binary files /dev/null and b/artwork/VSTLogoBlack.jpg differ
diff --git a/artwork/VSTLogoWhite.jpg b/artwork/VSTLogoWhite.jpg
new file mode 100644
index 0000000..aa9ef62
Binary files /dev/null and b/artwork/VSTLogoWhite.jpg differ
diff --git a/artwork/VST_Logo_Usage_Guideline.pdf b/artwork/VST_Logo_Usage_Guideline.pdf
new file mode 100644
index 0000000..f8aa355
Binary files /dev/null and b/artwork/VST_Logo_Usage_Guideline.pdf differ
diff --git a/bin/mac/VSTMonitor.vst/Contents/Info.plist b/bin/mac/VSTMonitor.vst/Contents/Info.plist
new file mode 100644
index 0000000..bbc6ced
--- /dev/null
+++ b/bin/mac/VSTMonitor.vst/Contents/Info.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ VSTMonitor
+ CFBundleIdentifier
+ com.apple.carbonbundletemplate
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ VSTMonitor
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ CSResourcesFileMapped
+
+
+
diff --git a/bin/mac/VSTMonitor.vst/Contents/MacOS/VSTMonitor b/bin/mac/VSTMonitor.vst/Contents/MacOS/VSTMonitor
new file mode 100644
index 0000000..22cbdb3
Binary files /dev/null and b/bin/mac/VSTMonitor.vst/Contents/MacOS/VSTMonitor differ
diff --git a/bin/mac/VSTMonitor.vst/Contents/PkgInfo b/bin/mac/VSTMonitor.vst/Contents/PkgInfo
new file mode 100644
index 0000000..19a9cf6
--- /dev/null
+++ b/bin/mac/VSTMonitor.vst/Contents/PkgInfo
@@ -0,0 +1 @@
+BNDL????
\ No newline at end of file
diff --git a/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50000.bmp b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50000.bmp
new file mode 100644
index 0000000..a337c33
Binary files /dev/null and b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50000.bmp differ
diff --git a/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50001.bmp b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50001.bmp
new file mode 100644
index 0000000..d9d1980
Binary files /dev/null and b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50001.bmp differ
diff --git a/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50002.bmp b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50002.bmp
new file mode 100644
index 0000000..fab2df1
Binary files /dev/null and b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50002.bmp differ
diff --git a/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50003.bmp b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50003.bmp
new file mode 100644
index 0000000..5c58ec9
Binary files /dev/null and b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50003.bmp differ
diff --git a/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50004.bmp b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50004.bmp
new file mode 100644
index 0000000..b8a9dc0
Binary files /dev/null and b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50004.bmp differ
diff --git a/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50005.bmp b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50005.bmp
new file mode 100644
index 0000000..bde19bc
Binary files /dev/null and b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50005.bmp differ
diff --git a/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50006.bmp b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50006.bmp
new file mode 100644
index 0000000..538751f
Binary files /dev/null and b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50006.bmp differ
diff --git a/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50007.bmp b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50007.bmp
new file mode 100644
index 0000000..0e9c129
Binary files /dev/null and b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50007.bmp differ
diff --git a/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50008.bmp b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50008.bmp
new file mode 100644
index 0000000..cd40e49
Binary files /dev/null and b/bin/mac/VSTMonitor.vst/Contents/Resources/bmp50008.bmp differ
diff --git a/bin/mac/VSTParamTool.app/Contents/Info.plist b/bin/mac/VSTParamTool.app/Contents/Info.plist
new file mode 100644
index 0000000..a7b110e
--- /dev/null
+++ b/bin/mac/VSTParamTool.app/Contents/Info.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ VSTParamTool
+ CFBundleIdentifier
+ com.steinberg.vstparamtool
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ VSTParamTool
+ CFBundlePackageType
+ APPL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ CSResourcesFileMapped
+
+
+
diff --git a/bin/mac/VSTParamTool.app/Contents/MacOS/VSTParamTool b/bin/mac/VSTParamTool.app/Contents/MacOS/VSTParamTool
new file mode 100644
index 0000000..504e8a0
Binary files /dev/null and b/bin/mac/VSTParamTool.app/Contents/MacOS/VSTParamTool differ
diff --git a/bin/mac/VSTParamTool.app/Contents/PkgInfo b/bin/mac/VSTParamTool.app/Contents/PkgInfo
new file mode 100644
index 0000000..bd04210
--- /dev/null
+++ b/bin/mac/VSTParamTool.app/Contents/PkgInfo
@@ -0,0 +1 @@
+APPL????
\ No newline at end of file
diff --git a/bin/mac/VSTParamTool.app/Contents/Resources/VSTParamTool.rsrc b/bin/mac/VSTParamTool.app/Contents/Resources/VSTParamTool.rsrc
new file mode 100644
index 0000000..25575cc
Binary files /dev/null and b/bin/mac/VSTParamTool.app/Contents/Resources/VSTParamTool.rsrc differ
diff --git a/bin/win/vstmonitor.dll b/bin/win/vstmonitor.dll
new file mode 100644
index 0000000..913a03b
Binary files /dev/null and b/bin/win/vstmonitor.dll differ
diff --git a/bin/win/vstparamtool.exe b/bin/win/vstparamtool.exe
new file mode 100644
index 0000000..558c303
Binary files /dev/null and b/bin/win/vstparamtool.exe differ
diff --git a/doc/VST Licensing Agreement.rtf b/doc/VST Licensing Agreement.rtf
new file mode 100644
index 0000000..a528186
--- /dev/null
+++ b/doc/VST Licensing Agreement.rtf
@@ -0,0 +1,241 @@
+{\rtf1\ansi\ansicpg1252\uc1\deff36\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1031\deflangfe1031{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}
+{\f36\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\f115\froman\fcharset238\fprq2 Times New Roman CE;}{\f116\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f118\froman\fcharset161\fprq2 Times New Roman Greek;}
+{\f119\froman\fcharset162\fprq2 Times New Roman Tur;}{\f120\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f121\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f122\froman\fcharset186\fprq2 Times New Roman Baltic;}
+{\f123\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f475\fswiss\fcharset238\fprq2 Verdana CE;}{\f476\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f478\fswiss\fcharset161\fprq2 Verdana Greek;}{\f479\fswiss\fcharset162\fprq2 Verdana Tur;}
+{\f482\fswiss\fcharset186\fprq2 Verdana Baltic;}{\f483\fswiss\fcharset163\fprq2 Verdana (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
+\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{
+\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 \snext0 Normal;}{\s1\ql \li0\ri0\nowidctlpar\faauto\outlinelevel0\rin0\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031
+\sbasedon0 \snext0 heading 1;}{\s2\ql \li0\ri0\nowidctlpar\faauto\outlinelevel1\rin0\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 \sbasedon0 \snext0 heading 2;}{\s3\ql \li0\ri0\nowidctlpar\faauto\outlinelevel2\rin0\lin0\itap0
+\f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 \sbasedon0 \snext0 heading 3;}{\s4\ql \li0\ri0\nowidctlpar\faauto\outlinelevel3\rin0\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 \sbasedon0 \snext0 heading 4;}{
+\s5\ql \li0\ri0\nowidctlpar\faauto\outlinelevel4\rin0\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 \sbasedon0 \snext0 heading 5;}{\s6\ql \li0\ri0\nowidctlpar\faauto\outlinelevel5\rin0\lin0\itap0
+\f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 \sbasedon0 \snext0 heading 6;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\*
+\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
+\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}}{\*\listtable{\list\listtemplateid194138022\listsimple{\listlevel\levelnfc23\levelnfcn23
+\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}{\list\listtemplateid910600962\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelold\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\f36\fbias0 }{\listname ;}\listid125323114}{\list\listtemplateid-1647170324\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat2\levelold
+\levelspace0\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\f36\fbias0 }{\listname ;}\listid833880899}{\list\listtemplateid910600962\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelold\levelspace0
+\levelindent360{\leveltext\'02\'00.;}{\levelnumbers\'01;}\f36\fbias0 }{\listname ;}\listid1745569104}{\list\listtemplateid1815085384\listsimple{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelold\levelspace0
+\levelindent360{\leveltext\'03(\'00);}{\levelnumbers\'02;}\f36\fbias0 }{\listname ;}\listid1993564023}}{\*\listoverridetable{\listoverride\listid125323114\listoverridecount0\ls1}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelold\levelspace0\levelindent360{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 }}\ls2}{\listoverride\listid1993564023\listoverridecount0\ls3}
+{\listoverride\listid833880899\listoverridecount0\ls4}{\listoverride\listid1745569104\listoverridecount0\ls5}}{\*\rsidtbl \rsid11812474}{\*\generator Microsoft Word 10.0.4524;}{\info{\author YGrabit}{\operator YGrabit}{\creatim\yr2006\mo1\dy12\hr10}
+{\revtim\yr2006\mo1\dy12\hr10\min3}{\version2}{\edmins0}{\nofpages6}{\nofwords1342}{\nofchars8460}{\*\company Media Technologies GmbH}{\nofcharsws9783}{\vern16475}}\margl1417\margr1417\margt1417\margb1134
+\deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\nolnhtadjtbl\rsidroot11812474
+\fet0\sectd \linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \s3\qc \li0\ri0\keepn\nowidctlpar\faauto\outlinelevel2\rin0\lin0\itap0
+\f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\b\fs22\insrsid11812474\charrsid11812474 Steinberg VST PlugIns SDK Licensing Agreement
+\par }\pard\plain \qc \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\insrsid11812474\charrsid11812474 (Version \'942.4\endash January 2006\'94)}{
+\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }{\fs22\insrsid11812474\charrsid11812474 between}{\b\fs22\insrsid11812474\charrsid11812474
+\par
+\par }\pard\plain \s4\qc \li20\ri4\keepn\nowidctlpar\tx720\tx9440\faauto\outlinelevel3\rin4\lin20\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\b\fs22\lang1031\langfe1031\langnp1031\insrsid11812474 STEINBERG MEDIA TECHNOLOGIES GMBH
+\par }\pard\plain \ql \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\b\fs22\lang1031\langfe1031\langnp1031\insrsid11812474
+\par }{\fs22\lang1031\langfe1031\langnp1031\insrsid11812474\charrsid11812474 residing at
+\par }{\b\fs22\lang1031\langfe1031\langnp1031\insrsid11812474\charrsid11812474
+\par }{\fs22\lang1031\langfe1031\langnp1031\insrsid11812474\charrsid11812474 Neuer Hoeltigbaum 22 - 32 ,
+\par }{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 22143 Hamburg
+\par GERMANY
+\par }\pard \qr \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 - Steinberg -
+\par }\pard \ql \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 {\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 and
+\par }\pard \ql \li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \qc \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 ..........................................
+\par }\pard \ql \li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 residing at
+\par ...............................
+\par ...............................
+\par ...............................
+\par }\pard \qr \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 - Licensee- }{\fs22\insrsid11812474
+\par }\pard \ql \li0\ri0\nowidctlpar\tx709\faauto\rin0\lin0\itap0 {\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \fi-709\li709\ri0\nowidctlpar\tx709\faauto\rin0\lin709\itap0 {\b\caps\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par \'a7 1\tab }{\b\caps\fs22\insrsid11812474 Object of the Agreement
+\par }{\fs22\insrsid11812474
+\par {\pntext\pard\plain\f36\fs22\lang1033\langfe1031\langnp1033 \hich\af36\dbch\af0\loch\f36 1.\tab}}\pard \ql \fi-705\li705\ri0\nowidctlpar\tx705{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnf36\pnstart1\pnindent360 {\pntxta .}}
+\faauto\ls1\rin0\lin705\itap0\pararsid11812474 {\fs22\insrsid11812474 The object of this agreement consists of the Steinberg VST PlugIn Software Development Kit }{\b\fs22\ul\insrsid11812474 version 2.4,}{\fs22\insrsid11812474
+ comprising of documentation, example code, and several VST PlugIn examples. These are described hereinafter as the }{\b\fs22\insrsid11812474 "Licensed Software Developer Kit"}{\fs22\insrsid11812474 .
+\par }\pard \ql \fi-709\li709\ri0\nowidctlpar\tx709\faauto\rin0\lin709\itap0 {\fs22\insrsid11812474 2.\tab Steinberg is the holder of all copyrights, rights of ownership, and other rights concerning the Licensed Software Developer Kit.\line
+\par }\pard \ql \fi-709\li709\ri4\nowidctlpar\tx709\faauto\rin4\lin709\itap0 {\fs22\insrsid11812474 3.\tab The }{\b\fs22\insrsid11812474 Licensed Software Developer Kit}{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 contains information about
+\par {\pntext\pard\plain\f3\fs22\lang2057\langfe1031\langnp2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ql \fi-360\li1068\ri4\nowidctlpar\tx1068\tx9440{\*\pn \pnlvlblt\ilvl0\ls2\pnrnot0\pnf3\pnindent360 {\pntxtb \'b7}}
+\faauto\ls2\rin4\lin1068\itap0\pararsid11812474 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 how to develop a VST PlugIn, and
+\par {\pntext\pard\plain\f3\fs22\lang2057\langfe1031\langnp2057 \loch\af3\dbch\af0\hich\f3 \'b7\tab}how to extend an application so that it can host VST PlugIns, that are developed under the VST PlugIn Specification, either by Steinberg or any Third-Parties.
+
+\par }\pard \ql \li708\ri4\nowidctlpar\tx9440\faauto\rin4\lin708\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par Currently the following computer platforms are supported:
+\par }\pard \qj \li708\ri4\nowidctlpar\tx9440\faauto\rin4\lin708\itap0\pararsid11812474 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 - Apple Macintosh }{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474\charrsid7554886 Computers under the Mac OS}{
+\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 9.x and Mac OS10.x}{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474\charrsid7554886 ,
+\par - }{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Windows 95/98/2000}{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474\charrsid7554886 and }{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Windows XP (32 and 64bit)}{
+\fs22\lang2057\langfe1031\langnp2057\insrsid11812474\charrsid7554886
+\par }\pard \ql \li0\ri0\nowidctlpar\tx709\faauto\rin0\lin0\itap0 {\b\caps\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 \page \'a7 2\tab Granting of Rights\tab
+\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \fi-709\li709\ri0\nowidctlpar\faauto\rin0\lin709\itap0 {\fs22\insrsid11812474 1.\tab
+Steinberg hereby grants to the Licensee a non-exclusive, worldwide, nontransferable license during the term of this agreement to use the VST PlugIn Interface Technology solely:
+\par {\pntext\pard\plain\f36\fs22\lang1033\langfe1031\langnp1033 \hich\af36\dbch\af0\loch\f36 (i)\tab}}\pard \ql \fi-720\li1428\ri0\nowidctlpar\tx1428{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pnlcrm\pnf36\pnstart1\pnindent360 {\pntxtb (}{\pntxta )}}
+\faauto\ls3\rin0\lin1428\itap0\pararsid11812474 {\fs22\insrsid11812474 for the development of VST PlugIns and/or for the development of an application that can host VST PlugIns,
+\par }\pard \ql \li708\ri0\nowidctlpar{\*\pn \pnlvlcont\ilvl12\ls0\pnrnot0\pndec\pnf36\pnstart1 }\faauto\ilvl12\rin0\lin708\itap0\pararsid11812474 {\fs22\insrsid11812474
+\par {\pntext\pard\plain\f36\fs22\lang1033\langfe1031\langnp1033 \hich\af36\dbch\af0\loch\f36 (ii)\tab}}\pard \ql \fi-720\li1428\ri0\nowidctlpar\tx1428{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pnlcrm\pnf36\pnstart1\pnindent360 {\pntxtb (}{\pntxta )}}
+\faauto\ls3\rin0\lin1428\itap0\pararsid11812474 {\fs22\insrsid11812474 to publish a product under his own name that is using parts or all of the Licensed Software Developer Kit.
+\par }\pard \ql \li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\fs22\insrsid11812474
+\par {\pntext\pard\plain\f36\fs22\lang2057\langfe1031\langnp2057 \hich\af36\dbch\af0\loch\f36 2.\tab}}\pard \ql \fi-705\li705\ri4\nowidctlpar\tx705\tx9440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnf36\pnstart2\pnindent360 {\pntxta .}}
+\faauto\ls4\rin4\lin705\itap0\pararsid11812474 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 The Licensee has no permission to sell, licence, give-away and/or distribute the }{\fs22\insrsid11812474
+VST PlugIn Interface technology or parts of it in anyway, on any medium, including the Internet, to any other person, including sub-licensors of the Licensee or companies where the Licensee has any involvement.}{
+\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 }{\fs22\insrsid11812474 This includes re-working this specification, or reverse-engineering any products based upon this specification. }{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \li0\ri4\nowidctlpar\tx9440{\*\pn \pnlvlcont\ilvl12\ls0\pnrnot0\pndec\pnf36\pnstart1 }\faauto\ilvl12\rin4\lin0\itap0\pararsid11812474 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par {\pntext\pard\plain\f36\fs22\lang2057\langfe1031\langnp2057 \hich\af36\dbch\af0\loch\f36 3.\tab}}\pard \ql \fi-705\li705\ri4\nowidctlpar\tx705\tx9440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnf36\pnstart2\pnindent360 {\pntxta .}}
+\faauto\ls4\rin4\lin705\itap0\pararsid11812474 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+The Licensee recognises the value of the goodwill associated with the mark VST PlugIn Technology and acknowledges that such goodwill exclusively belongs to the benefit of Steinberg and belongs to Steinberg. The Licensee warrants that it will not use the m
+a
+rk VST PlugIn Technology on promotional merchandise, with the exception of demo versions of any of his product making use of this SDK. The Licensee warrants that it will not use the mark VST PlugIn Technology on, or in connection with products obscene, po
+rnographic, excessively violent, or otherwise in poor taste.
+\par }\pard \ql \li0\ri4\nowidctlpar\tx9440{\*\pn \pnlvlcont\ilvl12\ls0\pnrnot0\pndec\pnf36\pnstart1 }\faauto\ilvl12\rin4\lin0\itap0\pararsid11812474 {\fs22\insrsid11812474
+\par {\pntext\pard\plain\f36\fs22\lang1033\langfe1031\langnp1033 \hich\af36\dbch\af0\loch\f36 4.\tab}}\pard \ql \fi-705\li705\ri4\nowidctlpar\tx705\tx9440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnf36\pnstart2\pnindent360 {\pntxta .}}
+\faauto\ls4\rin4\lin705\itap0\pararsid11812474 {\fs22\insrsid11812474
+If the Licensee is developing a product, that is using parts or all of the Licensed Software Developer Kit, and this product is not published under his own name but will be published by anot
+her company, the Licensee is under the obligation to inform the publisher of the resulting product, that he too must be a party to this Licensing Agreement. The publisher has to completely agree with the VST PlugIn SDK Licensing Agreement. If the publishe
+r is not in agreement with these conditions, the publisher is not allowed to distribute this product which is using parts or all of the Licensed Software Developer Kit.
+\par }\pard \ql \li0\ri4\nowidctlpar\tx9440{\*\pn \pnlvlcont\ilvl12\ls0\pnrnot0\pndec\pnf36\pnstart1 }\faauto\ilvl12\rin4\lin0\itap0\pararsid11812474 {\fs22\insrsid11812474
+\par {\pntext\pard\plain\f36\fs22\lang1033\langfe1031\langnp1033 \hich\af36\dbch\af0\loch\f36 5.\tab}}\pard \ql \fi-705\li705\ri4\nowidctlpar\tx705\tx9440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnf36\pnstart2\pnindent360 {\pntxta .}}
+\faauto\ls4\rin4\lin705\itap0\pararsid11812474 {\fs22\insrsid11812474 If the Licensee is planning to publish a product, that is using parts or all of th
+e Licensed Software Developer Kit, the Licensee is under the obligation to inform Steinberg about it by sending the signed \lquote Steinberg VST PlugIns SDK Licensing Agreement\rquote to Steinberg, either by mail, or by fax.
+\par }\pard \qj \li0\ri4\nowidctlpar\tx9440\faauto\rin4\lin0\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\b\caps\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \li0\ri0\nowidctlpar\tx709\faauto\rin0\lin0\itap0 {\b\caps\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par \page \'a7 3\tab Use Of Trademarks
+\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs22\insrsid11812474
+\par }\pard \ql \li705\ri4\nowidctlpar\tx9440\faauto\rin4\lin705\itap0 {\fs22\insrsid11812474 If the Licensee is publishing a product under his own name that is using parts or all of the Licensed Software Developer Kit, the }{
+\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Licensee shall be under an obligation to refer to Steinberg\rquote s copyrights and trademarks in the following way:
+\par }{\fs22\insrsid11812474
+\par a) Steinberg\rquote s copyright notice should be included in the documentation, regardless of the media used to supply the documentation.
+\par Copyright notice:\'94}{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 VST is a trademark of Steinberg Media Technologies GmbH\'94
+\par }{\fs22\insrsid11812474 b) The VST Logo has to appear on packages and promotional material.
+\par }\pard \ql \li709\ri4\nowidctlpar\tx709\tx9440\faauto\rin4\lin709\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 The VST Logo artwork and usage guidelines are part of the }{\b\fs22\insrsid11812474 "Licensed Software Developer Kit" }{
+\fs22\insrsid11812474 and}{\b\fs22\insrsid11812474 }{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 are supplied by Steinberg in digital format.
+\par }\pard \ql \li705\ri4\nowidctlpar\tx9440\faauto\rin4\lin705\itap0 {\fs22\insrsid11812474
+\par c) In the \lquote about box\rquote of the product in one of the following formats:
+\par }\pard \ql \li0\ri4\nowidctlpar\tx993\faauto\rin4\lin0\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 \tab - VST PlugIn Technology by Steinberg,
+\par }\pard \ql \li993\ri4\nowidctlpar\tx9440\faauto\rin4\lin993\itap0\pararsid11812474 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 - VST PlugIn Interface Technology by Ste}{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+inberg Media Technologies GmbH.}{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \li0\ri4\nowidctlpar\tx709\tx9440\faauto\rin4\lin0\itap0 {\b\caps\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 \'a7 4\tab Fees and Royalties
+\par }\pard \ql \fi-9\li0\ri4\nowidctlpar\tx709\tx9440\faauto\rin4\lin0\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \fi-709\li709\ri4\nowidctlpar\tx640\tx9440\faauto\rin4\lin709\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 \tab \tab
+The Licensee shall not obligated to pay to Steinberg any fees or royalties with respect to the VST PlugIn Interface technology.
+\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs22\insrsid11812474 \line
+\par }\pard \ql \li0\ri0\nowidctlpar\tx709\faauto\rin0\lin0\itap0 {\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 \'a7 5\tab }{\b\caps\fs22\insrsid11812474 Liability for Consequential Damages
+\par }\pard \ql \li708\ri0\nowidctlpar\tx709\faauto\rin0\lin708\itap0 {\fs22\insrsid11812474 \line
+Steinberg will not be liable for any consequential, special, incidental, direct or indirect damages of any kind, including the loss of data, damage of data-storage-devices, or any loss or damage to other programs being used, arising out of the use of the
+Licensed Software Developer Kit or any software developed by the Licensee, including any future up-dates.\line \line
+\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\b\fs22\insrsid11812474 \'a7 6\tab }{\b\caps\fs22\insrsid11812474 Product Warranty}{\caps\fs22\insrsid11812474
+\par
+\par }\pard \qj \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 1.\tab Steinberg licences the VST PlugIn Interface Technology on an "AS IS" basis.
+\par }\pard \qj \li720\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin720\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Steinberg makes no warranties, express or implie
+d, including without limitation the implied warranties of merchantability and fitness for a particular purpose, regarding the VST PlugIn Interface technology or operation and use in combination with the Licensee\rquote
+s program. Neither the Licensee, its employees, agents, or Distributors have any right to make any other representation, warranty or promise with respect to the VST PlugIn Interface technology.
+\par }\pard \ql \li729\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin729\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \qj \li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 2.\tab In no event shall Steinberg be liable for incidental or consequential damages
+\par }\pard \qj \li720\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin720\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 arising from the use, or
+ distribution of the VST PlugIn-Interface technology by the Licensee, whether theory of contract, product liability or otherwise.
+\par }\pard \ql \li729\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin729\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 All claims for indemnification for losses by the Licensee itself or by third parties shall be excluded.
+\par }\pard \ql \fi-709\li709\ri0\nowidctlpar\faauto\rin0\lin709\itap0 {\fs22\insrsid11812474
+\par 3.\tab Steinberg may release improved versions of the Licensed Software Developer Kit but offers no commitment whatsoever those releases will occur at anytime or for anybody.
+\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs22\insrsid11812474
+\par
+\par }{\b\caps\fs22\insrsid11812474 \'a7 7\tab Infringement
+\par
+\par }\pard \qj \li708\ri0\nowidctlpar\faauto\rin0\lin708\itap0 {\fs22\insrsid11812474 Steinberg represents and warrants that, as of the date of this Agreement, it is not
+aware of any claim or action alleging that VST, the VST PlugIn Interface Technology, or the content of the }{\b\fs22\insrsid11812474 Licensed Software Developer Kit }{\fs22\insrsid11812474
+infringes any third party intellectual property right. Steinberg, however, disclaims any obligation of defense or ind
+emnify of the Licensee or its customer with respect to any such claim or action, or otherwise arising out of this agreement. Steinberg shall have no liability arising out of any such actual or alleged intellectual property infringement.
+\par The Licensee, however, shall promptly notify Steinberg, in writing, of each such infringement claim of which the Licensee becomes aware.
+\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs22\insrsid11812474
+\par }\pard \ql \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 {\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \fi-20\li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 \'a7 8\tab RELATIONSHIP BETWEEN THE TWO PARTIES
+\par }\pard \qj \li720\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin720\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par Nothing stated in this Agreement will be construed as creating the relationships of joint ventures, partners, principal, agent or whatsoever. The Licensee shall not be entitled to represent Steinberg or to make statements on its behalf.
+\par }\pard \qj \li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par
+\par }\pard \ql \li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 \'a7 9\tab TERM OF THE AGREEMENT
+\par }\pard \ql \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 {\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 1.\tab The Agreement shall run for an unlimited period.
+\par }\pard \ql \li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \qj \li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 2.\tab If the Licensee is in breach of any of its obligations set out in this agreement,
+\par }\pard \qj \li720\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin720\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+Steinberg shall be entitled to terminate this agreement immediately in writing and inform the Licensee verbally about it. In such a case, this license and all the rights granted to the Licensee herein shall immediately cease.}{
+\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs22\insrsid11812474 \line
+\par }\pard \ql \li0\ri0\nowidctlpar\tx709\faauto\rin0\lin0\itap0 {\b\caps\fs22\insrsid11812474 \'a7 10\tab }{\b\caps\fs22\expnd0\expndtw-3\insrsid11812474 Final provisions}{\fs22\insrsid11812474 \line
+\par {\pntext\pard\plain\f36\fs22\lang1033\langfe1031\langnp1033 \hich\af36\dbch\af0\loch\f36 1.\tab}}\pard \ql \fi-705\li705\ri0\nowidctlpar\tx705{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec\pnf36\pnstart1\pnindent360 {\pntxta .}}
+\faauto\ls5\rin0\lin705\itap0\pararsid11812474 {\fs22\insrsid11812474 This agreement and the interpreta\-tion thereof shall be exclusively subject to the laws of the Federal Republic of Germany.
+\par }\pard \ql \li0\ri0\nowidctlpar{\*\pn \pnlvlcont\ilvl12\ls0\pnrnot0\pndec\pnf36\pnstart1 }\faauto\ilvl12\rin0\lin0\itap0\pararsid11812474 {\fs22\insrsid11812474
+\par {\pntext\pard\plain\f36\fs22\lang1033\langfe1031\langnp1033 \hich\af36\dbch\af0\loch\f36 2.\tab}}\pard \ql \fi-705\li705\ri0\nowidctlpar\tx705{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec\pnf36\pnstart1\pnindent360 {\pntxta .}}
+\faauto\ls5\rin0\lin705\itap0\pararsid11812474 {\fs22\insrsid11812474
+The Licensee declares himself to be in agreement with the use of any personal data obtained through this licensing relationship by Steinberg for its own company purposes, and for the purposes of its Company Group, within the meaning of the relevant Data P
+rotection laws.
+\par }\pard \qj \li0\ri0\nowidctlpar{\*\pn \pnlvlcont\ilvl12\ls0\pnrnot0\pndec\pnf36\pnstart1 }\faauto\ilvl12\rin0\lin0\itap0\pararsid11812474 {\fs22\insrsid11812474
+\par {\pntext\pard\plain\f36\fs22\lang1033\langfe1031\langnp1033 \hich\af36\dbch\af0\loch\f36 3.\tab}}\pard \qj \fi-705\li705\ri0\nowidctlpar\tx709{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec\pnf36\pnstart1\pnindent360 {\pntxta .}}
+\faauto\ls5\rin0\lin705\itap0\pararsid11812474 {\fs22\insrsid11812474
+If any one stipulation of this License contract should be or become invalid, completely or in part, this shall not affect the validity of the remaining stipulations. The parties undertake instead to replace the invalid stipulations wit
+h a valid regulation which comes as closely as possible to the purpose originally intended.
+\par }\pard \qj \li0\ri0\nowidctlpar{\*\pn \pnlvlcont\ilvl12\ls0\pnrnot0\pndec\pnf36\pnstart1 }\faauto\ilvl12\rin0\lin0\itap0\pararsid11812474 {\fs22\insrsid11812474
+\par {\pntext\pard\plain\f36\fs22\lang2057\langfe1031\langnp2057 \hich\af36\dbch\af0\loch\f36 4.\tab}}\pard \qj \fi-705\li705\ri4\nowidctlpar\tx705\tx9440{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec\pnf36\pnstart1\pnindent360 {\pntxta .}}
+\faauto\ls5\rin4\lin705\itap0\pararsid11812474 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+Amendments, supplements and notices of termination of this agreement must be made in writing. The rescission of this agreement or an alteration to the requirement of the written form must also be made in writing. Sub\-
+sidiary agreements have not been concluded.
+\par }\pard \qj \li0\ri4\nowidctlpar\tx9440{\*\pn \pnlvlcont\ilvl12\ls0\pnrnot0\pndec\pnf36\pnstart1 }\faauto\ilvl12\rin4\lin0\itap0\pararsid11812474 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par {\pntext\pard\plain\f36\fs22\lang2057\langfe1031\langnp2057 \hich\af36\dbch\af0\loch\f36 5.\tab}}\pard \qj \fi-705\li705\ri4\nowidctlpar\tx720\tx9440{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec\pnf36\pnstart1\pnindent360 {\pntxta .}}
+\faauto\ls5\rin4\lin705\itap0\pararsid11812474 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+Place of jurisdiction for all disputes is Hamburg. In addition, each party can bring an action against the other party at the general place of jurisdiction of the other party.
+\par }\pard \qj \li0\ri4\nowidctlpar\tx9440{\*\pn \pnlvlcont\ilvl12\ls0\pnrnot0\pndec\pnf36\pnstart1 }\faauto\ilvl12\rin4\lin0\itap0\pararsid11812474 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par {\pntext\pard\plain\f36\fs22\lang2057\langfe1031\langnp2057 \hich\af36\dbch\af0\loch\f36 6.\tab}}\pard \qj \fi-705\li705\ri4\nowidctlpar\tx720\tx9440{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec\pnf36\pnstart1\pnindent360 {\pntxta .}}
+\faauto\ls5\rin4\lin705\itap0\pararsid11812474 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 This agreement does not require a specific form (e.g. recording by a notary).
+\par }\pard \qj \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs22\insrsid11812474
+\par }\pard \ql \li0\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin0\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard\plain \s5\ql \li20\ri4\keepn\nowidctlpar\tx720\tx9440\faauto\outlinelevel4\rin4\lin20\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\b\caps\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par
+\par
+\par
+\par
+\par }{\b\caps\fs22\lang1031\langfe1031\langnp1031\insrsid11812474 - Steinberg -
+\par }\pard\plain \ql \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\lang1031\langfe1031\langnp1031\insrsid11812474 Media Technologies GmbH
+\par
+\par }\pard \ql \li20\ri4\nowidctlpar\tx720\tx2835\tx9440\faauto\rin4\lin20\itap0 {\fs22\insrsid11812474\charrsid11812474 By: \tab \tab ..........................................
+\par }{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Printed Signature\tab ..........................................
+\par Title\tab \tab ..........................................
+\par Date executed\tab ..........................................
+\par
+\par }{\fs22\lang1031\langfe1031\langnp1031\insrsid11812474 By: \tab \tab ..........................................
+\par }{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Printed Signature\tab ..........................................
+\par Title\tab \tab ..........................................
+\par Date executed\tab ..........................................
+\par
+\par }{\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par - }{\b\caps\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Licensee}{\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 -
+\par }{\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par By: \tab \tab ..........................................
+\par Printed Signature\tab ..........................................
+\par Title\tab \tab ..........................................
+\par Date executed\tab ..........................................
+\par }\pard \ql \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \li0\ri4\nowidctlpar\faauto\rin4\lin0\itap0 {\fs22\insrsid11812474 \page }{\b\fs22\insrsid11812474 -Licensee- Technical Contact}{\b\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par
+\par }\pard\plain \s6\ql \li0\ri4\keepn\nowidctlpar\tx2835\faauto\outlinelevel5\rin4\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Name:\tab
+-------------------------------------------------------
+\par }\pard\plain \ql \li0\ri4\nowidctlpar\faauto\rin4\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par
+\par }\pard\plain \s6\ql \li0\ri4\keepn\nowidctlpar\tx2835\faauto\outlinelevel5\rin4\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Address:\tab
+-------------------------------------------------------
+\par }\pard\plain \ql \li0\ri4\nowidctlpar\faauto\rin4\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par
+\par }\pard\plain \s6\ql \li0\ri4\keepn\nowidctlpar\tx2835\faauto\outlinelevel5\rin4\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Phone:\tab
+-------------------------------------------------------
+\par }\pard\plain \ql \li0\ri4\nowidctlpar\faauto\rin4\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par
+\par }\pard\plain \s6\ql \li0\ri4\keepn\nowidctlpar\tx2835\faauto\outlinelevel5\rin4\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Fax:\tab
+-------------------------------------------------------
+\par }\pard\plain \ql \li0\ri4\nowidctlpar\faauto\rin4\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par
+\par }\pard\plain \s6\ql \li0\ri4\keepn\nowidctlpar\tx2835\faauto\outlinelevel5\rin4\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474 Email:\tab
+-------------------------------------------------------
+\par }\pard\plain \ql \li0\ri4\nowidctlpar\faauto\rin4\lin0\itap0 \f36\fs24\lang1033\langfe1031\cgrid\langnp1033\langfenp1031 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \ql \li20\ri4\nowidctlpar\tx720\tx9440\faauto\rin4\lin20\itap0 {\fs22\lang2057\langfe1031\langnp2057\insrsid11812474
+\par }\pard \qj \li0\ri0\nowidctlpar\tx709\faauto\rin0\lin0\itap0 {\fs22\insrsid11812474
+\par }}
\ No newline at end of file
diff --git a/doc/gfx/folder.gif b/doc/gfx/folder.gif
new file mode 100644
index 0000000..391cfee
Binary files /dev/null and b/doc/gfx/folder.gif differ
diff --git a/doc/gfx/mac.gif b/doc/gfx/mac.gif
new file mode 100644
index 0000000..cf351cd
Binary files /dev/null and b/doc/gfx/mac.gif differ
diff --git a/doc/gfx/vstpluglogo_small.jpg b/doc/gfx/vstpluglogo_small.jpg
new file mode 100644
index 0000000..b6672e0
Binary files /dev/null and b/doc/gfx/vstpluglogo_small.jpg differ
diff --git a/doc/gfx/win.gif b/doc/gfx/win.gif
new file mode 100644
index 0000000..f114497
Binary files /dev/null and b/doc/gfx/win.gif differ
diff --git a/doc/html/Blocksizechange.gif b/doc/html/Blocksizechange.gif
new file mode 100644
index 0000000..bf5d3f6
Binary files /dev/null and b/doc/html/Blocksizechange.gif differ
diff --git a/doc/html/ControlChanged.gif b/doc/html/ControlChanged.gif
new file mode 100644
index 0000000..363df0d
Binary files /dev/null and b/doc/html/ControlChanged.gif differ
diff --git a/doc/html/IOchange.gif b/doc/html/IOchange.gif
new file mode 100644
index 0000000..7a0e2b7
Binary files /dev/null and b/doc/html/IOchange.gif differ
diff --git a/doc/html/Initialisation.gif b/doc/html/Initialisation.gif
new file mode 100644
index 0000000..eae1940
Binary files /dev/null and b/doc/html/Initialisation.gif differ
diff --git a/doc/html/Offlineprocessing.gif b/doc/html/Offlineprocessing.gif
new file mode 100644
index 0000000..14c8b3b
Binary files /dev/null and b/doc/html/Offlineprocessing.gif differ
diff --git a/doc/html/Sampleratechange.gif b/doc/html/Sampleratechange.gif
new file mode 100644
index 0000000..4d982d7
Binary files /dev/null and b/doc/html/Sampleratechange.gif differ
diff --git a/doc/html/SpeakerarrangementnegotiationforVSTfx.gif b/doc/html/SpeakerarrangementnegotiationforVSTfx.gif
new file mode 100644
index 0000000..5d79765
Binary files /dev/null and b/doc/html/SpeakerarrangementnegotiationforVSTfx.gif differ
diff --git a/doc/html/Termination.gif b/doc/html/Termination.gif
new file mode 100644
index 0000000..b172288
Binary files /dev/null and b/doc/html/Termination.gif differ
diff --git a/doc/html/TurnOff.gif b/doc/html/TurnOff.gif
new file mode 100644
index 0000000..993729f
Binary files /dev/null and b/doc/html/TurnOff.gif differ
diff --git a/doc/html/TurnOn.gif b/doc/html/TurnOn.gif
new file mode 100644
index 0000000..0c1c0fd
Binary files /dev/null and b/doc/html/TurnOn.gif differ
diff --git a/doc/html/aeffect_8h.html b/doc/html/aeffect_8h.html
new file mode 100644
index 0000000..aed8f93
--- /dev/null
+++ b/doc/html/aeffect_8h.html
@@ -0,0 +1,786 @@
+
+
+VST SDK 2.4: aeffect.h File Reference
+
+
+
+
+
+
+
+aeffect.h File Reference #include <string.h>
+#include <stdint.h>
+
+
+Classes
+struct AEffect
+
+struct ERect
+
+Defines
+#define VSTCALLBACK
+
+#define VST_2_1_EXTENSIONS 1
+
+ Version 2.1 extensions (08-06-2000).
+#define VST_2_2_EXTENSIONS 1
+
+ Version 2.2 extensions (08-06-2001).
+#define VST_2_3_EXTENSIONS 1
+
+ Version 2.3 extensions (20-05-2003).
+#define kVstVersion 2400
+
+#define VST_FORCE_DEPRECATED VST_2_4_EXTENSIONS
+
+#define DECLARE_VST_DEPRECATED (identifier) __##identifier##Deprecated
+
+#define VST_64BIT_PLATFORM _WIN64 || __LP64__
+
+#define CCONST (a, b, c, d) ((((VstInt32 )a) << 24) | (((VstInt32 )b) << 16) | (((VstInt32 )c) << 8) | (((VstInt32 )d) << 0))
+
+#define kEffectMagic CCONST ('V', 's', 't', 'P')
+
+Typedefs
+typedef int16_t VstInt16
+
+ 16 bit integer type
+typedef int32_t VstInt32
+
+ 32 bit integer type
+typedef int64_t VstInt64
+
+ 64 bit integer type
+typedef VstInt32 VstIntPtr
+
+ platform-dependent integer type, same size as pointer
+Enumerations
+enum VstAEffectFlags {
+ effFlagsHasEditor = 1 << 0,
+effFlagsCanReplacing = 1 << 4,
+effFlagsProgramChunks = 1 << 5,
+effFlagsIsSynth = 1 << 8,
+
+ effFlagsNoSoundInStop = 1 << 9,
+effFlagsCanDoubleReplacing = 1 << 12,
+effFlagsHasClip = 1 << 1,
+effFlagsHasVu = 1 << 2,
+
+ effFlagsCanMono = 1 << 3,
+effFlagsExtIsAsync = 1 << 10,
+effFlagsExtHasBuffer = 1 << 11
+
+ }
+
+enum AEffectOpcodes {
+ effOpen = 0,
+effClose ,
+effSetProgram ,
+effGetProgram ,
+
+ effSetProgramName ,
+effGetProgramName ,
+effGetParamLabel ,
+effGetParamDisplay ,
+
+ effGetParamName ,
+effGetVu ,
+effSetSampleRate ,
+effSetBlockSize ,
+
+ effMainsChanged ,
+effEditGetRect ,
+effEditOpen ,
+effEditClose ,
+
+ effEditDraw ,
+effEditMouse ,
+effEditKey ,
+effEditIdle ,
+
+ effEditTop ,
+effEditSleep ,
+effIdentify ,
+effGetChunk ,
+
+ effSetChunk ,
+effNumOpcodes
+
+ }
+
+enum AudioMasterOpcodes {
+ audioMasterAutomate = 0,
+audioMasterVersion ,
+audioMasterCurrentId ,
+audioMasterIdle ,
+
+ audioMasterPinConnected
+
+ }
+
+enum VstStringConstants {
+ kVstMaxProgNameLen = 24,
+kVstMaxParamStrLen = 8,
+kVstMaxVendorStrLen = 64,
+kVstMaxProductStrLen = 64,
+
+ kVstMaxEffectNameLen = 32
+
+ }
+
+Functions
+char * vst_strncpy (char *dst, const char *src, size_t maxLen)
+
+char * vst_strncat (char *dst, const char *src, size_t maxLen)
+
+template<class T>
+T * FromVstPtr (VstIntPtr &arg)
+
+template<class T>
+VstIntPtr ToVstPtr (T *ptr)
+
+
+Define Documentation
+
+
+
+
+
+
+Four Character Constant (for AEffect->uniqueID)
+
+
+
+
+
+
+
+ #define DECLARE_VST_DEPRECATED
+ (
+ identifier
+
+ )
+ __##identifier##Deprecated
+
+
+
+
+
+
+Declares identifier as deprecated.
+
+
+
+
+
+
+
+ #define kEffectMagic CCONST ('V', 's', 't', 'P')
+
+
+
+
+
+
+
+
+
+
+ #define kVstVersion 2400
+
+
+
+
+
+
+Current VST Version
+
+
+
+
+
+
+
+ #define VST_2_1_EXTENSIONS 1
+
+
+
+
+
+
+Version 2.1 extensions (08-06-2000).
+
+Define SDK Version (you can generate different versions (from 2.0 to 2.4) of this SDK by setting the unwanted extensions to 0).
+
+
+
+
+
+
+
+ #define VST_2_2_EXTENSIONS 1
+
+
+
+
+
+
+Version 2.2 extensions (08-06-2001).
+
+
+
+
+
+
+
+
+
+ #define VST_2_3_EXTENSIONS 1
+
+
+
+
+
+
+Version 2.3 extensions (20-05-2003).
+
+
+
+
+
+
+
+
+
+ #define VST_64BIT_PLATFORM _WIN64 || __LP64__
+
+
+
+
+
+
+Define for 64 Bit Platform.
+
+
+
+
+
+
+
+ #define VST_FORCE_DEPRECATED VST_2_4_EXTENSIONS
+
+
+
+
+
+
+Disable for Hosts to serve Plug-ins below VST 2.4
+
+
+
+
+
+
+
+ #define VSTCALLBACK
+
+
+
+
+
+
Typedef Documentation
+
+
+
+
+
+
+16 bit integer type
+
+
+
+
+
+
+
+
+
+
+32 bit integer type
+
+
+
+
+
+
+
+
+
+
+64 bit integer type
+
+
+
+
+
+
+
+
+
+
+platform-dependent integer type, same size as pointer
+
+
+
+
+
Enumeration Type Documentation
+
+
+
+
+
+
+Basic dispatcher Opcodes (Host to Plug-in)
Enumerator:
+
+
+
+
+
+
+
+
+
+
+
+Basic dispatcher Opcodes (Plug-in to Host)
Enumerator:
+
+
+
+
+
+
+
+
+
+
+
+AEffect flags
Enumerator:
+
+ effFlagsHasEditor
+set if the plug-in provides a custom editor
+ effFlagsCanReplacing
+supports replacing process mode (which should the default mode in VST 2.4)
+ effFlagsProgramChunks
+program data is handled in formatless chunks
+ effFlagsIsSynth
+plug-in is a synth (VSTi), Host may assign mixer channels for its outputs
+ effFlagsNoSoundInStop
+plug-in does not produce sound when input is all silence
+ effFlagsCanDoubleReplacing
+plug-in supports double precision processing
+ effFlagsHasClip
+Deprecated: deprecated in VST 2.4
+
+ effFlagsHasVu
+Deprecated: deprecated in VST 2.4
+
+ effFlagsCanMono
+Deprecated: deprecated in VST 2.4
+
+ effFlagsExtIsAsync
+Deprecated: deprecated in VST 2.4
+
+ effFlagsExtHasBuffer
+Deprecated: deprecated in VST 2.4
+
+
+
+
+
+
+
+
+
+
+
+
+String length limits (in characters excl. 0 byte)
Enumerator:
+
+
+
+
+
+
Function Documentation
+
+
+
+
+template<class T>
+
+
+ T* FromVstPtr
+ (
+ VstIntPtr &
+ arg
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+template<class T>
+
+
+ VstIntPtr ToVstPtr
+ (
+ T *
+ ptr
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+ char* vst_strncat
+ (
+ char *
+ dst ,
+
+
+
+
+ const char *
+ src ,
+
+
+
+
+ size_t
+ maxLen
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+String concatenation taking care of null terminator.
+
+
+
+
+
+
+
+ char* vst_strncpy
+ (
+ char *
+ dst ,
+
+
+
+
+ const char *
+ src ,
+
+
+
+
+ size_t
+ maxLen
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+String copy taking care of null terminator.
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/aeffectx_8h.html b/doc/html/aeffectx_8h.html
new file mode 100644
index 0000000..20b602e
--- /dev/null
+++ b/doc/html/aeffectx_8h.html
@@ -0,0 +1,2072 @@
+
+
+VST SDK 2.4: aeffectx.h File Reference
+
+
+
+
+
+
+
+aeffectx.h File Reference #include "aeffect.h "
+
+
+Classes
+struct VstEvent
+
+struct VstEvents
+
+struct VstMidiEvent
+
+struct VstMidiSysexEvent
+
+struct VstTimeInfo
+
+struct VstVariableIo
+
+struct VstParameterProperties
+
+struct VstPinProperties
+
+struct MidiProgramName
+
+struct MidiProgramCategory
+
+struct MidiKeyName
+
+struct VstSpeakerProperties
+
+struct VstSpeakerArrangement
+
+struct VstOfflineTask
+
+struct VstAudioFile
+
+struct VstAudioFileMarker
+
+struct VstWindow
+
+struct VstKeyCode
+
+struct VstFileType
+
+struct VstFileSelect
+
+struct VstPatchChunkInfo
+
+Enumerations
+enum Vst2StringConstants {
+ kVstMaxNameLen = 64,
+kVstMaxLabelLen = 64,
+kVstMaxShortLabelLen = 8,
+kVstMaxCategLabelLen = 24,
+
+ kVstMaxFileNameLen = 100
+
+ }
+
+enum VstEventTypes {
+ kVstMidiType = 1,
+kVstAudioType ,
+kVstVideoType ,
+kVstParameterType ,
+
+ kVstTriggerType ,
+kVstSysExType
+
+ }
+
+enum VstMidiEventFlags { kVstMidiEventIsRealtime = 1 << 0
+ }
+
+enum VstTimeInfoFlags {
+ kVstTransportChanged = 1,
+kVstTransportPlaying = 1 << 1,
+kVstTransportCycleActive = 1 << 2,
+kVstTransportRecording = 1 << 3,
+
+ kVstAutomationWriting = 1 << 6,
+kVstAutomationReading = 1 << 7,
+kVstNanosValid = 1 << 8,
+kVstPpqPosValid = 1 << 9,
+
+ kVstTempoValid = 1 << 10,
+kVstBarsValid = 1 << 11,
+kVstCyclePosValid = 1 << 12,
+kVstTimeSigValid = 1 << 13,
+
+ kVstSmpteValid = 1 << 14,
+kVstClockValid = 1 << 15
+
+ }
+
+enum VstSmpteFrameRate {
+ kVstSmpte24fps = 0,
+kVstSmpte25fps = 1,
+kVstSmpte2997fps = 2,
+kVstSmpte30fps = 3,
+
+ kVstSmpte2997dfps = 4,
+kVstSmpte30dfps = 5,
+kVstSmpteFilm16mm = 6,
+kVstSmpteFilm35mm = 7,
+
+ kVstSmpte239fps = 10,
+kVstSmpte249fps = 11,
+kVstSmpte599fps = 12,
+kVstSmpte60fps = 13
+
+ }
+
+enum VstHostLanguage {
+ kVstLangEnglish = 1,
+kVstLangGerman ,
+kVstLangFrench ,
+kVstLangItalian ,
+
+ kVstLangSpanish ,
+kVstLangJapanese
+
+ }
+
+enum AudioMasterOpcodesX {
+ audioMasterWantMidi = audioMasterPinConnected + 2,
+audioMasterGetTime ,
+audioMasterProcessEvents ,
+audioMasterSetTime ,
+
+ audioMasterTempoAt ,
+audioMasterGetNumAutomatableParameters ,
+audioMasterGetParameterQuantization ,
+audioMasterIOChanged ,
+
+ audioMasterNeedIdle ,
+audioMasterSizeWindow ,
+audioMasterGetSampleRate ,
+audioMasterGetBlockSize ,
+
+ audioMasterGetInputLatency ,
+audioMasterGetOutputLatency ,
+audioMasterGetPreviousPlug ,
+audioMasterGetNextPlug ,
+
+ audioMasterWillReplaceOrAccumulate ,
+audioMasterGetCurrentProcessLevel ,
+audioMasterGetAutomationState ,
+audioMasterOfflineStart ,
+
+ audioMasterOfflineRead ,
+audioMasterOfflineWrite ,
+audioMasterOfflineGetCurrentPass ,
+audioMasterOfflineGetCurrentMetaPass ,
+
+ audioMasterSetOutputSampleRate ,
+audioMasterGetOutputSpeakerArrangement ,
+audioMasterGetVendorString ,
+audioMasterGetProductString ,
+
+ audioMasterGetVendorVersion ,
+audioMasterVendorSpecific ,
+audioMasterSetIcon ,
+audioMasterCanDo ,
+
+ audioMasterGetLanguage ,
+audioMasterOpenWindow ,
+audioMasterCloseWindow ,
+audioMasterGetDirectory ,
+
+ audioMasterUpdateDisplay ,
+audioMasterBeginEdit ,
+audioMasterEndEdit ,
+audioMasterOpenFileSelector ,
+
+ audioMasterCloseFileSelector ,
+audioMasterEditFile ,
+audioMasterGetChunkFile ,
+audioMasterGetInputSpeakerArrangement
+
+ }
+
+enum AEffectXOpcodes {
+ effProcessEvents = effSetChunk + 1,
+effCanBeAutomated ,
+effString2Parameter ,
+effGetNumProgramCategories ,
+
+ effGetProgramNameIndexed ,
+effCopyProgram ,
+effConnectInput ,
+effConnectOutput ,
+
+ effGetInputProperties ,
+effGetOutputProperties ,
+effGetPlugCategory ,
+effGetCurrentPosition ,
+
+ effGetDestinationBuffer ,
+effOfflineNotify ,
+effOfflinePrepare ,
+effOfflineRun ,
+
+ effProcessVarIo ,
+effSetSpeakerArrangement ,
+effSetBlockSizeAndSampleRate ,
+effSetBypass ,
+
+ effGetEffectName ,
+effGetErrorText ,
+effGetVendorString ,
+effGetProductString ,
+
+ effGetVendorVersion ,
+effVendorSpecific ,
+effCanDo ,
+effGetTailSize ,
+
+ effIdle ,
+effGetIcon ,
+effSetViewPosition ,
+effGetParameterProperties ,
+
+ effKeysRequired ,
+effGetVstVersion ,
+effEditKeyDown ,
+effEditKeyUp ,
+
+ effSetEditKnobMode ,
+effGetMidiProgramName ,
+effGetCurrentMidiProgram ,
+effGetMidiProgramCategory ,
+
+ effHasMidiProgramsChanged ,
+effGetMidiKeyName ,
+effBeginSetProgram ,
+effEndSetProgram ,
+
+ effGetSpeakerArrangement ,
+effShellGetNextPlugin ,
+effStartProcess ,
+effStopProcess ,
+
+ effSetTotalSampleToProcess ,
+effSetPanLaw ,
+effBeginLoadBank ,
+effBeginLoadProgram ,
+
+ effSetProcessPrecision ,
+effGetNumMidiInputChannels ,
+effGetNumMidiOutputChannels
+
+ }
+
+enum VstProcessPrecision { kVstProcessPrecision32 = 0,
+kVstProcessPrecision64
+ }
+
+enum VstParameterFlags {
+ kVstParameterIsSwitch = 1 << 0,
+kVstParameterUsesIntegerMinMax = 1 << 1,
+kVstParameterUsesFloatStep = 1 << 2,
+kVstParameterUsesIntStep = 1 << 3,
+
+ kVstParameterSupportsDisplayIndex = 1 << 4,
+kVstParameterSupportsDisplayCategory = 1 << 5,
+kVstParameterCanRamp = 1 << 6
+
+ }
+
+enum VstPinPropertiesFlags { kVstPinIsActive = 1 << 0,
+kVstPinIsStereo = 1 << 1,
+kVstPinUseSpeaker = 1 << 2
+ }
+
+enum VstPlugCategory {
+ kPlugCategUnknown = 0,
+kPlugCategEffect ,
+kPlugCategSynth ,
+kPlugCategAnalysis ,
+
+ kPlugCategMastering ,
+kPlugCategSpacializer ,
+kPlugCategRoomFx ,
+kPlugSurroundFx ,
+
+ kPlugCategRestoration ,
+kPlugCategOfflineProcess ,
+kPlugCategShell ,
+kPlugCategGenerator ,
+
+ kPlugCategMaxCount
+
+ }
+
+enum VstMidiProgramNameFlags { kMidiIsOmni = 1
+ }
+
+enum VstSpeakerType {
+ kSpeakerUndefined = 0x7fffffff,
+kSpeakerM = 0,
+kSpeakerL ,
+kSpeakerR ,
+
+ kSpeakerC ,
+kSpeakerLfe ,
+kSpeakerLs ,
+kSpeakerRs ,
+
+ kSpeakerLc ,
+kSpeakerRc ,
+kSpeakerS ,
+kSpeakerCs = kSpeakerS,
+
+ kSpeakerSl ,
+kSpeakerSr ,
+kSpeakerTm ,
+kSpeakerTfl ,
+
+ kSpeakerTfc ,
+kSpeakerTfr ,
+kSpeakerTrl ,
+kSpeakerTrc ,
+
+ kSpeakerTrr ,
+kSpeakerLfe2
+
+ }
+
+enum VstUserSpeakerType {
+ kSpeakerU32 = -32,
+kSpeakerU31 ,
+kSpeakerU30 ,
+kSpeakerU29 ,
+
+ kSpeakerU28 ,
+kSpeakerU27 ,
+kSpeakerU26 ,
+kSpeakerU25 ,
+
+ kSpeakerU24 ,
+kSpeakerU23 ,
+kSpeakerU22 ,
+kSpeakerU21 ,
+
+ kSpeakerU20 ,
+kSpeakerU19 ,
+kSpeakerU18 ,
+kSpeakerU17 ,
+
+ kSpeakerU16 ,
+kSpeakerU15 ,
+kSpeakerU14 ,
+kSpeakerU13 ,
+
+ kSpeakerU12 ,
+kSpeakerU11 ,
+kSpeakerU10 ,
+kSpeakerU9 ,
+
+ kSpeakerU8 ,
+kSpeakerU7 ,
+kSpeakerU6 ,
+kSpeakerU5 ,
+
+ kSpeakerU4 ,
+kSpeakerU3 ,
+kSpeakerU2 ,
+kSpeakerU1
+
+ }
+
+enum VstSpeakerArrangementType {
+ kSpeakerArrUserDefined = -2,
+kSpeakerArrEmpty = -1,
+kSpeakerArrMono = 0,
+kSpeakerArrStereo ,
+
+ kSpeakerArrStereoSurround ,
+kSpeakerArrStereoCenter ,
+kSpeakerArrStereoSide ,
+kSpeakerArrStereoCLfe ,
+
+ kSpeakerArr30Cine ,
+kSpeakerArr30Music ,
+kSpeakerArr31Cine ,
+kSpeakerArr31Music ,
+
+ kSpeakerArr40Cine ,
+kSpeakerArr40Music ,
+kSpeakerArr41Cine ,
+kSpeakerArr41Music ,
+
+ kSpeakerArr50 ,
+kSpeakerArr51 ,
+kSpeakerArr60Cine ,
+kSpeakerArr60Music ,
+
+ kSpeakerArr61Cine ,
+kSpeakerArr61Music ,
+kSpeakerArr70Cine ,
+kSpeakerArr70Music ,
+
+ kSpeakerArr71Cine ,
+kSpeakerArr71Music ,
+kSpeakerArr80Cine ,
+kSpeakerArr80Music ,
+
+ kSpeakerArr81Cine ,
+kSpeakerArr81Music ,
+kSpeakerArr102 ,
+kNumSpeakerArr
+
+ }
+
+enum VstOfflineTaskFlags {
+ kVstOfflineUnvalidParameter = 1 << 0,
+kVstOfflineNewFile = 1 << 1,
+kVstOfflinePlugError = 1 << 10,
+kVstOfflineInterleavedAudio = 1 << 11,
+
+ kVstOfflineTempOutputFile = 1 << 12,
+kVstOfflineFloatOutputFile = 1 << 13,
+kVstOfflineRandomWrite = 1 << 14,
+kVstOfflineStretch = 1 << 15,
+
+ kVstOfflineNoThread = 1 << 16
+
+ }
+
+enum VstOfflineOption {
+ kVstOfflineAudio ,
+kVstOfflinePeaks ,
+kVstOfflineParameter ,
+kVstOfflineMarker ,
+
+ kVstOfflineCursor ,
+kVstOfflineSelection ,
+kVstOfflineQueryFiles
+
+ }
+
+enum VstAudioFileFlags {
+ kVstOfflineReadOnly = 1 << 0,
+kVstOfflineNoRateConversion = 1 << 1,
+kVstOfflineNoChannelChange = 1 << 2,
+kVstOfflineCanProcessSelection = 1 << 10,
+
+ kVstOfflineNoCrossfade = 1 << 11,
+kVstOfflineWantRead = 1 << 12,
+kVstOfflineWantWrite = 1 << 13,
+kVstOfflineWantWriteMarker = 1 << 14,
+
+ kVstOfflineWantMoveCursor = 1 << 15,
+kVstOfflineWantSelect = 1 << 16
+
+ }
+
+enum VstVirtualKey {
+ VKEY_BACK = 1,
+VKEY_TAB ,
+VKEY_CLEAR ,
+VKEY_RETURN ,
+
+ VKEY_PAUSE ,
+VKEY_ESCAPE ,
+VKEY_SPACE ,
+VKEY_NEXT ,
+
+ VKEY_END ,
+VKEY_HOME ,
+VKEY_LEFT ,
+VKEY_UP ,
+
+ VKEY_RIGHT ,
+VKEY_DOWN ,
+VKEY_PAGEUP ,
+VKEY_PAGEDOWN ,
+
+ VKEY_SELECT ,
+VKEY_PRINT ,
+VKEY_ENTER ,
+VKEY_SNAPSHOT ,
+
+ VKEY_INSERT ,
+VKEY_DELETE ,
+VKEY_HELP ,
+VKEY_NUMPAD0 ,
+
+ VKEY_NUMPAD1 ,
+VKEY_NUMPAD2 ,
+VKEY_NUMPAD3 ,
+VKEY_NUMPAD4 ,
+
+ VKEY_NUMPAD5 ,
+VKEY_NUMPAD6 ,
+VKEY_NUMPAD7 ,
+VKEY_NUMPAD8 ,
+
+ VKEY_NUMPAD9 ,
+VKEY_MULTIPLY ,
+VKEY_ADD ,
+VKEY_SEPARATOR ,
+
+ VKEY_SUBTRACT ,
+VKEY_DECIMAL ,
+VKEY_DIVIDE ,
+VKEY_F1 ,
+
+ VKEY_F2 ,
+VKEY_F3 ,
+VKEY_F4 ,
+VKEY_F5 ,
+
+ VKEY_F6 ,
+VKEY_F7 ,
+VKEY_F8 ,
+VKEY_F9 ,
+
+ VKEY_F10 ,
+VKEY_F11 ,
+VKEY_F12 ,
+VKEY_NUMLOCK ,
+
+ VKEY_SCROLL ,
+VKEY_SHIFT ,
+VKEY_CONTROL ,
+VKEY_ALT ,
+
+ VKEY_EQUALS
+
+ }
+
+enum VstModifierKey { MODIFIER_SHIFT = 1<<0,
+MODIFIER_ALTERNATE = 1<<1,
+MODIFIER_COMMAND = 1<<2,
+MODIFIER_CONTROL = 1<<3
+ }
+
+enum VstFileSelectCommand { kVstFileLoad = 0,
+kVstFileSave ,
+kVstMultipleFilesLoad ,
+kVstDirectorySelect
+ }
+
+enum VstFileSelectType { kVstFileType = 0
+ }
+
+enum VstPanLawType { kLinearPanLaw = 0,
+kEqualPowerPanLaw
+ }
+
+enum VstProcessLevels {
+ kVstProcessLevelUnknown = 0,
+kVstProcessLevelUser ,
+kVstProcessLevelRealtime ,
+kVstProcessLevelPrefetch ,
+
+ kVstProcessLevelOffline
+
+ }
+
+enum VstAutomationStates {
+ kVstAutomationUnsupported = 0,
+kVstAutomationOff ,
+kVstAutomationRead ,
+kVstAutomationWrite ,
+
+ kVstAutomationReadWrite
+
+ }
+
+
+Enumeration Type Documentation
+
+
+
+
+
+
+VST 2.x dispatcher Opcodes (Host to Plug-in). Extension of AEffectOpcodes
Enumerator:
+
+ effProcessEvents
+[ptr]: VstEvents *
+
+
See also: AudioEffectX::processEvents
+
+ effCanBeAutomated
+[index]: parameter index [return value]: 1=true, 0=false
+
+
See also: AudioEffectX::canParameterBeAutomated
+
+ effString2Parameter
+[index]: parameter index [ptr]: parameter string [return value]: true for success
+
+
See also: AudioEffectX::string2parameter
+
+ effGetNumProgramCategories
+Deprecated: deprecated in VST 2.4
+
+ effGetProgramNameIndexed
+[index]: program index [ptr]: buffer for program name, limited to kVstMaxProgNameLen [return value]: true for success
+
+
See also: AudioEffectX::getProgramNameIndexed
+
+ effCopyProgram
+Deprecated: deprecated in VST 2.4
+
+ effConnectInput
+Deprecated: deprecated in VST 2.4
+
+ effConnectOutput
+Deprecated: deprecated in VST 2.4
+
+ effGetInputProperties
+[index]: input index [ptr]: VstPinProperties * [return value]: 1 if supported
+
+
See also: AudioEffectX::getInputProperties
+
+ effGetOutputProperties
+[index]: output index [ptr]: VstPinProperties * [return value]: 1 if supported
+
+
See also: AudioEffectX::getOutputProperties
+
+ effGetPlugCategory
+[return value]: category
+
+
See also: VstPlugCategory
+AudioEffectX::getPlugCategory
+
+ effGetCurrentPosition
+Deprecated: deprecated in VST 2.4
+
+ effGetDestinationBuffer
+Deprecated: deprecated in VST 2.4
+
+ effOfflineNotify
+[ptr]: VstAudioFile array [value]: count [index]: start flag
+
+
See also: AudioEffectX::offlineNotify
+
+ effOfflinePrepare
+[ptr]: VstOfflineTask array [value]: count
+
+
See also: AudioEffectX::offlinePrepare
+
+ effOfflineRun
+[ptr]: VstOfflineTask array [value]: count
+
+
See also: AudioEffectX::offlineRun
+
+ effProcessVarIo
+[ptr]: VstVariableIo *
+
+
See also: AudioEffectX::processVariableIo
+
+ effSetSpeakerArrangement
+[value]: input VstSpeakerArrangement * [ptr]: output VstSpeakerArrangement *
+
+
See also: AudioEffectX::setSpeakerArrangement
+
+ effSetBlockSizeAndSampleRate
+Deprecated: deprecated in VST 2.4
+
+ effSetBypass
+[value]: 1 = bypass, 0 = no bypass
+
+
See also: AudioEffectX::setBypass
+
+ effGetEffectName
+[ptr]: buffer for effect name, limited to kVstMaxEffectNameLen
+
+
See also: AudioEffectX::getEffectName
+
+ effGetErrorText
+Deprecated: deprecated in VST 2.4
+
+ effGetVendorString
+[ptr]: buffer for effect vendor string, limited to kVstMaxVendorStrLen
+
+
See also: AudioEffectX::getVendorString
+
+ effGetProductString
+[ptr]: buffer for effect vendor string, limited to kVstMaxProductStrLen
+
+
See also: AudioEffectX::getProductString
+
+ effGetVendorVersion
+[return value]: vendor-specific version
+
+
See also: AudioEffectX::getVendorVersion
+
+ effVendorSpecific
+no definition, vendor specific handling
+
+
See also: AudioEffectX::vendorSpecific
+
+ effCanDo
+[ptr]: "can do" string [return value]: 0: "don't know" -1: "no" 1: "yes"
+
+
See also: AudioEffectX::canDo
+
+ effGetTailSize
+[return value]: tail size (for example the reverb time of a reverb plug-in); 0 is default (return 1 for 'no tail')
+ effIdle
+Deprecated: deprecated in VST 2.4
+
+ effGetIcon
+Deprecated: deprecated in VST 2.4
+
+ effSetViewPosition
+Deprecated: deprecated in VST 2.4
+
+ effGetParameterProperties
+[index]: parameter index [ptr]: VstParameterProperties * [return value]: 1 if supported
+
+
See also: AudioEffectX::getParameterProperties
+
+ effKeysRequired
+Deprecated: deprecated in VST 2.4
+
+ effGetVstVersion
+[return value]: VST version
+
+
See also: AudioEffectX::getVstVersion
+
+ effEditKeyDown
+[index]: ASCII character [value]: virtual key [opt]: modifiers [return value]: 1 if key used
+
+
See also: AEffEditor::onKeyDown
+
+ effEditKeyUp
+[index]: ASCII character [value]: virtual key [opt]: modifiers [return value]: 1 if key used
+
+
See also: AEffEditor::onKeyUp
+
+ effSetEditKnobMode
+[value]: knob mode 0: circular, 1: circular relativ, 2: linear (CKnobMode in VSTGUI)
+
+
See also: AEffEditor::setKnobMode
+
+ effGetMidiProgramName
+[index]: MIDI channel [ptr]: MidiProgramName * [return value]: number of used programs, 0 if unsupported
+
+
See also: AudioEffectX::getMidiProgramName
+
+ effGetCurrentMidiProgram
+[index]: MIDI channel [ptr]: MidiProgramName * [return value]: index of current program
+
+
See also: AudioEffectX::getCurrentMidiProgram
+
+ effGetMidiProgramCategory
+[index]: MIDI channel [ptr]: MidiProgramCategory * [return value]: number of used categories, 0 if unsupported
+
+
See also: AudioEffectX::getMidiProgramCategory
+
+ effHasMidiProgramsChanged
+[index]: MIDI channel [return value]: 1 if the MidiProgramName(s) or MidiKeyName(s) have changed
+
+
See also: AudioEffectX::hasMidiProgramsChanged
+
+ effGetMidiKeyName
+[index]: MIDI channel [ptr]: MidiKeyName * [return value]: true if supported, false otherwise
+
+
See also: AudioEffectX::getMidiKeyName
+
+ effBeginSetProgram
+no arguments
+
+
See also: AudioEffectX::beginSetProgram
+
+ effEndSetProgram
+no arguments
+
+
See also: AudioEffectX::endSetProgram
+
+ effGetSpeakerArrangement
+[value]: input VstSpeakerArrangement * [ptr]: output VstSpeakerArrangement *
+
+
See also: AudioEffectX::getSpeakerArrangement
+
+ effShellGetNextPlugin
+[ptr]: buffer for plug-in name, limited to kVstMaxProductStrLen [return value]: next plugin's uniqueID
+
+
See also: AudioEffectX::getNextShellPlugin
+
+ effStartProcess
+no arguments
+
+
See also: AudioEffectX::startProcess
+
+ effStopProcess
+no arguments
+
+
See also: AudioEffectX::stopProcess
+
+ effSetTotalSampleToProcess
+[value]: number of samples to process, offline only!
+
+
See also: AudioEffectX::setTotalSampleToProcess
+
+ effSetPanLaw
+[value]: pan law [opt]: gain
+
+
See also: VstPanLawType
+AudioEffectX::setPanLaw
+
+ effBeginLoadBank
+[ptr]: VstPatchChunkInfo * [return value]: -1: bank can't be loaded, 1: bank can be loaded, 0: unsupported
+
+
See also: AudioEffectX::beginLoadBank
+
+ effBeginLoadProgram
+[ptr]: VstPatchChunkInfo * [return value]: -1: prog can't be loaded, 1: prog can be loaded, 0: unsupported
+
+
See also: AudioEffectX::beginLoadProgram
+
+ effSetProcessPrecision
+[value]:
+
+
See also: VstProcessPrecision
+AudioEffectX::setProcessPrecision
+
+ effGetNumMidiInputChannels
+[return value]: number of used MIDI input channels (1-15)
+
+
See also: AudioEffectX::getNumMidiInputChannels
+
+ effGetNumMidiOutputChannels
+[return value]: number of used MIDI output channels (1-15)
+
+
See also: AudioEffectX::getNumMidiOutputChannels
+
+
+
+
+
+
+
+
+
+
+
+
+VST 2.x dispatcher Opcodes (Plug-in to Host). Extension of AudioMasterOpcodes
Enumerator:
+
+
+
+
+
+
+
+
+
+
+
+String length limits (in characters excl. 0 byte).
Enumerator:
+
+
+
+
+
+
+
+
+
+
+
+Flags used in VstAudioFile .
Enumerator:
+
+ kVstOfflineReadOnly
+set by Host (in call offlineNotify)
+ kVstOfflineNoRateConversion
+set by Host (in call offlineNotify)
+ kVstOfflineNoChannelChange
+set by Host (in call offlineNotify)
+ kVstOfflineCanProcessSelection
+set by plug-in (in call offlineStart)
+ kVstOfflineNoCrossfade
+set by plug-in (in call offlineStart)
+ kVstOfflineWantRead
+set by plug-in (in call offlineStart)
+ kVstOfflineWantWrite
+set by plug-in (in call offlineStart)
+ kVstOfflineWantWriteMarker
+set by plug-in (in call offlineStart)
+ kVstOfflineWantMoveCursor
+set by plug-in (in call offlineStart)
+ kVstOfflineWantSelect
+set by plug-in (in call offlineStart)
+
+
+
+
+
+
+
+
+
+
+
+Automation States returned by audioMasterGetAutomationState .
Enumerator:
+
+ kVstAutomationUnsupported
+not supported by Host
+ kVstAutomationOff
+off
+ kVstAutomationRead
+read
+ kVstAutomationWrite
+write
+ kVstAutomationReadWrite
+read and write
+
+
+
+
+
+
+
+
+
+
+
+
+
+Command constants used in VstFileSelect structure.
Enumerator:
+
+ kVstFileLoad
+for loading a file
+ kVstFileSave
+for saving a file
+ kVstMultipleFilesLoad
+for loading multiple files
+ kVstDirectorySelect
+for selecting a directory/folder
+
+
+
+
+
+
+
+
+
+
+
+Types used in VstFileSelect structure.
Enumerator:
+
+ kVstFileType
+regular file selector
+
+
+
+
+
+
+
+
+
+
+
+Language code returned by audioMasterGetLanguage.
Enumerator:
+
+ kVstLangEnglish
+English.
+ kVstLangGerman
+German.
+ kVstLangFrench
+French.
+ kVstLangItalian
+Italian.
+ kVstLangSpanish
+Spanish.
+ kVstLangJapanese
+Japanese.
+
+
+
+
+
+
+
+
+
+
+
+Flags used in VstMidiEvent .
Enumerator:
+
+ kVstMidiEventIsRealtime
+means that this event is played life (not in playback from a sequencer track).
+ This allows the Plug-In to handle these flagged events with higher priority, especially when the Plug-In has a big latency (AEffect::initialDelay )
+
+
+
+
+
+
+
+
+
+
+
+Flags used in MidiProgramName .
Enumerator:
+
+ kMidiIsOmni
+default is multi. for omni mode, channel 0 is used for inquiries and program changes
+
+
+
+
+
+
+
+
+
+
+
+Modifier flags used in VstKeyCode .
Enumerator:
+
+ MODIFIER_SHIFT
+Shift.
+ MODIFIER_ALTERNATE
+Alt.
+ MODIFIER_COMMAND
+Control on Mac.
+ MODIFIER_CONTROL
+Ctrl on PC, Apple on Mac.
+
+
+
+
+
+
+
+
+
+
+
+Option passed to offlineRead/offlineWrite.
Enumerator:
+
+ kVstOfflineAudio
+reading/writing audio samples
+ kVstOfflinePeaks
+reading graphic representation
+ kVstOfflineParameter
+reading/writing parameters
+ kVstOfflineMarker
+reading/writing marker
+ kVstOfflineCursor
+reading/moving edit cursor
+ kVstOfflineSelection
+reading/changing selection
+ kVstOfflineQueryFiles
+to request the Host to call asynchronously offlineNotify
+
+
+
+
+
+
+
+
+
+
+
+Flags used in VstOfflineTask .
Enumerator:
+
+ kVstOfflineUnvalidParameter
+set by Host
+ kVstOfflineNewFile
+set by Host
+ kVstOfflinePlugError
+set by plug-in
+ kVstOfflineInterleavedAudio
+set by plug-in
+ kVstOfflineTempOutputFile
+set by plug-in
+ kVstOfflineFloatOutputFile
+set by plug-in
+ kVstOfflineRandomWrite
+set by plug-in
+ kVstOfflineStretch
+set by plug-in
+ kVstOfflineNoThread
+set by plug-in
+
+
+
+
+
+
+
+
+
+
+
+PanLaw Type.
Enumerator:
+
+ kLinearPanLaw
+L = pan * M; R = (1 - pan) * M;.
+ kEqualPowerPanLaw
+L = pow (pan, 0.5) * M; R = pow ((1 - pan), 0.5) * M;.
+
+
+
+
+
+
+
+
+
+
+
+Flags used in VstParameterProperties .
Enumerator:
+
+ kVstParameterIsSwitch
+parameter is a switch (on/off)
+ kVstParameterUsesIntegerMinMax
+minInteger, maxInteger valid
+ kVstParameterUsesFloatStep
+stepFloat, smallStepFloat, largeStepFloat valid
+ kVstParameterUsesIntStep
+stepInteger, largeStepInteger valid
+ kVstParameterSupportsDisplayIndex
+displayIndex valid
+ kVstParameterSupportsDisplayCategory
+category, etc. valid
+ kVstParameterCanRamp
+set if parameter value can ramp up/down
+
+
+
+
+
+
+
+
+
+
+
+Flags used in VstPinProperties .
Enumerator:
+
+ kVstPinIsActive
+pin is active, ignored by Host
+ kVstPinIsStereo
+pin is first of a stereo pair
+ kVstPinUseSpeaker
+VstPinProperties::arrangementType is valid and can be used to get the wanted arrangement
+
+
+
+
+
+
+
+
+
+
+
+Plug-in Categories.
Enumerator:
+
+ kPlugCategUnknown
+Unknown, category not implemented.
+ kPlugCategEffect
+Simple Effect.
+ kPlugCategSynth
+VST Instrument (Synths, samplers,...).
+ kPlugCategAnalysis
+Scope, Tuner, ...
+ kPlugCategMastering
+Dynamics, ...
+ kPlugCategSpacializer
+Panners, ...
+ kPlugCategRoomFx
+Delays and Reverbs.
+ kPlugSurroundFx
+Dedicated surround processor.
+ kPlugCategRestoration
+Denoiser, ...
+ kPlugCategOfflineProcess
+Offline Process.
+ kPlugCategShell
+Plug-in is container of other plug-ins.
+
+
See also: effShellGetNextPlugin
+
+ kPlugCategGenerator
+ToneGenerator, ...
+ kPlugCategMaxCount
+Marker to count the categories.
+
+
+
+
+
+
+
+
+
+
+
+Process Levels returned by audioMasterGetCurrentProcessLevel .
Enumerator:
+
+ kVstProcessLevelUnknown
+not supported by Host
+ kVstProcessLevelUser
+1: currently in user thread (GUI)
+ kVstProcessLevelRealtime
+2: currently in audio thread (where process is called)
+ kVstProcessLevelPrefetch
+3: currently in 'sequencer' thread (MIDI, timer etc)
+ kVstProcessLevelOffline
+4: currently offline processing and thus in user thread
+
+
+
+
+
+
+
+
+
+
+
+Symbolic precision constants used for effSetProcessPrecision.
Enumerator:
+
+ kVstProcessPrecision32
+single precision float (32bits)
+ kVstProcessPrecision64
+double precision (64bits)
+
+
+
+
+
+
+
+
+
+
+
+SMPTE Frame Rates.
Enumerator:
+
+ kVstSmpte24fps
+24 fps
+ kVstSmpte25fps
+25 fps
+ kVstSmpte2997fps
+29.97 fps
+ kVstSmpte30fps
+30 fps
+ kVstSmpte2997dfps
+29.97 drop
+ kVstSmpte30dfps
+30 drop
+ kVstSmpteFilm16mm
+Film 16mm.
+ kVstSmpteFilm35mm
+Film 35mm.
+ kVstSmpte239fps
+HDTV: 23.976 fps.
+ kVstSmpte249fps
+HDTV: 24.976 fps.
+ kVstSmpte599fps
+HDTV: 59.94 fps.
+ kVstSmpte60fps
+HDTV: 60 fps.
+
+
+
+
+
+
+
+
+
+
+
+Speaker Arrangement Types
Enumerator:
+
+ kSpeakerArrUserDefined
+user defined
+ kSpeakerArrEmpty
+empty arrangement
+ kSpeakerArrMono
+M.
+ kSpeakerArrStereo
+L R.
+ kSpeakerArrStereoSurround
+Ls Rs.
+ kSpeakerArrStereoCenter
+Lc Rc.
+ kSpeakerArrStereoSide
+Sl Sr.
+ kSpeakerArrStereoCLfe
+C Lfe.
+ kSpeakerArr30Cine
+L R C.
+ kSpeakerArr30Music
+L R S.
+ kSpeakerArr31Cine
+L R C Lfe.
+ kSpeakerArr31Music
+L R Lfe S.
+ kSpeakerArr40Cine
+L R C S (LCRS).
+ kSpeakerArr40Music
+L R Ls Rs (Quadro).
+ kSpeakerArr41Cine
+L R C Lfe S (LCRS+Lfe).
+ kSpeakerArr41Music
+L R Lfe Ls Rs (Quadro+Lfe).
+ kSpeakerArr50
+L R C Ls Rs.
+ kSpeakerArr51
+L R C Lfe Ls Rs.
+ kSpeakerArr60Cine
+L R C Ls Rs Cs.
+ kSpeakerArr60Music
+L R Ls Rs Sl Sr.
+ kSpeakerArr61Cine
+L R C Lfe Ls Rs Cs.
+ kSpeakerArr61Music
+L R Lfe Ls Rs Sl Sr.
+ kSpeakerArr70Cine
+L R C Ls Rs Lc Rc.
+ kSpeakerArr70Music
+L R C Ls Rs Sl Sr.
+ kSpeakerArr71Cine
+L R C Lfe Ls Rs Lc Rc.
+ kSpeakerArr71Music
+L R C Lfe Ls Rs Sl Sr.
+ kSpeakerArr80Cine
+L R C Ls Rs Lc Rc Cs.
+ kSpeakerArr80Music
+L R C Ls Rs Cs Sl Sr.
+ kSpeakerArr81Cine
+L R C Lfe Ls Rs Lc Rc Cs.
+ kSpeakerArr81Music
+L R C Lfe Ls Rs Cs Sl Sr.
+ kSpeakerArr102
+L R C Lfe Ls Rs Tfl Tfc Tfr Trl Trr Lfe2.
+ kNumSpeakerArr
+
+
+
+
+
+
+
+
+
+
+
+
+Speaker Types.
Enumerator:
+
+ kSpeakerUndefined
+Undefined.
+ kSpeakerM
+Mono (M).
+ kSpeakerL
+Left (L).
+ kSpeakerR
+Right (R).
+ kSpeakerC
+Center (C).
+ kSpeakerLfe
+Subbass (Lfe).
+ kSpeakerLs
+Left Surround (Ls).
+ kSpeakerRs
+Right Surround (Rs).
+ kSpeakerLc
+Left of Center (Lc).
+ kSpeakerRc
+Right of Center (Rc).
+ kSpeakerS
+Surround (S).
+ kSpeakerCs
+Center of Surround (Cs) = Surround (S).
+ kSpeakerSl
+Side Left (Sl).
+ kSpeakerSr
+Side Right (Sr).
+ kSpeakerTm
+Top Middle (Tm).
+ kSpeakerTfl
+Top Front Left (Tfl).
+ kSpeakerTfc
+Top Front Center (Tfc).
+ kSpeakerTfr
+Top Front Right (Tfr).
+ kSpeakerTrl
+Top Rear Left (Trl).
+ kSpeakerTrc
+Top Rear Center (Trc).
+ kSpeakerTrr
+Top Rear Right (Trr).
+ kSpeakerLfe2
+Subbass 2 (Lfe2).
+
+
+
+
+
+
+
+
+
+
+
+
+
+User-defined speaker types, to be extended in the negative range. Will be handled as their corresponding speaker types with abs values: e.g abs(kSpeakerU1 ) == kSpeakerL , abs(kSpeakerU2 ) == kSpeakerR )
Enumerator:
+
+
+
+
+
+
+
+
+
+
+
+Platform-independent definition of Virtual Keys (used in VstKeyCode ).
Enumerator:
+
+ VKEY_BACK
+
+ VKEY_TAB
+
+ VKEY_CLEAR
+
+ VKEY_RETURN
+
+ VKEY_PAUSE
+
+ VKEY_ESCAPE
+
+ VKEY_SPACE
+
+ VKEY_NEXT
+
+ VKEY_END
+
+ VKEY_HOME
+
+ VKEY_LEFT
+
+ VKEY_UP
+
+ VKEY_RIGHT
+
+ VKEY_DOWN
+
+ VKEY_PAGEUP
+
+ VKEY_PAGEDOWN
+
+ VKEY_SELECT
+
+ VKEY_PRINT
+
+ VKEY_ENTER
+
+ VKEY_SNAPSHOT
+
+ VKEY_INSERT
+
+ VKEY_DELETE
+
+ VKEY_HELP
+
+ VKEY_NUMPAD0
+
+ VKEY_NUMPAD1
+
+ VKEY_NUMPAD2
+
+ VKEY_NUMPAD3
+
+ VKEY_NUMPAD4
+
+ VKEY_NUMPAD5
+
+ VKEY_NUMPAD6
+
+ VKEY_NUMPAD7
+
+ VKEY_NUMPAD8
+
+ VKEY_NUMPAD9
+
+ VKEY_MULTIPLY
+
+ VKEY_ADD
+
+ VKEY_SEPARATOR
+
+ VKEY_SUBTRACT
+
+ VKEY_DECIMAL
+
+ VKEY_DIVIDE
+
+ VKEY_F1
+
+ VKEY_F2
+
+ VKEY_F3
+
+ VKEY_F4
+
+ VKEY_F5
+
+ VKEY_F6
+
+ VKEY_F7
+
+ VKEY_F8
+
+ VKEY_F9
+
+ VKEY_F10
+
+ VKEY_F11
+
+ VKEY_F12
+
+ VKEY_NUMLOCK
+
+ VKEY_SCROLL
+
+ VKEY_SHIFT
+
+ VKEY_CONTROL
+
+ VKEY_ALT
+
+ VKEY_EQUALS
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/aeffeditor_8h.html b/doc/html/aeffeditor_8h.html
new file mode 100644
index 0000000..c15f63a
--- /dev/null
+++ b/doc/html/aeffeditor_8h.html
@@ -0,0 +1,49 @@
+
+
+VST SDK 2.4: aeffeditor.h File Reference
+
+
+
+
+
+
+
+aeffeditor.h File Reference #include "audioeffectx.h "
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/annotated.html b/doc/html/annotated.html
new file mode 100644
index 0000000..d800eaa
--- /dev/null
+++ b/doc/html/annotated.html
@@ -0,0 +1,71 @@
+
+
+VST SDK 2.4: Class List
+
+
+
+
+
+
+VST SDK 2.4 Class List Here are the classes, structs, unions and interfaces with brief descriptions:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/audioeffect_8cpp.html b/doc/html/audioeffect_8cpp.html
new file mode 100644
index 0000000..c7f5af9
--- /dev/null
+++ b/doc/html/audioeffect_8cpp.html
@@ -0,0 +1,50 @@
+
+
+VST SDK 2.4: audioeffect.cpp File Reference
+
+
+
+
+
+
+
+audioeffect.cpp File Reference #include "audioeffect.h "
+#include "aeffeditor.h "
+#include <stddef.h>
+#include <stdio.h>
+#include <math.h>
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/audioeffect_8h.html b/doc/html/audioeffect_8h.html
new file mode 100644
index 0000000..96ddbbb
--- /dev/null
+++ b/doc/html/audioeffect_8h.html
@@ -0,0 +1,49 @@
+
+
+VST SDK 2.4: audioeffect.h File Reference
+
+
+
+
+
+
+
+audioeffect.h File Reference #include "pluginterfaces/vst2.x/aeffect.h "
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/audioeffectx_8cpp.html b/doc/html/audioeffectx_8cpp.html
new file mode 100644
index 0000000..ae6ce3c
--- /dev/null
+++ b/doc/html/audioeffectx_8cpp.html
@@ -0,0 +1,119 @@
+
+
+VST SDK 2.4: audioeffectx.cpp File Reference
+
+
+
+
+
+
+
+audioeffectx.cpp File Reference #include "audioeffectx.h "
+#include "aeffeditor.h "
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/audioeffectx_8h.html b/doc/html/audioeffectx_8h.html
new file mode 100644
index 0000000..d6ae7e5
--- /dev/null
+++ b/doc/html/audioeffectx_8h.html
@@ -0,0 +1,50 @@
+
+
+VST SDK 2.4: audioeffectx.h File Reference
+
+
+
+
+
+
+
+audioeffectx.h File Reference #include "audioeffect.h "
+#include "pluginterfaces/vst2.x/aeffectx.h "
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/class_a_eff_editor-members.html b/doc/html/class_a_eff_editor-members.html
new file mode 100644
index 0000000..436b459
--- /dev/null
+++ b/doc/html/class_a_eff_editor-members.html
@@ -0,0 +1,56 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+AEffEditor Member List This is the complete list of members for AEffEditor , including all inherited members.
+ AEffEditor (AudioEffect *effect=0)AEffEditor [inline]
+ close ()AEffEditor [inline, virtual]
+ effect AEffEditor [protected]
+ getEffect ()AEffEditor [inline, virtual]
+ getRect (ERect **rect)AEffEditor [inline, virtual]
+ idle ()AEffEditor [inline, virtual]
+ isOpen ()AEffEditor [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)AEffEditor [inline, virtual]
+ onKeyUp (VstKeyCode &keyCode)AEffEditor [inline, virtual]
+ onWheel (float distance)AEffEditor [inline, virtual]
+ open (void *ptr)AEffEditor [inline, virtual]
+ setKnobMode (VstInt32 val)AEffEditor [inline, virtual]
+ systemWindow AEffEditor [protected]
+ ~AEffEditor ()AEffEditor [inline, virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/class_a_eff_editor.html b/doc/html/class_a_eff_editor.html
new file mode 100644
index 0000000..af504a9
--- /dev/null
+++ b/doc/html/class_a_eff_editor.html
@@ -0,0 +1,390 @@
+
+
+VST SDK 2.4: AEffEditor Class Reference
+
+
+
+
+
+
+AEffEditor Class Reference #include <aeffeditor.h>
+
+List of all members.
+
+Public Member Functions
+ AEffEditor (AudioEffect *effect =0)
+
+virtual ~AEffEditor ()
+
+virtual AudioEffect * getEffect ()
+
+ Returns associated effect instance.
+virtual bool getRect (ERect **rect)
+
+ Query editor size as ERect .
+virtual bool open (void *ptr)
+
+ Open editor, pointer to parent windows is platform-dependent (HWND on Windows, WindowRef on Mac).
+virtual void close ()
+
+ Close editor (detach from parent window).
+virtual bool isOpen ()
+
+ Returns true if editor is currently open.
+virtual void idle ()
+
+ Idle call supplied by Host application.
+virtual bool onKeyDown (VstKeyCode &keyCode)
+
+ Receive key down event. Return true only if key was really used!
+virtual bool onKeyUp (VstKeyCode &keyCode)
+
+ Receive key up event. Return true only if key was really used!
+virtual bool onWheel (float distance)
+
+ Handle mouse wheel event, distance is positive or negative to indicate wheel direction.
+virtual bool setKnobMode (VstInt32 val)
+
+ Set knob mode (if supported by Host). See CKnobMode in VSTGUI.
+Protected Attributes
+AudioEffect * effect
+
+ associated effect instance
+void * systemWindow
+
+ platform-dependent parent window (HWND or WindowRef)
+
+Detailed Description
+VST Effect Editor class.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+ AEffEditor::AEffEditor
+ (
+ AudioEffect *
+ effect = 0
+ )
+ [inline]
+
+
+
+
+
+
+
Parameters:
+
+effect
+Editor class constructor. Requires pointer to associated effect instance.
+
+
+
+
+
+
+
+
+
+ virtual AEffEditor::~AEffEditor
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
Member Function Documentation
+
+
+
+
+
+ virtual void AEffEditor::close
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Close editor (detach from parent window).
+
+
+
+
+
+
+
+
+
+ virtual AudioEffect * AEffEditor::getEffect
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Returns associated effect instance.
+
+
+
+
+
+
+
+
+
+ virtual bool AEffEditor::getRect
+ (
+ ERect **
+ rect
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Query editor size as ERect .
+
+
+
+
+
+
+
+
+
+ virtual void AEffEditor::idle
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Idle call supplied by Host application.
+
+
+
+
+
+
+
+
+
+ virtual bool AEffEditor::isOpen
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Returns true if editor is currently open.
+
+
+
+
+
+
+
+
+
+ virtual bool AEffEditor::onKeyDown
+ (
+ VstKeyCode &
+ keyCode
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Receive key down event. Return true only if key was really used!
+
+
+
+
+
+
+
+
+
+ virtual bool AEffEditor::onKeyUp
+ (
+ VstKeyCode &
+ keyCode
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Receive key up event. Return true only if key was really used!
+
+
+
+
+
+
+
+
+
+ virtual bool AEffEditor::onWheel
+ (
+ float
+ distance
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Handle mouse wheel event, distance is positive or negative to indicate wheel direction.
+
+
+
+
+
+
+
+
+
+ virtual bool AEffEditor::open
+ (
+ void *
+ ptr
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Open editor, pointer to parent windows is platform-dependent (HWND on Windows, WindowRef on Mac).
+
+
+
+
+
+
+
+
+
+ virtual bool AEffEditor::setKnobMode
+ (
+ VstInt32
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Set knob mode (if supported by Host). See CKnobMode in VSTGUI.
+
+
+
+
+
Member Data Documentation
+
+
+
+
+
+
+associated effect instance
+
+
+
+
+
+
+
+
+
+
+platform-dependent parent window (HWND or WindowRef)
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/class_audio_effect-members.html b/doc/html/class_audio_effect-members.html
new file mode 100644
index 0000000..e7abdf1
--- /dev/null
+++ b/doc/html/class_audio_effect-members.html
@@ -0,0 +1,93 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+AudioEffect Member List This is the complete list of members for AudioEffect , including all inherited members.
+ AudioEffect (audioMasterCallback audioMaster, VstInt32 numPrograms, VstInt32 numParams)AudioEffect
+ audioMaster AudioEffect [protected]
+ blockSize AudioEffect [protected]
+ canDoubleReplacing (bool state=true)AudioEffect [virtual]
+ canProcessReplacing (bool state=true)AudioEffect [virtual]
+ cEffect AudioEffect [protected]
+ close ()AudioEffect [inline, virtual]
+ curProgram AudioEffect [protected]
+ dB2string (float value, char *text, VstInt32 maxLen)AudioEffect [virtual]
+ dispatcher (VstInt32 opcode, VstInt32 index, VstIntPtr value, void *ptr, float opt)AudioEffect [virtual]
+ editor AudioEffect [protected]
+ float2string (float value, char *text, VstInt32 maxLen)AudioEffect [virtual]
+ getAeffect ()AudioEffect [inline, virtual]
+ getBlockSize ()AudioEffect [inline, virtual]
+ getChunk (void **data, bool isPreset=false)AudioEffect [inline, virtual]
+ getCurrentUniqueId ()AudioEffect [virtual]
+ getEditor ()AudioEffect [inline, virtual]
+ getMasterVersion ()AudioEffect [virtual]
+ getParameter (VstInt32 index)AudioEffect [inline, virtual]
+ getParameterDisplay (VstInt32 index, char *text)AudioEffect [inline, virtual]
+ getParameterLabel (VstInt32 index, char *label)AudioEffect [inline, virtual]
+ getParameterName (VstInt32 index, char *text)AudioEffect [inline, virtual]
+ getProgram ()AudioEffect [inline, virtual]
+ getProgramName (char *name)AudioEffect [inline, virtual]
+ getSampleRate ()AudioEffect [inline, virtual]
+ Hz2string (float samples, char *text, VstInt32 maxLen)AudioEffect [virtual]
+ int2string (VstInt32 value, char *text, VstInt32 maxLen)AudioEffect [virtual]
+ masterIdle ()AudioEffect [virtual]
+ ms2string (float samples, char *text, VstInt32 maxLen)AudioEffect [virtual]
+ numParams AudioEffect [protected]
+ numPrograms AudioEffect [protected]
+ open ()AudioEffect [inline, virtual]
+ processDoubleReplacing (double **inputs, double **outputs, VstInt32 sampleFrames)AudioEffect [inline, virtual]
+ processReplacing (float **inputs, float **outputs, VstInt32 sampleFrames)=0AudioEffect [pure virtual]
+ programsAreChunks (bool state=true)AudioEffect [virtual]
+ resume ()AudioEffect [inline, virtual]
+ sampleRate AudioEffect [protected]
+ setBlockSize (VstInt32 blockSize)AudioEffect [inline, virtual]
+ setChunk (void *data, VstInt32 byteSize, bool isPreset=false)AudioEffect [inline, virtual]
+ setEditor (AEffEditor *editor)AudioEffect
+ setInitialDelay (VstInt32 delay)AudioEffect [virtual]
+ setNumInputs (VstInt32 inputs)AudioEffect [inline, virtual]
+ setNumOutputs (VstInt32 outputs)AudioEffect [inline, virtual]
+ setParameter (VstInt32 index, float value)AudioEffect [inline, virtual]
+ setParameterAutomated (VstInt32 index, float value)AudioEffect [virtual]
+ setProgram (VstInt32 program)AudioEffect [inline, virtual]
+ setProgramName (char *name)AudioEffect [inline, virtual]
+ setSampleRate (float sampleRate)AudioEffect [inline, virtual]
+ setUniqueID (VstInt32 iD)AudioEffect [inline, virtual]
+ suspend ()AudioEffect [inline, virtual]
+ ~AudioEffect ()AudioEffect [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/class_audio_effect.html b/doc/html/class_audio_effect.html
new file mode 100644
index 0000000..59d2cd3
--- /dev/null
+++ b/doc/html/class_audio_effect.html
@@ -0,0 +1,1703 @@
+
+
+VST SDK 2.4: AudioEffect Class Reference
+
+
+
+
+
+
+AudioEffect Class Reference #include <audioeffect.h>
+
+
Inheritance diagram for AudioEffect:
+
+
+
+
+List of all members.
+
+Public Member Functions
+ AudioEffect (audioMasterCallback audioMaster , VstInt32 numPrograms , VstInt32 numParams )
+
+ Create an AudioEffect object.
+virtual ~AudioEffect ()
+
+ Destroy an AudioEffect object.
+virtual VstIntPtr dispatcher (VstInt32 opcode, VstInt32 index, VstIntPtr value, void *ptr, float opt)
+
+ Opcodes dispatcher.
+
+virtual void open ()
+
+ Called when plug-in is initialized.
+virtual void close ()
+
+ Called when plug-in will be released.
+virtual void suspend ()
+
+ Called when plug-in is switched to off.
+virtual void resume ()
+
+ Called when plug-in is switched to on.
+
+virtual void setSampleRate (float sampleRate )
+
+ Called when the sample rate changes (always in a suspend state).
+virtual void setBlockSize (VstInt32 blockSize )
+
+ Called when the Maximun block size changes (always in a suspend state). Note that the sampleFrames in Process Calls could be smaller than this block size, but NOT bigger.
+virtual void processReplacing (float **inputs, float **outputs, VstInt32 sampleFrames)=0
+
+ Process 32 bit (single precision) floats (always in a resume state).
+virtual void processDoubleReplacing (double **inputs, double **outputs, VstInt32 sampleFrames)
+
+ Process 64 bit (double precision) floats (always in a resume state).
+
+virtual void setParameter (VstInt32 index, float value)
+
+ Called when a parameter changed.
+virtual float getParameter (VstInt32 index)
+
+ Return the value of the parameter with index .
+virtual void setParameterAutomated (VstInt32 index, float value)
+
+ Called after a control has changed in the editor and when the associated parameter should be automated.
+
+virtual VstInt32 getProgram ()
+
+ Return the index to the current program.
+virtual void setProgram (VstInt32 program)
+
+ Set the current program to program .
+virtual void setProgramName (char *name)
+
+ Stuff the name field of the current program with name . Limited to kVstMaxProgNameLen .
+virtual void getProgramName (char *name)
+
+ Stuff name with the name of the current program. Limited to kVstMaxProgNameLen .
+virtual void getParameterLabel (VstInt32 index, char *label)
+
+ Stuff label with the units in which parameter index is displayed (i.e. "sec", "dB", "type", etc...). Limited to kVstMaxParamStrLen .
+virtual void getParameterDisplay (VstInt32 index, char *text)
+
+ Stuff text with a string representation ("0.5", "-3", "PLATE", etc...) of the value of parameter index . Limited to kVstMaxParamStrLen .
+virtual void getParameterName (VstInt32 index, char *text)
+
+ Stuff text with the name ("Time", "Gain", "RoomType", etc...) of parameter index . Limited to kVstMaxParamStrLen .
+virtual VstInt32 getChunk (void **data, bool isPreset=false)
+
+ Host stores plug-in state. Returns the size in bytes of the chunk (plug-in allocates the data array).
+virtual VstInt32 setChunk (void *data, VstInt32 byteSize, bool isPreset=false)
+
+ Host restores plug-in state.
+
+virtual void setUniqueID (VstInt32 iD)
+
+ Must be called to set the plug-ins unique ID!
+virtual void setNumInputs (VstInt32 inputs)
+
+ Set the number of inputs the plug-in will handle. For a plug-in which could change its IO configuration, this number is the maximun available inputs.
+virtual void setNumOutputs (VstInt32 outputs)
+
+ Set the number of outputs the plug-in will handle. For a plug-in which could change its IO configuration, this number is the maximun available ouputs.
+virtual void canProcessReplacing (bool state=true)
+
+ Tells that processReplacing() could be used. Mandatory in VST 2.4!
+virtual void canDoubleReplacing (bool state=true)
+
+ Tells that processDoubleReplacing() is implemented.
+virtual void programsAreChunks (bool state=true)
+
+ Program data is handled in formatless chunks (using getChunk-setChunks).
+virtual void setInitialDelay (VstInt32 delay)
+
+ Use to report the plug-in's latency (Group Delay).
+
+void setEditor (AEffEditor *editor )
+
+ Should be called if you want to define your own editor.
+virtual AEffEditor * getEditor ()
+
+ Returns the attached editor.
+
+virtual AEffect * getAeffect ()
+
+ Returns the AEffect structure.
+virtual float getSampleRate ()
+
+ Returns the current sample rate.
+virtual VstInt32 getBlockSize ()
+
+ Returns the current Maximum block size.
+
+virtual VstInt32 getMasterVersion ()
+
+ Returns the Host's version (for example 2400 for VST 2.4).
+virtual VstInt32 getCurrentUniqueId ()
+
+ Returns current unique identifier when loading shell plug-ins.
+virtual void masterIdle ()
+
+ Give idle time to Host application.
+
+virtual void dB2string (float value, char *text, VstInt32 maxLen)
+
+ Stuffs text with an amplitude on the [0.0, 1.0] scale converted to its value in decibels.
+virtual void Hz2string (float samples, char *text, VstInt32 maxLen)
+
+ Stuffs text with the frequency in Hertz that has a period of samples .
+virtual void ms2string (float samples, char *text, VstInt32 maxLen)
+
+ Stuffs text with the duration in milliseconds of samples frames.
+virtual void float2string (float value, char *text, VstInt32 maxLen)
+
+ Stuffs text with a string representation on the floating point value .
+virtual void int2string (VstInt32 value, char *text, VstInt32 maxLen)
+
+ Stuffs text with a string representation on the integer value .
+Protected Attributes
+audioMasterCallback audioMaster
+
+ Host callback.
+AEffEditor * editor
+
+ Pointer to the plug-in's editor.
+float sampleRate
+
+ Current sample rate.
+VstInt32 blockSize
+
+ Maximum block size.
+VstInt32 numPrograms
+
+ Number of programs.
+VstInt32 numParams
+
+ Number of parameters.
+VstInt32 curProgram
+
+ Current program.
+AEffect cEffect
+
+ AEffect object
+
+Detailed Description
+VST Effect Base Class (VST 1.0).
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+ AudioEffect::AudioEffect
+ (
+ audioMasterCallback
+ audioMaster ,
+
+
+
+
+ VstInt32
+ numPrograms ,
+
+
+
+
+ VstInt32
+ numParams
+
+
+
+ )
+
+
+
+
+
+
+
+Create an AudioEffect object.
+
+The constructor of your class is passed a parameter of the type audioMasterCallback . The actual mechanism in which your class gets constructed is not important right now. Effectively your class is constructed by the hosting application, which passes an object of type audioMasterCallback that handles the interaction with the plug-in. You pass this on to the base class' constructor and then can forget about it.
+
Parameters:
+
+ audioMaster Passed by the Host and handles interaction
+ numPrograms Pass the number of programs the plug-in provides
+ numParams Pass the number of parameters the plug-in provides
+
+
+
MyPlug::MyPlug (audioMasterCallback audioMaster )
+: AudioEffectX (audioMaster, 1, 1)
+{
+ setNumInputs (2);
+ setNumOutputs (2);
+ setUniqueID ('MyPl');
+ canProcessReplacing ();
+}
+
+
See also: setNumInputs , setNumOutputs , setUniqueID , canProcessReplacing
+
+
+
+
+
+
+
+
+ AudioEffect::~AudioEffect
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
Member Function Documentation
+
+
+
+
+
+ void AudioEffect::canDoubleReplacing
+ (
+ bool
+ state = true
+ )
+ [virtual]
+
+
+
+
+
+
+Tells that processDoubleReplacing() is implemented.
+
+
Parameters:
+
+ state Set to true if supported
+
+
+
Note: Needs to be called in the plug-in's constructor
+
+
+
+
+
+
+
+
+ void AudioEffect::canProcessReplacing
+ (
+ bool
+ state = true
+ )
+ [virtual]
+
+
+
+
+
+
+Tells that processReplacing() could be used. Mandatory in VST 2.4!
+
+
Parameters:
+
+ state Set to true if supported
+
+
+
Note: Needs to be called in the plug-in's constructor
+
+
+
+
+
+
+
+
+ virtual void AudioEffect::close
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called when plug-in will be released.
+
+
+
+
+
+
+
+
+
+ void AudioEffect::dB2string
+ (
+ float
+ value ,
+
+
+
+
+ char *
+ text ,
+
+
+
+
+ VstInt32
+ maxLen
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+Stuffs text with an amplitude on the [0.0, 1.0] scale converted to its value in decibels.
+
+
Parameters:
+
+ value Value to convert
+ text String up to length char
+ maxLen Maximal length of the string
+
+
+
+
+
+
+
+
+
+
+ VstIntPtr AudioEffect::dispatcher
+ (
+ VstInt32
+ opcode ,
+
+
+
+
+ VstInt32
+ index ,
+
+
+
+
+ VstIntPtr
+ value ,
+
+
+
+
+ void *
+ ptr ,
+
+
+
+
+ float
+ opt
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+Opcodes dispatcher.
+
+
+
+
+
+
+
+
+
+ void AudioEffect::float2string
+ (
+ float
+ value ,
+
+
+
+
+ char *
+ text ,
+
+
+
+
+ VstInt32
+ maxLen
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+Stuffs text with a string representation on the floating point value .
+
+
Parameters:
+
+ value Value to convert
+ text String up to length char
+ maxLen Maximal length of the string
+
+
+
+
+
+
+
+
+
+
+ virtual AEffect * AudioEffect::getAeffect
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Returns the AEffect structure.
+
+
+
+
+
+
+
+
+
+ virtual VstInt32 AudioEffect::getBlockSize
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Returns the current Maximum block size.
+
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffect::getChunk
+ (
+ void **
+ data ,
+
+
+
+
+ bool
+ isPreset = false
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Host stores plug-in state. Returns the size in bytes of the chunk (plug-in allocates the data array).
+
+
Parameters:
+
+ data should point to the newly allocated memory block containg state data. You can savely release it in next suspend/resume call.
+ isPreset true when saving a single program, false for all programs
+
+
+
Note: If your plug-in is configured to use chunks (see AudioEffect::programsAreChunks ), the Host will ask for a block of memory describing the current plug-in state for saving. To restore the state at a later stage, the same data is passed back to AudioEffect::setChunk . Alternatively, when not using chunk, the Host will simply save all parameter values.
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffect::getCurrentUniqueId
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+ virtual AEffEditor * AudioEffect::getEditor
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Returns the attached editor.
+
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffect::getMasterVersion
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Returns the Host's version (for example 2400 for VST 2.4).
+
+Use to ask for the Host's version
Returns: The Host's version
+
+
+
+
+
+
+
+
+ float AudioEffect::getParameter
+ (
+ VstInt32
+ index
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Return the value of the parameter with index .
+
+Return the value of parameter index
+
Parameters:
+
+ index Index of the parameter
+
+
+
Returns: A float value between 0.0 and 1.0 inclusive
+
+
+
+
+
+
+
+
+ void AudioEffect::getParameterDisplay
+ (
+ VstInt32
+ index ,
+
+
+
+
+ char *
+ text
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Stuff text with a string representation ("0.5", "-3", "PLATE", etc...) of the value of parameter index . Limited to kVstMaxParamStrLen .
+
+
Parameters:
+
+ index Index of the parameter
+ text A string up to 8 char
+
+
+
+
+
+
+
+
+
+
+ void AudioEffect::getParameterLabel
+ (
+ VstInt32
+ index ,
+
+
+
+
+ char *
+ label
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Stuff label with the units in which parameter index is displayed (i.e. "sec", "dB", "type", etc...). Limited to kVstMaxParamStrLen .
+
+
Parameters:
+
+ index Index of the parameter
+ label A string up to 8 char
+
+
+
+
+
+
+
+
+
+
+ void AudioEffect::getParameterName
+ (
+ VstInt32
+ index ,
+
+
+
+
+ char *
+ text
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Stuff text with the name ("Time", "Gain", "RoomType", etc...) of parameter index . Limited to kVstMaxParamStrLen .
+
+
Parameters:
+
+ index Index of the parameter
+ text A string up to 8 char
+
+
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffect::getProgram
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Return the index to the current program.
+
+
Returns: Index of the current program
+
+
+
+
+
+
+
+
+ void AudioEffect::getProgramName
+ (
+ char *
+ name
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Stuff name with the name of the current program. Limited to kVstMaxProgNameLen .
+
+The program name is displayed in the rack, and can be edited by the user.
+
Parameters:
+
+ name A string up to 24 char
+
+
+
Warning: Please be aware that the string lengths supported by the default VST interface are normally limited to 24 characters. If you copy too much data into the buffers provided, you will break the Host application.
+
+
+
+
+
+
+
+
+ virtual float AudioEffect::getSampleRate
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Returns the current sample rate.
+
+
+
+
+
+
+
+
+
+ void AudioEffect::Hz2string
+ (
+ float
+ samples ,
+
+
+
+
+ char *
+ text ,
+
+
+
+
+ VstInt32
+ maxLen
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+Stuffs text with the frequency in Hertz that has a period of samples .
+
+
Parameters:
+
+ samples Number of samples
+ text String up to length char
+ maxLen Maximal length of the string
+
+
+
+
+
+
+
+
+
+
+ void AudioEffect::int2string
+ (
+ VstInt32
+ value ,
+
+
+
+
+ char *
+ text ,
+
+
+
+
+ VstInt32
+ maxLen
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+Stuffs text with a string representation on the integer value .
+
+
Parameters:
+
+ value Value to convert
+ text String up to length char
+ maxLen Maximal length of the string
+
+
+
+
+
+
+
+
+
+
+ void AudioEffect::masterIdle
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Give idle time to Host application.
+
+Give idle time to Host application, e.g. if plug-in editor is doing mouse tracking in a modal loop.
+
+
+
+
+
+
+
+ void AudioEffect::ms2string
+ (
+ float
+ samples ,
+
+
+
+
+ char *
+ text ,
+
+
+
+
+ VstInt32
+ maxLen
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+Stuffs text with the duration in milliseconds of samples frames.
+
+
Parameters:
+
+ samples Number of samples
+ text String up to length char
+ maxLen Maximal length of the string
+
+
+
+
+
+
+
+
+
+
+ virtual void AudioEffect::open
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called when plug-in is initialized.
+
+
+
+
+
+
+
+
+
+ virtual void AudioEffect::processDoubleReplacing
+ (
+ double **
+ inputs ,
+
+
+
+
+ double **
+ outputs ,
+
+
+
+
+ VstInt32
+ sampleFrames
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Process 64 bit (double precision) floats (always in a resume state).
+
+
See also: processReplacing
+
+
+
+
+
+
+
+
+ void AudioEffect::processReplacing
+ (
+ float **
+ inputs ,
+
+
+
+
+ float **
+ outputs ,
+
+
+
+
+ VstInt32
+ sampleFrames
+
+
+
+ )
+ [pure virtual]
+
+
+
+
+
+
+Process 32 bit (single precision) floats (always in a resume state).
+
+This process method must be provided. It takes input data, applies its pocessing algorithm, and then puts the result to the output by overwriting the output buffer.
+
Parameters:
+
+ inputs An array of pointers to the data
+ outputs An array of pointers to where the data can be written to
+ sampleFrames Number of sample frames to process
+
+
+
Warning: Never call any Mac OS 9 functions (or other functions which call into the OS) inside your audio process function! This will crash the system when your plug-in is run in MP (multiprocessor) mode. If you must call into the OS, you must use MPRemoteCall () (see Apples' documentation), or explicitly use functions which are documented by Apple to be MP safe. On Mac OS X read the system header files to be sure that you only call thread safe functions.
+
+
+
+
+
+
+
+
+ void AudioEffect::programsAreChunks
+ (
+ bool
+ state = true
+ )
+ [virtual]
+
+
+
+
+
+
+Program data is handled in formatless chunks (using getChunk-setChunks).
+
+
Parameters:
+
+ state Set true if programs are chunks
+
+
+
Note: Needs to be called in the plug-in's constructor
+
+
+
+
+
+
+
+
+ virtual void AudioEffect::resume
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called when plug-in is switched to on.
+
+
+
+
+
+
+
+
+
+ void AudioEffect::setBlockSize
+ (
+ VstInt32
+ blockSize
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called when the Maximun block size changes (always in a suspend state). Note that the sampleFrames in Process Calls could be smaller than this block size, but NOT bigger.
+
+This is called by the Host, and tells the plug-in that the maximum block size passed to processReplacing() will be blockSize .
+
Parameters:
+
+ blockSize Maximum number of sample frames
+
+
+
Warning: You must process exactly sampleFrames number of samples in inside processReplacing, not more!
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffect::setChunk
+ (
+ void *
+ data ,
+
+
+
+
+ VstInt32
+ byteSize ,
+
+
+
+
+ bool
+ isPreset = false
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Host restores plug-in state.
+
+
Parameters:
+
+ data pointer to state data (owned by Host)
+ byteSize size of state data
+ isPreset true when restoring a single program, false for all programs
+
+
+
See also: getChunk
+
+
+
+
+
+
+
+
+ void AudioEffect::setEditor
+ (
+ AEffEditor *
+ editor
+ )
+
+
+
+
+
+
+
+Should be called if you want to define your own editor.
+
+
+
+
+
+
+
+
+
+ void AudioEffect::setInitialDelay
+ (
+ VstInt32
+ delay
+ )
+ [virtual]
+
+
+
+
+
+
+Use to report the plug-in's latency (Group Delay).
+
+Use to report the Plug-in's latency (Group Delay)
+
Parameters:
+
+ delay Plug-ins delay in samples
+
+
+
+
+
+
+
+
+
+
+ void AudioEffect::setNumInputs
+ (
+ VstInt32
+ inputs
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Set the number of inputs the plug-in will handle. For a plug-in which could change its IO configuration, this number is the maximun available inputs.
+
+This number is fixed at construction time and can't change until the plug-in is destroyed.
+
Parameters:
+
+ inputs The number of inputs
+
+
+
See also: isInputConnected()
+
Note: Needs to be called in the plug-in's constructor
+
+
+
+
+
+
+
+
+ void AudioEffect::setNumOutputs
+ (
+ VstInt32
+ outputs
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Set the number of outputs the plug-in will handle. For a plug-in which could change its IO configuration, this number is the maximun available ouputs.
+
+This number is fixed at construction time and can't change until the plug-in is destroyed.
+
Parameters:
+
+ outputs The number of outputs
+
+
+
See also: isOutputConnected()
+
Note: Needs to be called in the plug-in's constructor
+
+
+
+
+
+
+
+
+ void AudioEffect::setParameter
+ (
+ VstInt32
+ index ,
+
+
+
+
+ float
+ value
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called when a parameter changed.
+
+Parameters are the individual parameter settings the user can adjust. A VST Host can automate these parameters. Set parameter index to value .
+
Parameters:
+
+ index Index of the parameter to change
+ value A float value between 0.0 and 1.0 inclusive
+
+
+
Note: Parameter values, like all VST parameters, are declared as floats with an inclusive range of 0.0 to 1.0. How data is presented to the user is merely in the user-interface handling. This is a convention, but still worth regarding. Maybe the VST-Host's automation system depends on this range.
+
+
+
+
+
+
+
+
+ void AudioEffect::setParameterAutomated
+ (
+ VstInt32
+ index ,
+
+
+
+
+ float
+ value
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+Called after a control has changed in the editor and when the associated parameter should be automated.
+
+
Parameters:
+
+ index parameter index
+ float parameter value
+
+
+
Note: An important thing to notice is that if the user changes a parameter in your editor, which is out of the Host's control if you are not using the default string based interface, you should call setParameterAutomated (). This ensures that the Host is notified of the parameter change, which allows it to record these changes for automation.
+
See also: setParameter
+
+
+
+
+
+
+
+
+ void AudioEffect::setProgram
+ (
+ VstInt32
+ program
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Set the current program to program .
+
+
Parameters:
+
+ Program of the current program
+
+
+
+
+
+
+
+
+
+
+ void AudioEffect::setProgramName
+ (
+ char *
+ name
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Stuff the name field of the current program with name . Limited to kVstMaxProgNameLen .
+
+The program name is displayed in the rack, and can be edited by the user.
+
Parameters:
+
+ name A string up to 24 char
+
+
+
Warning: Please be aware that the string lengths supported by the default VST interface are normally limited to 24 characters. If you copy too much data into the buffers provided, you will break the Host application.
+
+
+
+
+
+
+
+
+ virtual void AudioEffect::setSampleRate
+ (
+ float
+ sampleRate
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called when the sample rate changes (always in a suspend state).
+
+
+
+
+
+
+
+
+
+ void AudioEffect::setUniqueID
+ (
+ VstInt32
+ iD
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Must be called to set the plug-ins unique ID!
+
+Must call this! Set the plug-in's unique identifier. The Host uses this to identify the plug-in, for instance when it is loading effect programs and banks. On Steinberg Web Page you can find an UniqueID Database where you can record your UniqueID, it will check if the ID is already used by an another vendor. You can use CCONST('a','b','c','d') (defined in VST 2.0) to be platform independent to initialize an UniqueID.
+
Parameters:
+
+ iD Plug-in's unique ID
+
+
+
Note: Needs to be called in the plug-in's constructor
+
+
+
+
+
+
+
+
+ virtual void AudioEffect::suspend
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called when plug-in is switched to off.
+
+
+
+
+
Member Data Documentation
+
+
+
+
+
+
+Host callback.
+
+
+
+
+
+
+
+
+
+
+Maximum block size.
+
+
+
+
+
+
+
+
+
+
+
+
+Current program.
+
+
+
+
+
+
+
+
+
+
+Pointer to the plug-in's editor.
+
+
+
+
+
+
+
+
+
+
+Number of parameters.
+
+
+
+
+
+
+
+
+
+
+Number of programs.
+
+
+
+
+
+
+
+
+
+
+Current sample rate.
+
+
+
+
+
The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/class_audio_effect.png b/doc/html/class_audio_effect.png
new file mode 100644
index 0000000..d2ed25a
Binary files /dev/null and b/doc/html/class_audio_effect.png differ
diff --git a/doc/html/class_audio_effect_x-members.html b/doc/html/class_audio_effect_x-members.html
new file mode 100644
index 0000000..0fd1f01
--- /dev/null
+++ b/doc/html/class_audio_effect_x-members.html
@@ -0,0 +1,159 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+AudioEffectX Member List This is the complete list of members for AudioEffectX , including all inherited members.
+ allocateArrangement (VstSpeakerArrangement **arrangement, VstInt32 nbChannels)AudioEffectX [virtual]
+ AudioEffect (audioMasterCallback audioMaster, VstInt32 numPrograms, VstInt32 numParams)AudioEffect
+ AudioEffectX (audioMasterCallback audioMaster, VstInt32 numPrograms, VstInt32 numParams)AudioEffectX
+ audioMaster AudioEffect [protected]
+ beginEdit (VstInt32 index)AudioEffectX [virtual]
+ beginLoadBank (VstPatchChunkInfo *ptr)AudioEffectX [inline, virtual]
+ beginLoadProgram (VstPatchChunkInfo *ptr)AudioEffectX [inline, virtual]
+ beginSetProgram ()AudioEffectX [inline, virtual]
+ blockSize AudioEffect [protected]
+ canDo (char *text)AudioEffectX [inline, virtual]
+ canDoubleReplacing (bool state=true)AudioEffect [virtual]
+ canHostDo (char *text)AudioEffectX [virtual]
+ canParameterBeAutomated (VstInt32 index)AudioEffectX [inline, virtual]
+ canProcessReplacing (bool state=true)AudioEffect [virtual]
+ cEffect AudioEffect [protected]
+ close ()AudioEffect [inline, virtual]
+ closeFileSelector (VstFileSelect *ptr)AudioEffectX [virtual]
+ copySpeaker (VstSpeakerProperties *to, VstSpeakerProperties *from)AudioEffectX [virtual]
+ curProgram AudioEffect [protected]
+ dB2string (float value, char *text, VstInt32 maxLen)AudioEffect [virtual]
+ deallocateArrangement (VstSpeakerArrangement **arrangement)AudioEffectX [virtual]
+ dispatcher (VstInt32 opcode, VstInt32 index, VstIntPtr value, void *ptr, float opt)AudioEffect [virtual]
+ editor AudioEffect [protected]
+ endEdit (VstInt32 index)AudioEffectX [virtual]
+ endSetProgram ()AudioEffectX [inline, virtual]
+ float2string (float value, char *text, VstInt32 maxLen)AudioEffect [virtual]
+ getAeffect ()AudioEffect [inline, virtual]
+ getAutomationState ()AudioEffectX [virtual]
+ getBlockSize ()AudioEffect [inline, virtual]
+ getChunk (void **data, bool isPreset=false)AudioEffect [inline, virtual]
+ getCurrentMidiProgram (VstInt32 channel, MidiProgramName *currentProgram)AudioEffectX [inline, virtual]
+ getCurrentProcessLevel ()AudioEffectX [virtual]
+ getCurrentUniqueId ()AudioEffect [virtual]
+ getDirectory ()AudioEffectX [virtual]
+ getEditor ()AudioEffect [inline, virtual]
+ getEffectName (char *name)AudioEffectX [inline, virtual]
+ getGetTailSize ()AudioEffectX [inline, virtual]
+ getHostLanguage ()AudioEffectX [virtual]
+ getHostProductString (char *text)AudioEffectX [virtual]
+ getHostVendorString (char *text)AudioEffectX [virtual]
+ getHostVendorVersion ()AudioEffectX [virtual]
+ getInputLatency ()AudioEffectX [virtual]
+ getInputProperties (VstInt32 index, VstPinProperties *properties)AudioEffectX [inline, virtual]
+ getMasterVersion ()AudioEffect [virtual]
+ getMidiKeyName (VstInt32 channel, MidiKeyName *keyName)AudioEffectX [inline, virtual]
+ getMidiProgramCategory (VstInt32 channel, MidiProgramCategory *category)AudioEffectX [inline, virtual]
+ getMidiProgramName (VstInt32 channel, MidiProgramName *midiProgramName)AudioEffectX [inline, virtual]
+ getNextShellPlugin (char *name)AudioEffectX [inline, virtual]
+ getNumMidiInputChannels ()AudioEffectX [inline, virtual]
+ getNumMidiOutputChannels ()AudioEffectX [inline, virtual]
+ getOutputLatency ()AudioEffectX [virtual]
+ getOutputProperties (VstInt32 index, VstPinProperties *properties)AudioEffectX [inline, virtual]
+ getParameter (VstInt32 index)AudioEffect [inline, virtual]
+ getParameterDisplay (VstInt32 index, char *text)AudioEffect [inline, virtual]
+ getParameterLabel (VstInt32 index, char *label)AudioEffect [inline, virtual]
+ getParameterName (VstInt32 index, char *text)AudioEffect [inline, virtual]
+ getParameterProperties (VstInt32 index, VstParameterProperties *p)AudioEffectX [inline, virtual]
+ getPlugCategory ()AudioEffectX [virtual]
+ getProductString (char *text)AudioEffectX [inline, virtual]
+ getProgram ()AudioEffect [inline, virtual]
+ getProgramName (char *name)AudioEffect [inline, virtual]
+ getProgramNameIndexed (VstInt32 category, VstInt32 index, char *text)AudioEffectX [inline, virtual]
+ getSampleRate ()AudioEffect [inline, virtual]
+ getSpeakerArrangement (VstSpeakerArrangement **pluginInput, VstSpeakerArrangement **pluginOutput)AudioEffectX [inline, virtual]
+ getTimeInfo (VstInt32 filter)AudioEffectX [virtual]
+ getVendorString (char *text)AudioEffectX [inline, virtual]
+ getVendorVersion ()AudioEffectX [inline, virtual]
+ getVstVersion ()AudioEffectX [inline, virtual]
+ hasMidiProgramsChanged (VstInt32 channel)AudioEffectX [inline, virtual]
+ hostVendorSpecific (VstInt32 lArg1, VstIntPtr lArg2, void *ptrArg, float floatArg)AudioEffectX [virtual]
+ Hz2string (float samples, char *text, VstInt32 maxLen)AudioEffect [virtual]
+ int2string (VstInt32 value, char *text, VstInt32 maxLen)AudioEffect [virtual]
+ ioChanged ()AudioEffectX [virtual]
+ isSynth (bool state=true)AudioEffectX [virtual]
+ masterIdle ()AudioEffect [virtual]
+ matchArrangement (VstSpeakerArrangement **to, VstSpeakerArrangement *from)AudioEffectX [virtual]
+ ms2string (float samples, char *text, VstInt32 maxLen)AudioEffect [virtual]
+ noTail (bool state=true)AudioEffectX [virtual]
+ numParams AudioEffect [protected]
+ numPrograms AudioEffect [protected]
+ open ()AudioEffect [inline, virtual]
+ openFileSelector (VstFileSelect *ptr)AudioEffectX [virtual]
+ processDoubleReplacing (double **inputs, double **outputs, VstInt32 sampleFrames)AudioEffect [inline, virtual]
+ processEvents (VstEvents *events)AudioEffectX [inline, virtual]
+ processReplacing (float **inputs, float **outputs, VstInt32 sampleFrames)=0AudioEffect [pure virtual]
+ processVariableIo (VstVariableIo *varIo)AudioEffectX [inline, virtual]
+ programsAreChunks (bool state=true)AudioEffect [virtual]
+ resume ()AudioEffect [inline, virtual]
+ sampleRate AudioEffect [protected]
+ sendVstEventsToHost (VstEvents *events)AudioEffectX
+ setBlockSize (VstInt32 blockSize)AudioEffect [inline, virtual]
+ setBypass (bool onOff)AudioEffectX [inline, virtual]
+ setChunk (void *data, VstInt32 byteSize, bool isPreset=false)AudioEffect [inline, virtual]
+ setEditor (AEffEditor *editor)AudioEffect
+ setInitialDelay (VstInt32 delay)AudioEffect [virtual]
+ setNumInputs (VstInt32 inputs)AudioEffect [inline, virtual]
+ setNumOutputs (VstInt32 outputs)AudioEffect [inline, virtual]
+ setPanLaw (VstInt32 type, float val)AudioEffectX [inline, virtual]
+ setParameter (VstInt32 index, float value)AudioEffect [inline, virtual]
+ setParameterAutomated (VstInt32 index, float value)AudioEffect [virtual]
+ setProcessPrecision (VstInt32 precision)AudioEffectX [inline, virtual]
+ setProgram (VstInt32 program)AudioEffect [inline, virtual]
+ setProgramName (char *name)AudioEffect [inline, virtual]
+ setSampleRate (float sampleRate)AudioEffect [inline, virtual]
+ setSpeakerArrangement (VstSpeakerArrangement *pluginInput, VstSpeakerArrangement *pluginOutput)AudioEffectX [inline, virtual]
+ setTotalSampleToProcess (VstInt32 value)AudioEffectX [inline, virtual]
+ setUniqueID (VstInt32 iD)AudioEffect [inline, virtual]
+ sizeWindow (VstInt32 width, VstInt32 height)AudioEffectX [virtual]
+ startProcess ()AudioEffectX [inline, virtual]
+ stopProcess ()AudioEffectX [inline, virtual]
+ string2parameter (VstInt32 index, char *text)AudioEffectX [inline, virtual]
+ suspend ()AudioEffect [inline, virtual]
+ updateBlockSize ()AudioEffectX [virtual]
+ updateDisplay ()AudioEffectX [virtual]
+ updateSampleRate ()AudioEffectX [virtual]
+ vendorSpecific (VstInt32 lArg, VstIntPtr lArg2, void *ptrArg, float floatArg)AudioEffectX [inline, virtual]
+ ~AudioEffect ()AudioEffect [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/class_audio_effect_x.html b/doc/html/class_audio_effect_x.html
new file mode 100644
index 0000000..efaadc5
--- /dev/null
+++ b/doc/html/class_audio_effect_x.html
@@ -0,0 +1,2406 @@
+
+
+VST SDK 2.4: AudioEffectX Class Reference
+
+
+
+
+
+
+AudioEffectX Class Reference #include <audioeffectx.h>
+
+
Inheritance diagram for AudioEffectX:
+
+
+
+
+List of all members.
+
+Public Member Functions
+ AudioEffectX (audioMasterCallback audioMaster , VstInt32 numPrograms , VstInt32 numParams )
+
+ Create an AudioEffectX object.
+
+virtual bool canParameterBeAutomated (VstInt32 index)
+
+ Indicates if a parameter can be automated.
+virtual bool string2parameter (VstInt32 index, char *text)
+
+ Convert a string representation to a parameter value.
+virtual bool getParameterProperties (VstInt32 index, VstParameterProperties *p)
+
+ Return parameter properties.
+virtual bool beginEdit (VstInt32 index)
+
+ To be called before setParameterAutomated (on Mouse Down). This will be used by the Host for specific Automation Recording.
+virtual bool endEdit (VstInt32 index)
+
+ To be called after setParameterAutomated (on Mouse Up).
+
+virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char *text)
+
+ Fill text with name of program index (category deprecated in VST 2.4).
+virtual bool beginSetProgram ()
+
+ Called before a program is loaded.
+virtual bool endSetProgram ()
+
+ Called after a program was loaded.
+virtual VstInt32 beginLoadBank (VstPatchChunkInfo *ptr)
+
+ Called before a Bank is loaded.
+virtual VstInt32 beginLoadProgram (VstPatchChunkInfo *ptr)
+
+ Called before a Program is loaded. (called before beginSetProgram ).
+
+virtual bool ioChanged ()
+
+ Tell Host numInputs and/or numOutputs and/or initialDelay (and/or numParameters: to be avoid) have changed.
+virtual double updateSampleRate ()
+
+ Returns sample rate from Host (may issue setSampleRate() ).
+virtual VstInt32 updateBlockSize ()
+
+ Returns block size from Host (may issue getBlockSize() ).
+virtual VstInt32 getInputLatency ()
+
+ Returns the Audio (maybe ASIO) input latency values.
+virtual VstInt32 getOutputLatency ()
+
+ Returns the Audio (maybe ASIO) output latency values.
+virtual bool getInputProperties (VstInt32 index, VstPinProperties *properties)
+
+ Return the properties of output index .
+virtual bool getOutputProperties (VstInt32 index, VstPinProperties *properties)
+
+ Return the properties of input index .
+virtual bool setSpeakerArrangement (VstSpeakerArrangement *pluginInput, VstSpeakerArrangement *pluginOutput)
+
+ Set the plug-in's speaker arrangements.
+virtual bool getSpeakerArrangement (VstSpeakerArrangement **pluginInput, VstSpeakerArrangement **pluginOutput)
+
+ Return the plug-in's speaker arrangements.
+virtual bool setBypass (bool onOff)
+
+ For 'soft-bypass' (this could be automated (in Audio Thread) that why you could NOT call iochanged (if needed) in this function, do it in fxidle).
+virtual bool setPanLaw (VstInt32 type, float val)
+
+ Set the Panning Law used by the Host.
+virtual bool setProcessPrecision (VstInt32 precision)
+
+ Set floating-point precision used for processing (32 or 64 bit).
+virtual VstInt32 getNumMidiInputChannels ()
+
+ Returns number of MIDI input channels used [0, 16].
+virtual VstInt32 getNumMidiOutputChannels ()
+
+ Returns number of MIDI output channels used [0, 16].
+
+virtual VstTimeInfo * getTimeInfo (VstInt32 filter)
+
+ Get time information from Host.
+virtual VstInt32 getCurrentProcessLevel ()
+
+ Returns the Host's process level.
+virtual VstInt32 getAutomationState ()
+
+ Returns the Host's automation state.
+virtual VstInt32 processEvents (VstEvents *events)
+
+ Called when new MIDI events come in.
+bool sendVstEventsToHost (VstEvents *events)
+
+ Send MIDI events back to Host application.
+virtual VstInt32 startProcess ()
+
+ Called one time before the start of process call. This indicates that the process call will be interrupted (due to Host reconfiguration or bypass state when the plug-in doesn't support softBypass).
+virtual VstInt32 stopProcess ()
+
+ Called after the stop of process call.
+
+virtual bool processVariableIo (VstVariableIo *varIo)
+
+ Used for variable I/O processing (offline processing like timestreching).
+virtual VstInt32 setTotalSampleToProcess (VstInt32 value)
+
+ Called in offline mode before process() or processVariableIo ().
+
+virtual bool getHostVendorString (char *text)
+
+ Fills text with a string identifying the vendor.
+virtual bool getHostProductString (char *text)
+
+ Fills text with a string with product name.
+virtual VstInt32 getHostVendorVersion ()
+
+ Returns vendor-specific version (for example 3200 for Nuendo 3.2).
+virtual VstIntPtr hostVendorSpecific (VstInt32 lArg1, VstIntPtr lArg2, void *ptrArg, float floatArg)
+
+ No specific definition.
+virtual VstInt32 canHostDo (char *text)
+
+ Reports what the Host is able to do (hostCanDos in audioeffectx.cpp ).
+virtual VstInt32 getHostLanguage ()
+
+ Returns the Host's language (VstHostLanguage ).
+
+virtual void isSynth (bool state=true)
+
+ Set if plug-in is a synth.
+virtual void noTail (bool state=true)
+
+ Plug-in won't produce output signals while there is no input.
+virtual VstInt32 getGetTailSize ()
+
+ Returns tail size; 0 is default (return 1 for 'no tail'), used in offline processing too.
+virtual void * getDirectory ()
+
+ Returns the plug-in's directory.
+virtual bool getEffectName (char *name)
+
+ Fill text with a string identifying the effect.
+virtual bool getVendorString (char *text)
+
+ Fill text with a string identifying the vendor.
+virtual bool getProductString (char *text)
+
+ Fill text with a string identifying the product name.
+virtual VstInt32 getVendorVersion ()
+
+ Return vendor-specific version.
+virtual VstIntPtr vendorSpecific (VstInt32 lArg, VstIntPtr lArg2, void *ptrArg, float floatArg)
+
+ No definition, vendor specific handling.
+virtual VstInt32 canDo (char *text)
+
+ Reports what the plug-in is able to do (plugCanDos in audioeffectx.cpp ).
+virtual VstInt32 getVstVersion ()
+
+ Returns the current VST Version (kVstVersion ).
+virtual VstPlugCategory getPlugCategory ()
+
+ Specify a category that fits the plug (VstPlugCategory ).
+
+virtual VstInt32 getMidiProgramName (VstInt32 channel, MidiProgramName *midiProgramName)
+
+ Fill midiProgramName with information for 'thisProgramIndex'.
+virtual VstInt32 getCurrentMidiProgram (VstInt32 channel, MidiProgramName *currentProgram)
+
+ Fill currentProgram with information for the current MIDI program.
+virtual VstInt32 getMidiProgramCategory (VstInt32 channel, MidiProgramCategory *category)
+
+ Fill category with information for 'thisCategoryIndex'.
+virtual bool hasMidiProgramsChanged (VstInt32 channel)
+
+ Return true if the MidiProgramNames, MidiKeyNames or MidiControllerNames had changed on this MIDI channel.
+virtual bool getMidiKeyName (VstInt32 channel, MidiKeyName *keyName)
+
+ Fill keyName with information for 'thisProgramIndex' and 'thisKeyNumber'.
+
+virtual bool updateDisplay ()
+
+ Something has changed in plug-in, request an update display like program (MIDI too) and parameters list in Host.
+virtual bool sizeWindow (VstInt32 width, VstInt32 height)
+
+ Requests to resize the editor window.
+virtual bool openFileSelector (VstFileSelect *ptr)
+
+ Open a Host File selector (see aeffectx.h for VstFileSelect definition).
+virtual bool closeFileSelector (VstFileSelect *ptr)
+
+ Close the Host File selector which was opened by openFileSelector .
+virtual VstInt32 getNextShellPlugin (char *name)
+
+ This opcode is only called, if the plug-in is of type kPlugCategShell , in order to extract all included sub-plugin´s names.
+
+virtual bool allocateArrangement (VstSpeakerArrangement **arrangement, VstInt32 nbChannels)
+
+ Allocate memory for a VstSpeakerArrangement .
+virtual bool deallocateArrangement (VstSpeakerArrangement **arrangement)
+
+ Delete/free memory for an allocated speaker arrangement.
+virtual bool copySpeaker (VstSpeakerProperties *to, VstSpeakerProperties *from)
+
+ Copy properties from to to .
+virtual bool matchArrangement (VstSpeakerArrangement **to, VstSpeakerArrangement *from)
+
+ "to" is deleted, then created and initialized with the same values as "from" ones ("from" must exist).
+
+Detailed Description
+Extended VST Effect Class (VST 2.x).
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+ AudioEffectX::AudioEffectX
+ (
+ audioMasterCallback
+ audioMaster ,
+
+
+
+
+ VstInt32
+ numPrograms ,
+
+
+
+
+ VstInt32
+ numParams
+
+
+
+ )
+
+
+
+
+
+
+
Member Function Documentation
+
+
+
+
+
+ bool AudioEffectX::allocateArrangement
+ (
+ VstSpeakerArrangement **
+ arrangement ,
+
+
+
+
+ VstInt32
+ nbChannels
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+ bool AudioEffectX::beginEdit
+ (
+ VstInt32
+ index
+ )
+ [virtual]
+
+
+
+
+
+
+To be called before setParameterAutomated (on Mouse Down). This will be used by the Host for specific Automation Recording.
+
+It tells the Host that if it needs to, it has to record automation data for this control.
+
Parameters:
+
+ index Index of the parameter
+
+
+
Returns: Returns true on success
+
See also: endEdit()
+
+
+
+
+
+
+
+
+
+Called before a Bank is loaded.
+
+
Parameters:
+
+
+
Returns:
+-1: if the Bank cannot be loaded, 1: if it can be loaded 0: else (for compatibility)
+
+
See also: beginLoadProgram()
+
+
+
+
+
+
+
+
+
+Called before a Program is loaded. (called before beginSetProgram ).
+
+
Parameters:
+
+
+
Returns:
+-1: if the Program cannot be loaded, 1: it can be loaded else, 0: else (for compatibility)
+
+
See also: beginLoadBank()
+
+
+
+
+
+
+
+
+ bool AudioEffectX::beginSetProgram
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called before a program is loaded.
+
+
Returns:
+true: the plug-in took the notification into account false: it did not...
+
+
See also: endSetProgram()
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::canDo
+ (
+ char *
+ text
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Reports what the plug-in is able to do (plugCanDos in audioeffectx.cpp ).
+
+Report what the plug-in is able to do. In general you can but don't have to report whatever you support or not support via canDo. Some application functionality may require some specific reply, but in that case you will probably know. Best is to report whatever you know for sure. A Host application cannot make assumptions about the presence of the new 2.x features of a plug-in. Ignoring this inquiry methods and trying to access a 2.x feature from a 1.0 plug, or vice versa, will mean the plug-in or Host application will break. It is not the end-users job to pick and choose which plug-ins can be supported by which Host.
+
Parameters:
+
+ text A string from plugCanDos
+
+
+
Returns:
+0: don't know (default) 1: yes -1: no
+
+
Note: This should be supported.
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::canHostDo
+ (
+ char *
+ text
+ )
+ [virtual]
+
+
+
+
+
+
+Reports what the Host is able to do (hostCanDos in audioeffectx.cpp ).
+
+Asks Host if it implements the feature text. A plug-in cannot assume a 2.x feature is available from the Host. Use this method to ascertain the environment in which the plug-in finds itself. Ignoring this inquiry methods and trying to access a 2.x feature in a 1.0 Host will mean your plug-in or Host application will break. It is not the end-users job to pick and choose which plug-ins can be supported by which Host.
+
Parameters:
+
+ text A string from hostCanDos
+
+
+
Returns:
+0 : don't know (default) 1 : yes -1: no
+
+
+
+
+
+
+
+
+
+ bool AudioEffectX::canParameterBeAutomated
+ (
+ VstInt32
+ index
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Indicates if a parameter can be automated.
+
+Obviously only useful when the application supports this.
+
Parameters:
+
+ index Index of the parameter
+
+
+
Returns: if supported
+
+
+
+
+
+
+
+
+ bool AudioEffectX::closeFileSelector
+ (
+ VstFileSelect *
+ ptr
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+Copy properties from to to .
+
+Feed the to speaker properties with the same values than from 's ones. It is assumed here that to exists yet, ie this function won't allocate memory for the speaker (this will prevent from having a difference between an Arrangement's number of channels and its actual speakers...)
+
Parameters:
+
+
+
Returns: Returns true on success
+
See also: allocateArrangement() , deallocateArrangement() , matchArrangement()
+
+
+
+
+
+
+
+
+ bool AudioEffectX::deallocateArrangement
+ (
+ VstSpeakerArrangement **
+ arrangement
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+ bool AudioEffectX::endEdit
+ (
+ VstInt32
+ index
+ )
+ [virtual]
+
+
+
+
+
+
+To be called after setParameterAutomated (on Mouse Up).
+
+It notifies the Host that this control is no longer moved by the mouse.
+
Parameters:
+
+ index Index of the parameter
+
+
+
Returns: Returns true on success
+
See also: beginEdit()
+
+
+
+
+
+
+
+
+ bool AudioEffectX::endSetProgram
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called after a program was loaded.
+
+
Returns:
+true: the plug-in took the notification into account false: it did not...
+
+
See also: beginSetProgram()
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::getAutomationState
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+Fill currentProgram with information for the current MIDI program.
+
+
Parameters:
+
+ channel
+ currentProgram
+
+
+
Returns:
+programIndex of the current program -1 if not supported
+
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::getCurrentProcessLevel
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Returns the Host's process level.
+
+A plug-in is like a black box processing some audio coming in on some inputs (if any) and going out of some outputs (if any). This may be used to do offline or real-time processing, and sometimes it may be desirable to know the current context.
+
Returns: VstProcessLevels in aeffectx.h
+
+
+
+
+
+
+
+
+ void * AudioEffectX::getDirectory
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Returns the plug-in's directory.
+
+
Returns: FSSpec on MAC, else char*
+
+
+
+
+
+
+
+
+ bool AudioEffectX::getEffectName
+ (
+ char *
+ name
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Fill text with a string identifying the effect.
+
+
Parameters:
+
+ name A string up to 32 chars
+
+
+
Returns: true on success
+
+
+
+
+
+
+
+
+ virtual VstInt32 AudioEffectX::getGetTailSize
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Returns tail size; 0 is default (return 1 for 'no tail'), used in offline processing too.
+
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::getHostLanguage
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+ bool AudioEffectX::getHostProductString
+ (
+ char *
+ text
+ )
+ [virtual]
+
+
+
+
+
+
+Fills text with a string with product name.
+
+
Parameters:
+
+ text String of maximum 64 char
+
+
+
Returns: true if supported
+
+
+
+
+
+
+
+
+ bool AudioEffectX::getHostVendorString
+ (
+ char *
+ text
+ )
+ [virtual]
+
+
+
+
+
+
+Fills text with a string identifying the vendor.
+
+
Parameters:
+
+ text String of maximum 64 char
+
+
+
Returns: true if supported
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::getHostVendorVersion
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Returns vendor-specific version (for example 3200 for Nuendo 3.2).
+
+
Returns: Host vendor version
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::getInputLatency
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Returns the Audio (maybe ASIO) input latency values.
+
+
Returns: ASIO input latency
+
See also: getOutputLatency()
+
+
+
+
+
+
+
+
+ bool AudioEffectX::getInputProperties
+ (
+ VstInt32
+ index ,
+
+
+
+
+ VstPinProperties *
+ properties
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Return the properties of output index .
+
+
Parameters:
+
+ index The index to the input, starting with 0
+ properties A pointer to a VstPinProperties structure
+
+
+
Returns: true on success
+
See also: getOutputProperties()
+
Note: Example
+ bool MyPlug::getInputProperties (VstInt32 index, VstPinProperties* properties)
+ {
+ bool returnCode = false;
+ if (index < kNumInputs)
+ {
+ sprintf (properties->label, "My %1d In", index + 1);
+ properties->flags = kVstPinIsStereo | kVstPinIsActive;
+ returnCode = true;
+ }
+ return returnCode;
+ }
+
+
+
+
+
+
+
+
+
+ bool AudioEffectX::getMidiKeyName
+ (
+ VstInt32
+ channel ,
+
+
+
+
+ MidiKeyName *
+ keyName
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Fill keyName with information for 'thisProgramIndex' and 'thisKeyNumber'.
+
+
Parameters:
+
+ channel
+ keyName If keyName is "" the standard name of the key will be displayed
+
+
+
Returns: Return false if no MidiKeyNames defined for 'thisProgramIndex'
+
+
+
+
+
+
+
+
+
+Fill category with information for 'thisCategoryIndex'.
+
+
Parameters:
+
+
+
Returns:
+
+
+
+
+
+
+
+
+
+
+Fill midiProgramName with information for 'thisProgramIndex'.
+
+Ask plug-in if MidiPrograms are used and if so, query for names, numbers (ProgramChange-Number + BankSelect-Number), categories and keynames of each MIDI Program, on each MIDI-channel. If this function is called, your plug-in has to read MidiProgramName::thisProgramIndex , fill out the other fields with the information assigned to a certain MIDI Program and return the number of available MIDI Programs on that MIDI Channel.
+
Note: plug-in canDo "midiProgramNames". No effect, if 0 is returned.
+
Warning: don't mix concepts: the MIDI Programs are totally independent from all other programs present in VST. The main difference is, that there are upto 16 simultaneous active MIDI Programs (one per channel), while there can be only one active "VST"-Program. (You should see the "VST"-Program as the one single main global program, which contains the entire current state of the plug-in.) This function can be called in any sequence.
+
Parameters:
+
+ channel MidiChannel: 0-15
+ midiProgramName Points to MidiProgramName struct
+
+
+
Returns: Number of available MIDI Programs on that channel
+number of used programIndexes 0 if no MidiProgramNames supported
+
+
Note: Example : plug-in has 3 MidiPrograms on MidiChannel 0.
+ Host calls getMidiProgramName with idx = 0 and MidiProgramName::thisProgramIndex = 0.
+ Plug fills out:
+ MidiProgramName::name [64] = "Program A"
+ MidiProgramName::midiProgram = 0
+ MidiProgramName::midiBankMsb = -1
+ MidiProgramName::midiBankLsb = -1
+ MidiProgramName::parentCategoryIndex = -1
+ MidiProgramName::flags = 0 (if plug isn't "Omni").
+ Plug returns 3.
+ Host calls getMidiProgramName with idx = 0 and MidiProgramName::thisProgramIndex = 1.
+ Plug fills out:
+ MidiProgramName::name [64] = "Program B"
+ MidiProgramName::midiProgram = 1
+ MidiProgramName::midiBankMsb = -1
+ MidiProgramName::midiBankLsb = -1
+ MidiProgramName::parentCategoryIndex = -1
+ MidiProgramName::flags = 0 (if plug isn't "Omni").
+ Plug returns 3.
+ Host calls getMidiProgramName with idx = 0 and MidiProgramName::thisProgramIndex = 2.
+ Plug fills out:
+ MidiProgramName::name [64] = "Program C"
+ MidiProgramName::midiProgram = 2
+ MidiProgramName::midiBankMsb = -1
+ MidiProgramName::midiBankLsb = -1
+ MidiProgramName::parentCategoryIndex = -1
+ MidiProgramName::flags = 0 (if plug isn't "Omni").
+ Plug returns 3.
+
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::getNextShellPlugin
+ (
+ char *
+ name
+ )
+ [inline, virtual]
+
+
+
+
+
+
+This opcode is only called, if the plug-in is of type kPlugCategShell , in order to extract all included sub-plugin´s names.
+
+
Parameters:
+
+ name Points to a char buffer of size 64, which is to be filled with the name of the plug-in including the terminating zero
+
+
+
Returns: Return the next plug-in's uniqueID
+
Note: Example of Implementation
+ //---From the Host side : if found plugin is a Shell category-----------
+ if (effect->getCategory () == kPlugCategShell)
+ {
+ // scan shell for subplugins
+ char tempName[64] = {0};
+ VstInt32 plugUniqueID = 0;
+ while ((plugUniqueID = effect->dispatchEffect (effShellGetNextPlugin, 0, 0, tempName)) != 0)
+ {
+ // subplug needs a name
+ if (tempName[0] != 0)
+ {
+ ...do what you want with this tempName and plugUniqueID
+ }
+ }
+ }
+ //---From the Host side : Intanciate a subplugin of a shell plugin---
+ // retreive the uniqueID of this subplugin the host wants to load
+ // set it to the host currentID
+ currentID = subplugInfo->uniqueID;
+ // call the its shell plugin (main function)
+ main ();
+ // the shell plugin will ask for the currentUniqueID
+ // and should return the chosen subplugin
+ ...
+ //---From the plugin-Shell Side: for enumeration of subplugins---------
+ category = kPlugCategShell;
+ ->can ask the host if "shellCategory" is supported
+ // at start (instanciation) reset the index for the getNextShellPlugin call.
+ myPluginShell::index = 0;
+ // implementation of getNextShellPlugin (char* name);
+ VstInt32 myPluginShell::getNextShellPlugin (char* name)
+ {
+ strcpy (name, MyNameTable[index]);
+ return MyUniqueIDTable[index++];
+ }
+ ....
+ //---From the plugin-Shell Side: when instanciation-----
+ VstInt32 uniqueID = host->getCurrentUniqueID ();
+ if (uniqueID == 0) // the host instanciates the shell
+ {}
+ else // host try to instanciate one of my subplugin...identified by the uniqueID
+ {}
+
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::getNumMidiInputChannels
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Returns number of MIDI input channels used [0, 16].
+
+Called by the host application to determine how many MIDI input channels are actually used by a plugin e.g. to hide unused channels from the user. For compatibility with VST 2.3 and below, the default return value 0 means 'not implemented' - in this case the host assumes 16 MIDI channels to be present (or none at all).
+
Returns: Number of MIDI input channels: 1-15, otherwise: 16 or no MIDI channels at all (0)
+
Note: The VST 2.x protocol is limited to a maximum of 16 MIDI channels as defined by the MIDI Standard. This might change in future revisions of the API.
+
See also: getNumMidiOutputChannels()
+ PlugCanDos::canDoReceiveVstMidiEvent
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::getNumMidiOutputChannels
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Returns number of MIDI output channels used [0, 16].
+
+Called by the host application to determine how many MIDI output channels are actually used by a plugin e.g. to hide unused channels from the user. For compatibility with VST 2.3 and below, the default return value 0 means 'not implemented' - in this case the host assumes 16 MIDI channels to be present (or none at all).
+
Returns: Number of MIDI output channels: 1-15, otherwise: 16 or no MIDI channels at all (0)
+
Note: The VST 2.x protocol is limited to a maximum of 16 MIDI channels as defined by the MIDI Standard. This might change in future revisions of the API.
+
See also: getNumMidiInputChannels()
+ PlugCanDos::canDoSendVstMidiEvent
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::getOutputLatency
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Returns the Audio (maybe ASIO) output latency values.
+
+While inputLatency is probably not of concern, outputLatency may be used in conjunction with getTimeInfo() . samplePos of VstTimeInfo is ahead of the 'visual' sequencer play time by the output latency, such that when outputLatency samples have passed by, our processing result becomes audible.
+
Returns: ASIO output latency
+
See also: getInputLatency()
+
+
+
+
+
+
+
+
+ bool AudioEffectX::getOutputProperties
+ (
+ VstInt32
+ index ,
+
+
+
+
+ VstPinProperties *
+ properties
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Return the properties of input index .
+
+
Parameters:
+
+ index The index to the output, starting with 0
+ properties A pointer to a VstPinProperties structure
+
+
+
Returns: true on success
+
See also: getInputProperties()
+
Note: Example 1
+ bool MyPlug::getOutputProperties (VstInt32 index, VstPinProperties* properties)
+ {
+ bool returnCode = false;
+ if (index < kNumOutputs)
+ {
+ sprintf (properties->label, "My %1d Out", index + 1);
+ properties->flags = kVstPinIsStereo | kVstPinIsActive;
+ returnCode = true;
+ }
+ return (returnCode);
+ }
+
+Example 2 : plug-in with 1 mono, 1 stereo and one 5.1 outputs (kNumOutputs = 9):
+ bool MyPlug::getOutputProperties (VstInt32 index, VstPinProperties* properties)
+ {
+ bool returnCode = false;
+ if (index >= 0 && index < kNumOutputs)
+ {
+ properties->flags = kVstPinIsActive;
+ if (index == 0) // mono
+ {
+ strcpy (properties->label, "Mono Out");
+ properties->arrangementType = kSpeakerArrMono;
+ }
+ else if (index == 1) // stereo (1 -> 2)
+ {
+ strcpy (properties->label, "Stereo Out");
+ properties->flags |= kVstPinIsStereo;
+ properties->arrangementType = kSpeakerArrStereo;
+ }
+ else if (index >= 3) // 5.1 (3 -> 8)
+ {
+ strcpy (properties->label, "5.1 Out");
+ properties->flags |= kVstPinUseSpeaker;
+ properties->arrangementType = kSpeakerArr51;
+for old VST Host < 2.3, make 5.1 to stereo/mono/mono/stereo (L R C Lfe Ls Rs)
+ if (index == 3 || index == 7)
+ properties->flags |= kVstPinIsStereo;
+ if (index == 5)
+ strcpy (properties->label, "Center");
+ else if (index == 6)
+ strcpy (properties->label, "Lfe");
+ else if (index == 7) // (7 -> 8)
+ strcpy (properties->label, "Stereo Back");
+ }
+ returnCode = true;
+ }
+ return returnCode;
+ }
+
+
+
+
+
+
+
+
+
+
+Return parameter properties.
+
+
Parameters:
+
+
+
Returns: Return true on success
+
+
+
+
+
+
+
+
+ VstPlugCategory AudioEffectX::getPlugCategory
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Specify a category that fits the plug (VstPlugCategory ).
+
+
Returns: Plug-in's category defined in VstPlugCategory
+
+
+
+
+
+
+
+
+ bool AudioEffectX::getProductString
+ (
+ char *
+ text
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Fill text with a string identifying the product name.
+
+
Parameters:
+
+ text A string up to 64 chars
+
+
+
Returns: true on success
+
+
+
+
+
+
+
+
+ bool AudioEffectX::getProgramNameIndexed
+ (
+ VstInt32
+ category ,
+
+
+
+
+ VstInt32
+ index ,
+
+
+
+
+ char *
+ text
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Fill text with name of program index (category deprecated in VST 2.4).
+
+Allows a Host application to list the plug-in's programs (presets).
+
Parameters:
+
+ category unused in VST 2.4
+ index Index of the program in a given category, starting with 0.
+ text A string up to 24 chars.
+
+
+
Returns: true on success
+
+
+
+
+
+
+
+
+
+
+
+Get time information from Host.
+
+A plug-in will request time info by calling the function getTimeInfo() which returns a VstTimeInfo pointer (or NULL if not implemented by the Host). The mask parameter is composed of the same flags which will be found in the flags field of VstTimeInfo when returned, that is, if you need information about tempo. The parameter passed to getTimeInfo() should have the kVstTempoValid flag set. This request and delivery system is important, as a request like this may cause significant calculations at the application's end, which may take a lot of our precious time. This obviously means you should only set those flags that are required to get the information you need. Also please be aware that requesting information does not necessarily mean that that information is provided in return. Check the flags field in the VstTimeInfo structure to see if your request was actually met.
+
Parameters:
+
+ filter A mask indicating which fields are requested, as some items may require extensive conversions. See the flags in VstTimeInfo
+
+
+
Returns: A pointer to a VstTimeInfo structure or NULL if not implemented by the Host
+
+
+
+
+
+
+
+
+ bool AudioEffectX::getVendorString
+ (
+ char *
+ text
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Fill text with a string identifying the vendor.
+
+
Parameters:
+
+ text A string up to 64 chars
+
+
+
Returns: true on success
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::getVendorVersion
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Return vendor-specific version.
+
+
Returns: The version of the plug-in
+
Note: This should be upported
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::getVstVersion
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Returns the current VST Version (kVstVersion ).
+
+
Returns:
+2xxx : the last VST 2.x plug-in version (by default) 0 : older versions
+
+
+
+
+
+
+
+
+
+ bool AudioEffectX::hasMidiProgramsChanged
+ (
+ VstInt32
+ channel
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Return true if the MidiProgramNames, MidiKeyNames or MidiControllerNames had changed on this MIDI channel.
+
+Ask plug-in for the currently active program on a certain MIDI Channel. Just like getMidiProgramName() , but MidiProgramName::thisProgramIndex has to be filled out with the currently active MIDI Program-index, which also has to be returned.
+
Parameters:
+
+
+
Returns:
+true: if the MidiProgramNames, MidiKeyNames or MidiControllerNames had changed on this channel
+
+
+
+
+
+
+
+
+
+ VstIntPtr AudioEffectX::hostVendorSpecific
+ (
+ VstInt32
+ lArg1 ,
+
+
+
+
+ VstIntPtr
+ lArg2 ,
+
+
+
+
+ void *
+ ptrArg ,
+
+
+
+
+ float
+ floatArg
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+No specific definition.
+
+
+
+
+
+
+
+
+
+ bool AudioEffectX::ioChanged
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+ void AudioEffectX::isSynth
+ (
+ bool
+ state = true
+ )
+ [virtual]
+
+
+
+
+
+
+Set if plug-in is a synth.
+
+Tells the Host that the plug-in is an instrument, i.e. that it will call wantEvents().
+
Parameters:
+
+ state
+true: is an instrument (default) false: is a simple audio effect
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void AudioEffectX::noTail
+ (
+ bool
+ state = true
+ )
+ [virtual]
+
+
+
+
+
+
+Plug-in won't produce output signals while there is no input.
+
+Enables Host to omit processReplacing() when no data is present on any input.
+
+
+
+
+
+
+
+ bool AudioEffectX::openFileSelector
+ (
+ VstFileSelect *
+ ptr
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::processEvents
+ (
+ VstEvents *
+ events
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called when new MIDI events come in.
+
+
Returns: return value is ignored
+
Remarks: Events are always related to the current audio block. For each process cycle, processEvents() is called once before a processReplacing() call (if new events are available).
+
See also: VstEvents , VstMidiEvent
+
+
+
+
+
+
+
+
+ bool AudioEffectX::processVariableIo
+ (
+ VstVariableIo *
+ varIo
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Used for variable I/O processing (offline processing like timestreching).
+
+If called with varIo NULL, returning true indicates that this call is supported by the plug-in. Host will use processReplacing otherwise. The Host should call setTotalSampleToProcess before starting the processIO to inform the plug-in about how many samples will be processed in total. The Host should provide an output buffer at least 5 times bigger than input buffer.
+
Parameters:
+
+
+
Returns: on success
+
+
+
+
+
+
+
+
+ bool AudioEffectX::sendVstEventsToHost
+ (
+ VstEvents *
+ events
+ )
+
+
+
+
+
+
+
+Send MIDI events back to Host application.
+
+Can be called inside processReplacing.
+
Parameters:
+
+ events Fill with VST events
+
+
+
Returns: Returns true on success
+
+
+
+
+
+
+
+
+ bool AudioEffectX::setBypass
+ (
+ bool
+ onOff
+ )
+ [inline, virtual]
+
+
+
+
+
+
+For 'soft-bypass' (this could be automated (in Audio Thread) that why you could NOT call iochanged (if needed) in this function, do it in fxidle).
+
+process still called (if Supported) although the plug-in was bypassed. Some plugs need to stay 'alive' even when bypassed. An example is a surround decoder which has more inputs than outputs and must maintain some reasonable signal distribution even when being bypassed. A CanDo 'bypass' allows to ask the plug-in if it supports soft bypass or not.
+
Note: This bypass feature could be automated by the Host (this means avoid to much CPU requirement in this call)
+If the plug-in supports SoftBypass and it has a latency (initialDelay), in Bypassed state the plug-in has to used the same latency value.
+
Parameters:
+
+
+
Returns:
+true: supports SoftBypass, process will be called, the plug-in should compensate its latency, and copy inputs to outputs false: doesn't support SoftBypass, process will not be called, the Host should bypass the process call
+
+
See also: processReplacing()
+
+
+
+
+
+
+
+
+ bool AudioEffectX::setPanLaw
+ (
+ VstInt32
+ type ,
+
+
+
+
+ float
+ val
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Set the Panning Law used by the Host.
+
+
See also: VstPanLawType .
+
+
+
+
+
+
+
+
+ bool AudioEffectX::setProcessPrecision
+ (
+ VstInt32
+ precision
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Set floating-point precision used for processing (32 or 64 bit).
+
+Is called in suspended state, similar to setBlockSize . Default (if not called) is single precision float.
+
Parameters:
+
+ precision kVstProcessPrecision32 or kVstProcessPrecision64
+
+
+
Returns: Returns true on success
+
See also: VstProcessPrecision
+
+
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::setTotalSampleToProcess
+ (
+ VstInt32
+ value
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called in offline mode before process() or processVariableIo ().
+
+It indicates how many samples will be processed in total.
+
Parameters:
+
+ value Number of samples to process
+
+
+
+
+
+
+
+
+
+
+ bool AudioEffectX::sizeWindow
+ (
+ VstInt32
+ width ,
+
+
+
+
+ VstInt32
+ height
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+Requests to resize the editor window.
+
+
Parameters:
+
+ width The window's width in pixel
+ height The window's height in pixel
+
+
+
Returns: true on success
+
+
+
+
+
+
+
+
+ virtual VstInt32 AudioEffectX::startProcess
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called one time before the start of process call. This indicates that the process call will be interrupted (due to Host reconfiguration or bypass state when the plug-in doesn't support softBypass).
+
+
+
+
+
+
+
+
+
+ virtual VstInt32 AudioEffectX::stopProcess
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Called after the stop of process call.
+
+
+
+
+
+
+
+
+
+ bool AudioEffectX::string2parameter
+ (
+ VstInt32
+ index ,
+
+
+
+
+ char *
+ text
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Convert a string representation to a parameter value.
+
+Especially useful for plug-ins without user interface. The application can then implement a text edit field for the user to set a parameter by entering text.
+
Parameters:
+
+ index Index of the parameter
+ text A textual description of the parameter's value. A NULL pointer is used to check the capability (return true).
+
+
+
Returns: true on success
+
Note: Implies setParameter (). text==0 is to be expected to check the capability (returns true)
+
+
+
+
+
+
+
+
+ VstInt32 AudioEffectX::updateBlockSize
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Returns block size from Host (may issue getBlockSize() ).
+
+
Returns: The Host's block size
+
Note: Will cause application to call AudioEffect's setSampleRate() to be called (when implemented).
+
+
+
+
+
+
+
+
+ bool AudioEffectX::updateDisplay
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Something has changed in plug-in, request an update display like program (MIDI too) and parameters list in Host.
+
+
Returns: true if supported
+
+
+
+
+
+
+
+
+ double AudioEffectX::updateSampleRate
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Returns sample rate from Host (may issue setSampleRate() ).
+
+
Returns: The Host's sample rate
+
+
+
+
+
+
+
+
+ virtual VstIntPtr AudioEffectX::vendorSpecific
+ (
+ VstInt32
+ lArg ,
+
+
+
+
+ VstIntPtr
+ lArg2 ,
+
+
+
+
+ void *
+ ptrArg ,
+
+
+
+
+ float
+ floatArg
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+No definition, vendor specific handling.
+
+
+
+
+
The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/class_audio_effect_x.png b/doc/html/class_audio_effect_x.png
new file mode 100644
index 0000000..f41299c
Binary files /dev/null and b/doc/html/class_audio_effect_x.png differ
diff --git a/doc/html/deprecated.html b/doc/html/deprecated.html
new file mode 100644
index 0000000..9f80a33
--- /dev/null
+++ b/doc/html/deprecated.html
@@ -0,0 +1,289 @@
+
+
+VST SDK 2.4: Deprecated List
+
+
+
+
+
+
+Member AEffect::ioRatio
+unused member
+
+
+
+Member AEffect::offQualities
+unused member
+
+
+
+Member AEffect::process
+Accumulating process mode is deprecated in VST 2.4! Use AEffect::processReplacing instead!
+
+
+
+Member AEffect::realQualities
+unused member
+
+
+
+Class VstWindow
+Structure used for openWindow and closeWindow (deprecated in VST 2.4).
+
+
+
+Member effGetVu
+deprecated in VST 2.4
+
+
+
+Member effEditDraw
+deprecated in VST 2.4
+
+
+
+Member effEditMouse
+deprecated in VST 2.4
+
+
+
+Member effEditKey
+deprecated in VST 2.4
+
+
+
+Member effEditTop
+deprecated in VST 2.4
+
+
+
+Member effEditSleep
+deprecated in VST 2.4
+
+
+
+Member effIdentify
+deprecated in VST 2.4
+
+
+
+Member audioMasterPinConnected
+deprecated in VST 2.4 r2
+
+
+
+Member effFlagsHasClip
+deprecated in VST 2.4
+
+
+
+Member effFlagsHasVu
+deprecated in VST 2.4
+
+
+
+Member effFlagsCanMono
+deprecated in VST 2.4
+
+
+
+Member effFlagsExtIsAsync
+deprecated in VST 2.4
+
+
+
+Member effFlagsExtHasBuffer
+deprecated in VST 2.4
+
+
+
+Member effGetNumProgramCategories
+deprecated in VST 2.4
+
+
+
+Member effCopyProgram
+deprecated in VST 2.4
+
+
+
+Member effConnectInput
+deprecated in VST 2.4
+
+
+
+Member effConnectOutput
+deprecated in VST 2.4
+
+
+
+Member effGetCurrentPosition
+deprecated in VST 2.4
+
+
+
+Member effGetDestinationBuffer
+deprecated in VST 2.4
+
+
+
+Member effSetBlockSizeAndSampleRate
+deprecated in VST 2.4
+
+
+
+Member effGetErrorText
+deprecated in VST 2.4
+
+
+
+Member effIdle
+deprecated in VST 2.4
+
+
+
+Member effGetIcon
+deprecated in VST 2.4
+
+
+
+Member effSetViewPosition
+deprecated in VST 2.4
+
+
+
+Member effKeysRequired
+deprecated in VST 2.4
+
+
+
+Member audioMasterWantMidi
+deprecated in VST 2.4
+
+
+
+Member audioMasterSetTime
+deprecated in VST 2.4
+
+
+
+Member audioMasterTempoAt
+deprecated in VST 2.4
+
+
+
+Member audioMasterGetNumAutomatableParameters
+deprecated in VST 2.4
+
+
+
+Member audioMasterGetParameterQuantization
+deprecated in VST 2.4
+
+
+
+Member audioMasterNeedIdle
+deprecated in VST 2.4
+
+
+
+Member audioMasterGetPreviousPlug
+deprecated in VST 2.4
+
+
+
+Member audioMasterGetNextPlug
+deprecated in VST 2.4
+
+
+
+Member audioMasterWillReplaceOrAccumulate
+deprecated in VST 2.4
+
+
+
+Member audioMasterSetOutputSampleRate
+deprecated in VST 2.4
+
+
+
+Member audioMasterGetOutputSpeakerArrangement
+deprecated in VST 2.4
+
+
+
+Member audioMasterSetIcon
+deprecated in VST 2.4
+
+
+
+Member audioMasterOpenWindow
+deprecated in VST 2.4
+
+
+
+Member audioMasterCloseWindow
+deprecated in VST 2.4
+
+
+
+Member audioMasterEditFile
+deprecated in VST 2.4
+
+
+
+Member audioMasterGetChunkFile
+deprecated in VST 2.4 [ptr]: char[2048] or sizeof (FSSpec) [return value]: 1 if supported
+
+
+
+Member audioMasterGetInputSpeakerArrangement
+deprecated in VST 2.4
+
+
+
+Member kVstAudioType
+unused event type
+
+
+
+Member kVstVideoType
+unused event type
+
+
+
+Member kVstParameterType
+unused event type
+
+
+
+Member kVstTriggerType
+unused event type
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/dir_2d3252dd12c84c66c1d25b26bb45a1f5.html b/doc/html/dir_2d3252dd12c84c66c1d25b26bb45a1f5.html
new file mode 100644
index 0000000..e30b73c
--- /dev/null
+++ b/doc/html/dir_2d3252dd12c84c66c1d25b26bb45a1f5.html
@@ -0,0 +1,55 @@
+
+
+VST SDK 2.4: G:/newbase/public.sdk/source/vst2.x/ Directory Reference
+
+
+
+
+
+
+vst2.x Directory Reference
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/dir_77c628dfee72e555f82d5ef53b733f38.html b/doc/html/dir_77c628dfee72e555f82d5ef53b733f38.html
new file mode 100644
index 0000000..bc53b37
--- /dev/null
+++ b/doc/html/dir_77c628dfee72e555f82d5ef53b733f38.html
@@ -0,0 +1,47 @@
+
+
+VST SDK 2.4: G:/newbase/pluginterfaces/vst2.x/ Directory Reference
+
+
+
+
+
+
+vst2.x Directory Reference
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/dir_f81105d3b854bea570aaf3bae5cb64c1.html b/doc/html/dir_f81105d3b854bea570aaf3bae5cb64c1.html
new file mode 100644
index 0000000..fbcfcce
--- /dev/null
+++ b/doc/html/dir_f81105d3b854bea570aaf3bae5cb64c1.html
@@ -0,0 +1,43 @@
+
+
+VST SDK 2.4: G:/newbase/public.sdk/source/ Directory Reference
+
+
+
+
+
+
+source Directory Reference
+
+Directories
+directory vst2.x
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/dir_fa0454ab79b4262333bf837ea3d765e9.html b/doc/html/dir_fa0454ab79b4262333bf837ea3d765e9.html
new file mode 100644
index 0000000..4d08986
--- /dev/null
+++ b/doc/html/dir_fa0454ab79b4262333bf837ea3d765e9.html
@@ -0,0 +1,43 @@
+
+
+VST SDK 2.4: G:/newbase/pluginterfaces/ Directory Reference
+
+
+
+
+
+
+pluginterfaces Directory Reference
+
+Directories
+directory vst2.x
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/dirs.html b/doc/html/dirs.html
new file mode 100644
index 0000000..e1949ba
--- /dev/null
+++ b/doc/html/dirs.html
@@ -0,0 +1,45 @@
+
+
+VST SDK 2.4: Directory Hierarchy
+
+
+
+
+
+VST SDK 2.4 Directories This directory hierarchy is sorted roughly, but not completely, alphabetically:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/doc_8h.html b/doc/html/doc_8h.html
new file mode 100644
index 0000000..6950ba5
--- /dev/null
+++ b/doc/html/doc_8h.html
@@ -0,0 +1,45 @@
+
+
+VST SDK 2.4: doc.h File Reference
+
+
+
+
+
+
+
+doc.h File Reference
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/doxygen.css b/doc/html/doxygen.css
new file mode 100644
index 0000000..5d58369
--- /dev/null
+++ b/doc/html/doxygen.css
@@ -0,0 +1,358 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+BODY,TD {
+ font-size: 90%;
+}
+H1 {
+ text-align: center;
+ font-size: 160%;
+}
+H2 {
+ font-size: 120%;
+}
+H3 {
+ font-size: 100%;
+}
+CAPTION { font-weight: bold }
+DIV.qindex {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.nav {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.navtab {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+TD.navtab {
+ font-size: 70%;
+}
+A.qindex {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D;
+}
+A.qindex:visited {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D
+}
+A.qindex:hover {
+ text-decoration: none;
+ background-color: #ddddff;
+}
+A.qindexHL {
+ text-decoration: none;
+ font-weight: bold;
+ background-color: #6666cc;
+ color: #ffffff;
+ border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+ text-decoration: none;
+ background-color: #6666cc;
+ color: #ffffff;
+}
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+.fragment {
+ font-family: monospace, fixed;
+ font-size: 95%;
+}
+PRE.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 2px;
+ margin-right: 8px;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+
+DIV.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+ background: white;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+TD.indexkey {
+ background-color: #e8eef2;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+ background-color: #e8eef2;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TR.memlist {
+ background-color: #f0f0f0;
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+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 }
+.mdescLeft {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.mdescRight {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.memItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplParams {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ color: #606060;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.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%;
+}
+a {
+ color: #1A41A8;
+}
+a:visited {
+ color: #2A3798;
+}
+.dirtab { padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #84b0c7;
+}
+TH.dirtab { background: #e8eef2;
+ font-weight: bold;
+}
+HR { height: 1px;
+ border: none;
+ border-top: 1px solid black;
+}
+
+/* Style for detailed member documentation */
+.memtemplate {
+ font-size: 80%;
+ color: #606060;
+ font-weight: normal;
+}
+.memnav {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+.memitem {
+ padding: 4px;
+ background-color: #eef3f5;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #dedeee;
+ -moz-border-radius: 8px 8px 8px 8px;
+}
+.memname {
+ white-space: nowrap;
+ font-weight: bold;
+}
+.memdoc{
+ padding-left: 10px;
+}
+.memproto {
+ background-color: #d5e1e8;
+ width: 100%;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #84b0c7;
+ font-weight: bold;
+ -moz-border-radius: 8px 8px 8px 8px;
+}
+.paramkey {
+ text-align: right;
+}
+.paramtype {
+ white-space: nowrap;
+}
+.paramname {
+ color: #602020;
+ font-style: italic;
+}
+/* End Styling for detailed member documentation */
+
+/* for the tree view */
+.ftvtree {
+ font-family: sans-serif;
+ margin:0.5em;
+}
+.directory { font-size: 9pt; font-weight: bold; }
+.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }
+.directory > h3 { margin-top: 0; }
+.directory p { margin: 0px; white-space: nowrap; }
+.directory div { display: none; margin: 0px; }
+.directory img { vertical-align: -30%; }
+
diff --git a/doc/html/doxygen.png b/doc/html/doxygen.png
new file mode 100644
index 0000000..f0a274b
Binary files /dev/null and b/doc/html/doxygen.png differ
diff --git a/doc/html/files.html b/doc/html/files.html
new file mode 100644
index 0000000..585c63e
--- /dev/null
+++ b/doc/html/files.html
@@ -0,0 +1,52 @@
+
+
+VST SDK 2.4: File Index
+
+
+
+
+
+
+VST SDK 2.4 File List Here is a list of all files with brief descriptions:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/ftv2blank.png b/doc/html/ftv2blank.png
new file mode 100644
index 0000000..493c3c0
Binary files /dev/null and b/doc/html/ftv2blank.png differ
diff --git a/doc/html/ftv2doc.png b/doc/html/ftv2doc.png
new file mode 100644
index 0000000..f72999f
Binary files /dev/null and b/doc/html/ftv2doc.png differ
diff --git a/doc/html/ftv2folderclosed.png b/doc/html/ftv2folderclosed.png
new file mode 100644
index 0000000..d6d0634
Binary files /dev/null and b/doc/html/ftv2folderclosed.png differ
diff --git a/doc/html/ftv2folderopen.png b/doc/html/ftv2folderopen.png
new file mode 100644
index 0000000..bbe2c91
Binary files /dev/null and b/doc/html/ftv2folderopen.png differ
diff --git a/doc/html/ftv2lastnode.png b/doc/html/ftv2lastnode.png
new file mode 100644
index 0000000..e7b9ba9
Binary files /dev/null and b/doc/html/ftv2lastnode.png differ
diff --git a/doc/html/ftv2link.png b/doc/html/ftv2link.png
new file mode 100644
index 0000000..14f3fed
Binary files /dev/null and b/doc/html/ftv2link.png differ
diff --git a/doc/html/ftv2mlastnode.png b/doc/html/ftv2mlastnode.png
new file mode 100644
index 0000000..09ceb6a
Binary files /dev/null and b/doc/html/ftv2mlastnode.png differ
diff --git a/doc/html/ftv2mnode.png b/doc/html/ftv2mnode.png
new file mode 100644
index 0000000..3254c05
Binary files /dev/null and b/doc/html/ftv2mnode.png differ
diff --git a/doc/html/ftv2node.png b/doc/html/ftv2node.png
new file mode 100644
index 0000000..c9f06a5
Binary files /dev/null and b/doc/html/ftv2node.png differ
diff --git a/doc/html/ftv2plastnode.png b/doc/html/ftv2plastnode.png
new file mode 100644
index 0000000..0b07e00
Binary files /dev/null and b/doc/html/ftv2plastnode.png differ
diff --git a/doc/html/ftv2pnode.png b/doc/html/ftv2pnode.png
new file mode 100644
index 0000000..2001b79
Binary files /dev/null and b/doc/html/ftv2pnode.png differ
diff --git a/doc/html/ftv2vertline.png b/doc/html/ftv2vertline.png
new file mode 100644
index 0000000..b330f3a
Binary files /dev/null and b/doc/html/ftv2vertline.png differ
diff --git a/doc/html/functions.html b/doc/html/functions.html
new file mode 100644
index 0000000..bd92637
--- /dev/null
+++ b/doc/html/functions.html
@@ -0,0 +1,89 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x62.html b/doc/html/functions_0x62.html
new file mode 100644
index 0000000..5817ac0
--- /dev/null
+++ b/doc/html/functions_0x62.html
@@ -0,0 +1,90 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x63.html b/doc/html/functions_0x63.html
new file mode 100644
index 0000000..96870f5
--- /dev/null
+++ b/doc/html/functions_0x63.html
@@ -0,0 +1,102 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x64.html b/doc/html/functions_0x64.html
new file mode 100644
index 0000000..728cfec
--- /dev/null
+++ b/doc/html/functions_0x64.html
@@ -0,0 +1,93 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x65.html b/doc/html/functions_0x65.html
new file mode 100644
index 0000000..aec308a
--- /dev/null
+++ b/doc/html/functions_0x65.html
@@ -0,0 +1,90 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x66.html b/doc/html/functions_0x66.html
new file mode 100644
index 0000000..611a867
--- /dev/null
+++ b/doc/html/functions_0x66.html
@@ -0,0 +1,90 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+fileTypes
+: VstFileSelect flags
+: VstAudioFile , VstOfflineTask , MidiKeyName , MidiProgramCategory , MidiProgramName , VstPinProperties , VstParameterProperties , VstTimeInfo , VstMidiSysexEvent , VstMidiEvent , VstEvent , AEffect float2string()
+: AudioEffect format
+: VstAudioFile future
+: fxBank , VstPatchChunkInfo , VstFileSelect , VstWindow , VstAudioFile , VstOfflineTask , VstSpeakerProperties , VstPinProperties , VstParameterProperties , AEffect fxID
+: fxBank , fxProgram fxMagic
+: fxBank , fxProgram fxVersion
+: fxBank , fxProgram
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x67.html b/doc/html/functions_0x67.html
new file mode 100644
index 0000000..9e6c4eb
--- /dev/null
+++ b/doc/html/functions_0x67.html
@@ -0,0 +1,126 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x68.html b/doc/html/functions_0x68.html
new file mode 100644
index 0000000..f3a4ac5
--- /dev/null
+++ b/doc/html/functions_0x68.html
@@ -0,0 +1,87 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x69.html b/doc/html/functions_0x69.html
new file mode 100644
index 0000000..89f3dc7
--- /dev/null
+++ b/doc/html/functions_0x69.html
@@ -0,0 +1,94 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x6b.html b/doc/html/functions_0x6b.html
new file mode 100644
index 0000000..345a796
--- /dev/null
+++ b/doc/html/functions_0x6b.html
@@ -0,0 +1,83 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x6c.html b/doc/html/functions_0x6c.html
new file mode 100644
index 0000000..f760370
--- /dev/null
+++ b/doc/html/functions_0x6c.html
@@ -0,0 +1,86 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x6d.html b/doc/html/functions_0x6d.html
new file mode 100644
index 0000000..fdf69c6
--- /dev/null
+++ b/doc/html/functions_0x6d.html
@@ -0,0 +1,98 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x6e.html b/doc/html/functions_0x6e.html
new file mode 100644
index 0000000..5728af8
--- /dev/null
+++ b/doc/html/functions_0x6e.html
@@ -0,0 +1,108 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+name
+: VstFileType , VstAudioFileMarker , VstAudioFile , VstSpeakerProperties , MidiProgramCategory , MidiProgramName nanoSeconds
+: VstTimeInfo nbFileTypes
+: VstFileSelect nbReturnPath
+: VstFileSelect noTail()
+: AudioEffectX noteLength
+: VstMidiEvent noteOffset
+: VstMidiEvent noteOffVelocity
+: VstMidiEvent numChannels
+: VstAudioFile , VstSpeakerArrangement numDestinationChannels
+: VstOfflineTask numElements
+: VstPatchChunkInfo numEvents
+: VstEvents numFrames
+: VstAudioFile numFramesInSourceFile
+: VstOfflineTask numFramesToProcess
+: VstOfflineTask numInputs
+: AEffect numMarkers
+: VstAudioFile numOutputs
+: AEffect numParametersInCategory
+: VstParameterProperties numParams
+: AudioEffect , fxProgram , AEffect numPrograms
+: AudioEffect , fxBank , AEffect numSamplesInput
+: VstVariableIo numSamplesInputProcessed
+: VstVariableIo numSamplesOutput
+: VstVariableIo numSamplesOutputProcessed
+: VstVariableIo numSourceChannels
+: VstOfflineTask
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x6f.html b/doc/html/functions_0x6f.html
new file mode 100644
index 0000000..8362c51
--- /dev/null
+++ b/doc/html/functions_0x6f.html
@@ -0,0 +1,92 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x70.html b/doc/html/functions_0x70.html
new file mode 100644
index 0000000..fe59f1e
--- /dev/null
+++ b/doc/html/functions_0x70.html
@@ -0,0 +1,103 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x72.html b/doc/html/functions_0x72.html
new file mode 100644
index 0000000..ad25904
--- /dev/null
+++ b/doc/html/functions_0x72.html
@@ -0,0 +1,96 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x73.html b/doc/html/functions_0x73.html
new file mode 100644
index 0000000..c6bb990
--- /dev/null
+++ b/doc/html/functions_0x73.html
@@ -0,0 +1,128 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x74.html b/doc/html/functions_0x74.html
new file mode 100644
index 0000000..6f89612
--- /dev/null
+++ b/doc/html/functions_0x74.html
@@ -0,0 +1,94 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+tempo
+: VstAudioFile , VstTimeInfo thisCategoryIndex
+: MidiProgramCategory thisKeyNumber
+: MidiKeyName thisProgramIndex
+: MidiKeyName , MidiProgramName ticksPerBlackNote
+: VstAudioFile timeRulerOffset
+: VstAudioFile timeRulerUnit
+: VstAudioFile timeSigDenominator
+: VstAudioFile , VstTimeInfo timeSigNumerator
+: VstAudioFile , VstTimeInfo title
+: VstFileSelect , VstWindow top
+: ERect type
+: VstFileSelect , VstAudioFileMarker , VstSpeakerArrangement , VstSpeakerProperties , VstMidiSysexEvent , VstMidiEvent , VstEvent
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x75.html b/doc/html/functions_0x75.html
new file mode 100644
index 0000000..8aa0448
--- /dev/null
+++ b/doc/html/functions_0x75.html
@@ -0,0 +1,90 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x76.html b/doc/html/functions_0x76.html
new file mode 100644
index 0000000..4720c89
--- /dev/null
+++ b/doc/html/functions_0x76.html
@@ -0,0 +1,87 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x77.html b/doc/html/functions_0x77.html
new file mode 100644
index 0000000..c300923
--- /dev/null
+++ b/doc/html/functions_0x77.html
@@ -0,0 +1,86 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x78.html b/doc/html/functions_0x78.html
new file mode 100644
index 0000000..148b861
--- /dev/null
+++ b/doc/html/functions_0x78.html
@@ -0,0 +1,83 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x79.html b/doc/html/functions_0x79.html
new file mode 100644
index 0000000..a266539
--- /dev/null
+++ b/doc/html/functions_0x79.html
@@ -0,0 +1,83 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_0x7e.html b/doc/html/functions_0x7e.html
new file mode 100644
index 0000000..3b0e373
--- /dev/null
+++ b/doc/html/functions_0x7e.html
@@ -0,0 +1,84 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_func.html b/doc/html/functions_func.html
new file mode 100644
index 0000000..ba4925a
--- /dev/null
+++ b/doc/html/functions_func.html
@@ -0,0 +1,230 @@
+
+
+VST SDK 2.4: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html
new file mode 100644
index 0000000..c3cf1ec
--- /dev/null
+++ b/doc/html/functions_vars.html
@@ -0,0 +1,304 @@
+
+
+VST SDK 2.4: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+fileTypes
+: VstFileSelect flags
+: VstAudioFile , VstOfflineTask , MidiKeyName , MidiProgramCategory , MidiProgramName , VstPinProperties , VstParameterProperties , VstTimeInfo , VstMidiSysexEvent , VstMidiEvent , VstEvent , AEffect format
+: VstAudioFile future
+: fxBank , VstPatchChunkInfo , VstFileSelect , VstWindow , VstAudioFile , VstOfflineTask , VstSpeakerProperties , VstPinProperties , VstParameterProperties , AEffect fxID
+: fxBank , fxProgram fxMagic
+: fxBank , fxProgram fxVersion
+: fxBank , fxProgram
+
+
+
+
+
+
+
+name
+: VstFileType , VstAudioFileMarker , VstAudioFile , VstSpeakerProperties , MidiProgramCategory , MidiProgramName nanoSeconds
+: VstTimeInfo nbFileTypes
+: VstFileSelect nbReturnPath
+: VstFileSelect noteLength
+: VstMidiEvent noteOffset
+: VstMidiEvent noteOffVelocity
+: VstMidiEvent numChannels
+: VstAudioFile , VstSpeakerArrangement numDestinationChannels
+: VstOfflineTask numElements
+: VstPatchChunkInfo numEvents
+: VstEvents numFrames
+: VstAudioFile numFramesInSourceFile
+: VstOfflineTask numFramesToProcess
+: VstOfflineTask numInputs
+: AEffect numMarkers
+: VstAudioFile numOutputs
+: AEffect numParametersInCategory
+: VstParameterProperties numParams
+: AudioEffect , fxProgram , AEffect numPrograms
+: AudioEffect , fxBank , AEffect numSamplesInput
+: VstVariableIo numSamplesInputProcessed
+: VstVariableIo numSamplesOutput
+: VstVariableIo numSamplesOutputProcessed
+: VstVariableIo numSourceChannels
+: VstOfflineTask
+
+
+
+
+
+tempo
+: VstAudioFile , VstTimeInfo thisCategoryIndex
+: MidiProgramCategory thisKeyNumber
+: MidiKeyName thisProgramIndex
+: MidiKeyName , MidiProgramName ticksPerBlackNote
+: VstAudioFile timeRulerOffset
+: VstAudioFile timeRulerUnit
+: VstAudioFile timeSigDenominator
+: VstAudioFile , VstTimeInfo timeSigNumerator
+: VstAudioFile , VstTimeInfo title
+: VstFileSelect , VstWindow top
+: ERect type
+: VstFileSelect , VstAudioFileMarker , VstSpeakerArrangement , VstSpeakerProperties , VstMidiSysexEvent , VstMidiEvent , VstEvent
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals.html b/doc/html/globals.html
new file mode 100644
index 0000000..6c1830f
--- /dev/null
+++ b/doc/html/globals.html
@@ -0,0 +1,124 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_0x62.html b/doc/html/globals_0x62.html
new file mode 100644
index 0000000..d7b91e1
--- /dev/null
+++ b/doc/html/globals_0x62.html
@@ -0,0 +1,72 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_0x63.html b/doc/html/globals_0x63.html
new file mode 100644
index 0000000..9362244
--- /dev/null
+++ b/doc/html/globals_0x63.html
@@ -0,0 +1,93 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_0x64.html b/doc/html/globals_0x64.html
new file mode 100644
index 0000000..25819b8
--- /dev/null
+++ b/doc/html/globals_0x64.html
@@ -0,0 +1,72 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_0x65.html b/doc/html/globals_0x65.html
new file mode 100644
index 0000000..b9bc3d5
--- /dev/null
+++ b/doc/html/globals_0x65.html
@@ -0,0 +1,163 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_0x66.html b/doc/html/globals_0x66.html
new file mode 100644
index 0000000..56b06ff
--- /dev/null
+++ b/doc/html/globals_0x66.html
@@ -0,0 +1,73 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_0x6b.html b/doc/html/globals_0x6b.html
new file mode 100644
index 0000000..f33b191
--- /dev/null
+++ b/doc/html/globals_0x6b.html
@@ -0,0 +1,277 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_0x6d.html b/doc/html/globals_0x6d.html
new file mode 100644
index 0000000..acfd479
--- /dev/null
+++ b/doc/html/globals_0x6d.html
@@ -0,0 +1,75 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_0x74.html b/doc/html/globals_0x74.html
new file mode 100644
index 0000000..f559301
--- /dev/null
+++ b/doc/html/globals_0x74.html
@@ -0,0 +1,72 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_0x76.html b/doc/html/globals_0x76.html
new file mode 100644
index 0000000..2436627
--- /dev/null
+++ b/doc/html/globals_0x76.html
@@ -0,0 +1,168 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_defs.html b/doc/html/globals_defs.html
new file mode 100644
index 0000000..375f677
--- /dev/null
+++ b/doc/html/globals_defs.html
@@ -0,0 +1,71 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_enum.html b/doc/html/globals_enum.html
new file mode 100644
index 0000000..3cd88da
--- /dev/null
+++ b/doc/html/globals_enum.html
@@ -0,0 +1,85 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_eval.html b/doc/html/globals_eval.html
new file mode 100644
index 0000000..7589938
--- /dev/null
+++ b/doc/html/globals_eval.html
@@ -0,0 +1,115 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_eval_0x65.html b/doc/html/globals_eval_0x65.html
new file mode 100644
index 0000000..0c17fe6
--- /dev/null
+++ b/doc/html/globals_eval_0x65.html
@@ -0,0 +1,158 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_eval_0x6b.html b/doc/html/globals_eval_0x6b.html
new file mode 100644
index 0000000..d02720c
--- /dev/null
+++ b/doc/html/globals_eval_0x6b.html
@@ -0,0 +1,270 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_eval_0x6d.html b/doc/html/globals_eval_0x6d.html
new file mode 100644
index 0000000..018a37e
--- /dev/null
+++ b/doc/html/globals_eval_0x6d.html
@@ -0,0 +1,70 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_eval_0x76.html b/doc/html/globals_eval_0x76.html
new file mode 100644
index 0000000..9059350
--- /dev/null
+++ b/doc/html/globals_eval_0x76.html
@@ -0,0 +1,123 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html
new file mode 100644
index 0000000..21d0cfb
--- /dev/null
+++ b/doc/html/globals_func.html
@@ -0,0 +1,61 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_type.html b/doc/html/globals_type.html
new file mode 100644
index 0000000..fce8df5
--- /dev/null
+++ b/doc/html/globals_type.html
@@ -0,0 +1,59 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/globals_vars.html b/doc/html/globals_vars.html
new file mode 100644
index 0000000..90685ca
--- /dev/null
+++ b/doc/html/globals_vars.html
@@ -0,0 +1,72 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/hierarchy.html b/doc/html/hierarchy.html
new file mode 100644
index 0000000..1fdabd2
--- /dev/null
+++ b/doc/html/hierarchy.html
@@ -0,0 +1,73 @@
+
+
+VST SDK 2.4: Hierarchical Index
+
+
+
+
+
+
+VST SDK 2.4 Class Hierarchy This inheritance list is sorted roughly, but not completely, alphabetically:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/history.html b/doc/html/history.html
new file mode 100644
index 0000000..59d25ae
--- /dev/null
+++ b/doc/html/history.html
@@ -0,0 +1,62 @@
+
+
+VST SDK 2.4: Revision History
+
+
+
+
+
+
+
+deprecated: audioMasterPinConnected, AudioEffect::isInputConnected, AudioEffect::isOutputConnected
+remarks on AudioEffectX::processEvents
+remarks on AudioEffectX::setBypass
+add specific pragma for Windows GNU compiler in aeffect.h , aeffectx.h and little change in vstplugmain.h
+fix error in adelay example (setProgram)
+update source code styling
+add a Microsoft Visual Studio 2003 version of the samples
+
+
+
+
+
+First Release of VST SDK 2.4
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/index.html b/doc/html/index.html
new file mode 100644
index 0000000..a0d916c
--- /dev/null
+++ b/doc/html/index.html
@@ -0,0 +1,8 @@
+
+
+VST SDK 2.4
+
+
+
+
+
diff --git a/doc/html/intro.html b/doc/html/intro.html
new file mode 100644
index 0000000..38a1d04
--- /dev/null
+++ b/doc/html/intro.html
@@ -0,0 +1,65 @@
+
+
+VST SDK 2.4: Introduction
+
+
+
+
+
+
+Essentially, a VST Plug-in is a pure audio processing component, and not an audio application: It is a component that is utilized within a host application. This host application provides the audio streams that are processed by the plug-in's code.
+Generally speaking, a VST plug-in it can take a stream of audio data, apply a process to the audio, and return the result to the host application. A VST Plug-In performs its process normally using the processor of the computer; It does not necessarily need dedicated digital signal processors. The audio stream is broken down into a series of blocks. The host supplies the blocks in sequence. The host and its current environment control the block-size. The VST Plug-In maintains the status of all its own parameters relating to the running process: The host does not maintain any information about what the plug-in did with the last block of data it processed.
+From the host application’s point of view, a VST Plug-In is a black box with an arbitrary number of inputs, outputs (MIDI or Audio), and associated parameters. The host needs no implicit knowledge of the plug-in's process to be able to use it. The plug-in process can use whatever parameters it wishes, internally to the process, but depending on the capabilities of the host, it can allow the changes to user parameters to be automated by the host.
+The source code of a VST Plug-In is platform independent, but the delivery system depends on the platform architecture:
+
+On the Windows platform, a VST Plug-In is a multi-threaded DLL (Dynamic Link Library). A standard (default) folder for the VST Plug-Ins is defined in the registry under "HKEY_LOCAL_MACHINE\SOFTWARE\VST\VSTPluginsPath".
+On Mac OS X , a VST Plug-In is a Bundle. You define the Plug-In's name in the plist.info file with the CFBundleName key.
+On BeOS and SGI (under MOTIF, UNIX), a VST Plug-In is a shared Library.
+
+To learn more about VST you can subscribe to the VST Developer Mailing List - check the 3rd Party Developer Support section at www.steinberg.net .
+
+
+Audio processing in the plug is accomplished by one of 3 methods, namely process (), processReplacing () and processDoubleReplacing (). While process () takes input data, applies its processing algorithm, and then adds the result to the output (accumulating), processReplacing () and processDoubleReplacing (), overwrite the output buffer.
+
Note: The accumulating process mode is deprecated in VST 2.4. Please implement processReplacing (mandatory!) and processDoubleReplacing (optional).
+Audio data processed by VST Plug-Ins is 32 bit (single precision) and optionally 64 bit (double precision) floating-point data. The default used range is from -1.0 to +1.0 inclusive [-1.0, +1.0] (where 1.0 corresponds to 0dB, 0.5 to -6dB and 0.0 to -oodB). Note that an effect could generate values above this range.
+All parameters - the user parameters, acting directly or indirectly on that data, as automated by the host, are 32 bit floating-point data. They must always range from 0.0 to 1.0 inclusive [0.0, +1.0], regardless of their internal or external representation.
+
See also: Threading issues
+
+
+If you want to develop a VST Plug-In, you may prefer to go straight to the code examples now. These are very simple examples in which you will learn most of the important basic concepts just by reading a few lines of code. As a Plug-In developer you actually need to know very little about hosting a Plug-In. You should concentrate on the AudioEffect (VST 1.0) and AudioEffectX (VST 2.x extensions) base classes. Note: Never edit any of the SDK source files. Never ever. The host application relies on them being used as they are provided. Anything can be added or changed by overriding in your private classes derived from AudioEffectX .
+
+
+All user-interface issues are entirely separated from the audio processing issues. At its simplest there is an option where you can avoid providing a user interface at all. In this case the host requests character strings from the Plug-In representing each of the parameters. The host can use the separate ASCII strings for the value, the label, and the units of the parameters to construct its own user interface. This is how the simple code-examples, AGain & ADelay, work. This is also often a good way to develop a VST Plug-In, it offers a very short development cycle to start to test the algorithm. The proper interface can come later.
+The next user interface level is provided when the Plug-In defines its own editor. This allows practically any user interface to be defined. A negative aspect is that then you can quickly land up in platform specifics when dealing with the nuts an bolts of the interface issues, even though the audio process, the concepts and methodology remain platform independent.
+The final option is to use a portable framework for creating sophisticated user interfaces. This framework takes the form of the VSTGUI Library files that are available for almost all supported VST platforms. The VSTGUI Library classes and their usage is described in separate documentation.
See also: VSTGUI on SourceForge
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/license.html b/doc/html/license.html
new file mode 100644
index 0000000..6453020
--- /dev/null
+++ b/doc/html/license.html
@@ -0,0 +1,99 @@
+
+
+VST SDK 2.4: Licensing Issues
+
+
+
+
+
+The Steinberg VST Plug-In Software Development Kit can be used freely subject to certain licensing conditions by anyone interested in developing Plug-Ins, or to extend an application so that it’s capable of hosting VST Plug-Ins. When you chose to receive the VST Plug-In SDK you declared yourself to be in agreement with the Licensing conditions.
+These notes don’t replace the licensing agreement in any way, but quickly explain what you can and cannot do with the Steinberg VST Plug-In Software Development Kit.
+
+is not time limited.
+is subject to the laws of the Federal Republic of Germany only.
+its remaining conditions remain valid even if one of the conditions becomes invalid.
+
+
+
+is created with the sole aim that you can create or host VST Plug-Ins.
+is offered ‘AS IS’ and we make no claims about how suitable it is for your application.
+
+
+
+still holds the copyright for VST Plug-In specification.
+are not responsible for anything that happens because you chose to use the VST Plug-In Interface.
+cannot be held liable if your use of the VST Plug-In Interfaces causes damage or loss to anyone.
+may release improved versions of the Licensed Software Developer Kit
+offer no commitment that updates will occur at anytime or for anybody.
+are not aware of VST Plug-In technology infringing the intellectual copyright of anyone else,
+cannot accept any responsibility for any claims made against you.
+
+
+
+transfer your License to anyone
+license the information contained in this SDK to anyone else.
+sell the information contained in this SDK to anyone.
+re-work or otherwise pass this technology off as your own.
+give it away or in any other way distribute it, or cause it to be become distributed.
+use the VST logo or other marks on promotional merchandise. So no VST t-shirts or baseball caps.
+claim to be a partner of Steinberg or be acting on our behalf.
+make any statements on Steinberg’s behalf.
+
+
+
+bring the VST technology into disrepute, or damage its reputation in any way.
+use VST technology in connection with products that are obscene, pornographic or illegal.
+use VST technology in connection with products that are excessively violent, or in poor taste.
+break the rules of the license, or we have the right terminate the License immediately.
+
+
+
+include references to Steinberg’s copyrights and trademarks in a product that uses this SDK.
+ensure “VST is a trademark of Steinberg Media Technologies GmbH” appears on any packaging
+place the VST Logo on packages and promotional material. We provide the artwork.
+add our copyright notice to your about box. “VST Plug-In Technology by Steinberg.”
+agree that we hold your details on file for our internal purposes.
+inform Steinberg immediately if any one makes a claim against you in regard to VST-Plug-Ins.
+make sure the end-publisher of your work is also a VST license holder.
+
+
+
+make VST Plug-Ins or VST Host Applications and distribute them worldwide.
+release products without having to pay to use the VST Plug-In Interface technology
+use VST technology in Demo Versions of your products.
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/maceditor.html b/doc/html/maceditor.html
new file mode 100644
index 0000000..8762b88
--- /dev/null
+++ b/doc/html/maceditor.html
@@ -0,0 +1,76 @@
+
+
+VST SDK 2.4: Macintosh Editor as HIViewRef
+
+
+
+
+
+
+In the beginning of VST the Plug-In's GUI was attached at the left-top corner without a mechanism for the host to move it. This and the evolution of the macintosh platform makes it necessary to change this old behaviour. The modern way on Mac OS X to do UI design with C/C++ is to use HIViews and window compositing.
+ The VST SDK 2.4 requires the Plug-In to attach one HIView to the window and that this HIView can be moved around and that it can be embedded into other subviews.
+ Hosts which implement VST 2.4 need to provide a window to the Plug-In which is composited if the Plug-In itself uses 2.4. If the Plug-In uses an earlier VST SDK it should provide a non composited window.
+
+
+As before the ptr in effEditOpen is a WindowRef. You need to add one HIView to the content view of this window.
+
HIViewRef contentView;
+if (HIViewFindByID (HIViewGetRoot ((WindowRef)ptr), kHIViewWindowContentID, &contentView) == noErr)
+ HIViewAddSubview (contentView, myPluginView);
+
+
+
+When effEditClose is called you should remove your HIView from the window.
+
HIViewRemoveFromSuperview (myPluginView);
+
+Don't do anything with the window. It is not your window.
+
+
+If you want to resize your view, just do it, but don't resize the host window.
+
HIRect pluginBounds;
+HIViewGetFrame (myPluginView, &pluginBounds);
+pluginBounds.size.width = newWidth;
+pluginBounds.size.height = newHeight;
+HIViewSetFrame (myPluginView, &pluginBounds);
+
+The host needs to listen to bounds changes on the Plug-In view and resize its window accordingly.
+
+
+You need to use Carbon Events now, which you register on the HIView, not on the window if possible. But don't remove these opcodes from your editor yet, if you want your Plug-In to work in 2.3 hosts.
+
+
+Now there is a conflict situation that some VST 2.3 hosts may not work with HIViews and window compositing. You should map the mac specific effEdit* opcodes internaly to the same functions you call if you receive one of the appropriate Carbon Events (VSTGUI does this automatically). You also need to define VST_FORCE_DEPRECATED=0 as a preprocessor definition to get the effEdit* opcodes.
+With revision 1 of SDK 2.4 the default value for VST_FORCE_DEPRECATED is zero, if you build for ppc machines.
+
See also: Apple HIView Programming Guide
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/main.html b/doc/html/main.html
new file mode 100644
index 0000000..a3a0279
--- /dev/null
+++ b/doc/html/main.html
@@ -0,0 +1,50 @@
+
+
+VST SDK 2.4: Main Page
+
+
+
+
+
+VST SDK 2.4 Documentation
+
+
+
+
+
+
Welcome to VST SDK 2.4 Rev.2!
+
+Introduction
+ What's new in VST 2.4
+
+Licensing Issues
+ Acknowledgements
+
+Revision History
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/namespace_host_can_dos.html b/doc/html/namespace_host_can_dos.html
new file mode 100644
index 0000000..9970ae3
--- /dev/null
+++ b/doc/html/namespace_host_can_dos.html
@@ -0,0 +1,330 @@
+
+
+VST SDK 2.4: HostCanDos Namespace Reference
+
+
+
+
+
+
+HostCanDos Namespace Reference
+
+
+Detailed Description
+hostCanDos strings Plug-in -> Host
+
+
Variable Documentation
+
+
+
+
+
+
+Host supports send of Vst events to plug-in.
+
+
+
+
+
+
+
+
+
+
+Host supports send of MIDI events to plug-in.
+
+
+
+
+
+
+
+
+
+
+Host supports send of VstTimeInfo to plug-in.
+
+
+
+
+
+
+
+
+
+
+Host can receive Vst events from plug-in.
+
+
+
+
+
+
+
+
+
+
+Host can receive MIDI events from plug-in.
+
+
+
+
+
+
+
+
+
+
+Host will indicates the plug-in when something change in plug-in´s routing/connections with suspend/resume/setSpeakerArrangement.
+
+
+
+
+
+
+
+
+
+
+Host supports ioChanged ().
+
+
+
+
+
+
+
+
+
+
+used by VSTGUI
+
+
+
+
+
+
+
+
+
+
+Host supports offline feature.
+
+
+
+
+
+
+
+
+
+
+Host supports function openFileSelector ().
+
+
+
+
+
+
+
+
+
+
+Host supports function closeFileSelector ().
+
+
+
+
+
+
+
+
+
+
+Host supports functions startProcess () and stopProcess ().
+
+
+
+
+
+
+
+
+
+
+'shell' handling via uniqueID. If supported by the Host and the Plug-in has the category kPlugCategShell
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/namespace_plug_can_dos.html b/doc/html/namespace_plug_can_dos.html
new file mode 100644
index 0000000..38159ec
--- /dev/null
+++ b/doc/html/namespace_plug_can_dos.html
@@ -0,0 +1,210 @@
+
+
+VST SDK 2.4: PlugCanDos Namespace Reference
+
+
+
+
+
+
+PlugCanDos Namespace Reference
+
+
+
+Variables
+const char * canDoSendVstEvents = "sendVstEvents"
+
+ plug-in will send Vst events to Host
+const char * canDoSendVstMidiEvent = "sendVstMidiEvent"
+
+ plug-in will send MIDI events to Host
+const char * canDoReceiveVstEvents = "receiveVstEvents"
+
+ plug-in can receive MIDI events from Host
+const char * canDoReceiveVstMidiEvent = "receiveVstMidiEvent"
+
+ plug-in can receive MIDI events from Host
+const char * canDoReceiveVstTimeInfo = "receiveVstTimeInfo"
+
+ plug-in can receive Time info from Host
+const char * canDoOffline = "offline"
+
+ plug-in supports offline functions (offlineNotify, offlinePrepare, offlineRun)
+const char * canDoMidiProgramNames = "midiProgramNames"
+
+ plug-in supports function getMidiProgramName ()
+const char * canDoBypass = "bypass"
+
+ plug-in supports function setBypass ()
+
+Detailed Description
+plugCanDos strings Host -> Plug-in
+
+
Variable Documentation
+
+
+
+
+
+
+plug-in will send Vst events to Host
+
+
+
+
+
+
+
+
+
+
+plug-in will send MIDI events to Host
+
+
+
+
+
+
+
+
+
+
+plug-in can receive MIDI events from Host
+
+
+
+
+
+
+
+
+
+
+plug-in can receive MIDI events from Host
+
+
+
+
+
+
+
+
+
+
+plug-in can receive Time info from Host
+
+
+
+
+
+
+
+
+
+
+plug-in supports offline functions (offlineNotify, offlinePrepare, offlineRun)
+
+
+
+
+
+
+
+
+
+
+plug-in supports function getMidiProgramName ()
+
+
+
+
+
+
+
+
+
+
+plug-in supports function setBypass ()
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/namespacemembers.html b/doc/html/namespacemembers.html
new file mode 100644
index 0000000..ae91519
--- /dev/null
+++ b/doc/html/namespacemembers.html
@@ -0,0 +1,67 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+Here is a list of all namespace members with links to the namespace documentation for each member:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/namespacemembers_vars.html b/doc/html/namespacemembers_vars.html
new file mode 100644
index 0000000..e890ca6
--- /dev/null
+++ b/doc/html/namespacemembers_vars.html
@@ -0,0 +1,67 @@
+
+
+VST SDK 2.4: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/namespaces.html b/doc/html/namespaces.html
new file mode 100644
index 0000000..9530cde
--- /dev/null
+++ b/doc/html/namespaces.html
@@ -0,0 +1,44 @@
+
+
+VST SDK 2.4: Namespace Index
+
+
+
+
+
+
+VST SDK 2.4 Namespace List Here is a list of all namespaces with brief descriptions:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/others.html b/doc/html/others.html
new file mode 100644
index 0000000..3ca286e
--- /dev/null
+++ b/doc/html/others.html
@@ -0,0 +1,53 @@
+
+
+VST SDK 2.4: Others
+
+
+
+
+
+
+The VSTMonitor Plug-In provided with this SDK is dedicated to "monitor" the communications between a VST Plug-In and the host which instanciates it: it keeps track of all the calls made by the host to the Plug-In's dispatcher, and of all the calls made by the Plug-In to the host's audiomaster. This is useful to record the sequence of calls done by any host to a VST Plug-In while loading it. Besides VSTMonitor has a "trigger" function which lets the user trigger (via a pop-up menu) any call to the host's audiomaster, to see how the host reacts (and notably to see if the function is implemented by the host...).
+You will find this plug-in in the VSTPlug-ins folder dedicated to each platform. You only need to put it directly in your own VST plug-ins folder in order to make it work.
+Calls made by the host to the plug-in are shown in grey, calls from the plug-in to the host are displayed in red. Internal (to the plug-in) calls are shown in blue.
+All the GUI buttons don't correspond to "real" parameters declared to the host, in order to prevent from disturbing the monitoring. Nevertheless, 3 "real" parameters and 2 programs are declared "publically" (although they are not used internally) to let you see how they are handled by the host.
+
Note: Many hosts, while loading, open each Vst plug-in, for example to check their IO configuration. This is "hidden" to the user (as the plug-in is always closed as soon as the information needed has been recorded by the host), but VstMonitor can record even those calls, and display them the next time it is opened "normally" in the sequencer. That's why while the host is loading, an alert window may be automatically opened (on Windows platform), asking if the user want to keep track of "what has happened" (and although he has not explicitly opened the plug-in). On Mac, things recorded are kept by default (use Reset -see below- to delete them).
+VstMonitor's buttons:
+
+display : by default, comms (a "comm" means a call to the dispatcher or audiomaster) are not automatically displayed when they occur. Clicking on this button causes the displaying.
+reset : used to erase all the comms recorded.
+export : export as a .txt file all the comms recorded,
+trigger : a pop-up menu from which you can select a call to the host you would like to trigger VstMonitor's options :
+filters : the user can choose to filter (ie not display, as they are always recorded in the background) some coms. In order to do that, you simply need to right-click (in the display) on the comm you want to filter. This comm is then added to the "filter menu" (one of the buttons beneath the display). Clicking on the name of a function in this menu cause the filter to be removed. Some filters are set by default, notably those which concern parameters (setParameter...), but can be unset via the menu.
+function's params : the user can choose to display the parameters of the calls
+function's returned value : the user can choose to display the "result" of th call (it means the value returned, and pointers which have been filled if necessary).
+continuous display : set this if you want the synchronous display of the comms.
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/pages.html b/doc/html/pages.html
new file mode 100644
index 0000000..22e0b32
--- /dev/null
+++ b/doc/html/pages.html
@@ -0,0 +1,59 @@
+
+
+VST SDK 2.4: Page Index
+
+
+
+
+
+VST SDK 2.4 Related Pages Here is a list of all related documentation pages:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/sequences.html b/doc/html/sequences.html
new file mode 100644
index 0000000..8070c00
--- /dev/null
+++ b/doc/html/sequences.html
@@ -0,0 +1,99 @@
+
+
+VST SDK 2.4: VST Calling Sequences
+
+
+
+
+
+
+The diagrams below illustrate the most important calling sequences taking place between VST host application and plug-in. This is of interest to plug-in developers as well as to host developers.
+
+
+In general, processEvents(), startProcess(), stopProcess(), process(), processReplacing() and processDoubleReplacing() are called from a time-critical high priority thread (except for offline processing).
+ To satisfy realtime constraints for low latency audio processing, memory allocations and lock-based syncronisation should be avoided.
+ The same applies to setParameter() and setProgram() when playing automation from host. Any others functions are called from UI thread in general.
+ The host takes care that processing and setup functions are isolated from each other. setSampleRate(), setBlockSize(), setProcessPrecision(), etc. calls occur only in suspended state, i.e. before resume() is called.
+
+
+
+
+
+
+
+
+
Figure 3: A plug-in is initialized
+
+
+
Figure 4: A plug-in is terminated
+
+
+
+
+
Figure 1: A plug-in is turned on
+
+
+
Figure 2: A plug-in is turned off
+
+
+
+
+
Figure 6: The sample rate changed
+
+
+
Figure 9: The block size changed
+
+
+
+
+
+
+
Figure 5: The speaker arrangements negotiation between the host and the plug-in
+
+
+
+
+
Figure 7: The number of IOs changed caused e.g. by user interaction
+
+
+
+
+
Figure 8: A control changed within the userinterface of the plug-in
+
+
+
+
+
Figure 10: A plug-in processes offline
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_a_effect-members.html b/doc/html/struct_a_effect-members.html
new file mode 100644
index 0000000..f163d92
--- /dev/null
+++ b/doc/html/struct_a_effect-members.html
@@ -0,0 +1,65 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+AEffect Member List This is the complete list of members for AEffect , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_a_effect.html b/doc/html/struct_a_effect.html
new file mode 100644
index 0000000..556d9cb
--- /dev/null
+++ b/doc/html/struct_a_effect.html
@@ -0,0 +1,493 @@
+
+
+VST SDK 2.4: AEffect Struct Reference
+
+
+
+
+
+
+AEffect Struct Reference #include <aeffect.h>
+
+List of all members.
+Detailed Description
+Basic VST Effect "C" Interface.
+
+
Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+reserved for future use (please zero)
+
+
+
+
+
+
+
+
+
+
+
+
+for algorithms which need input in the first place (Group delay or latency in Samples). This value should be initialized in a resume state.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+number of audio inputs
+
+
+
+
+
+
+
+
+
+
+number of audio outputs
+
+
+
+
+
+
+
+
+
+
+all programs are assumed to have numParams parameters
+
+
+
+
+
+
+
+
+
+
+number of programs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reserved for Host, must be 0
+
+
+
+
+
+
+
+
+
+
+reserved for Host, must be 0
+
+
+
+
+
+
+
+
+
+
+
+
+registered unique identifier (register it at Steinberg 3rd party support Web). This is used to identify a plug-in during save+load of preset and project.
+
+
+
+
+
+
+
+
+
+
+user-defined pointer
+
+
+
+
+
+
+
+
+
+
+plug-in version (example 1100 for version 1.1.0.0)
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_e_rect-members.html b/doc/html/struct_e_rect-members.html
new file mode 100644
index 0000000..3c1a60a
--- /dev/null
+++ b/doc/html/struct_e_rect-members.html
@@ -0,0 +1,46 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+ERect Member List This is the complete list of members for ERect , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_e_rect.html b/doc/html/struct_e_rect.html
new file mode 100644
index 0000000..0f20fad
--- /dev/null
+++ b/doc/html/struct_e_rect.html
@@ -0,0 +1,133 @@
+
+
+VST SDK 2.4: ERect Struct Reference
+
+
+
+
+
+
+ERect Struct Reference #include <aeffect.h>
+
+List of all members.
+Detailed Description
+Structure used for effEditGetRect .
+
+
Member Data Documentation
+
+
+
+
+
+
+bottom coordinate
+
+
+
+
+
+
+
+
+
+
+left coordinate
+
+
+
+
+
+
+
+
+
+
+right coordinate
+
+
+
+
+
+
+
+
+
+
+top coordinate
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_midi_key_name-members.html b/doc/html/struct_midi_key_name-members.html
new file mode 100644
index 0000000..3a5e0f2
--- /dev/null
+++ b/doc/html/struct_midi_key_name-members.html
@@ -0,0 +1,47 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+MidiKeyName Member List This is the complete list of members for MidiKeyName , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_midi_key_name.html b/doc/html/struct_midi_key_name.html
new file mode 100644
index 0000000..6545618
--- /dev/null
+++ b/doc/html/struct_midi_key_name.html
@@ -0,0 +1,153 @@
+
+
+VST SDK 2.4: MidiKeyName Struct Reference
+
+
+
+
+
+
+MidiKeyName Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+MIDI Key Description.
+
+
Member Data Documentation
+
+
+
+
+
+
+reserved, none defined yet, zero.
+
+
+
+
+
+
+
+
+
+
+key name, empty means regular key names
+
+
+
+
+
+
+
+
+
+
+
+
+0 - 127. fill struct for this key number.
+
+
+
+
+
+
+
+
+
+
+0 or greater: fill struct for this program index.
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_midi_program_category-members.html b/doc/html/struct_midi_program_category-members.html
new file mode 100644
index 0000000..a0d0118
--- /dev/null
+++ b/doc/html/struct_midi_program_category-members.html
@@ -0,0 +1,46 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+MidiProgramCategory Member List This is the complete list of members for MidiProgramCategory , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_midi_program_category.html b/doc/html/struct_midi_program_category.html
new file mode 100644
index 0000000..7b98c21
--- /dev/null
+++ b/doc/html/struct_midi_program_category.html
@@ -0,0 +1,133 @@
+
+
+VST SDK 2.4: MidiProgramCategory Struct Reference
+
+
+
+
+
+
+MidiProgramCategory Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+MIDI Program Category.
+
+
Member Data Documentation
+
+
+
+
+
+
+reserved, none defined yet, zero.
+
+
+
+
+
+
+
+
+
+
+
+
+-1:no parent category
+
+
+
+
+
+
+
+
+
+
+0 or greater: fill struct for this category index.
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_midi_program_name-members.html b/doc/html/struct_midi_program_name-members.html
new file mode 100644
index 0000000..2919e97
--- /dev/null
+++ b/doc/html/struct_midi_program_name-members.html
@@ -0,0 +1,50 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+MidiProgramName Member List This is the complete list of members for MidiProgramName , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_midi_program_name.html b/doc/html/struct_midi_program_name.html
new file mode 100644
index 0000000..7af6b20
--- /dev/null
+++ b/doc/html/struct_midi_program_name.html
@@ -0,0 +1,214 @@
+
+
+VST SDK 2.4: MidiProgramName Struct Reference
+
+
+
+
+
+
+MidiProgramName Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+MIDI Program Description.
+
+
Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-1:no parent category
+
+
+
+
+
+
+
+
+
+
+
+
+0 or greater: fill struct for this program index
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_audio_file-members.html b/doc/html/struct_vst_audio_file-members.html
new file mode 100644
index 0000000..4a018c8
--- /dev/null
+++ b/doc/html/struct_vst_audio_file-members.html
@@ -0,0 +1,64 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstAudioFile Member List This is the complete list of members for VstAudioFile , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_audio_file.html b/doc/html/struct_vst_audio_file.html
new file mode 100644
index 0000000..2d999c3
--- /dev/null
+++ b/doc/html/struct_vst_audio_file.html
@@ -0,0 +1,493 @@
+
+
+VST SDK 2.4: VstAudioFile Struct Reference
+
+
+
+
+
+
+VstAudioFile Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+Structure passed to offlineNotify and offlineStart
+
+
Member Data Documentation
+
+
+
+
+
+
+-1 if no such cursor
+
+
+
+
+
+
+
+
+
+
+
+
+Reserved for future use.
+
+
+
+
+
+
+
+
+
+
+Reserved for future use.
+
+
+
+
+
+
+
+
+
+
+any data private to Host
+
+
+
+
+
+
+
+
+
+
+
+
+number of channels (1 for mono, 2 for stereo...)
+
+
+
+
+
+
+
+
+
+
+number of frames in the audio file
+
+
+
+
+
+
+
+
+
+
+number of markers in the file
+
+
+
+
+
+
+
+
+
+
+any data private to plug-in
+
+
+
+
+
+
+
+
+
+
+file sample rate
+
+
+
+
+
+
+
+
+
+
+1 bit per channel
+
+
+
+
+
+
+
+
+
+
+number of frames in selection, or 0
+
+
+
+
+
+
+
+
+
+
+frame index of first selected frame, or -1
+
+
+
+
+
+
+
+
+
+
+
+
+as BPM (Beats Per Minute)
+
+
+
+
+
+
+
+
+
+
+
+
+offset in time ruler (positive or negative)
+
+
+
+
+
+
+
+
+
+
+see doc for possible values
+
+
+
+
+
+
+
+
+
+
+time signature denominator
+
+
+
+
+
+
+
+
+
+
+time signature numerator
+
+
+
+
+
+
+
+
+
+
+uniquely identify a file during a session
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_audio_file_marker-members.html b/doc/html/struct_vst_audio_file_marker-members.html
new file mode 100644
index 0000000..1597947
--- /dev/null
+++ b/doc/html/struct_vst_audio_file_marker-members.html
@@ -0,0 +1,47 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstAudioFileMarker Member List This is the complete list of members for VstAudioFileMarker , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_audio_file_marker.html b/doc/html/struct_vst_audio_file_marker.html
new file mode 100644
index 0000000..5341c57
--- /dev/null
+++ b/doc/html/struct_vst_audio_file_marker.html
@@ -0,0 +1,153 @@
+
+
+VST SDK 2.4: VstAudioFileMarker Struct Reference
+
+
+
+
+
+
+VstAudioFileMarker Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+Audio file marker.
+
+
Member Data Documentation
+
+
+
+
+
+
+marker identifier
+
+
+
+
+
+
+
+
+
+
+
+
+marker position
+
+
+
+
+
+
+
+
+
+
+reserved for future use
+
+
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_event-members.html b/doc/html/struct_vst_event-members.html
new file mode 100644
index 0000000..0121b7c
--- /dev/null
+++ b/doc/html/struct_vst_event-members.html
@@ -0,0 +1,47 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstEvent Member List This is the complete list of members for VstEvent , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_event.html b/doc/html/struct_vst_event.html
new file mode 100644
index 0000000..1bc5ac4
--- /dev/null
+++ b/doc/html/struct_vst_event.html
@@ -0,0 +1,151 @@
+
+
+VST SDK 2.4: VstEvent Struct Reference
+
+
+
+
+
+
+VstEvent Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+A generic timestamped event.
+
+
Member Data Documentation
+
+
+
+
+
+
+size of this event, excl. type and byteSize
+
+
+
+
+
+
+
+
+
+
+data size may vary, depending on event type
+
+
+
+
+
+
+
+
+
+
+sample frames related to the current block start sample position
+
+
+
+
+
+
+
+
+
+
+generic flags, none defined yet
+
+
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_events-members.html b/doc/html/struct_vst_events-members.html
new file mode 100644
index 0000000..31e92d6
--- /dev/null
+++ b/doc/html/struct_vst_events-members.html
@@ -0,0 +1,45 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstEvents Member List This is the complete list of members for VstEvents , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_events.html b/doc/html/struct_vst_events.html
new file mode 100644
index 0000000..228ec61
--- /dev/null
+++ b/doc/html/struct_vst_events.html
@@ -0,0 +1,113 @@
+
+
+VST SDK 2.4: VstEvents Struct Reference
+
+
+
+
+
+
+VstEvents Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+A block of events for the current processed audio block.
+
+
Member Data Documentation
+
+
+
+
+
+
+event pointer array, variable size
+
+
+
+
+
+
+
+
+
+
+number of Events in array
+
+
+
+
+
+
+
+
+
+
+zero (Reserved for future use)
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_file_select-members.html b/doc/html/struct_vst_file_select-members.html
new file mode 100644
index 0000000..4a2f4d6
--- /dev/null
+++ b/doc/html/struct_vst_file_select-members.html
@@ -0,0 +1,55 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstFileSelect Member List This is the complete list of members for VstFileSelect , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_file_select.html b/doc/html/struct_vst_file_select.html
new file mode 100644
index 0000000..0cbe341
--- /dev/null
+++ b/doc/html/struct_vst_file_select.html
@@ -0,0 +1,310 @@
+
+
+VST SDK 2.4: VstFileSelect Struct Reference
+
+
+
+
+
+
+VstFileSelect Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+File Selector Description used in audioMasterOpenFileSelector .
+
+
Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+reserved for future use
+
+
+
+
+
+
+
+
+
+
+
+
+optional: 0 = no creator
+
+
+
+
+
+
+
+
+
+
+number of fileTypes
+
+
+
+
+
+
+
+
+
+
+number of selected paths
+
+
+
+
+
+
+
+
+
+
+reserved for Host application
+
+
+
+
+
+
+
+
+
+
+use with kVstMultipleFilesLoad. Host allocates memory, plug-in must call closeOpenFileSelector!
+
+
+
+
+
+
+
+
+
+
+
+
+size of allocated memory for return paths
+
+
+
+
+
+
+
+
+
+
+text to display in file selector's title
+
+
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_file_type-members.html b/doc/html/struct_vst_file_type-members.html
new file mode 100644
index 0000000..b0b0fe4
--- /dev/null
+++ b/doc/html/struct_vst_file_type-members.html
@@ -0,0 +1,49 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstFileType Member List This is the complete list of members for VstFileType , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_file_type.html b/doc/html/struct_vst_file_type.html
new file mode 100644
index 0000000..73588ca
--- /dev/null
+++ b/doc/html/struct_vst_file_type.html
@@ -0,0 +1,230 @@
+
+
+VST SDK 2.4: VstFileType Struct Reference
+
+
+
+
+
+
+VstFileType Struct Reference #include <aeffectx.h>
+
+List of all members.
+
+Public Member Functions
+ VstFileType (const char *_name=0, const char *_macType=0, const char *_dosType=0, const char *_unixType=0, const char *_mimeType1=0, const char *_mimeType2=0)
+
+Public Attributes
+char name [128]
+
+ display name
+char macType [8]
+
+ MacOS type.
+char dosType [8]
+
+ Windows file extension.
+char unixType [8]
+
+ Unix file extension.
+char mimeType1 [128]
+
+ MIME type.
+char mimeType2 [128]
+
+ additional MIME type
+
+Detailed Description
+File filter used in VstFileSelect .
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+ VstFileType::VstFileType
+ (
+ const char *
+ _name = 0,
+
+
+
+
+ const char *
+ _macType = 0,
+
+
+
+
+ const char *
+ _dosType = 0,
+
+
+
+
+ const char *
+ _unixType = 0,
+
+
+
+
+ const char *
+ _mimeType1 = 0,
+
+
+
+
+ const char *
+ _mimeType2 = 0
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
Member Data Documentation
+
+
+
+
+
+
+Windows file extension.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+additional MIME type
+
+
+
+
+
+
+
+
+
+
+
+
+Unix file extension.
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_key_code-members.html b/doc/html/struct_vst_key_code-members.html
new file mode 100644
index 0000000..f9908d6
--- /dev/null
+++ b/doc/html/struct_vst_key_code-members.html
@@ -0,0 +1,45 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstKeyCode Member List This is the complete list of members for VstKeyCode , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_key_code.html b/doc/html/struct_vst_key_code.html
new file mode 100644
index 0000000..31e9e6d
--- /dev/null
+++ b/doc/html/struct_vst_key_code.html
@@ -0,0 +1,109 @@
+
+
+VST SDK 2.4: VstKeyCode Struct Reference
+
+
+
+
+
+
+VstKeyCode Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+Structure used for keyUp/keyDown.
+
+
Member Data Documentation
+
+
+
+
+
+
+ASCII character.
+
+
+
+
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_midi_event-members.html b/doc/html/struct_vst_midi_event-members.html
new file mode 100644
index 0000000..63983a0
--- /dev/null
+++ b/doc/html/struct_vst_midi_event-members.html
@@ -0,0 +1,53 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstMidiEvent Member List This is the complete list of members for VstMidiEvent , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_midi_event.html b/doc/html/struct_vst_midi_event.html
new file mode 100644
index 0000000..46d8cbe
--- /dev/null
+++ b/doc/html/struct_vst_midi_event.html
@@ -0,0 +1,271 @@
+
+
+VST SDK 2.4: VstMidiEvent Struct Reference
+
+
+
+
+
+
+VstMidiEvent Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+MIDI Event (to be casted from VstEvent ).
+
+
Member Data Documentation
+
+
+
+
+
+
+
+
+sample frames related to the current block start sample position
+
+
+
+
+
+
+
+
+
+
+-64 to +63 cents; for scales other than 'well-tempered' ('microtuning')
+
+
+
+
+
+
+
+
+
+
+
+
+1 to 3 MIDI bytes; midiData[3] is reserved (zero)
+
+
+
+
+
+
+
+
+
+
+(in sample frames) of entire note, if available, else 0
+
+
+
+
+
+
+
+
+
+
+offset (in sample frames) into note from note start if available, else 0
+
+
+
+
+
+
+
+
+
+
+Note Off Velocity [0, 127].
+
+
+
+
+
+
+
+
+
+
+zero (Reserved for future use)
+
+
+
+
+
+
+
+
+
+
+zero (Reserved for future use)
+
+
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_midi_sysex_event-members.html b/doc/html/struct_vst_midi_sysex_event-members.html
new file mode 100644
index 0000000..a0545d3
--- /dev/null
+++ b/doc/html/struct_vst_midi_sysex_event-members.html
@@ -0,0 +1,50 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstMidiSysexEvent Member List This is the complete list of members for VstMidiSysexEvent , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_midi_sysex_event.html b/doc/html/struct_vst_midi_sysex_event.html
new file mode 100644
index 0000000..821e523
--- /dev/null
+++ b/doc/html/struct_vst_midi_sysex_event.html
@@ -0,0 +1,213 @@
+
+
+VST SDK 2.4: VstMidiSysexEvent Struct Reference
+
+
+
+
+
+
+VstMidiSysexEvent Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+MIDI Sysex Event (to be casted from VstEvent ).
+
+
Member Data Documentation
+
+
+
+
+
+
+
+
+sample frames related to the current block start sample position
+
+
+
+
+
+
+
+
+
+
+byte size of sysexDump
+
+
+
+
+
+
+
+
+
+
+none defined yet (should be zero)
+
+
+
+
+
+
+
+
+
+
+zero (Reserved for future use)
+
+
+
+
+
+
+
+
+
+
+zero (Reserved for future use)
+
+
+
+
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_offline_task-members.html b/doc/html/struct_vst_offline_task-members.html
new file mode 100644
index 0000000..bd0b8cc
--- /dev/null
+++ b/doc/html/struct_vst_offline_task-members.html
@@ -0,0 +1,73 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstOfflineTask Member List This is the complete list of members for VstOfflineTask , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_offline_task.html b/doc/html/struct_vst_offline_task.html
new file mode 100644
index 0000000..0ca4fa7
--- /dev/null
+++ b/doc/html/struct_vst_offline_task.html
@@ -0,0 +1,673 @@
+
+
+VST SDK 2.4: VstOfflineTask Struct Reference
+
+
+
+
+
+
+VstOfflineTask Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+Offline Task Description.
+
+
Member Data Documentation
+
+
+
+
+
+
+set by plug-in
+
+
+
+
+
+
+
+
+
+
+set by Host or plug-in
+
+
+
+
+
+
+
+
+
+
+set by plug-in
+
+
+
+
+
+
+
+
+
+
+
+
+Reserved for future use.
+
+
+
+
+
+
+
+
+
+
+
+
+set by Host or plug-in
+
+
+
+
+
+
+
+
+
+
+
+
+set by plug-in
+
+
+
+
+
+
+
+
+
+
+set by Host or plug-in
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set by Host or plug-in
+
+
+
+
+
+
+
+
+
+
+
+
+set by plug-in or Host
+
+
+
+
+
+
+
+
+
+
+set by plug-in
+
+
+
+
+
+
+
+
+
+
+
+
+set by plug-in
+
+
+
+
+
+
+
+
+
+
+set by plug-in
+
+
+
+
+
+
+
+
+
+
+Reserved for future use.
+
+
+
+
+
+
+
+
+
+
+set by plug-in
+
+
+
+
+
+
+
+
+
+
+set by plug-in/Host
+
+
+
+
+
+
+
+
+
+
+set by plug-in/Host
+
+
+
+
+
+
+
+
+
+
+Reserved for future use.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set by Host or plug-in
+
+
+
+
+
+
+
+
+
+
+set by Host or plug-in
+
+
+
+
+
+
+
+
+
+
+set by plug-in
+
+
+
+
+
+
+
+
+
+
+set by plug-in/Host
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_parameter_properties-members.html b/doc/html/struct_vst_parameter_properties-members.html
new file mode 100644
index 0000000..409cc04
--- /dev/null
+++ b/doc/html/struct_vst_parameter_properties-members.html
@@ -0,0 +1,58 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstParameterProperties Member List This is the complete list of members for VstParameterProperties , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_parameter_properties.html b/doc/html/struct_vst_parameter_properties.html
new file mode 100644
index 0000000..8ab3412
--- /dev/null
+++ b/doc/html/struct_vst_parameter_properties.html
@@ -0,0 +1,371 @@
+
+
+VST SDK 2.4: VstParameterProperties Struct Reference
+
+
+
+
+
+
+VstParameterProperties Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+Parameter Properties used in effGetParameterProperties .
+
+
Member Data Documentation
+
+
+
+
+
+
+0: no category, else group index + 1
+
+
+
+
+
+
+
+
+
+
+category label, e.g. "Osc 1"
+
+
+
+
+
+
+
+
+
+
+index where this parameter should be displayed (starting with 0)
+
+
+
+
+
+
+
+
+
+
+
+
+reserved for future use
+
+
+
+
+
+
+
+
+
+
+parameter label
+
+
+
+
+
+
+
+
+
+
+large float step
+
+
+
+
+
+
+
+
+
+
+large integer step
+
+
+
+
+
+
+
+
+
+
+integer maximum
+
+
+
+
+
+
+
+
+
+
+integer minimum
+
+
+
+
+
+
+
+
+
+
+number of parameters in category
+
+
+
+
+
+
+
+
+
+
+
+
+short label, recommended: 6 + delimiter
+
+
+
+
+
+
+
+
+
+
+small float step
+
+
+
+
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_patch_chunk_info-members.html b/doc/html/struct_vst_patch_chunk_info-members.html
new file mode 100644
index 0000000..f8c07b0
--- /dev/null
+++ b/doc/html/struct_vst_patch_chunk_info-members.html
@@ -0,0 +1,47 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstPatchChunkInfo Member List This is the complete list of members for VstPatchChunkInfo , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_patch_chunk_info.html b/doc/html/struct_vst_patch_chunk_info.html
new file mode 100644
index 0000000..1bbe908
--- /dev/null
+++ b/doc/html/struct_vst_patch_chunk_info.html
@@ -0,0 +1,153 @@
+
+
+VST SDK 2.4: VstPatchChunkInfo Struct Reference
+
+
+
+
+
+
+VstPatchChunkInfo Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+Structure used for effBeginLoadBank /effBeginLoadProgram .
+
+
Member Data Documentation
+
+
+
+
+
+
+Reserved for future use.
+
+
+
+
+
+
+
+
+
+
+Number of Programs (Bank) or Parameters (Program).
+
+
+
+
+
+
+
+
+
+
+UniqueID of the plug-in.
+
+
+
+
+
+
+
+
+
+
+Plug-in Version.
+
+
+
+
+
+
+
+
+
+
+Format Version (should be 1).
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_pin_properties-members.html b/doc/html/struct_vst_pin_properties-members.html
new file mode 100644
index 0000000..9214fbc
--- /dev/null
+++ b/doc/html/struct_vst_pin_properties-members.html
@@ -0,0 +1,47 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstPinProperties Member List This is the complete list of members for VstPinProperties , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_pin_properties.html b/doc/html/struct_vst_pin_properties.html
new file mode 100644
index 0000000..9b7c0d3
--- /dev/null
+++ b/doc/html/struct_vst_pin_properties.html
@@ -0,0 +1,149 @@
+
+
+VST SDK 2.4: VstPinProperties Struct Reference
+
+
+
+
+
+
+VstPinProperties Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+Pin Properties used in effGetInputProperties and effGetOutputProperties .
+
+
Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+reserved for future use
+
+
+
+
+
+
+
+
+
+
+
+
+short name (recommended: 6 + delimiter)
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_speaker_arrangement-members.html b/doc/html/struct_vst_speaker_arrangement-members.html
new file mode 100644
index 0000000..5fd06b6
--- /dev/null
+++ b/doc/html/struct_vst_speaker_arrangement-members.html
@@ -0,0 +1,45 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstSpeakerArrangement Member List This is the complete list of members for VstSpeakerArrangement , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_speaker_arrangement.html b/doc/html/struct_vst_speaker_arrangement.html
new file mode 100644
index 0000000..1f58926
--- /dev/null
+++ b/doc/html/struct_vst_speaker_arrangement.html
@@ -0,0 +1,114 @@
+
+
+VST SDK 2.4: VstSpeakerArrangement Struct Reference
+
+
+
+
+
+
+VstSpeakerArrangement Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+Speaker Arrangement.
+
+
Member Data Documentation
+
+
+
+
+
+
+number of channels in this speaker arrangement
+
+
+
+
+
+
+
+
+
+
+variable sized speaker array
+
+
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_speaker_properties-members.html b/doc/html/struct_vst_speaker_properties-members.html
new file mode 100644
index 0000000..ebe549f
--- /dev/null
+++ b/doc/html/struct_vst_speaker_properties-members.html
@@ -0,0 +1,49 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstSpeakerProperties Member List This is the complete list of members for VstSpeakerProperties , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_speaker_properties.html b/doc/html/struct_vst_speaker_properties.html
new file mode 100644
index 0000000..53303cb
--- /dev/null
+++ b/doc/html/struct_vst_speaker_properties.html
@@ -0,0 +1,191 @@
+
+
+VST SDK 2.4: VstSpeakerProperties Struct Reference
+
+
+
+
+
+
+VstSpeakerProperties Struct Reference #include <aeffectx.h>
+
+List of all members.
+
+Public Attributes
+float azimuth
+
+ unit: rad, range: -PI...PI, exception: 10.f for LFE channel
+float elevation
+
+ unit: rad, range: -PI/2...PI/2, exception: 10.f for LFE channel
+float radius
+
+ unit: meter, exception: 0.f for LFE channel
+float reserved
+
+ zero (reserved for future use)
+char name [kVstMaxNameLen]
+
+ for new setups, new names should be given (L/R/C... won't do)
+VstInt32 type
+
+char future [28]
+
+ reserved for future use
+
+Detailed Description
+Speaker Properties. The origin for azimuth is right (as by math conventions dealing with radians). The elevation origin is also right, visualizing a rotation of a circle across the -pi/pi axis of the horizontal circle. Thus, an elevation of -pi/2 corresponds to bottom, and a speaker standing on the left, and 'beaming' upwards would have an azimuth of -pi, and an elevation of pi/2. For user interface representation, grads are more likely to be used, and the origins will obviously 'shift' accordingly.
+
+
Member Data Documentation
+
+
+
+
+
+
+unit: rad, range: -PI...PI, exception: 10.f for LFE channel
+
+
+
+
+
+
+
+
+
+
+unit: rad, range: -PI/2...PI/2, exception: 10.f for LFE channel
+
+
+
+
+
+
+
+
+
+
+reserved for future use
+
+
+
+
+
+
+
+
+
+
+for new setups, new names should be given (L/R/C... won't do)
+
+
+
+
+
+
+
+
+
+
+unit: meter, exception: 0.f for LFE channel
+
+
+
+
+
+
+
+
+
+
+zero (reserved for future use)
+
+
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_time_info-members.html b/doc/html/struct_vst_time_info-members.html
new file mode 100644
index 0000000..8d914f8
--- /dev/null
+++ b/doc/html/struct_vst_time_info-members.html
@@ -0,0 +1,56 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstTimeInfo Member List This is the complete list of members for VstTimeInfo , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_time_info.html b/doc/html/struct_vst_time_info.html
new file mode 100644
index 0000000..31c2dda
--- /dev/null
+++ b/doc/html/struct_vst_time_info.html
@@ -0,0 +1,334 @@
+
+
+VST SDK 2.4: VstTimeInfo Struct Reference
+
+
+
+
+
+
+VstTimeInfo Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+VstTimeInfo requested via audioMasterGetTime .See also: AudioEffectX::getTimeInfo
+Note: VstTimeInfo::samplePos :Current Position. It must always be valid, and should not cost a lot to ask for. The sample position is ahead of the time displayed to the user. In sequencer stop mode, its value does not change. A 32 bit integer is too small for sample positions, and it's a double to make it easier to convert between ppq and samples.
+VstTimeInfo::ppqPos : At tempo 120, 1 quarter makes 1/2 second, so 2.0 ppq translates to 48000 samples at 48kHz sample rate. .25 ppq is one sixteenth note then. if you need something like 480ppq, you simply multiply ppq by that scaler.
+VstTimeInfo::barStartPos : Say we're at bars/beats readout 3.3.3. That's 2 bars + 2 q + 2 sixteenth, makes 2 * 4 + 2 + .25 = 10.25 ppq. at tempo 120, that's 10.25 * .5 = 5.125 seconds, times 48000 = 246000 samples (if my calculator servers me well :-).
+VstTimeInfo::samplesToNextClock : MIDI Clock Resolution (24 per Quarter Note), can be negative the distance to the next midi clock (24 ppq, pulses per quarter) in samples. unless samplePos falls precicely on a midi clock, this will either be negative such that the previous MIDI clock is addressed, or positive when referencing the following (future) MIDI clock.
+
+
+
Member Data Documentation
+
+
+
+
+
+
+last Bar Start Position, in Quarter Note
+
+
+
+
+
+
+
+
+
+
+Cycle End (right locator), in Quarter Note.
+
+
+
+
+
+
+
+
+
+
+Cycle Start (left locator), in Quarter Note.
+
+
+
+
+
+
+
+
+
+
+
+
+System Time in nanoseconds (10^-9 second).
+
+
+
+
+
+
+
+
+
+
+Musical Position, in Quarter Note (1.0 equals 1 Quarter Note).
+
+
+
+
+
+
+
+
+
+
+current Position in audio samples (always valid)
+
+
+
+
+
+
+
+
+
+
+current Sample Rate in Herz (always valid)
+
+
+
+
+
+
+
+
+
+
+MIDI Clock Resolution (24 Per Quarter Note), can be negative (nearest clock).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+current Tempo in BPM (Beats Per Minute)
+
+
+
+
+
+
+
+
+
+
+Time Signature Denominator (e.g. 4 for 3/4).
+
+
+
+
+
+
+
+
+
+
+Time Signature Numerator (e.g. 3 for 3/4).
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_variable_io-members.html b/doc/html/struct_vst_variable_io-members.html
new file mode 100644
index 0000000..c2db033
--- /dev/null
+++ b/doc/html/struct_vst_variable_io-members.html
@@ -0,0 +1,48 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstVariableIo Member List This is the complete list of members for VstVariableIo , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_variable_io.html b/doc/html/struct_vst_variable_io.html
new file mode 100644
index 0000000..4d1b2db
--- /dev/null
+++ b/doc/html/struct_vst_variable_io.html
@@ -0,0 +1,173 @@
+
+
+VST SDK 2.4: VstVariableIo Struct Reference
+
+
+
+
+
+
+VstVariableIo Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+Variable IO for Offline Processing.
+
+
Member Data Documentation
+
+
+
+
+
+
+input audio buffers
+
+
+
+
+
+
+
+
+
+
+number of incoming samples
+
+
+
+
+
+
+
+
+
+
+number of samples actually processed of input
+
+
+
+
+
+
+
+
+
+
+number of outgoing samples
+
+
+
+
+
+
+
+
+
+
+number of samples actually processed of output
+
+
+
+
+
+
+
+
+
+
+output audio buffers
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_window-members.html b/doc/html/struct_vst_window-members.html
new file mode 100644
index 0000000..af9063f
--- /dev/null
+++ b/doc/html/struct_vst_window-members.html
@@ -0,0 +1,52 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+VstWindow Member List This is the complete list of members for VstWindow , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/struct_vst_window.html b/doc/html/struct_vst_window.html
new file mode 100644
index 0000000..cd79c5d
--- /dev/null
+++ b/doc/html/struct_vst_window.html
@@ -0,0 +1,224 @@
+
+
+VST SDK 2.4: VstWindow Struct Reference
+
+
+
+
+
+
+VstWindow Struct Reference #include <aeffectx.h>
+
+List of all members.
+Detailed Description
+Deprecated: Structure used for openWindow and closeWindow (deprecated in VST 2.4).
+
+
+
Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/structfx_bank-members.html b/doc/html/structfx_bank-members.html
new file mode 100644
index 0000000..2b7749d
--- /dev/null
+++ b/doc/html/structfx_bank-members.html
@@ -0,0 +1,56 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+fxBank Member List This is the complete list of members for fxBank , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/structfx_bank.html b/doc/html/structfx_bank.html
new file mode 100644
index 0000000..7cffb4d
--- /dev/null
+++ b/doc/html/structfx_bank.html
@@ -0,0 +1,337 @@
+
+
+VST SDK 2.4: fxBank Struct Reference
+
+
+
+
+
+
+fxBank Struct Reference #include <vstfxstore.h>
+
+List of all members.
+Detailed Description
+Bank (fxb) structure.
+
+
Member Data Documentation
+
+
+
+
+
+
+size of this chunk, excl. magic + byteSize
+
+
+
+
+
+
+
+
+
+
+variable sized array with opaque bank data
+
+
+
+
+
+
+
+
+
+
+
+
+bank content depending on fxMagic
+
+
+
+
+
+
+
+
+
+
+version 2: current program number
+
+
+
+
+
+
+
+
+
+
+bank chunk data
+
+
+
+
+
+
+
+
+
+
+reserved, should be zero
+
+
+
+
+
+
+
+
+
+
+
+
+'FxBk' (regular) or 'FBCh' (opaque chunk)
+
+
+
+
+
+
+
+
+
+
+
+
+number of programs
+
+
+
+
+
+
+
+
+
+
+variable number of programs
+
+
+
+
+
+
+
+
+
+
+size of bank data
+
+
+
+
+
+
+
+
+
+
+format version (1 or 2)
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/structfx_program-members.html b/doc/html/structfx_program-members.html
new file mode 100644
index 0000000..0681af2
--- /dev/null
+++ b/doc/html/structfx_program-members.html
@@ -0,0 +1,55 @@
+
+
+VST SDK 2.4: Member List
+
+
+
+
+
+
+fxProgram Member List This is the complete list of members for fxProgram , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/structfx_program.html b/doc/html/structfx_program.html
new file mode 100644
index 0000000..97a81bb
--- /dev/null
+++ b/doc/html/structfx_program.html
@@ -0,0 +1,317 @@
+
+
+VST SDK 2.4: fxProgram Struct Reference
+
+
+
+
+
+
+fxProgram Struct Reference #include <vstfxstore.h>
+
+List of all members.
+Detailed Description
+Program (fxp) structure.
+
+
Member Data Documentation
+
+
+
+
+
+
+size of this chunk, excl. magic + byteSize
+
+
+
+
+
+
+
+
+
+
+variable sized array with opaque program data
+
+
+
+
+
+
+
+
+
+
+
+
+program content depending on fxMagic
+
+
+
+
+
+
+
+
+
+
+program chunk data
+
+
+
+
+
+
+
+
+
+
+
+
+'FxCk' (regular) or 'FPCh' (opaque chunk)
+
+
+
+
+
+
+
+
+
+
+
+
+number of parameters
+
+
+
+
+
+
+
+
+
+
+variable sized array with parameter values
+
+
+
+
+
+
+
+
+
+
+program name (null-terminated ASCII string)
+
+
+
+
+
+
+
+
+
+
+size of program data
+
+
+
+
+
+
+
+
+
+
+format version (currently 1)
+
+
+
+
+
The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/tab_b.gif b/doc/html/tab_b.gif
new file mode 100644
index 0000000..0d62348
Binary files /dev/null and b/doc/html/tab_b.gif differ
diff --git a/doc/html/tab_l.gif b/doc/html/tab_l.gif
new file mode 100644
index 0000000..9b1e633
Binary files /dev/null and b/doc/html/tab_l.gif differ
diff --git a/doc/html/tab_r.gif b/doc/html/tab_r.gif
new file mode 100644
index 0000000..ce9dd9f
Binary files /dev/null and b/doc/html/tab_r.gif differ
diff --git a/doc/html/tabs.css b/doc/html/tabs.css
new file mode 100644
index 0000000..a61552a
--- /dev/null
+++ b/doc/html/tabs.css
@@ -0,0 +1,102 @@
+/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
+
+DIV.tabs
+{
+ float : left;
+ width : 100%;
+ background : url("tab_b.gif") repeat-x bottom;
+ margin-bottom : 4px;
+}
+
+DIV.tabs UL
+{
+ margin : 0px;
+ padding-left : 10px;
+ list-style : none;
+}
+
+DIV.tabs LI, DIV.tabs FORM
+{
+ display : inline;
+ margin : 0px;
+ padding : 0px;
+}
+
+DIV.tabs FORM
+{
+ float : right;
+}
+
+DIV.tabs A
+{
+ float : left;
+ background : url("tab_r.gif") no-repeat right top;
+ border-bottom : 1px solid #84B0C7;
+ font-size : x-small;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+DIV.tabs A:hover
+{
+ background-position: 100% -150px;
+}
+
+DIV.tabs A:link, DIV.tabs A:visited,
+DIV.tabs A:active, DIV.tabs A:hover
+{
+ color: #1A419D;
+}
+
+DIV.tabs SPAN
+{
+ float : left;
+ display : block;
+ background : url("tab_l.gif") no-repeat left top;
+ padding : 5px 9px;
+ white-space : nowrap;
+}
+
+DIV.tabs INPUT
+{
+ float : right;
+ display : inline;
+ font-size : 1em;
+}
+
+DIV.tabs TD
+{
+ font-size : x-small;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+DIV.tabs SPAN {float : none;}
+/* End IE5-Mac hack */
+
+DIV.tabs A:hover SPAN
+{
+ background-position: 0% -150px;
+}
+
+DIV.tabs LI#current A
+{
+ background-position: 100% -150px;
+ border-width : 0px;
+}
+
+DIV.tabs LI#current SPAN
+{
+ background-position: 0% -150px;
+ padding-bottom : 6px;
+}
+
+DIV.nav
+{
+ background : none;
+ border : none;
+ border-bottom : 1px solid #84B0C7;
+}
diff --git a/doc/html/thanks.html b/doc/html/thanks.html
new file mode 100644
index 0000000..ec626cf
--- /dev/null
+++ b/doc/html/thanks.html
@@ -0,0 +1,40 @@
+
+
+VST SDK 2.4: Acknowledgements
+
+
+
+
+
+The VSTGUI interfaces & libraries were created by Yvan Grabit and Michael Schmidt (additional development Matthias Juwan, Arne Scheffler). The time they have invested has really made the huge inroads into cross-platform code compatibility.
+Thanks too, to Philippe Goutier who provided the VST Offline Interface.
+Not forgetting Dave Nicholson, Julien Junod, Pierre Jean Camillieri, Janne Roeper, Rene Hansen who did some additional typing.
+There were many more people involved in the creation of this interface, not all of whom can be mentioned here. We extend our thanks not just to the Steinberg Staff and Associates that contributed but also to the many other developers from other parties have helped with their input - mainly all the nice people on the VST Plug-In DEVELOPER MAILING LIST
+Thanks to all of you for having made this possible.
+Charlie Steinberg 2006
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/tree.html b/doc/html/tree.html
new file mode 100644
index 0000000..fa6397b
--- /dev/null
+++ b/doc/html/tree.html
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+ TreeView
+
+
+
+
+
+
+
diff --git a/doc/html/vstfxstore_8h.html b/doc/html/vstfxstore_8h.html
new file mode 100644
index 0000000..b15db02
--- /dev/null
+++ b/doc/html/vstfxstore_8h.html
@@ -0,0 +1,138 @@
+
+
+VST SDK 2.4: vstfxstore.h File Reference
+
+
+
+
+
+
+
+vstfxstore.h File Reference #include "aeffect.h "
+
+Define Documentation
+
+
+
+
+
+ #define bankMagic 'FxBk'
+
+
+
+
+
+
+Regular Bank (fxb) identifier.
+
+
+
+
+
+
+
+ #define chunkBankMagic 'FBCh'
+
+
+
+
+
+
+Bank (fxb) identifier for opaque chunk data.
+
+
+
+
+
+
+
+ #define chunkPresetMagic 'FPCh'
+
+
+
+
+
+
+Program (fxp) identifier for opaque chunk data.
+
+
+
+
+
+
+
+ #define cMagic 'CcnK'
+
+
+
+
+
+
+Root chunk identifier for Programs (fxp) and Banks (fxb).
+
+
+
+
+
+
+
+ #define fMagic 'FxCk'
+
+
+
+
+
+
+Regular Program (fxp) identifier.
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/vstoffline.html b/doc/html/vstoffline.html
new file mode 100644
index 0000000..58fd3b0
--- /dev/null
+++ b/doc/html/vstoffline.html
@@ -0,0 +1,1391 @@
+
+
+VST SDK 2.4: VST Offline Processing
+
+
+
+
+
+ Introduction
+ The VST offline interface is a powerful API that allows a Plug-In to freely read
+ audio files open in the host, to transform them or to generate new audio files.
+ The main features are:
+
+
+ The Plug-In controls reading/writing of audio samples
+ by sending commands to the host (this approach is the reverse of the mechanism
+ used in the real-time interface).
+
+
+ A Plug-In can read, simultaneously and with
+ random-access, any number of files open in the host.
+
+
+ A Plug-In can overwrite part or all of any open file
+ in the host, with random access.
+
+
+ A Plug-In can create one or more files (temporary
+ ones or not).
+
+
+ Any file created by the Plug-In can be freely re-read
+ and overwritten, with random access, during the process.
+
+
+ Thanks to "delayed overwriting", original samples in
+ source files are preserved in all cases and can be read again, at will and at
+ any time during a process.
+
+
+ Not only audio can be read/written in files: markers
+ can be created; sample selection can be set; edit cursor can be moved.
+ Moreover, custom parameters can be written along a file, with a time stamp,
+ and read again later, by the same Plug-In or another one.
+
+
+ No stereo assumption: could be used for multi-channel
+ files, if the host supports it.
+
+
+ An offline Plug-In can be used as a file transformer,
+ as a file analyzer or as a file generator.
+
+
+ An offline Plug-In does not deal directly with file
+ i/o and file formats: it just sends read and write commands with float
+ buffers, resulting in great simplification.
+
+
+ An offline-capable Plug-In is notified by the host anytime a change occurs in
+ the set of files available for editing (new open file, transformed file, new
+ marker created in a file, etc.). This allows the Plug-In, if necessary, to
+ update its user interface according to the context (e.g. new file with the
+ focus; or to show a list of files to pick from; etc.).
+
+
+ Declaring an offline Plug-In
+ The host knows if a given Plug-In supports the offline interface through the
+ canDo function, as follows:
+
+
+
+ If canDo ("offline") is true, the Plug-In supports
+ the offline interface
+
+
+ If canDo ("noRealTime") is true, the Plug-In only supports the offline
+ interface
+
+ Overview of the interface
+ Three structures are dedicated to the offline interface:
+
+
+ VstOfflineTask
+
+ VstAudioFile
+
+ VstAudioFileMarker
+
+ There are also three enums:
+
+
+
+ VstOfflineTaskFlags
+
+ VstAudioFileFlags
+
+ VstOfflineOption
+
+ Three host opcodes are defined:
+
+
+ audioMasterOfflineStart
+
+ audioMasterOfflineRead
+
+ audioMasterOfflineWrite
+
+ with the corresponding functions in AudioEffectX:
+
+
+ bool offlineStart(VstAudioFile* ptr, VstInt32 numAudioFiles, VstInt32
+ numNewAudioFiles);
+
+ bool offlineRead(VstOfflineTask* offline, VstOfflineOption option, bool
+ readSource = true);
+
+ bool offlineWrite(VstOfflineTask* offline, VstOfflineOption option);
+
+ Three Plug-In opcodes are defined:
+
+
+ effOfflineNotify,
+
+ effOfflinePrepare,
+
+ effOfflineRun,
+
+ with the corresponding functions in AudioEffectX:
+
+
+ void offlineNotify(VstAudioFile* ptr, VstInt32 numAudioFiles, bool start);
+
+ bool offlinePrepare(VstOfflineTask* offline, VstInt32 count);
+
+ bool offlineRun(VstOfflineTask* offline, VstInt32 count);
+
+ An offline process results from a nested sequence of calls, as follows:
+
+
+ The host calls offlineNotify, passing an array of
+ VstAudioFile structures that describe all files that can be read and written.
+ There is also a "start" argument that indicates to the Plug-In whether the
+ process should begin or not. The "start" argument is true e.g. after the user
+ presses the "Process" button (which should be under the host control). The
+ "start" argument is false if the call results from any change in the file
+ environment of the host.
+
+
+ In its implementation of offlineNotify, the Plug-In
+ states which file(s) it wants to read and write, by setting flags in the
+ VstAudioFile structures. Then the Plug-In calls the function offlineStart. The
+ last argument of offlineStart allows the Plug-In to create one or more new
+ files.
+
+
+ In its implementation of offlineStart, the host
+ initializes an array of VstOfflineTask structures, one for each file to read
+ or/and write. Then the host calls: offlinePrepare.
+
+
+ In its implementation of offlinePrepare, the Plug-In
+ continues the initialization of the VstOfflineTask structures (eg. set the
+ sample rate and number of channels in new files).
+
+
+ If offlinePrepare returns true, the host finalizes
+ the preparation of the VstOfflineTask structures (eg. allocate i/o audio
+ buffers), then calls offlineRun.
+
+
+ In its implementation of offlineRun, the Plug-In can call the host functions
+ offlineRead and offlineWrite at will, until its audio processing is completed.
+ The approach is therefore opposite to the realtime interface: the Plug-In here
+ instructs the host about which files to read and write, in which order, at
+ which rate. A small diagram can illustrate the nested sequence of calls.
+ Functions in red are called by the host and implemented by the Plug-In.
+ Functions in blue are called by the Plug-In and implemented by the host.
+
+
+
+ offlineNotify
+ {
+
+
+ offlineStart
+
+ {
+
+ offlinePrepare
+ offlineRun
+ {
+
+
+ . ..
+ offlineRead
+ offlineWrite
+ . ..
+
+
+ }
+
+ }
+
+ }
+
+
+
+ Details of the interface
+ struct VstAudioFile
+ This structure describes an audio file already open in the host. This
+ description is systemindependent: no file path is specified. A Plug-In does not
+ query the host about available files; instead, it gets informed about the
+ available files when the host calls the function offlineNotify.
+
+ Note: there is an option, however, to force the host to send a notification
+ (see kVstOfflineQueryFiles ).
+
+ The host sets all the members of this structure, unless notified otherwise.
+
+
+ VstInt32 flags
+ See enum VstAudioFileFlags. Both host and Plug-In can set flags.
+ void* hostOwned
+ Any data private to host.
+ void* plugOwned
+ Any data private to Plug-In. This value is (optionally) set by the Plug-In in
+ its implementation of offlineNotify. This value is then copied by the host into
+ the VstOfflineTask structure (plugOwned member), when offlineStart is called
+ (this allows the Plug-In, if necessary, to make a link between the
+ offlineNotify call and the offlinePrepare/offlineRun calls).
+ char name[100]
+
+ Name of the file (no path, just name without any file extension). This can be
+ used by the Plug-In to display in its user interface the list of all files
+ available for processing. This is useful if the Plug-In requires the user to
+ select more than one file to perform its job (eg. mixer, file comparer,
+ etc...).
+ VstInt32 uniqueId
+ This value identifies a file instance in the host, during a session. Not two
+ file instances must ever get the same ID during a session. If a file gets
+ closed and is reopen later, it must be attributed an ID that was never
+ attributed so far during the session. From the host side, this can be easily
+ implemented with a simple global counter. This ID can be a useful reference for
+ a Plug-In, if its user interface maintains a list of files that the user can
+ select.
+ double sampleRate
+ sample rate of the file
+ VstInt32 numChannels
+ number of channels: 1 for mono, 2 for stereo, etc...
+ double numFrames
+ number of frames in the audio file
+ VstInt32 format
+ reserved for future. Currently 0.
+ double editCursorPosition
+ frame index of the edit cursor, or -1 if no such cursor exists. This member
+ represents the "edit-cursor" position, if any, but never the "playback-cursor"
+ position.
+ double selectionStart
+ frame index of first selected frame, or -1 if there is no selection
+ double selectionSize
+ number of frames in selection. Zero if no selection.
+ VstInt32 selectedChannelsMask
+ Bit mask describing which channels are selected. One bit per channel. Eg. value
+ 3 means that both channels of a stereo file are selected.
+
+ VstInt32 numMarkers
+ number of markers in the file. The Plug-In can use offlineRead to get details
+ about the markers.
+
+ VstInt32 timeRulerUnit
+ If the Plug-In needs to display time values, it might be nice to match the unit
+ system selected by the user for the file in the host. This is the reason why
+ this member, and the following ones, are provided. Possible values: 0:
+ undefined 1: samples units 2: hours/minutes/seconds/milliseconds 3: smpte 4:
+ measures and beats
+
+ double timeRulerOffset
+ frame offset of the time ruler for the window that displays the audio file.
+ Usually 0 but could be negative or positive.
+
+ double tempo
+ -1 if not used by the file's time ruler, else BPM units.
+
+ VstInt32 timeSigNumerator
+ -1 if not used by the file's time ruler, else number of beats per measure
+
+ VstInt32 timeSigDenominator
+ -1 if not used by the file's time ruler, else number of beats per whole note
+
+ VstInt32 ticksPerBlackNote
+ -1 if not used by the file's time ruler, else sequencer resolution
+
+ VstInt32 smpteFrameRate
+ -1 if not used by the file's time ruler, else refers to VstTimeInfo for
+ the meaning.
+
+
+
+
+ enum VstAudioFileFlags
+ This refers to the possible flags for the member flag of the structure
+ VstAudioFile :
+ The host sets its flags before calling offlineNotify. The Plug-In sets its flags
+ in its implementation of offlineNotify, before calling offlineStart.
+
+
+
+
+
+ kVstOfflineReadOnly
+
+
+ Set by host. Means that the file can't be modified, it can only be read. If the
+ Plug-In tries to write it later, the host should return false from
+ offlineWrite.
+
+
+ kVstOfflineNoRateConversion
+
+
+ Set by host. Means that the file can't have its sample rate modified.
+
+ kVstOfflineNoChannelChange
+
+
+ Set by host. Means that the number of channels can't be changed (eg. the host
+ might not allow an in-place mono to stereo conversion).
+
+
+ kVstOfflineCanProcessSelection
+
+ Set by the Plug-In if its process can be applied to a limited part of a file. If
+ no selection exists, the entire file range is used. The host checks this flag
+ and, accordingly, initializes the members positionToProcessFrom and
+ numFramesToProcess in the structure VstOfflineTask. Setting this flag is a
+ common case, but a counter example is e.g. a sample rate converter (the sample
+ rate is global to a file and can't be applied to a limited part of a file).
+
+ kVstOfflineNoCrossfade
+
+ Consider the case of a Plug-In transforming only a part of a file. To avoid a
+ click at the edges (between the processed part and the non-processed part) the
+ host might perform a short crossfade with the old samples, according to user
+ preferences. However, a Plug-In might want to reject this option for some
+ reasons (eg. the Plug-In performs a local glitch restoration and wants to
+ perform the crossfade itself). In that case, the Plug-In should set this flag
+ to instruct the host not to perform any crossfade.
+
+ kVstOfflineWantRead
+
+ If the Plug-In wants to read the file, it should set this flag. E.g. a
+ signal-generator Plug-In would never set that flag. If this flag is not set and
+ the Plug-In tries to read the file later, the host should return false from
+ offlineRead.
+ kVstOfflineWantWrite
+ If the Plug-In wants to overwrite part or the entire file, it should set this
+ flag. E.g. an analyzer plugin would never set that flag. Note: as an
+ alternative, the Plug-In can choose to create a new file, rather than
+ overwriting the source file (see offlineStart). If this flag is not set and the
+ Plug-In tries to write the file later, the host should return false from
+ offlineWrite.
+ kVstOfflineWantWriteMarker
+
+ If the Plug-In wants to modify or create markers in the file, it should set this
+ flag. If this flag is not set and the Plug-In tries to move or create a marker
+ later, the host should return false from offlineWrite.
+
+ kVstOfflineWantMoveCursor
+ If the Plug-In wants to move the edit-cursor of the file, it should set this
+ flag. If this flag is not set and the Plug-In tries to move the edit-cursor
+ later, the host should return false from offlineWrite.
+ kVstOfflineWantSelect
+
+ If the Plug-In wants to select samples in the file, it should set this flag. If
+ this flag is not set and the Plug-In tries to select samples later, the host
+ should return false from offlineWrite.
+
+
+
+
+
+ struct VstOfflineTask
+ This structure is used in offlinePrepare, offlineRun, offlineRead and
+ offlineWrite functions. Its main purpose is to be a parameter-holder to
+ instruct the host to read/write an existing file, or to write a new file.
+ However, it can also be used as a parameter-holder for other purposes, as we
+ shall see later (see VstOfflineOption). Thus, certain members of this structure
+ have a different meaning according to the option selected when calling
+ offlineRead and offlineWrite. For the sake of simplicity, we now mainly cover
+ the common case of reading/writing audio samples.
+
+ An important principle to understand from the beginning, is that each file
+ which is read or/and written is associated with a single VstOfflineTask
+ structure.
+
+
+
+ char processName[96]
+
+ Set by Plug-In in offlinePrepare. The host to label the process can
+ use this name. E.g. the host might display that name in a menu entry called
+ "Undo ....".
+
+ If the process uses multiple VstOfflineTask structures, only the first one
+ needs to have this field set (or all other VstOfflineTask structures should
+ have the same label).
+
+ This field might be erased later during the process, therefore the host should
+ make a copy of it.
+
+
+ double readPosition
+
+ Position, as frames, of the read "head" in the audio file. Set both by
+ Plug-In and host:
+
+ This value should be set by the Plug-In, before calling offlineRead, to
+ instruct the host.
+
+ On the other hand, the host updates the value to reflect the read position
+ after the call to offlineRead.
+
+
+ double writePosition
+
+ Position, as frames, of the write "head" in the audio file. Set both
+ by Plug-In and host:
+
+ This value should be set by the Plug-In, before calling offlineWrite, to
+ instruct the host.
+
+ On the other hand, the host updates the value to reflect the write position
+ after the call to offlineWrite.
+
+
+ VstInt32 readCount
+ Number of audio frames to read.
+
+ Set by Plug-In, before calling offlineRead.
+
+ When returning from offlineRead, readCount contains the number of actually read
+ frames. If the Plug-In tries to read beyond the end of the file (not considered
+ as an error), the float buffers are completed with blank frames by the host. In
+ that case, the number of blank frames is returned in the member value. In other
+ words, the sum (readCount + value) after the call is equal to the value of
+ readCount before the call.
+
+
+ VstInt32 writeCount
+
+ Number of audio frames to write.
+
+ Set by Plug-In, before calling offlineWrite.
+
+ Never set by the host. If the host can't write the samples because of a
+ disk-full situation, the host should return false from offlineWrite.
+
+
+ VstInt32 sizeInputBuffer
+
+ Size, as frames, of the audio input buffer.
+
+ Set by host before calling offlineRun.
+
+ This value remains unchanged during the whole process. A Plug-In can't read
+ more than this number of samples in a single call to offlineRead.
+
+
+ VstInt32 sizeOutputBuffer
+
+ Size, as frames, of the audio output buffer.
+
+ Set by host before calling offlineRun.
+
+ This value remains unchanged during the whole process. A Plug-In can't write
+ more than this number of samples in a single call to offlineWrite.
+
+
+ void* inputBuffer
+
+ void* outputBuffer
+
+ Both set by host, before calling offlineRun. The actual type of the
+ pointer depends on the channel mode: if the Plug-In has set the flag
+ kVstOfflineInterleavedAudio, then the type is float* (array of interleaved
+ samples). In the other case, the type is float** (array of array of samples).
+ The latter is the standard case.
+
+
+ double positionToProcessFrom
+
+ double numFramesToProcess
+
+ Set by host, according to the flags set in enum VstAudioFileFlags. This defines
+ the frame range that the Plug-In should read for its process.
+
+ If required for its algorithm, the Plug-In is allowed to read before and after
+ this range (if the range is a subset of the file), but only that range of
+ samples should be transformed.
+
+
+ double maxFramesToWrite
+
+ Set by Plug-In in offlinePrepare. This value could be used by the host for
+ optimization purposes (to select a proper write algorithm), and also to check
+ if the disk space is sufficient before starting the process.
+ If the Plug-In writes no audio, this value should be 0.
+
+ If the number of written samples is the same as the number of read samples,
+ this value should be equal to numFramesToProcess.
+
+ If the Plug-Ins does not know exactly the number of frames, this value should
+ be an approximate value, large enough for sure, but as small as possible (if
+ the Plug-In later tries to write more frames than this number, an error would
+ be issued by the host).
+
+ If the Plug-Ins does not know at all, this value should be -1 (this is the
+ default value of this member).
+
+
+ void* extraBuffer
+
+ This is set by the Plug-In. This is a buffer which is used to read/write other
+ data than audio. Meaning depends on the offlineRead/offlineWrite option (see
+ VstOfflineOption ).
+
+
+ VstInt32 value
+
+ Set by Plug-In or host. Meaning depends on the offlineRead/offlineWrite option
+ (see VstOfflineOption ).
+
+
+ VstInt32 index
+
+ Set by Plug-In or host. Meaning depends on the offlineRead/offlineWrite option
+ (see VstOfflineOption ).
+
+ This value is also optionally set by the Plug-In during offlinePrepare, as
+ follows:
+
+ If the Plug-In generates a new file out of an existing file, then it should
+ initialize this value with the index of the VstOfflineTask structure
+ corresponding to the source file. This is not mandatory, but this info could be
+ of interest for the host. Be default, index is -1 when offlinePrepare is
+ called.
+
+
+ double numFramesInSourceFile
+
+ Number of frames in source file. This is set by the host in offlineStart.
+
+ This value is only set for existing source files.
+
+ If the VstOfflineTask structure refers to a file created by the host on behalf
+ of the Plug-In, this value is 0.
+
+
+ double sourceSampleRate
+
+ Sample rate of the source file. Set by host.
+
+ If the VstOfflineTask structure refers to a file created by the host on behalf
+ of the Plug-In, this value is 0. In that case, the Plug-In must initialize this
+ value when offlinePrepare is called (in that case, same value as
+ destinationSampleRate).
+
+
+ double destinationSampleRate
+
+ Sample rate of the destination file. Set by Plug-In in offlinePrepare (but
+ previously initialized by host as sourceSampleRate).
+
+ If the VstOfflineTask structure refers to a file created by the host on behalf
+ of the Plug-In, this value is 0. In that case, the Plug-In must initialize this
+ value when offlinePrepare is called (in that case, same value as
+ sourceSampleRate).
+
+ VstInt32 numSourceChannels
+
+ Number of channels in the source file. Set by host.
+
+ Note: if the mode kVstOfflineCanProcessSelection is active, and if only one
+ channel of a stereo file is selected, then numSourceChannels should be set to
+ 1. In that case, the file appears as a mono file from the Plug-In point of
+ view.
+
+ If the VstOfflineTask structure refers to a file created by the host on behalf
+ of the Plug-In, this value is 0. In that case, the Plug-In must initialize this
+ value when offlinePrepare is called (in that case, same value as
+ numDestinationChannels).
+
+
+ VstInt32 numDestinationChannels
+
+ Number of channels in the destination file. Set by Plug-In in offlinePrepare
+ (but previously initialized by host as numSourceChannels). This value is
+ required for the host to allocate the proper outputBuffer. If the
+ VstOfflineTask structure refers to a file created by the host on behalf of the
+ Plug-In, this value is 0. In that case, the Plug-In must initialize this value
+ when offlinePrepare is called (in that case, same value as numSourceChannels).
+
+
+ VstInt32 sourceFormat
+
+ Reserved for future.
+
+ Set by host.
+
+
+ VstInt32 destinationFormat
+
+ Reserved for future.
+
+ Set by Plug-In.
+
+
+ char outputText [512]
+
+ There are three uses for this member:
+
+ If the Plug-In has instructed the host to create a new file (see offlineStart),
+ then the Plug-In can optionally provide its name in this member, with a fully
+ qualified path (this file name must be selected by the user from the Plug-In
+ user interface). In that case, the file is saved by the host in the default
+ audio file format for the platform (this could also be a host specific option).
+ This name has to be initialized when offlinePrepare is called.
+
+ Note: the host, if a demo version, might reject this option!
+
+ If outputText is empty (common case), then the host creates the file in a
+ folder dedicated to temporary files. Later, it's up to the user to save the
+ file from the host.
+
+ Before returning from a function with false, the Plug-In can set the flag
+ kVstOfflinePlugError and then (over)write the outputText member. In that case,
+ the host should display the message to the user. If the host sets the flag
+ kVstOfflineUnvalidParameter, then the host might as well fill up the outputText
+ member, to give a hint to the Plug-In, for pure debugging purposes.
+
+
+ double progress
+
+ Set by Plug-In to inform the host about the current progress of the whole
+ operation. The value must be in the range 0 to 1. If the value is not in this
+ range (e.g. -1), the host must ignore it.
+
+ The Plug-In should, if possible, update this value each time before calling
+ offlineRead and offlineWrite (this would give the host enough occasions to
+ update a progress indicator to give feedback to the user).
+ If the process has to perform several "passes", the progress value is
+ allowed to go from 0 to 1 several times. However, ideally, a single 0 to 1 pass
+ is better for the user's feedback.
+
+ The progress value is meant to be global: if there are several VstOfflineTask
+ involved, the progress value should be "independent" from each task (yet, this
+ global progress should be set in each VstOfflineTask structure passed to
+ VstOfflineTask and offlineWrite calls).
+
+
+ VstInt32 progressMode
+
+ Reserved for the future.
+
+
+ char progressText[100]
+
+ Set by Plug-In, to describe what's going on. Can be updated any time. Optional.
+
+
+ VstInt32 flags
+
+ Set by host and Plug-In. See enum VstOfflineTaskFlags .
+
+
+ VstInt32 returnValue
+
+ Reserved for the future.
+
+
+ void* hostOwned
+ Any data private to host void* plugOwned Any data private to Plug-In. This
+ value is firstly initialized by the host, in offlineStart, with the value of
+ the member plugOwned from the structure VstAudioFile (if the VstOfflineTask
+ corresponds to an existing file).
+
+
+
+ enum VstOfflineTaskFlags
+
+
+ kVstOfflineUnvalidParameter
+
+ Sets by host if the Plug-In passes an unvalid parameter. In that case, the host
+ might fill up the member outputText, to give a hint to the Plug-In, for
+ debugging purposes.
+
+
+ kVstOfflineNewFile
+
+ Set by the host to indicate that this VstOfflineTask represents a task that
+ creates/reads/writes a new file.
+
+
+ kVstOfflinePlugError
+
+ If an error happens in the Plug-In itself (not an error notified by the host),
+ then the Plug-In could optionally set this flag before returning false from its
+ function to indicate to the host that the member outputText (now) contains a
+ description of the error. The host is then in charge of displaying the message
+ to the user. The Plug-In should never try to display itself an error message
+ from the offlineRun function, since offlineRun could happen in a background
+ task.
+
+ kVstOfflineInterleavedAudio
+
+ The Plug-In should set this flag if it wants to get data in interleaved format.
+ By default, this is not the case.
+
+
+ kVstOfflineTempOutputFile
+
+ The Plug-In should set this flag in offlinePrepare, if the file to create must
+ be a temporary one. In that case, the file is deleted at the end of the process
+ (else, the file is usually open by the host at the end of the process).
+
+ This flag can obviously be set only for a new file, not for an existing file.
+
+
+ kVstOfflineFloatOutputFile
+
+ If the Plug-In needs creating a file made of float samples, this flag should be
+ set. Else, the default file format is dependant on the host (could be 16 bit,
+ 24 bit, float...). This can be useful if the Plug-In needs to store temporary
+ results to disk, without fear of clipping.
+
+
+ kVstOfflineRandomWrite
+
+ If the Plug-In needs to write randomly (not sequentially) a file, it should set
+ this flag. This flag should also be set if the file is to be written
+ sequentially more than once. This is a hint for the host to select a proper
+ writing procedure. If this flag is not set, the host could return false from
+ offlineWrite, if the Plug-In attempts a non-sequential writing.
+
+
+ kVstOfflineStretch
+
+ If the Plug-In time-stretches part or all of a file (eg. resampling), it should
+ set this flag. This instructs the host to move and stretch the relative file
+ markers, if any, to match the change. This also is of great importance in mode
+ "process-selection" (see kVstOfflineCanProcessSelection), as it instructs the
+ host to replace only the selection, whatever the number of written samples.
+ Let's take an example: if there are 10000 selected input samples (from 0 to
+ 9999) and 20000 samples are output by the Plug-In, then: 1) if the flag
+ kVstOfflineStretch is set: the host simply replaces the samples 0-9999 with the
+ new 20000 samples, and also moves/stretches the file markers as required. Note
+ that this requires the host to "push" the samples above position 20000 (to
+ insert the 10000 new samples). 2) if the flag kVstOfflineStretch is not set:
+ the host replaces the samples 0-19999 with the new 20000 samples (eg. echo
+ Plug-In that reads samples beyond the end of the selection, to merge the tail
+ of the echo).
+
+
+ kVstOfflineNoThread
+
+ The host might either create a background thread to run the process, or run it
+ inside the main application thread. The Plug-In does not decide about this.
+ However, it can happen that a process is so short that creating a thread would
+ be a waste of time. In that case, the Plug-In can set this flag as a hint to
+ the host.
+
+ struct VstAudioFileMarker
+
+
+ double position
+
+ Position of the marker
+
+
+ char name[32]
+
+ Name of the marker
+
+
+ VstInt32 type
+
+ The host might not support all types. We currently define:
+
+ 0: undefined
+
+ 1: generic marker
+
+ 2: temporary marker (not saved with the file)
+
+ 3: loop start marker
+
+ 4: loop end marker
+
+ 5: section start (whatever "section" might mean for the host)
+ 6: section end
+
+
+ VstInt32 id
+
+ This value is set by the host to identify a marker in a file. It can be any
+ value but 0, which is reserved to indicate a new marker (see option
+ kVstOfflineMarker). Not two markers can ever get the same ID for a given file.
+
+
+
+ enum VstOfflineOption
+
+ The functions offlineRead and offlineWrite have an argument (VstOfflineOption)
+ that allows to read/write different types of data. Let's see what these options
+ are:
+
+
+ kVstOfflineAudio
+
+ Use this option to read/write audio samples. See also description of
+ VstOfflineTask .
+
+ Reading can happen randomly. This means that any time during the process, a
+ Plug-In is allowed to jump at any frame position and read from that point.
+
+ Random reading can occur either in a read-only file or in a file currently
+ being written.
+
+ If a Plug-In tries to read beyond the end of the file (not to be considered as
+ an error by the host), the buffers are completed with blank samples by the
+ host. See comments about readCount on that subject.
+
+ Writing can happen randomly. This means that a file can be (over)written any
+ number of times and in any order. See kVstOfflineRandomWrite .
+
+ If writing is to happen at a position beyond the end of the file, the host must
+ extend the file as required and fill the gap with zeroes.
+
+ Delayed overwriting. When a Plug-In tries to overwrite part of an existing
+ source file, the host should in fact write the samples in a separate file. When
+ the process is finished, it's up to the host to actually replace the source
+ samples. This feature is required to let to the Plug-In have the possibility to
+ read the original samples at any time during a process.
+ One important consequence of the above feature is that any writing, whatever
+ the situation, always occur in a new - possibly temporary - file. This is why
+ all write positions that a Plug-In ever specifies, should always relate to the
+ origin Zero.
+
+ E.g. if a Plug-In wants to overwrite samples [10000-19999], it should specify
+ write position in the range [0-9999]. It's up to the host to do the rest,
+ later, to achieve the desired effect.
+
+ A Plug-In can never "overwrite" before the position given by the member
+ positionToProcessFrom; it is only possible to overwrite a continuous block
+ starting from positionToProcessFrom. If the Plug-In starts overwriting after
+ positionToProcessFrom, the gap if filled up with blank samples.
+
+ To ease the undo/redo handling of the host (usually based on audio blocks),
+ there is a rule to obey when "overwriting" a source file:
+
+ Only one continuous segment of a source file can be overwritten during a single
+ task. E.g. it is not allowed to overwrite samples 0 to 10000 then samples 50000
+ to 60000, hoping that intermediary samples are preserved. If a Plug-In does so,
+ the result is undefined. However, if a Plug-In really needs to do so, it must
+ simply transfer itself the intermediary samples.
+ kVstOfflinePeaks
+
+ The Plug-In UI might need to display part or all of a file. Reading a whole file
+ (for display purposes) is a time consuming operation; this is why most hosts
+ maintain a "peak file" that stores a "summary" of the audio file. With the
+ kVstOfflinePeaks option, a Plug-In can benefit from this host
+ functionality. This option is only to be used with offlineRead, not
+ offlineWrite. The required parameters of VstOfflineTask are the following ones:
+
+
+
+
+ positionToProcessFrom: set by Plug-In. The frame
+ index to display from.
+
+
+ numFramesToProcess: set by Plug-In. The number of
+ frames to display.
+
+
+ writeCount: set by host. This represents how many
+ elements of pixel information have been stored by the host in the
+ buffer.
+
+
+ value: set by Plug-In. This is the zoom factor: it
+ represents the desired number of frames to display per screen pixel.
+
+
+ index: set by host, see further.
+
+
+ inputBuffer: set by host. The elements of the array are not 32 bit float
+ values, but pairs of 16 bit integers.
+
+ An element of the array could be represented as follows:
+
+ struct { int16 y1; int16 y2; }
+
+ There are two ways to interpret the data written by the host into the buffer:
+
+ If the member index is set to 0 by the host, then the sound view is much
+ "compressed". In that case, a peak at a given position is represented by a
+ vertical line below and above the horizontal axis of the display. The value y1
+ represents the positive coordinate, above the axis, and the y2 coordinate, the
+ negative value below the axis.
+
+ y1 is always in the range 0 to 32767. It has to be scaled by the Plug-In,
+ according to its display's height.
+
+ y2 is always in the range -32767 to 0. It has to be scaled by the Plug-In,
+ according to its display's height. If the member index is set to 1 by the host,
+ then the sound view is less "compressed" and should be displayed as a
+ continuous curve.
+ In this case, y1 is always in the range -32767 to 32767. It has to be scaled by
+ the Plug-In, according to its display's height.
+
+ y2 is always 0 and should be ignored.
+
+ Note: since the buffer that is used with this option is the buffer normally
+ used for audio samples, the pixel data is interleaved or not, according to the
+ mode kVstOfflineInterleavedAudio, as selected for that VstOfflineTask
+ structure.
+
+ It is only possible to call this function on a source file, not on a file being
+ written during a process. If the host does not implement this function,
+ offlineRead returns false. The Plug-In could then read itself the audio
+ (kVstOfflineAudio option) to display the wave.
+
+ kVstOfflineParameter
+
+ If the host supports this option, the Plug-In can read and write parameters
+ along the audio-file. A "parameter" is a float value or byte array. Each
+ parameter is attributed an index (e.g. if there are 3 float values and 2
+ arrays, the indexes go from 0 to 4).
+
+ Examples of use: parameter automation; storage of meta-information (e.g. pitch)
+ usable by the same plugin, later during the same process, or in another process
+ by another Plug-In, etc.
+
+ The host is free to implement the underlying parameter storage, as it likes.
+ However, it is easy to understand that parameters should be stored in a sorted
+ vector, each one attached to a frame index.
+
+ The parameters are usually maintained in RAM by the host, therefore the Plug-In
+ should not over-use this feature and for instance write one parameter per
+ sample!
+
+ The host might choose to save the parameters into a project-file, or to embed
+ them into the audio file header, or not to save them at all (ie. all parameters
+ get erased when the audio file closes).
+
+
+ Writing parameters with offlineWrite:
+
+ processName : name of the parameter family.
+
+
+ If a Plug-In X writes parameters to a file, then a Plug-In Y can retrieve the
+ parameters only if it provides the right family name.
+
+ The name must be made unique enough, to prevent any clash.
+
+ This member only needs to be set for the first parameter to record during the
+ process.
+
+ If this first parameter belongs to a new family, the host destroys all
+ previously stored parameters.
+
+
+
+ value : version of the parameter family.
+
+
+ Freely under the control of the Plug-In. This member only needs to be set for
+ the first parameter to record during the process.
+
+
+
+ index : index of parameter to write.
+
+
+
+ writeCount : 0 if writing a float parameter, else byte size of the
+ parameter array.
+
+
+
+ extraBuffer : buffer allocated by the Plug-In to pass the parameter.
+
+
+ For writing a float, this pointer is actually a float* pointer, else this is a
+ pointer to the array.
+
+ If this pointer is NULL, then the parameter at that position, if any, is
+ deleted. If this pointer is NULL and the writePosition is negative, all
+ parameters are erased.
+
+
+
+ writePosition : position where to write the parameter.
+
+
+ Since parameters are not stored "inside" the audio samples, it does not matter
+ if the write position is temporarily beyond the end of the audio file.
+ For the sake of simplicity (when reading back later), it is not possible to
+ write more than one parameter at a given position. If this happens, the old
+ parameter gets erased. If this parameter is negative and extraBuffer is NULL,
+ all parameters get erased.
+
+
+ Reading parameters with offlineRead:
+
+ At the beginning, the Plug-In is usually ignorant about what parameters are
+ stored, and where. The first call to offlineRead is therefore a special one, as
+ follows:
+
+ The Plug-In initializes the member extraBuffer to 0 and the member readPosition
+ to the position it wants to get informed about (usually, 0). When returning
+ from offlineRead, the host has initialized the following parameters:
+
+
+
+ processName : name of the parameter family, or nothing if no recorded
+ parameter.
+
+
+ If the name of this parameter family is not supported by the Plug-In, the
+ Plug-In should not try to read the parameters.
+
+
+
+ value : version of the recorded parameter family. Might be useful for
+ the Plug-In.
+
+
+
+ readPosition : the frame index at which the next parameter is found
+ (this value was unchanged by the host if there was already a parameter there).
+
+
+
+ readCount : if the parameter is an array, this is its size (as bytes),
+ else the value is 0.
+
+
+
+ index : the index of the parameter, or -1 if no parameter was found.
+
+
+ In order to retrieve the parameters one by one, the Plug-In can then use
+ offlineRead in the following way:
+
+
+
+ Input parameters, as set by the Plug-In before
+ calling offlineRead.
+
+
+ readCount: should be 0 when retrieving a float
+ parameter, else indicates the size of the buffer, as bytes, to receive the
+ array.
+
+
+ extraBuffer: buffer allocated by the Plug-In to
+ receive the parameter. If the parameter is a float, this pointer is actually a
+ float* pointer, else this is a pointer to an array.
+
+
+ readPosition: position where to read the parameter.
+ If there is no parameter at this position, the host returns false.
+
+
+ index: index of the parameter to retrieve.
+
+
+ Output parameters, as set by the host after calling
+ offlineRead:
+
+
+ index: index of the next parameter, else -1.
+
+
+ readPosition: position of next recorded parameter, or
+ -1 if no more parameter. This is an useful hint for the Plug-In, to make it
+ easy and fast to retrieve sequentially all recorded parameters.
+
+
+ readCount: if the next parameter is a float, this value is 0. If it is an
+ array, this value is the byte-size of this array.
+
+
+ kVstOfflineMarker
+
+ With this option, the Plug-In can create one or more markers in the file, or
+ move existing ones.
+
+ To know which markers currently exist in a given file, the Plug-In can use
+ offlineRead, with the following parameters:
+
+
+
+ extraBuffer: buffer allocated by the Plug-In, to
+ receive a copy of the markers. If this value is NULL, then offlineRead sets
+ the number of markers into the member readCount. This is a way for the Plug-In
+ to know how many markers exist in the file, and therefore to allocate a proper
+ buffer size (and call again offlineRead).
+
+
+ readCount: the size of the buffer (number of VstAudioFileMarker elements). If
+ this size is not equal to the current number of markers, the offlineRead
+ function should return false.
+
+ To write new markers:
+
+
+
+ extraBuffer: a buffer allocated by the Plug-In that
+ holds the markers to create, and only them.
+
+
+ writeCount: the number of markers in the buffer. Important: the member id of a
+ marker to create must be 0. When returning from the offlineWrite function, the
+ id of the marker has been initialized by the host (it could be reused by the
+ Plug-In to move the marker later).
+
+ To move existing markers:
+
+
+
+ extraBuffer: a buffer allocated by the Plug-In that
+ holds the markers to move. These markers must have been previously retrieved
+ through offlineRead. The host identifies the markers to move by checking the
+ id member of the markers. The position member of a marker structure represents
+ the new position that a marker should adopt. If position is -1, then the host
+ deletes the markers.
+
+
+ writeCount: the number of markers in the buffer.
+
+ To copy markers from one file to another:
+
+ If the Plug-In creates a new file out of a source file, it might be convenient
+ to copy the source file markers into the new file. In this case, the Plug-In
+ can call the offlineWrite function with the following parameters:
+
+
+
+ extraBuffer: NULL
+
+
+ index: index of the VstOfflineTask structure that corresponds to the source
+ file.
+
+
+
+ kVstOfflineCursor
+
+ By calling offlineRead with this option, the Plug-In retrieves the file's
+ edit-cursor position:
+
+
+
+ readPosition: position of the cursor, or -1 if no
+ edit-cursor
+
+
+ index: bit mask describing on which channel(s) lies the edit-cursor.
+
+ To move the edit cursor to a certain location, the Plug-In should initialize
+ the following members:
+
+
+
+ writePosition: position of the cursor
+
+
+ index: bit mask describing on which channel(s) should lie the edit-cursor. -1
+ means all channels. If the host does not support the placement of the
+ edit-cursor on individual channels, it should ignore this parameter. It's worth
+ noting that "edit-cursor" position does not mean "playback-cursor"
+ position.
+
+
+ kVstOfflineSelection
+
+ By calling offlineRead with this option, the Plug-In retrieves the current
+ sample selection in the file:
+
+
+
+ positionToProcessFrom: the first selected frame, or
+ -1
+
+
+ numFramesToProcess: the size of the selection, or
+ 0
+
+
+ index: bit mask describing which channel(s) are selected
+
+ To set a selection in the file, the Plug-In should initialize the above
+ members.
+
+ If the host does not support the selection of individual channels, it should
+ ignore index and select all channels.
+
+ If the host does not support sample selections, offlineWrite should return
+ false.
+ kVstOfflineQueryFiles
+
+ If the Plug-In desires to get notified about which files are available in the
+ host, it should call offlineRead with this option.
+
+ The first parameter of offlineRead (VstOfflineTask*) should be NULL. On
+ receiving this call, the host should call, immedialty or later, offlineNotify,
+ with the start parameter set to false. In other words, the
+ kVstOfflineQueryFiles option is a way to force the host to call offlineNotify,
+ in order to get informed about open files (normally, the host only calls
+ offlineNotify if a change happens in the set of open files). It is important to
+ insist on the fact that the host is free to call kVstOfflineQueryFiles
+ asynchronously, ie. not immediatly when kVstOfflineQueryFiles is called.
+
+ Normally, this option is only used if the Plug-In needs to be notified about
+ the file information, in order to update its user interface.
+ Functions
+
+ bool offlineNotify(VstAudioFile* ptr, VstInt32 numAudioFiles, bool start)
+ The host calls this Plug-In function in two cases:
+
+
+
+
+ When the Plug-In's process is to be executed. E.g.
+ the user has pressed the "Process" button. In that case, the "start" parameter
+ is true.
+
+
+ Anytime a change happens in the set of files open in the host. In that case,
+ the "start" parameter is false.
+
+
+ The purpose of this notification is to give the Plug-In a chance to update its
+ user interface according to the host environment.
+
+ For example:
+
+ The Plug-In might display the list of all files available for processing; this
+ list needs to be updated if a new file is open or closed in the host.
+ The Plug-In might display some information about the file with the focus: this
+ needs to change if a new file gains the focus.
+
+ Etc...
+
+ Tip: since the VstAudioFile structure contains
+ parameters that are likely to often change, such as cursor position or sample
+ selection, the offlineNotify function might be called often. Therefore, a good
+ design for a Plug-In that needs to update its user interface would be to cache
+ the VstAudioFile settings, so as to actually update its user interface only
+ when really required (eg. if the Plug-In does not care about the editcursor
+ position in a file. It should not update its user-interface only if the
+ edit-cursor position happens to move in a file).
+
+
+ The host as aparameter passes an array of VstAudioFile structures.
+
+ The number of elements in this array is given by the parameter numAudioFiles.
+
+ numAudioFiles is 0 if there is no open file in the host, and in that case, the
+ parameter "ptr" is NULL.
+
+ The first element of the array always represents the file with the focus.
+
+ If the "start" argument is true, the Plug-In should start the process by
+ calling offlineStart. Else, the Plug-In might, or might not, starts a read-only
+ process, to update its user-interface. See offlineStart .
+
+ Whatever the state of the start argument, the Plug-In should return false from
+ the function if it can't process the file(s) open in the host. E.g. if the
+ Plug-In only works with stereo files, and the file with the focus is mono, the
+ Plug-In should return false from this function. This allows the host, for
+ instance, to disable the process button of the user interface.
+
+ Important : the Plug-In should not initialize anything internally at this
+ stage. All internal initialization and cleanup required for the process should
+ happen inside offlineRun , and only there.
+ bool offlinePrepare(VstOfflineTask* offline, VstInt32 count)
+ The host calls this function so that the Plug-In complements the
+ VstOfflineTask structure(s). If everything is fine, the function should
+ return true. Important : the Plug-In should not initialize anything
+ internally at this stage. All internal initialization and cleanup required for
+ the process should happen inside offlineRun , and only
+ there.
+
+
+ bool offlineRun(VstOfflineTask* offline, VstInt32 count)
+ This function is called by the host once the VstOfflineTask structure(s) is(are)
+ ready. Within this function, the Plug-In does its audio processing and calls
+ offlineRead and offlineWrite at will. If
+ any error is detected during this procedure, the function should return false.
+
+ Important : all internal initialization and cleanup required for the
+ process should happen inside offlineRun , and only
+ there. E.g. if the Plug-In should allocate some memory, this should be done
+ inside this function (as well as the deallocation).
+
+
+ bool offlineStart(VstAudioFile* ptr, VstInt32 numAudioFiles, VstInt32 numNewAudioFiles)
+ When the function offlineNotify is called, the
+ Plug-In might decide to start a process. For this purpose, the Plug-In has to
+ decide which file(s) to process, and also if some new file(s) should be
+ created.
+
+ By setting the member flag of each VstAudioFile structure,
+ the Plug-In instructs the host about which file(s) should be processed. In many
+ cases, only the first VstAudioFile element (the focused file) is concerned.
+
+ The parameter numAudioFiles is simply the one passed from offlineNotify .
+
+ The parameter numNewAudioFiles is the number of files that the Plug-In want to
+ create.
+
+ E.g. if the Plug-In selects one file from the VstAudioFile array and sets the
+ value of numNewAudioFiles to 1, the host will create two VstOfflineTask
+ structures. By convention, all VstOfflineTask structures corresponding to new
+ files are placed by the host at the end of the array passed to offlineRun (ie,
+ the front of the array corresponds to already existing files).
+
+ It is not allowed for a Plug-In to call offlineStart if the Plug-In is not
+ itself called with offlineNotify. This is to ensure a synchronous protocol with
+ the host. If the Plug-In would call offlineStart asynchronously, maybe the
+ VstAudioFile structures would not be valid anymore at that time, resulting in
+ an undefined behaviour.
+
+
+ bool offlineRead(VstOfflineTask* offline, VstOfflineOption option, bool readSource = true)
+ This function is called by the Plug-In to read data. See enum VstOfflineOption
+ to see what kind of data can be read, apart audio samples.
+ About the parameter readSource:
+ As already seen, a single VstOfflineTask structure can be used both to read an
+ existing file, and to overwrite it. Moreover, the offline specification states
+ that it is possible, at any time, to read both the original samples and the new
+ ones (the "overwritten" samples). This is the reason for the readSource
+ parameter: set it to true to read the original samples and to false to read the
+ recently written samples.
+
+
+ bool offlineWrite(VstOfflineTask* offline, VstOfflineOption option)
+ This function is called by the Plug-In to write data.
+
+ See enum VstOfflineOption to see what kind of
+ data can be written, apart audio samples.
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/vstparamstruct.html b/doc/html/vstparamstruct.html
new file mode 100644
index 0000000..eb0630a
--- /dev/null
+++ b/doc/html/vstparamstruct.html
@@ -0,0 +1,566 @@
+
+
+VST SDK 2.4: VST Parameters Structure
+
+
+
+
+
+Introduction
+
+
+In general, VST Plug-Ins present a flat, unsorted list of parameters to the host application, and finally to the user.
+The VST Parameters Structure XML definition provides an easy way to structure parameters of existing VST Plug-Ins hierarchically, without having to recompile the Plug-In binary.
+
+
+
+Windows :
+
+The host application searches for a .vstxml file next to the Plug-In DLL (e.g. if your Plug-In is in '...\Vstplugins\MyEffect.dll' the corresponding XML file must be named '...\Vstplugins\MyEffect.vstxml').
+Alternatively, the Parameter Structure XML can be embedded in the DLL as a resource (resource type VSTXML , resource identifier 1 ).
+Please note that an external .vstxml file always overrides the embedded resource!
+
+
+
+Mac OS X :
+
+The .vstxml file is in the Resources Folder of the bundle and its name is constructed from the CFBundleName.
+
+
+Example:
+
+
+
+
+
+<VSTPluginProperties >
+ <VSTParametersStructure >
+ <!-- Value Types: -->
+ <ValueType name="SwitchOnOff ">
+ <Entry name="Off" value="[0, 0.5["/>
+ <Entry name="On" value="[0.5, 1]"/>
+ </ValueType>
+
+ <!-- Templates: -->
+ <Template name="Channel ">
+ <Param name="Bypass" shortName="Byp." type="SwitchOnOff " id="offset +1"/>
+ ...
+ </Template>
+
+ <!-- Global: -->
+ <Param name="Volume" shortName="Vol." label="dB" id="0"/>
+
+ <Group name="Channel 1" template="Channel " values="offset =10"/>
+ <Group name="Channel 2" template="Channel " values="offset =20"/>
+ ...
+ </VSTParametersStructure >
+</VSTPluginProperties >
+
+
+
+
+
+The following tags are used to describe a parameter structure:
+
+
+
+
+
+ VSTPluginProperties
+ optional root tag
+
+
+ VSTParametersStructure
+ parameters structure tag
+
+
+ Param
+ describes a single parameter with name, label, id etc.
+
+
+ Group
+ encloses a group of parameters, can be nested
+
+
+ Template
+ defines a parameter group, can be "instanciated" multiple times
+
+
+ ValueType
+ definition of an internal value type, contains a list of Entry tags
+
+
+ Entry
+ describes a single state of a ValueType
+
+
+
+
+Advanced topics:
+
+
+
+
+
+
+XML Definitions Reference
+
+
+Param
+
+
+
+
+
+ <Param id ="..." name="..."
+ label="..." shortName="..." type="..." numberOfStates="..." defaultValue="..."/>
+
+
+
+
+
+
+Describes a Plug-In parameter.
+
+
+Attributes:
+
+
+
+
+
+ id
+
+
+ corresponds to zero-based index in flat parameter list.
+ can either be an integer constant (e.g. "100") or an expression which evaluates
+ to an integer (e.g. "offset + 1").
+ See Relative Parameter Addressing for details.
+
+
+
+
+ name
+
+
+ parameter name visible to the user (e.g. "Volume").
+
+
+
+
+ label
+
+
+ parameter label visible in generic editor or on remote control (e.g. "dB")
+
+
+
+
+ shortName
+
+
+ short parameter name, displayed on remote controls.
+ can be a list of several names of different lengths, separated by colons
+ (e.g. "OSC Frequ., OSCFrq., Frq"). The host application selects best fitting string
+ for current remote displays.
+
+
+
+
+ type
+
+
+ user defined (see ValueType )
+ or predefined value type. Default type is a linear fader between 0.0 and 1.0
+
+ Predefined types :
+ - switch : parameter toggles between 0 and 1
+
+
+
+
+ numberOfStates
+
+
+ defines how many states this parameter can have:
+
+
+ state N = [N / numberOfStates, (N + 1) / numberOfStates[
+ state N = (long)(value * numberOfStates)
+
+
+
+
+
+ defaultValue
+
+
+ default value normalized between [0.0, 1.0]
+
+
+
+
+
+Remarks:
+
+
+Most VST Plug-Ins already provide parameter attributes like name, label, etc. and support string conversion.
+The XML description always overwrites Plug-In -provided attributes!
+Everything not described in XML is taken from the Plug-In at runtime.
+
+
+
+
+
+Group
+
+
+
+
+
+ <Group name ="..." template="..." values="..."/>
+
+
+
+
+
+
+Groups are used to create hierarchical parameter structures. A <Group> either contains <Param > tags directly,
+or is defined by a Template .
+
+
+Attributes:
+
+
+
+
+
+ name
+
+
+ group name visible to the user (e.g. "Channel 1", "LFO Section",...)
+
+
+
+
+ template
+
+
+ Name of template defining this group (optional).
+
+
+
+
+ values
+
+
+ List of arguments passed to the template
+ (see Relative Parameter Addressing for details).
+
+ Each arguments consists of a name and an integer value (e.g. "offset=100").
+ Multiple arguments are separated by semicolons, whitespaces are ignored
+ (e.g. "offset1=100; offset2=100").
+
+
+
+
+
+
+
+
+Template
+
+
+
+
+
+ <Template name ="..."/>
+
+
+
+
+
+
+Assume a Plug-In with 16 channels, each consisting of an identical set of parameters. You only have to
+describe a channel once as a template and create 16 "instances" using the <Group> tag.
+If each channel contains let's say 20 parameters, which appear continuously in the flat parameter list,
+they can be addressed using an offset value instead of absolute indices
+(see Relative Parameter Addressing for details).
+
+
+Attributes:
+
+
+
+
+
+ name
+
+
+ internal template name, referred to by groups .
+
+
+
+
+
+
+
+
+ValueType
+
+
+
+
+
+ <ValueType name ="..." label="..."/>
+
+
+
+
+
+
+Defines an internal value type by a list of <Entry > tags.
+
+
+Attributes:
+
+
+
+
+
+ name
+
+
+ internal value type name, referred to by parameters .
+
+
+
+
+ label
+
+
+ value label (e.g. "dB")
+
+
+
+
+
+Remarks:
+
+
+The label attribute is used as parameter label if the label field of a <Param >
+tag using this value type is empty.
+
+
+
+
+
+Entry
+
+
+
+
+
+ <Entry name ="..." value="..."/>
+
+
+
+
+
+
+Each entry in a <ValueType > list provides a string representation for
+a certain parameter state. A simple example would be a toggle parameter with two
+states named "On" and "Off". The string "Off" should be displayed if the normalized parameter value is between
+0.0 and 0.5 (exclusively), and "On" if it is >= 0.5 and <= 1.0.
+
+
+Attributes:
+
+
+
+
+
+ name
+
+
+ name of parameter state, displayed to the user (e.g. "On", "Off", "Sine", "Square",...)
+
+
+
+
+ value
+
+
+ optional: describes the parameter range this state corresponds to,
+ using the mathematical range definition [a, b].
+
+ Exclusive range:
+ e.g. "[0.0,0.5[" -> if value >= 0.0 and < 0.5
+
+ Inclusive range:
+ e.g. "[0.5,1.0]" -> if value >= 0.5 and <= 1.0
+
+
+
+
+
+Remarks:
+
+
+The value range is optional. If not specified, the limits of a state are calculated based on the total number of entries
+in the value type:
+
+a = index / total
+b = (index + 1) / total;
+
+
+
+
+
+Relative Parameter Addressing
+
+
+Relative parameter addressing is used to describe parameter IDs inside templates .
+Instead of assigning a parameter index directly, an expression - mostly consisting of a "base address" variable and
+a constant offset value - can be used. The variable is passed to the template each time it is "instanciated" as a
+group .
+
+
+Example:
+
+
+
+
+
+ Parameter list:
+
+
+...
+
+11: Volume CH1
+...
+
+21: Volume CH2
+...
+
+31: Volume CH3
+...
+
+
+
+ XML code:
+
+
+
+
+
+<Template name="Channel">
+ <Param name="Volume" id="offset +1"/>
+</Template >
+
+<Group name="CH 1" template="Channel" values="offset =10"/>
+<Group name="CH 2" template="Channel" values="offset =20"/>
+<Group name="CH 3" template="Channel" values="offset =30"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Example
+
+
+
+
+
+<!-- =========================================================== -->
+<!-- XML definition of VST parameters for Dynamics Plug-In====== -->
+<!-- Draft 0.1================================================== -->
+<!-- Date: 14.11.2005=========================================== -->
+<!-- =========================================================== -->
+
+<VSTPluginProperties>
+
+ <VSTParametersStructure>
+ <!-- Create Global Params================================== -->
+ <Param name="Routing" shortName="Rout" id="13"/>
+
+ <!-- Create AutoGate Group================================= -->
+ <Group name="AutoGate">
+ <Param name="On" type="switch " id="0"/>
+ <Param name="Thresh" shortName="ThrHo" label="dB" id="3"/>
+ <Param name="Attack" shortName="Att" label="ms" id="4"/>
+ <Param name="Hold" label="ms" id="5"/>
+ <Param name="Release" shortName="Rel" label="ms" id="6"/>
+ <Param name="Auto" id="7"/>
+ <Param name="Mode" id="9"/>
+ <Param name="Calib" id="10"/>
+ <Param name="LowFreq" shortName="LoFrq" label="Hz" id="11"/>
+ <Param name="HighFreq" shortName="HiFrq" label="Hz" id="12"/>
+ </Group>
+
+ <!-- Create Compressor Group======================================= -->
+ <Group name="Compressor">
+ <Param name="On" type="switch " id="1"/>
+ <Param name="Thresh" shortName="ThrHo" label="dB" id="14"/>
+ <Param name="Ratio" id="15"/>
+ <Param name="Attack" shortName="Att" label="ms" id="16"/>
+ <Param name="Release" shortName="Rel" label="ms" id="17"/>
+ <Param name="MakeUp" shortName="MkUp" label="dB" id="18"/>
+ <Param name="Auto" id="19"/>
+ <Param name="RMS" id="20"/>
+ </Group>
+
+ <!-- Create Limiter Group======================================= -->
+ <Group name="Limiter">
+ <Param name="On" type="switch " id="2"/>
+ <Param name="Thresh" shortName="ThrHo" label="dB" id="21"/>
+ <Param name="Release" shortName="Rel" label="ms" id="22"/>
+ <Param name="Auto" id="23"/>
+ </Group>
+
+ </VSTParametersStructure>
+</VSTPluginProperties>
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/vstpluglogo.jpg b/doc/html/vstpluglogo.jpg
new file mode 100644
index 0000000..b4a2464
Binary files /dev/null and b/doc/html/vstpluglogo.jpg differ
diff --git a/doc/html/vstplugmain_8cpp.html b/doc/html/vstplugmain_8cpp.html
new file mode 100644
index 0000000..36fbf3f
--- /dev/null
+++ b/doc/html/vstplugmain_8cpp.html
@@ -0,0 +1,111 @@
+
+
+VST SDK 2.4: vstplugmain.cpp File Reference
+
+
+
+
+
+
+
+vstplugmain.cpp File Reference #include "audioeffect.h "
+
+Define Documentation
+
+
+
+
+
+ #define VST_EXPORT
+
+
+
+
+
+
Function Documentation
+
+
+
+
+
+ AudioEffect * createEffectInstance
+ (
+ audioMasterCallback
+ audioMaster
+ )
+
+
+
+
+
+
+
+Must be implemented externally.
+
+
+
+
+
+
+
+ VST_EXPORT AEffect * VSTPluginMain
+ (
+ audioMasterCallback
+ audioMaster
+ )
+
+
+
+
+
+
+
+Prototype of the export function main
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/html/whatsnew.html b/doc/html/whatsnew.html
new file mode 100644
index 0000000..2f15cad
--- /dev/null
+++ b/doc/html/whatsnew.html
@@ -0,0 +1,88 @@
+
+
+VST SDK 2.4: What's new in VST 2.4
+
+
+
+
+
+
+With VST SDK 2.4 you can compile native VST Plug-Ins for 64 Bit Platforms (e.g. Windows XP x64 Edition). The formerly used 'long' data type has been replaced by VstInt32 and VstIntPtr:
+VstInt32 is always 32 bits wide, regardless of the platform compiled for.
+VstIntPtr is a generic type, with the same size as a pointer (4 Bytes on a 32 bit OS, 8 Bytes on x64 Systems).
+
+
+
+A new process function has been added to support 64 bit (double precision) floating-point audio samples. Please note that this function is optional, whereas the processReplacing function for 32 bit (single precision) floating-point samples is mandatory! See also: AudioEffect::canDoubleReplacing
+ AudioEffect::processDoubleReplacing
+ AudioEffectX::setProcessPrecision
+
+
+New enum VstMidiEventFlags for VstMidiEvent::flags with value kVstMidiEventIsRealtime which indicates that an event is played live, not from a sequencer track. This allows the Plug-In to handle these flagged events with higher priority, especially when the Plug-In has a high latency (AEffect::initialDelay ).
+
+ Two new methods (getNumMidiInputChannels and getNumMidiOutputChannels) allow the Plug-In to inform the host how many MIDI channels are actually used for input and/or output. In this case the host doesnt need to display all 16 MIDI channels to the user, if the Plug-In uses less than 16. See also: AudioEffectX::getNumMidiInputChannels
+ AudioEffectX::getNumMidiOutputChannels
+
+
+The VST Parameters Structure XML definition provides an easy way to structure parameters of existing VST Plug-Ins hierarchically, without having to recompile the Plug-In binary. The VST SDK package contains a tool to test, extract and embed VSTXML resources.
+
See also: VST Parameters Structure
+
+
+All Plug-Ins built with this SDK must support composited windows on OSX.
+
See also: Macintosh Editor as HIViewRef
+
+
+The VST Protocol is a historically grown technology. In Version 2.4 the API has undergone a general cleanup. Some rarely (or not at all) used features and inconsistent or redundant parts of the protocol have been declared as deprecated. Deprecated opcodes and data structures are still available in the SDK headers, but their names are modified if the VST_FORCE_DEPRECATED compile switch is active (1 by default) - this might cause errors when compiling existing code.
+What does it mean? Exisiting (already released) Hosts and Plug-Ins of course remain uninfluenced. If you create a new Plug with VST SDK 2.4 it should work in any existing host as well. However, there are some details that might cause compatibility problems:
+
+MIDI Input: New Plugs should implement AudioEffectX::canDo "receiveVstMidiEvent" to indicate the presence of a MIDI Input, instead of wantEvents. The base class method AudioEffectX::resume can be called for compatibility with old VST hosts (< 2.4).
+MIDI Output: implement AudioEffectX::canDo "sendVstMidiEvent".
+Idle Calls outside Editor: AudioEffectX::needIdle and AudioEffectX::fxIdle are not widely supported, thus Plugs can not rely on it. Please create your own timer/background thread if needed. On Windows SetTimer with a callback function could be used (look it up on MSDN), the MacOS X equivalent is InstallEventLoopTimer .
+No more accumulating process mode: New Plugs have to implement AudioEffect::processReplacing instead!
+The exported 'main ' function (aka 'main_macho ' on Mac or 'main_plugin ') should be named 'VSTPluginMain ' on all platforms! For downwards compatibility, you can export both.
+
+To support VST Plug-Ins <= 2.4 in new Host Applications, you'll have to implement workarounds. In the long run, deprecated features shouldn't be used anymore. Future versions of VST SDK will not contain them at all.
+
See also: Deprecated List
+
+
+You might have already noticed some more minor changes in VST SDK 2.4:
+New SDK folder structure
+Some files have been renamed (e.g. AudioEffect.hpp -> audioeffect.h )
+MiniHost Example
+Updated documentation
+VSTGUI 3.0 included
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/sdk.menu.html b/doc/sdk.menu.html
new file mode 100644
index 0000000..2815754
--- /dev/null
+++ b/doc/sdk.menu.html
@@ -0,0 +1,38 @@
+
+
+
+ Steinberg VST SDK 2.4 :: Menu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/sdk.overview.html b/doc/sdk.overview.html
new file mode 100644
index 0000000..e8a6721
--- /dev/null
+++ b/doc/sdk.overview.html
@@ -0,0 +1,301 @@
+
+
+
+ Steinberg VST SDK 2.4 :: Overview
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Steinberg VST SDK 2.4 Overview
+
+
+
+
+
+
+
+
+
+
+
+ artwork
+
+
+
+
+
+ VST Logo Artwork
+
+
+
+
+ bin
+
+
+
+
+
+ SDK Binaries
+
+
+
+
+ win
+
+
+
+
+
+ Tools for Windows platform
+
+
+
+
+ mac
+
+
+
+
+
+ Tools for MacOS X platform
+
+
+
+
+ doc
+
+
+
+
+
+ VST SDK Documentation and Licensing Agreement
+
+
+
+
+ pluginterfaces
+
+
+
+
+
+ Interface Files
+
+
+
+
+ vst2.x
+
+
+
+
+
+ VST 2.x Interfaces
+
+
+
+
+ public.sdk
+
+
+
+
+
+ SDK Source Files
+
+
+
+
+ samples
+
+
+
+
+
+
+
+
+
+
+ vst2.x
+
+
+
+
+
+ VST 2.x Plug-in and Host samples
+
+
+
+
+ win
+
+
+
+
+
+ Windows platform samples (Win32 and x64, requires Visual C++ 2005)
+
+
+
+
+ win.vc2003
+
+
+
+
+
+ Legacy Windows platform samples (Win32 only, requires Visual C++ 2003)
+
+
+
+
+ win.vc6
+
+
+
+
+
+ Legacy Windows platform samples (Win32 only, requires Visual C++ 6.0)
+
+
+
+
+ mac
+
+
+
+
+
+ MacOS X platform samples (PPC and MacIntel architecture, requires XCode 2.2)
+
+
+
+
+ source
+
+
+
+
+
+
+
+
+
+
+ vst2.x
+
+
+
+
+
+ VST 2.x Base Classes
+
+
+
+
+ vstgui.sf
+
+
+
+
+
+ VSTGUI Library
+
+
+
+
+ drawtest
+
+
+
+
+
+
+
+
+
+
+ win
+
+
+
+
+
+ Visual C++ 2005 project file (Win32 and x64)
+
+
+
+
+ win.vc6
+
+
+
+
+
+ Visual C++ 6.0 project file (Win32 only)
+
+
+
+
+ mac
+
+
+
+
+
+ XCode 2.2 project file (PPC and MacIntel)
+
+
+
+
+ vstgui
+
+
+
+
+
+ VSTGUI source code (stable 3.0 branch from Sourceforge.net)
+
+
+
+
+ Documentation
+
+
+
+
+
+ VSTGUI Documentation
+
+
+
+
+
+
+ To build drawtest on Windows, please download libpng and zlib to vstgui.sf folder!
+ Please read the VSTGUI 2.3 to 3.0 Migration Guide
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/sdkdoc.css b/doc/sdkdoc.css
new file mode 100644
index 0000000..4d616a9
--- /dev/null
+++ b/doc/sdkdoc.css
@@ -0,0 +1,130 @@
+*------------------------------------------------------------------------
+ Created: Maik Oppermann, 1.3.2000
+ Modified: Matthias Juwan, 07/2002
+/*------------------------------------------------------------------------*/
+
+body
+{
+ background: white; color:black;
+ font-family:Tahoma; font-size:8pt; font-weight:normal;
+}
+
+p { margin-left:8pt; }
+
+div, p /* netscape ignores body font settings */
+{
+ font-family:Tahoma; font-size:8pt; font-weight:normal;
+}
+
+td { font-size:8pt; font-family:Tahoma; font-weight:normal; }
+th { font-size:8pt; font-family:Tahoma; text-weight:bold; text-align:left; color:black; background:lightgrey; }
+
+a:link { color:darkblue; font-weight:normal; }
+a:visited { color:darkblue; font-weight:normal; }
+a:active { color:blue; font-weight:normal; }
+
+.subgroup
+{
+ margin-top:5pt; margin-bottom: 5pt;
+ margin-left:5pt;
+}
+
+/*------------------------------------------------------------------------*/
+/* "framework" header box */
+/*------------------------------------------------------------------------*/
+
+.framehead
+{
+ margin-left:0pt; /* for netscape */
+ padding:2px;
+ background: darkblue; color:white;
+ border-color: darkblue; border-style:solid; border-width:0.1px;
+ font-family:Arial,"sans-serif"; font-size:12pt; font-weight:bold; font-style:italic;
+}
+
+/* even links are white in the header */
+
+.framehead a:link { color:white; text-decoration:none; }
+.framehead a:visited { color:white; text-decoration:none; }
+.framehead a:active { color:white; text-decoration:none; }
+
+
+/*------------------------------------------------------------------------*/
+h1
+{
+ font-size:16.5pt; font-weight:bold;
+}
+
+h2
+{
+ margin-top:5pt; margin-bottom: 10pt;
+ margin-left:5pt;
+ font-size:12.5pt; font-weight:bold;
+}
+
+h3 /* class name heading */
+{
+ margin-top:5pt; margin-bottom: 10pt;
+ margin-left:5pt;
+ color: darkblue;
+ font-size:12.5pt; font-weight:bold;
+}
+
+h4 /* heading with colored background (Inheritance, Description, ...) */
+{
+ margin-top:5pt; margin-bottom: 10pt;
+ margin-left:5pt;
+ border-color:lightblue; border-style:solid; border-width:0px;
+ /*background: lightsteelblue; color:black;*/
+ font-size:10pt; font-weight:bold;
+}
+
+.include /* include file name */
+{
+ background:lightgrey;
+ color:black;
+ border-color:black; border-style:solid; border-width:1px;
+ padding:4pt;
+ margin-left:10pt;
+ margin-right:10pt;
+ white-space:pre;
+}
+
+/*------------------------------------------------------------------------*/
+/* a span tag inside a method can be used to format method names */
+/*------------------------------------------------------------------------*/
+div.methods span
+{
+ /*font-style:italic;*/
+ color: darkblue;
+}
+
+/*------------------------------------------------------------------------*/
+/* box for c++ (or other) source code */
+/*------------------------------------------------------------------------*/
+.cpp
+{
+ background:lightyellow;
+ color:black;
+ border-color:black; border-style:solid; border-width:1px;
+ padding:4pt;
+ margin-left:10pt;
+ margin-right:10pt;
+ font-family:"Courier New",monospace; font-size:8pt;
+ white-space:pre;
+}
+
+
+/*------------------------------------------------------------------------*/
+/* menu frame */
+/*------------------------------------------------------------------------*/
+
+body.menu
+{
+ background: white; color:black;
+ font-family:Arial,"sans-serif"; font-size:11pt; font-weight:normal;
+}
+
+.menu a:link { font-weight:normal; }
+.menu a:visited { font-weight:normal; }
+.menu a:active { font-weight:normal; }
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..b11a1c0
--- /dev/null
+++ b/index.html
@@ -0,0 +1,14 @@
+
+
+
+ Welcome to Steinberg VST SDK 2.4!
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pluginterfaces/vst2.x/aeffect.h b/pluginterfaces/vst2.x/aeffect.h
new file mode 100644
index 0000000..5f4f075
--- /dev/null
+++ b/pluginterfaces/vst2.x/aeffect.h
@@ -0,0 +1,351 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/06/20 17:22:55 $
+//
+// Category : VST 2.x Interfaces
+// Filename : aeffect.h
+// Created by : Steinberg Media Technologies
+// Description : Definition of AEffect structure
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __aeffect__
+#define __aeffect__
+
+// gcc based compiler, or CodeWarrior on Mac OS X
+#if ((defined(__GNUC__) && (defined(__APPLE_CPP__) || defined(__APPLE_CC__))) || (defined (__MWERKS__) && defined (__MACH__)))
+ #ifndef TARGET_API_MAC_CARBON
+ #define TARGET_API_MAC_CARBON 1
+ #endif
+ #if __ppc__
+ #ifndef VST_FORCE_DEPRECATED
+ #define VST_FORCE_DEPRECATED 0
+ #endif
+ #endif
+#endif
+
+#if TARGET_API_MAC_CARBON
+ #ifdef __LP64__
+ #pragma options align=power
+ #else
+ #pragma options align=mac68k
+ #endif
+ #define VSTCALLBACK
+#elif defined __BORLANDC__
+ #pragma -a8
+#elif defined(__GNUC__)
+ #pragma pack(push,8)
+ #define VSTCALLBACK __cdecl
+#elif defined(WIN32) || defined(__FLAT__) || defined CBUILDER
+ #pragma pack(push)
+ #pragma pack(8)
+ #define VSTCALLBACK __cdecl
+#else
+ #define VSTCALLBACK
+#endif
+//-------------------------------------------------------------------------------------------------------
+
+#include // for strncpy
+
+//-------------------------------------------------------------------------------------------------------
+// VST Version
+//-------------------------------------------------------------------------------------------------------
+
+/** Define SDK Version (you can generate different versions (from 2.0 to 2.4) of this SDK by setting the unwanted extensions to 0). */
+#define VST_2_1_EXTENSIONS 1 ///< Version 2.1 extensions (08-06-2000)
+#define VST_2_2_EXTENSIONS 1 ///< Version 2.2 extensions (08-06-2001)
+#define VST_2_3_EXTENSIONS 1 ///< Version 2.3 extensions (20-05-2003)
+#ifndef VST_2_4_EXTENSIONS
+#define VST_2_4_EXTENSIONS 1 ///< Version 2.4 extensions (01-01-2006)
+#endif
+
+/** Current VST Version */
+#if VST_2_4_EXTENSIONS
+ #define kVstVersion 2400
+#elif VST_2_3_EXTENSIONS
+ #define kVstVersion 2300
+#elif VST_2_2_EXTENSIONS
+ #define kVstVersion 2200
+#elif VST_2_1_EXTENSIONS
+ #define kVstVersion 2100
+#else
+ #define kVstVersion 2
+#endif
+
+/** Disable for Hosts to serve Plug-ins below VST 2.4 */
+#ifndef VST_FORCE_DEPRECATED
+#define VST_FORCE_DEPRECATED VST_2_4_EXTENSIONS
+#endif
+
+/** Declares identifier as deprecated. */
+#if VST_FORCE_DEPRECATED
+#define DECLARE_VST_DEPRECATED(identifier) __##identifier##Deprecated
+#else
+#define DECLARE_VST_DEPRECATED(identifier) identifier
+#endif
+
+/** Define for 64 Bit Platform. */
+#ifndef VST_64BIT_PLATFORM
+#define VST_64BIT_PLATFORM _WIN64 || __LP64__
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+// Integral Types
+//-------------------------------------------------------------------------------------------------------
+
+#ifdef WIN32
+typedef short VstInt16; ///< 16 bit integer type
+typedef int VstInt32; ///< 32 bit integer type
+typedef __int64 VstInt64; ///< 64 bit integer type
+#else
+#include
+typedef int16_t VstInt16; ///< 16 bit integer type
+typedef int32_t VstInt32; ///< 32 bit integer type
+typedef int64_t VstInt64; ///< 64 bit integer type
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+// Generic Types
+//-------------------------------------------------------------------------------------------------------
+
+#if VST_64BIT_PLATFORM
+typedef VstInt64 VstIntPtr; ///< platform-dependent integer type, same size as pointer
+#else
+typedef VstInt32 VstIntPtr; ///< platform-dependent integer type, same size as pointer
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+// Misc. Definition
+//-------------------------------------------------------------------------------------------------------
+#undef CCONST
+struct AEffect;
+
+/// @cond ignore
+typedef VstIntPtr (VSTCALLBACK *audioMasterCallback) (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt);
+typedef VstIntPtr (VSTCALLBACK *AEffectDispatcherProc) (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt);
+typedef void (VSTCALLBACK *AEffectProcessProc) (AEffect* effect, float** inputs, float** outputs, VstInt32 sampleFrames);
+typedef void (VSTCALLBACK *AEffectProcessDoubleProc) (AEffect* effect, double** inputs, double** outputs, VstInt32 sampleFrames);
+typedef void (VSTCALLBACK *AEffectSetParameterProc) (AEffect* effect, VstInt32 index, float parameter);
+typedef float (VSTCALLBACK *AEffectGetParameterProc) (AEffect* effect, VstInt32 index);
+/// @endcond
+
+/** Four Character Constant (for AEffect->uniqueID) */
+#define CCONST(a, b, c, d) \
+ ((((VstInt32)a) << 24) | (((VstInt32)b) << 16) | (((VstInt32)c) << 8) | (((VstInt32)d) << 0))
+
+/** AEffect magic number */
+#define kEffectMagic CCONST ('V', 's', 't', 'P')
+
+//-------------------------------------------------------------------------------------------------------
+/** Basic VST Effect "C" Interface. */
+//-------------------------------------------------------------------------------------------------------
+struct AEffect
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 magic; ///< must be #kEffectMagic ('VstP')
+
+ /** Host to Plug-in dispatcher @see AudioEffect::dispatcher */
+ AEffectDispatcherProc dispatcher;
+
+ /** \deprecated Accumulating process mode is deprecated in VST 2.4! Use AEffect::processReplacing instead! */
+ AEffectProcessProc DECLARE_VST_DEPRECATED (process);
+
+ /** Set new value of automatable parameter @see AudioEffect::setParameter */
+ AEffectSetParameterProc setParameter;
+
+ /** Returns current value of automatable parameter @see AudioEffect::getParameter*/
+ AEffectGetParameterProc getParameter;
+
+ VstInt32 numPrograms; ///< number of programs
+ VstInt32 numParams; ///< all programs are assumed to have numParams parameters
+ VstInt32 numInputs; ///< number of audio inputs
+ VstInt32 numOutputs; ///< number of audio outputs
+
+ VstInt32 flags; ///< @see VstAEffectFlags
+
+ VstIntPtr resvd1; ///< reserved for Host, must be 0
+ VstIntPtr resvd2; ///< reserved for Host, must be 0
+
+ VstInt32 initialDelay; ///< for algorithms which need input in the first place (Group delay or latency in Samples). This value should be initialized in a resume state.
+
+ VstInt32 DECLARE_VST_DEPRECATED (realQualities); ///< \deprecated unused member
+ VstInt32 DECLARE_VST_DEPRECATED (offQualities); ///< \deprecated unused member
+ float DECLARE_VST_DEPRECATED (ioRatio); ///< \deprecated unused member
+
+ void* object; ///< #AudioEffect class pointer
+ void* user; ///< user-defined pointer
+
+ VstInt32 uniqueID; ///< registered unique identifier (register it at Steinberg 3rd party support Web). This is used to identify a plug-in during save+load of preset and project.
+ VstInt32 version; ///< plug-in version (example 1100 for version 1.1.0.0)
+
+ /** Process audio samples in replacing mode @see AudioEffect::processReplacing */
+ AEffectProcessProc processReplacing;
+
+#if VST_2_4_EXTENSIONS
+ /** Process double-precision audio samples in replacing mode @see AudioEffect::processDoubleReplacing */
+ AEffectProcessDoubleProc processDoubleReplacing;
+
+ char future[56]; ///< reserved for future use (please zero)
+#else
+ char future[60]; ///< reserved for future use (please zero)
+#endif
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** AEffect flags */
+//-------------------------------------------------------------------------------------------------------
+enum VstAEffectFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ effFlagsHasEditor = 1 << 0, ///< set if the plug-in provides a custom editor
+ effFlagsCanReplacing = 1 << 4, ///< supports replacing process mode (which should the default mode in VST 2.4)
+ effFlagsProgramChunks = 1 << 5, ///< program data is handled in formatless chunks
+ effFlagsIsSynth = 1 << 8, ///< plug-in is a synth (VSTi), Host may assign mixer channels for its outputs
+ effFlagsNoSoundInStop = 1 << 9, ///< plug-in does not produce sound when input is all silence
+
+#if VST_2_4_EXTENSIONS
+ effFlagsCanDoubleReplacing = 1 << 12, ///< plug-in supports double precision processing
+#endif
+
+ DECLARE_VST_DEPRECATED (effFlagsHasClip) = 1 << 1, ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effFlagsHasVu) = 1 << 2, ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effFlagsCanMono) = 1 << 3, ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effFlagsExtIsAsync) = 1 << 10, ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effFlagsExtHasBuffer) = 1 << 11 ///< \deprecated deprecated in VST 2.4
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Basic dispatcher Opcodes (Host to Plug-in) */
+//-------------------------------------------------------------------------------------------------------
+enum AEffectOpcodes
+{
+ effOpen = 0, ///< no arguments @see AudioEffect::open
+ effClose, ///< no arguments @see AudioEffect::close
+
+ effSetProgram, ///< [value]: new program number @see AudioEffect::setProgram
+ effGetProgram, ///< [return value]: current program number @see AudioEffect::getProgram
+ effSetProgramName, ///< [ptr]: char* with new program name, limited to #kVstMaxProgNameLen @see AudioEffect::setProgramName
+ effGetProgramName, ///< [ptr]: char buffer for current program name, limited to #kVstMaxProgNameLen @see AudioEffect::getProgramName
+
+ effGetParamLabel, ///< [ptr]: char buffer for parameter label, limited to #kVstMaxParamStrLen @see AudioEffect::getParameterLabel
+ effGetParamDisplay, ///< [ptr]: char buffer for parameter display, limited to #kVstMaxParamStrLen @see AudioEffect::getParameterDisplay
+ effGetParamName, ///< [ptr]: char buffer for parameter name, limited to #kVstMaxParamStrLen @see AudioEffect::getParameterName
+
+ DECLARE_VST_DEPRECATED (effGetVu), ///< \deprecated deprecated in VST 2.4
+
+ effSetSampleRate, ///< [opt]: new sample rate for audio processing @see AudioEffect::setSampleRate
+ effSetBlockSize, ///< [value]: new maximum block size for audio processing @see AudioEffect::setBlockSize
+ effMainsChanged, ///< [value]: 0 means "turn off", 1 means "turn on" @see AudioEffect::suspend @see AudioEffect::resume
+
+ effEditGetRect, ///< [ptr]: #ERect** receiving pointer to editor size @see ERect @see AEffEditor::getRect
+ effEditOpen, ///< [ptr]: system dependent Window pointer, e.g. HWND on Windows @see AEffEditor::open
+ effEditClose, ///< no arguments @see AEffEditor::close
+
+ DECLARE_VST_DEPRECATED (effEditDraw), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effEditMouse), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effEditKey), ///< \deprecated deprecated in VST 2.4
+
+ effEditIdle, ///< no arguments @see AEffEditor::idle
+
+ DECLARE_VST_DEPRECATED (effEditTop), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effEditSleep), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (effIdentify), ///< \deprecated deprecated in VST 2.4
+
+ effGetChunk, ///< [ptr]: void** for chunk data address [index]: 0 for bank, 1 for program @see AudioEffect::getChunk
+ effSetChunk, ///< [ptr]: chunk data [value]: byte size [index]: 0 for bank, 1 for program @see AudioEffect::setChunk
+
+ effNumOpcodes
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Basic dispatcher Opcodes (Plug-in to Host) */
+//-------------------------------------------------------------------------------------------------------
+enum AudioMasterOpcodes
+{
+//-------------------------------------------------------------------------------------------------------
+ audioMasterAutomate = 0, ///< [index]: parameter index [opt]: parameter value @see AudioEffect::setParameterAutomated
+ audioMasterVersion, ///< [return value]: Host VST version (for example 2400 for VST 2.4) @see AudioEffect::getMasterVersion
+ audioMasterCurrentId, ///< [return value]: current unique identifier on shell plug-in @see AudioEffect::getCurrentUniqueId
+ audioMasterIdle, ///< no arguments @see AudioEffect::masterIdle
+ DECLARE_VST_DEPRECATED (audioMasterPinConnected) ///< \deprecated deprecated in VST 2.4 r2
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** String length limits (in characters excl. 0 byte) */
+//-------------------------------------------------------------------------------------------------------
+enum VstStringConstants
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstMaxProgNameLen = 24, ///< used for #effGetProgramName, #effSetProgramName, #effGetProgramNameIndexed
+ kVstMaxParamStrLen = 8, ///< used for #effGetParamLabel, #effGetParamDisplay, #effGetParamName
+ kVstMaxVendorStrLen = 64, ///< used for #effGetVendorString, #audioMasterGetVendorString
+ kVstMaxProductStrLen = 64, ///< used for #effGetProductString, #audioMasterGetProductString
+ kVstMaxEffectNameLen = 32 ///< used for #effGetEffectName
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** String copy taking care of null terminator. */
+//-------------------------------------------------------------------------------------------------------
+inline char* vst_strncpy (char* dst, const char* src, size_t maxLen)
+{
+ char* result = strncpy (dst, src, maxLen);
+ dst[maxLen] = 0;
+ return result;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/** String concatenation taking care of null terminator. */
+//-------------------------------------------------------------------------------------------------------
+inline char* vst_strncat (char* dst, const char* src, size_t maxLen)
+{
+ char* result = strncat (dst, src, maxLen);
+ dst[maxLen] = 0;
+ return result;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/** Cast #VstIntPtr to pointer. */
+//-------------------------------------------------------------------------------------------------------
+template inline T* FromVstPtr (VstIntPtr& arg)
+{
+ T** address = (T**)&arg;
+ return *address;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/** Cast pointer to #VstIntPtr. */
+//-------------------------------------------------------------------------------------------------------
+template inline VstIntPtr ToVstPtr (T* ptr)
+{
+ VstIntPtr* address = (VstIntPtr*)&ptr;
+ return *address;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/** Structure used for #effEditGetRect. */
+//-------------------------------------------------------------------------------------------------------
+struct ERect
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt16 top; ///< top coordinate
+ VstInt16 left; ///< left coordinate
+ VstInt16 bottom; ///< bottom coordinate
+ VstInt16 right; ///< right coordinate
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+#if TARGET_API_MAC_CARBON
+ #pragma options align=reset
+#elif defined(WIN32) || defined(__FLAT__) || defined(__GNUC__)
+ #pragma pack(pop)
+#elif defined __BORLANDC__
+ #pragma -a-
+#endif
+
+#endif // __aeffect__
diff --git a/pluginterfaces/vst2.x/aeffectx.h b/pluginterfaces/vst2.x/aeffectx.h
new file mode 100644
index 0000000..8983b1d
--- /dev/null
+++ b/pluginterfaces/vst2.x/aeffectx.h
@@ -0,0 +1,1143 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/06/20 12:43:42 $
+//
+// Category : VST 2.x Interfaces
+// Filename : aeffectx.h
+// Created by : Steinberg Media Technologies
+// Description : Definition of auxiliary structures, extensions from VST 1.0 to VST 2.4
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __aeffectx__
+#define __aeffectx__
+
+#ifndef __aeffect__
+#include "aeffect.h"
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+#if TARGET_API_MAC_CARBON
+ #ifdef __LP64__
+ #pragma options align=power
+ #else
+ #pragma options align=mac68k
+ #endif
+#elif defined __BORLANDC__
+ #pragma -a8
+#elif defined(__GNUC__)
+ #pragma pack(push,8)
+#elif defined(WIN32) || defined(__FLAT__)
+ #pragma pack(push)
+ #pragma pack(8)
+#endif
+//-------------------------------------------------------------------------------------------------------
+
+//-------------------------------------------------------------------------------------------------------
+/** String length limits (in characters excl. 0 byte). */
+//-------------------------------------------------------------------------------------------------------
+enum Vst2StringConstants
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstMaxNameLen = 64, ///< used for #MidiProgramName, #MidiProgramCategory, #MidiKeyName, #VstSpeakerProperties, #VstPinProperties
+ kVstMaxLabelLen = 64, ///< used for #VstParameterProperties->label, #VstPinProperties->label
+ kVstMaxShortLabelLen = 8, ///< used for #VstParameterProperties->shortLabel, #VstPinProperties->shortLabel
+ kVstMaxCategLabelLen = 24, ///< used for #VstParameterProperties->label
+ kVstMaxFileNameLen = 100 ///< used for #VstAudioFile->name
+//-------------------------------------------------------------------------------------------------------
+};
+//-------------------------------------------------------------------------------------------------------
+// VstEvent
+//-------------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------
+/** A generic timestamped event. */
+//-------------------------------------------------------------------------------------------------------
+struct VstEvent
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 type; ///< @see VstEventTypes
+ VstInt32 byteSize; ///< size of this event, excl. type and byteSize
+ VstInt32 deltaFrames; ///< sample frames related to the current block start sample position
+ VstInt32 flags; ///< generic flags, none defined yet
+
+ char data[16]; ///< data size may vary, depending on event type
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** VstEvent Types used by #VstEvent. */
+//-------------------------------------------------------------------------------------------------------
+enum VstEventTypes
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstMidiType = 1, ///< MIDI event @see VstMidiEvent
+ DECLARE_VST_DEPRECATED (kVstAudioType), ///< \deprecated unused event type
+ DECLARE_VST_DEPRECATED (kVstVideoType), ///< \deprecated unused event type
+ DECLARE_VST_DEPRECATED (kVstParameterType), ///< \deprecated unused event type
+ DECLARE_VST_DEPRECATED (kVstTriggerType), ///< \deprecated unused event type
+ kVstSysExType ///< MIDI system exclusive @see VstMidiSysexEvent
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** A block of events for the current processed audio block. */
+//-------------------------------------------------------------------------------------------------------
+struct VstEvents
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 numEvents; ///< number of Events in array
+ VstIntPtr reserved; ///< zero (Reserved for future use)
+ VstEvent* events[2]; ///< event pointer array, variable size
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** MIDI Event (to be casted from VstEvent). */
+//-------------------------------------------------------------------------------------------------------
+struct VstMidiEvent
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 type; ///< #kVstMidiType
+ VstInt32 byteSize; ///< sizeof (VstMidiEvent)
+ VstInt32 deltaFrames; ///< sample frames related to the current block start sample position
+ VstInt32 flags; ///< @see VstMidiEventFlags
+ VstInt32 noteLength; ///< (in sample frames) of entire note, if available, else 0
+ VstInt32 noteOffset; ///< offset (in sample frames) into note from note start if available, else 0
+ char midiData[4]; ///< 1 to 3 MIDI bytes; midiData[3] is reserved (zero)
+ char detune; ///< -64 to +63 cents; for scales other than 'well-tempered' ('microtuning')
+ char noteOffVelocity; ///< Note Off Velocity [0, 127]
+ char reserved1; ///< zero (Reserved for future use)
+ char reserved2; ///< zero (Reserved for future use)
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstMidiEvent. */
+//-------------------------------------------------------------------------------------------------------
+enum VstMidiEventFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstMidiEventIsRealtime = 1 << 0 ///< means that this event is played life (not in playback from a sequencer track).\n This allows the Plug-In to handle these flagged events with higher priority, especially when the Plug-In has a big latency (AEffect::initialDelay)
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** MIDI Sysex Event (to be casted from #VstEvent). */
+//-------------------------------------------------------------------------------------------------------
+struct VstMidiSysexEvent
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 type; ///< #kVstSysexType
+ VstInt32 byteSize; ///< sizeof (VstMidiSysexEvent)
+ VstInt32 deltaFrames; ///< sample frames related to the current block start sample position
+ VstInt32 flags; ///< none defined yet (should be zero)
+ VstInt32 dumpBytes; ///< byte size of sysexDump
+ VstIntPtr resvd1; ///< zero (Reserved for future use)
+ char* sysexDump; ///< sysex dump
+ VstIntPtr resvd2; ///< zero (Reserved for future use)
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+// VstTimeInfo
+//-------------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------
+/** VstTimeInfo requested via #audioMasterGetTime. @see AudioEffectX::getTimeInfo
+
+\note VstTimeInfo::samplePos :Current Position. It must always be valid, and should not cost a lot to ask for. The sample position is ahead of the time displayed to the user. In sequencer stop mode, its value does not change. A 32 bit integer is too small for sample positions, and it's a double to make it easier to convert between ppq and samples.
+\note VstTimeInfo::ppqPos : At tempo 120, 1 quarter makes 1/2 second, so 2.0 ppq translates to 48000 samples at 48kHz sample rate.
+.25 ppq is one sixteenth note then. if you need something like 480ppq, you simply multiply ppq by that scaler.
+\note VstTimeInfo::barStartPos : Say we're at bars/beats readout 3.3.3. That's 2 bars + 2 q + 2 sixteenth, makes 2 * 4 + 2 + .25 = 10.25 ppq. at tempo 120, that's 10.25 * .5 = 5.125 seconds, times 48000 = 246000 samples (if my calculator servers me well :-).
+\note VstTimeInfo::samplesToNextClock : MIDI Clock Resolution (24 per Quarter Note), can be negative the distance to the next midi clock (24 ppq, pulses per quarter) in samples. unless samplePos falls precicely on a midi clock, this will either be negative such that the previous MIDI clock is addressed, or positive when referencing the following (future) MIDI clock.
+*/
+//-------------------------------------------------------------------------------------------------------
+struct VstTimeInfo
+{
+//-------------------------------------------------------------------------------------------------------
+ double samplePos; ///< current Position in audio samples (always valid)
+ double sampleRate; ///< current Sample Rate in Herz (always valid)
+ double nanoSeconds; ///< System Time in nanoseconds (10^-9 second)
+ double ppqPos; ///< Musical Position, in Quarter Note (1.0 equals 1 Quarter Note)
+ double tempo; ///< current Tempo in BPM (Beats Per Minute)
+ double barStartPos; ///< last Bar Start Position, in Quarter Note
+ double cycleStartPos; ///< Cycle Start (left locator), in Quarter Note
+ double cycleEndPos; ///< Cycle End (right locator), in Quarter Note
+ VstInt32 timeSigNumerator; ///< Time Signature Numerator (e.g. 3 for 3/4)
+ VstInt32 timeSigDenominator; ///< Time Signature Denominator (e.g. 4 for 3/4)
+ VstInt32 smpteOffset; ///< SMPTE offset (in SMPTE subframes (bits; 1/80 of a frame)). The current SMPTE position can be calculated using #samplePos, #sampleRate, and #smpteFrameRate.
+ VstInt32 smpteFrameRate; ///< @see VstSmpteFrameRate
+ VstInt32 samplesToNextClock; ///< MIDI Clock Resolution (24 Per Quarter Note), can be negative (nearest clock)
+ VstInt32 flags; ///< @see VstTimeInfoFlags
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstTimeInfo. */
+//-------------------------------------------------------------------------------------------------------
+enum VstTimeInfoFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstTransportChanged = 1, ///< indicates that play, cycle or record state has changed
+ kVstTransportPlaying = 1 << 1, ///< set if Host sequencer is currently playing
+ kVstTransportCycleActive = 1 << 2, ///< set if Host sequencer is in cycle mode
+ kVstTransportRecording = 1 << 3, ///< set if Host sequencer is in record mode
+ kVstAutomationWriting = 1 << 6, ///< set if automation write mode active (record parameter changes)
+ kVstAutomationReading = 1 << 7, ///< set if automation read mode active (play parameter changes)
+ kVstNanosValid = 1 << 8, ///< VstTimeInfo::nanoSeconds valid
+ kVstPpqPosValid = 1 << 9, ///< VstTimeInfo::ppqPos valid
+ kVstTempoValid = 1 << 10, ///< VstTimeInfo::tempo valid
+ kVstBarsValid = 1 << 11, ///< VstTimeInfo::barStartPos valid
+ kVstCyclePosValid = 1 << 12, ///< VstTimeInfo::cycleStartPos and VstTimeInfo::cycleEndPos valid
+ kVstTimeSigValid = 1 << 13, ///< VstTimeInfo::timeSigNumerator and VstTimeInfo::timeSigDenominator valid
+ kVstSmpteValid = 1 << 14, ///< VstTimeInfo::smpteOffset and VstTimeInfo::smpteFrameRate valid
+ kVstClockValid = 1 << 15 ///< VstTimeInfo::samplesToNextClock valid
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** SMPTE Frame Rates. */
+//-------------------------------------------------------------------------------------------------------
+enum VstSmpteFrameRate
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstSmpte24fps = 0, ///< 24 fps
+ kVstSmpte25fps = 1, ///< 25 fps
+ kVstSmpte2997fps = 2, ///< 29.97 fps
+ kVstSmpte30fps = 3, ///< 30 fps
+ kVstSmpte2997dfps = 4, ///< 29.97 drop
+ kVstSmpte30dfps = 5, ///< 30 drop
+
+ kVstSmpteFilm16mm = 6, ///< Film 16mm
+ kVstSmpteFilm35mm = 7, ///< Film 35mm
+ kVstSmpte239fps = 10, ///< HDTV: 23.976 fps
+ kVstSmpte249fps = 11, ///< HDTV: 24.976 fps
+ kVstSmpte599fps = 12, ///< HDTV: 59.94 fps
+ kVstSmpte60fps = 13 ///< HDTV: 60 fps
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Variable IO for Offline Processing. */
+//-------------------------------------------------------------------------------------------------------
+struct VstVariableIo
+{
+//-------------------------------------------------------------------------------------------------------
+ float** inputs; ///< input audio buffers
+ float** outputs; ///< output audio buffers
+ VstInt32 numSamplesInput; ///< number of incoming samples
+ VstInt32 numSamplesOutput; ///< number of outgoing samples
+ VstInt32* numSamplesInputProcessed; ///< number of samples actually processed of input
+ VstInt32* numSamplesOutputProcessed; ///< number of samples actually processed of output
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Language code returned by audioMasterGetLanguage. */
+//-------------------------------------------------------------------------------------------------------
+enum VstHostLanguage
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstLangEnglish = 1, ///< English
+ kVstLangGerman, ///< German
+ kVstLangFrench, ///< French
+ kVstLangItalian, ///< Italian
+ kVstLangSpanish, ///< Spanish
+ kVstLangJapanese ///< Japanese
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** VST 2.x dispatcher Opcodes (Plug-in to Host). Extension of #AudioMasterOpcodes */
+//-------------------------------------------------------------------------------------------------------
+enum AudioMasterOpcodesX
+{
+//-------------------------------------------------------------------------------------------------------
+ DECLARE_VST_DEPRECATED (audioMasterWantMidi) = DECLARE_VST_DEPRECATED (audioMasterPinConnected) + 2, ///< \deprecated deprecated in VST 2.4
+
+ audioMasterGetTime, ///< [return value]: #VstTimeInfo* or null if not supported [value]: request mask @see VstTimeInfoFlags @see AudioEffectX::getTimeInfo
+ audioMasterProcessEvents, ///< [ptr]: pointer to #VstEvents @see VstEvents @see AudioEffectX::sendVstEventsToHost
+
+ DECLARE_VST_DEPRECATED (audioMasterSetTime), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterTempoAt), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterGetNumAutomatableParameters), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterGetParameterQuantization), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterIOChanged, ///< [return value]: 1 if supported @see AudioEffectX::ioChanged
+
+ DECLARE_VST_DEPRECATED (audioMasterNeedIdle), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterSizeWindow, ///< [index]: new width [value]: new height [return value]: 1 if supported @see AudioEffectX::sizeWindow
+ audioMasterGetSampleRate, ///< [return value]: current sample rate @see AudioEffectX::updateSampleRate
+ audioMasterGetBlockSize, ///< [return value]: current block size @see AudioEffectX::updateBlockSize
+ audioMasterGetInputLatency, ///< [return value]: input latency in audio samples @see AudioEffectX::getInputLatency
+ audioMasterGetOutputLatency, ///< [return value]: output latency in audio samples @see AudioEffectX::getOutputLatency
+
+ DECLARE_VST_DEPRECATED (audioMasterGetPreviousPlug), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterGetNextPlug), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterWillReplaceOrAccumulate), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterGetCurrentProcessLevel, ///< [return value]: current process level @see VstProcessLevels
+ audioMasterGetAutomationState, ///< [return value]: current automation state @see VstAutomationStates
+
+ audioMasterOfflineStart, ///< [index]: numNewAudioFiles [value]: numAudioFiles [ptr]: #VstAudioFile* @see AudioEffectX::offlineStart
+ audioMasterOfflineRead, ///< [index]: bool readSource [value]: #VstOfflineOption* @see VstOfflineOption [ptr]: #VstOfflineTask* @see VstOfflineTask @see AudioEffectX::offlineRead
+ audioMasterOfflineWrite, ///< @see audioMasterOfflineRead @see AudioEffectX::offlineRead
+ audioMasterOfflineGetCurrentPass, ///< @see AudioEffectX::offlineGetCurrentPass
+ audioMasterOfflineGetCurrentMetaPass, ///< @see AudioEffectX::offlineGetCurrentMetaPass
+
+ DECLARE_VST_DEPRECATED (audioMasterSetOutputSampleRate), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterGetOutputSpeakerArrangement), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterGetVendorString, ///< [ptr]: char buffer for vendor string, limited to #kVstMaxVendorStrLen @see AudioEffectX::getHostVendorString
+ audioMasterGetProductString, ///< [ptr]: char buffer for vendor string, limited to #kVstMaxProductStrLen @see AudioEffectX::getHostProductString
+ audioMasterGetVendorVersion, ///< [return value]: vendor-specific version @see AudioEffectX::getHostVendorVersion
+ audioMasterVendorSpecific, ///< no definition, vendor specific handling @see AudioEffectX::hostVendorSpecific
+
+ DECLARE_VST_DEPRECATED (audioMasterSetIcon), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterCanDo, ///< [ptr]: "can do" string [return value]: 1 for supported
+ audioMasterGetLanguage, ///< [return value]: language code @see VstHostLanguage
+
+ DECLARE_VST_DEPRECATED (audioMasterOpenWindow), ///< \deprecated deprecated in VST 2.4
+ DECLARE_VST_DEPRECATED (audioMasterCloseWindow), ///< \deprecated deprecated in VST 2.4
+
+ audioMasterGetDirectory, ///< [return value]: FSSpec on MAC, else char* @see AudioEffectX::getDirectory
+ audioMasterUpdateDisplay, ///< no arguments
+ audioMasterBeginEdit, ///< [index]: parameter index @see AudioEffectX::beginEdit
+ audioMasterEndEdit, ///< [index]: parameter index @see AudioEffectX::endEdit
+ audioMasterOpenFileSelector, ///< [ptr]: VstFileSelect* [return value]: 1 if supported @see AudioEffectX::openFileSelector
+ audioMasterCloseFileSelector, ///< [ptr]: VstFileSelect* @see AudioEffectX::closeFileSelector
+
+ DECLARE_VST_DEPRECATED (audioMasterEditFile), ///< \deprecated deprecated in VST 2.4
+
+ DECLARE_VST_DEPRECATED (audioMasterGetChunkFile), ///< \deprecated deprecated in VST 2.4 [ptr]: char[2048] or sizeof (FSSpec) [return value]: 1 if supported @see AudioEffectX::getChunkFile
+
+ DECLARE_VST_DEPRECATED (audioMasterGetInputSpeakerArrangement) ///< \deprecated deprecated in VST 2.4
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** VST 2.x dispatcher Opcodes (Host to Plug-in). Extension of #AEffectOpcodes */
+//-------------------------------------------------------------------------------------------------------
+enum AEffectXOpcodes
+{
+//-------------------------------------------------------------------------------------------------------
+ effProcessEvents = effSetChunk + 1 ///< [ptr]: #VstEvents* @see AudioEffectX::processEvents
+
+ , effCanBeAutomated ///< [index]: parameter index [return value]: 1=true, 0=false @see AudioEffectX::canParameterBeAutomated
+ , effString2Parameter ///< [index]: parameter index [ptr]: parameter string [return value]: true for success @see AudioEffectX::string2parameter
+
+ , DECLARE_VST_DEPRECATED (effGetNumProgramCategories) ///< \deprecated deprecated in VST 2.4
+
+ , effGetProgramNameIndexed ///< [index]: program index [ptr]: buffer for program name, limited to #kVstMaxProgNameLen [return value]: true for success @see AudioEffectX::getProgramNameIndexed
+
+ , DECLARE_VST_DEPRECATED (effCopyProgram) ///< \deprecated deprecated in VST 2.4
+ , DECLARE_VST_DEPRECATED (effConnectInput) ///< \deprecated deprecated in VST 2.4
+ , DECLARE_VST_DEPRECATED (effConnectOutput) ///< \deprecated deprecated in VST 2.4
+
+ , effGetInputProperties ///< [index]: input index [ptr]: #VstPinProperties* [return value]: 1 if supported @see AudioEffectX::getInputProperties
+ , effGetOutputProperties ///< [index]: output index [ptr]: #VstPinProperties* [return value]: 1 if supported @see AudioEffectX::getOutputProperties
+ , effGetPlugCategory ///< [return value]: category @see VstPlugCategory @see AudioEffectX::getPlugCategory
+
+ , DECLARE_VST_DEPRECATED (effGetCurrentPosition) ///< \deprecated deprecated in VST 2.4
+ , DECLARE_VST_DEPRECATED (effGetDestinationBuffer) ///< \deprecated deprecated in VST 2.4
+
+ , effOfflineNotify ///< [ptr]: #VstAudioFile array [value]: count [index]: start flag @see AudioEffectX::offlineNotify
+ , effOfflinePrepare ///< [ptr]: #VstOfflineTask array [value]: count @see AudioEffectX::offlinePrepare
+ , effOfflineRun ///< [ptr]: #VstOfflineTask array [value]: count @see AudioEffectX::offlineRun
+
+ , effProcessVarIo ///< [ptr]: #VstVariableIo* @see AudioEffectX::processVariableIo
+ , effSetSpeakerArrangement ///< [value]: input #VstSpeakerArrangement* [ptr]: output #VstSpeakerArrangement* @see AudioEffectX::setSpeakerArrangement
+
+ , DECLARE_VST_DEPRECATED (effSetBlockSizeAndSampleRate) ///< \deprecated deprecated in VST 2.4
+
+ , effSetBypass ///< [value]: 1 = bypass, 0 = no bypass @see AudioEffectX::setBypass
+ , effGetEffectName ///< [ptr]: buffer for effect name, limited to #kVstMaxEffectNameLen @see AudioEffectX::getEffectName
+
+ , DECLARE_VST_DEPRECATED (effGetErrorText) ///< \deprecated deprecated in VST 2.4
+
+ , effGetVendorString ///< [ptr]: buffer for effect vendor string, limited to #kVstMaxVendorStrLen @see AudioEffectX::getVendorString
+ , effGetProductString ///< [ptr]: buffer for effect vendor string, limited to #kVstMaxProductStrLen @see AudioEffectX::getProductString
+ , effGetVendorVersion ///< [return value]: vendor-specific version @see AudioEffectX::getVendorVersion
+ , effVendorSpecific ///< no definition, vendor specific handling @see AudioEffectX::vendorSpecific
+ , effCanDo ///< [ptr]: "can do" string [return value]: 0: "don't know" -1: "no" 1: "yes" @see AudioEffectX::canDo
+ , effGetTailSize ///< [return value]: tail size (for example the reverb time of a reverb plug-in); 0 is default (return 1 for 'no tail')
+
+ , DECLARE_VST_DEPRECATED (effIdle) ///< \deprecated deprecated in VST 2.4
+ , DECLARE_VST_DEPRECATED (effGetIcon) ///< \deprecated deprecated in VST 2.4
+ , DECLARE_VST_DEPRECATED (effSetViewPosition) ///< \deprecated deprecated in VST 2.4
+
+ , effGetParameterProperties ///< [index]: parameter index [ptr]: #VstParameterProperties* [return value]: 1 if supported @see AudioEffectX::getParameterProperties
+
+ , DECLARE_VST_DEPRECATED (effKeysRequired) ///< \deprecated deprecated in VST 2.4
+
+ , effGetVstVersion ///< [return value]: VST version @see AudioEffectX::getVstVersion
+
+#if VST_2_1_EXTENSIONS
+ , effEditKeyDown ///< [index]: ASCII character [value]: virtual key [opt]: modifiers [return value]: 1 if key used @see AEffEditor::onKeyDown
+ , effEditKeyUp ///< [index]: ASCII character [value]: virtual key [opt]: modifiers [return value]: 1 if key used @see AEffEditor::onKeyUp
+ , effSetEditKnobMode ///< [value]: knob mode 0: circular, 1: circular relativ, 2: linear (CKnobMode in VSTGUI) @see AEffEditor::setKnobMode
+
+ , effGetMidiProgramName ///< [index]: MIDI channel [ptr]: #MidiProgramName* [return value]: number of used programs, 0 if unsupported @see AudioEffectX::getMidiProgramName
+ , effGetCurrentMidiProgram ///< [index]: MIDI channel [ptr]: #MidiProgramName* [return value]: index of current program @see AudioEffectX::getCurrentMidiProgram
+ , effGetMidiProgramCategory ///< [index]: MIDI channel [ptr]: #MidiProgramCategory* [return value]: number of used categories, 0 if unsupported @see AudioEffectX::getMidiProgramCategory
+ , effHasMidiProgramsChanged ///< [index]: MIDI channel [return value]: 1 if the #MidiProgramName(s) or #MidiKeyName(s) have changed @see AudioEffectX::hasMidiProgramsChanged
+ , effGetMidiKeyName ///< [index]: MIDI channel [ptr]: #MidiKeyName* [return value]: true if supported, false otherwise @see AudioEffectX::getMidiKeyName
+
+ , effBeginSetProgram ///< no arguments @see AudioEffectX::beginSetProgram
+ , effEndSetProgram ///< no arguments @see AudioEffectX::endSetProgram
+#endif // VST_2_1_EXTENSIONS
+
+#if VST_2_3_EXTENSIONS
+ , effGetSpeakerArrangement ///< [value]: input #VstSpeakerArrangement* [ptr]: output #VstSpeakerArrangement* @see AudioEffectX::getSpeakerArrangement
+ , effShellGetNextPlugin ///< [ptr]: buffer for plug-in name, limited to #kVstMaxProductStrLen [return value]: next plugin's uniqueID @see AudioEffectX::getNextShellPlugin
+
+ , effStartProcess ///< no arguments @see AudioEffectX::startProcess
+ , effStopProcess ///< no arguments @see AudioEffectX::stopProcess
+ , effSetTotalSampleToProcess ///< [value]: number of samples to process, offline only! @see AudioEffectX::setTotalSampleToProcess
+ , effSetPanLaw ///< [value]: pan law [opt]: gain @see VstPanLawType @see AudioEffectX::setPanLaw
+
+ , effBeginLoadBank ///< [ptr]: #VstPatchChunkInfo* [return value]: -1: bank can't be loaded, 1: bank can be loaded, 0: unsupported @see AudioEffectX::beginLoadBank
+ , effBeginLoadProgram ///< [ptr]: #VstPatchChunkInfo* [return value]: -1: prog can't be loaded, 1: prog can be loaded, 0: unsupported @see AudioEffectX::beginLoadProgram
+#endif // VST_2_3_EXTENSIONS
+
+#if VST_2_4_EXTENSIONS
+ , effSetProcessPrecision ///< [value]: @see VstProcessPrecision @see AudioEffectX::setProcessPrecision
+ , effGetNumMidiInputChannels ///< [return value]: number of used MIDI input channels (1-15) @see AudioEffectX::getNumMidiInputChannels
+ , effGetNumMidiOutputChannels ///< [return value]: number of used MIDI output channels (1-15) @see AudioEffectX::getNumMidiOutputChannels
+#endif // VST_2_4_EXTENSIONS
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Symbolic precision constants used for effSetProcessPrecision. */
+//-------------------------------------------------------------------------------------------------------
+enum VstProcessPrecision
+{
+ kVstProcessPrecision32 = 0, ///< single precision float (32bits)
+ kVstProcessPrecision64 ///< double precision (64bits)
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Parameter Properties used in #effGetParameterProperties. */
+//-------------------------------------------------------------------------------------------------------
+struct VstParameterProperties
+{
+//-------------------------------------------------------------------------------------------------------
+ float stepFloat; ///< float step
+ float smallStepFloat; ///< small float step
+ float largeStepFloat; ///< large float step
+ char label[kVstMaxLabelLen];///< parameter label
+ VstInt32 flags; ///< @see VstParameterFlags
+ VstInt32 minInteger; ///< integer minimum
+ VstInt32 maxInteger; ///< integer maximum
+ VstInt32 stepInteger; ///< integer step
+ VstInt32 largeStepInteger; ///< large integer step
+ char shortLabel[kVstMaxShortLabelLen]; ///< short label, recommended: 6 + delimiter
+
+ // The following are for remote controller display purposes.
+ // Note that the kVstParameterSupportsDisplayIndex flag must be set.
+ // Host can scan all parameters, and find out in what order
+ // to display them:
+
+ VstInt16 displayIndex; ///< index where this parameter should be displayed (starting with 0)
+
+ // Host can also possibly display the parameter group (category), such as...
+ // ---------------------------
+ // Osc 1
+ // Wave Detune Octave Mod
+ // ---------------------------
+ // ...if the plug-in supports it (flag #kVstParameterSupportsDisplayCategory)
+
+ VstInt16 category; ///< 0: no category, else group index + 1
+ VstInt16 numParametersInCategory; ///< number of parameters in category
+ VstInt16 reserved; ///< zero
+ char categoryLabel[kVstMaxCategLabelLen]; ///< category label, e.g. "Osc 1"
+
+ char future[16]; ///< reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstParameterProperties. */
+//-------------------------------------------------------------------------------------------------------
+enum VstParameterFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstParameterIsSwitch = 1 << 0, ///< parameter is a switch (on/off)
+ kVstParameterUsesIntegerMinMax = 1 << 1, ///< minInteger, maxInteger valid
+ kVstParameterUsesFloatStep = 1 << 2, ///< stepFloat, smallStepFloat, largeStepFloat valid
+ kVstParameterUsesIntStep = 1 << 3, ///< stepInteger, largeStepInteger valid
+ kVstParameterSupportsDisplayIndex = 1 << 4, ///< displayIndex valid
+ kVstParameterSupportsDisplayCategory = 1 << 5, ///< category, etc. valid
+ kVstParameterCanRamp = 1 << 6 ///< set if parameter value can ramp up/down
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Pin Properties used in #effGetInputProperties and #effGetOutputProperties. */
+//-------------------------------------------------------------------------------------------------------
+struct VstPinProperties
+{
+//-------------------------------------------------------------------------------------------------------
+ char label[kVstMaxLabelLen]; ///< pin name
+ VstInt32 flags; ///< @see VstPinPropertiesFlags
+ VstInt32 arrangementType; ///< @see VstSpeakerArrangementType
+ char shortLabel[kVstMaxShortLabelLen]; ///< short name (recommended: 6 + delimiter)
+
+ char future[48]; ///< reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstPinProperties. */
+//-------------------------------------------------------------------------------------------------------
+enum VstPinPropertiesFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstPinIsActive = 1 << 0, ///< pin is active, ignored by Host
+ kVstPinIsStereo = 1 << 1, ///< pin is first of a stereo pair
+ kVstPinUseSpeaker = 1 << 2 ///< #VstPinProperties::arrangementType is valid and can be used to get the wanted arrangement
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Plug-in Categories. */
+//-------------------------------------------------------------------------------------------------------
+enum VstPlugCategory
+{
+//-------------------------------------------------------------------------------------------------------
+ kPlugCategUnknown = 0, ///< Unknown, category not implemented
+ kPlugCategEffect, ///< Simple Effect
+ kPlugCategSynth, ///< VST Instrument (Synths, samplers,...)
+ kPlugCategAnalysis, ///< Scope, Tuner, ...
+ kPlugCategMastering, ///< Dynamics, ...
+ kPlugCategSpacializer, ///< Panners, ...
+ kPlugCategRoomFx, ///< Delays and Reverbs
+ kPlugSurroundFx, ///< Dedicated surround processor
+ kPlugCategRestoration, ///< Denoiser, ...
+ kPlugCategOfflineProcess, ///< Offline Process
+ kPlugCategShell, ///< Plug-in is container of other plug-ins @see effShellGetNextPlugin
+ kPlugCategGenerator, ///< ToneGenerator, ...
+
+ kPlugCategMaxCount ///< Marker to count the categories
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+// MIDI Programs
+//-------------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------
+/** MIDI Program Description. */
+//-------------------------------------------------------------------------------------------------------
+struct MidiProgramName
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 thisProgramIndex; ///< 0 or greater: fill struct for this program index
+ char name[kVstMaxNameLen]; ///< program name
+ char midiProgram; ///< -1:off, 0-127
+ char midiBankMsb; ///< -1:off, 0-127
+ char midiBankLsb; ///< -1:off, 0-127
+ char reserved; ///< zero
+ VstInt32 parentCategoryIndex; ///< -1:no parent category
+ VstInt32 flags; ///< omni etc. @see VstMidiProgramNameFlags
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in MidiProgramName. */
+//-------------------------------------------------------------------------------------------------------
+enum VstMidiProgramNameFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kMidiIsOmni = 1 ///< default is multi. for omni mode, channel 0 is used for inquiries and program changes
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** MIDI Program Category. */
+//-------------------------------------------------------------------------------------------------------
+struct MidiProgramCategory
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 thisCategoryIndex; ///< 0 or greater: fill struct for this category index.
+ char name[kVstMaxNameLen]; ///< name
+ VstInt32 parentCategoryIndex; ///< -1:no parent category
+ VstInt32 flags; ///< reserved, none defined yet, zero.
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** MIDI Key Description. */
+//-------------------------------------------------------------------------------------------------------
+struct MidiKeyName
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 thisProgramIndex; ///< 0 or greater: fill struct for this program index.
+ VstInt32 thisKeyNumber; ///< 0 - 127. fill struct for this key number.
+ char keyName[kVstMaxNameLen]; ///< key name, empty means regular key names
+ VstInt32 reserved; ///< zero
+ VstInt32 flags; ///< reserved, none defined yet, zero.
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+// Surround Setup
+//-------------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------
+/** Speaker Properties.
+ The origin for azimuth is right (as by math conventions dealing with radians).
+ The elevation origin is also right, visualizing a rotation of a circle across the
+ -pi/pi axis of the horizontal circle. Thus, an elevation of -pi/2 corresponds
+ to bottom, and a speaker standing on the left, and 'beaming' upwards would have
+ an azimuth of -pi, and an elevation of pi/2.
+ For user interface representation, grads are more likely to be used, and the
+ origins will obviously 'shift' accordingly. */
+//-------------------------------------------------------------------------------------------------------
+struct VstSpeakerProperties
+{
+//-------------------------------------------------------------------------------------------------------
+ float azimuth; ///< unit: rad, range: -PI...PI, exception: 10.f for LFE channel
+ float elevation; ///< unit: rad, range: -PI/2...PI/2, exception: 10.f for LFE channel
+ float radius; ///< unit: meter, exception: 0.f for LFE channel
+ float reserved; ///< zero (reserved for future use)
+ char name[kVstMaxNameLen]; ///< for new setups, new names should be given (L/R/C... won't do)
+ VstInt32 type; ///< @see VstSpeakerType
+
+ char future[28]; ///< reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Speaker Arrangement. */
+//-------------------------------------------------------------------------------------------------------
+struct VstSpeakerArrangement
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 type; ///< e.g. #kSpeakerArr51 for 5.1 @see VstSpeakerArrangementType
+ VstInt32 numChannels; ///< number of channels in this speaker arrangement
+ VstSpeakerProperties speakers[8]; ///< variable sized speaker array
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Speaker Types. */
+//-------------------------------------------------------------------------------------------------------
+enum VstSpeakerType
+{
+//-------------------------------------------------------------------------------------------------------
+ kSpeakerUndefined = 0x7fffffff, ///< Undefined
+ kSpeakerM = 0, ///< Mono (M)
+ kSpeakerL, ///< Left (L)
+ kSpeakerR, ///< Right (R)
+ kSpeakerC, ///< Center (C)
+ kSpeakerLfe, ///< Subbass (Lfe)
+ kSpeakerLs, ///< Left Surround (Ls)
+ kSpeakerRs, ///< Right Surround (Rs)
+ kSpeakerLc, ///< Left of Center (Lc)
+ kSpeakerRc, ///< Right of Center (Rc)
+ kSpeakerS, ///< Surround (S)
+ kSpeakerCs = kSpeakerS, ///< Center of Surround (Cs) = Surround (S)
+ kSpeakerSl, ///< Side Left (Sl)
+ kSpeakerSr, ///< Side Right (Sr)
+ kSpeakerTm, ///< Top Middle (Tm)
+ kSpeakerTfl, ///< Top Front Left (Tfl)
+ kSpeakerTfc, ///< Top Front Center (Tfc)
+ kSpeakerTfr, ///< Top Front Right (Tfr)
+ kSpeakerTrl, ///< Top Rear Left (Trl)
+ kSpeakerTrc, ///< Top Rear Center (Trc)
+ kSpeakerTrr, ///< Top Rear Right (Trr)
+ kSpeakerLfe2 ///< Subbass 2 (Lfe2)
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** User-defined speaker types, to be extended in the negative range.
+ Will be handled as their corresponding speaker types with abs values:
+ e.g abs(#kSpeakerU1) == #kSpeakerL, abs(#kSpeakerU2) == #kSpeakerR) */
+//-------------------------------------------------------------------------------------------------------
+enum VstUserSpeakerType
+{
+//-------------------------------------------------------------------------------------------------------
+ kSpeakerU32 = -32,
+ kSpeakerU31,
+ kSpeakerU30,
+ kSpeakerU29,
+ kSpeakerU28,
+ kSpeakerU27,
+ kSpeakerU26,
+ kSpeakerU25,
+ kSpeakerU24,
+ kSpeakerU23,
+ kSpeakerU22,
+ kSpeakerU21,
+ kSpeakerU20, ///< == #kSpeakerLfe2
+ kSpeakerU19, ///< == #kSpeakerTrr
+ kSpeakerU18, ///< == #kSpeakerTrc
+ kSpeakerU17, ///< == #kSpeakerTrl
+ kSpeakerU16, ///< == #kSpeakerTfr
+ kSpeakerU15, ///< == #kSpeakerTfc
+ kSpeakerU14, ///< == #kSpeakerTfl
+ kSpeakerU13, ///< == #kSpeakerTm
+ kSpeakerU12, ///< == #kSpeakerSr
+ kSpeakerU11, ///< == #kSpeakerSl
+ kSpeakerU10, ///< == #kSpeakerCs
+ kSpeakerU9, ///< == #kSpeakerS
+ kSpeakerU8, ///< == #kSpeakerRc
+ kSpeakerU7, ///< == #kSpeakerLc
+ kSpeakerU6, ///< == #kSpeakerRs
+ kSpeakerU5, ///< == #kSpeakerLs
+ kSpeakerU4, ///< == #kSpeakerLfe
+ kSpeakerU3, ///< == #kSpeakerC
+ kSpeakerU2, ///< == #kSpeakerR
+ kSpeakerU1 ///< == #kSpeakerL
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Speaker Arrangement Types*/
+//-------------------------------------------------------------------------------------------------------
+enum VstSpeakerArrangementType
+{
+//-------------------------------------------------------------------------------------------------------
+ kSpeakerArrUserDefined = -2,///< user defined
+ kSpeakerArrEmpty = -1, ///< empty arrangement
+ kSpeakerArrMono = 0, ///< M
+ kSpeakerArrStereo, ///< L R
+ kSpeakerArrStereoSurround, ///< Ls Rs
+ kSpeakerArrStereoCenter, ///< Lc Rc
+ kSpeakerArrStereoSide, ///< Sl Sr
+ kSpeakerArrStereoCLfe, ///< C Lfe
+ kSpeakerArr30Cine, ///< L R C
+ kSpeakerArr30Music, ///< L R S
+ kSpeakerArr31Cine, ///< L R C Lfe
+ kSpeakerArr31Music, ///< L R Lfe S
+ kSpeakerArr40Cine, ///< L R C S (LCRS)
+ kSpeakerArr40Music, ///< L R Ls Rs (Quadro)
+ kSpeakerArr41Cine, ///< L R C Lfe S (LCRS+Lfe)
+ kSpeakerArr41Music, ///< L R Lfe Ls Rs (Quadro+Lfe)
+ kSpeakerArr50, ///< L R C Ls Rs
+ kSpeakerArr51, ///< L R C Lfe Ls Rs
+ kSpeakerArr60Cine, ///< L R C Ls Rs Cs
+ kSpeakerArr60Music, ///< L R Ls Rs Sl Sr
+ kSpeakerArr61Cine, ///< L R C Lfe Ls Rs Cs
+ kSpeakerArr61Music, ///< L R Lfe Ls Rs Sl Sr
+ kSpeakerArr70Cine, ///< L R C Ls Rs Lc Rc
+ kSpeakerArr70Music, ///< L R C Ls Rs Sl Sr
+ kSpeakerArr71Cine, ///< L R C Lfe Ls Rs Lc Rc
+ kSpeakerArr71Music, ///< L R C Lfe Ls Rs Sl Sr
+ kSpeakerArr80Cine, ///< L R C Ls Rs Lc Rc Cs
+ kSpeakerArr80Music, ///< L R C Ls Rs Cs Sl Sr
+ kSpeakerArr81Cine, ///< L R C Lfe Ls Rs Lc Rc Cs
+ kSpeakerArr81Music, ///< L R C Lfe Ls Rs Cs Sl Sr
+ kSpeakerArr102, ///< L R C Lfe Ls Rs Tfl Tfc Tfr Trl Trr Lfe2
+ kNumSpeakerArr
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+// Offline Processing
+//-------------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------
+/** Offline Task Description. */
+//-------------------------------------------------------------------------------------------------------
+struct VstOfflineTask
+{
+//-------------------------------------------------------------------------------------------------------
+ char processName[96]; ///< set by plug-in
+
+ // audio access
+ double readPosition; ///< set by plug-in/Host
+ double writePosition; ///< set by plug-in/Host
+ VstInt32 readCount; ///< set by plug-in/Host
+ VstInt32 writeCount; ///< set by plug-in
+ VstInt32 sizeInputBuffer; ///< set by Host
+ VstInt32 sizeOutputBuffer; ///< set by Host
+ void* inputBuffer; ///< set by Host
+ void* outputBuffer; ///< set by Host
+ double positionToProcessFrom; ///< set by Host
+ double numFramesToProcess; ///< set by Host
+ double maxFramesToWrite; ///< set by plug-in
+
+ // other data access
+ void* extraBuffer; ///< set by plug-in
+ VstInt32 value; ///< set by Host or plug-in
+ VstInt32 index; ///< set by Host or plug-in
+
+ // file attributes
+ double numFramesInSourceFile; ///< set by Host
+ double sourceSampleRate; ///< set by Host or plug-in
+ double destinationSampleRate; ///< set by Host or plug-in
+ VstInt32 numSourceChannels; ///< set by Host or plug-in
+ VstInt32 numDestinationChannels;///< set by Host or plug-in
+ VstInt32 sourceFormat; ///< set by Host
+ VstInt32 destinationFormat; ///< set by plug-in
+ char outputText[512]; ///< set by plug-in or Host
+
+ // progress notification
+ double progress; ///< set by plug-in
+ VstInt32 progressMode; ///< Reserved for future use
+ char progressText[100]; ///< set by plug-in
+
+ VstInt32 flags; ///< set by Host and plug-in; see enum #VstOfflineTaskFlags
+ VstInt32 returnValue; ///< Reserved for future use
+ void* hostOwned; ///< set by Host
+ void* plugOwned; ///< set by plug-in
+
+ char future[1024]; ///< Reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstOfflineTask. */
+//-------------------------------------------------------------------------------------------------------
+enum VstOfflineTaskFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstOfflineUnvalidParameter = 1 << 0, ///< set by Host
+ kVstOfflineNewFile = 1 << 1, ///< set by Host
+
+ kVstOfflinePlugError = 1 << 10, ///< set by plug-in
+ kVstOfflineInterleavedAudio = 1 << 11, ///< set by plug-in
+ kVstOfflineTempOutputFile = 1 << 12, ///< set by plug-in
+ kVstOfflineFloatOutputFile = 1 << 13, ///< set by plug-in
+ kVstOfflineRandomWrite = 1 << 14, ///< set by plug-in
+ kVstOfflineStretch = 1 << 15, ///< set by plug-in
+ kVstOfflineNoThread = 1 << 16 ///< set by plug-in
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Option passed to #offlineRead/#offlineWrite. */
+//-------------------------------------------------------------------------------------------------------
+enum VstOfflineOption
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstOfflineAudio, ///< reading/writing audio samples
+ kVstOfflinePeaks, ///< reading graphic representation
+ kVstOfflineParameter, ///< reading/writing parameters
+ kVstOfflineMarker, ///< reading/writing marker
+ kVstOfflineCursor, ///< reading/moving edit cursor
+ kVstOfflineSelection, ///< reading/changing selection
+ kVstOfflineQueryFiles ///< to request the Host to call asynchronously #offlineNotify
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Structure passed to #offlineNotify and #offlineStart */
+//-------------------------------------------------------------------------------------------------------
+struct VstAudioFile
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 flags; ///< see enum #VstAudioFileFlags
+ void* hostOwned; ///< any data private to Host
+ void* plugOwned; ///< any data private to plug-in
+ char name[kVstMaxFileNameLen]; ///< file title
+ VstInt32 uniqueId; ///< uniquely identify a file during a session
+ double sampleRate; ///< file sample rate
+ VstInt32 numChannels; ///< number of channels (1 for mono, 2 for stereo...)
+ double numFrames; ///< number of frames in the audio file
+ VstInt32 format; ///< Reserved for future use
+ double editCursorPosition; ///< -1 if no such cursor
+ double selectionStart; ///< frame index of first selected frame, or -1
+ double selectionSize; ///< number of frames in selection, or 0
+ VstInt32 selectedChannelsMask; ///< 1 bit per channel
+ VstInt32 numMarkers; ///< number of markers in the file
+ VstInt32 timeRulerUnit; ///< see doc for possible values
+ double timeRulerOffset; ///< offset in time ruler (positive or negative)
+ double tempo; ///< as BPM (Beats Per Minute)
+ VstInt32 timeSigNumerator; ///< time signature numerator
+ VstInt32 timeSigDenominator; ///< time signature denominator
+ VstInt32 ticksPerBlackNote; ///< resolution
+ VstInt32 smpteFrameRate; ///< SMPTE rate (set as in #VstTimeInfo)
+
+ char future[64]; ///< Reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Flags used in #VstAudioFile. */
+//-------------------------------------------------------------------------------------------------------
+enum VstAudioFileFlags
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstOfflineReadOnly = 1 << 0, ///< set by Host (in call #offlineNotify)
+ kVstOfflineNoRateConversion = 1 << 1, ///< set by Host (in call #offlineNotify)
+ kVstOfflineNoChannelChange = 1 << 2, ///< set by Host (in call #offlineNotify)
+
+ kVstOfflineCanProcessSelection = 1 << 10, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineNoCrossfade = 1 << 11, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineWantRead = 1 << 12, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineWantWrite = 1 << 13, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineWantWriteMarker = 1 << 14, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineWantMoveCursor = 1 << 15, ///< set by plug-in (in call #offlineStart)
+ kVstOfflineWantSelect = 1 << 16 ///< set by plug-in (in call #offlineStart)
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Audio file marker. */
+//-------------------------------------------------------------------------------------------------------
+struct VstAudioFileMarker
+{
+//-------------------------------------------------------------------------------------------------------
+ double position; ///< marker position
+ char name[32]; ///< marker name
+ VstInt32 type; ///< marker type
+ VstInt32 id; ///< marker identifier
+ VstInt32 reserved; ///< reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+// Others
+//-------------------------------------------------------------------------------------------------------
+
+//-------------------------------------------------------------------------------------------------------
+/** \deprecated Structure used for #openWindow and #closeWindow (deprecated in VST 2.4). */
+//-------------------------------------------------------------------------------------------------------
+struct DECLARE_VST_DEPRECATED (VstWindow)
+{
+//-------------------------------------------------------------------------------------------------------
+ char title[128];
+ VstInt16 xPos;
+ VstInt16 yPos;
+ VstInt16 width;
+ VstInt16 height;
+ VstInt32 style;
+ void* parent;
+ void* userHandle;
+ void* winHandle;
+
+ char future[104];
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Structure used for keyUp/keyDown. */
+//-------------------------------------------------------------------------------------------------------
+struct VstKeyCode
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 character; ///< ASCII character
+ unsigned char virt; ///< @see VstVirtualKey
+ unsigned char modifier; ///< @see VstModifierKey
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Platform-independent definition of Virtual Keys (used in #VstKeyCode). */
+//-------------------------------------------------------------------------------------------------------
+enum VstVirtualKey
+{
+//-------------------------------------------------------------------------------------------------------
+ VKEY_BACK = 1,
+ VKEY_TAB,
+ VKEY_CLEAR,
+ VKEY_RETURN,
+ VKEY_PAUSE,
+ VKEY_ESCAPE,
+ VKEY_SPACE,
+ VKEY_NEXT,
+ VKEY_END,
+ VKEY_HOME,
+ VKEY_LEFT,
+ VKEY_UP,
+ VKEY_RIGHT,
+ VKEY_DOWN,
+ VKEY_PAGEUP,
+ VKEY_PAGEDOWN,
+ VKEY_SELECT,
+ VKEY_PRINT,
+ VKEY_ENTER,
+ VKEY_SNAPSHOT,
+ VKEY_INSERT,
+ VKEY_DELETE,
+ VKEY_HELP,
+ VKEY_NUMPAD0,
+ VKEY_NUMPAD1,
+ VKEY_NUMPAD2,
+ VKEY_NUMPAD3,
+ VKEY_NUMPAD4,
+ VKEY_NUMPAD5,
+ VKEY_NUMPAD6,
+ VKEY_NUMPAD7,
+ VKEY_NUMPAD8,
+ VKEY_NUMPAD9,
+ VKEY_MULTIPLY,
+ VKEY_ADD,
+ VKEY_SEPARATOR,
+ VKEY_SUBTRACT,
+ VKEY_DECIMAL,
+ VKEY_DIVIDE,
+ VKEY_F1,
+ VKEY_F2,
+ VKEY_F3,
+ VKEY_F4,
+ VKEY_F5,
+ VKEY_F6,
+ VKEY_F7,
+ VKEY_F8,
+ VKEY_F9,
+ VKEY_F10,
+ VKEY_F11,
+ VKEY_F12,
+ VKEY_NUMLOCK,
+ VKEY_SCROLL,
+ VKEY_SHIFT,
+ VKEY_CONTROL,
+ VKEY_ALT,
+ VKEY_EQUALS
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Modifier flags used in #VstKeyCode. */
+//-------------------------------------------------------------------------------------------------------
+enum VstModifierKey
+{
+//-------------------------------------------------------------------------------------------------------
+ MODIFIER_SHIFT = 1<<0, ///< Shift
+ MODIFIER_ALTERNATE = 1<<1, ///< Alt
+ MODIFIER_COMMAND = 1<<2, ///< Control on Mac
+ MODIFIER_CONTROL = 1<<3 ///< Ctrl on PC, Apple on Mac
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** File filter used in #VstFileSelect. */
+//-------------------------------------------------------------------------------------------------------
+struct VstFileType
+{
+//-------------------------------------------------------------------------------------------------------
+ char name[128]; ///< display name
+ char macType[8]; ///< MacOS type
+ char dosType[8]; ///< Windows file extension
+ char unixType[8]; ///< Unix file extension
+ char mimeType1[128]; ///< MIME type
+ char mimeType2[128]; ///< additional MIME type
+
+ VstFileType (const char* _name = 0, const char* _macType = 0, const char* _dosType = 0,
+ const char* _unixType = 0, const char* _mimeType1 = 0, const char* _mimeType2 = 0)
+ {
+ vst_strncpy (name, _name ? _name : "", 127);
+ vst_strncpy (macType, _macType ? _macType : "", 7);
+ vst_strncpy (dosType, _dosType ? _dosType : "", 7);
+ vst_strncpy (unixType, _unixType ? _unixType : "", 7);
+ vst_strncpy (mimeType1, _mimeType1 ? _mimeType1 : "", 127);
+ vst_strncpy (mimeType2, _mimeType2 ? _mimeType2 : "", 127);
+ }
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** File Selector Description used in #audioMasterOpenFileSelector. */
+//-------------------------------------------------------------------------------------------------------
+struct VstFileSelect
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 command; ///< @see VstFileSelectCommand
+ VstInt32 type; ///< @see VstFileSelectType
+ VstInt32 macCreator; ///< optional: 0 = no creator
+ VstInt32 nbFileTypes; ///< number of fileTypes
+ VstFileType* fileTypes; ///< list of fileTypes @see VstFileType
+ char title[1024]; ///< text to display in file selector's title
+ char* initialPath; ///< initial path
+ char* returnPath; ///< use with #kVstFileLoad and #kVstDirectorySelect. null: Host allocates memory, plug-in must call #closeOpenFileSelector!
+ VstInt32 sizeReturnPath; ///< size of allocated memory for return paths
+ char** returnMultiplePaths; ///< use with kVstMultipleFilesLoad. Host allocates memory, plug-in must call #closeOpenFileSelector!
+ VstInt32 nbReturnPath; ///< number of selected paths
+ VstIntPtr reserved; ///< reserved for Host application
+
+ char future[116]; ///< reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Command constants used in #VstFileSelect structure. */
+//-------------------------------------------------------------------------------------------------------
+enum VstFileSelectCommand
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstFileLoad = 0, ///< for loading a file
+ kVstFileSave, ///< for saving a file
+ kVstMultipleFilesLoad, ///< for loading multiple files
+ kVstDirectorySelect ///< for selecting a directory/folder
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Types used in #VstFileSelect structure. */
+//-------------------------------------------------------------------------------------------------------
+enum VstFileSelectType
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstFileType = 0 ///< regular file selector
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Structure used for #effBeginLoadBank/#effBeginLoadProgram. */
+//-------------------------------------------------------------------------------------------------------
+struct VstPatchChunkInfo
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 version; ///< Format Version (should be 1)
+ VstInt32 pluginUniqueID; ///< UniqueID of the plug-in
+ VstInt32 pluginVersion; ///< Plug-in Version
+ VstInt32 numElements; ///< Number of Programs (Bank) or Parameters (Program)
+
+ char future[48]; ///< Reserved for future use
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** PanLaw Type. */
+//-------------------------------------------------------------------------------------------------------
+enum VstPanLawType
+{
+//-------------------------------------------------------------------------------------------------------
+ kLinearPanLaw = 0, ///< L = pan * M; R = (1 - pan) * M;
+ kEqualPowerPanLaw ///< L = pow (pan, 0.5) * M; R = pow ((1 - pan), 0.5) * M;
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Process Levels returned by #audioMasterGetCurrentProcessLevel. */
+//-------------------------------------------------------------------------------------------------------
+enum VstProcessLevels
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstProcessLevelUnknown = 0, ///< not supported by Host
+ kVstProcessLevelUser, ///< 1: currently in user thread (GUI)
+ kVstProcessLevelRealtime, ///< 2: currently in audio thread (where process is called)
+ kVstProcessLevelPrefetch, ///< 3: currently in 'sequencer' thread (MIDI, timer etc)
+ kVstProcessLevelOffline ///< 4: currently offline processing and thus in user thread
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Automation States returned by #audioMasterGetAutomationState. */
+//-------------------------------------------------------------------------------------------------------
+enum VstAutomationStates
+{
+//-------------------------------------------------------------------------------------------------------
+ kVstAutomationUnsupported = 0, ///< not supported by Host
+ kVstAutomationOff, ///< off
+ kVstAutomationRead, ///< read
+ kVstAutomationWrite, ///< write
+ kVstAutomationReadWrite ///< read and write
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+#if TARGET_API_MAC_CARBON
+ #pragma options align=reset
+#elif defined(WIN32) || defined(__FLAT__) || defined(__GNUC__)
+ #pragma pack(pop)
+#elif defined __BORLANDC__
+ #pragma -a-
+#endif
+//-------------------------------------------------------------------------------------------------------
+
+#endif //__aeffectx__
diff --git a/pluginterfaces/vst2.x/vstfxstore.h b/pluginterfaces/vst2.x/vstfxstore.h
new file mode 100644
index 0000000..c642777
--- /dev/null
+++ b/pluginterfaces/vst2.x/vstfxstore.h
@@ -0,0 +1,106 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/02/09 11:05:51 $
+//
+// Category : VST 2.x Interfaces
+// Filename : vstfxstore.h
+// Created by : Steinberg Media Technologies
+// Description : Definition of Program (fxp) and Bank (fxb) structures
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __vstfxstore__
+#define __vstfxstore__
+
+#ifndef __aeffect__
+#include "aeffect.h"
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+/** Root chunk identifier for Programs (fxp) and Banks (fxb). */
+#define cMagic 'CcnK'
+
+/** Regular Program (fxp) identifier. */
+#define fMagic 'FxCk'
+
+/** Regular Bank (fxb) identifier. */
+#define bankMagic 'FxBk'
+
+/** Program (fxp) identifier for opaque chunk data. */
+#define chunkPresetMagic 'FPCh'
+
+/** Bank (fxb) identifier for opaque chunk data. */
+#define chunkBankMagic 'FBCh'
+
+/*
+ Note: The C data structures below are for illustration only. You can not read/write them directly.
+ The byte order on disk of fxp and fxb files is Big Endian. You have to swap integer
+ and floating-point values on Little Endian platforms (Windows, MacIntel)!
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/** Program (fxp) structure. */
+//-------------------------------------------------------------------------------------------------------
+struct fxProgram
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 chunkMagic; ///< 'CcnK'
+ VstInt32 byteSize; ///< size of this chunk, excl. magic + byteSize
+
+ VstInt32 fxMagic; ///< 'FxCk' (regular) or 'FPCh' (opaque chunk)
+ VstInt32 version; ///< format version (currently 1)
+ VstInt32 fxID; ///< fx unique ID
+ VstInt32 fxVersion; ///< fx version
+
+ VstInt32 numParams; ///< number of parameters
+ char prgName[28]; ///< program name (null-terminated ASCII string)
+
+ union
+ {
+ float params[1]; ///< variable sized array with parameter values
+ struct
+ {
+ VstInt32 size; ///< size of program data
+ char chunk[1]; ///< variable sized array with opaque program data
+ } data; ///< program chunk data
+ } content; ///< program content depending on fxMagic
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+/** Bank (fxb) structure. */
+//-------------------------------------------------------------------------------------------------------
+struct fxBank
+{
+//-------------------------------------------------------------------------------------------------------
+ VstInt32 chunkMagic; ///< 'CcnK'
+ VstInt32 byteSize; ///< size of this chunk, excl. magic + byteSize
+
+ VstInt32 fxMagic; ///< 'FxBk' (regular) or 'FBCh' (opaque chunk)
+ VstInt32 version; ///< format version (1 or 2)
+ VstInt32 fxID; ///< fx unique ID
+ VstInt32 fxVersion; ///< fx version
+
+ VstInt32 numPrograms; ///< number of programs
+
+#if VST_2_4_EXTENSIONS
+ VstInt32 currentProgram; ///< version 2: current program number
+ char future[124]; ///< reserved, should be zero
+#else
+ char future[128]; ///< reserved, should be zero
+#endif
+
+ union
+ {
+ fxProgram programs[1]; ///< variable number of programs
+ struct
+ {
+ VstInt32 size; ///< size of bank data
+ char chunk[1]; ///< variable sized array with opaque bank data
+ } data; ///< bank chunk data
+ } content; ///< bank content depending on fxMagic
+//-------------------------------------------------------------------------------------------------------
+};
+
+#endif // __vstfxstore__
diff --git a/public.sdk/samples/vst2.x/adelay/adelay.cpp b/public.sdk/samples/vst2.x/adelay/adelay.cpp
new file mode 100644
index 0000000..3e16bad
--- /dev/null
+++ b/public.sdk/samples/vst2.x/adelay/adelay.cpp
@@ -0,0 +1,216 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : adelay.cpp
+// Created by : Steinberg Media Technologies
+// Description : Simple Delay plugin (Mono->Stereo)
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#include
+#include
+
+#ifndef __adelay__
+#include "adelay.h"
+#endif
+
+//-----------------------------------------------------------------------------
+ADelayProgram::ADelayProgram ()
+{
+ // default Program Values
+ fDelay = 0.5;
+ fFeedBack = 0.5;
+ fOut = 0.75;
+
+ strcpy (name, "Init");
+}
+
+//-----------------------------------------------------------------------------
+ADelay::ADelay (audioMasterCallback audioMaster)
+ : AudioEffectX (audioMaster, kNumPrograms, kNumParams)
+{
+ // init
+ size = 44100;
+ cursor = 0;
+ delay = 0;
+ buffer = new float[size];
+
+ programs = new ADelayProgram[numPrograms];
+ fDelay = fFeedBack = fOut = 0;
+
+ if (programs)
+ setProgram (0);
+
+ setNumInputs (1); // mono input
+ setNumOutputs (2); // stereo output
+
+ setUniqueID ('ADly'); // this should be unique, use the Steinberg web page for plugin Id registration
+
+ resume (); // flush buffer
+}
+
+//------------------------------------------------------------------------
+ADelay::~ADelay ()
+{
+ if (buffer)
+ delete[] buffer;
+ if (programs)
+ delete[] programs;
+}
+
+//------------------------------------------------------------------------
+void ADelay::setProgram (VstInt32 program)
+{
+ ADelayProgram* ap = &programs[program];
+
+ curProgram = program;
+ setParameter (kDelay, ap->fDelay);
+ setParameter (kFeedBack, ap->fFeedBack);
+ setParameter (kOut, ap->fOut);
+}
+
+//------------------------------------------------------------------------
+void ADelay::setDelay (float fdelay)
+{
+ fDelay = fdelay;
+ programs[curProgram].fDelay = fdelay;
+ cursor = 0;
+ delay = (long)(fdelay * (float)(size - 1));
+}
+
+//------------------------------------------------------------------------
+void ADelay::setProgramName (char *name)
+{
+ strcpy (programs[curProgram].name, name);
+}
+
+//------------------------------------------------------------------------
+void ADelay::getProgramName (char *name)
+{
+ if (!strcmp (programs[curProgram].name, "Init"))
+ sprintf (name, "%s %d", programs[curProgram].name, curProgram + 1);
+ else
+ strcpy (name, programs[curProgram].name);
+}
+
+//-----------------------------------------------------------------------------------------
+bool ADelay::getProgramNameIndexed (VstInt32 category, VstInt32 index, char* text)
+{
+ if (index < kNumPrograms)
+ {
+ strcpy (text, programs[index].name);
+ return true;
+ }
+ return false;
+}
+
+//------------------------------------------------------------------------
+void ADelay::resume ()
+{
+ memset (buffer, 0, size * sizeof (float));
+ AudioEffectX::resume ();
+}
+
+//------------------------------------------------------------------------
+void ADelay::setParameter (VstInt32 index, float value)
+{
+ ADelayProgram* ap = &programs[curProgram];
+
+ switch (index)
+ {
+ case kDelay : setDelay (value); break;
+ case kFeedBack : fFeedBack = ap->fFeedBack = value; break;
+ case kOut : fOut = ap->fOut = value; break;
+ }
+}
+
+//------------------------------------------------------------------------
+float ADelay::getParameter (VstInt32 index)
+{
+ float v = 0;
+
+ switch (index)
+ {
+ case kDelay : v = fDelay; break;
+ case kFeedBack : v = fFeedBack; break;
+ case kOut : v = fOut; break;
+ }
+ return v;
+}
+
+//------------------------------------------------------------------------
+void ADelay::getParameterName (VstInt32 index, char *label)
+{
+ switch (index)
+ {
+ case kDelay : strcpy (label, "Delay"); break;
+ case kFeedBack : strcpy (label, "FeedBack"); break;
+ case kOut : strcpy (label, "Volume"); break;
+ }
+}
+
+//------------------------------------------------------------------------
+void ADelay::getParameterDisplay (VstInt32 index, char *text)
+{
+ switch (index)
+ {
+ case kDelay : int2string (delay, text, kVstMaxParamStrLen); break;
+ case kFeedBack : float2string (fFeedBack, text, kVstMaxParamStrLen); break;
+ case kOut : dB2string (fOut, text, kVstMaxParamStrLen); break;
+ }
+}
+
+//------------------------------------------------------------------------
+void ADelay::getParameterLabel (VstInt32 index, char *label)
+{
+ switch (index)
+ {
+ case kDelay : strcpy (label, "samples"); break;
+ case kFeedBack : strcpy (label, "amount"); break;
+ case kOut : strcpy (label, "dB"); break;
+ }
+}
+
+//------------------------------------------------------------------------
+bool ADelay::getEffectName (char* name)
+{
+ strcpy (name, "Delay");
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool ADelay::getProductString (char* text)
+{
+ strcpy (text, "Delay");
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool ADelay::getVendorString (char* text)
+{
+ strcpy (text, "Steinberg Media Technologies");
+ return true;
+}
+
+//---------------------------------------------------------------------------
+void ADelay::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
+{
+ float* in = inputs[0];
+ float* out1 = outputs[0];
+ float* out2 = outputs[1];
+
+ while (--sampleFrames >= 0)
+ {
+ float x = *in++;
+ float y = buffer[cursor];
+ buffer[cursor++] = x + y * fFeedBack;
+ if (cursor >= delay)
+ cursor = 0;
+ *out1++ = y;
+ if (out2)
+ *out2++ = y;
+ }
+}
diff --git a/public.sdk/samples/vst2.x/adelay/adelay.h b/public.sdk/samples/vst2.x/adelay/adelay.h
new file mode 100644
index 0000000..1b21c96
--- /dev/null
+++ b/public.sdk/samples/vst2.x/adelay/adelay.h
@@ -0,0 +1,93 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : adelay.h
+// Created by : Steinberg Media Technologies
+// Description : Simple Delay plugin (Mono->Stereo)
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __adelay__
+#define __adelay__
+
+#include "public.sdk/source/vst2.x/audioeffectx.h"
+
+enum
+{
+ // Global
+ kNumPrograms = 16,
+
+ // Parameters Tags
+ kDelay = 0,
+ kFeedBack,
+ kOut,
+
+ kNumParams
+};
+
+class ADelay;
+
+//------------------------------------------------------------------------
+class ADelayProgram
+{
+friend class ADelay;
+public:
+ ADelayProgram ();
+ ~ADelayProgram () {}
+
+private:
+ float fDelay;
+ float fFeedBack;
+ float fOut;
+ char name[24];
+};
+
+//------------------------------------------------------------------------
+class ADelay : public AudioEffectX
+{
+public:
+ ADelay (audioMasterCallback audioMaster);
+ ~ADelay ();
+
+ //---from AudioEffect-----------------------
+ virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
+
+ virtual void setProgram (VstInt32 program);
+ virtual void setProgramName (char* name);
+ virtual void getProgramName (char* name);
+ virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char* text);
+
+ virtual void setParameter (VstInt32 index, float value);
+ virtual float getParameter (VstInt32 index);
+ virtual void getParameterLabel (VstInt32 index, char* label);
+ virtual void getParameterDisplay (VstInt32 index, char* text);
+ virtual void getParameterName (VstInt32 index, char* text);
+
+ virtual void resume ();
+
+ virtual bool getEffectName (char* name);
+ virtual bool getVendorString (char* text);
+ virtual bool getProductString (char* text);
+ virtual VstInt32 getVendorVersion () { return 1000; }
+
+ virtual VstPlugCategory getPlugCategory () { return kPlugCategEffect; }
+
+protected:
+ void setDelay (float delay);
+
+ ADelayProgram* programs;
+
+ float* buffer;
+ float fDelay;
+ float fFeedBack;
+ float fOut;
+
+ long delay;
+ long size;
+ long cursor;
+};
+
+#endif
diff --git a/public.sdk/samples/vst2.x/adelay/adelaymain.cpp b/public.sdk/samples/vst2.x/adelay/adelaymain.cpp
new file mode 100644
index 0000000..ea9895e
--- /dev/null
+++ b/public.sdk/samples/vst2.x/adelay/adelaymain.cpp
@@ -0,0 +1,22 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : adelaymain.cpp
+// Created by : Steinberg Media Technologies
+// Description : Simple Delay plugin (Mono->Stereo)
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __adelay__
+#include "adelay.h"
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
+{
+ return new ADelay (audioMaster);
+}
+
diff --git a/public.sdk/samples/vst2.x/adelay/editor/resources/bmp00128.bmp b/public.sdk/samples/vst2.x/adelay/editor/resources/bmp00128.bmp
new file mode 100644
index 0000000..1e3b523
Binary files /dev/null and b/public.sdk/samples/vst2.x/adelay/editor/resources/bmp00128.bmp differ
diff --git a/public.sdk/samples/vst2.x/adelay/editor/resources/bmp00129.bmp b/public.sdk/samples/vst2.x/adelay/editor/resources/bmp00129.bmp
new file mode 100644
index 0000000..275e4aa
Binary files /dev/null and b/public.sdk/samples/vst2.x/adelay/editor/resources/bmp00129.bmp differ
diff --git a/public.sdk/samples/vst2.x/adelay/editor/resources/bmp00130.bmp b/public.sdk/samples/vst2.x/adelay/editor/resources/bmp00130.bmp
new file mode 100644
index 0000000..e272640
Binary files /dev/null and b/public.sdk/samples/vst2.x/adelay/editor/resources/bmp00130.bmp differ
diff --git a/public.sdk/samples/vst2.x/adelay/editor/resources/surrounddelay.rc b/public.sdk/samples/vst2.x/adelay/editor/resources/surrounddelay.rc
new file mode 100644
index 0000000..52ef47d
--- /dev/null
+++ b/public.sdk/samples/vst2.x/adelay/editor/resources/surrounddelay.rc
@@ -0,0 +1,10 @@
+#define APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+128 BITMAP DISCARDABLE "bmp00128.bmp"
+129 BITMAP DISCARDABLE "bmp00129.bmp"
+130 BITMAP DISCARDABLE "bmp00130.bmp"
diff --git a/public.sdk/samples/vst2.x/adelay/editor/sdeditor.cpp b/public.sdk/samples/vst2.x/adelay/editor/sdeditor.cpp
new file mode 100644
index 0000000..ac5ebfc
--- /dev/null
+++ b/public.sdk/samples/vst2.x/adelay/editor/sdeditor.cpp
@@ -0,0 +1,235 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:28 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : sdeditor.cpp
+// Created by : Steinberg Media Technologies
+// Description : Simple Surround Delay plugin with Editor using VSTGUI
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __sdeditor__
+#include "sdeditor.h"
+#endif
+
+#ifndef __adelay__
+#include "../adelay.h"
+#endif
+
+#include
+
+//-----------------------------------------------------------------------------
+// resource id's
+enum {
+ // bitmaps
+ kBackgroundId = 128,
+ kFaderBodyId,
+ kFaderHandleId,
+
+ // positions
+ kFaderX = 18,
+ kFaderY = 10,
+
+ kFaderInc = 18,
+
+ kDisplayX = 10,
+ kDisplayY = 184,
+ kDisplayXWidth = 30,
+ kDisplayHeight = 14
+};
+
+//-----------------------------------------------------------------------------
+// prototype string convert float -> percent
+void percentStringConvert (float value, char* string);
+void percentStringConvert (float value, char* string)
+{
+ sprintf (string, "%d%%", (int)(100 * value + 0.5f));
+}
+
+
+//-----------------------------------------------------------------------------
+// SDEditor class implementation
+//-----------------------------------------------------------------------------
+SDEditor::SDEditor (AudioEffect *effect)
+ : AEffGUIEditor (effect)
+{
+ delayFader = 0;
+ feedbackFader = 0;
+ volumeFader = 0;
+ delayDisplay = 0;
+ feedbackDisplay = 0;
+ volumeDisplay = 0;
+
+ // load the background bitmap
+ // we don't need to load all bitmaps, this could be done when open is called
+ hBackground = new CBitmap (kBackgroundId);
+
+ // init the size of the plugin
+ rect.left = 0;
+ rect.top = 0;
+ rect.right = (short)hBackground->getWidth ();
+ rect.bottom = (short)hBackground->getHeight ();
+}
+
+//-----------------------------------------------------------------------------
+SDEditor::~SDEditor ()
+{
+ // free the background bitmap
+ if (hBackground)
+ hBackground->forget ();
+ hBackground = 0;
+}
+
+//-----------------------------------------------------------------------------
+bool SDEditor::open (void *ptr)
+{
+ // !!! always call this !!!
+ AEffGUIEditor::open (ptr);
+
+ //--load some bitmaps
+ CBitmap* hFaderBody = new CBitmap (kFaderBodyId);
+ CBitmap* hFaderHandle = new CBitmap (kFaderHandleId);
+
+ //--init background frame-----------------------------------------------
+ // We use a local CFrame object so that calls to setParameter won't call into objects which may not exist yet.
+ // If all GUI objects are created we assign our class member to this one. See bottom of this method.
+ CRect size (0, 0, hBackground->getWidth (), hBackground->getHeight ());
+ CFrame* lFrame = new CFrame (size, ptr, this);
+ lFrame->setBackground (hBackground);
+
+ //--init the faders------------------------------------------------
+ int minPos = kFaderY;
+ int maxPos = kFaderY + hFaderBody->getHeight () - hFaderHandle->getHeight () - 1;
+ CPoint point (0, 0);
+ CPoint offset (1, 0);
+
+ // Delay
+ size (kFaderX, kFaderY,
+ kFaderX + hFaderBody->getWidth (), kFaderY + hFaderBody->getHeight ());
+ delayFader = new CVerticalSlider (size, this, kDelay, minPos, maxPos, hFaderHandle, hFaderBody, point);
+ delayFader->setOffsetHandle (offset);
+ delayFader->setValue (effect->getParameter (kDelay));
+ lFrame->addView (delayFader);
+
+ // FeedBack
+ size.offset (kFaderInc + hFaderBody->getWidth (), 0);
+ feedbackFader = new CVerticalSlider (size, this, kFeedBack, minPos, maxPos, hFaderHandle, hFaderBody, point);
+ feedbackFader->setOffsetHandle (offset);
+ feedbackFader->setValue (effect->getParameter (kFeedBack));
+ lFrame->addView (feedbackFader);
+
+ // Volume
+ size.offset (kFaderInc + hFaderBody->getWidth (), 0);
+ volumeFader = new CVerticalSlider (size, this, kOut, minPos, maxPos, hFaderHandle, hFaderBody, point);
+ volumeFader->setOffsetHandle (offset);
+ volumeFader->setValue (effect->getParameter (kOut));
+ volumeFader->setDefaultValue (0.75f);
+ lFrame->addView (volumeFader);
+
+ //--init the display------------------------------------------------
+ // Delay
+ size (kDisplayX, kDisplayY,
+ kDisplayX + kDisplayXWidth, kDisplayY + kDisplayHeight);
+ delayDisplay = new CParamDisplay (size, 0, kCenterText);
+ delayDisplay->setFont (kNormalFontSmall);
+ delayDisplay->setFontColor (kWhiteCColor);
+ delayDisplay->setBackColor (kBlackCColor);
+ delayDisplay->setFrameColor (kBlueCColor);
+ delayDisplay->setValue (effect->getParameter (kDelay));
+ lFrame->addView (delayDisplay);
+
+ // FeedBack
+ size.offset (kFaderInc + hFaderBody->getWidth (), 0);
+ feedbackDisplay = new CParamDisplay (size, 0, kCenterText);
+ feedbackDisplay->setFont (kNormalFontSmall);
+ feedbackDisplay->setFontColor (kWhiteCColor);
+ feedbackDisplay->setBackColor (kBlackCColor);
+ feedbackDisplay->setFrameColor (kBlueCColor);
+ feedbackDisplay->setValue (effect->getParameter (kFeedBack));
+ feedbackDisplay->setStringConvert (percentStringConvert);
+ lFrame->addView (feedbackDisplay);
+
+ // Volume
+ size.offset (kFaderInc + hFaderBody->getWidth (), 0);
+ volumeDisplay = new CParamDisplay (size, 0, kCenterText);
+ volumeDisplay->setFont (kNormalFontSmall);
+ volumeDisplay->setFontColor (kWhiteCColor);
+ volumeDisplay->setBackColor (kBlackCColor);
+ volumeDisplay->setFrameColor (kBlueCColor);
+ volumeDisplay->setValue (effect->getParameter (kOut));
+ volumeDisplay->setStringConvert (percentStringConvert);
+ lFrame->addView (volumeDisplay);
+
+
+ // Note : in the constructor of a CBitmap, the number of references is set to 1.
+ // Then, each time the bitmap is used (for hinstance in a vertical slider), this
+ // number is incremented.
+ // As a consequence, everything happens as if the constructor by itself was adding
+ // a reference. That's why we need til here a call to forget ().
+ // You mustn't call delete here directly, because the bitmap is used by some CControls...
+ // These "rules" apply to the other VSTGUI objects too.
+ hFaderBody->forget ();
+ hFaderHandle->forget ();
+
+ frame = lFrame;
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+void SDEditor::close ()
+{
+ delete frame;
+ frame = 0;
+}
+
+//-----------------------------------------------------------------------------
+void SDEditor::setParameter (VstInt32 index, float value)
+{
+ if (frame == 0)
+ return;
+
+ // called from ADelayEdit
+ switch (index)
+ {
+ case kDelay:
+ if (delayFader)
+ delayFader->setValue (effect->getParameter (index));
+ if (delayDisplay)
+ delayDisplay->setValue (effect->getParameter (index));
+ break;
+
+ case kFeedBack:
+ if (feedbackFader)
+ feedbackFader->setValue (effect->getParameter (index));
+ if (feedbackDisplay)
+ feedbackDisplay->setValue (effect->getParameter (index));
+ break;
+
+ case kOut:
+ if (volumeFader)
+ volumeFader->setValue (effect->getParameter (index));
+ if (volumeDisplay)
+ volumeDisplay->setValue (effect->getParameter (index));
+ break;
+ }
+}
+
+//-----------------------------------------------------------------------------
+void SDEditor::valueChanged (CDrawContext* context, CControl* control)
+{
+ long tag = control->getTag ();
+ switch (tag)
+ {
+ case kDelay:
+ case kFeedBack:
+ case kOut:
+ effect->setParameterAutomated (tag, control->getValue ());
+ control->setDirty ();
+ break;
+ }
+}
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
diff --git a/public.sdk/samples/vst2.x/adelay/editor/sdeditor.h b/public.sdk/samples/vst2.x/adelay/editor/sdeditor.h
new file mode 100644
index 0000000..abe427a
--- /dev/null
+++ b/public.sdk/samples/vst2.x/adelay/editor/sdeditor.h
@@ -0,0 +1,51 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:28 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : sdeditor.h
+// Created by : Steinberg Media Technologies
+// Description : Simple Surround Delay plugin with Editor using VSTGUI
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __sdeditor__
+#define __sdeditor__
+
+
+// include VSTGUI
+#ifndef __vstgui__
+#include "vstgui.sf/vstgui/vstgui.h"
+#endif
+
+
+//-----------------------------------------------------------------------------
+class SDEditor : public AEffGUIEditor, public CControlListener
+{
+public:
+ SDEditor (AudioEffect* effect);
+ virtual ~SDEditor ();
+
+public:
+ virtual bool open (void* ptr);
+ virtual void close ();
+
+ virtual void setParameter (VstInt32 index, float value);
+ virtual void valueChanged (CDrawContext* context, CControl* control);
+
+private:
+ // Controls
+ CVerticalSlider* delayFader;
+ CVerticalSlider* feedbackFader;
+ CVerticalSlider* volumeFader;
+
+ CParamDisplay* delayDisplay;
+ CParamDisplay* feedbackDisplay;
+ CParamDisplay* volumeDisplay;
+
+ // Bitmap
+ CBitmap* hBackground;
+};
+
+#endif
diff --git a/public.sdk/samples/vst2.x/adelay/surrounddelay.cpp b/public.sdk/samples/vst2.x/adelay/surrounddelay.cpp
new file mode 100644
index 0000000..d8c5a99
--- /dev/null
+++ b/public.sdk/samples/vst2.x/adelay/surrounddelay.cpp
@@ -0,0 +1,172 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : surrounddelay.cpp
+// Created by : Steinberg Media Technologies
+// Description : Simple Surround Delay plugin with Editor using VSTGUI
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __surrounddelay__
+#include "surrounddelay.h"
+#endif
+
+#ifndef __sdeditor__
+#include "editor/sdeditor.h"
+#endif
+
+#include
+#include
+
+//-------------------------------------------------------------------------------------------------------
+AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
+{
+ return new SurroundDelay (audioMaster);
+}
+
+//-----------------------------------------------------------------------------
+SurroundDelay::SurroundDelay (audioMasterCallback audioMaster)
+: ADelay (audioMaster)
+, plugInput (0)
+, plugOutput (0)
+{
+
+ // The first buffer is allocated in ADelay's constructor
+ for (int i = 1; i < MAX_CHANNELS; i++)
+ {
+ sBuffers[i] = new float[size];
+ }
+
+ setNumInputs (MAX_CHANNELS);
+ setNumOutputs (MAX_CHANNELS);
+
+ // We initialize the arrangements to default values.
+ // Nevertheless, the host should modify them via
+ // appropriate calls to setSpeakerArrangement.
+ allocateArrangement (&plugInput, MAX_CHANNELS);
+ plugInput->type = kSpeakerArr51;
+
+ allocateArrangement (&plugOutput, MAX_CHANNELS);
+ plugOutput->type = kSpeakerArr51;
+
+ setUniqueID ('SDlE'); // this should be unique, use the Steinberg web page for plugin Id registration
+
+ // create the editor
+ editor = new SDEditor (this);
+
+ resume ();
+}
+
+//-----------------------------------------------------------------------------
+SurroundDelay::~SurroundDelay ()
+{
+ sBuffers[0] = 0;
+ // We let ~ADelay delete "buffer"...
+ for (int i = 1; i < MAX_CHANNELS; i++)
+ {
+ if (sBuffers[i])
+ {
+ delete[] sBuffers[i];
+ }
+ sBuffers[i] = 0;
+ }
+
+ deallocateArrangement (&plugInput);
+ deallocateArrangement (&plugOutput);
+}
+
+//------------------------------------------------------------------------
+void SurroundDelay::resume ()
+{
+ memset (buffer, 0, size * sizeof (float));
+ sBuffers[0] = buffer;
+
+ for (int i = 1; i < MAX_CHANNELS; i++)
+ {
+ memset (sBuffers[i], 0, size * sizeof (float));
+ }
+}
+
+//------------------------------------------------------------------------
+bool SurroundDelay::getSpeakerArrangement (VstSpeakerArrangement** pluginInput, VstSpeakerArrangement** pluginOutput)
+{
+ *pluginInput = plugInput;
+ *pluginOutput = plugOutput;
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool SurroundDelay::setSpeakerArrangement (VstSpeakerArrangement* pluginInput,
+ VstSpeakerArrangement* pluginOutput)
+{
+ if (!pluginOutput || !pluginInput)
+ return false;
+
+ bool result = true;
+
+ // This plug-in can act on any speaker arrangement,
+ // provided that there are the same number of inputs/outputs.
+ if (pluginInput->numChannels > MAX_CHANNELS)
+ {
+ // This plug-in can't have so many channels. So we answer
+ // false, and we set the input arrangement with the maximum
+ // number of channels possible
+ result = false;
+ allocateArrangement (&plugInput, MAX_CHANNELS);
+ plugInput->type = kSpeakerArr51;
+ }
+ else
+ {
+ matchArrangement (&plugInput, pluginInput);
+ }
+
+ if (pluginOutput->numChannels != plugInput->numChannels)
+ {
+ // This plug-in only deals with symetric IO configurations...
+ result = false;
+ matchArrangement (&plugOutput, plugInput);
+ }
+ else
+ {
+ matchArrangement (&plugOutput, pluginOutput);
+ }
+
+ return result;
+}
+
+//------------------------------------------------------------------------
+void SurroundDelay::processReplacing (float** inputs, float** outputs, VstInt32 sampleframes)
+{
+ float* inputs2[1];
+ float* outputs2[2];
+
+ outputs2[1] = NULL;
+
+ long cursorTemp = cursor;
+
+ for (int i = 0; i < plugInput->numChannels; i++)
+ {
+ cursor = cursorTemp;
+
+ buffer = sBuffers[i];
+
+ inputs2[0] = inputs[i];
+ outputs2[0] = outputs[i];
+
+ ADelay::processReplacing (inputs2, outputs2, sampleframes);
+ }
+
+ buffer = sBuffers[0];
+}
+
+//-----------------------------------------------------------------------------
+void SurroundDelay::setParameter (VstInt32 index, float value)
+{
+ ADelay::setParameter (index, value);
+
+ if (editor)
+ ((AEffGUIEditor*)editor)->setParameter (index, value);
+}
diff --git a/public.sdk/samples/vst2.x/adelay/surrounddelay.h b/public.sdk/samples/vst2.x/adelay/surrounddelay.h
new file mode 100644
index 0000000..f8412b9
--- /dev/null
+++ b/public.sdk/samples/vst2.x/adelay/surrounddelay.h
@@ -0,0 +1,54 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : surrounddelay.h
+// Created by : Steinberg Media Technologies
+// Description : Simple Surround Delay plugin with Editor using VSTGUI
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __surrounddelay__
+#define __surrounddelay__
+
+#ifndef __adelay__
+#include "adelay.h"
+#endif
+
+#define MAX_CHANNELS 6 // maximun number of channel
+
+//------------------------------------------------------------------------
+// SurroundDelay declaration
+//------------------------------------------------------------------------
+class SurroundDelay : public ADelay
+{
+public:
+ SurroundDelay (audioMasterCallback audioMaster);
+ ~SurroundDelay ();
+
+ virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleframes);
+
+ void setParameter (VstInt32 index, float value);
+
+ // functions VST version 2
+ virtual bool getVendorString (char* text) { if (text) strcpy (text, "Steinberg"); return true; }
+ virtual bool getProductString (char* text) { if (text) strcpy (text, "SDelay"); return true; }
+ virtual VstInt32 getVendorVersion () { return 1000; }
+
+ virtual VstPlugCategory getPlugCategory () { return kPlugSurroundFx; }
+
+ virtual bool getSpeakerArrangement (VstSpeakerArrangement** pluginInput, VstSpeakerArrangement** pluginOutput);
+ virtual bool setSpeakerArrangement (VstSpeakerArrangement* pluginInput, VstSpeakerArrangement* pluginOutput);
+
+ virtual void resume ();
+
+private:
+ VstSpeakerArrangement* plugInput;
+ VstSpeakerArrangement* plugOutput;
+
+ float* sBuffers[MAX_CHANNELS];
+};
+
+#endif
diff --git a/public.sdk/samples/vst2.x/adelay/win/adelay.vcproj b/public.sdk/samples/vst2.x/adelay/win/adelay.vcproj
new file mode 100644
index 0000000..3391506
--- /dev/null
+++ b/public.sdk/samples/vst2.x/adelay/win/adelay.vcproj
@@ -0,0 +1,400 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public.sdk/samples/vst2.x/adelay/win/surrounddelay.vcproj b/public.sdk/samples/vst2.x/adelay/win/surrounddelay.vcproj
new file mode 100644
index 0000000..194bc12
--- /dev/null
+++ b/public.sdk/samples/vst2.x/adelay/win/surrounddelay.vcproj
@@ -0,0 +1,444 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public.sdk/samples/vst2.x/again/source/again.cpp b/public.sdk/samples/vst2.x/again/source/again.cpp
new file mode 100644
index 0000000..9d0af10
--- /dev/null
+++ b/public.sdk/samples/vst2.x/again/source/again.cpp
@@ -0,0 +1,139 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : again.cpp
+// Created by : Steinberg Media Technologies
+// Description : Stereo plugin which applies Gain [-oo, 0dB]
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#include "again.h"
+
+//-------------------------------------------------------------------------------------------------------
+AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
+{
+ return new AGain (audioMaster);
+}
+
+//-------------------------------------------------------------------------------------------------------
+AGain::AGain (audioMasterCallback audioMaster)
+: AudioEffectX (audioMaster, 1, 1) // 1 program, 1 parameter only
+{
+ setNumInputs (2); // stereo in
+ setNumOutputs (2); // stereo out
+ setUniqueID ('Gain'); // identify
+ canProcessReplacing (); // supports replacing output
+ canDoubleReplacing (); // supports double precision processing
+
+ fGain = 1.f; // default to 0 dB
+ vst_strncpy (programName, "Default", kVstMaxProgNameLen); // default program name
+}
+
+//-------------------------------------------------------------------------------------------------------
+AGain::~AGain ()
+{
+ // nothing to do here
+}
+
+//-------------------------------------------------------------------------------------------------------
+void AGain::setProgramName (char* name)
+{
+ vst_strncpy (programName, name, kVstMaxProgNameLen);
+}
+
+//-----------------------------------------------------------------------------------------
+void AGain::getProgramName (char* name)
+{
+ vst_strncpy (name, programName, kVstMaxProgNameLen);
+}
+
+//-----------------------------------------------------------------------------------------
+void AGain::setParameter (VstInt32 index, float value)
+{
+ fGain = value;
+}
+
+//-----------------------------------------------------------------------------------------
+float AGain::getParameter (VstInt32 index)
+{
+ return fGain;
+}
+
+//-----------------------------------------------------------------------------------------
+void AGain::getParameterName (VstInt32 index, char* label)
+{
+ vst_strncpy (label, "Gain", kVstMaxParamStrLen);
+}
+
+//-----------------------------------------------------------------------------------------
+void AGain::getParameterDisplay (VstInt32 index, char* text)
+{
+ dB2string (fGain, text, kVstMaxParamStrLen);
+}
+
+//-----------------------------------------------------------------------------------------
+void AGain::getParameterLabel (VstInt32 index, char* label)
+{
+ vst_strncpy (label, "dB", kVstMaxParamStrLen);
+}
+
+//------------------------------------------------------------------------
+bool AGain::getEffectName (char* name)
+{
+ vst_strncpy (name, "Gain", kVstMaxEffectNameLen);
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool AGain::getProductString (char* text)
+{
+ vst_strncpy (text, "Gain", kVstMaxProductStrLen);
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool AGain::getVendorString (char* text)
+{
+ vst_strncpy (text, "Steinberg Media Technologies", kVstMaxVendorStrLen);
+ return true;
+}
+
+//-----------------------------------------------------------------------------------------
+VstInt32 AGain::getVendorVersion ()
+{
+ return 1000;
+}
+
+//-----------------------------------------------------------------------------------------
+void AGain::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
+{
+ float* in1 = inputs[0];
+ float* in2 = inputs[1];
+ float* out1 = outputs[0];
+ float* out2 = outputs[1];
+
+ while (--sampleFrames >= 0)
+ {
+ (*out1++) = (*in1++) * fGain;
+ (*out2++) = (*in2++) * fGain;
+ }
+}
+
+//-----------------------------------------------------------------------------------------
+void AGain::processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames)
+{
+ double* in1 = inputs[0];
+ double* in2 = inputs[1];
+ double* out1 = outputs[0];
+ double* out2 = outputs[1];
+ double dGain = fGain;
+
+ while (--sampleFrames >= 0)
+ {
+ (*out1++) = (*in1++) * dGain;
+ (*out2++) = (*in2++) * dGain;
+ }
+}
diff --git a/public.sdk/samples/vst2.x/again/source/again.h b/public.sdk/samples/vst2.x/again/source/again.h
new file mode 100644
index 0000000..f241dfa
--- /dev/null
+++ b/public.sdk/samples/vst2.x/again/source/again.h
@@ -0,0 +1,50 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : again.h
+// Created by : Steinberg Media Technologies
+// Description : Stereo plugin which applies Gain [-oo, 0dB]
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __again__
+#define __again__
+
+#include "public.sdk/source/vst2.x/audioeffectx.h"
+
+//-------------------------------------------------------------------------------------------------------
+class AGain : public AudioEffectX
+{
+public:
+ AGain (audioMasterCallback audioMaster);
+ ~AGain ();
+
+ // Processing
+ virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
+ virtual void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames);
+
+ // Program
+ virtual void setProgramName (char* name);
+ virtual void getProgramName (char* name);
+
+ // Parameters
+ virtual void setParameter (VstInt32 index, float value);
+ virtual float getParameter (VstInt32 index);
+ virtual void getParameterLabel (VstInt32 index, char* label);
+ virtual void getParameterDisplay (VstInt32 index, char* text);
+ virtual void getParameterName (VstInt32 index, char* text);
+
+ virtual bool getEffectName (char* name);
+ virtual bool getVendorString (char* text);
+ virtual bool getProductString (char* text);
+ virtual VstInt32 getVendorVersion ();
+
+protected:
+ float fGain;
+ char programName[kVstMaxProgNameLen + 1];
+};
+
+#endif
diff --git a/public.sdk/samples/vst2.x/again/win/again.vcproj b/public.sdk/samples/vst2.x/again/win/again.vcproj
new file mode 100644
index 0000000..5140d09
--- /dev/null
+++ b/public.sdk/samples/vst2.x/again/win/again.vcproj
@@ -0,0 +1,396 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public.sdk/samples/vst2.x/mac/minihost-Info.plist b/public.sdk/samples/vst2.x/mac/minihost-Info.plist
new file mode 100644
index 0000000..92ddf0f
--- /dev/null
+++ b/public.sdk/samples/vst2.x/mac/minihost-Info.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIdentifier
+ com.yourcompany.minihost
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ APPL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+
+
diff --git a/public.sdk/samples/vst2.x/mac/vst 2.4 examples.xcodeproj/project.pbxproj b/public.sdk/samples/vst2.x/mac/vst 2.4 examples.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..7c7ac54
--- /dev/null
+++ b/public.sdk/samples/vst2.x/mac/vst 2.4 examples.xcodeproj/project.pbxproj
@@ -0,0 +1,924 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ F4476C1A093DDA87008998C4 /* all */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = F4476C2A093DDACE008998C4 /* Build configuration list for PBXAggregateTarget "all" */;
+ buildPhases = (
+ );
+ buildSettings = {
+ PRODUCT_NAME = all;
+ };
+ dependencies = (
+ F4EF42E90945AD2C001938AB /* PBXTargetDependency */,
+ F4476C1C093DDA8D008998C4 /* PBXTargetDependency */,
+ F4476C1E093DDA96008998C4 /* PBXTargetDependency */,
+ F4476C20093DDA98008998C4 /* PBXTargetDependency */,
+ F4476C22093DDA99008998C4 /* PBXTargetDependency */,
+ );
+ name = all;
+ productName = all;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+ F447696D093DAE42008998C4 /* audioeffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C50929F9C100DDED7A /* audioeffect.cpp */; };
+ F447696E093DAE42008998C4 /* audioeffectx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C70929F9C100DDED7A /* audioeffectx.cpp */; };
+ F447696F093DAE42008998C4 /* vstplugmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C90929F9C100DDED7A /* vstplugmain.cpp */; };
+ F4476991093DAEA1008998C4 /* adelay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F447698F093DAEA1008998C4 /* adelay.cpp */; };
+ F4476A08093DCAF9008998C4 /* audioeffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C50929F9C100DDED7A /* audioeffect.cpp */; };
+ F4476A09093DCAF9008998C4 /* audioeffectx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C70929F9C100DDED7A /* audioeffectx.cpp */; };
+ F4476A0A093DCAF9008998C4 /* vstplugmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C90929F9C100DDED7A /* vstplugmain.cpp */; };
+ F4476A0B093DCAF9008998C4 /* adelay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F447698F093DAEA1008998C4 /* adelay.cpp */; };
+ F4476A18093DCB4D008998C4 /* surrounddelay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4476A16093DCB4D008998C4 /* surrounddelay.cpp */; };
+ F4476A76093DCD05008998C4 /* adelaymain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4476A75093DCD05008998C4 /* adelaymain.cpp */; };
+ F4476A9E093DCF68008998C4 /* sdeditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4476A9C093DCF68008998C4 /* sdeditor.cpp */; };
+ F4476AAF093DD4FB008998C4 /* aeffguieditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4476AAC093DD4FB008998C4 /* aeffguieditor.cpp */; };
+ F4476AB0093DD4FB008998C4 /* vstcontrols.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4476AAD093DD4FB008998C4 /* vstcontrols.cpp */; };
+ F4476AB1093DD4FB008998C4 /* vstgui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4476AAE093DD4FB008998C4 /* vstgui.cpp */; };
+ F4476B73093DD662008998C4 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */; };
+ F4476B79093DD675008998C4 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4476B78093DD675008998C4 /* QuickTime.framework */; };
+ F4476B8E093DD81B008998C4 /* bmp00128.bmp in Resources */ = {isa = PBXBuildFile; fileRef = F4476B8B093DD81B008998C4 /* bmp00128.bmp */; };
+ F4476B8F093DD81B008998C4 /* bmp00129.bmp in Resources */ = {isa = PBXBuildFile; fileRef = F4476B8C093DD81B008998C4 /* bmp00129.bmp */; };
+ F4476B90093DD81B008998C4 /* bmp00130.bmp in Resources */ = {isa = PBXBuildFile; fileRef = F4476B8D093DD81B008998C4 /* bmp00130.bmp */; };
+ F4EF438E0945D9CD001938AB /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */; };
+ F4FF51C10929F9A600DDED7A /* again.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51BF0929F9A600DDED7A /* again.cpp */; };
+ F4FF51CA0929F9C100DDED7A /* audioeffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C50929F9C100DDED7A /* audioeffect.cpp */; };
+ F4FF51CB0929F9C100DDED7A /* audioeffectx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C70929F9C100DDED7A /* audioeffectx.cpp */; };
+ F4FF51CC0929F9C100DDED7A /* vstplugmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C90929F9C100DDED7A /* vstplugmain.cpp */; };
+ F4FF52270929FC2D00DDED7A /* vstxsynth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF521A0929FBDC00DDED7A /* vstxsynth.cpp */; };
+ F4FF52280929FC2E00DDED7A /* vstxsynthproc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF521C0929FBDC00DDED7A /* vstxsynthproc.cpp */; };
+ F4FF52290929FC3000DDED7A /* audioeffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C50929F9C100DDED7A /* audioeffect.cpp */; };
+ F4FF522A0929FC3000DDED7A /* audioeffectx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C70929F9C100DDED7A /* audioeffectx.cpp */; };
+ F4FF522B0929FC3100DDED7A /* vstplugmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF51C90929F9C100DDED7A /* vstplugmain.cpp */; };
+ F4FF52FC092A314700DDED7A /* minihost.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF52FA092A314700DDED7A /* minihost.cpp */; };
+ F4FF533D092A371400DDED7A /* minieditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF52F9092A314700DDED7A /* minieditor.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXBuildStyle section */
+ 4F9091AC011F3BD104CA0E50 /* Debug */ = {
+ isa = PBXBuildStyle;
+ buildSettings = {
+ };
+ name = Debug;
+ };
+ 4F9091AD011F3BD104CA0E50 /* Release */ = {
+ isa = PBXBuildStyle;
+ buildSettings = {
+ };
+ name = Release;
+ };
+/* End PBXBuildStyle section */
+
+/* Begin PBXContainerItemProxy section */
+ F4476C1B093DDA8D008998C4 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 089C1669FE841209C02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 8D01CCC60486CAD60068D4B7;
+ remoteInfo = again;
+ };
+ F4476C1D093DDA96008998C4 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 089C1669FE841209C02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F4FF52210929FBF500DDED7A;
+ remoteInfo = vstxsynth;
+ };
+ F4476C1F093DDA98008998C4 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 089C1669FE841209C02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F4476969093DAE42008998C4;
+ remoteInfo = adelay;
+ };
+ F4476C21093DDA99008998C4 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 089C1669FE841209C02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F4476A05093DCAF9008998C4;
+ remoteInfo = surrounddelay;
+ };
+ F4EF42E80945AD2C001938AB /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 089C1669FE841209C02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F4FF52F2092A312800DDED7A;
+ remoteInfo = minihost;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; };
+ 8D01CCD20486CAD60068D4B7 /* again.vst */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = again.vst; sourceTree = BUILT_PRODUCTS_DIR; };
+ F4476974093DAE42008998C4 /* adelay.vst */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = adelay.vst; sourceTree = BUILT_PRODUCTS_DIR; };
+ F447698F093DAEA1008998C4 /* adelay.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = adelay.cpp; path = ../adelay/adelay.cpp; sourceTree = SOURCE_ROOT; };
+ F4476990093DAEA1008998C4 /* adelay.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = adelay.h; path = ../adelay/adelay.h; sourceTree = SOURCE_ROOT; };
+ F4476A10093DCAF9008998C4 /* surrounddelay.vst */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = surrounddelay.vst; sourceTree = BUILT_PRODUCTS_DIR; };
+ F4476A16093DCB4D008998C4 /* surrounddelay.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = surrounddelay.cpp; path = ../adelay/surrounddelay.cpp; sourceTree = SOURCE_ROOT; };
+ F4476A17093DCB4D008998C4 /* surrounddelay.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = surrounddelay.h; path = ../adelay/surrounddelay.h; sourceTree = SOURCE_ROOT; };
+ F4476A75093DCD05008998C4 /* adelaymain.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = adelaymain.cpp; path = ../adelay/adelaymain.cpp; sourceTree = SOURCE_ROOT; };
+ F4476A9C093DCF68008998C4 /* sdeditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = sdeditor.cpp; path = ../adelay/editor/sdeditor.cpp; sourceTree = SOURCE_ROOT; };
+ F4476A9D093DCF68008998C4 /* sdeditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sdeditor.h; path = ../adelay/editor/sdeditor.h; sourceTree = SOURCE_ROOT; };
+ F4476AAC093DD4FB008998C4 /* aeffguieditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = aeffguieditor.cpp; path = ../../../../vstgui.sf/vstgui/aeffguieditor.cpp; sourceTree = SOURCE_ROOT; };
+ F4476AAD093DD4FB008998C4 /* vstcontrols.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vstcontrols.cpp; path = ../../../../vstgui.sf/vstgui/vstcontrols.cpp; sourceTree = SOURCE_ROOT; };
+ F4476AAE093DD4FB008998C4 /* vstgui.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vstgui.cpp; path = ../../../../vstgui.sf/vstgui/vstgui.cpp; sourceTree = SOURCE_ROOT; };
+ F4476B78093DD675008998C4 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; };
+ F4476B8B093DD81B008998C4 /* bmp00128.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp00128.bmp; path = ../adelay/editor/resources/bmp00128.bmp; sourceTree = SOURCE_ROOT; };
+ F4476B8C093DD81B008998C4 /* bmp00129.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp00129.bmp; path = ../adelay/editor/resources/bmp00129.bmp; sourceTree = SOURCE_ROOT; };
+ F4476B8D093DD81B008998C4 /* bmp00130.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp00130.bmp; path = ../adelay/editor/resources/bmp00130.bmp; sourceTree = SOURCE_ROOT; };
+ F4FF51BF0929F9A600DDED7A /* again.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = again.cpp; path = ../again/source/again.cpp; sourceTree = SOURCE_ROOT; };
+ F4FF51C00929F9A600DDED7A /* again.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = again.h; path = ../again/source/again.h; sourceTree = SOURCE_ROOT; };
+ F4FF51C40929F9C100DDED7A /* aeffeditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = aeffeditor.h; path = ../../../source/vst2.x/aeffeditor.h; sourceTree = SOURCE_ROOT; };
+ F4FF51C50929F9C100DDED7A /* audioeffect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = audioeffect.cpp; path = ../../../source/vst2.x/audioeffect.cpp; sourceTree = SOURCE_ROOT; };
+ F4FF51C60929F9C100DDED7A /* audioeffect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = audioeffect.h; path = ../../../source/vst2.x/audioeffect.h; sourceTree = SOURCE_ROOT; };
+ F4FF51C70929F9C100DDED7A /* audioeffectx.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = audioeffectx.cpp; path = ../../../source/vst2.x/audioeffectx.cpp; sourceTree = SOURCE_ROOT; };
+ F4FF51C80929F9C100DDED7A /* audioeffectx.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = audioeffectx.h; path = ../../../source/vst2.x/audioeffectx.h; sourceTree = SOURCE_ROOT; };
+ F4FF51C90929F9C100DDED7A /* vstplugmain.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vstplugmain.cpp; path = ../../../source/vst2.x/vstplugmain.cpp; sourceTree = SOURCE_ROOT; };
+ F4FF51CE0929F9D900DDED7A /* aeffect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = aeffect.h; path = ../../../../pluginterfaces/vst2.x/aeffect.h; sourceTree = SOURCE_ROOT; };
+ F4FF51CF0929F9D900DDED7A /* aeffectx.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = aeffectx.h; path = ../../../../pluginterfaces/vst2.x/aeffectx.h; sourceTree = SOURCE_ROOT; };
+ F4FF51D00929F9D900DDED7A /* vstfxstore.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = vstfxstore.h; path = ../../../../pluginterfaces/vst2.x/vstfxstore.h; sourceTree = SOURCE_ROOT; };
+ F4FF51E50929FB0400DDED7A /* vst2.4Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = vst2.4Info.plist; sourceTree = ""; };
+ F4FF52190929FBDC00DDED7A /* gmnames.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = gmnames.h; path = ../vstxsynth/source/gmnames.h; sourceTree = SOURCE_ROOT; };
+ F4FF521A0929FBDC00DDED7A /* vstxsynth.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vstxsynth.cpp; path = ../vstxsynth/source/vstxsynth.cpp; sourceTree = SOURCE_ROOT; };
+ F4FF521B0929FBDC00DDED7A /* vstxsynth.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = vstxsynth.h; path = ../vstxsynth/source/vstxsynth.h; sourceTree = SOURCE_ROOT; };
+ F4FF521C0929FBDC00DDED7A /* vstxsynthproc.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vstxsynthproc.cpp; path = ../vstxsynth/source/vstxsynthproc.cpp; sourceTree = SOURCE_ROOT; };
+ F4FF52220929FBF500DDED7A /* vstxsynth.vst */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = vstxsynth.vst; sourceTree = BUILT_PRODUCTS_DIR; };
+ F4FF52F3092A312800DDED7A /* minihost.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = minihost.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ F4FF52F5092A312800DDED7A /* minihost-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "minihost-Info.plist"; sourceTree = ""; };
+ F4FF52F9092A314700DDED7A /* minieditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = minieditor.cpp; path = ../minihost/source/minieditor.cpp; sourceTree = SOURCE_ROOT; };
+ F4FF52FA092A314700DDED7A /* minihost.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = minihost.cpp; path = ../minihost/source/minihost.cpp; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8D01CCCD0486CAD60068D4B7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4476970093DAE42008998C4 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4476A0C093DCAF9008998C4 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F4476B73093DD662008998C4 /* Carbon.framework in Frameworks */,
+ F4476B79093DD675008998C4 /* QuickTime.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4FF52200929FBF500DDED7A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4FF52F1092A312800DDED7A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F4EF438E0945D9CD001938AB /* Carbon.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 089C166AFE841209C02AAC07 /* vst 2.4 examples */ = {
+ isa = PBXGroup;
+ children = (
+ 08FB77ADFE841716C02AAC07 /* Source */,
+ 089C167CFE841241C02AAC07 /* Resources */,
+ 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
+ 19C28FB4FE9D528D11CA2CBB /* Products */,
+ F4FF52F5092A312800DDED7A /* minihost-Info.plist */,
+ );
+ name = "vst 2.4 examples";
+ sourceTree = "";
+ };
+ 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ F4476B78093DD675008998C4 /* QuickTime.framework */,
+ 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "";
+ };
+ 089C167CFE841241C02AAC07 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ F4FF51E50929FB0400DDED7A /* vst2.4Info.plist */,
+ F4476B8B093DD81B008998C4 /* bmp00128.bmp */,
+ F4476B8C093DD81B008998C4 /* bmp00129.bmp */,
+ F4476B8D093DD81B008998C4 /* bmp00130.bmp */,
+ );
+ name = Resources;
+ sourceTree = "";
+ };
+ 08FB77ADFE841716C02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ F4476968093DAE36008998C4 /* adelay */,
+ F4FF51C30929F9AA00DDED7A /* again */,
+ F4FF52FD092A314900DDED7A /* minihost */,
+ F4476A12093DCB1D008998C4 /* surrounddelay */,
+ F4FF51CD0929F9C400DDED7A /* vst sdk 2.4 */,
+ F4476AA3093DCFB0008998C4 /* vstgui */,
+ F4FF521D0929FBDF00DDED7A /* vstxsynth */,
+ );
+ name = Source;
+ sourceTree = "";
+ };
+ 19C28FB4FE9D528D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8D01CCD20486CAD60068D4B7 /* again.vst */,
+ F4FF52220929FBF500DDED7A /* vstxsynth.vst */,
+ F4FF52F3092A312800DDED7A /* minihost.app */,
+ F4476974093DAE42008998C4 /* adelay.vst */,
+ F4476A10093DCAF9008998C4 /* surrounddelay.vst */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ F4476968093DAE36008998C4 /* adelay */ = {
+ isa = PBXGroup;
+ children = (
+ F447698F093DAEA1008998C4 /* adelay.cpp */,
+ F4476990093DAEA1008998C4 /* adelay.h */,
+ F4476A75093DCD05008998C4 /* adelaymain.cpp */,
+ );
+ name = adelay;
+ sourceTree = "";
+ };
+ F4476A12093DCB1D008998C4 /* surrounddelay */ = {
+ isa = PBXGroup;
+ children = (
+ F4476B87093DD7C0008998C4 /* editor */,
+ F4476A16093DCB4D008998C4 /* surrounddelay.cpp */,
+ F4476A17093DCB4D008998C4 /* surrounddelay.h */,
+ );
+ name = surrounddelay;
+ sourceTree = "";
+ };
+ F4476AA3093DCFB0008998C4 /* vstgui */ = {
+ isa = PBXGroup;
+ children = (
+ F4476AAC093DD4FB008998C4 /* aeffguieditor.cpp */,
+ F4476AAD093DD4FB008998C4 /* vstcontrols.cpp */,
+ F4476AAE093DD4FB008998C4 /* vstgui.cpp */,
+ );
+ name = vstgui;
+ sourceTree = "";
+ };
+ F4476B87093DD7C0008998C4 /* editor */ = {
+ isa = PBXGroup;
+ children = (
+ F4476A9C093DCF68008998C4 /* sdeditor.cpp */,
+ F4476A9D093DCF68008998C4 /* sdeditor.h */,
+ );
+ name = editor;
+ sourceTree = "";
+ };
+ F4FF51C30929F9AA00DDED7A /* again */ = {
+ isa = PBXGroup;
+ children = (
+ F4FF51BF0929F9A600DDED7A /* again.cpp */,
+ F4FF51C00929F9A600DDED7A /* again.h */,
+ );
+ name = again;
+ sourceTree = "";
+ };
+ F4FF51CD0929F9C400DDED7A /* vst sdk 2.4 */ = {
+ isa = PBXGroup;
+ children = (
+ F4FF51CE0929F9D900DDED7A /* aeffect.h */,
+ F4FF51CF0929F9D900DDED7A /* aeffectx.h */,
+ F4FF51C40929F9C100DDED7A /* aeffeditor.h */,
+ F4FF51C50929F9C100DDED7A /* audioeffect.cpp */,
+ F4FF51C60929F9C100DDED7A /* audioeffect.h */,
+ F4FF51C70929F9C100DDED7A /* audioeffectx.cpp */,
+ F4FF51C80929F9C100DDED7A /* audioeffectx.h */,
+ F4FF51D00929F9D900DDED7A /* vstfxstore.h */,
+ F4FF51C90929F9C100DDED7A /* vstplugmain.cpp */,
+ );
+ name = "vst sdk 2.4";
+ sourceTree = "";
+ };
+ F4FF521D0929FBDF00DDED7A /* vstxsynth */ = {
+ isa = PBXGroup;
+ children = (
+ F4FF52190929FBDC00DDED7A /* gmnames.h */,
+ F4FF521A0929FBDC00DDED7A /* vstxsynth.cpp */,
+ F4FF521B0929FBDC00DDED7A /* vstxsynth.h */,
+ F4FF521C0929FBDC00DDED7A /* vstxsynthproc.cpp */,
+ );
+ name = vstxsynth;
+ sourceTree = "";
+ };
+ F4FF52FD092A314900DDED7A /* minihost */ = {
+ isa = PBXGroup;
+ children = (
+ F4FF52F9092A314700DDED7A /* minieditor.cpp */,
+ F4FF52FA092A314700DDED7A /* minihost.cpp */,
+ );
+ name = minihost;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8D01CCC60486CAD60068D4B7 /* again */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4FADC23308B4156C00ABE55E /* Build configuration list for PBXNativeTarget "again" */;
+ buildPhases = (
+ 8D01CCC90486CAD60068D4B7 /* Resources */,
+ 8D01CCCB0486CAD60068D4B7 /* Sources */,
+ 8D01CCCD0486CAD60068D4B7 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ };
+ dependencies = (
+ );
+ name = again;
+ productInstallPath = "$(HOME)/Library/Bundles";
+ productName = "vst 2.4 examples";
+ productReference = 8D01CCD20486CAD60068D4B7 /* again.vst */;
+ productType = "com.apple.product-type.bundle";
+ };
+ F4476969093DAE42008998C4 /* adelay */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F4476971093DAE42008998C4 /* Build configuration list for PBXNativeTarget "adelay" */;
+ buildPhases = (
+ F447696A093DAE42008998C4 /* Resources */,
+ F447696B093DAE42008998C4 /* Sources */,
+ F4476970093DAE42008998C4 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ };
+ dependencies = (
+ );
+ name = adelay;
+ productInstallPath = "$(HOME)/Library/Bundles";
+ productName = "vst 2.4 examples";
+ productReference = F4476974093DAE42008998C4 /* adelay.vst */;
+ productType = "com.apple.product-type.bundle";
+ };
+ F4476A05093DCAF9008998C4 /* surrounddelay */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F4476A0D093DCAF9008998C4 /* Build configuration list for PBXNativeTarget "surrounddelay" */;
+ buildPhases = (
+ F4476A06093DCAF9008998C4 /* Resources */,
+ F4476A07093DCAF9008998C4 /* Sources */,
+ F4476A0C093DCAF9008998C4 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ };
+ dependencies = (
+ );
+ name = surrounddelay;
+ productInstallPath = "$(HOME)/Library/Bundles";
+ productName = "vst 2.4 examples";
+ productReference = F4476A10093DCAF9008998C4 /* surrounddelay.vst */;
+ productType = "com.apple.product-type.bundle";
+ };
+ F4FF52210929FBF500DDED7A /* vstxsynth */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F4FF52240929FBF500DDED7A /* Build configuration list for PBXNativeTarget "vstxsynth" */;
+ buildPhases = (
+ F4FF521E0929FBF500DDED7A /* Resources */,
+ F4FF521F0929FBF500DDED7A /* Sources */,
+ F4FF52200929FBF500DDED7A /* Frameworks */,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
+ INFOPLIST_FILE = "vstxsynth-Info.plist";
+ INSTALL_PATH = "$(HOME)/Library/Bundles";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Carbon,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = vstxsynth;
+ WRAPPER_EXTENSION = bundle;
+ ZERO_LINK = YES;
+ };
+ dependencies = (
+ );
+ name = vstxsynth;
+ productName = vstxsynth;
+ productReference = F4FF52220929FBF500DDED7A /* vstxsynth.vst */;
+ productSettingsXML = "
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ vstxsynth
+ CFBundleIdentifier
+ com.yourcompany.vstxsynth
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ BNDL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ CSResourcesFileMapped
+ yes
+
+
+";
+ productType = "com.apple.product-type.bundle";
+ };
+ F4FF52F2092A312800DDED7A /* minihost */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F4FF52F6092A312900DDED7A /* Build configuration list for PBXNativeTarget "minihost" */;
+ buildPhases = (
+ F4FF52EF092A312800DDED7A /* Resources */,
+ F4FF52F0092A312800DDED7A /* Sources */,
+ F4FF52F1092A312800DDED7A /* Frameworks */,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
+ INFOPLIST_FILE = "minihost-Info.plist";
+ INSTALL_PATH = "$(HOME)/Applications";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Carbon,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = minihost;
+ WRAPPER_EXTENSION = app;
+ ZERO_LINK = YES;
+ };
+ dependencies = (
+ );
+ name = minihost;
+ productName = minihost;
+ productReference = F4FF52F3092A312800DDED7A /* minihost.app */;
+ productSettingsXML = "
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIdentifier
+ com.yourcompany.minihost
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ APPL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+
+
+";
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 089C1669FE841209C02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 4FADC23708B4156C00ABE55E /* Build configuration list for PBXProject "vst 2.4 examples" */;
+ buildSettings = {
+ };
+ buildStyles = (
+ 4F9091AC011F3BD104CA0E50 /* Debug */,
+ 4F9091AD011F3BD104CA0E50 /* Release */,
+ );
+ hasScannedForEncodings = 1;
+ mainGroup = 089C166AFE841209C02AAC07 /* vst 2.4 examples */;
+ projectDirPath = "";
+ targets = (
+ F4476C1A093DDA87008998C4 /* all */,
+ 8D01CCC60486CAD60068D4B7 /* again */,
+ F4476969093DAE42008998C4 /* adelay */,
+ F4FF52210929FBF500DDED7A /* vstxsynth */,
+ F4476A05093DCAF9008998C4 /* surrounddelay */,
+ F4FF52F2092A312800DDED7A /* minihost */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8D01CCC90486CAD60068D4B7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F447696A093DAE42008998C4 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4476A06093DCAF9008998C4 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F4476B8E093DD81B008998C4 /* bmp00128.bmp in Resources */,
+ F4476B8F093DD81B008998C4 /* bmp00129.bmp in Resources */,
+ F4476B90093DD81B008998C4 /* bmp00130.bmp in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4FF521E0929FBF500DDED7A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4FF52EF092A312800DDED7A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8D01CCCB0486CAD60068D4B7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F4FF51C10929F9A600DDED7A /* again.cpp in Sources */,
+ F4FF51CA0929F9C100DDED7A /* audioeffect.cpp in Sources */,
+ F4FF51CB0929F9C100DDED7A /* audioeffectx.cpp in Sources */,
+ F4FF51CC0929F9C100DDED7A /* vstplugmain.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F447696B093DAE42008998C4 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F447696D093DAE42008998C4 /* audioeffect.cpp in Sources */,
+ F447696E093DAE42008998C4 /* audioeffectx.cpp in Sources */,
+ F447696F093DAE42008998C4 /* vstplugmain.cpp in Sources */,
+ F4476991093DAEA1008998C4 /* adelay.cpp in Sources */,
+ F4476A76093DCD05008998C4 /* adelaymain.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4476A07093DCAF9008998C4 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F4476A08093DCAF9008998C4 /* audioeffect.cpp in Sources */,
+ F4476A09093DCAF9008998C4 /* audioeffectx.cpp in Sources */,
+ F4476A0A093DCAF9008998C4 /* vstplugmain.cpp in Sources */,
+ F4476A0B093DCAF9008998C4 /* adelay.cpp in Sources */,
+ F4476A18093DCB4D008998C4 /* surrounddelay.cpp in Sources */,
+ F4476A9E093DCF68008998C4 /* sdeditor.cpp in Sources */,
+ F4476AAF093DD4FB008998C4 /* aeffguieditor.cpp in Sources */,
+ F4476AB0093DD4FB008998C4 /* vstcontrols.cpp in Sources */,
+ F4476AB1093DD4FB008998C4 /* vstgui.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4FF521F0929FBF500DDED7A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F4FF52270929FC2D00DDED7A /* vstxsynth.cpp in Sources */,
+ F4FF52280929FC2E00DDED7A /* vstxsynthproc.cpp in Sources */,
+ F4FF52290929FC3000DDED7A /* audioeffect.cpp in Sources */,
+ F4FF522A0929FC3000DDED7A /* audioeffectx.cpp in Sources */,
+ F4FF522B0929FC3100DDED7A /* vstplugmain.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4FF52F0092A312800DDED7A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F4FF52FC092A314700DDED7A /* minihost.cpp in Sources */,
+ F4FF533D092A371400DDED7A /* minieditor.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ F4476C1C093DDA8D008998C4 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 8D01CCC60486CAD60068D4B7 /* again */;
+ targetProxy = F4476C1B093DDA8D008998C4 /* PBXContainerItemProxy */;
+ };
+ F4476C1E093DDA96008998C4 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = F4FF52210929FBF500DDED7A /* vstxsynth */;
+ targetProxy = F4476C1D093DDA96008998C4 /* PBXContainerItemProxy */;
+ };
+ F4476C20093DDA98008998C4 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = F4476969093DAE42008998C4 /* adelay */;
+ targetProxy = F4476C1F093DDA98008998C4 /* PBXContainerItemProxy */;
+ };
+ F4476C22093DDA99008998C4 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = F4476A05093DCAF9008998C4 /* surrounddelay */;
+ targetProxy = F4476C21093DDA99008998C4 /* PBXContainerItemProxy */;
+ };
+ F4EF42E90945AD2C001938AB /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = F4FF52F2092A312800DDED7A /* minihost */;
+ targetProxy = F4EF42E80945AD2C001938AB /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 4FADC23408B4156C00ABE55E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(NATIVE_ARCH)";
+ PRODUCT_NAME = again;
+ };
+ name = Debug;
+ };
+ 4FADC23508B4156C00ABE55E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ ppc,
+ i386,
+ );
+ PRODUCT_NAME = again;
+ };
+ name = Release;
+ };
+ 4FADC23808B4156C00ABE55E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_ALTIVEC_EXTENSIONS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(HEADER_SEARCH_PATHS)",
+ "$(SRCROOT)/../../../../",
+ );
+ INFOPLIST_FILE = vst2.4Info.plist;
+ INFOPLIST_PREPROCESS = YES;
+ PREBINDING = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ WRAPPER_EXTENSION = vst;
+ };
+ name = Debug;
+ };
+ 4FADC23908B4156C00ABE55E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ DEPLOYMENT_POSTPROCESSING = YES;
+ GCC_ALTIVEC_EXTENSIONS = YES;
+ GCC_AUTO_VECTORIZATION = YES;
+ GCC_ENABLE_SSE3_EXTENSIONS = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ GCC_UNROLL_LOOPS = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(HEADER_SEARCH_PATHS)",
+ "$(SRCROOT)/../../../../",
+ );
+ INFOPLIST_FILE = vst2.4Info.plist;
+ INFOPLIST_PREPROCESS = YES;
+ PREBINDING = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ WRAPPER_EXTENSION = vst;
+ };
+ name = Release;
+ };
+ F4476972093DAE42008998C4 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = vst2.4Info.plist;
+ PRODUCT_NAME = adelay;
+ };
+ name = Debug;
+ };
+ F4476973093DAE42008998C4 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ ppc,
+ i386,
+ );
+ PRODUCT_NAME = adelay;
+ };
+ name = Release;
+ };
+ F4476A0E093DCAF9008998C4 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ INFOPLIST_FILE = vst2.4Info.plist;
+ PRODUCT_NAME = surrounddelay;
+ };
+ name = Debug;
+ };
+ F4476A0F093DCAF9008998C4 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = surrounddelay;
+ };
+ name = Release;
+ };
+ F4476C2B093DDACE008998C4 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ PRODUCT_NAME = all;
+ };
+ name = Debug;
+ };
+ F4476C2C093DDACE008998C4 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ PRODUCT_NAME = all;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ F4FF52250929FBF500DDED7A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ PRODUCT_NAME = vstxsynth;
+ };
+ name = Debug;
+ };
+ F4FF52260929FBF500DDED7A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ ppc,
+ i386,
+ );
+ PRODUCT_NAME = vstxsynth;
+ };
+ name = Release;
+ };
+ F4FF52F7092A312900DDED7A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = NO;
+ INFOPLIST_FILE = "minihost-Info.plist";
+ INSTALL_PATH = "$(HOME)/Applications";
+ PREBINDING = NO;
+ PRODUCT_NAME = minihost;
+ WRAPPER_EXTENSION = app;
+ ZERO_LINK = YES;
+ };
+ name = Debug;
+ };
+ F4FF52F8092A312900DDED7A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ ppc,
+ i386,
+ );
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = NO;
+ INFOPLIST_FILE = "minihost-Info.plist";
+ INSTALL_PATH = "$(HOME)/Applications";
+ PREBINDING = NO;
+ PRODUCT_NAME = minihost;
+ WRAPPER_EXTENSION = app;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 4FADC23308B4156C00ABE55E /* Build configuration list for PBXNativeTarget "again" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4FADC23408B4156C00ABE55E /* Debug */,
+ 4FADC23508B4156C00ABE55E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 4FADC23708B4156C00ABE55E /* Build configuration list for PBXProject "vst 2.4 examples" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4FADC23808B4156C00ABE55E /* Debug */,
+ 4FADC23908B4156C00ABE55E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F4476971093DAE42008998C4 /* Build configuration list for PBXNativeTarget "adelay" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F4476972093DAE42008998C4 /* Debug */,
+ F4476973093DAE42008998C4 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F4476A0D093DCAF9008998C4 /* Build configuration list for PBXNativeTarget "surrounddelay" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F4476A0E093DCAF9008998C4 /* Debug */,
+ F4476A0F093DCAF9008998C4 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F4476C2A093DDACE008998C4 /* Build configuration list for PBXAggregateTarget "all" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F4476C2B093DDACE008998C4 /* Debug */,
+ F4476C2C093DDACE008998C4 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F4FF52240929FBF500DDED7A /* Build configuration list for PBXNativeTarget "vstxsynth" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F4FF52250929FBF500DDED7A /* Debug */,
+ F4FF52260929FBF500DDED7A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F4FF52F6092A312900DDED7A /* Build configuration list for PBXNativeTarget "minihost" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F4FF52F7092A312900DDED7A /* Debug */,
+ F4FF52F8092A312900DDED7A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 089C1669FE841209C02AAC07 /* Project object */;
+}
diff --git a/public.sdk/samples/vst2.x/mac/vst2.4Info.plist b/public.sdk/samples/vst2.x/mac/vst2.4Info.plist
new file mode 100644
index 0000000..35c22fa
--- /dev/null
+++ b/public.sdk/samples/vst2.x/mac/vst2.4Info.plist
@@ -0,0 +1,28 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ $(PRODUCT_NAME)
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ de.steinberg.vst2.4.example.$(PRODUCT_NAME)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ BNDL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ CFBundleShortVersionString
+ 1.0
+ CSResourcesFileMapped
+
+
+
diff --git a/public.sdk/samples/vst2.x/minihost/source/minieditor.cpp b/public.sdk/samples/vst2.x/minihost/source/minieditor.cpp
new file mode 100644
index 0000000..80277b1
--- /dev/null
+++ b/public.sdk/samples/vst2.x/minihost/source/minieditor.cpp
@@ -0,0 +1,203 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:28 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : minieditor.cpp
+// Created by : Steinberg
+// Description : VST Mini Host Editor
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#include "pluginterfaces/vst2.x/aeffectx.h"
+
+#if _WIN32
+#include
+#elif TARGET_API_MAC_CARBON
+#include
+static pascal OSStatus windowHandler (EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData);
+static pascal void idleTimerProc (EventLoopTimerRef inTimer, void* inUserData);
+#endif
+
+#include
+
+#if _WIN32
+//-------------------------------------------------------------------------------------------------------
+struct MyDLGTEMPLATE: DLGTEMPLATE
+{
+ WORD ext[3];
+ MyDLGTEMPLATE ()
+ {
+ memset (this, 0, sizeof (*this));
+ };
+};
+
+static INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
+static AEffect* theEffect = 0;
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+bool checkEffectEditor (AEffect* effect)
+{
+ if ((effect->flags & effFlagsHasEditor) == 0)
+ {
+ printf ("This plug does not have an editor!\n");
+ return false;
+ }
+
+#if _WIN32
+ theEffect = effect;
+
+ MyDLGTEMPLATE t;
+ t.style = WS_POPUPWINDOW|WS_DLGFRAME|DS_MODALFRAME|DS_CENTER;
+ t.cx = 100;
+ t.cy = 100;
+ DialogBoxIndirectParam (GetModuleHandle (0), &t, 0, (DLGPROC)EditorProc, (LPARAM)effect);
+
+ theEffect = 0;
+#elif TARGET_API_MAC_CARBON
+ WindowRef window;
+ Rect mRect = {0, 0, 300, 300};
+ OSStatus err = CreateNewWindow (kDocumentWindowClass, kWindowCloseBoxAttribute | kWindowCompositingAttribute | kWindowAsyncDragAttribute | kWindowStandardHandlerAttribute, &mRect, &window);
+ if (err != noErr)
+ {
+ printf ("HOST> Could not create mac window !\n");
+ return false;
+ }
+ static EventTypeSpec eventTypes[] = {
+ { kEventClassWindow, kEventWindowClose }
+ };
+ InstallWindowEventHandler (window, windowHandler, GetEventTypeCount (eventTypes), eventTypes, window, NULL);
+
+ printf ("HOST> Open editor...\n");
+ effect->dispatcher (effect, effEditOpen, 0, 0, window, 0);
+ ERect* eRect = 0;
+ printf ("HOST> Get editor rect..\n");
+ effect->dispatcher (effect, effEditGetRect, 0, 0, &eRect, 0);
+ if (eRect)
+ {
+ int width = eRect->right - eRect->left;
+ int height = eRect->bottom - eRect->top;
+ Rect bounds;
+ GetWindowBounds (window, kWindowContentRgn, &bounds);
+ bounds.right = bounds.left + width;
+ bounds.bottom = bounds.top + height;
+ SetWindowBounds (window, kWindowContentRgn, &bounds);
+ }
+ RepositionWindow (window, NULL, kWindowCenterOnMainScreen);
+ ShowWindow (window);
+
+ EventLoopTimerRef idleEventLoopTimer;
+ InstallEventLoopTimer (GetCurrentEventLoop (), kEventDurationSecond / 25., kEventDurationSecond / 25., idleTimerProc, effect, &idleEventLoopTimer);
+
+ RunAppModalLoopForWindow (window);
+ RemoveEventLoopTimer (idleEventLoopTimer);
+
+ printf ("HOST> Close editor..\n");
+ effect->dispatcher (effect, effEditClose, 0, 0, 0, 0);
+ ReleaseWindow (window);
+#endif
+ return true;
+}
+
+#if _WIN32
+//-------------------------------------------------------------------------------------------------------
+INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ AEffect* effect = theEffect;
+
+ switch(msg)
+ {
+ //-----------------------
+ case WM_INITDIALOG :
+ {
+ SetWindowText (hwnd, "VST Editor");
+ SetTimer (hwnd, 1, 20, 0);
+
+ if (effect)
+ {
+ printf ("HOST> Open editor...\n");
+ effect->dispatcher (effect, effEditOpen, 0, 0, hwnd, 0);
+
+ printf ("HOST> Get editor rect..\n");
+ ERect* eRect = 0;
+ effect->dispatcher (effect, effEditGetRect, 0, 0, &eRect, 0);
+ if (eRect)
+ {
+ int width = eRect->right - eRect->left;
+ int height = eRect->bottom - eRect->top;
+ if (width < 100)
+ width = 100;
+ if (height < 100)
+ height = 100;
+
+ RECT wRect;
+ SetRect (&wRect, 0, 0, width, height);
+ AdjustWindowRectEx (&wRect, GetWindowLong (hwnd, GWL_STYLE), FALSE, GetWindowLong (hwnd, GWL_EXSTYLE));
+ width = wRect.right - wRect.left;
+ height = wRect.bottom - wRect.top;
+
+ SetWindowPos (hwnd, HWND_TOP, 0, 0, width, height, SWP_NOMOVE);
+ }
+ }
+ } break;
+
+ //-----------------------
+ case WM_TIMER :
+ if (effect)
+ effect->dispatcher (effect, effEditIdle, 0, 0, 0, 0);
+ break;
+
+ //-----------------------
+ case WM_CLOSE :
+ {
+ KillTimer (hwnd, 1);
+
+ printf ("HOST> Close editor..\n");
+ if (effect)
+ effect->dispatcher (effect, effEditClose, 0, 0, 0, 0);
+
+ EndDialog (hwnd, IDOK);
+ } break;
+ }
+
+ return 0;
+}
+
+#elif TARGET_API_MAC_CARBON
+//-------------------------------------------------------------------------------------------------------
+pascal void idleTimerProc (EventLoopTimerRef inTimer, void *inUserData)
+{
+ AEffect* effect = (AEffect*)inUserData;
+ effect->dispatcher (effect, effEditIdle, 0, 0, 0, 0);
+}
+
+//-------------------------------------------------------------------------------------------------------
+pascal OSStatus windowHandler (EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void *inUserData)
+{
+ OSStatus result = eventNotHandledErr;
+ WindowRef window = (WindowRef) inUserData;
+ UInt32 eventClass = GetEventClass (inEvent);
+ UInt32 eventKind = GetEventKind (inEvent);
+
+ switch (eventClass)
+ {
+ case kEventClassWindow:
+ {
+ switch (eventKind)
+ {
+ case kEventWindowClose:
+ {
+ QuitAppModalLoopForWindow (window);
+ break;
+ }
+ }
+ break;
+ }
+ }
+
+ return result;
+}
+
+#endif
diff --git a/public.sdk/samples/vst2.x/minihost/source/minihost.cpp b/public.sdk/samples/vst2.x/minihost/source/minihost.cpp
new file mode 100644
index 0000000..686ee50
--- /dev/null
+++ b/public.sdk/samples/vst2.x/minihost/source/minihost.cpp
@@ -0,0 +1,333 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:28 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : minihost.cpp
+// Created by : Steinberg
+// Description : VST Mini Host
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#include "pluginterfaces/vst2.x/aeffectx.h"
+
+#if _WIN32
+#include
+#elif TARGET_API_MAC_CARBON
+#include
+#endif
+
+#include
+
+//-------------------------------------------------------------------------------------------------------
+static const VstInt32 kBlockSize = 512;
+static const float kSampleRate = 48000.f;
+static const VstInt32 kNumProcessCycles = 5;
+
+//-------------------------------------------------------------------------------------------------------
+typedef AEffect* (*PluginEntryProc) (audioMasterCallback audioMaster);
+static VstIntPtr VSTCALLBACK HostCallback (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt);
+
+//-------------------------------------------------------------------------------------------------------
+// PluginLoader
+//-------------------------------------------------------------------------------------------------------
+struct PluginLoader
+{
+//-------------------------------------------------------------------------------------------------------
+ void* module;
+
+ PluginLoader ()
+ : module (0)
+ {}
+
+ ~PluginLoader ()
+ {
+ if (module)
+ {
+ #if _WIN32
+ FreeLibrary ((HMODULE)module);
+ #elif TARGET_API_MAC_CARBON
+ CFBundleUnloadExecutable ((CFBundleRef)module);
+ CFRelease ((CFBundleRef)module);
+ #endif
+ }
+ }
+
+ bool loadLibrary (const char* fileName)
+ {
+ #if _WIN32
+ module = LoadLibrary (fileName);
+ #elif TARGET_API_MAC_CARBON
+ CFStringRef fileNameString = CFStringCreateWithCString (NULL, fileName, kCFStringEncodingUTF8);
+ if (fileNameString == 0)
+ return false;
+ CFURLRef url = CFURLCreateWithFileSystemPath (NULL, fileNameString, kCFURLPOSIXPathStyle, false);
+ CFRelease (fileNameString);
+ if (url == 0)
+ return false;
+ module = CFBundleCreate (NULL, url);
+ CFRelease (url);
+ if (module && CFBundleLoadExecutable ((CFBundleRef)module) == false)
+ return false;
+ #endif
+ return module != 0;
+ }
+
+ PluginEntryProc getMainEntry ()
+ {
+ PluginEntryProc mainProc = 0;
+ #if _WIN32
+ mainProc = (PluginEntryProc)GetProcAddress ((HMODULE)module, "VSTPluginMain");
+ if (!mainProc)
+ mainProc = (PluginEntryProc)GetProcAddress ((HMODULE)module, "main");
+ #elif TARGET_API_MAC_CARBON
+ mainProc = (PluginEntryProc)CFBundleGetFunctionPointerForName ((CFBundleRef)module, CFSTR("VSTPluginMain"));
+ if (!mainProc)
+ mainProc = (PluginEntryProc)CFBundleGetFunctionPointerForName ((CFBundleRef)module, CFSTR("main_macho"));
+ #endif
+ return mainProc;
+ }
+//-------------------------------------------------------------------------------------------------------
+};
+
+//-------------------------------------------------------------------------------------------------------
+static bool checkPlatform ()
+{
+#if VST_64BIT_PLATFORM
+ printf ("*** This is a 64 Bit Build! ***\n");
+#else
+ printf ("*** This is a 32 Bit Build! ***\n");
+#endif
+
+ int sizeOfVstIntPtr = sizeof (VstIntPtr);
+ int sizeOfVstInt32 = sizeof (VstInt32);
+ int sizeOfPointer = sizeof (void*);
+ int sizeOfAEffect = sizeof (AEffect);
+
+ printf ("VstIntPtr = %d Bytes, VstInt32 = %d Bytes, Pointer = %d Bytes, AEffect = %d Bytes\n\n",
+ sizeOfVstIntPtr, sizeOfVstInt32, sizeOfPointer, sizeOfAEffect);
+
+ return sizeOfVstIntPtr == sizeOfPointer;
+}
+
+//-------------------------------------------------------------------------------------------------------
+static void checkEffectProperties (AEffect* effect);
+static void checkEffectProcessing (AEffect* effect);
+extern bool checkEffectEditor (AEffect* effect); // minieditor.cpp
+
+//-------------------------------------------------------------------------------------------------------
+int main (int argc, char* argv[])
+{
+ if (!checkPlatform ())
+ {
+ printf ("Platform verification failed! Please check your Compiler Settings!\n");
+ return -1;
+ }
+
+ const char* fileName = "again.dll";
+ //const char* fileName = "adelay.dll";
+ //const char* fileName = "surrounddelay.dll";
+ //const char* fileName = "vstxsynth.dll";
+ //const char* fileName = "drawtest.dll";
+
+ if (argc > 1)
+ fileName = argv[1];
+
+ printf ("HOST> Load library...\n");
+ PluginLoader loader;
+ if (!loader.loadLibrary (fileName))
+ {
+ printf ("Failed to load VST Plugin library!\n");
+ return -1;
+ }
+
+ PluginEntryProc mainEntry = loader.getMainEntry ();
+ if (!mainEntry)
+ {
+ printf ("VST Plugin main entry not found!\n");
+ return -1;
+ }
+
+ printf ("HOST> Create effect...\n");
+ AEffect* effect = mainEntry (HostCallback);
+ if (!effect)
+ {
+ printf ("Failed to create effect instance!\n");
+ return -1;
+ }
+
+ printf ("HOST> Init sequence...\n");
+ effect->dispatcher (effect, effOpen, 0, 0, 0, 0);
+ effect->dispatcher (effect, effSetSampleRate, 0, 0, 0, kSampleRate);
+ effect->dispatcher (effect, effSetBlockSize, 0, kBlockSize, 0, 0);
+
+ checkEffectProperties (effect);
+ checkEffectProcessing (effect);
+ checkEffectEditor (effect);
+
+ printf ("HOST> Close effect...\n");
+ effect->dispatcher (effect, effClose, 0, 0, 0, 0);
+ return 0;
+}
+
+//-------------------------------------------------------------------------------------------------------
+void checkEffectProperties (AEffect* effect)
+{
+ printf ("HOST> Gathering properties...\n");
+
+ char effectName[256] = {0};
+ char vendorString[256] = {0};
+ char productString[256] = {0};
+
+ effect->dispatcher (effect, effGetEffectName, 0, 0, effectName, 0);
+ effect->dispatcher (effect, effGetVendorString, 0, 0, vendorString, 0);
+ effect->dispatcher (effect, effGetProductString, 0, 0, productString, 0);
+
+ printf ("Name = %s\nVendor = %s\nProduct = %s\n\n", effectName, vendorString, productString);
+
+ printf ("numPrograms = %d\nnumParams = %d\nnumInputs = %d\nnumOutputs = %d\n\n",
+ effect->numPrograms, effect->numParams, effect->numInputs, effect->numOutputs);
+
+ // Iterate programs...
+ for (VstInt32 progIndex = 0; progIndex < effect->numPrograms; progIndex++)
+ {
+ char progName[256] = {0};
+ if (!effect->dispatcher (effect, effGetProgramNameIndexed, progIndex, 0, progName, 0))
+ {
+ effect->dispatcher (effect, effSetProgram, 0, progIndex, 0, 0); // Note: old program not restored here!
+ effect->dispatcher (effect, effGetProgramName, 0, 0, progName, 0);
+ }
+ printf ("Program %03d: %s\n", progIndex, progName);
+ }
+
+ printf ("\n");
+
+ // Iterate parameters...
+ for (VstInt32 paramIndex = 0; paramIndex < effect->numParams; paramIndex++)
+ {
+ char paramName[256] = {0};
+ char paramLabel[256] = {0};
+ char paramDisplay[256] = {0};
+
+ effect->dispatcher (effect, effGetParamName, paramIndex, 0, paramName, 0);
+ effect->dispatcher (effect, effGetParamLabel, paramIndex, 0, paramLabel, 0);
+ effect->dispatcher (effect, effGetParamDisplay, paramIndex, 0, paramDisplay, 0);
+ float value = effect->getParameter (effect, paramIndex);
+
+ printf ("Param %03d: %s [%s %s] (normalized = %f)\n", paramIndex, paramName, paramDisplay, paramLabel, value);
+ }
+
+ printf ("\n");
+
+ // Can-do nonsense...
+ static const char* canDos[] =
+ {
+ "receiveVstEvents",
+ "receiveVstMidiEvent",
+ "midiProgramNames"
+ };
+
+ for (VstInt32 canDoIndex = 0; canDoIndex < sizeof (canDos) / sizeof (canDos[0]); canDoIndex++)
+ {
+ printf ("Can do %s... ", canDos[canDoIndex]);
+ VstInt32 result = (VstInt32)effect->dispatcher (effect, effCanDo, 0, 0, (void*)canDos[canDoIndex], 0);
+ switch (result)
+ {
+ case 0 : printf ("don't know"); break;
+ case 1 : printf ("yes"); break;
+ case -1 : printf ("definitely not!"); break;
+ default : printf ("?????");
+ }
+ printf ("\n");
+ }
+
+ printf ("\n");
+}
+
+//-------------------------------------------------------------------------------------------------------
+void checkEffectProcessing (AEffect* effect)
+{
+ float** inputs = 0;
+ float** outputs = 0;
+ VstInt32 numInputs = effect->numInputs;
+ VstInt32 numOutputs = effect->numOutputs;
+
+ if (numInputs > 0)
+ {
+ inputs = new float*[numInputs];
+ for (VstInt32 i = 0; i < numInputs; i++)
+ {
+ inputs[i] = new float[kBlockSize];
+ memset (inputs[i], 0, kBlockSize * sizeof (float));
+ }
+ }
+
+ if (numOutputs > 0)
+ {
+ outputs = new float*[numOutputs];
+ for (VstInt32 i = 0; i < numOutputs; i++)
+ {
+ outputs[i] = new float[kBlockSize];
+ memset (outputs[i], 0, kBlockSize * sizeof (float));
+ }
+ }
+
+ printf ("HOST> Resume effect...\n");
+ effect->dispatcher (effect, effMainsChanged, 0, 1, 0, 0);
+
+ for (VstInt32 processCount = 0; processCount < kNumProcessCycles; processCount++)
+ {
+ printf ("HOST> Process Replacing...\n");
+ effect->processReplacing (effect, inputs, outputs, kBlockSize);
+ }
+
+ printf ("HOST> Suspend effect...\n");
+ effect->dispatcher (effect, effMainsChanged, 0, 0, 0, 0);
+
+ if (numInputs > 0)
+ {
+ for (VstInt32 i = 0; i < numInputs; i++)
+ delete [] inputs[i];
+ delete [] inputs;
+ }
+
+ if (numOutputs > 0)
+ {
+ for (VstInt32 i = 0; i < numOutputs; i++)
+ delete [] outputs[i];
+ delete [] outputs;
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------
+VstIntPtr VSTCALLBACK HostCallback (AEffect* effect, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt)
+{
+ VstIntPtr result = 0;
+
+ // Filter idle calls...
+ bool filtered = false;
+ if (opcode == audioMasterIdle)
+ {
+ static bool wasIdle = false;
+ if (wasIdle)
+ filtered = true;
+ else
+ {
+ printf ("(Future idle calls will not be displayed!)\n");
+ wasIdle = true;
+ }
+ }
+
+ if (!filtered)
+ printf ("PLUG> HostCallback (opcode %d)\n index = %d, value = %p, ptr = %p, opt = %f\n", opcode, index, FromVstPtr (value), ptr, opt);
+
+ switch (opcode)
+ {
+ case audioMasterVersion :
+ result = kVstVersion;
+ break;
+ }
+
+ return result;
+}
diff --git a/public.sdk/samples/vst2.x/minihost/win/minihost.vcproj b/public.sdk/samples/vst2.x/minihost/win/minihost.vcproj
new file mode 100644
index 0000000..26dd759
--- /dev/null
+++ b/public.sdk/samples/vst2.x/minihost/win/minihost.vcproj
@@ -0,0 +1,364 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public.sdk/samples/vst2.x/vstxsynth/resource/vstxsynth.rc b/public.sdk/samples/vst2.x/vstxsynth/resource/vstxsynth.rc
new file mode 100644
index 0000000..eb0135c
--- /dev/null
+++ b/public.sdk/samples/vst2.x/vstxsynth/resource/vstxsynth.rc
@@ -0,0 +1,3 @@
+#define APSTUDIO_READONLY_SYMBOLS
+
+1 VSTXML "vstxsynth.vstxml"
\ No newline at end of file
diff --git a/public.sdk/samples/vst2.x/vstxsynth/resource/vstxsynth.vstxml b/public.sdk/samples/vst2.x/vstxsynth/resource/vstxsynth.vstxml
new file mode 100644
index 0000000..f56fe24
--- /dev/null
+++ b/public.sdk/samples/vst2.x/vstxsynth/resource/vstxsynth.vstxml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public.sdk/samples/vst2.x/vstxsynth/source/gmnames.h b/public.sdk/samples/vst2.x/vstxsynth/source/gmnames.h
new file mode 100644
index 0000000..78821fc
--- /dev/null
+++ b/public.sdk/samples/vst2.x/vstxsynth/source/gmnames.h
@@ -0,0 +1,222 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : gmnames.h
+// Created by : Steinberg Media Technologies
+// Description : Example VstXSynth
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __gmnames__
+#define __gmnames__
+
+static const long kNumGmCategories = 17;
+
+static const char* GmCategories[kNumGmCategories] =
+{
+ "Piano",
+ "Percussion",
+ "Organ",
+ "Guitar",
+ "Bass",
+ "Strings",
+ "Ensemble",
+ "Brass",
+ "Reed",
+ "Pipe",
+ "Synth Lead",
+ "SynthPad",
+ "Synth Effects",
+ "Ethnic",
+ "Percussive",
+ "Effects",
+ "DrumSets"
+};
+
+static short GmCategoriesFirstIndices [kNumGmCategories + 1] =
+{
+ 0, 7, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128
+};
+
+static const char* GmNames [128] =
+{
+ // Piano
+ "Acoustic Grand Piano",
+ "Bright Acoustic Piano",
+ "Electric Grand Piano",
+ "Honky-tonk Piano",
+ "Electric Piano 1",
+ "Electric Piano 2",
+ "Harpsichord",
+
+ // Percussion
+ "Clavi", // 7
+ "Celesta",
+ "Glockenspiel",
+ "Music Box",
+ "Vibraphone",
+ "Marimba",
+ "Xylophone",
+ "Tubular Bells",
+ "Dulcimer",
+
+ // Organ
+ "Drawbar Organ", // 16
+ "Percussive Organ",
+ "Rock Organ",
+ "Church Organ",
+ "Reed Organ",
+ "Accordion",
+ "Harmonica",
+ "Tango Accordion",
+
+ // Gitar
+ "Acoustic Guitar (nylon)", // 24
+ "Acoustic Guitar (steel)",
+ "Electric Guitar (jazz)",
+ "Electric Guitar (clean)",
+ "Electric Guitar (muted)",
+ "Overdriven Guitar",
+ "Distortion Guitar",
+ "Guitar harmonics",
+
+ // Bass
+ "Acoustic Bass", // 32
+ "Electric Bass (finger)",
+ "Electric Bass (pick)",
+ "Fretless Bass",
+ "Slap Bass 1",
+ "Slap Bass 2",
+ "Synth Bass 1",
+ "Synth Bass 2",
+
+ // strings
+ "Violin", // 40
+ "Viola",
+ "Cello",
+ "Contrabass",
+ "Tremolo Strings",
+ "Pizzicato Strings",
+ "Orchestral Harp",
+ "Timpani",
+
+ // Ensemble
+ "String Ensemble 1", // 48
+ "String Ensemble 2",
+ "SynthStrings 1",
+ "SynthStrings 2",
+ "Choir Aahs",
+ "Voice Oohs",
+ "Synth Voice",
+ "Orchestra Hit",
+
+ // Brass
+ "Trumpet", // 56
+ "Trombone",
+ "Tuba",
+ "Muted Trumpet",
+ "French Horn",
+ "Brass Section",
+ "SynthBrass 1",
+ "SynthBrass 2",
+
+ // Reed
+ "Soprano Sax", // 64
+ "Alto Sax",
+ "Tenor Sax",
+ "Baritone Sax",
+ "Oboe",
+ "English Horn",
+ "Bassoon",
+ "Clarinet",
+
+ // Pipe
+ "Piccolo", // 72
+ "Flute",
+ "Recorder",
+ "Pan Flute",
+ "Blown Bottle",
+ "Shakuhachi",
+ "Whistle",
+ "Ocarina",
+
+ // Synth Lead
+ "Lead 1 (square)", // 80
+ "Lead 2 (sawtooth)",
+ "Lead 3 (calliope)",
+ "Lead 4 (chiff)",
+ "Lead 5 (charang)",
+ "Lead 6 (voice)",
+ "Lead 7 (fifths)",
+ "Lead 8 (bass + lead)",
+
+ // Synth Pad
+ "Pad 1 (new age)", // 88
+ "Pad 2 (warm)",
+ "Pad 3 (polysynth)",
+ "Pad 4 (choir)",
+ "Pad 5 (bowed)",
+ "Pad 6 (metallic)",
+ "Pad 7 (halo)",
+ "Pad 8 (sweep)",
+
+ // Synth Fx
+ "FX 1 (rain)", // 96
+ "FX 2 (soundtrack)",
+ "FX 3 (crystal)",
+ "FX 4 (atmosphere)",
+ "FX 5 (brightness)",
+ "FX 6 (goblins)",
+ "FX 7 (echoes)",
+ "FX 8 (sci-fi)",
+
+ // Ethnic
+ "Sitar", // 104
+ "Banjo",
+ "Shamisen",
+ "Koto",
+ "Kalimba",
+ "Bag pipe",
+ "Fiddle",
+ "Shanai",
+
+ // Percussive
+ "Tinkle Bell", // 112
+ "Agogo",
+ "Steel Drums",
+ "Woodblock",
+ "Taiko Drum",
+ "Melodic Tom",
+ "Synth Drum",
+ "Reverse Cymbal",
+
+ // Effects
+ "Guitar Fret Noise", // 120
+ "Breath Noise",
+ "Seashore",
+ "Bird Tweet",
+ "Telephone Ring",
+ "Helicopter",
+ "Applause",
+ "Gunshot"
+};
+
+static const char* GmDrumSets[11] =
+{
+ "Standard",
+ "Room",
+ "Power",
+ "Electronic",
+ "Analog",
+ "Jazz",
+ "Brush",
+ "Orchestra",
+ "Clavinova",
+ "RX",
+ "C/M"
+};
+
+#endif
diff --git a/public.sdk/samples/vst2.x/vstxsynth/source/vstxsynth.cpp b/public.sdk/samples/vst2.x/vstxsynth/source/vstxsynth.cpp
new file mode 100644
index 0000000..f23cd02
--- /dev/null
+++ b/public.sdk/samples/vst2.x/vstxsynth/source/vstxsynth.cpp
@@ -0,0 +1,392 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : vstxsynth.cpp
+// Created by : Steinberg Media Technologies
+// Description : Example VstXSynth
+//
+// A simple 2 oscillators test 'synth',
+// Each oscillator has waveform, frequency, and volume
+//
+// *very* basic monophonic 'synth' example. you should not attempt to use this
+// example 'algorithm' to start a serious virtual instrument; it is intended to demonstrate
+// how VstEvents ('MIDI') are handled, but not how a virtual analog synth works.
+// there are numerous much better examples on the web which show how to deal with
+// bandlimited waveforms etc.
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#include "vstxsynth.h"
+#include "gmnames.h"
+
+//-------------------------------------------------------------------------------------------------------
+AudioEffect* createEffectInstance (audioMasterCallback audioMaster)
+{
+ return new VstXSynth (audioMaster);
+}
+
+//-----------------------------------------------------------------------------------------
+// VstXSynthProgram
+//-----------------------------------------------------------------------------------------
+VstXSynthProgram::VstXSynthProgram ()
+{
+ // Default Program Values
+ fWaveform1 = 0.f; // saw
+ fFreq1 =.0f;
+ fVolume1 = .33f;
+
+ fWaveform2 = 1.f; // pulse
+ fFreq2 = .05f; // slightly higher
+ fVolume2 = .33f;
+
+ fVolume = .9f;
+ vst_strncpy (name, "Basic", kVstMaxProgNameLen);
+}
+
+//-----------------------------------------------------------------------------------------
+// VstXSynth
+//-----------------------------------------------------------------------------------------
+VstXSynth::VstXSynth (audioMasterCallback audioMaster)
+: AudioEffectX (audioMaster, kNumPrograms, kNumParams)
+{
+ // initialize programs
+ programs = new VstXSynthProgram[kNumPrograms];
+ for (VstInt32 i = 0; i < 16; i++)
+ channelPrograms[i] = i;
+
+ if (programs)
+ setProgram (0);
+
+ if (audioMaster)
+ {
+ setNumInputs (0); // no inputs
+ setNumOutputs (kNumOutputs); // 2 outputs, 1 for each oscillator
+ canProcessReplacing ();
+ isSynth ();
+ setUniqueID ('VxS2'); // <<= kNumPrograms)
+ return;
+
+ VstXSynthProgram *ap = &programs[program];
+ curProgram = program;
+
+ fWaveform1 = ap->fWaveform1;
+ fFreq1 = ap->fFreq1;
+ fVolume1 = ap->fVolume1;
+
+ fWaveform2 = ap->fWaveform2;
+ fFreq2 = ap->fFreq2;
+ fVolume2 = ap->fVolume2;
+
+ fVolume = ap->fVolume;
+}
+
+//-----------------------------------------------------------------------------------------
+void VstXSynth::setProgramName (char* name)
+{
+ vst_strncpy (programs[curProgram].name, name, kVstMaxProgNameLen);
+}
+
+//-----------------------------------------------------------------------------------------
+void VstXSynth::getProgramName (char* name)
+{
+ vst_strncpy (name, programs[curProgram].name, kVstMaxProgNameLen);
+}
+
+//-----------------------------------------------------------------------------------------
+void VstXSynth::getParameterLabel (VstInt32 index, char* label)
+{
+ switch (index)
+ {
+ case kWaveform1:
+ case kWaveform2:
+ vst_strncpy (label, "Shape", kVstMaxParamStrLen);
+ break;
+
+ case kFreq1:
+ case kFreq2:
+ vst_strncpy (label, "Hz", kVstMaxParamStrLen);
+ break;
+
+ case kVolume1:
+ case kVolume2:
+ case kVolume:
+ vst_strncpy (label, "dB", kVstMaxParamStrLen);
+ break;
+ }
+}
+
+//-----------------------------------------------------------------------------------------
+void VstXSynth::getParameterDisplay (VstInt32 index, char* text)
+{
+ text[0] = 0;
+ switch (index)
+ {
+ case kWaveform1:
+ if (fWaveform1 < .5)
+ vst_strncpy (text, "Sawtooth", kVstMaxParamStrLen);
+ else
+ vst_strncpy (text, "Pulse", kVstMaxParamStrLen);
+ break;
+
+ case kFreq1: float2string (fFreq1, text, kVstMaxParamStrLen); break;
+ case kVolume1: dB2string (fVolume1, text, kVstMaxParamStrLen); break;
+
+ case kWaveform2:
+ if (fWaveform2 < .5)
+ vst_strncpy (text, "Sawtooth", kVstMaxParamStrLen);
+ else
+ vst_strncpy (text, "Pulse", kVstMaxParamStrLen);
+ break;
+
+ case kFreq2: float2string (fFreq2, text, kVstMaxParamStrLen); break;
+ case kVolume2: dB2string (fVolume2, text, kVstMaxParamStrLen); break;
+ case kVolume: dB2string (fVolume, text, kVstMaxParamStrLen); break;
+ }
+}
+
+//-----------------------------------------------------------------------------------------
+void VstXSynth::getParameterName (VstInt32 index, char* label)
+{
+ switch (index)
+ {
+ case kWaveform1: vst_strncpy (label, "Wave 1", kVstMaxParamStrLen); break;
+ case kFreq1: vst_strncpy (label, "Freq 1", kVstMaxParamStrLen); break;
+ case kVolume1: vst_strncpy (label, "Levl 1", kVstMaxParamStrLen); break;
+ case kWaveform2: vst_strncpy (label, "Wave 2", kVstMaxParamStrLen); break;
+ case kFreq2: vst_strncpy (label, "Freq 2", kVstMaxParamStrLen); break;
+ case kVolume2: vst_strncpy (label, "Levl 2", kVstMaxParamStrLen); break;
+ case kVolume: vst_strncpy (label, "Volume", kVstMaxParamStrLen); break;
+ }
+}
+
+//-----------------------------------------------------------------------------------------
+void VstXSynth::setParameter (VstInt32 index, float value)
+{
+ VstXSynthProgram *ap = &programs[curProgram];
+ switch (index)
+ {
+ case kWaveform1: fWaveform1 = ap->fWaveform1 = value; break;
+ case kFreq1: fFreq1 = ap->fFreq1 = value; break;
+ case kVolume1: fVolume1 = ap->fVolume1 = value; break;
+ case kWaveform2: fWaveform2 = ap->fWaveform2 = value; break;
+ case kFreq2: fFreq2 = ap->fFreq2 = value; break;
+ case kVolume2: fVolume2 = ap->fVolume2 = value; break;
+ case kVolume: fVolume = ap->fVolume = value; break;
+ }
+}
+
+//-----------------------------------------------------------------------------------------
+float VstXSynth::getParameter (VstInt32 index)
+{
+ float value = 0;
+ switch (index)
+ {
+ case kWaveform1: value = fWaveform1; break;
+ case kFreq1: value = fFreq1; break;
+ case kVolume1: value = fVolume1; break;
+ case kWaveform2: value = fWaveform2; break;
+ case kFreq2: value = fFreq2; break;
+ case kVolume2: value = fVolume2; break;
+ case kVolume: value = fVolume; break;
+ }
+ return value;
+}
+
+//-----------------------------------------------------------------------------------------
+bool VstXSynth::getOutputProperties (VstInt32 index, VstPinProperties* properties)
+{
+ if (index < kNumOutputs)
+ {
+ vst_strncpy (properties->label, "Vstx ", 63);
+ char temp[11] = {0};
+ int2string (index + 1, temp, 10);
+ vst_strncat (properties->label, temp, 63);
+
+ properties->flags = kVstPinIsActive;
+ if (index < 2)
+ properties->flags |= kVstPinIsStereo; // make channel 1+2 stereo
+ return true;
+ }
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------
+bool VstXSynth::getProgramNameIndexed (VstInt32 category, VstInt32 index, char* text)
+{
+ if (index < kNumPrograms)
+ {
+ vst_strncpy (text, programs[index].name, kVstMaxProgNameLen);
+ return true;
+ }
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------
+bool VstXSynth::getEffectName (char* name)
+{
+ vst_strncpy (name, "VstXSynth", kVstMaxEffectNameLen);
+ return true;
+}
+
+//-----------------------------------------------------------------------------------------
+bool VstXSynth::getVendorString (char* text)
+{
+ vst_strncpy (text, "Steinberg Media Technologies", kVstMaxVendorStrLen);
+ return true;
+}
+
+//-----------------------------------------------------------------------------------------
+bool VstXSynth::getProductString (char* text)
+{
+ vst_strncpy (text, "Vst Test Synth", kVstMaxProductStrLen);
+ return true;
+}
+
+//-----------------------------------------------------------------------------------------
+VstInt32 VstXSynth::getVendorVersion ()
+{
+ return 1000;
+}
+
+//-----------------------------------------------------------------------------------------
+VstInt32 VstXSynth::canDo (char* text)
+{
+ if (!strcmp (text, "receiveVstEvents"))
+ return 1;
+ if (!strcmp (text, "receiveVstMidiEvent"))
+ return 1;
+ if (!strcmp (text, "midiProgramNames"))
+ return 1;
+ return -1; // explicitly can't do; 0 => don't know
+}
+
+//-----------------------------------------------------------------------------------------
+VstInt32 VstXSynth::getNumMidiInputChannels ()
+{
+ return 1; // we are monophonic
+}
+
+//-----------------------------------------------------------------------------------------
+VstInt32 VstXSynth::getNumMidiOutputChannels ()
+{
+ return 0; // no MIDI output back to Host app
+}
+
+// midi program names:
+// as an example, GM names are used here. in fact, VstXSynth doesn't even support
+// multi-timbral operation so it's really just for demonstration.
+// a 'real' instrument would have a number of voices which use the
+// programs[channelProgram[channel]] parameters when it receives
+// a note on message.
+
+//------------------------------------------------------------------------
+VstInt32 VstXSynth::getMidiProgramName (VstInt32 channel, MidiProgramName* mpn)
+{
+ VstInt32 prg = mpn->thisProgramIndex;
+ if (prg < 0 || prg >= 128)
+ return 0;
+ fillProgram (channel, prg, mpn);
+ if (channel == 9)
+ return 1;
+ return 128L;
+}
+
+//------------------------------------------------------------------------
+VstInt32 VstXSynth::getCurrentMidiProgram (VstInt32 channel, MidiProgramName* mpn)
+{
+ if (channel < 0 || channel >= 16 || !mpn)
+ return -1;
+ VstInt32 prg = channelPrograms[channel];
+ mpn->thisProgramIndex = prg;
+ fillProgram (channel, prg, mpn);
+ return prg;
+}
+
+//------------------------------------------------------------------------
+void VstXSynth::fillProgram (VstInt32 channel, VstInt32 prg, MidiProgramName* mpn)
+{
+ mpn->midiBankMsb =
+ mpn->midiBankLsb = -1;
+ mpn->reserved = 0;
+ mpn->flags = 0;
+
+ if (channel == 9) // drums
+ {
+ vst_strncpy (mpn->name, "Standard", 63);
+ mpn->midiProgram = 0;
+ mpn->parentCategoryIndex = 0;
+ }
+ else
+ {
+ vst_strncpy (mpn->name, GmNames[prg], 63);
+ mpn->midiProgram = (char)prg;
+ mpn->parentCategoryIndex = -1; // for now
+
+ for (VstInt32 i = 0; i < kNumGmCategories; i++)
+ {
+ if (prg >= GmCategoriesFirstIndices[i] && prg < GmCategoriesFirstIndices[i + 1])
+ {
+ mpn->parentCategoryIndex = i;
+ break;
+ }
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+VstInt32 VstXSynth::getMidiProgramCategory (VstInt32 channel, MidiProgramCategory* cat)
+{
+ cat->parentCategoryIndex = -1; // -1:no parent category
+ cat->flags = 0; // reserved, none defined yet, zero.
+ VstInt32 category = cat->thisCategoryIndex;
+ if (channel == 9)
+ {
+ vst_strncpy (cat->name, "Drums", 63);
+ return 1;
+ }
+ if (category >= 0 && category < kNumGmCategories)
+ vst_strncpy (cat->name, GmCategories[category], 63);
+ else
+ cat->name[0] = 0;
+ return kNumGmCategories;
+}
+
+//------------------------------------------------------------------------
+bool VstXSynth::hasMidiProgramsChanged (VstInt32 channel)
+{
+ return false; // updateDisplay ()
+}
+
+//------------------------------------------------------------------------
+bool VstXSynth::getMidiKeyName (VstInt32 channel, MidiKeyName* key)
+ // struct will be filled with information for 'thisProgramIndex' and 'thisKeyNumber'
+ // if keyName is "" the standard name of the key will be displayed.
+ // if false is returned, no MidiKeyNames defined for 'thisProgramIndex'.
+{
+ // key->thisProgramIndex; // >= 0. fill struct for this program index.
+ // key->thisKeyNumber; // 0 - 127. fill struct for this key number.
+ key->keyName[0] = 0;
+ key->reserved = 0; // zero
+ key->flags = 0; // reserved, none defined yet, zero.
+ return false;
+}
diff --git a/public.sdk/samples/vst2.x/vstxsynth/source/vstxsynth.h b/public.sdk/samples/vst2.x/vstxsynth/source/vstxsynth.h
new file mode 100644
index 0000000..6212cac
--- /dev/null
+++ b/public.sdk/samples/vst2.x/vstxsynth/source/vstxsynth.h
@@ -0,0 +1,139 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : vstxsynth.h
+// Created by : Steinberg Media Technologies
+// Description : Example VstXSynth
+//
+// A simple 2 oscillators test 'synth',
+// Each oscillator has waveform, frequency, and volume
+//
+// *very* basic monophonic 'synth' example. you should not attempt to use this
+// example 'algorithm' to start a serious virtual instrument; it is intended to demonstrate
+// how VstEvents ('MIDI') are handled, but not how a virtual analog synth works.
+// there are numerous much better examples on the web which show how to deal with
+// bandlimited waveforms etc.
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __vstxsynth__
+#define __vstxsynth__
+
+#include "public.sdk/source/vst2.x/audioeffectx.h"
+
+//------------------------------------------------------------------------------------------
+enum
+{
+ // Global
+ kNumPrograms = 128,
+ kNumOutputs = 2,
+
+ // Parameters Tags
+ kWaveform1 = 0,
+ kFreq1,
+ kVolume1,
+
+ kWaveform2,
+ kFreq2,
+ kVolume2,
+
+ kVolume,
+
+ kNumParams
+};
+
+//------------------------------------------------------------------------------------------
+// VstXSynthProgram
+//------------------------------------------------------------------------------------------
+class VstXSynthProgram
+{
+friend class VstXSynth;
+public:
+ VstXSynthProgram ();
+ ~VstXSynthProgram () {}
+
+private:
+ float fWaveform1;
+ float fFreq1;
+ float fVolume1;
+
+ float fWaveform2;
+ float fFreq2;
+ float fVolume2;
+
+ float fVolume;
+ char name[kVstMaxProgNameLen+1];
+};
+
+//------------------------------------------------------------------------------------------
+// VstXSynth
+//------------------------------------------------------------------------------------------
+class VstXSynth : public AudioEffectX
+{
+public:
+ VstXSynth (audioMasterCallback audioMaster);
+ ~VstXSynth ();
+
+ virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
+ virtual VstInt32 processEvents (VstEvents* events);
+
+ virtual void setProgram (VstInt32 program);
+ virtual void setProgramName (char* name);
+ virtual void getProgramName (char* name);
+ virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char* text);
+
+ virtual void setParameter (VstInt32 index, float value);
+ virtual float getParameter (VstInt32 index);
+ virtual void getParameterLabel (VstInt32 index, char* label);
+ virtual void getParameterDisplay (VstInt32 index, char* text);
+ virtual void getParameterName (VstInt32 index, char* text);
+
+ virtual void setSampleRate (float sampleRate);
+ virtual void setBlockSize (VstInt32 blockSize);
+
+ virtual bool getOutputProperties (VstInt32 index, VstPinProperties* properties);
+
+ virtual bool getEffectName (char* name);
+ virtual bool getVendorString (char* text);
+ virtual bool getProductString (char* text);
+ virtual VstInt32 getVendorVersion ();
+ virtual VstInt32 canDo (char* text);
+
+ virtual VstInt32 getNumMidiInputChannels ();
+ virtual VstInt32 getNumMidiOutputChannels ();
+
+ virtual VstInt32 getMidiProgramName (VstInt32 channel, MidiProgramName* midiProgramName);
+ virtual VstInt32 getCurrentMidiProgram (VstInt32 channel, MidiProgramName* currentProgram);
+ virtual VstInt32 getMidiProgramCategory (VstInt32 channel, MidiProgramCategory* category);
+ virtual bool hasMidiProgramsChanged (VstInt32 channel);
+ virtual bool getMidiKeyName (VstInt32 channel, MidiKeyName* keyName);
+
+private:
+ float fWaveform1;
+ float fFreq1;
+ float fVolume1;
+ float fWaveform2;
+ float fFreq2;
+ float fVolume2;
+ float fVolume;
+ float fPhase1, fPhase2;
+ float fScaler;
+
+ VstXSynthProgram* programs;
+ VstInt32 channelPrograms[16];
+
+ VstInt32 currentNote;
+ VstInt32 currentVelocity;
+ VstInt32 currentDelta;
+ bool noteIsOn;
+
+ void initProcess ();
+ void noteOn (VstInt32 note, VstInt32 velocity, VstInt32 delta);
+ void noteOff ();
+ void fillProgram (VstInt32 channel, VstInt32 prg, MidiProgramName* mpn);
+};
+
+#endif
diff --git a/public.sdk/samples/vst2.x/vstxsynth/source/vstxsynthproc.cpp b/public.sdk/samples/vst2.x/vstxsynth/source/vstxsynthproc.cpp
new file mode 100644
index 0000000..61debac
--- /dev/null
+++ b/public.sdk/samples/vst2.x/vstxsynth/source/vstxsynthproc.cpp
@@ -0,0 +1,178 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/11/13 09:08:27 $
+//
+// Category : VST 2.x SDK Samples
+// Filename : vstxsynthproc.cpp
+// Created by : Steinberg Media Technologies
+// Description : Example VstXSynth
+//
+// A simple 2 oscillators test 'synth',
+// Each oscillator has waveform, frequency, and volume
+//
+// *very* basic monophonic 'synth' example. you should not attempt to use this
+// example 'algorithm' to start a serious virtual instrument; it is intended to demonstrate
+// how VstEvents ('MIDI') are handled, but not how a virtual analog synth works.
+// there are numerous much better examples on the web which show how to deal with
+// bandlimited waveforms etc.
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#include "vstxsynth.h"
+
+enum
+{
+ kNumFrequencies = 128, // 128 midi notes
+ kWaveSize = 4096 // samples (must be power of 2 here)
+};
+
+const double midiScaler = (1. / 127.);
+static float sawtooth[kWaveSize];
+static float pulse[kWaveSize];
+static float freqtab[kNumFrequencies];
+
+//-----------------------------------------------------------------------------------------
+// VstXSynth
+//-----------------------------------------------------------------------------------------
+void VstXSynth::setSampleRate (float sampleRate)
+{
+ AudioEffectX::setSampleRate (sampleRate);
+ fScaler = (float)((double)kWaveSize / (double)sampleRate);
+}
+
+//-----------------------------------------------------------------------------------------
+void VstXSynth::setBlockSize (VstInt32 blockSize)
+{
+ AudioEffectX::setBlockSize (blockSize);
+ // you may need to have to do something here...
+}
+
+//-----------------------------------------------------------------------------------------
+void VstXSynth::initProcess ()
+{
+ fPhase1 = fPhase2 = 0.f;
+ fScaler = (float)((double)kWaveSize / 44100.); // we don't know the sample rate yet
+ noteIsOn = false;
+ currentDelta = currentNote = currentDelta = 0;
+ VstInt32 i;
+
+ // make waveforms
+ VstInt32 wh = kWaveSize / 4; // 1:3 pulse
+ for (i = 0; i < kWaveSize; i++)
+ {
+ sawtooth[i] = (float)(-1. + (2. * ((double)i / (double)kWaveSize)));
+ pulse[i] = (i < wh) ? -1.f : 1.f;
+ }
+
+ // make frequency (Hz) table
+ double k = 1.059463094359; // 12th root of 2
+ double a = 6.875; // a
+ a *= k; // b
+ a *= k; // bb
+ a *= k; // c, frequency of midi note 0
+ for (i = 0; i < kNumFrequencies; i++) // 128 midi notes
+ {
+ freqtab[i] = (float)a;
+ a *= k;
+ }
+}
+
+//-----------------------------------------------------------------------------------------
+void VstXSynth::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
+{
+ float* out1 = outputs[0];
+ float* out2 = outputs[1];
+
+ if (noteIsOn)
+ {
+ float baseFreq = freqtab[currentNote & 0x7f] * fScaler;
+ float freq1 = baseFreq + fFreq1; // not really linear...
+ float freq2 = baseFreq + fFreq2;
+ float* wave1 = (fWaveform1 < .5) ? sawtooth : pulse;
+ float* wave2 = (fWaveform2 < .5) ? sawtooth : pulse;
+ float wsf = (float)kWaveSize;
+ float vol = (float)(fVolume * (double)currentVelocity * midiScaler);
+ VstInt32 mask = kWaveSize - 1;
+
+ if (currentDelta > 0)
+ {
+ if (currentDelta >= sampleFrames) // future
+ {
+ currentDelta -= sampleFrames;
+ return;
+ }
+ memset (out1, 0, currentDelta * sizeof (float));
+ memset (out2, 0, currentDelta * sizeof (float));
+ out1 += currentDelta;
+ out2 += currentDelta;
+ sampleFrames -= currentDelta;
+ currentDelta = 0;
+ }
+
+ // loop
+ while (--sampleFrames >= 0)
+ {
+ // this is all very raw, there is no means of interpolation,
+ // and we will certainly get aliasing due to non-bandlimited
+ // waveforms. don't use this for serious projects...
+ (*out1++) = wave1[(VstInt32)fPhase1 & mask] * fVolume1 * vol;
+ (*out2++) = wave2[(VstInt32)fPhase2 & mask] * fVolume2 * vol;
+ fPhase1 += freq1;
+ fPhase2 += freq2;
+ }
+ }
+ else
+ {
+ memset (out1, 0, sampleFrames * sizeof (float));
+ memset (out2, 0, sampleFrames * sizeof (float));
+ }
+}
+
+//-----------------------------------------------------------------------------------------
+VstInt32 VstXSynth::processEvents (VstEvents* ev)
+{
+ for (VstInt32 i = 0; i < ev->numEvents; i++)
+ {
+ if ((ev->events[i])->type != kVstMidiType)
+ continue;
+
+ VstMidiEvent* event = (VstMidiEvent*)ev->events[i];
+ char* midiData = event->midiData;
+ VstInt32 status = midiData[0] & 0xf0; // ignoring channel
+ if (status == 0x90 || status == 0x80) // we only look at notes
+ {
+ VstInt32 note = midiData[1] & 0x7f;
+ VstInt32 velocity = midiData[2] & 0x7f;
+ if (status == 0x80)
+ velocity = 0; // note off by velocity 0
+ if (!velocity && (note == currentNote))
+ noteOff ();
+ else
+ noteOn (note, velocity, event->deltaFrames);
+ }
+ else if (status == 0xb0)
+ {
+ if (midiData[1] == 0x7e || midiData[1] == 0x7b) // all notes off
+ noteOff ();
+ }
+ event++;
+ }
+ return 1;
+}
+
+//-----------------------------------------------------------------------------------------
+void VstXSynth::noteOn (VstInt32 note, VstInt32 velocity, VstInt32 delta)
+{
+ currentNote = note;
+ currentVelocity = velocity;
+ currentDelta = delta;
+ noteIsOn = true;
+ fPhase1 = fPhase2 = 0;
+}
+
+//-----------------------------------------------------------------------------------------
+void VstXSynth::noteOff ()
+{
+ noteIsOn = false;
+}
diff --git a/public.sdk/samples/vst2.x/vstxsynth/win/vstxsynth.vcproj b/public.sdk/samples/vst2.x/vstxsynth/win/vstxsynth.vcproj
new file mode 100644
index 0000000..28d5914
--- /dev/null
+++ b/public.sdk/samples/vst2.x/vstxsynth/win/vstxsynth.vcproj
@@ -0,0 +1,448 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public.sdk/samples/vst2.x/win.vc2003/adelay.vcproj b/public.sdk/samples/vst2.x/win.vc2003/adelay.vcproj
new file mode 100644
index 0000000..182711b
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc2003/adelay.vcproj
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public.sdk/samples/vst2.x/win.vc2003/again.vcproj b/public.sdk/samples/vst2.x/win.vc2003/again.vcproj
new file mode 100644
index 0000000..77124fe
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc2003/again.vcproj
@@ -0,0 +1,266 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public.sdk/samples/vst2.x/win.vc2003/minihost.vcproj b/public.sdk/samples/vst2.x/win.vc2003/minihost.vcproj
new file mode 100644
index 0000000..307aac3
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc2003/minihost.vcproj
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public.sdk/samples/vst2.x/win.vc2003/samples.sln b/public.sdk/samples/vst2.x/win.vc2003/samples.sln
new file mode 100644
index 0000000..68ad864
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc2003/samples.sln
@@ -0,0 +1,61 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adelay", "adelay.vcproj", "{B29DB48D-720A-4767-8C16-111145BC5FF8}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "again", "again.vcproj", "{F56DEE1F-D04F-4ACB-AC35-49590B6FF6A6}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "drawtest", "..\..\..\..\VSTGUI.SF\DRAWTEST\WIN.VC6\drawtest.vcproj", "{BCECCBAD-47F4-44C9-B1CB-587DBE359E2F}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minihost", "minihost.vcproj", "{05BC96C4-6C51-4D7E-A4B4-E93563AE17F2}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "surrounddelay", "surrounddelay.vcproj", "{2933DE90-4D9B-46CF-B8FA-038EDD14A73C}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vstxsynth", "vstxsynth.vcproj", "{25D10587-A9A3-4A99-81A9-9C07B76F685F}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {B29DB48D-720A-4767-8C16-111145BC5FF8}.Debug.ActiveCfg = Debug|Win32
+ {B29DB48D-720A-4767-8C16-111145BC5FF8}.Debug.Build.0 = Debug|Win32
+ {B29DB48D-720A-4767-8C16-111145BC5FF8}.Release.ActiveCfg = Release|Win32
+ {B29DB48D-720A-4767-8C16-111145BC5FF8}.Release.Build.0 = Release|Win32
+ {F56DEE1F-D04F-4ACB-AC35-49590B6FF6A6}.Debug.ActiveCfg = Debug|Win32
+ {F56DEE1F-D04F-4ACB-AC35-49590B6FF6A6}.Debug.Build.0 = Debug|Win32
+ {F56DEE1F-D04F-4ACB-AC35-49590B6FF6A6}.Release.ActiveCfg = Release|Win32
+ {F56DEE1F-D04F-4ACB-AC35-49590B6FF6A6}.Release.Build.0 = Release|Win32
+ {BCECCBAD-47F4-44C9-B1CB-587DBE359E2F}.Debug.ActiveCfg = Debug|Win32
+ {BCECCBAD-47F4-44C9-B1CB-587DBE359E2F}.Debug.Build.0 = Debug|Win32
+ {BCECCBAD-47F4-44C9-B1CB-587DBE359E2F}.Release.ActiveCfg = Release|Win32
+ {BCECCBAD-47F4-44C9-B1CB-587DBE359E2F}.Release.Build.0 = Release|Win32
+ {05BC96C4-6C51-4D7E-A4B4-E93563AE17F2}.Debug.ActiveCfg = Debug|Win32
+ {05BC96C4-6C51-4D7E-A4B4-E93563AE17F2}.Debug.Build.0 = Debug|Win32
+ {05BC96C4-6C51-4D7E-A4B4-E93563AE17F2}.Release.ActiveCfg = Release|Win32
+ {05BC96C4-6C51-4D7E-A4B4-E93563AE17F2}.Release.Build.0 = Release|Win32
+ {2933DE90-4D9B-46CF-B8FA-038EDD14A73C}.Debug.ActiveCfg = Debug|Win32
+ {2933DE90-4D9B-46CF-B8FA-038EDD14A73C}.Debug.Build.0 = Debug|Win32
+ {2933DE90-4D9B-46CF-B8FA-038EDD14A73C}.Release.ActiveCfg = Release|Win32
+ {2933DE90-4D9B-46CF-B8FA-038EDD14A73C}.Release.Build.0 = Release|Win32
+ {25D10587-A9A3-4A99-81A9-9C07B76F685F}.Debug.ActiveCfg = Debug|Win32
+ {25D10587-A9A3-4A99-81A9-9C07B76F685F}.Debug.Build.0 = Debug|Win32
+ {25D10587-A9A3-4A99-81A9-9C07B76F685F}.Release.ActiveCfg = Release|Win32
+ {25D10587-A9A3-4A99-81A9-9C07B76F685F}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/public.sdk/samples/vst2.x/win.vc2003/surrounddelay.vcproj b/public.sdk/samples/vst2.x/win.vc2003/surrounddelay.vcproj
new file mode 100644
index 0000000..53f21aa
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc2003/surrounddelay.vcproj
@@ -0,0 +1,412 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public.sdk/samples/vst2.x/win.vc2003/vstxsynth.vcproj b/public.sdk/samples/vst2.x/win.vc2003/vstxsynth.vcproj
new file mode 100644
index 0000000..df11232
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc2003/vstxsynth.vcproj
@@ -0,0 +1,309 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public.sdk/samples/vst2.x/win.vc6/adelay.dsp b/public.sdk/samples/vst2.x/win.vc6/adelay.dsp
new file mode 100644
index 0000000..95507b9
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc6/adelay.dsp
@@ -0,0 +1,155 @@
+# Microsoft Developer Studio Project File - Name="adelay" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=adelay - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "adelay.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "adelay.mak" CFG="adelay - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "adelay - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "adelay - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "adelay - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/adelay"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADELAY_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../.." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADELAY_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+
+!ELSEIF "$(CFG)" == "adelay - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "adelay___Win32_Debug"
+# PROP BASE Intermediate_Dir "adelay___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/adelay"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADELAY_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../.." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ADELAY_EXPORTS" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "adelay - Win32 Release"
+# Name "adelay - Win32 Debug"
+# Begin Group "Interfaces"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\aeffect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\aeffectx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\vstfxstore.h
+# End Source File
+# End Group
+# Begin Group "Source Files"
+
+# PROP Default_Filter ""
+# Begin Group "vst2.x"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\aeffeditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffect.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffectx.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffectx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\vstplugmain.cpp
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\adelay\adelay.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\adelay\adelay.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\adelay\adelaymain.cpp
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\win\vstplug.def
+# End Source File
+# End Target
+# End Project
diff --git a/public.sdk/samples/vst2.x/win.vc6/again.dsp b/public.sdk/samples/vst2.x/win.vc6/again.dsp
new file mode 100644
index 0000000..cbd1cf5
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc6/again.dsp
@@ -0,0 +1,151 @@
+# Microsoft Developer Studio Project File - Name="again" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=again - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "again.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "again.mak" CFG="again - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "again - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "again - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "again - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/again"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AGAIN_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../.." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AGAIN_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+
+!ELSEIF "$(CFG)" == "again - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/again"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AGAIN_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../.." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "AGAIN_EXPORTS" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "again - Win32 Release"
+# Name "again - Win32 Debug"
+# Begin Group "Interfaces"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\aeffect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\aeffectx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\vstfxstore.h
+# End Source File
+# End Group
+# Begin Group "Source Files"
+
+# PROP Default_Filter ""
+# Begin Group "vst2.x"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\aeffeditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffect.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffectx.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffectx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\vstplugmain.cpp
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\again\source\again.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\again\source\again.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\win\vstplug.def
+# End Source File
+# End Target
+# End Project
diff --git a/public.sdk/samples/vst2.x/win.vc6/minihost.dsp b/public.sdk/samples/vst2.x/win.vc6/minihost.dsp
new file mode 100644
index 0000000..826795d
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc6/minihost.dsp
@@ -0,0 +1,114 @@
+# Microsoft Developer Studio Project File - Name="minihost" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=minihost - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "minihost.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "minihost.mak" CFG="minihost - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "minihost - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "minihost - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "minihost - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/minihost"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../.." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "minihost - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "minihost___Win32_Debug"
+# PROP BASE Intermediate_Dir "minihost___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/minihost"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../.." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "minihost - Win32 Release"
+# Name "minihost - Win32 Debug"
+# Begin Group "Interfaces"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\aeffect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\aeffectx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\vstfxstore.h
+# End Source File
+# End Group
+# Begin Group "Source Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\minihost\source\minieditor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\minihost\source\minihost.cpp
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/public.sdk/samples/vst2.x/win.vc6/samples.dsw b/public.sdk/samples/vst2.x/win.vc6/samples.dsw
new file mode 100644
index 0000000..0d076af
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc6/samples.dsw
@@ -0,0 +1,89 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "adelay"=.\adelay.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "again"=.\again.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "drawtest"=..\..\..\..\VSTGUI.SF\DRAWTEST\WIN.VC6\drawtest.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "minihost"=.\minihost.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "surrounddelay"=.\surrounddelay.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "vstxsynth"=.\vstxsynth.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/public.sdk/samples/vst2.x/win.vc6/surrounddelay.dsp b/public.sdk/samples/vst2.x/win.vc6/surrounddelay.dsp
new file mode 100644
index 0000000..bfbd7e8
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc6/surrounddelay.dsp
@@ -0,0 +1,199 @@
+# Microsoft Developer Studio Project File - Name="surrounddelay" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=surrounddelay - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "surrounddelay.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "surrounddelay.mak" CFG="surrounddelay - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "surrounddelay - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "surrounddelay - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "surrounddelay - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/surrounddelay"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SURROUNDDELAY_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../.." /I "..\..\..\vstgui" /I "..\..\..\..\public.sdk\source\vst2.x" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SURROUNDDELAY_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+
+!ELSEIF "$(CFG)" == "surrounddelay - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "surrounddelay___Win32_Debug"
+# PROP BASE Intermediate_Dir "surrounddelay___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/surrounddelay"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SURROUNDDELAY_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../.." /I "..\..\..\vstgui" /I "..\..\..\..\public.sdk\source\vst2.x" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SURROUNDDELAY_EXPORTS" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "surrounddelay - Win32 Release"
+# Name "surrounddelay - Win32 Debug"
+# Begin Group "Interfaces"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\aeffect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\aeffectx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\vstfxstore.h
+# End Source File
+# End Group
+# Begin Group "Source Files"
+
+# PROP Default_Filter ""
+# Begin Group "vst2.x"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\aeffeditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffect.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffectx.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffectx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\vstplugmain.cpp
+# End Source File
+# End Group
+# Begin Group "vstgui"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\..\vstgui.sf\vstgui\aeffguieditor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\vstgui.sf\vstgui\aeffguieditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\vstgui.sf\vstgui\vstcontrols.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\vstgui.sf\vstgui\vstcontrols.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\vstgui.sf\vstgui\vstgui.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\vstgui.sf\vstgui\vstgui.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\adelay\adelay.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\adelay\adelay.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\adelay\editor\sdeditor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\adelay\editor\sdeditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\adelay\surrounddelay.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\adelay\surrounddelay.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\adelay\editor\resources\surrounddelay.rc
+# End Source File
+# Begin Source File
+
+SOURCE=..\win\vstplug.def
+# End Source File
+# End Target
+# End Project
diff --git a/public.sdk/samples/vst2.x/win.vc6/vstxsynth.dsp b/public.sdk/samples/vst2.x/win.vc6/vstxsynth.dsp
new file mode 100644
index 0000000..bc4c380
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win.vc6/vstxsynth.dsp
@@ -0,0 +1,167 @@
+# Microsoft Developer Studio Project File - Name="vstxsynth" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=vstxsynth - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "vstxsynth.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "vstxsynth.mak" CFG="vstxsynth - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "vstxsynth - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "vstxsynth - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "vstxsynth - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release/vstxynth"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VSTXSYNTH_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../.." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VSTXSYNTH_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+
+!ELSEIF "$(CFG)" == "vstxsynth - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "vstxsynth___Win32_Debug"
+# PROP BASE Intermediate_Dir "vstxsynth___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug/vstxsynth"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VSTXSYNTH_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../.." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VSTXSYNTH_EXPORTS" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "vstxsynth - Win32 Release"
+# Name "vstxsynth - Win32 Debug"
+# Begin Group "Interfaces"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\aeffect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\aeffectx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\pluginterfaces\vst2.x\vstfxstore.h
+# End Source File
+# End Group
+# Begin Group "Source Files"
+
+# PROP Default_Filter ""
+# Begin Group "vst2.x"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\aeffeditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffect.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffectx.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\audioeffectx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\vst2.x\vstplugmain.cpp
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\vstxsynth\source\gmnames.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\vstxsynth\source\vstxsynth.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\vstxsynth\source\vstxsynth.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\vstxsynth\source\vstxsynthproc.cpp
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\win\vstplug.def
+# End Source File
+# Begin Source File
+
+SOURCE=..\vstxsynth\resource\vstxsynth.rc
+# End Source File
+# Begin Source File
+
+SOURCE=..\vstxsynth\resource\vstxsynth.vstxml
+# End Source File
+# End Target
+# End Project
diff --git a/public.sdk/samples/vst2.x/win/samples.sln b/public.sdk/samples/vst2.x/win/samples.sln
new file mode 100644
index 0000000..45b49b6
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win/samples.sln
@@ -0,0 +1,76 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "again", "..\again\win\again.vcproj", "{59248302-52E0-4CC0-9BBE-E475BA4A9B41}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minihost", "..\minihost\win\minihost.vcproj", "{D36A7267-C114-4C52-8299-18BD15D0D690}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vstxsynth", "..\vstxsynth\win\vstxsynth.vcproj", "{863D9E7E-5322-49C8-89BA-A761DC0EE438}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "drawtest", "..\..\..\..\vstgui.sf\drawtest\win\drawtest.vcproj", "{462BDB40-3821-4576-B239-EC322C244E31}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adelay", "..\adelay\win\adelay.vcproj", "{6503B2E8-BC8D-4D80-809C-D43694296419}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "surrounddelay", "..\adelay\win\surrounddelay.vcproj", "{29898D14-EB2A-41D4-A530-728821929A0D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {59248302-52E0-4CC0-9BBE-E475BA4A9B41}.Debug|Win32.ActiveCfg = Debug|Win32
+ {59248302-52E0-4CC0-9BBE-E475BA4A9B41}.Debug|Win32.Build.0 = Debug|Win32
+ {59248302-52E0-4CC0-9BBE-E475BA4A9B41}.Debug|x64.ActiveCfg = Debug|x64
+ {59248302-52E0-4CC0-9BBE-E475BA4A9B41}.Debug|x64.Build.0 = Debug|x64
+ {59248302-52E0-4CC0-9BBE-E475BA4A9B41}.Release|Win32.ActiveCfg = Release|Win32
+ {59248302-52E0-4CC0-9BBE-E475BA4A9B41}.Release|Win32.Build.0 = Release|Win32
+ {59248302-52E0-4CC0-9BBE-E475BA4A9B41}.Release|x64.ActiveCfg = Release|x64
+ {59248302-52E0-4CC0-9BBE-E475BA4A9B41}.Release|x64.Build.0 = Release|x64
+ {D36A7267-C114-4C52-8299-18BD15D0D690}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D36A7267-C114-4C52-8299-18BD15D0D690}.Debug|Win32.Build.0 = Debug|Win32
+ {D36A7267-C114-4C52-8299-18BD15D0D690}.Debug|x64.ActiveCfg = Debug|x64
+ {D36A7267-C114-4C52-8299-18BD15D0D690}.Debug|x64.Build.0 = Debug|x64
+ {D36A7267-C114-4C52-8299-18BD15D0D690}.Release|Win32.ActiveCfg = Release|Win32
+ {D36A7267-C114-4C52-8299-18BD15D0D690}.Release|Win32.Build.0 = Release|Win32
+ {D36A7267-C114-4C52-8299-18BD15D0D690}.Release|x64.ActiveCfg = Release|x64
+ {D36A7267-C114-4C52-8299-18BD15D0D690}.Release|x64.Build.0 = Release|x64
+ {863D9E7E-5322-49C8-89BA-A761DC0EE438}.Debug|Win32.ActiveCfg = Debug|Win32
+ {863D9E7E-5322-49C8-89BA-A761DC0EE438}.Debug|Win32.Build.0 = Debug|Win32
+ {863D9E7E-5322-49C8-89BA-A761DC0EE438}.Debug|x64.ActiveCfg = Debug|x64
+ {863D9E7E-5322-49C8-89BA-A761DC0EE438}.Debug|x64.Build.0 = Debug|x64
+ {863D9E7E-5322-49C8-89BA-A761DC0EE438}.Release|Win32.ActiveCfg = Release|Win32
+ {863D9E7E-5322-49C8-89BA-A761DC0EE438}.Release|Win32.Build.0 = Release|Win32
+ {863D9E7E-5322-49C8-89BA-A761DC0EE438}.Release|x64.ActiveCfg = Release|x64
+ {863D9E7E-5322-49C8-89BA-A761DC0EE438}.Release|x64.Build.0 = Release|x64
+ {462BDB40-3821-4576-B239-EC322C244E31}.Debug|Win32.ActiveCfg = Debug|Win32
+ {462BDB40-3821-4576-B239-EC322C244E31}.Debug|Win32.Build.0 = Debug|Win32
+ {462BDB40-3821-4576-B239-EC322C244E31}.Debug|x64.ActiveCfg = Debug|x64
+ {462BDB40-3821-4576-B239-EC322C244E31}.Debug|x64.Build.0 = Debug|x64
+ {462BDB40-3821-4576-B239-EC322C244E31}.Release|Win32.ActiveCfg = Release|Win32
+ {462BDB40-3821-4576-B239-EC322C244E31}.Release|Win32.Build.0 = Release|Win32
+ {462BDB40-3821-4576-B239-EC322C244E31}.Release|x64.ActiveCfg = Release|x64
+ {462BDB40-3821-4576-B239-EC322C244E31}.Release|x64.Build.0 = Release|x64
+ {6503B2E8-BC8D-4D80-809C-D43694296419}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6503B2E8-BC8D-4D80-809C-D43694296419}.Debug|Win32.Build.0 = Debug|Win32
+ {6503B2E8-BC8D-4D80-809C-D43694296419}.Debug|x64.ActiveCfg = Debug|x64
+ {6503B2E8-BC8D-4D80-809C-D43694296419}.Debug|x64.Build.0 = Debug|x64
+ {6503B2E8-BC8D-4D80-809C-D43694296419}.Release|Win32.ActiveCfg = Release|Win32
+ {6503B2E8-BC8D-4D80-809C-D43694296419}.Release|Win32.Build.0 = Release|Win32
+ {6503B2E8-BC8D-4D80-809C-D43694296419}.Release|x64.ActiveCfg = Release|x64
+ {6503B2E8-BC8D-4D80-809C-D43694296419}.Release|x64.Build.0 = Release|x64
+ {29898D14-EB2A-41D4-A530-728821929A0D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {29898D14-EB2A-41D4-A530-728821929A0D}.Debug|Win32.Build.0 = Debug|Win32
+ {29898D14-EB2A-41D4-A530-728821929A0D}.Debug|x64.ActiveCfg = Debug|x64
+ {29898D14-EB2A-41D4-A530-728821929A0D}.Debug|x64.Build.0 = Debug|x64
+ {29898D14-EB2A-41D4-A530-728821929A0D}.Release|Win32.ActiveCfg = Release|Win32
+ {29898D14-EB2A-41D4-A530-728821929A0D}.Release|Win32.Build.0 = Release|Win32
+ {29898D14-EB2A-41D4-A530-728821929A0D}.Release|x64.ActiveCfg = Release|x64
+ {29898D14-EB2A-41D4-A530-728821929A0D}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/public.sdk/samples/vst2.x/win/vstplug.def b/public.sdk/samples/vst2.x/win/vstplug.def
new file mode 100644
index 0000000..081bdbd
--- /dev/null
+++ b/public.sdk/samples/vst2.x/win/vstplug.def
@@ -0,0 +1,3 @@
+EXPORTS
+ VSTPluginMain
+ main=VSTPluginMain
\ No newline at end of file
diff --git a/public.sdk/source/vst2.x/aeffeditor.h b/public.sdk/source/vst2.x/aeffeditor.h
new file mode 100644
index 0000000..d23630a
--- /dev/null
+++ b/public.sdk/source/vst2.x/aeffeditor.h
@@ -0,0 +1,61 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/01/12 09:05:31 $
+//
+// Category : VST 2.x Classes
+// Filename : aeffeditor.h
+// Created by : Steinberg Media Technologies
+// Description : Editor Class for VST Plug-Ins
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __aeffeditor__
+#define __aeffeditor__
+
+#include "audioeffectx.h"
+
+//-------------------------------------------------------------------------------------------------------
+/** VST Effect Editor class. */
+//-------------------------------------------------------------------------------------------------------
+class AEffEditor
+{
+public:
+//-------------------------------------------------------------------------------------------------------
+ AEffEditor (AudioEffect* effect = 0) ///< Editor class constructor. Requires pointer to associated effect instance.
+ : effect (effect)
+ , systemWindow (0)
+ {}
+
+ virtual ~AEffEditor () ///< Editor class destructor.
+ {}
+
+ virtual AudioEffect* getEffect () { return effect; } ///< Returns associated effect instance
+ virtual bool getRect (ERect** rect) { *rect = 0; return false; } ///< Query editor size as #ERect
+ virtual bool open (void* ptr) { systemWindow = ptr; return 0; } ///< Open editor, pointer to parent windows is platform-dependent (HWND on Windows, WindowRef on Mac).
+ virtual void close () { systemWindow = 0; } ///< Close editor (detach from parent window)
+ virtual bool isOpen () { return systemWindow != 0; } ///< Returns true if editor is currently open
+ virtual void idle () {} ///< Idle call supplied by Host application
+
+#if TARGET_API_MAC_CARBON
+ virtual void DECLARE_VST_DEPRECATED (draw) (ERect* rect) {}
+ virtual VstInt32 DECLARE_VST_DEPRECATED (mouse) (VstInt32 x, VstInt32 y) { return 0; }
+ virtual VstInt32 DECLARE_VST_DEPRECATED (key) (VstInt32 keyCode) { return 0; }
+ virtual void DECLARE_VST_DEPRECATED (top) () {}
+ virtual void DECLARE_VST_DEPRECATED (sleep) () {}
+#endif
+
+#if VST_2_1_EXTENSIONS
+ virtual bool onKeyDown (VstKeyCode& keyCode) { return false; } ///< Receive key down event. Return true only if key was really used!
+ virtual bool onKeyUp (VstKeyCode& keyCode) { return false; } ///< Receive key up event. Return true only if key was really used!
+ virtual bool onWheel (float distance) { return false; } ///< Handle mouse wheel event, distance is positive or negative to indicate wheel direction.
+ virtual bool setKnobMode (VstInt32 val) { return false; } ///< Set knob mode (if supported by Host). See CKnobMode in VSTGUI.
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+protected:
+ AudioEffect* effect; ///< associated effect instance
+ void* systemWindow; ///< platform-dependent parent window (HWND or WindowRef)
+};
+
+#endif // __aeffeditor__
diff --git a/public.sdk/source/vst2.x/audioeffect.cpp b/public.sdk/source/vst2.x/audioeffect.cpp
new file mode 100644
index 0000000..916ad7f
--- /dev/null
+++ b/public.sdk/source/vst2.x/audioeffect.cpp
@@ -0,0 +1,703 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/06/07 08:22:01 $
+//
+// Category : VST 2.x Classes
+// Filename : audioeffect.cpp
+// Created by : Steinberg Media Technologies
+// Description : Class AudioEffect (VST 1.0)
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#include "audioeffect.h"
+#include "aeffeditor.h"
+
+#include
+#include
+#include
+
+//-------------------------------------------------------------------------------------------------------
+VstIntPtr AudioEffect::dispatchEffectClass (AEffect* e, VstInt32 opCode, VstInt32 index, VstIntPtr value, void* ptr, float opt)
+{
+ AudioEffect* ae = (AudioEffect*)(e->object);
+
+ if (opCode == effClose)
+ {
+ ae->dispatcher (opCode, index, value, ptr, opt);
+ delete ae;
+ return 1;
+ }
+
+ return ae->dispatcher (opCode, index, value, ptr, opt);
+}
+
+//-------------------------------------------------------------------------------------------------------
+float AudioEffect::getParameterClass (AEffect* e, VstInt32 index)
+{
+ AudioEffect* ae = (AudioEffect*)(e->object);
+ return ae->getParameter (index);
+}
+
+//-------------------------------------------------------------------------------------------------------
+void AudioEffect::setParameterClass (AEffect* e, VstInt32 index, float value)
+{
+ AudioEffect* ae = (AudioEffect*)(e->object);
+ ae->setParameter (index, value);
+}
+
+//-------------------------------------------------------------------------------------------------------
+void AudioEffect::DECLARE_VST_DEPRECATED (processClass) (AEffect* e, float** inputs, float** outputs, VstInt32 sampleFrames)
+{
+ AudioEffect* ae = (AudioEffect*)(e->object);
+ ae->DECLARE_VST_DEPRECATED (process) (inputs, outputs, sampleFrames);
+}
+
+//-------------------------------------------------------------------------------------------------------
+void AudioEffect::processClassReplacing (AEffect* e, float** inputs, float** outputs, VstInt32 sampleFrames)
+{
+ AudioEffect* ae = (AudioEffect*)(e->object);
+ ae->processReplacing (inputs, outputs, sampleFrames);
+}
+
+//-------------------------------------------------------------------------------------------------------
+#if VST_2_4_EXTENSIONS
+void AudioEffect::processClassDoubleReplacing (AEffect* e, double** inputs, double** outputs, VstInt32 sampleFrames)
+{
+ AudioEffect* ae = (AudioEffect*)(e->object);
+ ae->processDoubleReplacing (inputs, outputs, sampleFrames);
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+// Class AudioEffect Implementation
+//-------------------------------------------------------------------------------------------------------
+/*!
+ The constructor of your class is passed a parameter of the type \e audioMasterCallback. The actual
+ mechanism in which your class gets constructed is not important right now. Effectively your class is
+ constructed by the hosting application, which passes an object of type \e audioMasterCallback that
+ handles the interaction with the plug-in. You pass this on to the base class' constructor and then
+ can forget about it.
+
+ \param audioMaster Passed by the Host and handles interaction
+ \param numPrograms Pass the number of programs the plug-in provides
+ \param numParams Pass the number of parameters the plug-in provides
+
+\code
+MyPlug::MyPlug (audioMasterCallback audioMaster)
+: AudioEffectX (audioMaster, 1, 1) // 1 program, 1 parameter only
+{
+ setNumInputs (2); // stereo in
+ setNumOutputs (2); // stereo out
+ setUniqueID ('MyPl'); // you must change this for other plug-ins!
+ canProcessReplacing (); // supports replacing mode
+}
+\endcode
+
+ \sa setNumInputs, setNumOutputs, setUniqueID, canProcessReplacing
+*/
+AudioEffect::AudioEffect (audioMasterCallback audioMaster, VstInt32 numPrograms, VstInt32 numParams)
+: audioMaster (audioMaster)
+, editor (0)
+, sampleRate (44100.f)
+, blockSize (1024)
+, numPrograms (numPrograms)
+, numParams (numParams)
+, curProgram (0)
+{
+ memset (&cEffect, 0, sizeof (cEffect));
+
+ cEffect.magic = kEffectMagic;
+ cEffect.dispatcher = dispatchEffectClass;
+ cEffect.DECLARE_VST_DEPRECATED (process) = DECLARE_VST_DEPRECATED (processClass);
+ cEffect.setParameter = setParameterClass;
+ cEffect.getParameter = getParameterClass;
+ cEffect.numPrograms = numPrograms;
+ cEffect.numParams = numParams;
+ cEffect.numInputs = 1; // mono input
+ cEffect.numOutputs = 2; // stereo output
+ cEffect.DECLARE_VST_DEPRECATED (ioRatio) = 1.f;
+ cEffect.object = this;
+ cEffect.uniqueID = CCONST ('N', 'o', 'E', 'f');
+ cEffect.version = 1;
+ cEffect.processReplacing = processClassReplacing;
+
+#if VST_2_4_EXTENSIONS
+ canProcessReplacing (); // mandatory in VST 2.4!
+ cEffect.processDoubleReplacing = processClassDoubleReplacing;
+#endif
+}
+
+//-------------------------------------------------------------------------------------------------------
+AudioEffect::~AudioEffect ()
+{
+ if (editor)
+ delete editor;
+}
+
+//-------------------------------------------------------------------------------------------------------
+void AudioEffect::setEditor (AEffEditor* editor)
+{
+ this->editor = editor;
+ if (editor)
+ cEffect.flags |= effFlagsHasEditor;
+ else
+ cEffect.flags &= ~effFlagsHasEditor;
+}
+
+//-------------------------------------------------------------------------------------------------------
+VstIntPtr AudioEffect::dispatcher (VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt)
+{
+ VstIntPtr v = 0;
+
+ switch (opcode)
+ {
+ case effOpen: open (); break;
+ case effClose: close (); break;
+ case effSetProgram: if (value < numPrograms) setProgram ((VstInt32)value); break;
+ case effGetProgram: v = getProgram (); break;
+ case effSetProgramName: setProgramName ((char*)ptr); break;
+ case effGetProgramName: getProgramName ((char*)ptr); break;
+ case effGetParamLabel: getParameterLabel (index, (char*)ptr); break;
+ case effGetParamDisplay: getParameterDisplay (index, (char*)ptr); break;
+ case effGetParamName: getParameterName (index, (char*)ptr); break;
+
+ case effSetSampleRate: setSampleRate (opt); break;
+ case effSetBlockSize: setBlockSize ((VstInt32)value); break;
+ case effMainsChanged: if (!value) suspend (); else resume (); break;
+ #if !VST_FORCE_DEPRECATED
+ case effGetVu: v = (VstIntPtr)(getVu () * 32767.); break;
+ #endif
+
+ //---Editor------------
+ case effEditGetRect: if (editor) v = editor->getRect ((ERect**)ptr) ? 1 : 0; break;
+ case effEditOpen: if (editor) v = editor->open (ptr) ? 1 : 0; break;
+ case effEditClose: if (editor) editor->close (); break;
+ case effEditIdle: if (editor) editor->idle (); break;
+
+ #if (TARGET_API_MAC_CARBON && !VST_FORCE_DEPRECATED)
+ case effEditDraw: if (editor) editor->draw ((ERect*)ptr); break;
+ case effEditMouse: if (editor) v = editor->mouse (index, value); break;
+ case effEditKey: if (editor) v = editor->key (value); break;
+ case effEditTop: if (editor) editor->top (); break;
+ case effEditSleep: if (editor) editor->sleep (); break;
+ #endif
+
+ case DECLARE_VST_DEPRECATED (effIdentify): v = CCONST ('N', 'v', 'E', 'f'); break;
+
+ //---Persistence-------
+ case effGetChunk: v = getChunk ((void**)ptr, index ? true : false); break;
+ case effSetChunk: v = setChunk (ptr, (VstInt32)value, index ? true : false); break;
+ }
+ return v;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ Use to ask for the Host's version
+ \return The Host's version
+*/
+VstInt32 AudioEffect::getMasterVersion ()
+{
+ VstInt32 version = 1;
+ if (audioMaster)
+ {
+ version = (VstInt32)audioMaster (&cEffect, audioMasterVersion, 0, 0, 0, 0);
+ if (!version) // old
+ version = 1;
+ }
+ return version;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \sa AudioEffectX::getNextShellPlugin
+*/
+VstInt32 AudioEffect::getCurrentUniqueId ()
+{
+ VstInt32 id = 0;
+ if (audioMaster)
+ id = (VstInt32)audioMaster (&cEffect, audioMasterCurrentId, 0, 0, 0, 0);
+ return id;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ Give idle time to Host application, e.g. if plug-in editor is doing mouse tracking in a modal loop.
+*/
+void AudioEffect::masterIdle ()
+{
+ if (audioMaster)
+ audioMaster (&cEffect, audioMasterIdle, 0, 0, 0, 0);
+}
+
+//-------------------------------------------------------------------------------------------------------
+bool AudioEffect::DECLARE_VST_DEPRECATED (isInputConnected) (VstInt32 input)
+{
+ VstInt32 ret = 0;
+ if (audioMaster)
+ ret = (VstInt32)audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterPinConnected), input, 0, 0, 0);
+ return ret ? false : true; // return value is 0 for true
+}
+
+//-------------------------------------------------------------------------------------------------------
+bool AudioEffect::DECLARE_VST_DEPRECATED (isOutputConnected) (VstInt32 output)
+{
+ VstInt32 ret = 0;
+ if (audioMaster)
+ ret = (VstInt32)audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterPinConnected), output, 1, 0, 0);
+ return ret ? false : true; // return value is 0 for true
+}
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \param index parameter index
+ \param float parameter value
+
+ \note An important thing to notice is that if the user changes a parameter in your editor, which is
+ out of the Host's control if you are not using the default string based interface, you should
+ call setParameterAutomated (). This ensures that the Host is notified of the parameter change, which
+ allows it to record these changes for automation.
+
+ \sa setParameter
+*/
+void AudioEffect::setParameterAutomated (VstInt32 index, float value)
+{
+ setParameter (index, value);
+ if (audioMaster)
+ audioMaster (&cEffect, audioMasterAutomate, index, 0, 0, value); // value is in opt
+}
+
+//-------------------------------------------------------------------------------------------------------
+// Flags
+//-------------------------------------------------------------------------------------------------------
+void AudioEffect::DECLARE_VST_DEPRECATED (hasVu) (bool state)
+{
+ if (state)
+ cEffect.flags |= DECLARE_VST_DEPRECATED (effFlagsHasVu);
+ else
+ cEffect.flags &= ~DECLARE_VST_DEPRECATED (effFlagsHasVu);
+}
+
+//-------------------------------------------------------------------------------------------------------
+void AudioEffect::DECLARE_VST_DEPRECATED (hasClip) (bool state)
+{
+ if (state)
+ cEffect.flags |= DECLARE_VST_DEPRECATED (effFlagsHasClip);
+ else
+ cEffect.flags &= ~DECLARE_VST_DEPRECATED (effFlagsHasClip);
+}
+
+//-------------------------------------------------------------------------------------------------------
+void AudioEffect::DECLARE_VST_DEPRECATED (canMono) (bool state)
+{
+ if (state)
+ cEffect.flags |= DECLARE_VST_DEPRECATED (effFlagsCanMono);
+ else
+ cEffect.flags &= ~DECLARE_VST_DEPRECATED (effFlagsCanMono);
+}
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \param state Set to \e true if supported
+
+ \note Needs to be called in the plug-in's constructor
+*/
+void AudioEffect::canProcessReplacing (bool state)
+{
+ if (state)
+ cEffect.flags |= effFlagsCanReplacing;
+ else
+ cEffect.flags &= ~effFlagsCanReplacing;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \param state Set to \e true if supported
+
+ \note Needs to be called in the plug-in's constructor
+*/
+#if VST_2_4_EXTENSIONS
+void AudioEffect::canDoubleReplacing (bool state)
+{
+ if (state)
+ cEffect.flags |= effFlagsCanDoubleReplacing;
+ else
+ cEffect.flags &= ~effFlagsCanDoubleReplacing;
+}
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \param state Set \e true if programs are chunks
+
+ \note Needs to be called in the plug-in's constructor
+*/
+void AudioEffect::programsAreChunks (bool state)
+{
+ if (state)
+ cEffect.flags |= effFlagsProgramChunks;
+ else
+ cEffect.flags &= ~effFlagsProgramChunks;
+}
+
+//-------------------------------------------------------------------------------------------------------
+void AudioEffect::DECLARE_VST_DEPRECATED (setRealtimeQualities) (VstInt32 qualities)
+{
+ cEffect.DECLARE_VST_DEPRECATED (realQualities) = qualities;
+}
+
+//-------------------------------------------------------------------------------------------------------
+void AudioEffect::DECLARE_VST_DEPRECATED (setOfflineQualities) (VstInt32 qualities)
+{
+ cEffect.DECLARE_VST_DEPRECATED (offQualities) = qualities;
+}
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ Use to report the Plug-in's latency (Group Delay)
+
+ \param delay Plug-ins delay in samples
+*/
+void AudioEffect::setInitialDelay (VstInt32 delay)
+{
+ cEffect.initialDelay = delay;
+}
+
+//-------------------------------------------------------------------------------------------------------
+// Strings Conversion
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \param value Value to convert
+ \param text String up to length char
+ \param maxLen Maximal length of the string
+*/
+void AudioEffect::dB2string (float value, char* text, VstInt32 maxLen)
+{
+ if (value <= 0)
+ vst_strncpy (text, "-oo", maxLen);
+ else
+ float2string ((float)(20. * log10 (value)), text, maxLen);
+}
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \param samples Number of samples
+ \param text String up to length char
+ \param maxLen Maximal length of the string
+*/
+void AudioEffect::Hz2string (float samples, char* text, VstInt32 maxLen)
+{
+ float sampleRate = getSampleRate ();
+ if (!samples)
+ float2string (0, text, maxLen);
+ else
+ float2string (sampleRate / samples, text, maxLen);
+}
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \param samples Number of samples
+ \param text String up to length char
+ \param maxLen Maximal length of the string
+*/
+void AudioEffect::ms2string (float samples, char* text, VstInt32 maxLen)
+{
+ float2string ((float)(samples * 1000. / getSampleRate ()), text, maxLen);
+}
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \param value Value to convert
+ \param text String up to length char
+ \param maxLen Maximal length of the string
+*/
+void AudioEffect::float2string (float value, char* text, VstInt32 maxLen)
+{
+ VstInt32 c = 0, neg = 0;
+ char string[32];
+ char* s;
+ double v, integ, i10, mantissa, m10, ten = 10.;
+
+ v = (double)value;
+ if (v < 0)
+ {
+ neg = 1;
+ value = -value;
+ v = -v;
+ c++;
+ if (v > 9999999.)
+ {
+ vst_strncpy (string, "Huge!", 31);
+ return;
+ }
+ }
+ else if (v > 99999999.)
+ {
+ vst_strncpy (string, "Huge!", 31);
+ return;
+ }
+
+ s = string + 31;
+ *s-- = 0;
+ *s-- = '.';
+ c++;
+
+ integ = floor (v);
+ i10 = fmod (integ, ten);
+ *s-- = (char)((VstInt32)i10 + '0');
+ integ /= ten;
+ c++;
+ while (integ >= 1. && c < 8)
+ {
+ i10 = fmod (integ, ten);
+ *s-- = (char)((VstInt32)i10 + '0');
+ integ /= ten;
+ c++;
+ }
+ if (neg)
+ *s-- = '-';
+ vst_strncpy (text, s + 1, maxLen);
+ if (c >= 8)
+ return;
+
+ s = string + 31;
+ *s-- = 0;
+ mantissa = fmod (v, 1.);
+ mantissa *= pow (ten, (double)(8 - c));
+ while (c < 8)
+ {
+ if (mantissa <= 0)
+ *s-- = '0';
+ else
+ {
+ m10 = fmod (mantissa, ten);
+ *s-- = (char)((VstInt32)m10 + '0');
+ mantissa /= 10.;
+ }
+ c++;
+ }
+ vst_strncat (text, s + 1, maxLen);
+}
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \param value Value to convert
+ \param text String up to length char
+ \param maxLen Maximal length of the string
+*/
+void AudioEffect::int2string (VstInt32 value, char* text, VstInt32 maxLen)
+{
+ if (value >= 100000000)
+ {
+ vst_strncpy (text, "Huge!", maxLen);
+ return;
+ }
+
+ if (value < 0)
+ {
+ vst_strncpy (text, "-", maxLen);
+ value = -value;
+ }
+ else
+ vst_strncpy (text, "", maxLen);
+
+ bool state = false;
+ for (VstInt32 div = 100000000; div >= 1; div /= 10)
+ {
+ VstInt32 digit = value / div;
+ value -= digit * div;
+ if (state || digit > 0)
+ {
+ char temp[2] = {'0' + (char)digit, '\0'};
+ vst_strncat (text, temp, maxLen);
+ state = true;
+ }
+ }
+}
+//-------------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
+
+ This process method must be provided. It takes input data, applies its pocessing algorithm, and then puts the
+ result to the output by overwriting the output buffer.
+
+ \param inputs An array of pointers to the data
+ \param outputs An array of pointers to where the data can be written to
+ \param sampleFrames Number of sample frames to process
+
+ \warning Never call any Mac OS 9 functions (or other functions which call into the OS) inside your
+ audio process function! This will crash the system when your plug-in is run in MP (multiprocessor) mode.
+ If you must call into the OS, you must use MPRemoteCall () (see Apples' documentation), or
+ explicitly use functions which are documented by Apple to be MP safe. On Mac OS X read the system
+ header files to be sure that you only call thread safe functions.
+
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::setBlockSize (VstInt32 blockSize)
+
+ This is called by the Host, and tells the plug-in that the maximum block size passed to
+ processReplacing() will be \e blockSize.
+
+ \param blockSize Maximum number of sample frames
+
+ \warning You must process exactly \e sampleFrames number of samples in inside processReplacing, not more!
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::setParameter (VstInt32 index, float value)
+
+ Parameters are the individual parameter settings the user can adjust. A VST Host can automate these
+ parameters. Set parameter \e index to \e value.
+
+ \param index Index of the parameter to change
+ \param value A float value between 0.0 and 1.0 inclusive
+
+ \note Parameter values, like all VST parameters, are declared as floats with an inclusive range of
+ 0.0 to 1.0. How data is presented to the user is merely in the user-interface handling. This is a
+ convention, but still worth regarding. Maybe the VST-Host's automation system depends on this range.
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn float AudioEffect::getParameter (VstInt32 index)
+
+ Return the \e value of parameter \e index
+
+ \param index Index of the parameter
+ \return A float value between 0.0 and 1.0 inclusive
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::getParameterLabel (VstInt32 index, char* label)
+
+ \param index Index of the parameter
+ \param label A string up to 8 char
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::getParameterDisplay (VstInt32 index, char* text)
+
+ \param index Index of the parameter
+ \param text A string up to 8 char
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffect::getProgram ()
+
+ \return Index of the current program
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::setProgram (VstInt32 program)
+
+ \param Program of the current program
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::getParameterName (VstInt32 index, char* text)
+
+ \param index Index of the parameter
+ \param text A string up to 8 char
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::setProgramName (char* name)
+
+ The program name is displayed in the rack, and can be edited by the user.
+
+ \param name A string up to 24 char
+
+ \warning Please be aware that the string lengths supported by the default VST interface are normally
+ limited to 24 characters. If you copy too much data into the buffers provided, you will break the
+ Host application.
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::getProgramName (char* name)
+
+ The program name is displayed in the rack, and can be edited by the user.
+
+ \param name A string up to 24 char
+
+ \warning Please be aware that the string lengths supported by the default VST interface are normally
+ limited to 24 characters. If you copy too much data into the buffers provided, you will break the
+ Host application.
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffect::getChunk (void** data, bool isPreset)
+
+ \param data should point to the newly allocated memory block containg state data. You can savely release it in next suspend/resume call.
+ \param isPreset true when saving a single program, false for all programs
+
+ \note
+ If your plug-in is configured to use chunks (see AudioEffect::programsAreChunks), the Host
+ will ask for a block of memory describing the current plug-in state for saving.
+ To restore the state at a later stage, the same data is passed back to AudioEffect::setChunk.
+ Alternatively, when not using chunk, the Host will simply save all parameter values.
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffect::setChunk (void* data, VstInt32 byteSize, bool isPreset)
+
+ \param data pointer to state data (owned by Host)
+ \param byteSize size of state data
+ \param isPreset true when restoring a single program, false for all programs
+
+ \sa getChunk
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::setNumInputs (VstInt32 inputs)
+
+ This number is fixed at construction time and can't change until the plug-in is destroyed.
+
+ \param inputs The number of inputs
+
+ \sa isInputConnected()
+
+ \note Needs to be called in the plug-in's constructor
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::setNumOutputs (VstInt32 outputs)
+
+ This number is fixed at construction time and can't change until the plug-in is destroyed.
+
+ \param outputs The number of outputs
+
+ \sa isOutputConnected()
+
+ \note Needs to be called in the plug-in's constructor
+*/
+
+//-------------------------------------------------------------------------------------------------------
+/*!
+ \fn void AudioEffect::setUniqueID (VstInt32 iD)
+
+ Must call this! Set the plug-in's unique identifier. The Host uses this to identify the plug-in, for
+ instance when it is loading effect programs and banks. On Steinberg Web Page you can find an UniqueID
+ Database where you can record your UniqueID, it will check if the ID is already used by an another
+ vendor. You can use CCONST('a','b','c','d') (defined in VST 2.0) to be platform independent to
+ initialize an UniqueID.
+
+ \param iD Plug-in's unique ID
+
+ \note Needs to be called in the plug-in's constructor
+*/
diff --git a/public.sdk/source/vst2.x/audioeffect.h b/public.sdk/source/vst2.x/audioeffect.h
new file mode 100644
index 0000000..7809347
--- /dev/null
+++ b/public.sdk/source/vst2.x/audioeffect.h
@@ -0,0 +1,177 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/06/06 16:01:34 $
+//
+// Category : VST 2.x Classes
+// Filename : audioeffect.h
+// Created by : Steinberg Media Technologies
+// Description : Class AudioEffect (VST 1.0)
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __audioeffect__
+#define __audioeffect__
+
+#include "pluginterfaces/vst2.x/aeffect.h" // "c" interface
+
+class AEffEditor;
+
+//-------------------------------------------------------------------------------------------------------
+/** VST Effect Base Class (VST 1.0). */
+//-------------------------------------------------------------------------------------------------------
+class AudioEffect
+{
+public:
+//-------------------------------------------------------------------------------------------------------
+ AudioEffect (audioMasterCallback audioMaster, VstInt32 numPrograms, VstInt32 numParams); ///< Create an \e AudioEffect object
+ virtual ~AudioEffect (); ///< Destroy an \e AudioEffect object
+
+ virtual VstIntPtr dispatcher (VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt); ///< Opcodes dispatcher
+
+//-------------------------------------------------------------------------------------------------------
+/// \name State Transitions
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual void open () {} ///< Called when plug-in is initialized
+ virtual void close () {} ///< Called when plug-in will be released
+ virtual void suspend () {} ///< Called when plug-in is switched to off
+ virtual void resume () {} ///< Called when plug-in is switched to on
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Processing
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual void setSampleRate (float sampleRate) { this->sampleRate = sampleRate; } ///< Called when the sample rate changes (always in a suspend state)
+ virtual void setBlockSize (VstInt32 blockSize) { this->blockSize = blockSize; } ///< Called when the Maximun block size changes (always in a suspend state). Note that the sampleFrames in Process Calls could be smaller than this block size, but NOT bigger.
+
+ virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames) = 0; ///< Process 32 bit (single precision) floats (always in a resume state)
+
+#if VST_2_4_EXTENSIONS
+ virtual void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames) {} ///< Process 64 bit (double precision) floats (always in a resume state) \sa processReplacing
+#endif // VST_2_4_EXTENSIONS
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Parameters
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual void setParameter (VstInt32 index, float value) {} ///< Called when a parameter changed
+ virtual float getParameter (VstInt32 index) { return 0; } ///< Return the value of the parameter with \e index
+ virtual void setParameterAutomated (VstInt32 index, float value);///< Called after a control has changed in the editor and when the associated parameter should be automated
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Programs and Persistence
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual VstInt32 getProgram () { return curProgram; } ///< Return the index to the current program
+ virtual void setProgram (VstInt32 program) { curProgram = program; } ///< Set the current program to \e program
+
+ virtual void setProgramName (char* name) {} ///< Stuff the name field of the current program with \e name. Limited to #kVstMaxProgNameLen.
+ virtual void getProgramName (char* name) { *name = 0; } ///< Stuff \e name with the name of the current program. Limited to #kVstMaxProgNameLen.
+
+ virtual void getParameterLabel (VstInt32 index, char* label) { *label = 0; } ///< Stuff \e label with the units in which parameter \e index is displayed (i.e. "sec", "dB", "type", etc...). Limited to #kVstMaxParamStrLen.
+ virtual void getParameterDisplay (VstInt32 index, char* text) { *text = 0; } ///< Stuff \e text with a string representation ("0.5", "-3", "PLATE", etc...) of the value of parameter \e index. Limited to #kVstMaxParamStrLen.
+ virtual void getParameterName (VstInt32 index, char* text) { *text = 0; } ///< Stuff \e text with the name ("Time", "Gain", "RoomType", etc...) of parameter \e index. Limited to #kVstMaxParamStrLen.
+
+ virtual VstInt32 getChunk (void** data, bool isPreset = false) { return 0; } ///< Host stores plug-in state. Returns the size in bytes of the chunk (plug-in allocates the data array)
+ virtual VstInt32 setChunk (void* data, VstInt32 byteSize, bool isPreset = false) { return 0; } ///< Host restores plug-in state
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Internal Setup
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual void setUniqueID (VstInt32 iD) { cEffect.uniqueID = iD; } ///< Must be called to set the plug-ins unique ID!
+ virtual void setNumInputs (VstInt32 inputs) { cEffect.numInputs = inputs; } ///< Set the number of inputs the plug-in will handle. For a plug-in which could change its IO configuration, this number is the maximun available inputs.
+ virtual void setNumOutputs (VstInt32 outputs) { cEffect.numOutputs = outputs; } ///< Set the number of outputs the plug-in will handle. For a plug-in which could change its IO configuration, this number is the maximun available ouputs.
+
+ virtual void canProcessReplacing (bool state = true); ///< Tells that processReplacing() could be used. Mandatory in VST 2.4!
+
+#if VST_2_4_EXTENSIONS
+ virtual void canDoubleReplacing (bool state = true); ///< Tells that processDoubleReplacing() is implemented.
+#endif // VST_2_4_EXTENSIONS
+
+ virtual void programsAreChunks (bool state = true); ///< Program data is handled in formatless chunks (using getChunk-setChunks)
+ virtual void setInitialDelay (VstInt32 delay); ///< Use to report the plug-in's latency (Group Delay)
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Editor
+//-------------------------------------------------------------------------------------------------------
+//@{
+ void setEditor (AEffEditor* editor); ///< Should be called if you want to define your own editor
+ virtual AEffEditor* getEditor () { return editor; } ///< Returns the attached editor
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Inquiry
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual AEffect* getAeffect () { return &cEffect; } ///< Returns the #AEffect structure
+ virtual float getSampleRate () { return sampleRate; } ///< Returns the current sample rate
+ virtual VstInt32 getBlockSize () { return blockSize; } ///< Returns the current Maximum block size
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Host Communication
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual VstInt32 getMasterVersion (); ///< Returns the Host's version (for example 2400 for VST 2.4)
+ virtual VstInt32 getCurrentUniqueId (); ///< Returns current unique identifier when loading shell plug-ins
+ virtual void masterIdle (); ///< Give idle time to Host application
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Tools (helpers)
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual void dB2string (float value, char* text, VstInt32 maxLen); ///< Stuffs \e text with an amplitude on the [0.0, 1.0] scale converted to its value in decibels.
+ virtual void Hz2string (float samples, char* text, VstInt32 maxLen); ///< Stuffs \e text with the frequency in Hertz that has a period of \e samples.
+ virtual void ms2string (float samples, char* text, VstInt32 maxLen); ///< Stuffs \e text with the duration in milliseconds of \e samples frames.
+ virtual void float2string (float value, char* text, VstInt32 maxLen); ///< Stuffs \e text with a string representation on the floating point \e value.
+ virtual void int2string (VstInt32 value, char* text, VstInt32 maxLen); ///< Stuffs \e text with a string representation on the integer \e value.
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+// Deprecated methods
+//-------------------------------------------------------------------------------------------------------
+/// @cond ignore
+ virtual void DECLARE_VST_DEPRECATED (process) (float** inputs, float** outputs, VstInt32 sampleFrames) {}
+ virtual float DECLARE_VST_DEPRECATED (getVu) () { return 0; }
+ virtual void DECLARE_VST_DEPRECATED (hasVu) (bool state = true);
+ virtual void DECLARE_VST_DEPRECATED (hasClip) (bool state = true);
+ virtual void DECLARE_VST_DEPRECATED (canMono) (bool state = true);
+ virtual void DECLARE_VST_DEPRECATED (setRealtimeQualities) (VstInt32 qualities);
+ virtual void DECLARE_VST_DEPRECATED (setOfflineQualities) (VstInt32 qualities);
+ virtual bool DECLARE_VST_DEPRECATED (isInputConnected) (VstInt32 input);
+ virtual bool DECLARE_VST_DEPRECATED (isOutputConnected) (VstInt32 output);
+/// @endcond
+
+//-------------------------------------------------------------------------------------------------------
+protected:
+ audioMasterCallback audioMaster; ///< Host callback
+ AEffEditor* editor; ///< Pointer to the plug-in's editor
+ float sampleRate; ///< Current sample rate
+ VstInt32 blockSize; ///< Maximum block size
+ VstInt32 numPrograms; ///< Number of programs
+ VstInt32 numParams; ///< Number of parameters
+ VstInt32 curProgram; ///< Current program
+ AEffect cEffect; ///< #AEffect object
+
+/// @cond ignore
+ static VstIntPtr dispatchEffectClass (AEffect* e, VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt);
+ static float getParameterClass (AEffect* e, VstInt32 index);
+ static void setParameterClass (AEffect* e, VstInt32 index, float value);
+ static void DECLARE_VST_DEPRECATED (processClass) (AEffect* e, float** inputs, float** outputs, VstInt32 sampleFrames);
+ static void processClassReplacing (AEffect* e, float** inputs, float** outputs, VstInt32 sampleFrames);
+
+#if VST_2_4_EXTENSIONS
+ static void processClassDoubleReplacing (AEffect* e, double** inputs, double** outputs, VstInt32 sampleFrames);
+#endif // VST_2_4_EXTENSIONS
+/// @endcond
+};
+
+#endif // __audioeffect__
diff --git a/public.sdk/source/vst2.x/audioeffectx.cpp b/public.sdk/source/vst2.x/audioeffectx.cpp
new file mode 100644
index 0000000..1f98919
--- /dev/null
+++ b/public.sdk/source/vst2.x/audioeffectx.cpp
@@ -0,0 +1,1546 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/10/05 14:23:59 $
+//
+// Category : VST 2.x Classes
+// Filename : audioeffectx.cpp
+// Created by : Steinberg Media Technologies
+// Description : Class AudioEffectX extends AudioEffect with new features. You should derive
+// your plug-in from AudioEffectX.
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#include "audioeffectx.h"
+#include "aeffeditor.h"
+
+//-------------------------------------------------------------------------------------------------------
+/*! hostCanDos strings Plug-in -> Host */
+namespace HostCanDos
+{
+ const char* canDoSendVstEvents = "sendVstEvents"; ///< Host supports send of Vst events to plug-in
+ const char* canDoSendVstMidiEvent = "sendVstMidiEvent"; ///< Host supports send of MIDI events to plug-in
+ const char* canDoSendVstTimeInfo = "sendVstTimeInfo"; ///< Host supports send of VstTimeInfo to plug-in
+ const char* canDoReceiveVstEvents = "receiveVstEvents"; ///< Host can receive Vst events from plug-in
+ const char* canDoReceiveVstMidiEvent = "receiveVstMidiEvent"; ///< Host can receive MIDI events from plug-in
+ const char* canDoReportConnectionChanges = "reportConnectionChanges"; ///< Host will indicates the plug-in when something change in plug-in´s routing/connections with #suspend/#resume/#setSpeakerArrangement
+ const char* canDoAcceptIOChanges = "acceptIOChanges"; ///< Host supports #ioChanged ()
+ const char* canDoSizeWindow = "sizeWindow"; ///< used by VSTGUI
+ const char* canDoOffline = "offline"; ///< Host supports offline feature
+ const char* canDoOpenFileSelector = "openFileSelector"; ///< Host supports function #openFileSelector ()
+ const char* canDoCloseFileSelector = "closeFileSelector"; ///< Host supports function #closeFileSelector ()
+ const char* canDoStartStopProcess = "startStopProcess"; ///< Host supports functions #startProcess () and #stopProcess ()
+ const char* canDoShellCategory = "shellCategory"; ///< 'shell' handling via uniqueID. If supported by the Host and the Plug-in has the category #kPlugCategShell
+ const char* canDoSendVstMidiEventFlagIsRealtime = "sendVstMidiEventFlagIsRealtime"; ///< Host supports flags for #VstMidiEvent
+}
+
+//-------------------------------------------------------------------------------------------------------
+/*! plugCanDos strings Host -> Plug-in */
+namespace PlugCanDos
+{
+ const char* canDoSendVstEvents = "sendVstEvents"; ///< plug-in will send Vst events to Host
+ const char* canDoSendVstMidiEvent = "sendVstMidiEvent"; ///< plug-in will send MIDI events to Host
+ const char* canDoReceiveVstEvents = "receiveVstEvents"; ///< plug-in can receive MIDI events from Host
+ const char* canDoReceiveVstMidiEvent = "receiveVstMidiEvent"; ///< plug-in can receive MIDI events from Host
+ const char* canDoReceiveVstTimeInfo = "receiveVstTimeInfo"; ///< plug-in can receive Time info from Host
+ const char* canDoOffline = "offline"; ///< plug-in supports offline functions (#offlineNotify, #offlinePrepare, #offlineRun)
+ const char* canDoMidiProgramNames = "midiProgramNames"; ///< plug-in supports function #getMidiProgramName ()
+ const char* canDoBypass = "bypass"; ///< plug-in supports function #setBypass ()
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+// Class AudioEffectX Implementation
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \sa AudioEffect()
+*/
+AudioEffectX::AudioEffectX (audioMasterCallback audioMaster, VstInt32 numPrograms, VstInt32 numParams)
+: AudioEffect (audioMaster, numPrograms, numParams)
+{}
+
+//-----------------------------------------------------------------------------------------------------------------
+VstIntPtr AudioEffectX::dispatcher (VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt)
+{
+ VstIntPtr v = 0;
+ switch (opcode)
+ {
+ //---VstEvents----------------------
+ case effProcessEvents:
+ v = processEvents ((VstEvents*)ptr);
+ break;
+
+ //---Parameters and Programs----------------------
+ case effCanBeAutomated:
+ v = canParameterBeAutomated (index) ? 1 : 0;
+ break;
+ case effString2Parameter:
+ v = string2parameter (index, (char*)ptr) ? 1 : 0;
+ break;
+
+ case effGetProgramNameIndexed:
+ v = getProgramNameIndexed ((VstInt32)value, index, (char*)ptr) ? 1 : 0;
+ break;
+ #if !VST_FORCE_DEPRECATED
+ case effGetNumProgramCategories:
+ v = getNumCategories ();
+ break;
+ case effCopyProgram:
+ v = copyProgram (index) ? 1 : 0;
+ break;
+
+ //---Connections, Configuration----------------------
+ case effConnectInput:
+ inputConnected (index, value ? true : false);
+ v = 1;
+ break;
+ case effConnectOutput:
+ outputConnected (index, value ? true : false);
+ v = 1;
+ break;
+ #endif // !VST_FORCE_DEPRECATED
+
+ case effGetInputProperties:
+ v = getInputProperties (index, (VstPinProperties*)ptr) ? 1 : 0;
+ break;
+ case effGetOutputProperties:
+ v = getOutputProperties (index, (VstPinProperties*)ptr) ? 1 : 0;
+ break;
+ case effGetPlugCategory:
+ v = (VstIntPtr)getPlugCategory ();
+ break;
+
+ #if !VST_FORCE_DEPRECATED
+ //---Realtime----------------------
+ case effGetCurrentPosition:
+ v = reportCurrentPosition ();
+ break;
+
+ case effGetDestinationBuffer:
+ v = ToVstPtr (reportDestinationBuffer ());
+ break;
+ #endif // !VST_FORCE_DEPRECATED
+
+ //---Offline----------------------
+ case effOfflineNotify:
+ v = offlineNotify ((VstAudioFile*)ptr, (VstInt32)value, index != 0);
+ break;
+ case effOfflinePrepare:
+ v = offlinePrepare ((VstOfflineTask*)ptr, (VstInt32)value);
+ break;
+ case effOfflineRun:
+ v = offlineRun ((VstOfflineTask*)ptr, (VstInt32)value);
+ break;
+
+ //---Others----------------------
+ case effSetSpeakerArrangement:
+ v = setSpeakerArrangement (FromVstPtr (value), (VstSpeakerArrangement*)ptr) ? 1 : 0;
+ break;
+ case effProcessVarIo:
+ v = processVariableIo ((VstVariableIo*)ptr) ? 1 : 0;
+ break;
+ #if !VST_FORCE_DEPRECATED
+ case effSetBlockSizeAndSampleRate:
+ setBlockSizeAndSampleRate ((VstInt32)value, opt);
+ v = 1;
+ break;
+ #endif // !VST_FORCE_DEPRECATED
+ case effSetBypass:
+ v = setBypass (value ? true : false) ? 1 : 0;
+ break;
+ case effGetEffectName:
+ v = getEffectName ((char*)ptr) ? 1 : 0;
+ break;
+ case effGetVendorString:
+ v = getVendorString ((char*)ptr) ? 1 : 0;
+ break;
+ case effGetProductString:
+ v = getProductString ((char*)ptr) ? 1 : 0;
+ break;
+ case effGetVendorVersion:
+ v = getVendorVersion ();
+ break;
+ case effVendorSpecific:
+ v = vendorSpecific (index, value, ptr, opt);
+ break;
+ case effCanDo:
+ v = canDo ((char*)ptr);
+ break;
+
+ case effGetTailSize:
+ v = getGetTailSize ();
+ break;
+
+ #if !VST_FORCE_DEPRECATED
+ case effGetErrorText:
+ v = getErrorText ((char*)ptr) ? 1 : 0;
+ break;
+
+ case effGetIcon:
+ v = ToVstPtr (getIcon ());
+ break;
+
+ case effSetViewPosition:
+ v = setViewPosition (index, (VstInt32)value) ? 1 : 0;
+ break;
+
+ case effIdle:
+ v = fxIdle ();
+ break;
+
+ case effKeysRequired:
+ v = (keysRequired () ? 0 : 1); // reversed to keep v1 compatibility
+ break;
+ #endif // !VST_FORCE_DEPRECATED
+
+ case effGetParameterProperties:
+ v = getParameterProperties (index, (VstParameterProperties*)ptr) ? 1 : 0;
+ break;
+
+ case effGetVstVersion:
+ v = getVstVersion ();
+ break;
+
+ //---Others----------------------
+ #if VST_2_1_EXTENSIONS
+ case effEditKeyDown:
+ if (editor)
+ {
+ VstKeyCode keyCode = {index, (unsigned char)value, (unsigned char)opt};
+ v = editor->onKeyDown (keyCode) ? 1 : 0;
+ }
+ break;
+
+ case effEditKeyUp:
+ if (editor)
+ {
+ VstKeyCode keyCode = {index, (unsigned char)value, (unsigned char)opt};
+ v = editor->onKeyUp (keyCode) ? 1 : 0;
+ }
+ break;
+
+ case effSetEditKnobMode:
+ if (editor)
+ v = editor->setKnobMode ((VstInt32)value) ? 1 : 0;
+ break;
+
+ case effGetMidiProgramName:
+ v = getMidiProgramName (index, (MidiProgramName*)ptr);
+ break;
+ case effGetCurrentMidiProgram:
+ v = getCurrentMidiProgram (index, (MidiProgramName*)ptr);
+ break;
+ case effGetMidiProgramCategory:
+ v = getMidiProgramCategory (index, (MidiProgramCategory*)ptr);
+ break;
+ case effHasMidiProgramsChanged:
+ v = hasMidiProgramsChanged (index) ? 1 : 0;
+ break;
+ case effGetMidiKeyName:
+ v = getMidiKeyName (index, (MidiKeyName*)ptr) ? 1 : 0;
+ break;
+ case effBeginSetProgram:
+ v = beginSetProgram () ? 1 : 0;
+ break;
+ case effEndSetProgram:
+ v = endSetProgram () ? 1 : 0;
+ break;
+ #endif // VST_2_1_EXTENSIONS
+
+ #if VST_2_3_EXTENSIONS
+ case effGetSpeakerArrangement:
+ v = getSpeakerArrangement (FromVstPtr (value), (VstSpeakerArrangement**)ptr) ? 1 : 0;
+ break;
+
+ case effSetTotalSampleToProcess:
+ v = setTotalSampleToProcess ((VstInt32)value);
+ break;
+
+ case effShellGetNextPlugin:
+ v = getNextShellPlugin ((char*)ptr);
+ break;
+
+ case effStartProcess:
+ v = startProcess ();
+ break;
+ case effStopProcess:
+ v = stopProcess ();
+ break;
+
+ case effSetPanLaw:
+ v = setPanLaw ((VstInt32)value, opt) ? 1 : 0;
+ break;
+
+ case effBeginLoadBank:
+ v = beginLoadBank ((VstPatchChunkInfo*)ptr);
+ break;
+ case effBeginLoadProgram:
+ v = beginLoadProgram ((VstPatchChunkInfo*)ptr);
+ break;
+ #endif // VST_2_3_EXTENSIONS
+
+ #if VST_2_4_EXTENSIONS
+ case effSetProcessPrecision :
+ v = setProcessPrecision ((VstInt32)value) ? 1 : 0;
+ break;
+
+ case effGetNumMidiInputChannels :
+ v = getNumMidiInputChannels ();
+ break;
+
+ case effGetNumMidiOutputChannels :
+ v = getNumMidiOutputChannels ();
+ break;
+ #endif // VST_2_4_EXTENSIONS
+
+ //---Version 1.0 or unknown-----------------
+ default:
+ v = AudioEffect::dispatcher (opcode, index, value, ptr, opt);
+ }
+ return v;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*! if this effect is a synth or can receive midi events, we call the deprecated wantEvents() as some host rely on it.
+*/
+void AudioEffectX::resume ()
+{
+ if (cEffect.flags & effFlagsIsSynth || canDo ("receiveVstMidiEvent") == 1)
+ DECLARE_VST_DEPRECATED (wantEvents) ();
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+void AudioEffectX::DECLARE_VST_DEPRECATED (wantEvents) (VstInt32 filter)
+{
+ if (audioMaster)
+ audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterWantMidi), 0, filter, 0, 0);
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ A plug-in will request time info by calling the function getTimeInfo() which returns a \e #VstTimeInfo
+ pointer (or NULL if not implemented by the Host). The mask parameter is composed of the same flags which
+ will be found in the flags field of \e #VstTimeInfo when returned, that is, if you need information about tempo.
+ The parameter passed to getTimeInfo() should have the \e #kVstTempoValid flag set. This request and delivery
+ system is important, as a request like this may cause significant calculations at the application's end, which
+ may take a lot of our precious time. This obviously means you should only set those flags that are required to
+ get the information you need. Also please be aware that requesting information does not necessarily mean that
+ that information is provided in return. Check the \e flags field in the \e #VstTimeInfo structure to see if your
+ request was actually met.
+
+ \param filter A mask indicating which fields are requested, as some items may require extensive conversions.
+ See the \e flags in #VstTimeInfo
+ \return A pointer to a #VstTimeInfo structure or NULL if not implemented by the Host
+*/
+VstTimeInfo* AudioEffectX::getTimeInfo (VstInt32 filter)
+{
+ if (audioMaster)
+ {
+ VstIntPtr ret = audioMaster (&cEffect, audioMasterGetTime, 0, filter, 0, 0);
+ return FromVstPtr (ret);
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+VstInt32 AudioEffectX::DECLARE_VST_DEPRECATED (tempoAt) (VstInt32 pos)
+{
+ if (audioMaster)
+ return (VstInt32)audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterTempoAt), 0, pos, 0, 0);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+bool AudioEffectX::sendVstEventsToHost (VstEvents* events)
+/*!
+ Can be called inside processReplacing.
+
+ \param events Fill with VST events
+ \return Returns \e true on success
+*/
+{
+ if (audioMaster)
+ return audioMaster (&cEffect, audioMasterProcessEvents, 0, 0, events, 0) == 1;
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::processEvents (VstEvents* events)
+
+ \return return value is ignored
+
+ \remarks Events are always related to the current audio block. For each process cycle, processEvents() is called
+ once before a processReplacing() call (if new events are available).
+
+ \sa VstEvents, VstMidiEvent
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+// Parameters Functions
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::canParameterBeAutomated (VstInt32 index)
+
+ Obviously only useful when the application supports this.
+
+ \param index Index of the parameter
+ \return \true if supported
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::string2parameter (VstInt32 index, char* text)
+
+ Especially useful for plug-ins without user interface. The application can then implement a text edit field for
+ the user to set a parameter by entering text.
+
+ \param index Index of the parameter
+ \param text A textual description of the parameter's value. A NULL pointer is used to check the capability
+ (return true).
+ \return \e true on success
+
+ \note Implies setParameter (). text==0 is to be expected to check the capability (returns true)
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::getProgramNameIndexed (VstInt32 category, VstInt32 index, char* text)
+
+ Allows a Host application to list the plug-in's programs (presets).
+
+ \param category unused in VST 2.4
+ \param index Index of the program in a given category, starting with 0.
+ \param text A string up to 24 chars.
+ \return \e true on success
+*/
+//-----------------------------------------------------------------------------------------------------------------
+VstInt32 AudioEffectX::DECLARE_VST_DEPRECATED (getNumAutomatableParameters) ()
+{
+ if (audioMaster)
+ return (VstInt32)audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterGetNumAutomatableParameters), 0, 0, 0, 0);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+VstInt32 AudioEffectX::DECLARE_VST_DEPRECATED (getParameterQuantization) ()
+{
+ if (audioMaster)
+ return (VstInt32)audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterGetParameterQuantization), 0, 0, 0, 0);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+// Configuration/Settings Functions
+//-----------------------------------------------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ The Host could call a suspend() (if the plug-in was enabled (in resume() state)) and then ask for
+ getSpeakerArrangement() and/or check the \e numInputs and \e numOutputs and \e initialDelay and then call a
+ resume().
+
+ \return \e true on success
+
+ \sa setSpeakerArrangement(), getSpeakerArrangement()
+*/
+bool AudioEffectX::ioChanged ()
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterIOChanged, 0, 0, 0, 0) != 0);
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+bool AudioEffectX::DECLARE_VST_DEPRECATED (needIdle) ()
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterNeedIdle), 0, 0, 0, 0) != 0);
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \param width The window's width in pixel
+ \param height The window's height in pixel
+ \return \e true on success
+*/
+bool AudioEffectX::sizeWindow (VstInt32 width, VstInt32 height)
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterSizeWindow, width, height, 0, 0) != 0);
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+double AudioEffectX::updateSampleRate ()
+/*!
+ \return The Host's sample rate
+*/
+{
+ if (audioMaster)
+ {
+ VstIntPtr res = audioMaster (&cEffect, audioMasterGetSampleRate, 0, 0, 0, 0);
+ if (res > 0)
+ sampleRate = (float)res;
+ }
+ return sampleRate;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+VstInt32 AudioEffectX::updateBlockSize ()
+/*!
+ \return The Host's block size
+
+ \note Will cause application to call AudioEffect's setSampleRate() to be called (when implemented).
+*/
+{
+ if (audioMaster)
+ {
+ VstInt32 res = (VstInt32)audioMaster (&cEffect, audioMasterGetBlockSize, 0, 0, 0, 0);
+ if (res > 0)
+ blockSize = res;
+ }
+ return blockSize;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \return ASIO input latency
+ \sa getOutputLatency()
+*/
+VstInt32 AudioEffectX::getInputLatency ()
+{
+ if (audioMaster)
+ return (VstInt32)audioMaster (&cEffect, audioMasterGetInputLatency, 0, 0, 0, 0);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ While inputLatency is probably not of concern, outputLatency may be used in conjunction with getTimeInfo().
+ \e samplePos of VstTimeInfo is ahead of the 'visual' sequencer play time by the output latency, such that
+ when outputLatency samples have passed by, our processing result becomes audible.
+
+ \return ASIO output latency
+ \sa getInputLatency()
+*/
+VstInt32 AudioEffectX::getOutputLatency ()
+{
+ if (audioMaster)
+ return (VstInt32)audioMaster (&cEffect, audioMasterGetOutputLatency, 0, 0, 0, 0);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::getInputProperties (VstInt32 index, VstPinProperties* properties)
+
+ \param index The index to the input, starting with 0
+ \param properties A pointer to a VstPinProperties structure
+ \return \e true on success
+ \sa getOutputProperties()
+ \note Example
+
+ bool MyPlug::getInputProperties (VstInt32 index, VstPinProperties* properties)
+ {
+ bool returnCode = false;
+ if (index < kNumInputs)
+ {
+ sprintf (properties->label, "My %1d In", index + 1);
+ properties->flags = kVstPinIsStereo | kVstPinIsActive;
+ returnCode = true;
+ }
+ return returnCode;
+ }
+
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::getOutputProperties (VstInt32 index, VstPinProperties* properties)
+
+ \param index The index to the output, starting with 0
+ \param properties A pointer to a VstPinProperties structure
+ \return \e true on success
+ \sa getInputProperties()
+ \note Example 1
+
+ bool MyPlug::getOutputProperties (VstInt32 index, VstPinProperties* properties)
+ {
+ bool returnCode = false;
+ if (index < kNumOutputs)
+ {
+ sprintf (properties->label, "My %1d Out", index + 1);
+ properties->flags = kVstPinIsStereo | kVstPinIsActive;
+ returnCode = true;
+ }
+ return (returnCode);
+ }
+
+
+ \note Example 2 : plug-in with 1 mono, 1 stereo and one 5.1 outputs (kNumOutputs = 9):
+
+ bool MyPlug::getOutputProperties (VstInt32 index, VstPinProperties* properties)
+ {
+ bool returnCode = false;
+ if (index >= 0 && index < kNumOutputs)
+ {
+ properties->flags = kVstPinIsActive;
+ if (index == 0) // mono
+ {
+ strcpy (properties->label, "Mono Out");
+ properties->arrangementType = kSpeakerArrMono;
+ }
+ else if (index == 1) // stereo (1 -> 2)
+ {
+ strcpy (properties->label, "Stereo Out");
+ properties->flags |= kVstPinIsStereo;
+ properties->arrangementType = kSpeakerArrStereo;
+ }
+ else if (index >= 3) // 5.1 (3 -> 8)
+ {
+ strcpy (properties->label, "5.1 Out");
+ properties->flags |= kVstPinUseSpeaker;
+ properties->arrangementType = kSpeakerArr51;
+ // for old VST Host < 2.3, make 5.1 to stereo/mono/mono/stereo (L R C Lfe Ls Rs)
+ if (index == 3 || index == 7)
+ properties->flags |= kVstPinIsStereo;
+ if (index == 5)
+ strcpy (properties->label, "Center");
+ else if (index == 6)
+ strcpy (properties->label, "Lfe");
+ else if (index == 7) // (7 -> 8)
+ strcpy (properties->label, "Stereo Back");
+ }
+ returnCode = true;
+ }
+ return returnCode;
+ }
+
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+AEffect* AudioEffectX::DECLARE_VST_DEPRECATED (getPreviousPlug) (VstInt32 input)
+{
+ if (audioMaster)
+ {
+ VstIntPtr ret = audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterGetPreviousPlug), 0, 0, 0, 0);
+ return FromVstPtr (ret);
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+AEffect* AudioEffectX::DECLARE_VST_DEPRECATED (getNextPlug) (VstInt32 output)
+{
+ if (audioMaster)
+ {
+ VstIntPtr ret = audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterGetNextPlug), 0, 0, 0, 0);
+ return FromVstPtr (ret);
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \return Plug-in's category defined in VstPlugCategory
+*/
+VstPlugCategory AudioEffectX::getPlugCategory ()
+{
+ if (cEffect.flags & effFlagsIsSynth)
+ return kPlugCategSynth;
+ return kPlugCategUnknown;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+VstInt32 AudioEffectX::DECLARE_VST_DEPRECATED (willProcessReplacing) ()
+{
+ if (audioMaster)
+ return (VstInt32)audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterWillReplaceOrAccumulate), 0, 0, 0, 0);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ A plug-in is like a black box processing some audio coming in on some inputs (if any) and going out of some
+ outputs (if any). This may be used to do offline or real-time processing, and sometimes it may be desirable to
+ know the current context.
+
+ \return #VstProcessLevels in aeffectx.h
+
+*/
+VstInt32 AudioEffectX::getCurrentProcessLevel ()
+{
+ if (audioMaster)
+ return (VstInt32)audioMaster (&cEffect, audioMasterGetCurrentProcessLevel, 0, 0, 0, 0);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \return #VstAutomationStates in aeffectx.h
+*/
+VstInt32 AudioEffectX::getAutomationState ()
+{
+ if (audioMaster)
+ return (VstInt32)audioMaster (&cEffect, audioMasterGetAutomationState, 0, 0, 0, 0);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+void AudioEffectX::DECLARE_VST_DEPRECATED (wantAsyncOperation) (bool state)
+{
+ if (state)
+ cEffect.flags |= DECLARE_VST_DEPRECATED (effFlagsExtIsAsync);
+ else
+ cEffect.flags &= ~DECLARE_VST_DEPRECATED (effFlagsExtIsAsync);
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+void AudioEffectX::DECLARE_VST_DEPRECATED (hasExternalBuffer) (bool state)
+{
+ if (state)
+ cEffect.flags |= DECLARE_VST_DEPRECATED (effFlagsExtHasBuffer);
+ else
+ cEffect.flags &= ~DECLARE_VST_DEPRECATED (effFlagsExtHasBuffer);
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+// Offline Functions
+//-----------------------------------------------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------------------------------------------
+bool AudioEffectX::offlineRead (VstOfflineTask* offline, VstOfflineOption option, bool readSource)
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterOfflineRead, readSource, option, offline, 0) != 0);
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+bool AudioEffectX::offlineWrite (VstOfflineTask* offline, VstOfflineOption option)
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterOfflineWrite, 0, option, offline, 0) != 0);
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+bool AudioEffectX::offlineStart (VstAudioFile* audioFiles, VstInt32 numAudioFiles, VstInt32 numNewAudioFiles)
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterOfflineStart, numNewAudioFiles, numAudioFiles, audioFiles, 0) != 0);
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+VstInt32 AudioEffectX::offlineGetCurrentPass ()
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterOfflineGetCurrentPass, 0, 0, 0, 0) != 0);
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+VstInt32 AudioEffectX::offlineGetCurrentMetaPass ()
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterOfflineGetCurrentMetaPass, 0, 0, 0, 0) != 0);
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+// Other
+//-----------------------------------------------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------------------------------------------
+void AudioEffectX::DECLARE_VST_DEPRECATED (setOutputSamplerate) (float sampleRate)
+{
+ if (audioMaster)
+ audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterSetOutputSampleRate), 0, 0, 0, sampleRate);
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+VstSpeakerArrangement* AudioEffectX::DECLARE_VST_DEPRECATED (getInputSpeakerArrangement) ()
+{
+ if (audioMaster)
+ {
+ VstIntPtr ret = audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterGetInputSpeakerArrangement), 0, 0, 0, 0);
+ return FromVstPtr (ret);
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+VstSpeakerArrangement* AudioEffectX::DECLARE_VST_DEPRECATED (getOutputSpeakerArrangement) ()
+{
+ if (audioMaster)
+ {
+ VstIntPtr ret = audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterGetOutputSpeakerArrangement), 0, 0, 0, 0);
+ return FromVstPtr (ret);
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \param text String of maximum 64 char
+ \return \e true if supported
+*/
+bool AudioEffectX::getHostVendorString (char* text)
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterGetVendorString, 0, 0, text, 0) != 0);
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \param text String of maximum 64 char
+ \return \e true if supported
+*/
+bool AudioEffectX::getHostProductString (char* text)
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterGetProductString, 0, 0, text, 0) != 0);
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \return Host vendor version
+*/
+VstInt32 AudioEffectX::getHostVendorVersion ()
+{
+ if (audioMaster)
+ return (VstInt32)audioMaster (&cEffect, audioMasterGetVendorVersion, 0, 0, 0, 0);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+VstIntPtr AudioEffectX::hostVendorSpecific (VstInt32 lArg1, VstIntPtr lArg2, void* ptrArg, float floatArg)
+{
+ if (audioMaster)
+ return audioMaster (&cEffect, audioMasterVendorSpecific, lArg1, lArg2, ptrArg, floatArg);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ Asks Host if it implements the feature text. A plug-in cannot assume a 2.x feature is available from the Host.
+ Use this method to ascertain the environment in which the plug-in finds itself. Ignoring this inquiry methods and
+ trying to access a 2.x feature in a 1.0 Host will mean your plug-in or Host application will break. It is not
+ the end-users job to pick and choose which plug-ins can be supported by which Host.
+
+ \param text A string from #hostCanDos
+ \return
+ - 0 : don't know (default)
+ - 1 : yes
+ - -1: no
+*/
+VstInt32 AudioEffectX::canHostDo (char* text)
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterCanDo, 0, 0, text, 0) != 0);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ Tells the Host that the plug-in is an instrument, i.e. that it will call wantEvents().
+
+ \param state
+ - true: is an instrument (default)
+ - false: is a simple audio effect
+*/
+void AudioEffectX::isSynth (bool state)
+{
+ if (state)
+ cEffect.flags |= effFlagsIsSynth;
+ else
+ cEffect.flags &= ~effFlagsIsSynth;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ Enables Host to omit processReplacing() when no data is present on any input.
+*/
+void AudioEffectX::noTail (bool state)
+{
+ if (state)
+ cEffect.flags |= effFlagsNoSoundInStop;
+ else
+ cEffect.flags &= ~effFlagsNoSoundInStop;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \return #VstHostLanguage in aeffectx.h
+*/
+VstInt32 AudioEffectX::getHostLanguage ()
+{
+ if (audioMaster)
+ return (VstInt32)audioMaster (&cEffect, audioMasterGetLanguage, 0, 0, 0, 0);
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+void* AudioEffectX::DECLARE_VST_DEPRECATED (openWindow) (DECLARE_VST_DEPRECATED (VstWindow)* window)
+{
+ if (audioMaster)
+ {
+ VstIntPtr ret = audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterOpenWindow), 0, 0, window, 0);
+ return FromVstPtr (ret);
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+bool AudioEffectX::DECLARE_VST_DEPRECATED (closeWindow) (DECLARE_VST_DEPRECATED (VstWindow)* window)
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterCloseWindow), 0, 0, window, 0) != 0);
+ return false;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \return FSSpec on MAC, else char*
+*/
+void* AudioEffectX::getDirectory ()
+{
+ if (audioMaster)
+ {
+ VstIntPtr ret = (audioMaster (&cEffect, audioMasterGetDirectory, 0, 0, 0, 0));
+ return FromVstPtr (ret);
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \return \e true if supported
+*/
+bool AudioEffectX::updateDisplay ()
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterUpdateDisplay, 0, 0, 0, 0)) ? true : false;
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::processVariableIo (VstVariableIo* varIo)
+
+ If called with \e varIo NULL, returning \e true indicates that this call is supported by the plug-in.
+ Host will use processReplacing otherwise. The Host should call setTotalSampleToProcess before starting the processIO
+ to inform the plug-in about how many samples will be processed in total. The Host should provide an output buffer at least 5 times bigger than input buffer.
+
+ \param varIo
+ \return \true on success
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::setSpeakerArrangement (VstSpeakerArrangement* pluginInput, VstSpeakerArrangement* pluginOutput)
+
+ Set the plug-in's speaker arrangements. If a (VST >= 2.3) plug-in returns \e true, it means that it accepts this IO
+ arrangement. The Host doesn't need to ask for getSpeakerArrangement(). If the plug-in returns \e false it means that it
+ doesn't accept this arrangement, the Host should then ask for getSpeakerArrangement() and then can (optional)
+ recall setSpeakerArrangement().
+
+ \param pluginInput A pointer to the input's #VstSpeakerArrangement structure.
+ \param pluginOutput A pointer to the output's #VstSpeakerArrangement structure.
+ \return \e true on success
+
+ \note setSpeakerArrangement() and getSpeakerArrangement() are always called in suspended state.
+ (like setSampleRate() or setBlockSize()).
+
+ \sa getSpeakerArrangement()
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::getSpeakerArrangement (VstSpeakerArrangement** pluginInput, VstSpeakerArrangement** pluginOutput)
+
+ \param pluginInput A pointer to the input's #VstSpeakerArrangement structure.
+ \param pluginOutput A pointer to the output's #VstSpeakerArrangement structure.
+ \return \e true on success
+
+ \note setSpeakerArrangement() and getSpeakerArrangement() are always called in suspended state.
+ (like setSampleRate() or setBlockSize()).\n
+ Here an example code to show how the host uses getSpeakerArrangement()
+ VstSpeakerArrangement *plugInputVstArr = 0;
+ VstSpeakerArrangement *plugOutputVstArr = 0;
+ if (getFormatVersion () >= 2300 && #getSpeakerArrangement (&plugInputVstArr, &plugOutputVstArr))
+ ....
+
+
+ \sa setSpeakerArrangement()
+*/
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::setBypass (bool onOff)
+
+ process still called (if Supported) although the plug-in was bypassed. Some plugs need to stay 'alive' even
+ when bypassed. An example is a surround decoder which has more inputs than outputs and must maintain some
+ reasonable signal distribution even when being bypassed. A CanDo 'bypass' allows to ask the plug-in if it
+ supports soft bypass or not.
+
+ \note This bypass feature could be automated by the Host (this means avoid to much CPU requirement in this call)
+ \note If the plug-in supports SoftBypass and it has a latency (initialDelay), in Bypassed state the plug-in has to used
+ the same latency value.
+
+ \param onOff
+ \return
+ - true: supports SoftBypass, process will be called, the plug-in should compensate its latency, and copy inputs to outputs
+ - false: doesn't support SoftBypass, process will not be called, the Host should bypass the process call
+
+ \sa processReplacing()
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::getEffectName (char* name)
+
+ \param name A string up to 32 chars
+ \return \e true on success
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::getVendorString (char* text)
+
+ \param text A string up to 64 chars
+ \return \e true on success
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::getProductString (char* text)
+
+ \param text A string up to 64 chars
+ \return \e true on success
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::getVendorVersion ()
+
+ \return The version of the plug-in
+
+ \note This should be upported
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::canDo (char* text)
+
+ Report what the plug-in is able to do. In general you can but don't have to report whatever you support or not
+ support via canDo. Some application functionality may require some specific reply, but in that case you will
+ probably know. Best is to report whatever you know for sure. A Host application cannot make assumptions about
+ the presence of the new 2.x features of a plug-in. Ignoring this inquiry methods and trying to access a 2.x
+ feature from a 1.0 plug, or vice versa, will mean the plug-in or Host application will break. It is not the
+ end-users job to pick and choose which plug-ins can be supported by which Host.
+
+ \param text A string from #plugCanDos
+ \return
+ - 0: don't know (default)
+ - 1: yes
+ - -1: no
+
+ \note This should be supported.
+*/
+
+//----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::canDo (char* text)
+
+ \param text A string from #plugCanDos
+ \return
+ - 0: don't know (default).
+ - 1: yes.
+ - -1: no
+*/
+
+//----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::getParameterProperties (VstInt32 index, VstParameterProperties* p)
+
+ \param index Index of the parameter
+ \param p Pointer to #VstParameterProperties
+ \return Return \e true on success
+*/
+
+//----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::getVstVersion ()
+ \return
+ - 2xxx : the last VST 2.x plug-in version (by default)
+ - 0 : older versions
+
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::getMidiProgramName (VstInt32 channel, MidiProgramName* midiProgramName)
+ Ask plug-in if MidiPrograms are used and if so, query for names, numbers
+ (ProgramChange-Number + BankSelect-Number), categories and keynames of each
+ MIDI Program, on each MIDI-channel. If this function is called, your plug-in has to read
+ MidiProgramName::thisProgramIndex, fill out the other fields with the information
+ assigned to a certain MIDI Program and return the number of available MIDI Programs on
+ that MIDI Channel.
+
+ \note plug-in canDo "midiProgramNames". No effect, if 0 is returned.
+
+ \warning don't mix concepts: the MIDI Programs are totally independent from all other
+ programs present in VST. The main difference is, that there are upto 16 simultaneous
+ active MIDI Programs (one per channel), while there can be only one active "VST"-Program.
+ (You should see the "VST"-Program as the one single main global program, which contains
+ the entire current state of the plug-in.) This function can be called in any sequence.
+
+ \param channel MidiChannel: 0-15
+ \param midiProgramName Points to \e #MidiProgramName struct
+ \return Number of available MIDI Programs on that \e channel
+ - number of used programIndexes
+ - 0 if no MidiProgramNames supported
+
+ \note Example : plug-in has 3 MidiPrograms on MidiChannel 0.
+
+ Host calls #getMidiProgramName with idx = 0 and MidiProgramName::thisProgramIndex = 0.
+ Plug fills out:
+ MidiProgramName::name[64] = "Program A"
+ MidiProgramName::midiProgram = 0
+ MidiProgramName::midiBankMsb = -1
+ MidiProgramName::midiBankLsb = -1
+ MidiProgramName::parentCategoryIndex = -1
+ MidiProgramName::flags = 0 (if plug isn't "Omni").
+ Plug returns 3.
+ Host calls #getMidiProgramName with idx = 0 and MidiProgramName::thisProgramIndex = 1.
+ Plug fills out:
+ MidiProgramName::name[64] = "Program B"
+ MidiProgramName::midiProgram = 1
+ MidiProgramName::midiBankMsb = -1
+ MidiProgramName::midiBankLsb = -1
+ MidiProgramName::parentCategoryIndex = -1
+ MidiProgramName::flags = 0 (if plug isn't "Omni").
+ Plug returns 3.
+ Host calls #getMidiProgramName with idx = 0 and MidiProgramName::thisProgramIndex = 2.
+ Plug fills out:
+ MidiProgramName::name[64] = "Program C"
+ MidiProgramName::midiProgram = 2
+ MidiProgramName::midiBankMsb = -1
+ MidiProgramName::midiBankLsb = -1
+ MidiProgramName::parentCategoryIndex = -1
+ MidiProgramName::flags = 0 (if plug isn't "Omni").
+ Plug returns 3.
+
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::getCurrentMidiProgram (VstInt32 channel, MidiProgramName* currentProgram)
+
+ \param channel
+ \param currentProgram
+ \return
+ - programIndex of the current program
+ - -1 if not supported
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::getMidiProgramCategory (VstInt32 channel, MidiProgramCategory* category)
+
+ \param channel
+ \param category
+ \return
+ - number of used categoryIndexes.
+ - 0 if no #MidiProgramCategory supported/used.
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::hasMidiProgramsChanged (VstInt32 channel)
+
+ Ask plug-in for the currently active program on a certain MIDI Channel. Just like
+ getMidiProgramName(), but MidiProgramName::thisProgramIndex has to be filled out with
+ the currently active MIDI Program-index, which also has to be returned.
+
+ \param channel
+ \return
+ - true: if the #MidiProgramNames, #MidiKeyNames or #MidiControllerNames had changed on
+ this channel
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::getMidiKeyName (VstInt32 channel, MidiKeyName* keyName)
+
+ \param channel
+ \param keyName If keyName is "" the standard name of the key will be displayed
+ \return Return \e false if no #MidiKeyNames defined for 'thisProgramIndex'
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::beginSetProgram ()
+
+ \return
+ - true: the plug-in took the notification into account
+ - false: it did not...
+
+ \sa endSetProgram()
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::endSetProgram ()
+
+ \return
+ - true: the plug-in took the notification into account
+ - false: it did not...
+
+ \sa beginSetProgram()
+*/
+
+#if VST_2_1_EXTENSIONS
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ It tells the Host that if it needs to, it has to record automation data for this control.
+
+ \param index Index of the parameter
+ \return Returns \e true on success
+
+ \sa endEdit()
+*/
+bool AudioEffectX::beginEdit (VstInt32 index)
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterBeginEdit, index, 0, 0, 0)) ? true : false;
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ It notifies the Host that this control is no longer moved by the mouse.
+
+ \param index Index of the parameter
+ \return Returns \e true on success
+
+ \sa beginEdit()
+*/
+bool AudioEffectX::endEdit (VstInt32 index)
+{
+ if (audioMaster)
+ return (audioMaster (&cEffect, audioMasterEndEdit, index, 0, 0, 0)) ? true : false;
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \param ptr
+ \return Returns \e true on success
+
+ \sa closeFileSelector()
+*/
+bool AudioEffectX::openFileSelector (VstFileSelect* ptr)
+{
+ if (audioMaster && ptr)
+ return (audioMaster (&cEffect, audioMasterOpenFileSelector, 0, 0, ptr, 0)) ? true : false;
+ return 0;
+}
+#endif // VST_2_1_EXTENSIONS
+
+#if VST_2_2_EXTENSIONS
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \param ptr
+ \return Returns \e true on success
+
+ \sa openFileSelector()
+*/
+bool AudioEffectX::closeFileSelector (VstFileSelect* ptr)
+{
+ if (audioMaster && ptr)
+ return (audioMaster (&cEffect, audioMasterCloseFileSelector, 0, 0, ptr, 0)) ? true : false;
+ return 0;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ It indicates how many samples will be processed.
+
+ \param nativePath
+ \return Returns \e true on success
+
+ \sa getChunk(), setChunk()
+*/
+bool AudioEffectX::DECLARE_VST_DEPRECATED (getChunkFile) (void* nativePath)
+{
+ if (audioMaster && nativePath)
+ return (audioMaster (&cEffect, DECLARE_VST_DEPRECATED (audioMasterGetChunkFile), 0, 0, nativePath, 0)) ? true : false;
+ return 0;
+}
+#endif // VST_2_2_EXTENSIONS
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::setTotalSampleToProcess (VstInt32 value)
+
+ It indicates how many samples will be processed in total.
+
+ \param value Number of samples to process
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::getNextShellPlugin (char* name) { return 0; }
+
+ \param name Points to a char buffer of size 64, which is to be filled with the name of the
+ plug-in including the terminating zero
+ \return Return the next plug-in's uniqueID
+ \note Example of Implementation
+
+ //---From the Host side : if found plugin is a Shell category-----------
+ if (effect->getCategory () == kPlugCategShell)
+ {
+ // scan shell for subplugins
+ char tempName[64] = {0};
+ VstInt32 plugUniqueID = 0;
+ while ((plugUniqueID = effect->dispatchEffect (effShellGetNextPlugin, 0, 0, tempName)) != 0)
+ {
+ // subplug needs a name
+ if (tempName[0] != 0)
+ {
+ ...do what you want with this tempName and plugUniqueID
+ }
+ }
+ }
+ //---From the Host side : Intanciate a subplugin of a shell plugin---
+ // retreive the uniqueID of this subplugin the host wants to load
+ // set it to the host currentID
+ currentID = subplugInfo->uniqueID;
+ // call the its shell plugin (main function)
+ main ();
+ // the shell plugin will ask for the currentUniqueID
+ // and should return the chosen subplugin
+ ...
+ //---From the plugin-Shell Side: for enumeration of subplugins---------
+ category = kPlugCategShell;
+ ->can ask the host if "shellCategory" is supported
+ // at start (instanciation) reset the index for the getNextShellPlugin call.
+ myPluginShell::index = 0;
+ // implementation of getNextShellPlugin (char* name);
+ VstInt32 myPluginShell::getNextShellPlugin (char* name)
+ {
+ strcpy (name, MyNameTable[index]);
+ return MyUniqueIDTable[index++];
+ }
+ ....
+ //---From the plugin-Shell Side: when instanciation-----
+ VstInt32 uniqueID = host->getCurrentUniqueID ();
+ if (uniqueID == 0) // the host instanciates the shell
+ {}
+ else // host try to instanciate one of my subplugin...identified by the uniqueID
+ {}
+
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::setPanLaw (VstInt32 type, float val)
+
+ \param type
+ \param val
+
+ \return Returns \e true on success
+
+ \note Gain: for Linear : [1.0 => 0dB PanLaw], [~0.58 => -4.5dB], [0.5 => -6.02dB]
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::beginLoadBank (VstPatchChunkInfo* ptr)
+
+ \param ptr
+ \return
+ - -1: if the Bank cannot be loaded,
+ - 1: if it can be loaded
+ - 0: else (for compatibility)
+
+ \sa beginLoadProgram()
+
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::beginLoadProgram (VstPatchChunkInfo* ptr)
+
+ \param ptr
+ \return
+ - -1: if the Program cannot be loaded,
+ - 1: it can be loaded else,
+ - 0: else (for compatibility)
+
+ \sa beginLoadBank()
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+// Speaker Arrangement Helpers
+//-----------------------------------------------------------------------------------------------------------------
+
+#if VST_2_3_EXTENSIONS
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \param arrangement Pointer to a \e #VstSpeakerArrangement structure
+ \param nbChannels Number of Channels
+ \return Returns \e true on success
+
+ \sa deallocateArrangement(), copySpeaker(), matchArrangement()
+*/
+bool AudioEffectX::allocateArrangement (VstSpeakerArrangement** arrangement, VstInt32 nbChannels)
+{
+ if (*arrangement)
+ {
+ char *ptr = (char*)(*arrangement);
+ delete [] ptr;
+ }
+
+ VstInt32 size = 2 * sizeof (VstInt32) + nbChannels * sizeof (VstSpeakerProperties);
+ char* ptr = new char[size];
+ if (!ptr)
+ return false;
+
+ memset (ptr, 0, size);
+ *arrangement = (VstSpeakerArrangement*)ptr;
+ (*arrangement)->numChannels = nbChannels;
+ return true;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \param arrangement Pointer to a \e #VstSpeakerArrangement structure
+ \return Returns \e true on success
+
+ \sa allocateArrangement(), copySpeaker(), matchArrangement()
+*/
+bool AudioEffectX::deallocateArrangement (VstSpeakerArrangement** arrangement)
+{
+ if (*arrangement)
+ {
+ char *ptr = (char*)(*arrangement);
+ delete [] ptr;
+ *arrangement = 0;
+ }
+ return true;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ Feed the \e to speaker properties with the same values than \e from 's ones.
+ It is assumed here that \e to exists yet, ie this function won't
+ allocate memory for the speaker (this will prevent from having
+ a difference between an Arrangement's number of channels and
+ its actual speakers...)
+
+ \param to
+ \param from
+ \return Returns \e true on success
+
+ \sa allocateArrangement(), deallocateArrangement(), matchArrangement()
+*/
+bool AudioEffectX::copySpeaker (VstSpeakerProperties* to, VstSpeakerProperties* from)
+{
+ if ((from == NULL) || (to == NULL))
+ return false;
+
+ vst_strncpy (to->name, from->name, 63);
+ to->type = from->type;
+ to->azimuth = from->azimuth;
+ to->elevation = from->elevation;
+ to->radius = from->radius;
+ to->reserved = from->reserved;
+ memcpy (to->future, from->future, 28);
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \e to is deleted, then created and initialized with the same values as \e from (must exist!).
+ It's notably useful when setSpeakerArrangement() is called by the Host.
+
+ \param to
+ \param from
+ \return Returns \e true on success
+
+ \sa allocateArrangement(), deallocateArrangement(), copySpeaker()
+*/
+
+bool AudioEffectX::matchArrangement (VstSpeakerArrangement** to, VstSpeakerArrangement* from)
+{
+ if (from == NULL)
+ return false;
+
+ if ((!deallocateArrangement (to)) || (!allocateArrangement (to, from->numChannels)))
+ return false;
+
+ (*to)->type = from->type;
+ for (VstInt32 i = 0; i < (*to)->numChannels; i++)
+ {
+ if (!copySpeaker (&((*to)->speakers[i]), &(from->speakers[i])))
+ return false;
+ }
+
+ return true;
+}
+#endif // VST_2_3_EXTENSIONS
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn bool AudioEffectX::setProcessPrecision (VstInt32 precision)
+
+ Is called in suspended state, similar to #setBlockSize. Default (if not called) is single precision float.
+
+ \param precision kVstProcessPrecision32 or kVstProcessPrecision64
+ \return Returns \e true on success
+ \sa VstProcessPrecision
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::getNumMidiInputChannels ()
+
+ Called by the host application to determine how many MIDI input channels are actually used by a plugin
+ e.g. to hide unused channels from the user.
+ For compatibility with VST 2.3 and below, the default return value 0 means 'not implemented' -
+ in this case the host assumes 16 MIDI channels to be present (or none at all).
+
+ \return Number of MIDI input channels: 1-15, otherwise: 16 or no MIDI channels at all (0)
+
+ \note The VST 2.x protocol is limited to a maximum of 16 MIDI channels as defined by the MIDI Standard. This might change in future revisions of the API.
+
+ \sa
+ getNumMidiOutputChannels() @n
+ PlugCanDos::canDoReceiveVstMidiEvent
+*/
+
+//-----------------------------------------------------------------------------------------------------------------
+/*!
+ \fn VstInt32 AudioEffectX::getNumMidiOutputChannels ()
+
+ Called by the host application to determine how many MIDI output channels are actually used by a plugin
+ e.g. to hide unused channels from the user.
+ For compatibility with VST 2.3 and below, the default return value 0 means 'not implemented' -
+ in this case the host assumes 16 MIDI channels to be present (or none at all).
+
+ \return Number of MIDI output channels: 1-15, otherwise: 16 or no MIDI channels at all (0)
+
+ \note The VST 2.x protocol is limited to a maximum of 16 MIDI channels as defined by the MIDI Standard. This might change in future revisions of the API.
+
+ \sa
+ getNumMidiInputChannels() @n
+ PlugCanDos::canDoSendVstMidiEvent
+*/
diff --git a/public.sdk/source/vst2.x/audioeffectx.h b/public.sdk/source/vst2.x/audioeffectx.h
new file mode 100644
index 0000000..1dd608f
--- /dev/null
+++ b/public.sdk/source/vst2.x/audioeffectx.h
@@ -0,0 +1,252 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/06/20 12:42:46 $
+//
+// Category : VST 2.x Classes
+// Filename : audioeffectx.h
+// Created by : Steinberg Media Technologies
+// Description : Class AudioEffectX extends AudioEffect with new features. You should derive
+// your plug-in from AudioEffectX.
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __audioeffectx__
+#define __audioeffectx__
+
+#include "audioeffect.h" // Version 1.0 base class AudioEffect
+
+#include "pluginterfaces/vst2.x/aeffectx.h" // Version 2.x 'C' Extensions and Structures
+
+//-------------------------------------------------------------------------------------------------------
+/** Extended VST Effect Class (VST 2.x). */
+//-------------------------------------------------------------------------------------------------------
+class AudioEffectX : public AudioEffect
+{
+public:
+ AudioEffectX (audioMasterCallback audioMaster, VstInt32 numPrograms, VstInt32 numParams); ///< Create an \e AudioEffectX object
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Parameters
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual bool canParameterBeAutomated (VstInt32 index) { return true; } ///< Indicates if a parameter can be automated
+ virtual bool string2parameter (VstInt32 index, char* text) { return false; } ///< Convert a string representation to a parameter value
+ virtual bool getParameterProperties (VstInt32 index, VstParameterProperties* p) { return false; } ///< Return parameter properties
+
+#if VST_2_1_EXTENSIONS
+ virtual bool beginEdit (VstInt32 index); ///< To be called before #setParameterAutomated (on Mouse Down). This will be used by the Host for specific Automation Recording.
+ virtual bool endEdit (VstInt32 index); ///< To be called after #setParameterAutomated (on Mouse Up)
+#endif // VST_2_1_EXTENSIONS
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Programs and Persistence
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char* text) { return false; } ///< Fill \e text with name of program \e index (\e category deprecated in VST 2.4)
+
+#if VST_2_1_EXTENSIONS
+ virtual bool beginSetProgram () { return false; } ///< Called before a program is loaded
+ virtual bool endSetProgram () { return false; } ///< Called after a program was loaded
+#endif // VST_2_1_EXTENSIONS
+
+#if VST_2_3_EXTENSIONS
+ virtual VstInt32 beginLoadBank (VstPatchChunkInfo* ptr) { return 0; } ///< Called before a Bank is loaded.
+ virtual VstInt32 beginLoadProgram (VstPatchChunkInfo* ptr) { return 0; } ///< Called before a Program is loaded. (called before #beginSetProgram).
+#endif // VST_2_3_EXTENSIONS
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Connections and Configuration
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual bool ioChanged (); ///< Tell Host numInputs and/or numOutputs and/or initialDelay (and/or numParameters: to be avoid) have changed
+
+ virtual double updateSampleRate (); ///< Returns sample rate from Host (may issue setSampleRate())
+ virtual VstInt32 updateBlockSize (); ///< Returns block size from Host (may issue getBlockSize())
+ virtual VstInt32 getInputLatency (); ///< Returns the Audio (maybe ASIO) input latency values
+ virtual VstInt32 getOutputLatency (); ///< Returns the Audio (maybe ASIO) output latency values
+
+ virtual bool getInputProperties (VstInt32 index, VstPinProperties* properties) { return false; } ///< Return the \e properties of output \e index
+ virtual bool getOutputProperties (VstInt32 index, VstPinProperties* properties) { return false; }///< Return the \e properties of input \e index
+
+ virtual bool setSpeakerArrangement (VstSpeakerArrangement* pluginInput, VstSpeakerArrangement* pluginOutput) { return false; } ///< Set the plug-in's speaker arrangements
+ virtual bool getSpeakerArrangement (VstSpeakerArrangement** pluginInput, VstSpeakerArrangement** pluginOutput) { *pluginInput = 0; *pluginOutput = 0; return false; } ///< Return the plug-in's speaker arrangements
+ virtual bool setBypass (bool onOff) { return false; } ///< For 'soft-bypass' (this could be automated (in Audio Thread) that why you could NOT call iochanged (if needed) in this function, do it in fxidle).
+
+#if VST_2_3_EXTENSIONS
+ virtual bool setPanLaw (VstInt32 type, float val) { return false; } ///< Set the Panning Law used by the Host @see VstPanLawType.
+#endif // VST_2_3_EXTENSIONS
+
+#if VST_2_4_EXTENSIONS
+ virtual bool setProcessPrecision (VstInt32 precision) { return false; } ///< Set floating-point precision used for processing (32 or 64 bit)
+
+ virtual VstInt32 getNumMidiInputChannels () { return 0; } ///< Returns number of MIDI input channels used [0, 16]
+ virtual VstInt32 getNumMidiOutputChannels () { return 0; } ///< Returns number of MIDI output channels used [0, 16]
+#endif // VST_2_4_EXTENSIONS
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Realtime
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual VstTimeInfo* getTimeInfo (VstInt32 filter); ///< Get time information from Host
+ virtual VstInt32 getCurrentProcessLevel (); ///< Returns the Host's process level
+ virtual VstInt32 getAutomationState (); ///< Returns the Host's automation state
+
+ virtual VstInt32 processEvents (VstEvents* events) { return 0; } ///< Called when new MIDI events come in
+ bool sendVstEventsToHost (VstEvents* events); ///< Send MIDI events back to Host application
+
+#if VST_2_3_EXTENSIONS
+ virtual VstInt32 startProcess () { return 0; } ///< Called one time before the start of process call. This indicates that the process call will be interrupted (due to Host reconfiguration or bypass state when the plug-in doesn't support softBypass)
+ virtual VstInt32 stopProcess () { return 0;} ///< Called after the stop of process call
+#endif // VST_2_3_EXTENSIONS
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Variable I/O (Offline)
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual bool processVariableIo (VstVariableIo* varIo) { return false; } ///< Used for variable I/O processing (offline processing like timestreching)
+
+#if VST_2_3_EXTENSIONS
+ virtual VstInt32 setTotalSampleToProcess (VstInt32 value) { return value; } ///< Called in offline mode before process() or processVariableIo ()
+#endif // VST_2_3_EXTENSIONS
+ //@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Host Properties
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual bool getHostVendorString (char* text); ///< Fills \e text with a string identifying the vendor
+ virtual bool getHostProductString (char* text); ///< Fills \e text with a string with product name
+ virtual VstInt32 getHostVendorVersion (); ///< Returns vendor-specific version (for example 3200 for Nuendo 3.2)
+ virtual VstIntPtr hostVendorSpecific (VstInt32 lArg1, VstIntPtr lArg2, void* ptrArg, float floatArg); ///< No specific definition
+ virtual VstInt32 canHostDo (char* text); ///< Reports what the Host is able to do (#hostCanDos in audioeffectx.cpp)
+ virtual VstInt32 getHostLanguage (); ///< Returns the Host's language (#VstHostLanguage)
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Plug-in Properties
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual void isSynth (bool state = true); ///< Set if plug-in is a synth
+ virtual void noTail (bool state = true); ///< Plug-in won't produce output signals while there is no input
+ virtual VstInt32 getGetTailSize () { return 0; }///< Returns tail size; 0 is default (return 1 for 'no tail'), used in offline processing too
+ virtual void* getDirectory (); ///< Returns the plug-in's directory
+ virtual bool getEffectName (char* name) { return false; } ///< Fill \e text with a string identifying the effect
+ virtual bool getVendorString (char* text) { return false; } ///< Fill \e text with a string identifying the vendor
+ virtual bool getProductString (char* text) { return false; }///< Fill \e text with a string identifying the product name
+ virtual VstInt32 getVendorVersion () { return 0; } ///< Return vendor-specific version
+ virtual VstIntPtr vendorSpecific (VstInt32 lArg, VstIntPtr lArg2, void* ptrArg, float floatArg) { return 0; } ///< No definition, vendor specific handling
+ virtual VstInt32 canDo (char* text) { return 0; } ///< Reports what the plug-in is able to do (#plugCanDos in audioeffectx.cpp)
+ virtual VstInt32 getVstVersion () { return kVstVersion; } ///< Returns the current VST Version (#kVstVersion)
+ virtual VstPlugCategory getPlugCategory (); ///< Specify a category that fits the plug (#VstPlugCategory)
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name MIDI Channel Programs
+//-------------------------------------------------------------------------------------------------------
+//@{
+#if VST_2_1_EXTENSIONS
+ virtual VstInt32 getMidiProgramName (VstInt32 channel, MidiProgramName* midiProgramName) { return 0; } ///< Fill \e midiProgramName with information for 'thisProgramIndex'.
+ virtual VstInt32 getCurrentMidiProgram (VstInt32 channel, MidiProgramName* currentProgram) { return -1; } ///< Fill \e currentProgram with information for the current MIDI program.
+ virtual VstInt32 getMidiProgramCategory (VstInt32 channel, MidiProgramCategory* category) { return 0; } ///< Fill \e category with information for 'thisCategoryIndex'.
+ virtual bool hasMidiProgramsChanged (VstInt32 channel) { return false; } ///< Return true if the #MidiProgramNames, #MidiKeyNames or #MidiControllerNames had changed on this MIDI channel.
+ virtual bool getMidiKeyName (VstInt32 channel, MidiKeyName* keyName) { return false; } ///< Fill \e keyName with information for 'thisProgramIndex' and 'thisKeyNumber'
+#endif // VST_2_1_EXTENSIONS
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Others
+//-------------------------------------------------------------------------------------------------------
+//@{
+ virtual bool updateDisplay (); ///< Something has changed in plug-in, request an update display like program (MIDI too) and parameters list in Host
+ virtual bool sizeWindow (VstInt32 width, VstInt32 height); ///< Requests to resize the editor window
+
+#if VST_2_1_EXTENSIONS
+ virtual bool openFileSelector (VstFileSelect* ptr); ///< Open a Host File selector (see aeffectx.h for #VstFileSelect definition)
+#endif // VST_2_1_EXTENSIONS
+
+#if VST_2_2_EXTENSIONS
+ virtual bool closeFileSelector (VstFileSelect* ptr); ///< Close the Host File selector which was opened by #openFileSelector
+#endif // VST_2_2_EXTENSIONS
+
+#if VST_2_3_EXTENSIONS
+ virtual VstInt32 getNextShellPlugin (char* name) { return 0; } ///< This opcode is only called, if the plug-in is of type #kPlugCategShell, in order to extract all included sub-plugin´s names.
+#endif // VST_2_3_EXTENSIONS
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+/// \name Tools
+//-------------------------------------------------------------------------------------------------------
+//@{
+#if VST_2_3_EXTENSIONS
+ virtual bool allocateArrangement (VstSpeakerArrangement** arrangement, VstInt32 nbChannels);///< Allocate memory for a #VstSpeakerArrangement
+ virtual bool deallocateArrangement (VstSpeakerArrangement** arrangement); ///< Delete/free memory for an allocated speaker arrangement
+ virtual bool copySpeaker (VstSpeakerProperties* to, VstSpeakerProperties* from); ///< Copy properties \e from to \e to
+ virtual bool matchArrangement (VstSpeakerArrangement** to, VstSpeakerArrangement* from); ///< "to" is deleted, then created and initialized with the same values as "from" ones ("from" must exist).
+#endif // VST_2_3_EXTENSIONS
+//@}
+
+//-------------------------------------------------------------------------------------------------------
+// Offline
+//-------------------------------------------------------------------------------------------------------
+/// @cond ignore
+ virtual bool offlineRead (VstOfflineTask* offline, VstOfflineOption option, bool readSource = true);
+ virtual bool offlineWrite (VstOfflineTask* offline, VstOfflineOption option);
+ virtual bool offlineStart (VstAudioFile* ptr, VstInt32 numAudioFiles, VstInt32 numNewAudioFiles);
+ virtual VstInt32 offlineGetCurrentPass ();
+ virtual VstInt32 offlineGetCurrentMetaPass ();
+ virtual bool offlineNotify (VstAudioFile* ptr, VstInt32 numAudioFiles, bool start) { return false; }
+ virtual bool offlinePrepare (VstOfflineTask* offline, VstInt32 count) { return false; }
+ virtual bool offlineRun (VstOfflineTask* offline, VstInt32 count) { return false; }
+ virtual VstInt32 offlineGetNumPasses () { return 0; }
+ virtual VstInt32 offlineGetNumMetaPasses () { return 0; }
+
+//-------------------------------------------------------------------------------------------------------
+// AudioEffect overrides
+//-------------------------------------------------------------------------------------------------------
+ virtual VstIntPtr dispatcher (VstInt32 opcode, VstInt32 index, VstIntPtr value, void* ptr, float opt);
+ virtual void resume ();
+
+//-------------------------------------------------------------------------------------------------------
+// Deprecated methods
+//-------------------------------------------------------------------------------------------------------
+ virtual void DECLARE_VST_DEPRECATED (wantEvents) (VstInt32 filter = 1);
+ virtual VstInt32 DECLARE_VST_DEPRECATED (tempoAt) (VstInt32 pos);
+ virtual VstInt32 DECLARE_VST_DEPRECATED (getNumAutomatableParameters) ();
+ virtual VstInt32 DECLARE_VST_DEPRECATED (getParameterQuantization) ();
+ virtual VstInt32 DECLARE_VST_DEPRECATED (getNumCategories) () { return 1L; }
+ virtual bool DECLARE_VST_DEPRECATED (copyProgram) (VstInt32 destination) { return false; }
+ virtual bool DECLARE_VST_DEPRECATED (needIdle) ();
+ virtual AEffect* DECLARE_VST_DEPRECATED (getPreviousPlug) (VstInt32 input);
+ virtual AEffect* DECLARE_VST_DEPRECATED (getNextPlug) (VstInt32 output);
+ virtual void DECLARE_VST_DEPRECATED (inputConnected) (VstInt32 index, bool state) {}
+ virtual void DECLARE_VST_DEPRECATED (outputConnected) (VstInt32 index, bool state) {}
+ virtual VstInt32 DECLARE_VST_DEPRECATED (willProcessReplacing) ();
+ virtual void DECLARE_VST_DEPRECATED (wantAsyncOperation) (bool state = true);
+ virtual void DECLARE_VST_DEPRECATED (hasExternalBuffer) (bool state = true);
+ virtual VstInt32 DECLARE_VST_DEPRECATED (reportCurrentPosition) () { return 0; }
+ virtual float* DECLARE_VST_DEPRECATED (reportDestinationBuffer) () { return 0; }
+ virtual void DECLARE_VST_DEPRECATED (setOutputSamplerate) (float samplerate);
+ virtual VstSpeakerArrangement* DECLARE_VST_DEPRECATED (getInputSpeakerArrangement) ();
+ virtual VstSpeakerArrangement* DECLARE_VST_DEPRECATED (getOutputSpeakerArrangement) ();
+ virtual void* DECLARE_VST_DEPRECATED (openWindow) (DECLARE_VST_DEPRECATED (VstWindow)*);
+ virtual bool DECLARE_VST_DEPRECATED (closeWindow) (DECLARE_VST_DEPRECATED (VstWindow)*);
+ virtual void DECLARE_VST_DEPRECATED (setBlockSizeAndSampleRate) (VstInt32 _blockSize, float _sampleRate) { blockSize = _blockSize; sampleRate = _sampleRate; }
+ virtual bool DECLARE_VST_DEPRECATED (getErrorText) (char* text) { return false; }
+ virtual void* DECLARE_VST_DEPRECATED (getIcon) () { return 0; }
+ virtual bool DECLARE_VST_DEPRECATED (setViewPosition) (VstInt32 x, VstInt32 y) { return false; }
+ virtual VstInt32 DECLARE_VST_DEPRECATED (fxIdle) () { return 0; }
+ virtual bool DECLARE_VST_DEPRECATED (keysRequired) () { return false; }
+
+#if VST_2_2_EXTENSIONS
+ virtual bool DECLARE_VST_DEPRECATED (getChunkFile) (void* nativePath); ///< Returns in platform format the path of the current chunk (could be called in #setChunk ()) (FSSpec on MAC else char*)
+#endif // VST_2_2_EXTENSIONS
+/// @endcond
+//-------------------------------------------------------------------------------------------------------
+};
+
+#endif //__audioeffectx__
diff --git a/public.sdk/source/vst2.x/vstplugmain.cpp b/public.sdk/source/vst2.x/vstplugmain.cpp
new file mode 100644
index 0000000..78e7b34
--- /dev/null
+++ b/public.sdk/source/vst2.x/vstplugmain.cpp
@@ -0,0 +1,68 @@
+//-------------------------------------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// Version 2.4 $Date: 2006/08/29 12:08:50 $
+//
+// Category : VST 2.x Classes
+// Filename : vstplugmain.cpp
+// Created by : Steinberg Media Technologies
+// Description : VST Plug-In Main Entry
+//
+// © 2006, Steinberg Media Technologies, All Rights Reserved
+//-------------------------------------------------------------------------------------------------------
+
+#include "audioeffect.h"
+
+//------------------------------------------------------------------------
+/** Must be implemented externally. */
+extern AudioEffect* createEffectInstance (audioMasterCallback audioMaster);
+
+extern "C" {
+
+#if defined (__GNUC__) && ((__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)))
+ #define VST_EXPORT __attribute__ ((visibility ("default")))
+#else
+ #define VST_EXPORT
+#endif
+
+//------------------------------------------------------------------------
+/** Prototype of the export function main */
+//------------------------------------------------------------------------
+VST_EXPORT AEffect* VSTPluginMain (audioMasterCallback audioMaster)
+{
+ // Get VST Version of the Host
+ if (!audioMaster (0, audioMasterVersion, 0, 0, 0, 0))
+ return 0; // old version
+
+ // Create the AudioEffect
+ AudioEffect* effect = createEffectInstance (audioMaster);
+ if (!effect)
+ return 0;
+
+ // Return the VST AEffect structur
+ return effect->getAeffect ();
+}
+
+// support for old hosts not looking for VSTPluginMain
+#if (TARGET_API_MAC_CARBON && __ppc__)
+VST_EXPORT AEffect* main_macho (audioMasterCallback audioMaster) { return VSTPluginMain (audioMaster); }
+#elif WIN32
+VST_EXPORT AEffect* MAIN (audioMasterCallback audioMaster) { return VSTPluginMain (audioMaster); }
+#elif BEOS
+VST_EXPORT AEffect* main_plugin (audioMasterCallback audioMaster) { return VSTPluginMain (audioMaster); }
+#endif
+
+} // extern "C"
+
+//------------------------------------------------------------------------
+#if WIN32
+#include
+void* hInstance;
+
+extern "C" {
+BOOL WINAPI DllMain (HINSTANCE hInst, DWORD dwReason, LPVOID lpvReserved)
+{
+ hInstance = hInst;
+ return 1;
+}
+} // extern "C"
+#endif
diff --git a/vstgui.sf/drawtest/mac/Info.plist b/vstgui.sf/drawtest/mac/Info.plist
new file mode 100644
index 0000000..a5742bf
--- /dev/null
+++ b/vstgui.sf/drawtest/mac/Info.plist
@@ -0,0 +1,28 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ drawtest
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ net.sourceforge.vstgui.drawtest
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ drawtest
+ CFBundlePackageType
+ BNDL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ CSResourcesFileMapped
+
+ VSTWindowCompositing
+
+
+
diff --git a/vstgui.sf/drawtest/mac/audiounit.exp b/vstgui.sf/drawtest/mac/audiounit.exp
new file mode 100644
index 0000000..6c4658b
--- /dev/null
+++ b/vstgui.sf/drawtest/mac/audiounit.exp
@@ -0,0 +1,2 @@
+_DrawTestAUEntry
+_VSTGUIAUViewEntry
\ No newline at end of file
diff --git a/vstgui.sf/drawtest/mac/cw_vst_prefix.pch++ b/vstgui.sf/drawtest/mac/cw_vst_prefix.pch++
new file mode 100644
index 0000000..5b55590
--- /dev/null
+++ b/vstgui.sf/drawtest/mac/cw_vst_prefix.pch++
@@ -0,0 +1,4 @@
+#include "vstplugsquartz.h"
+
+#include
+#include "vstgui.h"
diff --git a/vstgui.sf/drawtest/mac/drawtest.cw9prj b/vstgui.sf/drawtest/mac/drawtest.cw9prj
new file mode 100644
index 0000000..9e4a1ef
Binary files /dev/null and b/vstgui.sf/drawtest/mac/drawtest.cw9prj differ
diff --git a/vstgui.sf/drawtest/mac/drawtest.plc b/vstgui.sf/drawtest/mac/drawtest.plc
new file mode 100644
index 0000000..5240045
--- /dev/null
+++ b/vstgui.sf/drawtest/mac/drawtest.plc
@@ -0,0 +1,40 @@
+#define stringEffectName __OUTPUT_FILENAME__
+#define stringVersion "1.0.0.0"
+#define stringCopyright "© Arne Scheffler 2004"
+
+
+#ifndef stringEffectName
+#error "You need to set stringEffectName"
+#endif
+#ifndef stringVersion
+#error "You need to set stringVersion"
+#endif
+#ifndef stringCopyright
+#error "You need to set stringCopyright"
+#endif
+
+#define BUNDLE_NAME stringEffectName
+#define BUNDLE_COPYRIGHT stringCopyright
+#define BUNDLE_VERSION stringVersion
+#define BUNDLE_IDENTIFIER "com.steinberg." BUNDLE_NAME
+#define BUNDLE_ICON "commonIcon"
+
+
+plist
+{
+ dictionary
+ {
+ key "CFBundleInfoDictionaryVersion" value string "6.0"
+ key "CFBundleDevelopmentRegion" value string "English"
+ key "CFBundleName" value string BUNDLE_NAME
+ key "CFBundleIdentifier" value string BUNDLE_IDENTIFIER
+ key "CFBundleGetInfoString" value string BUNDLE_NAME " " BUNDLE_VERSION ", " BUNDLE_COPYRIGHT
+ key "CFBundleShortVersionString" value string BUNDLE_VERSION
+ key "CFBundleExecutable" value string __OUTPUT_FILENAME__
+ key "CFBundlePackageType" value string __OUTPUT_TYPE__
+ key "CFBundleSignature" value string __OUTPUT_CREATOR__
+ key "CFBundleBuildDate" value string __DATE__
+ key "CFBundleIconFile" value string BUNDLE_ICON
+ key "VSTWindowCompositing" value boolean true
+ }
+}
diff --git a/vstgui.sf/drawtest/mac/drawtest.xcode/project.pbxproj b/vstgui.sf/drawtest/mac/drawtest.xcode/project.pbxproj
new file mode 100644
index 0000000..1c30579
--- /dev/null
+++ b/vstgui.sf/drawtest/mac/drawtest.xcode/project.pbxproj
@@ -0,0 +1,2050 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 39;
+ objects = {
+ 089C1669FE841209C02AAC07 = {
+ buildSettings = {
+ };
+ buildStyles = (
+ 4F9091AC011F3BD104CA0E50,
+ 4F9091AD011F3BD104CA0E50,
+ );
+ hasScannedForEncodings = 1;
+ isa = PBXProject;
+ mainGroup = 089C166AFE841209C02AAC07;
+ projectDirPath = "";
+ targets = (
+ 8D01CCC60486CAD60068D4B7,
+ F4C9F1D307B2320800010DAD,
+ );
+ };
+ 089C166AFE841209C02AAC07 = {
+ children = (
+ 0C01265607AC430A009EC388,
+ 08FB77ADFE841716C02AAC07,
+ 089C167CFE841241C02AAC07,
+ 089C1671FE841209C02AAC07,
+ 19C28FB4FE9D528D11CA2CBB,
+ );
+ isa = PBXGroup;
+ name = drawtest;
+ refType = 4;
+ sourceTree = "";
+ };
+ 089C1671FE841209C02AAC07 = {
+ children = (
+ F40BD99607D3B28F00E1073A,
+ 0C1C289B07AC283C007128C4,
+ 0C1C289907AC2824007128C4,
+ 8B5C7F83076FB26000A15F61,
+ 8BA05B01072074F900365D66,
+ 8BA05AF9072074E100365D66,
+ 08EA7FFBFE8413EDC02AAC07,
+ );
+ isa = PBXGroup;
+ name = "External Frameworks and Libraries";
+ refType = 4;
+ sourceTree = "";
+ };
+ 089C167CFE841241C02AAC07 = {
+ children = (
+ 0CF3554207B17126002BFE50,
+ 0CF3554307B17126002BFE50,
+ 0CF3554407B17126002BFE50,
+ 0CF3554507B17126002BFE50,
+ 0CF3554607B17126002BFE50,
+ 0CF3554707B17126002BFE50,
+ 0CF3554807B17126002BFE50,
+ 0CF3554907B17126002BFE50,
+ 0CF3554A07B17126002BFE50,
+ 0CF3554B07B17126002BFE50,
+ 0CF3554C07B17126002BFE50,
+ 0CF3554D07B17126002BFE50,
+ 0CF3554E07B17126002BFE50,
+ 0CF3554F07B17126002BFE50,
+ 0CF3555007B17126002BFE50,
+ 0CF3555107B17126002BFE50,
+ 0CF3555207B17126002BFE50,
+ 0CF3555307B17126002BFE50,
+ 0CF3555407B17126002BFE50,
+ 0C01262007AC3D21009EC388,
+ );
+ isa = PBXGroup;
+ name = Resources;
+ refType = 4;
+ sourceTree = "";
+ };
+ 08EA7FFBFE8413EDC02AAC07 = {
+ isa = PBXFileReference;
+ lastKnownFileType = wrapper.framework;
+ name = Carbon.framework;
+ path = /System/Library/Frameworks/Carbon.framework;
+ refType = 0;
+ sourceTree = "";
+ };
+ 08FB77ADFE841716C02AAC07 = {
+ children = (
+ F4C9F1E107B232B900010DAD,
+ 0C1C269E07AB5DE8007128C4,
+ 8BA05AEB0720742700365D66,
+ 8BA05A7D072073D200365D66,
+ 8BA05A56072072A900365D66,
+ );
+ isa = PBXGroup;
+ name = Source;
+ refType = 4;
+ sourceTree = "";
+ };
+//080
+//081
+//082
+//083
+//084
+//0C0
+//0C1
+//0C2
+//0C3
+//0C4
+ 0C01252807AC359F009EC388 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = cscrollview.cpp;
+ path = ../../vstgui/cscrollview.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0C01252A07AC359F009EC388 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = ctabview.cpp;
+ path = ../../vstgui/ctabview.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0C01252C07AC359F009EC388 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = plugguieditor.cpp;
+ path = ../../vstgui/plugguieditor.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0C01252E07AC359F009EC388 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = vstcontrols.cpp;
+ path = ../../vstgui/vstcontrols.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0C01253007AC359F009EC388 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = vstgui.cpp;
+ path = ../../vstgui/vstgui.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0C01253807AC359F009EC388 = {
+ fileRef = 0C01252807AC359F009EC388;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0C01253A07AC359F009EC388 = {
+ fileRef = 0C01252A07AC359F009EC388;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0C01253C07AC359F009EC388 = {
+ fileRef = 0C01252C07AC359F009EC388;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0C01253E07AC359F009EC388 = {
+ fileRef = 0C01252E07AC359F009EC388;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0C01254007AC359F009EC388 = {
+ fileRef = 0C01253007AC359F009EC388;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0C01261907AC3CE1009EC388 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ isa = PBXShellScriptBuildPhase;
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "cp -p -r -f \"build/drawtest.component\" \"$HOME/Library/Audio/Plug-Ins/Components/\" \ntouch \"$HOME/Library/Audio/Plug-Ins/Components\"\n";
+ };
+ 0C01262007AC3D21009EC388 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.rez;
+ name = audiounit.r;
+ path = ../resources/audiounit.r;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0C01262107AC3D21009EC388 = {
+ fileRef = 0C01262007AC3D21009EC388;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0C01265607AC430A009EC388 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = text.xml;
+ path = Info.plist;
+ refType = 4;
+ sourceTree = "";
+ };
+ 0C1C269E07AB5DE8007128C4 = {
+ children = (
+ F4C9F20407B2335F00010DAD,
+ 0C01252807AC359F009EC388,
+ 0C01252A07AC359F009EC388,
+ 0C01252C07AC359F009EC388,
+ 0C01252E07AC359F009EC388,
+ 0C01253007AC359F009EC388,
+ );
+ isa = PBXGroup;
+ name = VSTGUI;
+ refType = 4;
+ sourceTree = "";
+ };
+ 0C1C289907AC2824007128C4 = {
+ isa = PBXFileReference;
+ lastKnownFileType = wrapper.framework;
+ name = System.framework;
+ path = /System/Library/Frameworks/System.framework;
+ refType = 0;
+ sourceTree = "";
+ };
+ 0C1C289A07AC2824007128C4 = {
+ fileRef = 0C1C289907AC2824007128C4;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0C1C289B07AC283C007128C4 = {
+ isa = PBXFileReference;
+ lastKnownFileType = wrapper.framework;
+ name = QuickTime.framework;
+ path = /System/Library/Frameworks/QuickTime.framework;
+ refType = 0;
+ sourceTree = "";
+ };
+ 0C1C289C07AC283C007128C4 = {
+ fileRef = 0C1C289B07AC283C007128C4;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3554207B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.png;
+ name = bmp00001.png;
+ path = ../resources/bmp00001.png;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554307B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.png;
+ name = bmp00100.png;
+ path = ../resources/bmp00100.png;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554407B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.png;
+ name = bmp01000.png;
+ path = ../resources/bmp01000.png;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554507B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10001.bmp;
+ path = ../resources/bmp10001.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554607B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10002.bmp;
+ path = ../resources/bmp10002.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554707B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10003.bmp;
+ path = ../resources/bmp10003.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554807B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10004.bmp;
+ path = ../resources/bmp10004.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554907B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10005.bmp;
+ path = ../resources/bmp10005.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554A07B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10006.bmp;
+ path = ../resources/bmp10006.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554B07B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10007.bmp;
+ path = ../resources/bmp10007.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554C07B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10008.bmp;
+ path = ../resources/bmp10008.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554D07B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10009.bmp;
+ path = ../resources/bmp10009.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554E07B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10010.bmp;
+ path = ../resources/bmp10010.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3554F07B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10011.bmp;
+ path = ../resources/bmp10011.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3555007B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10012.bmp;
+ path = ../resources/bmp10012.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3555107B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10013.bmp;
+ path = ../resources/bmp10013.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3555207B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10014.bmp;
+ path = ../resources/bmp10014.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3555307B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10015.bmp;
+ path = ../resources/bmp10015.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3555407B17126002BFE50 = {
+ isa = PBXFileReference;
+ lastKnownFileType = image.bmp;
+ name = bmp10016.bmp;
+ path = ../resources/bmp10016.bmp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF3555507B17126002BFE50 = {
+ fileRef = 0CF3554207B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3555607B17126002BFE50 = {
+ fileRef = 0CF3554307B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3555707B17126002BFE50 = {
+ fileRef = 0CF3554407B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3555807B17126002BFE50 = {
+ fileRef = 0CF3554507B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3555907B17126002BFE50 = {
+ fileRef = 0CF3554607B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3555A07B17126002BFE50 = {
+ fileRef = 0CF3554707B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3555B07B17126002BFE50 = {
+ fileRef = 0CF3554807B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3555C07B17126002BFE50 = {
+ fileRef = 0CF3554907B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3555D07B17126002BFE50 = {
+ fileRef = 0CF3554A07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3555E07B17126002BFE50 = {
+ fileRef = 0CF3554B07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3555F07B17126002BFE50 = {
+ fileRef = 0CF3554C07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3556007B17126002BFE50 = {
+ fileRef = 0CF3554D07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3556107B17126002BFE50 = {
+ fileRef = 0CF3554E07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3556207B17126002BFE50 = {
+ fileRef = 0CF3554F07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3556307B17126002BFE50 = {
+ fileRef = 0CF3555007B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3556407B17126002BFE50 = {
+ fileRef = 0CF3555107B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3556507B17126002BFE50 = {
+ fileRef = 0CF3555207B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3556607B17126002BFE50 = {
+ fileRef = 0CF3555307B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF3556707B17126002BFE50 = {
+ fileRef = 0CF3555407B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF355BE07B173A3002BFE50 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = pdrawtesteditor.cpp;
+ path = ../source/pdrawtesteditor.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF355BF07B173A3002BFE50 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = pdrawtesteditor.h;
+ path = ../source/pdrawtesteditor.h;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF355C007B173A3002BFE50 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = pdrawtesteffect.cpp;
+ path = ../source/pdrawtesteffect.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF355C107B173A3002BFE50 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = pdrawtesteffect.h;
+ path = ../source/pdrawtesteffect.h;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF355C207B173A3002BFE50 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = pdrawtestview.cpp;
+ path = ../source/pdrawtestview.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF355C307B173A3002BFE50 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = pdrawtestview.h;
+ path = ../source/pdrawtestview.h;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF355C407B173A3002BFE50 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = pprimitivesviews.cpp;
+ path = ../source/pprimitivesviews.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF355C507B173A3002BFE50 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = pprimitivesviews.h;
+ path = ../source/pprimitivesviews.h;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF355C607B173A3002BFE50 = {
+ fileRef = 0CF355BE07B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF355C707B173A3002BFE50 = {
+ fileRef = 0CF355BF07B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF355C807B173A3002BFE50 = {
+ fileRef = 0CF355C007B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF355C907B173A3002BFE50 = {
+ fileRef = 0CF355C107B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF355CA07B173A3002BFE50 = {
+ fileRef = 0CF355C207B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF355CB07B173A3002BFE50 = {
+ fileRef = 0CF355C307B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF355CC07B173A3002BFE50 = {
+ fileRef = 0CF355C407B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF355CD07B173A3002BFE50 = {
+ fileRef = 0CF355C507B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF355FB07B17600002BFE50 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = controlsgui.cpp;
+ path = ../source/controlsgui.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF355FC07B17600002BFE50 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = controlsgui.h;
+ path = ../source/controlsgui.h;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ 0CF355FD07B17600002BFE50 = {
+ fileRef = 0CF355FB07B17600002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 0CF355FE07B17600002BFE50 = {
+ fileRef = 0CF355FC07B17600002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+//0C0
+//0C1
+//0C2
+//0C3
+//0C4
+//190
+//191
+//192
+//193
+//194
+ 19C28FB4FE9D528D11CA2CBB = {
+ children = (
+ 8D01CCD20486CAD60068D4B7,
+ F4C9F1D407B2320800010DAD,
+ );
+ isa = PBXGroup;
+ name = Products;
+ refType = 4;
+ sourceTree = "";
+ };
+//190
+//191
+//192
+//193
+//194
+//4F0
+//4F1
+//4F2
+//4F3
+//4F4
+ 4F9091AC011F3BD104CA0E50 = {
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ DEBUGGING_SYMBOLS = YES;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ MACOSX_DEPLOYMENT_TARGET = 10.2;
+ OPTIMIZATION_CFLAGS = "-O0";
+ ZERO_LINK = YES;
+ };
+ isa = PBXBuildStyle;
+ name = Development;
+ };
+ 4F9091AD011F3BD104CA0E50 = {
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ ZERO_LINK = NO;
+ };
+ isa = PBXBuildStyle;
+ name = Deployment;
+ };
+//4F0
+//4F1
+//4F2
+//4F3
+//4F4
+//8B0
+//8B1
+//8B2
+//8B3
+//8B4
+ 8B5C7F83076FB26000A15F61 = {
+ isa = PBXFileReference;
+ lastKnownFileType = wrapper.framework;
+ name = CoreAudio.framework;
+ path = /System/Library/Frameworks/CoreAudio.framework;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05A56072072A900365D66 = {
+ children = (
+ F4C9F47307B2379F00010DAD,
+ 0CF355FB07B17600002BFE50,
+ 0CF355FC07B17600002BFE50,
+ 0CF355BE07B173A3002BFE50,
+ 0CF355BF07B173A3002BFE50,
+ 0CF355C007B173A3002BFE50,
+ 0CF355C107B173A3002BFE50,
+ 0CF355C207B173A3002BFE50,
+ 0CF355C307B173A3002BFE50,
+ 0CF355C407B173A3002BFE50,
+ 0CF355C507B173A3002BFE50,
+ );
+ isa = PBXGroup;
+ name = Source;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A7D072073D200365D66 = {
+ children = (
+ 8BA05A7E072073D200365D66,
+ 8BA05A8C072073D200365D66,
+ 8BA05A97072073D200365D66,
+ 8BA05A99072073D200365D66,
+ 8BA05AA6072073D200365D66,
+ );
+ isa = PBXGroup;
+ name = AUPublic;
+ path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05A7E072073D200365D66 = {
+ children = (
+ 8BA05A7F072073D200365D66,
+ 8BA05A80072073D200365D66,
+ 8BA05A81072073D200365D66,
+ 8BA05A82072073D200365D66,
+ 8BA05A83072073D200365D66,
+ 8BA05A84072073D200365D66,
+ 8BA05A85072073D200365D66,
+ 8BA05A86072073D200365D66,
+ 8BA05A87072073D200365D66,
+ 8BA05A88072073D200365D66,
+ 8BA05A89072073D200365D66,
+ 8BA05A8A072073D200365D66,
+ 8BA05A8B072073D200365D66,
+ );
+ isa = PBXGroup;
+ path = AUBase;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A7F072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUBase.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A80072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUBase.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A81072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUDispatch.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A82072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUDispatch.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A83072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUInputElement.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A84072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUInputElement.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A85072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUOutputElement.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A86072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUOutputElement.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A87072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.rez;
+ path = AUResources.r;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A88072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUScopeElement.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A89072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUScopeElement.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A8A072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = ComponentBase.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A8B072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = ComponentBase.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A8C072073D200365D66 = {
+ children = (
+ 8BA05A8D072073D200365D66,
+ 8BA05A8E072073D200365D66,
+ 8BA05A8F072073D200365D66,
+ 8BA05A90072073D200365D66,
+ 8BA05A91072073D200365D66,
+ 8BA05A92072073D200365D66,
+ 8BA05A93072073D200365D66,
+ 8BA05A94072073D200365D66,
+ 8BA05A95072073D200365D66,
+ );
+ isa = PBXGroup;
+ path = AUCarbonViewBase;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A8D072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUCarbonViewBase.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A8E072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUCarbonViewBase.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A8F072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUCarbonViewControl.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A90072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUCarbonViewControl.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A91072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUCarbonViewDispatch.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A92072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUControlGroup.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A93072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUControlGroup.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A94072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = CarbonEventHandler.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A95072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = CarbonEventHandler.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A97072073D200365D66 = {
+ children = (
+ 8BA05A98072073D200365D66,
+ );
+ isa = PBXGroup;
+ path = AUViewBase;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A98072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUViewLocalizedStringKeys.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A99072073D200365D66 = {
+ children = (
+ 8BA05A9A072073D200365D66,
+ 8BA05A9B072073D200365D66,
+ );
+ isa = PBXGroup;
+ path = OtherBases;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A9A072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUEffectBase.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05A9B072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUEffectBase.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05AA6072073D200365D66 = {
+ children = (
+ 8BA05AA7072073D200365D66,
+ 8BA05AA8072073D200365D66,
+ 8BA05AA9072073D200365D66,
+ 8BA05AAA072073D200365D66,
+ 8BA05AAB072073D200365D66,
+ 8BA05AAC072073D200365D66,
+ 8BA05AAD072073D200365D66,
+ );
+ isa = PBXGroup;
+ path = Utility;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05AA7072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUBuffer.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05AA8072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUBuffer.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05AA9072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ path = AUDebugDispatcher.cpp;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05AAA072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUDebugDispatcher.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05AAB072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUInputFormatConverter.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05AAC072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUSilentTimeout.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05AAD072073D200365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ path = AUTimestampGenerator.h;
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05AAE072073D300365D66 = {
+ fileRef = 8BA05A7F072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AAF072073D300365D66 = {
+ fileRef = 8BA05A80072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AB0072073D300365D66 = {
+ fileRef = 8BA05A81072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AB1072073D300365D66 = {
+ fileRef = 8BA05A82072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AB2072073D300365D66 = {
+ fileRef = 8BA05A83072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AB3072073D300365D66 = {
+ fileRef = 8BA05A84072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AB4072073D300365D66 = {
+ fileRef = 8BA05A85072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AB5072073D300365D66 = {
+ fileRef = 8BA05A86072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AB7072073D300365D66 = {
+ fileRef = 8BA05A88072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AB8072073D300365D66 = {
+ fileRef = 8BA05A89072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AB9072073D300365D66 = {
+ fileRef = 8BA05A8A072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05ABA072073D300365D66 = {
+ fileRef = 8BA05A8B072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05ABB072073D300365D66 = {
+ fileRef = 8BA05A8D072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05ABC072073D300365D66 = {
+ fileRef = 8BA05A8E072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05ABD072073D300365D66 = {
+ fileRef = 8BA05A8F072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05ABE072073D300365D66 = {
+ fileRef = 8BA05A90072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05ABF072073D300365D66 = {
+ fileRef = 8BA05A91072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AC0072073D300365D66 = {
+ fileRef = 8BA05A92072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AC1072073D300365D66 = {
+ fileRef = 8BA05A93072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AC2072073D300365D66 = {
+ fileRef = 8BA05A94072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AC3072073D300365D66 = {
+ fileRef = 8BA05A95072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AC5072073D300365D66 = {
+ fileRef = 8BA05A98072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AC6072073D300365D66 = {
+ fileRef = 8BA05A9A072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AC7072073D300365D66 = {
+ fileRef = 8BA05A9B072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AD2072073D300365D66 = {
+ fileRef = 8BA05AA7072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AD3072073D300365D66 = {
+ fileRef = 8BA05AA8072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AD4072073D300365D66 = {
+ fileRef = 8BA05AA9072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AD5072073D300365D66 = {
+ fileRef = 8BA05AAA072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AD6072073D300365D66 = {
+ fileRef = 8BA05AAB072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AD7072073D300365D66 = {
+ fileRef = 8BA05AAC072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AD8072073D300365D66 = {
+ fileRef = 8BA05AAD072073D200365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05ADF0720742100365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = CAAudioChannelLayout.cpp;
+ path = /Developer/Examples/CoreAudio/PublicUtility/CAAudioChannelLayout.cpp;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05AE00720742100365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = CAAudioChannelLayout.h;
+ path = /Developer/Examples/CoreAudio/PublicUtility/CAAudioChannelLayout.h;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05AE10720742100365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = CAMutex.cpp;
+ path = /Developer/Examples/CoreAudio/PublicUtility/CAMutex.cpp;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05AE20720742100365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = CAMutex.h;
+ path = /Developer/Examples/CoreAudio/PublicUtility/CAMutex.h;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05AE30720742100365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = CAStreamBasicDescription.cpp;
+ path = /Developer/Examples/CoreAudio/PublicUtility/CAStreamBasicDescription.cpp;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05AE40720742100365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = CAStreamBasicDescription.h;
+ path = /Developer/Examples/CoreAudio/PublicUtility/CAStreamBasicDescription.h;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05AE50720742100365D66 = {
+ fileRef = 8BA05ADF0720742100365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AE60720742100365D66 = {
+ fileRef = 8BA05AE00720742100365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AE70720742100365D66 = {
+ fileRef = 8BA05AE10720742100365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AE80720742100365D66 = {
+ fileRef = 8BA05AE20720742100365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AE90720742100365D66 = {
+ fileRef = 8BA05AE30720742100365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AEA0720742100365D66 = {
+ fileRef = 8BA05AE40720742100365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05AEB0720742700365D66 = {
+ children = (
+ 8BA05B050720754400365D66,
+ 8BA05B060720754400365D66,
+ 8BA05ADF0720742100365D66,
+ 8BA05AE00720742100365D66,
+ 8BA05AE10720742100365D66,
+ 8BA05AE20720742100365D66,
+ 8BA05AE30720742100365D66,
+ 8BA05AE40720742100365D66,
+ );
+ isa = PBXGroup;
+ name = "Public Utility";
+ refType = 4;
+ sourceTree = "";
+ };
+ 8BA05AF9072074E100365D66 = {
+ isa = PBXFileReference;
+ lastKnownFileType = wrapper.framework;
+ name = AudioToolbox.framework;
+ path = /System/Library/Frameworks/AudioToolbox.framework;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05AFC072074E100365D66 = {
+ fileRef = 8BA05AF9072074E100365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05B01072074F900365D66 = {
+ isa = PBXFileReference;
+ lastKnownFileType = wrapper.framework;
+ name = CoreServices.framework;
+ path = /System/Library/Frameworks/CoreServices.framework;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05B02072074F900365D66 = {
+ fileRef = 8BA05B01072074F900365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05B050720754400365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = CAAUParameter.cpp;
+ path = /Developer/Examples/CoreAudio/PublicUtility/CAAUParameter.cpp;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05B060720754400365D66 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = CAAUParameter.h;
+ path = /Developer/Examples/CoreAudio/PublicUtility/CAAUParameter.h;
+ refType = 0;
+ sourceTree = "";
+ };
+ 8BA05B070720754400365D66 = {
+ fileRef = 8BA05B050720754400365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8BA05B080720754400365D66 = {
+ fileRef = 8BA05B060720754400365D66;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+//8B0
+//8B1
+//8B2
+//8B3
+//8B4
+//8D0
+//8D1
+//8D2
+//8D3
+//8D4
+ 8D01CCC60486CAD60068D4B7 = {
+ buildPhases = (
+ 8D01CCC70486CAD60068D4B7,
+ 8D01CCC90486CAD60068D4B7,
+ 8D01CCCB0486CAD60068D4B7,
+ 8D01CCCD0486CAD60068D4B7,
+ 8D01CCCF0486CAD60068D4B7,
+ 0C01261907AC3CE1009EC388,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ DEPLOYMENT_LOCATION = NO;
+ EXPORTED_SYMBOLS_FILE = audiounit.exp;
+ FRAMEWORK_SEARCH_PATHS = /Volumes/DATA/subversion/svn/vstgui/drawtest/mac;
+ GCC_ENABLE_TRIGRAPHS = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "${SRCROOT}/xcode_au_prefix.h";
+ GCC_PREPROCESSOR_DEFINITIONS = "";
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+ GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+ GCC_WARN_UNKNOWN_PRAGMAS = NO;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = "${SRCROOT}/resources ${SRCROOT}/mac ${SRCROOT}/source ${SRCROOT}/../../vstgui";
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
+ LIBRARY_SEARCH_PATHS = "";
+ LIBRARY_STYLE = Bundle;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "-bundle";
+ OTHER_REZFLAGS = "-I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase";
+ PRODUCT_NAME = drawtest;
+ REZ_SEARCH_PATHS = "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase";
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ WRAPPER_EXTENSION = component;
+ };
+ dependencies = (
+ );
+ isa = PBXNativeTarget;
+ name = AudioUnit;
+ productInstallPath = "$(HOME)/Library/Bundles";
+ productName = drawtest;
+ productReference = 8D01CCD20486CAD60068D4B7;
+ productType = "com.apple.product-type.bundle";
+ };
+ 8D01CCC70486CAD60068D4B7 = {
+ buildActionMask = 2147483647;
+ files = (
+ 8BA05AAF072073D300365D66,
+ 8BA05AB1072073D300365D66,
+ 8BA05AB3072073D300365D66,
+ 8BA05AB5072073D300365D66,
+ 8BA05AB8072073D300365D66,
+ 8BA05ABA072073D300365D66,
+ 8BA05ABC072073D300365D66,
+ 8BA05ABE072073D300365D66,
+ 8BA05AC1072073D300365D66,
+ 8BA05AC3072073D300365D66,
+ 8BA05AC5072073D300365D66,
+ 8BA05AC7072073D300365D66,
+ 8BA05AD3072073D300365D66,
+ 8BA05AD5072073D300365D66,
+ 8BA05AD6072073D300365D66,
+ 8BA05AD7072073D300365D66,
+ 8BA05AD8072073D300365D66,
+ 8BA05AE60720742100365D66,
+ 8BA05AE80720742100365D66,
+ 8BA05AEA0720742100365D66,
+ 8BA05B080720754400365D66,
+ 0CF355C707B173A3002BFE50,
+ 0CF355C907B173A3002BFE50,
+ 0CF355CB07B173A3002BFE50,
+ 0CF355CD07B173A3002BFE50,
+ 0CF355FE07B17600002BFE50,
+ );
+ isa = PBXHeadersBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8D01CCC90486CAD60068D4B7 = {
+ buildActionMask = 2147483647;
+ files = (
+ 0CF3555507B17126002BFE50,
+ 0CF3555607B17126002BFE50,
+ 0CF3555707B17126002BFE50,
+ 0CF3555807B17126002BFE50,
+ 0CF3555907B17126002BFE50,
+ 0CF3555A07B17126002BFE50,
+ 0CF3555B07B17126002BFE50,
+ 0CF3555C07B17126002BFE50,
+ 0CF3555D07B17126002BFE50,
+ 0CF3555E07B17126002BFE50,
+ 0CF3555F07B17126002BFE50,
+ 0CF3556007B17126002BFE50,
+ 0CF3556107B17126002BFE50,
+ 0CF3556207B17126002BFE50,
+ 0CF3556307B17126002BFE50,
+ 0CF3556407B17126002BFE50,
+ 0CF3556507B17126002BFE50,
+ 0CF3556607B17126002BFE50,
+ 0CF3556707B17126002BFE50,
+ );
+ isa = PBXResourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8D01CCCB0486CAD60068D4B7 = {
+ buildActionMask = 2147483647;
+ files = (
+ 8BA05AAE072073D300365D66,
+ 8BA05AB0072073D300365D66,
+ 8BA05AB2072073D300365D66,
+ 8BA05AB4072073D300365D66,
+ 8BA05AB7072073D300365D66,
+ 8BA05AB9072073D300365D66,
+ 8BA05ABB072073D300365D66,
+ 8BA05ABD072073D300365D66,
+ 8BA05ABF072073D300365D66,
+ 8BA05AC0072073D300365D66,
+ 8BA05AC2072073D300365D66,
+ 8BA05AC6072073D300365D66,
+ 8BA05AD2072073D300365D66,
+ 8BA05AD4072073D300365D66,
+ 8BA05AE50720742100365D66,
+ 8BA05AE70720742100365D66,
+ 8BA05AE90720742100365D66,
+ 8BA05B070720754400365D66,
+ 0C01253807AC359F009EC388,
+ 0C01253A07AC359F009EC388,
+ 0C01253C07AC359F009EC388,
+ 0C01253E07AC359F009EC388,
+ 0C01254007AC359F009EC388,
+ 0CF355C607B173A3002BFE50,
+ 0CF355C807B173A3002BFE50,
+ 0CF355CA07B173A3002BFE50,
+ 0CF355CC07B173A3002BFE50,
+ 0CF355FD07B17600002BFE50,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8D01CCCD0486CAD60068D4B7 = {
+ buildActionMask = 2147483647;
+ files = (
+ 8D01CCCE0486CAD60068D4B7,
+ 8BA05AFC072074E100365D66,
+ 8BA05B02072074F900365D66,
+ 0C1C289A07AC2824007128C4,
+ 0C1C289C07AC283C007128C4,
+ F40BD99707D3B28F00E1073A,
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8D01CCCE0486CAD60068D4B7 = {
+ fileRef = 08EA7FFBFE8413EDC02AAC07;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 8D01CCCF0486CAD60068D4B7 = {
+ buildActionMask = 2147483647;
+ files = (
+ 0C01262107AC3D21009EC388,
+ );
+ isa = PBXRezBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8D01CCD20486CAD60068D4B7 = {
+ explicitFileType = wrapper.cfbundle;
+ includeInIndex = 0;
+ isa = PBXFileReference;
+ path = drawtest.component;
+ refType = 3;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+//8D0
+//8D1
+//8D2
+//8D3
+//8D4
+//F40
+//F41
+//F42
+//F43
+//F44
+ F40BD99607D3B28F00E1073A = {
+ isa = PBXFileReference;
+ lastKnownFileType = wrapper.framework;
+ name = AudioUnit.framework;
+ path = /Volumes/DATA/subversion/svn/vstgui/drawtest/mac/AudioUnit.framework;
+ refType = 0;
+ sourceTree = "";
+ };
+ F40BD99707D3B28F00E1073A = {
+ fileRef = F40BD99607D3B28F00E1073A;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1D007B2320800010DAD = {
+ buildActionMask = 2147483647;
+ files = (
+ F4C9F1EE07B2332100010DAD,
+ F4C9F1EF07B2332200010DAD,
+ F4C9F1F007B2332200010DAD,
+ F4C9F1F107B2332300010DAD,
+ F4C9F1F207B2332400010DAD,
+ F4C9F1F307B2332400010DAD,
+ F4C9F1F407B2332500010DAD,
+ F4C9F1F507B2332500010DAD,
+ F4C9F1F607B2332600010DAD,
+ F4C9F1F707B2332700010DAD,
+ F4C9F1F807B2332700010DAD,
+ F4C9F1F907B2332800010DAD,
+ F4C9F1FA07B2332900010DAD,
+ F4C9F1FB07B2332A00010DAD,
+ F4C9F1FC07B2332B00010DAD,
+ F4C9F1FD07B2332B00010DAD,
+ F4C9F1FE07B2332C00010DAD,
+ F4C9F1FF07B2332C00010DAD,
+ F4C9F20007B2332D00010DAD,
+ );
+ isa = PBXResourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4C9F1D107B2320800010DAD = {
+ buildActionMask = 2147483647;
+ files = (
+ F4C9F1D607B232A100010DAD,
+ F4C9F1D807B232A300010DAD,
+ F4C9F1DC07B232A500010DAD,
+ F4C9F1DE07B232A600010DAD,
+ F4C9F1E607B232D600010DAD,
+ F4C9F1E707B232D600010DAD,
+ F4C9F20607B2335F00010DAD,
+ F4C9F46E07B2378600010DAD,
+ F4C9F46F07B2378800010DAD,
+ F4C9F47007B2378900010DAD,
+ F4C9F47107B2378B00010DAD,
+ F4C9F47207B2378D00010DAD,
+ F4C9F47407B2379F00010DAD,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4C9F1D207B2320800010DAD = {
+ buildActionMask = 2147483647;
+ files = (
+ F4C9F21C07B2339F00010DAD,
+ F4C9F21D07B233A100010DAD,
+ F4C9F21E07B233A100010DAD,
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4C9F1D307B2320800010DAD = {
+ buildPhases = (
+ F4C9F1D007B2320800010DAD,
+ F4C9F1D107B2320800010DAD,
+ F4C9F1D207B2320800010DAD,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = xcode_vst_prefix.h;
+ GENERATE_PKGINFO_FILE = YES;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(USER_LIBRARY_DIR)/Audio/Plug-Ins/VST";
+ LIBRARY_STYLE = BUNDLE;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "-framework Carbon";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = drawtest;
+ SECTORDER_FLAGS = "";
+ SKIP_INSTALL = NO;
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ WRAPPER_EXTENSION = vst;
+ };
+ dependencies = (
+ );
+ isa = PBXNativeTarget;
+ name = VST;
+ productName = "drawtest VST";
+ productReference = F4C9F1D407B2320800010DAD;
+ productSettingsXML = "
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ drawtest VST
+ CFBundleIdentifier
+ com.yourcompany.drawtest_VST
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ APPL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ CSResourcesFileMapped
+ yes
+
+
+";
+ productType = "com.apple.product-type.bundle";
+ };
+ F4C9F1D407B2320800010DAD = {
+ explicitFileType = wrapper.cfbundle;
+ includeInIndex = 0;
+ isa = PBXFileReference;
+ path = drawtest.vst;
+ refType = 3;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ F4C9F1D607B232A100010DAD = {
+ fileRef = 0C01252807AC359F009EC388;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1D807B232A300010DAD = {
+ fileRef = 0C01252A07AC359F009EC388;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1DC07B232A500010DAD = {
+ fileRef = 0C01252E07AC359F009EC388;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1DE07B232A600010DAD = {
+ fileRef = 0C01253007AC359F009EC388;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1E107B232B900010DAD = {
+ children = (
+ F4C9F1E307B232D600010DAD,
+ F4C9F1E407B232D600010DAD,
+ );
+ isa = PBXGroup;
+ name = "VST SDK 2.3";
+ refType = 4;
+ sourceTree = "";
+ };
+ F4C9F1E307B232D600010DAD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = AudioEffect.cpp;
+ path = ../vstsdk2.3/AudioEffect.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ F4C9F1E407B232D600010DAD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = audioeffectx.cpp;
+ path = ../vstsdk2.3/audioeffectx.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ F4C9F1E607B232D600010DAD = {
+ fileRef = F4C9F1E307B232D600010DAD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1E707B232D600010DAD = {
+ fileRef = F4C9F1E407B232D600010DAD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1EE07B2332100010DAD = {
+ fileRef = 0CF3554207B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1EF07B2332200010DAD = {
+ fileRef = 0CF3554307B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1F007B2332200010DAD = {
+ fileRef = 0CF3554407B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1F107B2332300010DAD = {
+ fileRef = 0CF3554607B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1F207B2332400010DAD = {
+ fileRef = 0CF3554507B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1F307B2332400010DAD = {
+ fileRef = 0CF3554707B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1F407B2332500010DAD = {
+ fileRef = 0CF3554807B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1F507B2332500010DAD = {
+ fileRef = 0CF3554907B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1F607B2332600010DAD = {
+ fileRef = 0CF3554A07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1F707B2332700010DAD = {
+ fileRef = 0CF3554B07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1F807B2332700010DAD = {
+ fileRef = 0CF3554C07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1F907B2332800010DAD = {
+ fileRef = 0CF3554D07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1FA07B2332900010DAD = {
+ fileRef = 0CF3554E07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1FB07B2332A00010DAD = {
+ fileRef = 0CF3554F07B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1FC07B2332B00010DAD = {
+ fileRef = 0CF3555007B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1FD07B2332B00010DAD = {
+ fileRef = 0CF3555107B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1FE07B2332C00010DAD = {
+ fileRef = 0CF3555207B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F1FF07B2332C00010DAD = {
+ fileRef = 0CF3555407B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F20007B2332D00010DAD = {
+ fileRef = 0CF3555307B17126002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F20407B2335F00010DAD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = aeffguieditor.cpp;
+ path = ../../vstgui/aeffguieditor.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ F4C9F20607B2335F00010DAD = {
+ fileRef = F4C9F20407B2335F00010DAD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F21C07B2339F00010DAD = {
+ fileRef = 08EA7FFBFE8413EDC02AAC07;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F21D07B233A100010DAD = {
+ fileRef = 0C1C289B07AC283C007128C4;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F21E07B233A100010DAD = {
+ fileRef = 0C1C289907AC2824007128C4;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F46E07B2378600010DAD = {
+ fileRef = 0CF355FB07B17600002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F46F07B2378800010DAD = {
+ fileRef = 0CF355BE07B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F47007B2378900010DAD = {
+ fileRef = 0CF355C007B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F47107B2378B00010DAD = {
+ fileRef = 0CF355C207B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F47207B2378D00010DAD = {
+ fileRef = 0CF355C407B173A3002BFE50;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ F4C9F47307B2379F00010DAD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.cpp.cpp;
+ name = pdrawtestmain.cpp;
+ path = ../source/pdrawtestmain.cpp;
+ refType = 2;
+ sourceTree = SOURCE_ROOT;
+ };
+ F4C9F47407B2379F00010DAD = {
+ fileRef = F4C9F47307B2379F00010DAD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ };
+ rootObject = 089C1669FE841209C02AAC07;
+}
diff --git a/vstgui.sf/drawtest/mac/drawtest.xcodeproj/project.pbxproj b/vstgui.sf/drawtest/mac/drawtest.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..bcb2a19
--- /dev/null
+++ b/vstgui.sf/drawtest/mac/drawtest.xcodeproj/project.pbxproj
@@ -0,0 +1,1142 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 0C01253807AC359F009EC388 /* cscrollview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C01252807AC359F009EC388 /* cscrollview.cpp */; };
+ 0C01253A07AC359F009EC388 /* ctabview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C01252A07AC359F009EC388 /* ctabview.cpp */; };
+ 0C01253C07AC359F009EC388 /* plugguieditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C01252C07AC359F009EC388 /* plugguieditor.cpp */; };
+ 0C01253E07AC359F009EC388 /* vstcontrols.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C01252E07AC359F009EC388 /* vstcontrols.cpp */; };
+ 0C01254007AC359F009EC388 /* vstgui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C01253007AC359F009EC388 /* vstgui.cpp */; };
+ 0C01262107AC3D21009EC388 /* audiounit.r in Rez */ = {isa = PBXBuildFile; fileRef = 0C01262007AC3D21009EC388 /* audiounit.r */; };
+ 0C1C289A07AC2824007128C4 /* System.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C1C289907AC2824007128C4 /* System.framework */; };
+ 0C1C289C07AC283C007128C4 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C1C289B07AC283C007128C4 /* QuickTime.framework */; };
+ 0CF3555507B17126002BFE50 /* bmp00001.png in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554207B17126002BFE50 /* bmp00001.png */; };
+ 0CF3555607B17126002BFE50 /* bmp00100.png in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554307B17126002BFE50 /* bmp00100.png */; };
+ 0CF3555707B17126002BFE50 /* bmp01000.png in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554407B17126002BFE50 /* bmp01000.png */; };
+ 0CF3555807B17126002BFE50 /* bmp10001.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554507B17126002BFE50 /* bmp10001.bmp */; };
+ 0CF3555907B17126002BFE50 /* bmp10002.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554607B17126002BFE50 /* bmp10002.bmp */; };
+ 0CF3555A07B17126002BFE50 /* bmp10003.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554707B17126002BFE50 /* bmp10003.bmp */; };
+ 0CF3555B07B17126002BFE50 /* bmp10004.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554807B17126002BFE50 /* bmp10004.bmp */; };
+ 0CF3555C07B17126002BFE50 /* bmp10005.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554907B17126002BFE50 /* bmp10005.bmp */; };
+ 0CF3555D07B17126002BFE50 /* bmp10006.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554A07B17126002BFE50 /* bmp10006.bmp */; };
+ 0CF3555E07B17126002BFE50 /* bmp10007.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554B07B17126002BFE50 /* bmp10007.bmp */; };
+ 0CF3555F07B17126002BFE50 /* bmp10008.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554C07B17126002BFE50 /* bmp10008.bmp */; };
+ 0CF3556007B17126002BFE50 /* bmp10009.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554D07B17126002BFE50 /* bmp10009.bmp */; };
+ 0CF3556107B17126002BFE50 /* bmp10010.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554E07B17126002BFE50 /* bmp10010.bmp */; };
+ 0CF3556207B17126002BFE50 /* bmp10011.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554F07B17126002BFE50 /* bmp10011.bmp */; };
+ 0CF3556307B17126002BFE50 /* bmp10012.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3555007B17126002BFE50 /* bmp10012.bmp */; };
+ 0CF3556407B17126002BFE50 /* bmp10013.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3555107B17126002BFE50 /* bmp10013.bmp */; };
+ 0CF3556507B17126002BFE50 /* bmp10014.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3555207B17126002BFE50 /* bmp10014.bmp */; };
+ 0CF3556607B17126002BFE50 /* bmp10015.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3555307B17126002BFE50 /* bmp10015.bmp */; };
+ 0CF3556707B17126002BFE50 /* bmp10016.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3555407B17126002BFE50 /* bmp10016.bmp */; };
+ 0CF355C607B173A3002BFE50 /* pdrawtesteditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CF355BE07B173A3002BFE50 /* pdrawtesteditor.cpp */; };
+ 0CF355C707B173A3002BFE50 /* pdrawtesteditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CF355BF07B173A3002BFE50 /* pdrawtesteditor.h */; };
+ 0CF355C807B173A3002BFE50 /* pdrawtesteffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CF355C007B173A3002BFE50 /* pdrawtesteffect.cpp */; };
+ 0CF355C907B173A3002BFE50 /* pdrawtesteffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CF355C107B173A3002BFE50 /* pdrawtesteffect.h */; };
+ 0CF355CA07B173A3002BFE50 /* pdrawtestview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CF355C207B173A3002BFE50 /* pdrawtestview.cpp */; };
+ 0CF355CB07B173A3002BFE50 /* pdrawtestview.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CF355C307B173A3002BFE50 /* pdrawtestview.h */; };
+ 0CF355CC07B173A3002BFE50 /* pprimitivesviews.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CF355C407B173A3002BFE50 /* pprimitivesviews.cpp */; };
+ 0CF355CD07B173A3002BFE50 /* pprimitivesviews.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CF355C507B173A3002BFE50 /* pprimitivesviews.h */; };
+ 0CF355FD07B17600002BFE50 /* controlsgui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CF355FB07B17600002BFE50 /* controlsgui.cpp */; };
+ 0CF355FE07B17600002BFE50 /* controlsgui.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CF355FC07B17600002BFE50 /* controlsgui.h */; };
+ 8BA05AAE072073D300365D66 /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A7F072073D200365D66 /* AUBase.cpp */; };
+ 8BA05AAF072073D300365D66 /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A80072073D200365D66 /* AUBase.h */; };
+ 8BA05AB0072073D300365D66 /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A81072073D200365D66 /* AUDispatch.cpp */; };
+ 8BA05AB1072073D300365D66 /* AUDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A82072073D200365D66 /* AUDispatch.h */; };
+ 8BA05AB2072073D300365D66 /* AUInputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A83072073D200365D66 /* AUInputElement.cpp */; };
+ 8BA05AB3072073D300365D66 /* AUInputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A84072073D200365D66 /* AUInputElement.h */; };
+ 8BA05AB4072073D300365D66 /* AUOutputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A85072073D200365D66 /* AUOutputElement.cpp */; };
+ 8BA05AB5072073D300365D66 /* AUOutputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A86072073D200365D66 /* AUOutputElement.h */; };
+ 8BA05AB7072073D300365D66 /* AUScopeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A88072073D200365D66 /* AUScopeElement.cpp */; };
+ 8BA05AB8072073D300365D66 /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A89072073D200365D66 /* AUScopeElement.h */; };
+ 8BA05AB9072073D300365D66 /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A8A072073D200365D66 /* ComponentBase.cpp */; };
+ 8BA05ABA072073D300365D66 /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A8B072073D200365D66 /* ComponentBase.h */; };
+ 8BA05ABB072073D300365D66 /* AUCarbonViewBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A8D072073D200365D66 /* AUCarbonViewBase.cpp */; };
+ 8BA05ABC072073D300365D66 /* AUCarbonViewBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A8E072073D200365D66 /* AUCarbonViewBase.h */; };
+ 8BA05ABD072073D300365D66 /* AUCarbonViewControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A8F072073D200365D66 /* AUCarbonViewControl.cpp */; };
+ 8BA05ABE072073D300365D66 /* AUCarbonViewControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A90072073D200365D66 /* AUCarbonViewControl.h */; };
+ 8BA05ABF072073D300365D66 /* AUCarbonViewDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A91072073D200365D66 /* AUCarbonViewDispatch.cpp */; };
+ 8BA05AC0072073D300365D66 /* AUControlGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A92072073D200365D66 /* AUControlGroup.cpp */; };
+ 8BA05AC1072073D300365D66 /* AUControlGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A93072073D200365D66 /* AUControlGroup.h */; };
+ 8BA05AC2072073D300365D66 /* CarbonEventHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A94072073D200365D66 /* CarbonEventHandler.cpp */; };
+ 8BA05AC3072073D300365D66 /* CarbonEventHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A95072073D200365D66 /* CarbonEventHandler.h */; };
+ 8BA05AC5072073D300365D66 /* AUViewLocalizedStringKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A98072073D200365D66 /* AUViewLocalizedStringKeys.h */; };
+ 8BA05AC6072073D300365D66 /* AUEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A9A072073D200365D66 /* AUEffectBase.cpp */; };
+ 8BA05AC7072073D300365D66 /* AUEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A9B072073D200365D66 /* AUEffectBase.h */; };
+ 8BA05AD2072073D300365D66 /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AA7072073D200365D66 /* AUBuffer.cpp */; };
+ 8BA05AD3072073D300365D66 /* AUBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AA8072073D200365D66 /* AUBuffer.h */; };
+ 8BA05AD4072073D300365D66 /* AUDebugDispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AA9072073D200365D66 /* AUDebugDispatcher.cpp */; };
+ 8BA05AD5072073D300365D66 /* AUDebugDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAA072073D200365D66 /* AUDebugDispatcher.h */; };
+ 8BA05AD6072073D300365D66 /* AUInputFormatConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAB072073D200365D66 /* AUInputFormatConverter.h */; };
+ 8BA05AD7072073D300365D66 /* AUSilentTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAC072073D200365D66 /* AUSilentTimeout.h */; };
+ 8BA05AD8072073D300365D66 /* AUTimestampGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAD072073D200365D66 /* AUTimestampGenerator.h */; };
+ 8BA05AE50720742100365D66 /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05ADF0720742100365D66 /* CAAudioChannelLayout.cpp */; };
+ 8BA05AE60720742100365D66 /* CAAudioChannelLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AE00720742100365D66 /* CAAudioChannelLayout.h */; };
+ 8BA05AE70720742100365D66 /* CAMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AE10720742100365D66 /* CAMutex.cpp */; };
+ 8BA05AE80720742100365D66 /* CAMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AE20720742100365D66 /* CAMutex.h */; };
+ 8BA05AE90720742100365D66 /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AE30720742100365D66 /* CAStreamBasicDescription.cpp */; };
+ 8BA05AEA0720742100365D66 /* CAStreamBasicDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AE40720742100365D66 /* CAStreamBasicDescription.h */; };
+ 8BA05AFC072074E100365D66 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BA05AF9072074E100365D66 /* AudioToolbox.framework */; };
+ 8BA05B02072074F900365D66 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BA05B01072074F900365D66 /* CoreServices.framework */; };
+ 8BA05B070720754400365D66 /* CAAUParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05B050720754400365D66 /* CAAUParameter.cpp */; };
+ 8BA05B080720754400365D66 /* CAAUParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05B060720754400365D66 /* CAAUParameter.h */; };
+ 8D01CCCE0486CAD60068D4B7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */; };
+ F4381433099A587F0042610E /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4381431099A587F0042610E /* CAVectorUnit.cpp */; };
+ F4381434099A587F0042610E /* CAVectorUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = F4381432099A587F0042610E /* CAVectorUnit.h */; };
+ F485AC4B086C15E700298D72 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F485AC4A086C15E700298D72 /* AudioUnit.framework */; };
+ F485AC51086C160100298D72 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B5C7F83076FB26000A15F61 /* CoreAudio.framework */; };
+ F4C9F1D607B232A100010DAD /* cscrollview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C01252807AC359F009EC388 /* cscrollview.cpp */; };
+ F4C9F1D807B232A300010DAD /* ctabview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C01252A07AC359F009EC388 /* ctabview.cpp */; };
+ F4C9F1DC07B232A500010DAD /* vstcontrols.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C01252E07AC359F009EC388 /* vstcontrols.cpp */; };
+ F4C9F1DE07B232A600010DAD /* vstgui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C01253007AC359F009EC388 /* vstgui.cpp */; };
+ F4C9F1E707B232D600010DAD /* audioeffectx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4C9F1E407B232D600010DAD /* audioeffectx.cpp */; };
+ F4C9F1EE07B2332100010DAD /* bmp00001.png in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554207B17126002BFE50 /* bmp00001.png */; };
+ F4C9F1EF07B2332200010DAD /* bmp00100.png in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554307B17126002BFE50 /* bmp00100.png */; };
+ F4C9F1F007B2332200010DAD /* bmp01000.png in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554407B17126002BFE50 /* bmp01000.png */; };
+ F4C9F1F107B2332300010DAD /* bmp10002.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554607B17126002BFE50 /* bmp10002.bmp */; };
+ F4C9F1F207B2332400010DAD /* bmp10001.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554507B17126002BFE50 /* bmp10001.bmp */; };
+ F4C9F1F307B2332400010DAD /* bmp10003.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554707B17126002BFE50 /* bmp10003.bmp */; };
+ F4C9F1F407B2332500010DAD /* bmp10004.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554807B17126002BFE50 /* bmp10004.bmp */; };
+ F4C9F1F507B2332500010DAD /* bmp10005.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554907B17126002BFE50 /* bmp10005.bmp */; };
+ F4C9F1F607B2332600010DAD /* bmp10006.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554A07B17126002BFE50 /* bmp10006.bmp */; };
+ F4C9F1F707B2332700010DAD /* bmp10007.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554B07B17126002BFE50 /* bmp10007.bmp */; };
+ F4C9F1F807B2332700010DAD /* bmp10008.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554C07B17126002BFE50 /* bmp10008.bmp */; };
+ F4C9F1F907B2332800010DAD /* bmp10009.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554D07B17126002BFE50 /* bmp10009.bmp */; };
+ F4C9F1FA07B2332900010DAD /* bmp10010.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554E07B17126002BFE50 /* bmp10010.bmp */; };
+ F4C9F1FB07B2332A00010DAD /* bmp10011.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3554F07B17126002BFE50 /* bmp10011.bmp */; };
+ F4C9F1FC07B2332B00010DAD /* bmp10012.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3555007B17126002BFE50 /* bmp10012.bmp */; };
+ F4C9F1FD07B2332B00010DAD /* bmp10013.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3555107B17126002BFE50 /* bmp10013.bmp */; };
+ F4C9F1FE07B2332C00010DAD /* bmp10014.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3555207B17126002BFE50 /* bmp10014.bmp */; };
+ F4C9F1FF07B2332C00010DAD /* bmp10016.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3555407B17126002BFE50 /* bmp10016.bmp */; };
+ F4C9F20007B2332D00010DAD /* bmp10015.bmp in Resources */ = {isa = PBXBuildFile; fileRef = 0CF3555307B17126002BFE50 /* bmp10015.bmp */; };
+ F4C9F20607B2335F00010DAD /* aeffguieditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4C9F20407B2335F00010DAD /* aeffguieditor.cpp */; };
+ F4C9F21C07B2339F00010DAD /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */; };
+ F4C9F21D07B233A100010DAD /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C1C289B07AC283C007128C4 /* QuickTime.framework */; };
+ F4C9F21E07B233A100010DAD /* System.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C1C289907AC2824007128C4 /* System.framework */; };
+ F4C9F46E07B2378600010DAD /* controlsgui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CF355FB07B17600002BFE50 /* controlsgui.cpp */; };
+ F4C9F46F07B2378800010DAD /* pdrawtesteditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CF355BE07B173A3002BFE50 /* pdrawtesteditor.cpp */; };
+ F4C9F47007B2378900010DAD /* pdrawtesteffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CF355C007B173A3002BFE50 /* pdrawtesteffect.cpp */; };
+ F4C9F47107B2378B00010DAD /* pdrawtestview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CF355C207B173A3002BFE50 /* pdrawtestview.cpp */; };
+ F4C9F47207B2378D00010DAD /* pprimitivesviews.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CF355C407B173A3002BFE50 /* pprimitivesviews.cpp */; };
+ F4C9F47407B2379F00010DAD /* pdrawtestmain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4C9F47307B2379F00010DAD /* pdrawtestmain.cpp */; };
+ F4FD4C6F08865DB400F20B72 /* cfileselector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FD4C6E08865DB400F20B72 /* cfileselector.cpp */; };
+ F4FD4C7008865DB400F20B72 /* cfileselector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FD4C6E08865DB400F20B72 /* cfileselector.cpp */; };
+ F4FF52580929FD9700DDED7A /* audioeffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4FF52570929FD9700DDED7A /* audioeffect.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXBuildStyle section */
+ 4F9091AC011F3BD104CA0E50 /* Development */ = {
+ isa = PBXBuildStyle;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ DEBUGGING_SYMBOLS = YES;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ MACOSX_DEPLOYMENT_TARGET = 10.2;
+ OPTIMIZATION_CFLAGS = "-O0";
+ ZERO_LINK = YES;
+ };
+ name = Development;
+ };
+ 4F9091AD011F3BD104CA0E50 /* Deployment */ = {
+ isa = PBXBuildStyle;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ ZERO_LINK = NO;
+ };
+ name = Deployment;
+ };
+/* End PBXBuildStyle section */
+
+/* Begin PBXFileReference section */
+ 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; };
+ 0C01252807AC359F009EC388 /* cscrollview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = cscrollview.cpp; path = ../../vstgui/cscrollview.cpp; sourceTree = SOURCE_ROOT; };
+ 0C01252A07AC359F009EC388 /* ctabview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ctabview.cpp; path = ../../vstgui/ctabview.cpp; sourceTree = SOURCE_ROOT; };
+ 0C01252C07AC359F009EC388 /* plugguieditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = plugguieditor.cpp; path = ../../vstgui/plugguieditor.cpp; sourceTree = SOURCE_ROOT; };
+ 0C01252E07AC359F009EC388 /* vstcontrols.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vstcontrols.cpp; path = ../../vstgui/vstcontrols.cpp; sourceTree = SOURCE_ROOT; };
+ 0C01253007AC359F009EC388 /* vstgui.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = vstgui.cpp; path = ../../vstgui/vstgui.cpp; sourceTree = SOURCE_ROOT; };
+ 0C01262007AC3D21009EC388 /* audiounit.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = audiounit.r; path = ../resources/audiounit.r; sourceTree = SOURCE_ROOT; };
+ 0C01265607AC430A009EC388 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; };
+ 0C1C289907AC2824007128C4 /* System.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = System.framework; path = /System/Library/Frameworks/System.framework; sourceTree = ""; };
+ 0C1C289B07AC283C007128C4 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = ""; };
+ 0CF3554207B17126002BFE50 /* bmp00001.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = bmp00001.png; path = ../resources/bmp00001.png; sourceTree = SOURCE_ROOT; };
+ 0CF3554307B17126002BFE50 /* bmp00100.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = bmp00100.png; path = ../resources/bmp00100.png; sourceTree = SOURCE_ROOT; };
+ 0CF3554407B17126002BFE50 /* bmp01000.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = bmp01000.png; path = ../resources/bmp01000.png; sourceTree = SOURCE_ROOT; };
+ 0CF3554507B17126002BFE50 /* bmp10001.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10001.bmp; path = ../resources/bmp10001.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3554607B17126002BFE50 /* bmp10002.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10002.bmp; path = ../resources/bmp10002.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3554707B17126002BFE50 /* bmp10003.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10003.bmp; path = ../resources/bmp10003.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3554807B17126002BFE50 /* bmp10004.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10004.bmp; path = ../resources/bmp10004.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3554907B17126002BFE50 /* bmp10005.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10005.bmp; path = ../resources/bmp10005.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3554A07B17126002BFE50 /* bmp10006.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10006.bmp; path = ../resources/bmp10006.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3554B07B17126002BFE50 /* bmp10007.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10007.bmp; path = ../resources/bmp10007.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3554C07B17126002BFE50 /* bmp10008.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10008.bmp; path = ../resources/bmp10008.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3554D07B17126002BFE50 /* bmp10009.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10009.bmp; path = ../resources/bmp10009.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3554E07B17126002BFE50 /* bmp10010.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10010.bmp; path = ../resources/bmp10010.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3554F07B17126002BFE50 /* bmp10011.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10011.bmp; path = ../resources/bmp10011.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3555007B17126002BFE50 /* bmp10012.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10012.bmp; path = ../resources/bmp10012.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3555107B17126002BFE50 /* bmp10013.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10013.bmp; path = ../resources/bmp10013.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3555207B17126002BFE50 /* bmp10014.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10014.bmp; path = ../resources/bmp10014.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3555307B17126002BFE50 /* bmp10015.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10015.bmp; path = ../resources/bmp10015.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF3555407B17126002BFE50 /* bmp10016.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = bmp10016.bmp; path = ../resources/bmp10016.bmp; sourceTree = SOURCE_ROOT; };
+ 0CF355BE07B173A3002BFE50 /* pdrawtesteditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pdrawtesteditor.cpp; path = ../source/pdrawtesteditor.cpp; sourceTree = SOURCE_ROOT; };
+ 0CF355BF07B173A3002BFE50 /* pdrawtesteditor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pdrawtesteditor.h; path = ../source/pdrawtesteditor.h; sourceTree = SOURCE_ROOT; };
+ 0CF355C007B173A3002BFE50 /* pdrawtesteffect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pdrawtesteffect.cpp; path = ../source/pdrawtesteffect.cpp; sourceTree = SOURCE_ROOT; };
+ 0CF355C107B173A3002BFE50 /* pdrawtesteffect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pdrawtesteffect.h; path = ../source/pdrawtesteffect.h; sourceTree = SOURCE_ROOT; };
+ 0CF355C207B173A3002BFE50 /* pdrawtestview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pdrawtestview.cpp; path = ../source/pdrawtestview.cpp; sourceTree = SOURCE_ROOT; };
+ 0CF355C307B173A3002BFE50 /* pdrawtestview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pdrawtestview.h; path = ../source/pdrawtestview.h; sourceTree = SOURCE_ROOT; };
+ 0CF355C407B173A3002BFE50 /* pprimitivesviews.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pprimitivesviews.cpp; path = ../source/pprimitivesviews.cpp; sourceTree = SOURCE_ROOT; };
+ 0CF355C507B173A3002BFE50 /* pprimitivesviews.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = pprimitivesviews.h; path = ../source/pprimitivesviews.h; sourceTree = SOURCE_ROOT; };
+ 0CF355FB07B17600002BFE50 /* controlsgui.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = controlsgui.cpp; path = ../source/controlsgui.cpp; sourceTree = SOURCE_ROOT; };
+ 0CF355FC07B17600002BFE50 /* controlsgui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = controlsgui.h; path = ../source/controlsgui.h; sourceTree = SOURCE_ROOT; };
+ 8B5C7F83076FB26000A15F61 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; };
+ 8BA05A7F072073D200365D66 /* AUBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUBase.cpp; sourceTree = ""; };
+ 8BA05A80072073D200365D66 /* AUBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUBase.h; sourceTree = ""; };
+ 8BA05A81072073D200365D66 /* AUDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUDispatch.cpp; sourceTree = ""; };
+ 8BA05A82072073D200365D66 /* AUDispatch.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUDispatch.h; sourceTree = ""; };
+ 8BA05A83072073D200365D66 /* AUInputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUInputElement.cpp; sourceTree = ""; };
+ 8BA05A84072073D200365D66 /* AUInputElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUInputElement.h; sourceTree = ""; };
+ 8BA05A85072073D200365D66 /* AUOutputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputElement.cpp; sourceTree = ""; };
+ 8BA05A86072073D200365D66 /* AUOutputElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUOutputElement.h; sourceTree = ""; };
+ 8BA05A87072073D200365D66 /* AUResources.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = AUResources.r; sourceTree = ""; };
+ 8BA05A88072073D200365D66 /* AUScopeElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUScopeElement.cpp; sourceTree = ""; };
+ 8BA05A89072073D200365D66 /* AUScopeElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUScopeElement.h; sourceTree = ""; };
+ 8BA05A8A072073D200365D66 /* ComponentBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ComponentBase.cpp; sourceTree = ""; };
+ 8BA05A8B072073D200365D66 /* ComponentBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ComponentBase.h; sourceTree = ""; };
+ 8BA05A8D072073D200365D66 /* AUCarbonViewBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewBase.cpp; sourceTree = ""; };
+ 8BA05A8E072073D200365D66 /* AUCarbonViewBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUCarbonViewBase.h; sourceTree = ""; };
+ 8BA05A8F072073D200365D66 /* AUCarbonViewControl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewControl.cpp; sourceTree = ""; };
+ 8BA05A90072073D200365D66 /* AUCarbonViewControl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUCarbonViewControl.h; sourceTree = ""; };
+ 8BA05A91072073D200365D66 /* AUCarbonViewDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewDispatch.cpp; sourceTree = ""; };
+ 8BA05A92072073D200365D66 /* AUControlGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUControlGroup.cpp; sourceTree = ""; };
+ 8BA05A93072073D200365D66 /* AUControlGroup.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUControlGroup.h; sourceTree = ""; };
+ 8BA05A94072073D200365D66 /* CarbonEventHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CarbonEventHandler.cpp; sourceTree = ""; };
+ 8BA05A95072073D200365D66 /* CarbonEventHandler.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CarbonEventHandler.h; sourceTree = ""; };
+ 8BA05A98072073D200365D66 /* AUViewLocalizedStringKeys.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUViewLocalizedStringKeys.h; sourceTree = ""; };
+ 8BA05A9A072073D200365D66 /* AUEffectBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUEffectBase.cpp; sourceTree = ""; };
+ 8BA05A9B072073D200365D66 /* AUEffectBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUEffectBase.h; sourceTree = ""; };
+ 8BA05AA7072073D200365D66 /* AUBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = ""; };
+ 8BA05AA8072073D200365D66 /* AUBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUBuffer.h; sourceTree = ""; };
+ 8BA05AA9072073D200365D66 /* AUDebugDispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUDebugDispatcher.cpp; sourceTree = ""; };
+ 8BA05AAA072073D200365D66 /* AUDebugDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUDebugDispatcher.h; sourceTree = ""; };
+ 8BA05AAB072073D200365D66 /* AUInputFormatConverter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUInputFormatConverter.h; sourceTree = ""; };
+ 8BA05AAC072073D200365D66 /* AUSilentTimeout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUSilentTimeout.h; sourceTree = ""; };
+ 8BA05AAD072073D200365D66 /* AUTimestampGenerator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUTimestampGenerator.h; sourceTree = ""; };
+ 8BA05ADF0720742100365D66 /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = CAAudioChannelLayout.cpp; path = /Developer/Examples/CoreAudio/PublicUtility/CAAudioChannelLayout.cpp; sourceTree = ""; };
+ 8BA05AE00720742100365D66 /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CAAudioChannelLayout.h; path = /Developer/Examples/CoreAudio/PublicUtility/CAAudioChannelLayout.h; sourceTree = ""; };
+ 8BA05AE10720742100365D66 /* CAMutex.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = CAMutex.cpp; path = /Developer/Examples/CoreAudio/PublicUtility/CAMutex.cpp; sourceTree = ""; };
+ 8BA05AE20720742100365D66 /* CAMutex.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CAMutex.h; path = /Developer/Examples/CoreAudio/PublicUtility/CAMutex.h; sourceTree = ""; };
+ 8BA05AE30720742100365D66 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = CAStreamBasicDescription.cpp; path = /Developer/Examples/CoreAudio/PublicUtility/CAStreamBasicDescription.cpp; sourceTree = ""; };
+ 8BA05AE40720742100365D66 /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CAStreamBasicDescription.h; path = /Developer/Examples/CoreAudio/PublicUtility/CAStreamBasicDescription.h; sourceTree = ""; };
+ 8BA05AF9072074E100365D66 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; };
+ 8BA05B01072074F900365D66 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; };
+ 8BA05B050720754400365D66 /* CAAUParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = CAAUParameter.cpp; path = /Developer/Examples/CoreAudio/PublicUtility/CAAUParameter.cpp; sourceTree = ""; };
+ 8BA05B060720754400365D66 /* CAAUParameter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CAAUParameter.h; path = /Developer/Examples/CoreAudio/PublicUtility/CAAUParameter.h; sourceTree = ""; };
+ 8D01CCD20486CAD60068D4B7 /* drawtest.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = drawtest.component; sourceTree = BUILT_PRODUCTS_DIR; };
+ F4381431099A587F0042610E /* CAVectorUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = CAVectorUnit.cpp; path = /Developer/Examples/CoreAudio/PublicUtility/CAVectorUnit.cpp; sourceTree = ""; };
+ F4381432099A587F0042610E /* CAVectorUnit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CAVectorUnit.h; path = /Developer/Examples/CoreAudio/PublicUtility/CAVectorUnit.h; sourceTree = ""; };
+ F485AC4A086C15E700298D72 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; };
+ F4C9F1D407B2320800010DAD /* drawtest.vst */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = drawtest.vst; sourceTree = BUILT_PRODUCTS_DIR; };
+ F4C9F1E407B232D600010DAD /* audioeffectx.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = audioeffectx.cpp; path = ../../../public.sdk/source/vst2.x/audioeffectx.cpp; sourceTree = SOURCE_ROOT; };
+ F4C9F20407B2335F00010DAD /* aeffguieditor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = aeffguieditor.cpp; path = ../../vstgui/aeffguieditor.cpp; sourceTree = SOURCE_ROOT; };
+ F4C9F47307B2379F00010DAD /* pdrawtestmain.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pdrawtestmain.cpp; path = ../source/pdrawtestmain.cpp; sourceTree = SOURCE_ROOT; };
+ F4FD4C6E08865DB400F20B72 /* cfileselector.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = cfileselector.cpp; path = ../../vstgui/cfileselector.cpp; sourceTree = SOURCE_ROOT; };
+ F4FF52570929FD9700DDED7A /* audioeffect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = audioeffect.cpp; path = ../../../public.sdk/source/vst2.x/audioeffect.cpp; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8D01CCCD0486CAD60068D4B7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D01CCCE0486CAD60068D4B7 /* Carbon.framework in Frameworks */,
+ 8BA05AFC072074E100365D66 /* AudioToolbox.framework in Frameworks */,
+ 8BA05B02072074F900365D66 /* CoreServices.framework in Frameworks */,
+ 0C1C289A07AC2824007128C4 /* System.framework in Frameworks */,
+ 0C1C289C07AC283C007128C4 /* QuickTime.framework in Frameworks */,
+ F485AC4B086C15E700298D72 /* AudioUnit.framework in Frameworks */,
+ F485AC51086C160100298D72 /* CoreAudio.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4C9F1D207B2320800010DAD /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F4C9F21C07B2339F00010DAD /* Carbon.framework in Frameworks */,
+ F4C9F21D07B233A100010DAD /* QuickTime.framework in Frameworks */,
+ F4C9F21E07B233A100010DAD /* System.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 089C166AFE841209C02AAC07 /* drawtest */ = {
+ isa = PBXGroup;
+ children = (
+ 0C01265607AC430A009EC388 /* Info.plist */,
+ 08FB77ADFE841716C02AAC07 /* Source */,
+ 089C167CFE841241C02AAC07 /* Resources */,
+ 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
+ 19C28FB4FE9D528D11CA2CBB /* Products */,
+ );
+ name = drawtest;
+ sourceTree = "";
+ };
+ 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ F485AC4A086C15E700298D72 /* AudioUnit.framework */,
+ 0C1C289B07AC283C007128C4 /* QuickTime.framework */,
+ 0C1C289907AC2824007128C4 /* System.framework */,
+ 8B5C7F83076FB26000A15F61 /* CoreAudio.framework */,
+ 8BA05B01072074F900365D66 /* CoreServices.framework */,
+ 8BA05AF9072074E100365D66 /* AudioToolbox.framework */,
+ 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "";
+ };
+ 089C167CFE841241C02AAC07 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 0CF3554207B17126002BFE50 /* bmp00001.png */,
+ 0CF3554307B17126002BFE50 /* bmp00100.png */,
+ 0CF3554407B17126002BFE50 /* bmp01000.png */,
+ 0CF3554507B17126002BFE50 /* bmp10001.bmp */,
+ 0CF3554607B17126002BFE50 /* bmp10002.bmp */,
+ 0CF3554707B17126002BFE50 /* bmp10003.bmp */,
+ 0CF3554807B17126002BFE50 /* bmp10004.bmp */,
+ 0CF3554907B17126002BFE50 /* bmp10005.bmp */,
+ 0CF3554A07B17126002BFE50 /* bmp10006.bmp */,
+ 0CF3554B07B17126002BFE50 /* bmp10007.bmp */,
+ 0CF3554C07B17126002BFE50 /* bmp10008.bmp */,
+ 0CF3554D07B17126002BFE50 /* bmp10009.bmp */,
+ 0CF3554E07B17126002BFE50 /* bmp10010.bmp */,
+ 0CF3554F07B17126002BFE50 /* bmp10011.bmp */,
+ 0CF3555007B17126002BFE50 /* bmp10012.bmp */,
+ 0CF3555107B17126002BFE50 /* bmp10013.bmp */,
+ 0CF3555207B17126002BFE50 /* bmp10014.bmp */,
+ 0CF3555307B17126002BFE50 /* bmp10015.bmp */,
+ 0CF3555407B17126002BFE50 /* bmp10016.bmp */,
+ 0C01262007AC3D21009EC388 /* audiounit.r */,
+ );
+ name = Resources;
+ sourceTree = "";
+ };
+ 08FB77ADFE841716C02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ F4C9F1E107B232B900010DAD /* VST SDK 2.4 */,
+ 0C1C269E07AB5DE8007128C4 /* VSTGUI */,
+ 8BA05AEB0720742700365D66 /* Public Utility */,
+ 8BA05A7D072073D200365D66 /* AUPublic */,
+ 8BA05A56072072A900365D66 /* Source */,
+ );
+ name = Source;
+ sourceTree = "";
+ };
+ 0C1C269E07AB5DE8007128C4 /* VSTGUI */ = {
+ isa = PBXGroup;
+ children = (
+ F4C9F20407B2335F00010DAD /* aeffguieditor.cpp */,
+ F4FD4C6E08865DB400F20B72 /* cfileselector.cpp */,
+ 0C01252807AC359F009EC388 /* cscrollview.cpp */,
+ 0C01252A07AC359F009EC388 /* ctabview.cpp */,
+ 0C01252C07AC359F009EC388 /* plugguieditor.cpp */,
+ 0C01252E07AC359F009EC388 /* vstcontrols.cpp */,
+ 0C01253007AC359F009EC388 /* vstgui.cpp */,
+ );
+ name = VSTGUI;
+ sourceTree = "";
+ };
+ 19C28FB4FE9D528D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8D01CCD20486CAD60068D4B7 /* drawtest.component */,
+ F4C9F1D407B2320800010DAD /* drawtest.vst */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 8BA05A56072072A900365D66 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ F4C9F47307B2379F00010DAD /* pdrawtestmain.cpp */,
+ 0CF355FB07B17600002BFE50 /* controlsgui.cpp */,
+ 0CF355FC07B17600002BFE50 /* controlsgui.h */,
+ 0CF355BE07B173A3002BFE50 /* pdrawtesteditor.cpp */,
+ 0CF355BF07B173A3002BFE50 /* pdrawtesteditor.h */,
+ 0CF355C007B173A3002BFE50 /* pdrawtesteffect.cpp */,
+ 0CF355C107B173A3002BFE50 /* pdrawtesteffect.h */,
+ 0CF355C207B173A3002BFE50 /* pdrawtestview.cpp */,
+ 0CF355C307B173A3002BFE50 /* pdrawtestview.h */,
+ 0CF355C407B173A3002BFE50 /* pprimitivesviews.cpp */,
+ 0CF355C507B173A3002BFE50 /* pprimitivesviews.h */,
+ );
+ name = Source;
+ sourceTree = "";
+ };
+ 8BA05A7D072073D200365D66 /* AUPublic */ = {
+ isa = PBXGroup;
+ children = (
+ 8BA05A7E072073D200365D66 /* AUBase */,
+ 8BA05A8C072073D200365D66 /* AUCarbonViewBase */,
+ 8BA05A97072073D200365D66 /* AUViewBase */,
+ 8BA05A99072073D200365D66 /* OtherBases */,
+ 8BA05AA6072073D200365D66 /* Utility */,
+ );
+ name = AUPublic;
+ path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic;
+ sourceTree = "";
+ };
+ 8BA05A7E072073D200365D66 /* AUBase */ = {
+ isa = PBXGroup;
+ children = (
+ 8BA05A7F072073D200365D66 /* AUBase.cpp */,
+ 8BA05A80072073D200365D66 /* AUBase.h */,
+ 8BA05A81072073D200365D66 /* AUDispatch.cpp */,
+ 8BA05A82072073D200365D66 /* AUDispatch.h */,
+ 8BA05A83072073D200365D66 /* AUInputElement.cpp */,
+ 8BA05A84072073D200365D66 /* AUInputElement.h */,
+ 8BA05A85072073D200365D66 /* AUOutputElement.cpp */,
+ 8BA05A86072073D200365D66 /* AUOutputElement.h */,
+ 8BA05A87072073D200365D66 /* AUResources.r */,
+ 8BA05A88072073D200365D66 /* AUScopeElement.cpp */,
+ 8BA05A89072073D200365D66 /* AUScopeElement.h */,
+ 8BA05A8A072073D200365D66 /* ComponentBase.cpp */,
+ 8BA05A8B072073D200365D66 /* ComponentBase.h */,
+ );
+ path = AUBase;
+ sourceTree = "";
+ };
+ 8BA05A8C072073D200365D66 /* AUCarbonViewBase */ = {
+ isa = PBXGroup;
+ children = (
+ 8BA05A8D072073D200365D66 /* AUCarbonViewBase.cpp */,
+ 8BA05A8E072073D200365D66 /* AUCarbonViewBase.h */,
+ 8BA05A8F072073D200365D66 /* AUCarbonViewControl.cpp */,
+ 8BA05A90072073D200365D66 /* AUCarbonViewControl.h */,
+ 8BA05A91072073D200365D66 /* AUCarbonViewDispatch.cpp */,
+ 8BA05A92072073D200365D66 /* AUControlGroup.cpp */,
+ 8BA05A93072073D200365D66 /* AUControlGroup.h */,
+ 8BA05A94072073D200365D66 /* CarbonEventHandler.cpp */,
+ 8BA05A95072073D200365D66 /* CarbonEventHandler.h */,
+ );
+ path = AUCarbonViewBase;
+ sourceTree = "";
+ };
+ 8BA05A97072073D200365D66 /* AUViewBase */ = {
+ isa = PBXGroup;
+ children = (
+ 8BA05A98072073D200365D66 /* AUViewLocalizedStringKeys.h */,
+ );
+ path = AUViewBase;
+ sourceTree = "";
+ };
+ 8BA05A99072073D200365D66 /* OtherBases */ = {
+ isa = PBXGroup;
+ children = (
+ 8BA05A9A072073D200365D66 /* AUEffectBase.cpp */,
+ 8BA05A9B072073D200365D66 /* AUEffectBase.h */,
+ );
+ path = OtherBases;
+ sourceTree = "";
+ };
+ 8BA05AA6072073D200365D66 /* Utility */ = {
+ isa = PBXGroup;
+ children = (
+ 8BA05AA7072073D200365D66 /* AUBuffer.cpp */,
+ 8BA05AA8072073D200365D66 /* AUBuffer.h */,
+ 8BA05AA9072073D200365D66 /* AUDebugDispatcher.cpp */,
+ 8BA05AAA072073D200365D66 /* AUDebugDispatcher.h */,
+ 8BA05AAB072073D200365D66 /* AUInputFormatConverter.h */,
+ 8BA05AAC072073D200365D66 /* AUSilentTimeout.h */,
+ 8BA05AAD072073D200365D66 /* AUTimestampGenerator.h */,
+ F4381431099A587F0042610E /* CAVectorUnit.cpp */,
+ F4381432099A587F0042610E /* CAVectorUnit.h */,
+ );
+ path = Utility;
+ sourceTree = "";
+ };
+ 8BA05AEB0720742700365D66 /* Public Utility */ = {
+ isa = PBXGroup;
+ children = (
+ 8BA05B050720754400365D66 /* CAAUParameter.cpp */,
+ 8BA05B060720754400365D66 /* CAAUParameter.h */,
+ 8BA05ADF0720742100365D66 /* CAAudioChannelLayout.cpp */,
+ 8BA05AE00720742100365D66 /* CAAudioChannelLayout.h */,
+ 8BA05AE10720742100365D66 /* CAMutex.cpp */,
+ 8BA05AE20720742100365D66 /* CAMutex.h */,
+ 8BA05AE30720742100365D66 /* CAStreamBasicDescription.cpp */,
+ 8BA05AE40720742100365D66 /* CAStreamBasicDescription.h */,
+ );
+ name = "Public Utility";
+ sourceTree = "";
+ };
+ F4C9F1E107B232B900010DAD /* VST SDK 2.4 */ = {
+ isa = PBXGroup;
+ children = (
+ F4FF52570929FD9700DDED7A /* audioeffect.cpp */,
+ F4C9F1E407B232D600010DAD /* audioeffectx.cpp */,
+ );
+ name = "VST SDK 2.4";
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 8D01CCC70486CAD60068D4B7 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8BA05AAF072073D300365D66 /* AUBase.h in Headers */,
+ 8BA05AB1072073D300365D66 /* AUDispatch.h in Headers */,
+ 8BA05AB3072073D300365D66 /* AUInputElement.h in Headers */,
+ 8BA05AB5072073D300365D66 /* AUOutputElement.h in Headers */,
+ 8BA05AB8072073D300365D66 /* AUScopeElement.h in Headers */,
+ 8BA05ABA072073D300365D66 /* ComponentBase.h in Headers */,
+ 8BA05ABC072073D300365D66 /* AUCarbonViewBase.h in Headers */,
+ 8BA05ABE072073D300365D66 /* AUCarbonViewControl.h in Headers */,
+ 8BA05AC1072073D300365D66 /* AUControlGroup.h in Headers */,
+ 8BA05AC3072073D300365D66 /* CarbonEventHandler.h in Headers */,
+ 8BA05AC5072073D300365D66 /* AUViewLocalizedStringKeys.h in Headers */,
+ 8BA05AC7072073D300365D66 /* AUEffectBase.h in Headers */,
+ 8BA05AD3072073D300365D66 /* AUBuffer.h in Headers */,
+ 8BA05AD5072073D300365D66 /* AUDebugDispatcher.h in Headers */,
+ 8BA05AD6072073D300365D66 /* AUInputFormatConverter.h in Headers */,
+ 8BA05AD7072073D300365D66 /* AUSilentTimeout.h in Headers */,
+ 8BA05AD8072073D300365D66 /* AUTimestampGenerator.h in Headers */,
+ 8BA05AE60720742100365D66 /* CAAudioChannelLayout.h in Headers */,
+ 8BA05AE80720742100365D66 /* CAMutex.h in Headers */,
+ 8BA05AEA0720742100365D66 /* CAStreamBasicDescription.h in Headers */,
+ 8BA05B080720754400365D66 /* CAAUParameter.h in Headers */,
+ 0CF355C707B173A3002BFE50 /* pdrawtesteditor.h in Headers */,
+ 0CF355C907B173A3002BFE50 /* pdrawtesteffect.h in Headers */,
+ 0CF355CB07B173A3002BFE50 /* pdrawtestview.h in Headers */,
+ 0CF355CD07B173A3002BFE50 /* pprimitivesviews.h in Headers */,
+ 0CF355FE07B17600002BFE50 /* controlsgui.h in Headers */,
+ F4381434099A587F0042610E /* CAVectorUnit.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 8D01CCC60486CAD60068D4B7 /* AudioUnit */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F485AB6F086C0BE900298D72 /* Build configuration list for PBXNativeTarget "AudioUnit" */;
+ buildPhases = (
+ 8D01CCC70486CAD60068D4B7 /* Headers */,
+ 8D01CCC90486CAD60068D4B7 /* Resources */,
+ 8D01CCCB0486CAD60068D4B7 /* Sources */,
+ 8D01CCCD0486CAD60068D4B7 /* Frameworks */,
+ 8D01CCCF0486CAD60068D4B7 /* Rez */,
+ 0C01261907AC3CE1009EC388 /* ShellScript */,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ DEPLOYMENT_LOCATION = NO;
+ EXPORTED_SYMBOLS_FILE = audiounit.exp;
+ FRAMEWORK_SEARCH_PATHS = /Volumes/DATA/subversion/svn/vstgui/drawtest/mac;
+ GCC_ENABLE_TRIGRAPHS = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "${SRCROOT}/xcode_au_prefix.h";
+ GCC_PREPROCESSOR_DEFINITIONS = "";
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+ GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+ GCC_WARN_UNKNOWN_PRAGMAS = NO;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ "${SRCROOT}/resources",
+ "${SRCROOT}/mac",
+ "${SRCROOT}/source",
+ "${SRCROOT}/../../vstgui",
+ );
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
+ LIBRARY_SEARCH_PATHS = "";
+ LIBRARY_STYLE = Bundle;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "-bundle";
+ OTHER_REZFLAGS = "-I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase";
+ PRODUCT_NAME = drawtest;
+ REZ_SEARCH_PATHS = (
+ /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers,
+ /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase,
+ );
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = component;
+ };
+ dependencies = (
+ );
+ name = AudioUnit;
+ productInstallPath = "$(HOME)/Library/Bundles";
+ productName = drawtest;
+ productReference = 8D01CCD20486CAD60068D4B7 /* drawtest.component */;
+ productType = "com.apple.product-type.bundle";
+ };
+ F4C9F1D307B2320800010DAD /* VST */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F485AB73086C0BE900298D72 /* Build configuration list for PBXNativeTarget "VST" */;
+ buildPhases = (
+ F4C9F1D007B2320800010DAD /* Resources */,
+ F4C9F1D107B2320800010DAD /* Sources */,
+ F4C9F1D207B2320800010DAD /* Frameworks */,
+ );
+ buildRules = (
+ );
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = xcode_vst_prefix.h;
+ GENERATE_PKGINFO_FILE = YES;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(USER_LIBRARY_DIR)/Audio/Plug-Ins/VST";
+ LIBRARY_STYLE = BUNDLE;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Carbon,
+ );
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = drawtest;
+ SECTORDER_FLAGS = "";
+ SKIP_INSTALL = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = vst;
+ };
+ dependencies = (
+ );
+ name = VST;
+ productName = "drawtest VST";
+ productReference = F4C9F1D407B2320800010DAD /* drawtest.vst */;
+ productSettingsXML = "
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ drawtest VST
+ CFBundleIdentifier
+ com.yourcompany.drawtest_VST
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ APPL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ CSResourcesFileMapped
+ yes
+
+
+";
+ productType = "com.apple.product-type.bundle";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 089C1669FE841209C02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = F485AB77086C0BE900298D72 /* Build configuration list for PBXProject "drawtest" */;
+ buildSettings = {
+ };
+ buildStyles = (
+ 4F9091AC011F3BD104CA0E50 /* Development */,
+ 4F9091AD011F3BD104CA0E50 /* Deployment */,
+ );
+ hasScannedForEncodings = 1;
+ mainGroup = 089C166AFE841209C02AAC07 /* drawtest */;
+ projectDirPath = "";
+ targets = (
+ 8D01CCC60486CAD60068D4B7 /* AudioUnit */,
+ F4C9F1D307B2320800010DAD /* VST */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8D01CCC90486CAD60068D4B7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0CF3555507B17126002BFE50 /* bmp00001.png in Resources */,
+ 0CF3555607B17126002BFE50 /* bmp00100.png in Resources */,
+ 0CF3555707B17126002BFE50 /* bmp01000.png in Resources */,
+ 0CF3555807B17126002BFE50 /* bmp10001.bmp in Resources */,
+ 0CF3555907B17126002BFE50 /* bmp10002.bmp in Resources */,
+ 0CF3555A07B17126002BFE50 /* bmp10003.bmp in Resources */,
+ 0CF3555B07B17126002BFE50 /* bmp10004.bmp in Resources */,
+ 0CF3555C07B17126002BFE50 /* bmp10005.bmp in Resources */,
+ 0CF3555D07B17126002BFE50 /* bmp10006.bmp in Resources */,
+ 0CF3555E07B17126002BFE50 /* bmp10007.bmp in Resources */,
+ 0CF3555F07B17126002BFE50 /* bmp10008.bmp in Resources */,
+ 0CF3556007B17126002BFE50 /* bmp10009.bmp in Resources */,
+ 0CF3556107B17126002BFE50 /* bmp10010.bmp in Resources */,
+ 0CF3556207B17126002BFE50 /* bmp10011.bmp in Resources */,
+ 0CF3556307B17126002BFE50 /* bmp10012.bmp in Resources */,
+ 0CF3556407B17126002BFE50 /* bmp10013.bmp in Resources */,
+ 0CF3556507B17126002BFE50 /* bmp10014.bmp in Resources */,
+ 0CF3556607B17126002BFE50 /* bmp10015.bmp in Resources */,
+ 0CF3556707B17126002BFE50 /* bmp10016.bmp in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4C9F1D007B2320800010DAD /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F4C9F1EE07B2332100010DAD /* bmp00001.png in Resources */,
+ F4C9F1EF07B2332200010DAD /* bmp00100.png in Resources */,
+ F4C9F1F007B2332200010DAD /* bmp01000.png in Resources */,
+ F4C9F1F107B2332300010DAD /* bmp10002.bmp in Resources */,
+ F4C9F1F207B2332400010DAD /* bmp10001.bmp in Resources */,
+ F4C9F1F307B2332400010DAD /* bmp10003.bmp in Resources */,
+ F4C9F1F407B2332500010DAD /* bmp10004.bmp in Resources */,
+ F4C9F1F507B2332500010DAD /* bmp10005.bmp in Resources */,
+ F4C9F1F607B2332600010DAD /* bmp10006.bmp in Resources */,
+ F4C9F1F707B2332700010DAD /* bmp10007.bmp in Resources */,
+ F4C9F1F807B2332700010DAD /* bmp10008.bmp in Resources */,
+ F4C9F1F907B2332800010DAD /* bmp10009.bmp in Resources */,
+ F4C9F1FA07B2332900010DAD /* bmp10010.bmp in Resources */,
+ F4C9F1FB07B2332A00010DAD /* bmp10011.bmp in Resources */,
+ F4C9F1FC07B2332B00010DAD /* bmp10012.bmp in Resources */,
+ F4C9F1FD07B2332B00010DAD /* bmp10013.bmp in Resources */,
+ F4C9F1FE07B2332C00010DAD /* bmp10014.bmp in Resources */,
+ F4C9F1FF07B2332C00010DAD /* bmp10016.bmp in Resources */,
+ F4C9F20007B2332D00010DAD /* bmp10015.bmp in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXRezBuildPhase section */
+ 8D01CCCF0486CAD60068D4B7 /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0C01262107AC3D21009EC388 /* audiounit.r in Rez */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXRezBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 0C01261907AC3CE1009EC388 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "cp -p -r -f \"build/$CONFIGURATION/drawtest.component\" \"$HOME/Library/Audio/Plug-Ins/Components/\" \ntouch \"$HOME/Library/Audio/Plug-Ins/Components/drawtest.component\"\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8D01CCCB0486CAD60068D4B7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8BA05AAE072073D300365D66 /* AUBase.cpp in Sources */,
+ 8BA05AB0072073D300365D66 /* AUDispatch.cpp in Sources */,
+ 8BA05AB2072073D300365D66 /* AUInputElement.cpp in Sources */,
+ 8BA05AB4072073D300365D66 /* AUOutputElement.cpp in Sources */,
+ 8BA05AB7072073D300365D66 /* AUScopeElement.cpp in Sources */,
+ 8BA05AB9072073D300365D66 /* ComponentBase.cpp in Sources */,
+ 8BA05ABB072073D300365D66 /* AUCarbonViewBase.cpp in Sources */,
+ 8BA05ABD072073D300365D66 /* AUCarbonViewControl.cpp in Sources */,
+ 8BA05ABF072073D300365D66 /* AUCarbonViewDispatch.cpp in Sources */,
+ 8BA05AC0072073D300365D66 /* AUControlGroup.cpp in Sources */,
+ 8BA05AC2072073D300365D66 /* CarbonEventHandler.cpp in Sources */,
+ 8BA05AC6072073D300365D66 /* AUEffectBase.cpp in Sources */,
+ 8BA05AD2072073D300365D66 /* AUBuffer.cpp in Sources */,
+ 8BA05AD4072073D300365D66 /* AUDebugDispatcher.cpp in Sources */,
+ 8BA05AE50720742100365D66 /* CAAudioChannelLayout.cpp in Sources */,
+ 8BA05AE70720742100365D66 /* CAMutex.cpp in Sources */,
+ 8BA05AE90720742100365D66 /* CAStreamBasicDescription.cpp in Sources */,
+ 8BA05B070720754400365D66 /* CAAUParameter.cpp in Sources */,
+ 0C01253807AC359F009EC388 /* cscrollview.cpp in Sources */,
+ 0C01253A07AC359F009EC388 /* ctabview.cpp in Sources */,
+ 0C01253C07AC359F009EC388 /* plugguieditor.cpp in Sources */,
+ 0C01253E07AC359F009EC388 /* vstcontrols.cpp in Sources */,
+ 0C01254007AC359F009EC388 /* vstgui.cpp in Sources */,
+ 0CF355C607B173A3002BFE50 /* pdrawtesteditor.cpp in Sources */,
+ 0CF355C807B173A3002BFE50 /* pdrawtesteffect.cpp in Sources */,
+ 0CF355CA07B173A3002BFE50 /* pdrawtestview.cpp in Sources */,
+ 0CF355CC07B173A3002BFE50 /* pprimitivesviews.cpp in Sources */,
+ 0CF355FD07B17600002BFE50 /* controlsgui.cpp in Sources */,
+ F4FD4C7008865DB400F20B72 /* cfileselector.cpp in Sources */,
+ F4381433099A587F0042610E /* CAVectorUnit.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F4C9F1D107B2320800010DAD /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F4C9F1D607B232A100010DAD /* cscrollview.cpp in Sources */,
+ F4C9F1D807B232A300010DAD /* ctabview.cpp in Sources */,
+ F4C9F1DC07B232A500010DAD /* vstcontrols.cpp in Sources */,
+ F4C9F1DE07B232A600010DAD /* vstgui.cpp in Sources */,
+ F4C9F1E707B232D600010DAD /* audioeffectx.cpp in Sources */,
+ F4C9F20607B2335F00010DAD /* aeffguieditor.cpp in Sources */,
+ F4C9F46E07B2378600010DAD /* controlsgui.cpp in Sources */,
+ F4C9F46F07B2378800010DAD /* pdrawtesteditor.cpp in Sources */,
+ F4C9F47007B2378900010DAD /* pdrawtesteffect.cpp in Sources */,
+ F4C9F47107B2378B00010DAD /* pdrawtestview.cpp in Sources */,
+ F4C9F47207B2378D00010DAD /* pprimitivesviews.cpp in Sources */,
+ F4C9F47407B2379F00010DAD /* pdrawtestmain.cpp in Sources */,
+ F4FD4C6F08865DB400F20B72 /* cfileselector.cpp in Sources */,
+ F4FF52580929FD9700DDED7A /* audioeffect.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ F485AB70086C0BE900298D72 /* Development */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ DEBUGGING_SYMBOLS = YES;
+ DEPLOYMENT_LOCATION = NO;
+ EXPORTED_SYMBOLS_FILE = audiounit.exp;
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_ENABLE_TRIGRAPHS = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "${SRCROOT}/xcode_au_prefix.h";
+ GCC_PREPROCESSOR_DEFINITIONS = "";
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+ GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+ GCC_WARN_UNKNOWN_PRAGMAS = NO;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ "${SRCROOT}/resources",
+ "${SRCROOT}/mac",
+ "${SRCROOT}/source",
+ "${SRCROOT}/../../vstgui",
+ );
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
+ LIBRARY_SEARCH_PATHS = "";
+ LIBRARY_STYLE = Bundle;
+ MACOSX_DEPLOYMENT_TARGET = 10.2;
+ OPTIMIZATION_CFLAGS = "-O0";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "-bundle";
+ OTHER_REZFLAGS = "-I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase -D TARGET_REZ_MAC_PPC=1";
+ PRODUCT_NAME = drawtest;
+ REZ_SEARCH_PATHS = (
+ /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers,
+ /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase,
+ );
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = component;
+ ZERO_LINK = NO;
+ };
+ name = Development;
+ };
+ F485AB71086C0BE900298D72 /* Deployment */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ DEAD_CODE_STRIPPING = YES;
+ DEPLOYMENT_LOCATION = NO;
+ DEPLOYMENT_POSTPROCESSING = YES;
+ EXPORTED_SYMBOLS_FILE = audiounit.exp;
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_AUTO_VECTORIZATION = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_ENABLE_TRIGRAPHS = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_OPTIMIZATION_LEVEL = 3;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "${SRCROOT}/xcode_au_prefix.h";
+ GCC_PREPROCESSOR_DEFINITIONS = "";
+ GCC_UNROLL_LOOPS = YES;
+ GCC_USE_GCC3_PFE_SUPPORT = YES;
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+ GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+ GCC_WARN_UNKNOWN_PRAGMAS = NO;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ "${SRCROOT}/resources",
+ "${SRCROOT}/mac",
+ "${SRCROOT}/source",
+ "${SRCROOT}/../../vstgui",
+ );
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
+ LIBRARY_SEARCH_PATHS = "";
+ LIBRARY_STYLE = Bundle;
+ MACOSX_DEPLOYMENT_TARGET = 10.2;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "-bundle";
+ OTHER_REZFLAGS = "-I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase -D TARGET_REZ_MAC_PPC=1";
+ PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
+ PRODUCT_NAME = drawtest;
+ REZ_SEARCH_PATHS = (
+ /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers,
+ /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase,
+ );
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = component;
+ ZERO_LINK = NO;
+ };
+ name = Deployment;
+ };
+ F485AB72086C0BE900298D72 /* Default */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ DEPLOYMENT_LOCATION = NO;
+ EXPORTED_SYMBOLS_FILE = audiounit.exp;
+ FRAMEWORK_SEARCH_PATHS = "";
+ GCC_ENABLE_TRIGRAPHS = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "${SRCROOT}/xcode_au_prefix.h";
+ GCC_PREPROCESSOR_DEFINITIONS = "";
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+ GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+ GCC_WARN_UNKNOWN_PRAGMAS = NO;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ "${SRCROOT}/resources",
+ "${SRCROOT}/mac",
+ "${SRCROOT}/source",
+ "${SRCROOT}/../../vstgui",
+ );
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
+ LIBRARY_SEARCH_PATHS = "";
+ LIBRARY_STYLE = Bundle;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "-bundle";
+ OTHER_REZFLAGS = "-I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase -D TARGET_REZ_MAC_PPC=1";
+ PRODUCT_NAME = drawtest;
+ REZ_SEARCH_PATHS = (
+ /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers,
+ /Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase,
+ );
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = component;
+ };
+ name = Default;
+ };
+ F485AB74086C0BE900298D72 /* Development */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ DEBUGGING_SYMBOLS = YES;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = xcode_vst_prefix.h;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(SRCROOT)/../../..",
+ "$(SRCROOT)/../../../public.sdk/source/vst2.x",
+ );
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(USER_LIBRARY_DIR)/Audio/Plug-Ins/VST";
+ LIBRARY_STYLE = BUNDLE;
+ MACOSX_DEPLOYMENT_TARGET = 10.2;
+ OPTIMIZATION_CFLAGS = "-O0";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Carbon,
+ );
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = drawtest;
+ SECTORDER_FLAGS = "";
+ SKIP_INSTALL = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = vst;
+ ZERO_LINK = NO;
+ };
+ name = Development;
+ };
+ F485AB75086C0BE900298D72 /* Deployment */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ DEAD_CODE_STRIPPING = YES;
+ DEPLOYMENT_POSTPROCESSING = YES;
+ GCC_AUTO_VECTORIZATION = YES;
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_OPTIMIZATION_LEVEL = 3;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = xcode_vst_prefix.h;
+ GCC_UNROLL_LOOPS = YES;
+ GCC_USE_GCC3_PFE_SUPPORT = YES;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(SRCROOT)/../../..",
+ "$(SRCROOT)/../../../public.sdk/source/vst2.x",
+ );
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(USER_LIBRARY_DIR)/Audio/Plug-Ins/VST";
+ LIBRARY_STYLE = BUNDLE;
+ MACOSX_DEPLOYMENT_TARGET = 10.2;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Carbon,
+ );
+ OTHER_REZFLAGS = "";
+ PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
+ PRODUCT_NAME = drawtest;
+ SECTORDER_FLAGS = "";
+ SKIP_INSTALL = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = vst;
+ ZERO_LINK = NO;
+ };
+ name = Deployment;
+ };
+ F485AB76086C0BE900298D72 /* Default */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = xcode_vst_prefix.h;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = ../vstsdk2.3;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(USER_LIBRARY_DIR)/Audio/Plug-Ins/VST";
+ LIBRARY_STYLE = BUNDLE;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Carbon,
+ );
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = drawtest;
+ SECTORDER_FLAGS = "";
+ SKIP_INSTALL = NO;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = vst;
+ };
+ name = Default;
+ };
+ F485AB78086C0BE900298D72 /* Development */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ };
+ name = Development;
+ };
+ F485AB79086C0BE900298D72 /* Deployment */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ ppc,
+ i386,
+ );
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ };
+ name = Deployment;
+ };
+ F485AB7A086C0BE900298D72 /* Default */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ };
+ name = Default;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ F485AB6F086C0BE900298D72 /* Build configuration list for PBXNativeTarget "AudioUnit" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F485AB70086C0BE900298D72 /* Development */,
+ F485AB71086C0BE900298D72 /* Deployment */,
+ F485AB72086C0BE900298D72 /* Default */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Default;
+ };
+ F485AB73086C0BE900298D72 /* Build configuration list for PBXNativeTarget "VST" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F485AB74086C0BE900298D72 /* Development */,
+ F485AB75086C0BE900298D72 /* Deployment */,
+ F485AB76086C0BE900298D72 /* Default */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Default;
+ };
+ F485AB77086C0BE900298D72 /* Build configuration list for PBXProject "drawtest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F485AB78086C0BE900298D72 /* Development */,
+ F485AB79086C0BE900298D72 /* Deployment */,
+ F485AB7A086C0BE900298D72 /* Default */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Default;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 089C1669FE841209C02AAC07 /* Project object */;
+}
diff --git a/vstgui.sf/drawtest/mac/xcode_au_prefix.h b/vstgui.sf/drawtest/mac/xcode_au_prefix.h
new file mode 100644
index 0000000..4465d96
--- /dev/null
+++ b/vstgui.sf/drawtest/mac/xcode_au_prefix.h
@@ -0,0 +1,8 @@
+#define PLUGGUI 1
+#define AU 1
+#define PluginGUIEditor AEffGUIEditor
+#include "vstplugsquartz.h"
+
+#include
+#include
+#include "vstgui.h"
diff --git a/vstgui.sf/drawtest/mac/xcode_vst_prefix.h b/vstgui.sf/drawtest/mac/xcode_vst_prefix.h
new file mode 100644
index 0000000..5b55590
--- /dev/null
+++ b/vstgui.sf/drawtest/mac/xcode_vst_prefix.h
@@ -0,0 +1,4 @@
+#include "vstplugsquartz.h"
+
+#include
+#include "vstgui.h"
diff --git a/vstgui.sf/drawtest/resources/audiounit.r b/vstgui.sf/drawtest/resources/audiounit.r
new file mode 100644
index 0000000..b4d71ff
--- /dev/null
+++ b/vstgui.sf/drawtest/resources/audiounit.r
@@ -0,0 +1,34 @@
+#define kComponentSubType 'vgdt'
+#define kComponentManuf 'Xxxx'
+#define kVersionNumber 0x00010000
+
+#include
+#include
+
+// ____________________________________________________________________________
+// component resources for Audio Unit
+#define RES_ID 3000
+#define COMP_TYPE kAudioUnitType_Effect
+#define COMP_SUBTYPE kComponentSubType
+#define COMP_MANUF kComponentManuf
+#define VERSION kVersionNumber
+#define NAME "VSTGUI: DrawTest"
+#define DESCRIPTION "DrawTest"
+#define ENTRY_POINT "DrawTestAUEntry"
+
+#include "AUResources.r"
+
+
+// ____________________________________________________________________________
+// component resources for Audio Unit Carbon View
+#define RES_ID 9000
+#define COMP_TYPE kAudioUnitCarbonViewComponentType
+#define COMP_SUBTYPE kComponentSubType
+#define COMP_MANUF kComponentManuf
+#define VERSION kVersionNumber
+#define NAME "VSTGUI AUView"
+#define DESCRIPTION "VSTGUI AUView"
+#define ENTRY_POINT "VSTGUIAUViewEntry"
+
+#include "AUResources.r"
+
diff --git a/vstgui.sf/drawtest/resources/bmp00001.png b/vstgui.sf/drawtest/resources/bmp00001.png
new file mode 100644
index 0000000..c8f5b08
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp00001.png differ
diff --git a/vstgui.sf/drawtest/resources/bmp00100.png b/vstgui.sf/drawtest/resources/bmp00100.png
new file mode 100644
index 0000000..d097f30
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp00100.png differ
diff --git a/vstgui.sf/drawtest/resources/bmp01000.png b/vstgui.sf/drawtest/resources/bmp01000.png
new file mode 100644
index 0000000..1e355ae
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp01000.png differ
diff --git a/vstgui.sf/drawtest/resources/bmp10001.bmp b/vstgui.sf/drawtest/resources/bmp10001.bmp
new file mode 100644
index 0000000..03f063e
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10001.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10002.bmp b/vstgui.sf/drawtest/resources/bmp10002.bmp
new file mode 100644
index 0000000..e3a8aed
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10002.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10003.bmp b/vstgui.sf/drawtest/resources/bmp10003.bmp
new file mode 100644
index 0000000..2954fc0
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10003.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10004.bmp b/vstgui.sf/drawtest/resources/bmp10004.bmp
new file mode 100644
index 0000000..e0c7fd5
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10004.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10005.bmp b/vstgui.sf/drawtest/resources/bmp10005.bmp
new file mode 100644
index 0000000..15cb22d
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10005.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10006.bmp b/vstgui.sf/drawtest/resources/bmp10006.bmp
new file mode 100644
index 0000000..47117de
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10006.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10007.bmp b/vstgui.sf/drawtest/resources/bmp10007.bmp
new file mode 100644
index 0000000..bfb1941
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10007.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10008.bmp b/vstgui.sf/drawtest/resources/bmp10008.bmp
new file mode 100644
index 0000000..e616a9c
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10008.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10009.bmp b/vstgui.sf/drawtest/resources/bmp10009.bmp
new file mode 100644
index 0000000..4b2ab90
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10009.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10010.bmp b/vstgui.sf/drawtest/resources/bmp10010.bmp
new file mode 100644
index 0000000..a6810ea
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10010.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10011.bmp b/vstgui.sf/drawtest/resources/bmp10011.bmp
new file mode 100644
index 0000000..6b020ab
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10011.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10012.bmp b/vstgui.sf/drawtest/resources/bmp10012.bmp
new file mode 100644
index 0000000..0bc9517
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10012.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10013.bmp b/vstgui.sf/drawtest/resources/bmp10013.bmp
new file mode 100644
index 0000000..753233d
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10013.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10014.bmp b/vstgui.sf/drawtest/resources/bmp10014.bmp
new file mode 100644
index 0000000..8110e98
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10014.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10015.bmp b/vstgui.sf/drawtest/resources/bmp10015.bmp
new file mode 100644
index 0000000..06b510d
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10015.bmp differ
diff --git a/vstgui.sf/drawtest/resources/bmp10016.bmp b/vstgui.sf/drawtest/resources/bmp10016.bmp
new file mode 100644
index 0000000..6b251aa
Binary files /dev/null and b/vstgui.sf/drawtest/resources/bmp10016.bmp differ
diff --git a/vstgui.sf/drawtest/source/controlsgui.cpp b/vstgui.sf/drawtest/source/controlsgui.cpp
new file mode 100644
index 0000000..0e5b76e
--- /dev/null
+++ b/vstgui.sf/drawtest/source/controlsgui.cpp
@@ -0,0 +1,541 @@
+#ifndef __controlsgui__
+#include "controlsgui.h"
+#endif
+
+#include "cfileselector.h"
+
+#include
+
+enum
+{
+ // bitmaps
+ kBackgroundBitmap = 10001,
+
+ kSliderHBgBitmap,
+ kSliderVBgBitmap,
+ kSliderHandleBitmap,
+
+ kSwitchHBitmap,
+ kSwitchVBitmap,
+
+ kOnOffBitmap,
+
+ kKnobHandleBitmap,
+ kKnobBgBitmap,
+
+ kDigitBitmap,
+ kRockerBitmap,
+
+ kVuOnBitmap,
+ kVuOffBitmap,
+
+ kSplashBitmap,
+
+ kMovieKnobBitmap,
+
+ kMovieBitmap,
+
+ // others
+ kBackgroundW = 420,
+ kBackgroundH = 210
+};
+//-----------------------------------------------------------------------------
+// CLabel declaration
+//-----------------------------------------------------------------------------
+class CLabel : public CParamDisplay
+{
+public:
+ CLabel (CRect &size, char *text);
+
+ void draw (CDrawContext *pContext);
+
+ void setLabel (char *text);
+ virtual bool onDrop (CDrawContext* context, CDragContainer* drag, const CPoint& where);
+ virtual void onDragEnter (CDrawContext* context, CDragContainer* drag, const CPoint& where);
+ virtual void onDragLeave (CDrawContext* context, CDragContainer* drag, const CPoint& where);
+ virtual void onDragMove (CDrawContext* context, CDragContainer* drag, const CPoint& where);
+
+protected:
+ char label[256];
+ bool focus;
+};
+
+//-----------------------------------------------------------------------------
+// CLabel implementation
+//-----------------------------------------------------------------------------
+CLabel::CLabel (CRect &size, char *text)
+: CParamDisplay (size)
+, focus (false)
+{
+ strcpy (label, "");
+ setLabel (text);
+}
+
+//------------------------------------------------------------------------
+void CLabel::setLabel (char *text)
+{
+ if (text)
+ strcpy (label, text);
+ setDirty ();
+}
+
+bool CLabel::onDrop (CDrawContext* context, CDragContainer* drag, const CPoint& where)
+{
+ long size, type;
+ void* ptr = drag->first (size, type);
+ if (ptr)
+ {
+ setLabel ((char*)ptr);
+ }
+ return true;
+}
+
+void CLabel::onDragEnter (CDrawContext* context, CDragContainer* drag, const CPoint& where)
+{
+ getFrame ()->setCursor (kCursorCopy);
+ focus = true;
+ setDirty ();
+}
+
+void CLabel::onDragLeave (CDrawContext* context, CDragContainer* drag, const CPoint& where)
+{
+ getFrame ()->setCursor (kCursorNotAllowed);
+ focus = false;
+ setDirty ();
+}
+
+void CLabel::onDragMove (CDrawContext* context, CDragContainer* drag, const CPoint& where)
+{
+}
+
+//------------------------------------------------------------------------
+void CLabel::draw (CDrawContext *pContext)
+{
+ pContext->setFillColor (backColor);
+ pContext->fillRect (size);
+ pContext->setLineWidth (focus ? 2 : 1);
+ pContext->setFrameColor (fontColor);
+ pContext->drawRect (size);
+
+ pContext->setFont (fontID);
+ pContext->setFontColor (fontColor);
+ pContext->drawString (label, size, false, kCenterText);
+ setDirty (false);
+}
+
+enum
+{
+ kSliderHTag = 0,
+ kSliderVTag,
+ kKnobTag,
+
+ kNumParams,
+
+ kOnOffTag,
+ kKickTag,
+ kMovieButtonTag,
+ kAutoAnimationTag,
+ kOptionMenuTag,
+
+ kRockerSwitchTag,
+ kSwitchHTag,
+ kSwitchVTag,
+
+ kSplashTag,
+ kMovieBitmapTag,
+ kAnimKnobTag,
+ kDigitTag,
+ kTextEditTag,
+
+ kAbout
+};
+
+ControlsGUI::ControlsGUI (const CRect &inSize, CFrame *frame, CBitmap *pBackground)
+: CViewContainer (inSize, frame, pBackground)
+{
+ setMode (kOnlyDirtyUpdate);
+
+ // get version
+ int version = (VSTGUI_VERSION_MAJOR << 16) + VSTGUI_VERSION_MINOR;
+ int verMaj = (version & 0xFF00) >> 16;
+ int verMin = (version & 0x00FF);
+
+ // init the background bitmap
+ CBitmap *background = new CBitmap (kBackgroundBitmap);
+
+ setBackground (background);
+
+ background->forget ();
+
+ CPoint point (0, 0);
+
+ //--COnOffButton-----------------------------------------------
+ CBitmap *onOffButton = new CBitmap (kOnOffBitmap);
+
+ CRect size (0, 0, onOffButton->getWidth (), onOffButton->getHeight () / 2);
+ size.offset (20, 20);
+ cOnOffButton = new COnOffButton (size, this, kOnOffTag, onOffButton);
+ addView (cOnOffButton);
+
+
+ //--CKickButton-----------------------------------------------
+ size.offset (70, 0);
+ point (0, 0);
+ cKickButton = new CKickButton (size, this, kKickTag, onOffButton->getHeight() / 2, onOffButton, point);
+ addView (cKickButton);
+
+
+ //--CKnob--------------------------------------
+ CBitmap *knob = new CBitmap (kKnobHandleBitmap);
+ CBitmap *bgKnob = new CBitmap (kKnobBgBitmap);
+
+ size (0, 0, bgKnob->getWidth (), bgKnob->getHeight ());
+ size.offset (140 + 15, 15);
+ point (0, 0);
+ cKnob = new CKnob (size, this, kKnobTag, bgKnob, knob, point);
+ cKnob->setInsetValue (7);
+ addView (cKnob);
+ knob->forget ();
+ bgKnob->forget ();
+
+
+ //--CMovieButton--------------------------------------
+ size (0, 0, onOffButton->getWidth (), onOffButton->getHeight () / 2);
+ size.offset (210 + 20, 20);
+ point (0, 0);
+ cMovieButton = new CMovieButton (size, this, kMovieButtonTag, onOffButton->getHeight () / 2, onOffButton, point);
+ addView (cMovieButton);
+
+ onOffButton->forget ();
+
+
+ //--CAnimKnob--------------------------------------
+ CBitmap *movieKnobBitmap = new CBitmap (kMovieKnobBitmap);
+
+ size (0, 0, movieKnobBitmap->getWidth (), movieKnobBitmap->getHeight () / 7);
+ size.offset (280 + 15, 15);
+ point (0, 0);
+ cAnimKnob = new CAnimKnob (size, this, kAnimKnobTag, 7, movieKnobBitmap->getHeight () / 7, movieKnobBitmap, point);
+ addView (cAnimKnob);
+
+ movieKnobBitmap->forget ();
+
+
+ //--COptionMenu--------------------------------------
+ size (0, 0, 50, 14);
+ size.offset (350 + 10, 30);
+
+ long style = k3DIn | kMultipleCheckStyle;
+ cOptionMenu = new COptionMenu (size, this, kOptionMenuTag, bgKnob, 0, style);
+ if (cOptionMenu)
+ {
+ cOptionMenu->setFont (kNormalFont);
+ cOptionMenu->setFontColor (kWhiteCColor);
+ cOptionMenu->setBackColor (kRedCColor);
+ cOptionMenu->setFrameColor (kWhiteCColor);
+ cOptionMenu->setHoriAlign (kLeftText);
+ int i;
+ for (i = 0; i < 3; i++)
+ {
+ char txt[256];
+ sprintf (txt, "Entry %d", i);
+ cOptionMenu->addEntry (txt);
+ }
+ cOptionMenu->addEntry ("-");
+ for (i = 3; i < 60; i++)
+ {
+ char txt[256];
+ sprintf (txt, "Entry %d", i);
+ cOptionMenu->addEntry (txt);
+ }
+
+ addView (cOptionMenu);
+ }
+
+
+ //--CRockerSwitch--------------------------------------
+ CBitmap *rocker = new CBitmap (kRockerBitmap);
+ size (0, 0, rocker->getWidth (), rocker->getHeight () / 3);
+ size.offset (9, 70 + 29);
+ point (0, 0);
+ cRockerSwitch = new CRockerSwitch (size, this, kRockerSwitchTag, rocker->getHeight () / 3, rocker, point);
+ addView (cRockerSwitch);
+ rocker->forget ();
+
+
+ //--CHorizontalSwitch--------------------------------------
+ CBitmap *switchHBitmap = new CBitmap (kSwitchHBitmap);
+ size (0, 0, switchHBitmap->getWidth (), switchHBitmap->getHeight () / 4);
+ size.offset (70 + 10, 70 + 30);
+ point (0, 0);
+ cHorizontalSwitch = new CHorizontalSwitch (size, this, kSwitchHTag, 4, switchHBitmap->getHeight () / 4, 4, switchHBitmap, point);
+ addView (cHorizontalSwitch);
+ switchHBitmap->forget ();
+
+
+ //--CVerticalSwitch--------------------------------------
+ CBitmap *switchVBitmap = new CBitmap (kSwitchVBitmap);
+
+ size (0, 0, switchVBitmap->getWidth (), switchVBitmap->getHeight () / 4);
+ size.offset (140 + 30, 70 + 5);
+ cVerticalSwitch = new CVerticalSwitch (size, this, kSwitchVTag, 4, switchVBitmap->getHeight () / 4, 4, switchVBitmap, point);
+ addView (cVerticalSwitch);
+ switchVBitmap->forget ();
+
+
+ //--CHorizontalSlider--------------------------------------
+ CBitmap *sliderHBgBitmap = new CBitmap (kSliderHBgBitmap);
+ CBitmap *sliderHandleBitmap = new CBitmap (kSliderHandleBitmap);
+
+ size (0, 0, sliderHBgBitmap->getWidth (), sliderHBgBitmap->getHeight ());
+ size.offset (10, 30);
+
+ point (0, 0);
+#if 1
+ cHorizontalSlider = new CHorizontalSlider (size, this, kSliderHTag, size.left + 2, size.left + sliderHBgBitmap->getWidth () - sliderHandleBitmap->getWidth () - 1, sliderHandleBitmap, sliderHBgBitmap, point, kLeft);
+ point (0, 2);
+ cHorizontalSlider->setOffsetHandle (point);
+#else
+ CPoint handleOffset (2, 2);
+ cHorizontalSlider = new CHorizontalSlider (size, this, kSliderHTag, handleOffset, size.width () - 2 * handleOffset.h, sliderHandleBitmap, sliderHBgBitmap, point, kLeft);
+#endif
+ cHorizontalSlider->setFreeClick (false);
+ size.offset (0, -30 + 10);
+
+ style = k3DIn | kCheckStyle;
+ COptionMenu *cOptionMenu2 = new COptionMenu (size, this, kOptionMenuTag, bgKnob, 0, style);
+ if (cOptionMenu2)
+ {
+ cOptionMenu2->setFont (kNormalFont);
+ cOptionMenu2->setFontColor (kWhiteCColor);
+ cOptionMenu2->setBackColor (kRedCColor);
+ cOptionMenu2->setFrameColor (kWhiteCColor);
+ cOptionMenu2->setHoriAlign (kLeftText);
+ int i;
+ for (i = 0; i < 3; i++)
+ {
+ char txt[256];
+ sprintf (txt, "Entry %d", i);
+ cOptionMenu2->addEntry (txt);
+ }
+ }
+
+ // add this 2 control in a CViewContainer
+ size (0, 0, 70, 45);
+ size.offset (210, 70);
+ cViewContainer = new CViewContainer (size, frame, background);
+ cViewContainer->addView (cHorizontalSlider);
+ cViewContainer->addView (cOptionMenu2);
+ addView (cViewContainer);
+
+ sliderHBgBitmap->forget ();
+
+
+ //--CVerticalSlider--------------------------------------
+ CBitmap *sliderVBgBitmap = new CBitmap (kSliderVBgBitmap);
+
+ size (0, 0, sliderVBgBitmap->getWidth (), sliderVBgBitmap->getHeight ());
+ size.offset (280 + 30, 70 + 5);
+#if 1
+ point (0, 0);
+ cVerticalSlider = new CVerticalSlider (size, this, kSliderVTag, size.top + 2, size.top + sliderVBgBitmap->getHeight () - sliderHandleBitmap->getHeight () - 1, sliderHandleBitmap, sliderVBgBitmap, point, kBottom);
+ point (2, 0);
+ cVerticalSlider->setOffsetHandle (point);
+#else
+ point (0, 0);
+ CPoint handleOffset (2, 2);
+ cVerticalSlider = new CVerticalSlider (size, this, kSliderVTag, handleOffset,
+ size.height () - 2 * handleOffset.v, sliderHandleBitmap, sliderVBgBitmap, point, kBottom);
+#endif
+ cVerticalSlider->setFreeClick (false);
+ addView (cVerticalSlider);
+
+ sliderVBgBitmap->forget ();
+ sliderHandleBitmap->forget ();
+
+
+ //--CTextEdit--------------------------------------
+ size (0, 0, 50, 12);
+ size.offset (350 + 10, 70 + 30);
+ cTextEdit = new CTextEdit (size, this, kTextEditTag, 0, 0, k3DIn);
+ if (cTextEdit)
+ {
+ cTextEdit->setFont (kNormalFontVerySmall);
+ cTextEdit->setFontColor (kWhiteCColor);
+ cTextEdit->setBackColor (kBlackCColor);
+ cTextEdit->setFrameColor (kWhiteCColor);
+ cTextEdit->setHoriAlign (kCenterText);
+ addView (cTextEdit);
+ }
+
+ //--CSplashScreen--------------------------------------
+ CBitmap *splashBitmap = new CBitmap (kSplashBitmap);
+
+ size (0, 0, 70, 70);
+ size.offset (0, 140);
+ point (0, 0);
+ CRect toDisplay (0, 0, splashBitmap->getWidth (), splashBitmap->getHeight ());
+ toDisplay.offset (100, 50);
+
+ cSplashScreen = new CSplashScreen (size, this, kAbout, splashBitmap, toDisplay, point);
+ addView (cSplashScreen);
+ splashBitmap->forget ();
+
+
+ //--CMovieBitmap--------------------------------------
+ CBitmap *movieBitmap = new CBitmap (kMovieBitmap);
+
+ size (0, 0, movieBitmap->getWidth (), movieBitmap->getHeight () / 10);
+ size.offset (70 + 15, 140 + 15);
+ point (0, 0);
+ cMovieBitmap = new CMovieBitmap (size, this, kMovieBitmapTag, 10, movieBitmap->getHeight () / 10, movieBitmap, point);
+ addView (cMovieBitmap);
+
+
+ //--CAutoAnimation--------------------------------------
+ size (0, 0, movieBitmap->getWidth (), movieBitmap->getHeight () / 10);
+ size.offset (140 + 15, 140 + 15);
+ point (0, 0);
+ cAutoAnimation = new CAutoAnimation (size, this, kAutoAnimationTag, 10, movieBitmap->getHeight () / 10, movieBitmap, point);
+ addView (cAutoAnimation);
+ movieBitmap->forget ();
+
+
+ //--CSpecialDigit--------------------------------------
+ CBitmap *specialDigitBitmap = new CBitmap (kDigitBitmap);
+
+ size (0, 0, specialDigitBitmap->getWidth () * 7, specialDigitBitmap->getHeight () / 10);
+ size.offset (210 + 10, 140 + 30);
+
+ cSpecialDigit = new CSpecialDigit (size, this, kDigitTag, 0, 7, 0, 0, specialDigitBitmap->getWidth (), specialDigitBitmap->getHeight () / 10 , specialDigitBitmap);
+ addView (cSpecialDigit);
+ specialDigitBitmap->forget ();
+
+
+ //--CParamDisplay--------------------------------------
+ size (0, 0, 50, 15);
+ size.offset (280 + 10, 140 + 30);
+ cParamDisplay = new CParamDisplay (size);
+ if (cParamDisplay)
+ {
+ cParamDisplay->setFont (kNormalFontSmall);
+ cParamDisplay->setFontColor (kWhiteCColor);
+ cParamDisplay->setBackColor (kBlackCColor);
+ addView (cParamDisplay);
+ }
+
+
+ //--CVuMeter--------------------------------------
+ CBitmap* vuOnBitmap = new CBitmap (kVuOnBitmap);
+ CBitmap* vuOffBitmap = new CBitmap (kVuOffBitmap);
+
+ size (0, 0, vuOnBitmap->getWidth (), vuOnBitmap->getHeight ());
+ size.offset (350 + 30, 140 + 5);
+ cVuMeter = new CVuMeter (size, vuOnBitmap, vuOffBitmap, 14);
+ cVuMeter->setDecreaseStepValue (0.1f);
+ addView (cVuMeter);
+ vuOnBitmap->forget ();
+ vuOffBitmap->forget ();
+
+ //--My controls---------------------------------
+ //--CLabel--------------------------------------
+ size (0, 0, 349, 14);
+ size.offset (0, 140);
+ cLabel = new CLabel (size, "Type a Key or Drop a file...");
+ if (cLabel)
+ {
+ cLabel->setFont (kNormalFontSmall);
+ cLabel->setFontColor (kWhiteCColor);
+ cLabel->setBackColor (kGreyCColor);
+ addView (cLabel);
+ }
+
+ //--CLabel--------------------------------------
+ size (0, 0, 65, 12);
+ size.offset (1, 40);
+ CLabel *cLabel2 = new CLabel (size, "FileSelector");
+ if (cLabel2)
+ {
+ cLabel2->setFont (kNormalFontSmaller);
+ cLabel2->setFontColor (kWhiteCColor);
+ cLabel2->setBackColor (kGreyCColor);
+ addView (cLabel2);
+ }
+
+ size (inSize.right, inSize.bottom, inSize.right + 100, inSize.bottom + 100);
+ CLabel* outsideLabel = new CLabel (size, "This label is outside its superview");
+ addView (outsideLabel);
+ outsideLabel->setDirty (true);
+}
+
+void ControlsGUI::valueChanged (CDrawContext *pContext, CControl *pControl)
+{
+ // this is only to provide the same behaviour as the original controlsgui editor class in the vst sdk 2.3
+ // do not take this as an example on how to code !!!
+
+ float value = pControl->getValue ();
+ switch (pControl->getTag ())
+ {
+ case kSliderVTag:
+ case kSliderHTag:
+ case kKnobTag:
+ case kAnimKnobTag:
+ {
+ cHorizontalSlider->setValue (value);
+ cVerticalSlider->setValue (value);
+ cKnob->setValue (value);
+ cAnimKnob->setValue (value);
+ cSpecialDigit->setValue (1000000 * value);
+ cParamDisplay->setValue (value);
+ cVuMeter->setValue (value);
+ cMovieBitmap->setValue (value);
+ break;
+ }
+
+ case kOnOffTag:
+ {
+ if (value > 0.5f)
+ {
+ VstFileType aiffType ("AIFF File", "AIFF", "aif", "aiff", "audio/aiff", "audio/x-aiff");
+ VstFileType aifcType ("AIFC File", "AIFC", "aif", "aifc", "audio/x-aifc");
+ VstFileType waveType ("Wave File", "WAVE", "wav", "wav", "audio/wav", "audio/x-wav");
+ VstFileType sdIIType ("SoundDesigner II File", "Sd2f", "sd2", "sd2");
+ VstFileType types[] = {aiffType, aifcType, waveType, sdIIType};
+
+ VstFileSelect vstFileSelect;
+ memset (&vstFileSelect, 0, sizeof (VstFileSelect));
+
+ vstFileSelect.command = kVstFileLoad;
+ vstFileSelect.type = kVstFileType;
+ strcpy (vstFileSelect.title, "Test for open file selector");
+ vstFileSelect.nbFileTypes = 4;
+ vstFileSelect.fileTypes = (VstFileType*)&types;
+ vstFileSelect.returnPath = new char[1024];
+ vstFileSelect.initialPath = 0;
+ vstFileSelect.future[0] = 1; // utf-8 path on macosx
+ CFileSelector selector (NULL);
+ if (selector.run (&vstFileSelect))
+ {
+ if (cLabel)
+ cLabel->setLabel (vstFileSelect.returnPath);
+ }
+ else
+ {
+ if (cLabel)
+ cLabel->setLabel ("OpenFileSelector: canceled!!!!");
+ }
+ delete []vstFileSelect.returnPath;
+ if (vstFileSelect.initialPath)
+ delete []vstFileSelect.initialPath;
+ }
+ break;
+ }
+ }
+}
+
+void ControlsGUI::onIdle ()
+{
+ // trigger animation
+ if(cAutoAnimation)
+ cAutoAnimation->nextPixmap ();
+}
\ No newline at end of file
diff --git a/vstgui.sf/drawtest/source/controlsgui.h b/vstgui.sf/drawtest/source/controlsgui.h
new file mode 100644
index 0000000..dae8bdc
--- /dev/null
+++ b/vstgui.sf/drawtest/source/controlsgui.h
@@ -0,0 +1,51 @@
+#ifndef __controlsgui__
+#define __controlsgui__
+
+#ifndef __vstcontrols__
+#include "vstcontrols.h"
+#endif
+
+class CLabel;
+
+class ControlsGUI : public CViewContainer, CControlListener
+{
+public:
+ ControlsGUI (const CRect &size, CFrame *pParent, CBitmap *pBackground = 0);
+
+ virtual void onIdle ();
+
+ virtual void valueChanged (CDrawContext *pContext, CControl *pControl);
+
+protected:
+
+ COnOffButton *cOnOffButton;
+ CKickButton *cKickButton;
+ CKnob *cKnob;
+ CMovieButton *cMovieButton;
+ CAnimKnob *cAnimKnob;
+ COptionMenu *cOptionMenu;
+
+ CRockerSwitch *cRockerSwitch;
+ CHorizontalSwitch *cHorizontalSwitch;
+ CVerticalSwitch *cVerticalSwitch;
+ CHorizontalSlider *cHorizontalSlider;
+ CHorizontalSlider *cHorizontalSlider2;
+ CVerticalSlider *cVerticalSlider;
+ CTextEdit *cTextEdit;
+
+ CSplashScreen *cSplashScreen;
+ CMovieBitmap *cMovieBitmap;
+ CAutoAnimation *cAutoAnimation;
+ CSpecialDigit *cSpecialDigit;
+ CParamDisplay *cParamDisplay;
+ CVuMeter *cVuMeter;
+
+ CViewContainer *cViewContainer;
+
+ // others
+ CLabel *cLabel;
+
+ long oldTicks;
+};
+
+#endif
diff --git a/vstgui.sf/drawtest/source/pdrawtesteditor.cpp b/vstgui.sf/drawtest/source/pdrawtesteditor.cpp
new file mode 100644
index 0000000..7e7f3af
--- /dev/null
+++ b/vstgui.sf/drawtest/source/pdrawtesteditor.cpp
@@ -0,0 +1,266 @@
+//-------------------------------------------------------------------------------------------------------
+// VSTGUI Test View plugin
+// Copyright (c) 2004 Arne Scheffler. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//-------------------------------------------------------------------------------------------------------
+
+#include "pdrawtesteditor.h"
+#include "pdrawtestview.h"
+#include "cscrollview.h"
+#include "ctabview.h"
+#include "controlsgui.h"
+#include "pprimitivesviews.h"
+
+enum {
+ kBackgroundBitmap = 1,
+ kTabButtonBitmap = 100,
+ kTestBitmap = 1000,
+};
+
+class MyTabView : public CTabView
+{
+public:
+ MyTabView (const CRect& size, CFrame* parent, CBitmap* tabBitmap, CBitmap* background = 0, long tabPosition = kPositionTop, DrawTestEditor* editor = 0)
+ : CTabView (size, parent, tabBitmap, background, tabPosition)
+ , editor (editor) {}
+
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1)
+ {
+ if (button == kRButton)
+ {
+ CView* view = getViewAt (where);
+ if (!view || view->isTypeOf ("CTabButton"))
+ {
+ CRect r;
+ localToFrame (where);
+ r.offset (where.x, where.y);
+ r.offset (-size.left, -size.top);
+ COptionMenu* menu = new COptionMenu (r, NULL, 0);
+ menu->addEntry ("Tabs Left");
+ menu->addEntry ("Tabs Right");
+ menu->addEntry ("Tabs Top");
+ menu->addEntry ("Tabs Bottom");
+ menu->addEntry ("-");
+ menu->addEntry ("Align Tabs Centered");
+ menu->addEntry ("Align Tabs Left/Top");
+ menu->addEntry ("Align Tabs Right/Bottom");
+ getFrame ()->addView (menu);
+ menu->takeFocus ();
+ long res = menu->getLastResult ();
+ getFrame ()->removeView (menu);
+ if (res != -1)
+ {
+ if (res < 4)
+ {
+ r = size;
+ editor->setTabView (getFrame (), r, res);
+ }
+ else
+ {
+ alignTabs (kAlignCenter + res - 5);
+ }
+ }
+ return;
+ }
+ }
+ CTabView::mouse (pContext, where, button);
+ }
+
+ virtual bool selectTab (long index)
+ {
+ bool result = CTabView::selectTab (index);
+ #if DEBUG
+ getFrame ()->dumpHierarchy ();
+ #endif
+ return result;
+ }
+
+protected:
+ DrawTestEditor* editor;
+};
+
+class MyColoredView : public CView
+{
+public:
+ MyColoredView (const CRect& size) : CView (size) {}
+
+ void draw (CDrawContext* context)
+ {
+ context->setFillColor (backgroundColor);
+ context->setFrameColor (kBlackCColor);
+ context->drawRect (size, kDrawFilledAndStroked);
+ setDirty (false);
+ }
+
+ void setBackgroundColor (const CColor& c) { backgroundColor = c; }
+
+protected:
+ CColor backgroundColor;
+};
+
+DrawTestEditor::DrawTestEditor (void* effect)
+#if AU
+: AEffGUIEditor (effect)
+#else
+: AEffGUIEditor ((AudioEffect*)effect)
+#endif
+, controlsView (0)
+{
+ backgroundBitmap = new CBitmap (kBackgroundBitmap);
+ // setup size of editor
+ rect.left = 0;
+ rect.top = 0;
+ #if AU
+ rect.right = (short)backgroundBitmap->getWidth ();
+ rect.bottom = (short)backgroundBitmap->getHeight ();
+ #else
+ rect.right = (VstInt16)backgroundBitmap->getWidth ();
+ rect.bottom = (VstInt16)backgroundBitmap->getHeight ();
+ #endif
+}
+
+DrawTestEditor::~DrawTestEditor ()
+{
+ backgroundBitmap->forget ();
+}
+
+void DrawTestEditor::valueChanged (CDrawContext *pContext, CControl *pControl)
+{
+}
+
+void DrawTestEditor::setTabView (CFrame* frame, const CRect& r, long position)
+{
+ frame->removeAll ();
+ CBitmap* tabButtonBitmap = new CBitmap (kTabButtonBitmap);
+ CTabView* tabView = new MyTabView (r, frame, tabButtonBitmap, NULL, position, this);
+ tabView->setTransparency (true);
+ frame->addView (tabView);
+ CRect tabSize = tabView->getTabViewSize (tabSize);
+// tabSize.inset (1, 1);
+ // add tabs
+ CView* testView;
+ CBitmap* testBitmap = new CBitmap (kTestBitmap);
+ CRect containerSize;
+ containerSize.right = testBitmap->getWidth ();
+ containerSize.bottom = testBitmap->getHeight ();
+ // the first tab is a scroll view with a movie bitmap
+ CScrollView* scrollview = new CScrollView (tabSize, containerSize, frame, CScrollView::kHorizontalScrollbar|CScrollView::kVerticalScrollbar);
+ CPoint p (0,0);
+ testView = new CMovieBitmap (containerSize, NULL, 0, 1, testBitmap->getHeight (), testBitmap, p);
+ testBitmap->forget ();
+ scrollview->addView (testView);
+ tabView->addTab (scrollview, "Scroll View");
+
+ // the second tab is a draw primitives view
+// testView = new CDrawTestView (tabSize);
+// tabView->addTab (testView, "Primitives");
+ testView = new PLinesView (tabSize);
+ tabView->addTab (testView, "Lines");
+
+ testView = new PRectsView (tabSize);
+ tabView->addTab (testView, "Rects");
+
+ testView = new PMiscView (tabSize);
+ tabView->addTab (testView, "Misc");
+
+ // the third tab is the old controlsgui view embeded into a container view
+ CRect controlsGUISize (0, 0, 420, 210);
+ controlsGUISize.offset (5, 5);
+ testView = controlsView = new ControlsGUI (controlsGUISize, frame);
+
+ CViewContainer* controlContainer = new CViewContainer (tabSize, frame);
+ controlContainer->setTransparency (true);
+ controlContainer->addView (testView);
+
+ tabView->addTab (controlContainer, "Controls");
+
+ CColor redColor = {255, 0, 0, 150};
+ CColor greenColor = {0, 255, 0, 150};
+ CColor blueColor = {0, 0, 255, 150};
+
+ CViewContainer* clipView = new CViewContainer (tabSize, frame);
+ clipView->setTransparency (true);
+ CRect clipViewSize (0, 0, tabSize.getWidth () / 4, tabSize.getHeight () / 2);
+ MyColoredView* cv = new MyColoredView (clipViewSize);
+ cv->setBackgroundColor (redColor);
+ clipView->addView (cv);
+ clipViewSize.offset (clipViewSize.getWidth (), 0);
+ cv = new MyColoredView (clipViewSize);
+ cv->setBackgroundColor (greenColor);
+ clipView->addView (cv);
+ clipViewSize.offset (clipViewSize.getWidth (), 0);
+ cv = new MyColoredView (clipViewSize);
+ cv->setBackgroundColor (blueColor);
+ clipView->addView (cv);
+ clipViewSize.offset (clipViewSize.getWidth (), 0);
+ cv = new MyColoredView (clipViewSize);
+ cv->setBackgroundColor (redColor);
+ clipView->addView (cv);
+ clipViewSize (0, tabSize.getHeight () / 2, tabSize.getWidth () / 4, tabSize.getHeight ());
+ cv = new MyColoredView (clipViewSize);
+ cv->setBackgroundColor (greenColor);
+ clipView->addView (cv);
+ clipViewSize.offset (clipViewSize.getWidth (), 0);
+ cv = new MyColoredView (clipViewSize);
+ cv->setBackgroundColor (blueColor);
+ clipView->addView (cv);
+ clipViewSize.offset (clipViewSize.getWidth (), 0);
+ cv = new MyColoredView (clipViewSize);
+ cv->setBackgroundColor (redColor);
+ clipView->addView (cv);
+ clipViewSize.offset (clipViewSize.getWidth (), 0);
+ cv = new MyColoredView (clipViewSize);
+ cv->setBackgroundColor (greenColor);
+ clipView->addView (cv);
+
+ tabView->addTab (clipView, "Clip Test");
+ tabView->alignTabs (CTabView::kAlignCenter);
+
+ tabButtonBitmap->forget ();
+ frame->setDirty ();
+}
+
+bool DrawTestEditor::open (void *ptr)
+{
+ AEffGUIEditor::open (ptr);
+ CRect size (rect.left , rect.top, rect.right, rect.bottom);
+ CFrame* frame = new CFrame (size, ptr, this);
+ frame->setBackground (backgroundBitmap);
+ size.inset (8, 8);
+ size.top++; // the background bitmap is not correct
+ size.left++; // the background bitmap is not correct
+ setTabView (frame, size, CTabView::kPositionBottom);
+ // last but not least set the class variable frame to our newly created frame
+ this->frame = frame;
+ return true;
+}
+
+void DrawTestEditor::close ()
+{
+ // don't forget to remove the frame !!
+ if (frame)
+ delete frame;
+ frame = 0;
+ controlsView = 0;
+}
+
+void DrawTestEditor::idle ()
+{
+ AEffGUIEditor::idle ();
+
+ if(controlsView)
+ controlsView->onIdle ();
+}
\ No newline at end of file
diff --git a/vstgui.sf/drawtest/source/pdrawtesteditor.h b/vstgui.sf/drawtest/source/pdrawtesteditor.h
new file mode 100644
index 0000000..8c20a82
--- /dev/null
+++ b/vstgui.sf/drawtest/source/pdrawtesteditor.h
@@ -0,0 +1,48 @@
+//-------------------------------------------------------------------------------------------------------
+// VSTGUI Test View plugin
+// Copyright (c) 2004 Arne Scheffler. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __pdrawtesteditor__
+#define __pdrawtesteditor__
+
+#ifndef __vstcontrols__
+#include "vstcontrols.h"
+#endif
+
+class ControlsGUI;
+
+class DrawTestEditor : public AEffGUIEditor, CControlListener
+{
+public:
+ DrawTestEditor (void* effect);
+ virtual ~DrawTestEditor ();
+
+ void setTabView (CFrame* frame, const CRect& r, long position);
+
+ virtual void valueChanged (CDrawContext *pContext, CControl *pControl);
+
+protected:
+ virtual bool open (void *ptr);
+ virtual void close ();
+ virtual void idle ();
+
+ CBitmap* backgroundBitmap;
+ ControlsGUI* controlsView;
+};
+
+#endif
diff --git a/vstgui.sf/drawtest/source/pdrawtesteffect.cpp b/vstgui.sf/drawtest/source/pdrawtesteffect.cpp
new file mode 100644
index 0000000..7db11fa
--- /dev/null
+++ b/vstgui.sf/drawtest/source/pdrawtesteffect.cpp
@@ -0,0 +1,177 @@
+//-------------------------------------------------------------------------------------------------------
+// VSTGUI Test View plugin
+// Copyright (c) 2004 Arne Scheffler. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//-------------------------------------------------------------------------------------------------------
+
+#if AU
+#include "AUEffectBase.h"
+#include "pdrawtesteditor.h"
+
+#define kComponentSubType 'vgdt'
+#define kComponentManuf 'Xxxx'
+#define kVersionNumber 0x00010000
+
+class DrawTestAU : public AUEffectBase
+{
+public:
+ DrawTestAU (AudioUnit au)
+ : AUEffectBase (au)
+ {
+ // editor = new DrawTestEditor (this);
+ }
+
+ virtual ~DrawTestAU ()
+ {
+ //if (editor)
+ //delete editor;
+ }
+
+ virtual int GetNumCustomUIComponents ()
+ {
+ return 1;
+ }
+
+ virtual ComponentResult Version () { return kVersionNumber; }
+
+ virtual void GetUIComponentDescs (ComponentDescription* inDescArray)
+ {
+ inDescArray[0].componentType = kAudioUnitCarbonViewComponentType;
+ inDescArray[0].componentSubType = kComponentSubType;
+ inDescArray[0].componentManufacturer = kComponentManuf;
+ inDescArray[0].componentFlags = 0;
+ inDescArray[0].componentFlagsMask = 0;
+ }
+
+/* ComponentResult GetPropertyInfo (AudioUnitPropertyID inID, AudioUnitScope inScope, AudioUnitElement inElement, UInt32 &outDataSize, Boolean &outWritable)
+ {
+ if (inID == 64000)
+ {
+ if (editor)
+ {
+ outDataSize = sizeof (PluginGUIEditor*);
+ outWritable = false;
+ return noErr;
+ }
+ return kAudioUnitErr_InvalidProperty;
+ }
+ return AUEffectBase::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable);
+ }
+
+ ComponentResult GetProperty (AudioUnitPropertyID inID, AudioUnitScope inScope, AudioUnitElement inElement, void *outData)
+ {
+ if (inID == 64000)
+ {
+ if (editor)
+ {
+ long ptr = (long)editor;
+ *((long*)outData) = ptr;
+ return noErr;
+ }
+ else
+ *((long*)outData) = 0;
+ return kAudioUnitErr_InvalidProperty;
+ }
+ return AUEffectBase::GetProperty (inID, inScope, inElement, outData);
+ }
+*/
+protected:
+ DrawTestEditor* editor;
+};
+
+
+#include "AUCarbonViewBase.h"
+#include "plugguieditor.h"
+
+class VSTGUIAUView : public AUCarbonViewBase
+{
+public:
+ VSTGUIAUView (AudioUnitCarbonView auv)
+ : AUCarbonViewBase (auv)
+ , editor (0)
+ , xOffset (0)
+ , yOffset (0)
+ {
+ }
+
+ virtual ~VSTGUIAUView ()
+ {
+ if (editor)
+ {
+ editor->close ();
+ }
+ }
+
+ void RespondToEventTimer (EventLoopTimerRef inTimer)
+ {
+ if (editor)
+ editor->doIdleStuff ();
+ }
+
+ virtual OSStatus CreateUI(Float32 xoffset, Float32 yoffset)
+ {
+ AudioUnit unit = GetEditAudioUnit ();
+ if (unit)
+ {
+ editor = new DrawTestEditor (unit);
+ WindowRef window = GetCarbonWindow ();
+ editor->open (window);
+// HIViewMoveBy ((HIViewRef)editor->getFrame ()->getPlatformControl (), xoffset, yoffset);
+ EmbedControl ((HIViewRef)editor->getFrame ()->getPlatformControl ());
+ CRect fsize = editor->getFrame ()->getViewSize (fsize);
+ SizeControl (mCarbonPane, fsize.width (), fsize.height ());
+ CreateEventLoopTimer (kEventDurationSecond, kEventDurationSecond / 24);
+ HIViewSetVisible ((HIViewRef)editor->getFrame ()->getPlatformControl (), true);
+ HIViewSetNeedsDisplay ((HIViewRef)editor->getFrame ()->getPlatformControl (), true);
+ }
+ return noErr;
+ }
+
+ Float32 xOffset, yOffset;
+protected:
+ PluginGUIEditor* editor;
+};
+
+COMPONENT_ENTRY(VSTGUIAUView);
+COMPONENT_ENTRY(DrawTestAU);
+
+
+#else
+#include "pdrawtesteffect.h"
+#include "pdrawtesteditor.h"
+
+DrawTestEffect::DrawTestEffect (audioMasterCallback audioMaster)
+: AudioEffectX (audioMaster, 1, 0)
+{
+ editor = new DrawTestEditor (this);
+}
+
+DrawTestEffect::~DrawTestEffect ()
+{
+}
+
+void DrawTestEffect::processReplacing (float **inputs, float **outputs, VstInt32 sampleFrames)
+{
+}
+
+VstInt32 DrawTestEffect::canDo (char* text)
+{
+ if (!strcmp (text, "wantsUTF8Paths"))
+ return 1;
+ return 0;
+}
+
+#endif
diff --git a/vstgui.sf/drawtest/source/pdrawtesteffect.h b/vstgui.sf/drawtest/source/pdrawtesteffect.h
new file mode 100644
index 0000000..9e73589
--- /dev/null
+++ b/vstgui.sf/drawtest/source/pdrawtesteffect.h
@@ -0,0 +1,38 @@
+//-------------------------------------------------------------------------------------------------------
+// VSTGUI Test View plugin
+// Copyright (c) 2004 Arne Scheffler. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __pdrawtesteffect__
+#define __pdrawtesteffect__
+
+#ifndef __audioeffectx__
+#include "audioeffectx.h"
+#endif
+
+class DrawTestEffect : public AudioEffectX
+{
+public:
+ DrawTestEffect (audioMasterCallback audioMaster);
+ ~DrawTestEffect ();
+
+ virtual void processReplacing (float **inputs, float **outputs, VstInt32 sampleFrames);
+
+ VstInt32 canDo (char* text);
+};
+
+#endif
diff --git a/vstgui.sf/drawtest/source/pdrawtestmain.cpp b/vstgui.sf/drawtest/source/pdrawtestmain.cpp
new file mode 100644
index 0000000..ada29d9
--- /dev/null
+++ b/vstgui.sf/drawtest/source/pdrawtestmain.cpp
@@ -0,0 +1,78 @@
+//-------------------------------------------------------------------------------------------------------
+// VSTGUI Test View plugin
+// Copyright (c) 2004 Arne Scheffler. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//-------------------------------------------------------------------------------------------------------
+
+#include "pdrawtesteffect.h"
+
+bool oome = false;
+
+#if MAC
+#pragma export on
+#endif
+
+//------------------------------------------------------------------------
+// Prototype of the export function main
+//------------------------------------------------------------------------
+#if BEOS
+#define main main_plugin
+extern "C" __declspec(dllexport) AEffect *main_plugin (audioMasterCallback audioMaster);
+
+#elif MACX
+#define main main_macho
+extern "C" AEffect *main_macho (audioMasterCallback audioMaster);
+
+#else
+#define main VSTPluginMain
+AEffect *main (audioMasterCallback audioMaster);
+#endif
+
+//------------------------------------------------------------------------
+AEffect *main (audioMasterCallback audioMaster)
+{
+ // Get VST Version
+ if (!audioMaster (0, audioMasterVersion, 0, 0, 0, 0))
+ return 0; // old version
+
+ // Create the AudioEffect
+ DrawTestEffect* effect = new DrawTestEffect (audioMaster);
+ if (!effect)
+ return 0;
+
+ // Check if no problem in constructor of AGain
+ if (oome)
+ {
+ delete effect;
+ return 0;
+ }
+ return effect->getAeffect ();
+}
+
+#if MAC
+#pragma export off
+#endif
+
+
+#if WIN32
+#include
+void* hInstance;
+BOOL WINAPI DllMain (HINSTANCE hInst, DWORD dwReason, LPVOID lpvReserved)
+{
+ hInstance = hInst;
+ return 1;
+}
+#endif
diff --git a/vstgui.sf/drawtest/source/pdrawtestview.cpp b/vstgui.sf/drawtest/source/pdrawtestview.cpp
new file mode 100644
index 0000000..914aeab
--- /dev/null
+++ b/vstgui.sf/drawtest/source/pdrawtestview.cpp
@@ -0,0 +1,299 @@
+//-------------------------------------------------------------------------------------------------------
+// VSTGUI Test View plugin
+// Copyright (c) 2004 Arne Scheffler. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __pdrawtestview__
+#include "pdrawtestview.h"
+#endif
+
+#include
+
+static long diffX, diffY;
+
+CDrawTestView::CDrawTestView (const CRect& size)
+: CView (size)
+, value (0)
+{
+ diffX = diffY = 0;
+}
+
+static inline void testDrawRect (CDrawContext *pContext, CRect r, int _offset = 0)
+{
+ int offset = _offset ? _offset : pContext->getLineWidth ();
+ int i = 0;
+ while (r.width () > 1 && r.height () > 1)
+ {
+ if (i++ % 2)
+ pContext->setFrameColor (kBlackCColor);
+ else
+ pContext->setFrameColor (kRedCColor);
+ pContext->drawRect (r);
+ r.inset (offset, offset);
+ }
+}
+
+static inline void testFillRect (CDrawContext *pContext, CRect r)
+{
+ int i = 0;
+ while (r.width () > 1 && r.height () > 1)
+ {
+ if (i++ % 2)
+ pContext->setFillColor (kYellowCColor);
+ else
+ pContext->setFillColor (kCyanCColor);
+ r.inset (1,1);
+ pContext->fillRect (r);
+ }
+}
+
+static inline void testDrawLine (CDrawContext *pContext, CRect r, int _offset = 0)
+{
+ int offset = _offset ? _offset : pContext->getLineWidth ();
+ int i = 0;
+ while (r.width () > 1 && r.height () > 1)
+ {
+ if (i++ % 2)
+ pContext->setFrameColor (kBlueCColor);
+ else
+ pContext->setFrameColor (kGreenCColor);
+// pContext->setClipRect (r);
+ pContext->moveTo (CPoint (r.left, r.top));
+ pContext->lineTo (CPoint (r.right, r.top));
+ pContext->lineTo (CPoint (r.right, r.bottom));
+ pContext->lineTo (CPoint (r.left, r.bottom));
+ pContext->lineTo (CPoint (r.left, r.top));
+// pContext->drawRect (r);
+ r.inset (offset,offset);
+ }
+}
+
+static inline void drawVerticalLines (CDrawContext *pContext, CRect r, int _offset = 0)
+{
+ int offset = _offset ? _offset : pContext->getLineWidth ();
+ int i = 0;
+ CPoint p (0, r.top);
+ while (p.y < r.bottom)
+ {
+ if (i++ % 2)
+ pContext->setFrameColor (kBlueCColor);
+ else
+ pContext->setFrameColor (kGreenCColor);
+ pContext->moveTo (CPoint (r.left, p.y));
+ pContext->lineTo (CPoint (r.right, p.y));
+ p.offset (0,offset);
+ }
+}
+
+static inline void clearRect (CDrawContext* pContext, const CRect& r)
+{
+ pContext->setFillColor (kWhiteCColor);
+ pContext->fillRect (r);
+ pContext->setLineWidth (1);
+ pContext->setFrameColor (kBlackCColor);
+ pContext->drawRect (r);
+}
+
+static inline void drawLines (CDrawContext* pContext, CRect r, int offset = 2)
+{
+ CRect size (r);
+ pContext->setFrameColor (kBlueCColor);
+ int i;
+ for (i = 0; i < size.height (); i++)
+ {
+ pContext->moveTo (CPoint (r.left, r.top));
+ pContext->lineTo (CPoint (r.right, r.bottom));
+ r.offset (0, offset);
+ }
+ for (i = 0; i < size.height (); i++)
+ {
+ size.offset (0, -offset);
+ pContext->moveTo (CPoint (size.left, size.top));
+ pContext->lineTo (CPoint (size.right, size.bottom));
+ }
+}
+
+
+CColor arcColors[] = { {0,0,255,255}, {255,0,255,255}, {0,255,0,255}, {255,0,0,255}, {255, 255, 0, 255} };
+
+#define numArcColors 4
+
+static inline void drawArcs (CDrawContext* pContext, CRect r, int offset = 2)
+{
+ r.inset (diffX, diffY);
+ int i = 0;
+ long n = r.height () > r.width () ? r.width () : r.height ();
+ while (r.width () > 1 && r.height () > 1)
+ {
+ pContext->setFrameColor (arcColors[i++]); if (i > numArcColors) i = 0;
+ pContext->drawArc (r, CPoint (r.left, r.top + r.height () / 2), CPoint (r.left + r.width () / 2, r.bottom));
+ pContext->setFrameColor (arcColors[i++]); if (i > numArcColors) i = 0;
+ pContext->drawArc (r, CPoint (r.left + r.width () / 2, r.bottom), CPoint (r.right, r.top + r.height () / 2));
+ pContext->setFrameColor (arcColors[i++]); if (i > numArcColors) i = 0;
+ pContext->drawArc (r, CPoint (r.right, r.top + r.height () / 2), CPoint (r.left + r.width () / 2, r.top));
+ pContext->setFrameColor (arcColors[i++]); if (i > numArcColors) i = 0;
+ pContext->drawArc (r, CPoint (r.left + r.width () / 2, r.top), CPoint (r.left, r.top + r.height () / 2));
+ r.inset (offset, offset);
+ }
+}
+
+static inline void drawEllipses (CDrawContext* pContext, CRect r, int offset = 2)
+{
+ r.inset (diffX, diffY);
+ int i = 0;
+ long n = r.height () > r.width () ? r.width () : r.height ();
+ while (r.width () > 1 && r.height () > 1)
+ {
+ pContext->setFrameColor (arcColors[i++]); if (i > numArcColors) i = 0;
+ pContext->drawEllipse (r);
+ r.inset (offset, offset);
+ }
+}
+
+#define kMaxValue 10
+
+void CDrawTestView::draw (CDrawContext *pContext)
+{
+ char str[256];
+ str[0] = 0;
+ sprintf (str, "Click for Next");
+ CRect r (size);
+ pContext->setDrawMode (kCopyMode);
+ clearRect (pContext, r);
+ r.inset (1, 1);
+ switch (value)
+ {
+ case 0:
+ {
+ pContext->setLineWidth (1);
+ testDrawRect (pContext, r);
+ break;
+ }
+ case 1:
+ {
+ pContext->setLineWidth (1);
+ testDrawLine (pContext, r, 2);
+ break;
+ }
+ case 2:
+ {
+ testFillRect (pContext, r);
+ break;
+ }
+ case 3:
+ {
+ pContext->setLineWidth (2);
+ testDrawLine (pContext, r);
+ break;
+ }
+ case 4:
+ {
+ pContext->setDrawMode (kAntialias);
+ pContext->setLineWidth (2);
+ testDrawLine (pContext, size);
+ break;
+ }
+ case 5:
+ {
+ pContext->setDrawMode (kAntialias);
+ pContext->setLineWidth (1);
+ testDrawLine (pContext, r);
+ break;
+ }
+ case 6:
+ {
+ pContext->setLineWidth (1);
+ drawLines (pContext, r, 4);
+ break;
+ }
+ case 7:
+ {
+ pContext->setDrawMode (kAntialias);
+ pContext->setLineWidth (1);
+ drawLines (pContext, r, 4);
+ break;
+ }
+ case 8:
+ {
+ pContext->setDrawMode (kAntialias);
+ pContext->setLineWidth (4);
+ drawArcs (pContext, r, 8);
+ break;
+ }
+ case 9:
+ {
+ pContext->setDrawMode (kAntialias);
+ pContext->setLineWidth (4);
+ drawEllipses (pContext, r, 8);
+ break;
+ }
+ case 10:
+ {
+ pContext->setLineStyle (kLineOnOffDash);
+ //pContext->setDrawMode (kAntialias);
+ pContext->setLineWidth (1);
+ drawVerticalLines (pContext, r, 3);
+ break;
+ }
+ }
+ pContext->setFont (kSystemFont);
+ pContext->setFontColor (kWhiteCColor);
+ pContext->drawString (str, r);
+ pContext->setFontColor (kBlackCColor);
+ r.offset (-1, -1);
+ pContext->drawString (str, r, true);
+ pContext->setDrawMode (kCopyMode);
+ setDirty (false);
+}
+
+void CDrawTestView::mouse (CDrawContext* pContext, CPoint& where, long buttons)
+{
+ if (buttons & kLButton)
+ {
+ if (buttons & kShift)
+ {
+ CPoint start (where);
+ while ((buttons = pContext->getMouseButtons ()))
+ {
+ if (pContext->waitDrag ())
+ {
+ CPoint now;
+ getMouseLocation (pContext, now);
+ diffX += start.x - now.x;
+ diffY += start.y - now.y;
+ start = now;
+ setDirty (true);
+ if (pParentFrame) pParentFrame->doIdleStuff ();
+ }
+ }
+ }
+ else
+ {
+ value++;
+ if (value > kMaxValue)
+ value = 0;
+ }
+ }
+ else if (buttons & kRButton)
+ {
+ value--;
+ if (value < 0)
+ value = kMaxValue;
+ }
+ setDirty (true);
+}
+
diff --git a/vstgui.sf/drawtest/source/pdrawtestview.h b/vstgui.sf/drawtest/source/pdrawtestview.h
new file mode 100644
index 0000000..4861819
--- /dev/null
+++ b/vstgui.sf/drawtest/source/pdrawtestview.h
@@ -0,0 +1,44 @@
+//-------------------------------------------------------------------------------------------------------
+// VSTGUI Test View plugin
+// Copyright (c) 2004 Arne Scheffler. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//-------------------------------------------------------------------------------------------------------
+
+#ifndef __pdrawtestview__
+#define __pdrawtestview__
+
+#ifndef __vstgui__
+#include "vstgui.h"
+#endif
+
+BEGIN_NAMESPACE_VSTGUI
+
+class CDrawTestView : public CView
+{
+public:
+ CDrawTestView (const CRect& size);
+
+ virtual void draw (CDrawContext *pContext);
+
+ virtual void mouse (CDrawContext* pContext, CPoint& where, long buttons);
+
+protected:
+ int value;
+};
+
+END_NAMESPACE_VSTGUI
+
+#endif
\ No newline at end of file
diff --git a/vstgui.sf/drawtest/source/pprimitivesviews.cpp b/vstgui.sf/drawtest/source/pprimitivesviews.cpp
new file mode 100644
index 0000000..e0e668c
--- /dev/null
+++ b/vstgui.sf/drawtest/source/pprimitivesviews.cpp
@@ -0,0 +1,245 @@
+#ifndef __pprimitivesviews__
+#include "pprimitivesviews.h"
+#endif
+
+#include
+
+const CColor kBlueAlphaCColor = { 0, 0, 255, 200};
+const CColor kRedAlphaCColor = { 255, 0, 0, 200};
+const CColor kYellowAlphaCColor = { 255, 255, 0, 200};
+const CColor kGreenAlphaCColor = { 0, 255, 0, 200};
+const CColor kMagentaAlphaCColor= { 255, 0, 255, 200};
+
+PMiscView::PMiscView (const CRect& size)
+: CView (size), xOffset (0), yOffset (0)
+{
+ setTransparency (true);
+}
+
+void PMiscView::mouse (CDrawContext* pContext, CPoint &where, long buttons)
+{
+ if (pContext->waitDrag ())
+ {
+ while (pContext->getMouseButtons () == kLButton)
+ {
+ CPoint cl;
+ getMouseLocation (pContext, cl);
+ if (cl != where)
+ {
+ xOffset -= (where.x - cl.x);
+ yOffset -= (where.y - cl.y);
+ where = cl;
+ setDirty (true);
+ }
+ getFrame ()->doIdleStuff ();
+ }
+ }
+}
+
+static inline void offsetPoints (CPoint* points, long numPoints, CPoint offset)
+{
+ for (long i = 0; i < numPoints; i++)
+ points[i].offset (offset.x, offset.y);
+}
+
+void PMiscView::draw (CDrawContext* pContext)
+{
+ drawGrid (pContext);
+ CPoint polyPoints[10];
+ polyPoints[0] = CPoint (50,0);
+ polyPoints[1] = CPoint (100,50);
+ polyPoints[2] = CPoint (50,100);
+ polyPoints[3] = CPoint (0,50);
+ polyPoints[4] = CPoint (50,0);
+ offsetPoints (polyPoints, 5, CPoint (size.left + xOffset, size.top + yOffset));
+ pContext->setDrawMode (kAntialias);
+ pContext->setFrameColor (kBlackCColor);
+ pContext->drawPolygon (polyPoints, 5, kDrawStroked);
+ offsetPoints (polyPoints, 5, CPoint (50, 0));
+ pContext->setFillColor (kBlueAlphaCColor);
+ pContext->drawPolygon (polyPoints, 5, kDrawFilled);
+ offsetPoints (polyPoints, 5, CPoint (50, 0));
+ pContext->setFillColor (kRedAlphaCColor);
+ pContext->drawPolygon (polyPoints, 5, kDrawFilledAndStroked);
+
+ CRect ellipseRect (200, 0, 300, 100);
+ ellipseRect.offset (size.left + xOffset, size.top + yOffset);
+ pContext->drawEllipse (ellipseRect, kDrawStroked);
+ ellipseRect.offset (50, 0);
+ pContext->setFillColor (kBlueAlphaCColor);
+ pContext->drawEllipse (ellipseRect, kDrawFilled);
+ ellipseRect.offset (50, 0);
+ pContext->setFillColor (kRedAlphaCColor);
+ pContext->drawEllipse (ellipseRect, kDrawFilledAndStroked);
+
+ setDirty (false);
+}
+
+void PMiscView::drawGrid (CDrawContext* pContext)
+{
+ static long gridOffset = 10;
+ long x = size.left;
+ long y = size.top;
+ long numHLines = size.getWidth () / gridOffset + 1;
+ long numVLines = size.getHeight () / gridOffset + 1;
+ CPoint* points = new CPoint [numHLines*2 + numVLines*2];
+ long i;
+ for (i = 0; i < numHLines*2; i+=2, x += gridOffset)
+ {
+ points[i] = CPoint (x, size.top);
+ points[i+1] = CPoint (x, size.bottom);
+ }
+ for (i = 0; i < numVLines*2; i+=2, y += gridOffset)
+ {
+ points[numHLines*2+i] = CPoint (size.left, y);
+ points[numHLines*2+i+1] = CPoint (size.right, y);
+ }
+ pContext->setDrawMode (kCopyMode);
+ pContext->setFrameColor (kGreyCColor);
+ pContext->drawLines (points, numHLines+numVLines);
+ delete [] points;
+}
+
+PLinesView::PLinesView (const CRect& size)
+: CView (size)
+{
+ setTransparency (true);
+}
+
+void PLinesView::draw (CDrawContext *context)
+{
+ int i;
+ char text[512];
+ text[0] = 0;
+ context->setFont (kNormalFontSmall);
+ context->setFrameColor (kWhiteCColor);
+ context->setFontColor (kBlackCColor);
+ CRect r (size);
+ r.left += 10;
+ r.right -= 2;
+ r.setHeight (12);
+ context->drawString ("Normal Lines with different line widths", r);
+ context->setLineStyle (kLineSolid);
+ r.offset (0, 12);
+ for (i = 1; i <= 5; i++)
+ {
+ context->setLineWidth (i);
+ CPoint p (r.left, r.bottom - r.getHeight () / 2);
+ context->moveTo (p);
+ p.x = r.right;
+ context->lineTo (p);
+ CRect textSize (r.left-10, r.top, r.left, r.bottom);
+ sprintf (text, "%d", i);
+ context->drawString (text, textSize);
+ r.offset (0, 12);
+ }
+ context->drawString ("Dotted Lines with different line widths", r);
+ context->setLineStyle (kLineOnOffDash);
+ r.offset (0, 12);
+ for (i = 1; i <= 5; i++)
+ {
+ context->setLineWidth (i);
+ CPoint p (r.left, r.bottom - r.getHeight () / 2);
+ context->moveTo (p);
+ p.x = r.right;
+ context->lineTo (p);
+ CRect textSize (r.left-10, r.top, r.left, r.bottom);
+ sprintf (text, "%d", i);
+ context->drawString (text, textSize);
+ r.offset (0, 12);
+ }
+ context->drawString ("Normal Lines Antialiased with different line widths", r);
+ context->setLineStyle (kLineSolid);
+ context->setDrawMode (kAntialias);
+ r.offset (0, 12);
+ for (i = 1; i <= 5; i++)
+ {
+ context->setLineWidth (i);
+ CPoint p (r.left, r.bottom - r.getHeight () / 2);
+ context->moveTo (p);
+ p.x = r.right;
+ context->lineTo (p);
+ CRect textSize (r.left-10, r.top, r.left, r.bottom);
+ sprintf (text, "%d", i);
+ context->drawString (text, textSize);
+ r.offset (0, 12);
+ }
+ context->drawString ("Dotted Lines Antialiased with different line widths", r);
+ context->setLineStyle (kLineOnOffDash);
+ r.offset (0, 12);
+ for (i = 1; i <= 5; i++)
+ {
+ context->setLineWidth (i);
+ CPoint p (r.left, r.bottom - r.getHeight () / 2);
+ context->moveTo (p);
+ p.x = r.right;
+ context->lineTo (p);
+ CRect textSize (r.left-10, r.top, r.left, r.bottom);
+ sprintf (text, "%d", i);
+ context->drawString (text, textSize);
+ r.offset (0, 12);
+ }
+ context->setLineStyle (kLineSolid);
+ context->setLineWidth (1);
+ context->setDrawMode (kCopyMode);
+
+ setDirty (false);
+}
+
+PRectsView::PRectsView (const CRect& size)
+: CView (size)
+{
+ setTransparency (true);
+}
+
+void PRectsView::draw (CDrawContext *context)
+{
+ char text[512];
+ text[0] = 0;
+ context->setFont (kNormalFontSmall);
+ context->setFrameColor (kRedCColor);
+ context->setFontColor (kBlackCColor);
+ CRect r (size);
+ context->drawRect (r);
+// r.inset (1,1);
+ context->setFillColor (kWhiteCColor);
+ context->drawRect (r,kDrawFilled);
+ r.inset (2, 2);
+ context->setDrawMode (kAntialias);
+ context->drawRect (r);
+ context->setDrawMode (kCopyMode);
+ r.inset (5, 5);
+ CRect r1 (r);
+ r1.setHeight (r1.getHeight () / 2);
+ r1.setWidth (r1.getWidth () / 2);
+ CRect r2 (r1);
+ r2.inset (1, 1);
+ context->setFillColor (kBlueAlphaCColor);
+ context->drawRect (r2, kDrawFilledAndStroked);
+ r2 = r1;
+ r2.offset (r2.getWidth (), 0);
+ r2.inset (1,1);
+ context->setFillColor (kYellowAlphaCColor);
+ context->drawRect (r2, kDrawFilledAndStroked);
+ r2 = r1;
+ r2.offset (0, r2.getHeight ());
+ r2.inset (1,1);
+ context->setFillColor (kGreenAlphaCColor);
+ context->drawRect (r2, kDrawFilledAndStroked);
+ r2 = r1;
+ r2.offset (r2.getWidth (), r2.getHeight ());
+ r2.inset (1,1);
+ context->setFillColor (kMagentaAlphaCColor);
+ context->drawRect (r2, kDrawFilledAndStroked);
+
+ r2 = r;
+ r2.inset (r2.getWidth () / 4, r2.getHeight () / 4);
+ CColor alphaColor = {0, 0, 0, 130};
+ context->setFillColor (alphaColor);
+ context->fillRect (r2);
+ r2.inset (r2.getWidth () / 4, r2.getHeight () / 4);
+ CColor alpha2Color = {255, 255, 255, 130};
+ context->setFillColor (alpha2Color);
+ context->fillRect (r2);
+ setDirty (false);
+}
diff --git a/vstgui.sf/drawtest/source/pprimitivesviews.h b/vstgui.sf/drawtest/source/pprimitivesviews.h
new file mode 100644
index 0000000..90c339a
--- /dev/null
+++ b/vstgui.sf/drawtest/source/pprimitivesviews.h
@@ -0,0 +1,37 @@
+#ifndef __pprimitivesviews__
+#define __pprimitivesviews__
+
+#ifndef __vstgui__
+#include "vstgui.h"
+#endif
+
+class PLinesView : public CView
+{
+public:
+ PLinesView (const CRect& size);
+
+ virtual void draw (CDrawContext *pContext);
+};
+
+class PRectsView : public CView
+{
+public:
+ PRectsView (const CRect& size);
+
+ virtual void draw (CDrawContext *pContext);
+};
+
+class PMiscView : public CView
+{
+public:
+ PMiscView (const CRect& size);
+
+ virtual void draw (CDrawContext* pContext);
+ virtual void mouse (CDrawContext* pContext, CPoint &where, long buttons = -1);
+protected:
+ void drawGrid (CDrawContext* pContext);
+ long xOffset;
+ long yOffset;
+};
+
+#endif
diff --git a/vstgui.sf/drawtest/win.vc6/drawtest.dsp b/vstgui.sf/drawtest/win.vc6/drawtest.dsp
new file mode 100644
index 0000000..07ca6eb
--- /dev/null
+++ b/vstgui.sf/drawtest/win.vc6/drawtest.dsp
@@ -0,0 +1,363 @@
+# Microsoft Developer Studio Project File - Name="drawtest" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=drawtest - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "drawtest.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "drawtest.mak" CFG="drawtest - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "drawtest - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "drawtest - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "drawtest - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DRAWTEST_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\.." /I "..\..\vstgui" /I "..\..\..\public.sdk\source\vst2.x" /I "..\..\libpng" /I "..\..\zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DRAWTEST_EXPORTS" /D USE_LIBPNG=1 /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"../../../public.sdk/samples/vst2.x/win.vc6/Release/drawtest.dll"
+
+!ELSEIF "$(CFG)" == "drawtest - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DRAWTEST_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\.." /I "..\..\vstgui" /I "..\..\..\public.sdk\source\vst2.x" /I "..\..\libpng" /I "..\..\zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DRAWTEST_EXPORTS" /D USE_LIBPNG=1 /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"../../../public.sdk/samples/vst2.x/win.vc6/Debug/drawtest.dll" /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "drawtest - Win32 Release"
+# Name "drawtest - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Group "libpng"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\libpng\png.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\png.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngconf.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngerror.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pnggccrd.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngget.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngmem.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngpread.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngread.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngrio.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngrtran.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngrutil.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngset.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngtrans.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngvcrd.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngwio.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngwrite.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngwtran.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\libpng\pngwutil.c
+# End Source File
+# End Group
+# Begin Group "zlib"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\zlib\adler32.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\compress.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\crc32.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\deflate.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\gzio.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\infback.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\inffast.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\inflate.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\inftrees.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\trees.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\uncompr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\zlib.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\zlib\zutil.c
+# End Source File
+# End Group
+# Begin Group "vst2.x"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\PUBLIC.SDK\source\vst2.x\aeffeditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\public.sdk\source\vst2.x\audioeffect.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\PUBLIC.SDK\source\vst2.x\audioeffect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\public.sdk\source\vst2.x\audioeffectx.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\PUBLIC.SDK\source\vst2.x\audioeffectx.h
+# End Source File
+# End Group
+# Begin Group "vstgui"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\vstgui\aeffguieditor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\aeffguieditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\cfileselector.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\cfileselector.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\cscrollview.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\cscrollview.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\ctabview.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\ctabview.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\vstcontrols.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\vstcontrols.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\vstgui.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\vstgui.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\vstgui\vstkeycode.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\source\controlsgui.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\source\controlsgui.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\source\pdrawtesteditor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\source\pdrawtesteditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\source\pdrawtesteffect.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\source\pdrawtesteffect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\source\pdrawtestmain.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\source\pdrawtestview.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\source\pdrawtestview.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\source\pprimitivesviews.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\source\pprimitivesviews.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\win\drawtest.def
+# End Source File
+# Begin Source File
+
+SOURCE=..\win\drawtest.rc
+# End Source File
+# End Target
+# End Project
diff --git a/vstgui.sf/drawtest/win.vc6/drawtest.dsw b/vstgui.sf/drawtest/win.vc6/drawtest.dsw
new file mode 100644
index 0000000..b467b25
--- /dev/null
+++ b/vstgui.sf/drawtest/win.vc6/drawtest.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "drawtest"=.\drawtest.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/vstgui.sf/drawtest/win/drawtest.def b/vstgui.sf/drawtest/win/drawtest.def
new file mode 100644
index 0000000..13f74e2
--- /dev/null
+++ b/vstgui.sf/drawtest/win/drawtest.def
@@ -0,0 +1,3 @@
+EXPORTS
+ VSTPluginMain
+ main=VSTPluginMain
diff --git a/vstgui.sf/drawtest/win/drawtest.rc b/vstgui.sf/drawtest/win/drawtest.rc
new file mode 100644
index 0000000..ac4ad95
--- /dev/null
+++ b/vstgui.sf/drawtest/win/drawtest.rc
@@ -0,0 +1,32 @@
+#define APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Data
+//
+
+1 PNG "../resources/bmp00001.png"
+100 PNG "../resources/bmp00100.png"
+1000 PNG "../resources/bmp01000.png"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+10001 BITMAP DISCARDABLE "../resources/bmp10001.bmp"
+10002 BITMAP DISCARDABLE "../resources/bmp10002.bmp"
+10003 BITMAP DISCARDABLE "../resources/bmp10003.bmp"
+10004 BITMAP DISCARDABLE "../resources/bmp10004.bmp"
+10005 BITMAP DISCARDABLE "../resources/bmp10005.bmp"
+10006 BITMAP DISCARDABLE "../resources/bmp10006.bmp"
+10007 BITMAP DISCARDABLE "../resources/bmp10007.bmp"
+10008 BITMAP DISCARDABLE "../resources/bmp10008.bmp"
+10009 BITMAP DISCARDABLE "../resources/bmp10009.bmp"
+10010 BITMAP DISCARDABLE "../resources/bmp10010.bmp"
+10011 BITMAP DISCARDABLE "../resources/bmp10011.bmp"
+10012 BITMAP DISCARDABLE "../resources/bmp10012.bmp"
+10013 BITMAP DISCARDABLE "../resources/bmp10013.bmp"
+10014 BITMAP DISCARDABLE "../resources/bmp10014.bmp"
+10015 BITMAP DISCARDABLE "../resources/bmp10015.bmp"
+10016 BITMAP DISCARDABLE "../resources/bmp10016.bmp"
diff --git a/vstgui.sf/drawtest/win/drawtest.vcproj b/vstgui.sf/drawtest/win/drawtest.vcproj
new file mode 100644
index 0000000..61445d0
--- /dev/null
+++ b/vstgui.sf/drawtest/win/drawtest.vcproj
@@ -0,0 +1,608 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Changelog b/vstgui.sf/vstgui/Changelog
new file mode 100644
index 0000000..6002673
--- /dev/null
+++ b/vstgui.sf/vstgui/Changelog
@@ -0,0 +1,360 @@
+2006-02-08 arne
+
+ * fix CSplashScreen view
+ * fix CTextEdit
+
+2005-10-03 arne
+
+ * bugfix: CTabView does not release its subviews
+ * CControl::getTag() is virtual now.
+
+2005-08-12 arne
+
+ * initial support for X/Y mouse wheel (currently only macosx, don't know how ms windows handles this)
+
+2005-07-29 arne
+
+ * bugfix: CDrawContext doesn't remember font style and does not change the font if only the font style changed.
+ * quartz: keyboard event handling works now, so that hosts will get all key events we don't handle.
+
+2005-07-22 arne
+
+ * quartz: little optimization in CDrawContext::beginCGContext
+ * quartz: cleaned up the event handler
+ * stop advancing focus if the last focusable control has focus.
+
+2005-07-22 arne
+
+ * fixed a regression bug in AEffGUIEditor, where idle() was not called
+ * only CKnob and CSlider want focus, as they are the only controls handling key strokes.
+
+2005-07-14 arne
+
+ * moved CFileSelector in its own file
+ * quartz: fixed some bugs with COffscreenContext
+
+2005-07-09 arne
+
+ * the CView::draw method now draws the background image if it has one.
+ * new CFrame::updatesDisabled method to lock idle updates.
+ * bug fix for overlapping control drawing.
+ * add a style to COnOffButton so that the listener can be called before doIdleStuff is called.
+
+2005-07-02 arne
+
+ * windows: CFrame uses a backbuffer now when USE_ALPHA_BLEND is on. This fixes a performance issue with some graphic cards.
+ The drawback at the moment is, that drawing can only occur when the CFrame calls the views to draw. You can not draw anymore
+ by creating your own drawcontext.
+
+2005-06-25 arne
+
+ * adding keyboard focus navigation
+ * add bool bWantsFocus to CView. If this is set the view is included in keyboard focus navigation.
+
+2005-06-24 arne
+
+ * merge newframe back to main
+ * fixed some gcc warnings
+
+2005-05-13 arne
+
+ * quartz: if the CFrame is embedded into a window composited window, the setSize(..) method does not resize the window anymore.
+ * quartz: some window compositing fixes
+ * the tabs in a CTabView can be aligned
+ * mac os x: quartz will be used per default now
+
+2005-05-05 arne
+
+ * added CBitmap::setNoAlpha(..) and CBitmap::getNoAlpha(). You can set this for PNG images which don't have an alpha channel to speed up drawing on windows.
+ * quartz: some window compositing fixes
+
+2005-04-30 arne
+
+ * windows: with libpng, when a bmp image was loaded, don't use AlphaBlend instead use old BitBlt.
+ * quartz: non png images can be drawn with transparent color again.
+
+2005-04-29 arne
+
+ * added CTextLabel
+ * mac: the CFrame can be placed into HIScrollViews
+ * mac: using static objects for Quicktime GraphicsImporter to speed up loading of images
+ * mac: using CGImageCreateImageInRect on 10.4 for faster drawing of clipped images
+
+2005-04-11 arne
+
+ * removed CFrame::isSomethingDirty
+ * added a check in CViewContainer::isDirty if the subview is inside the view container size
+ * fix for overlapping views not drawn everytime
+ * quartz: fix some drawing bugs
+
+2005-03-25 arne
+
+ * quartz: fix drawing of transparent bitmaps when OLD_TRANSPARENT_BITMAP_MODE is defined
+ * fix a bug for quickdraw's CDrawContext::setClipRect
+ * quartz: on composited windows, the ctextedit creates a native UnicodeTextControl instead of an MLTE Object
+ * a try to fix redraw problems if the system sends a redraw and some views won't get updated completly
+ * changed the implementation of CView Attributes. Documentation removed. Will be updated before the 3.0 release.
+
+2005-03-05 arne
+
+ * fixed a memory leak on windows with IDropTarget (thanks bigtick)
+ * add automatic initialization of the xpos and ypos vars in the CSpecialDigit constructor (thanks bigtick)
+
+2005-02-18 arne
+
+ * new coordinate typedef CCoord, so that we have the possibility to change the coordinate system to floating point
+ * small bugfix in CDrawDevice::drawRect
+
+2005-01-04 arne
+
+ * the following CDrawContext methods have a new optional parameter "CDrawStyle": drawPolygon, drawRect, drawArc, drawEllipse.
+ the draw style is either kDrawStroked, kDrawFilled or kDrawFilledAndStroked.
+ * added another cursor : kCursorHand
+ * fixed some problems compiling the code on microsoft windows.
+ * fixed some problems with alphablending bitmaps on windows.
+ * added example plugguieditor.cpp file to be used for non VST usage. (There's an example AU plug in the drawtest module)
+ * added CTabView class.
+ * changed constructor of AEffGUIEditor to take a void instead of an AudioEffect pointer, so that subclassing
+ either from PluginGUIEditor or AEffGUIEditor is as simple as possible.
+
+2004-11-29 arne
+
+ * started to clean up the code (check your code, many methods in CView, CViewContainer & CFrame are declared const now)
+ * started to make a better documentation (see the headers), more to come
+ * renamed pEditView in CFrame to pFocusView as well as setEditView to setFocusView and getEditView to getFocusView ;-)
+ * the following methods in CView are now deprecated : setParentView, setFrame, getFrameTopLeftPos
+ * removed old windows drag&drop code
+ * use generic rgb color space for quartz code
+ * fix an issue with quartz and OLD_TRANSPARENT_BITMAP_MODE when the transparency color changed
+ * some drawing optimizations
+ * new method in CDrawContext to draw multiple lines at once : CDrawContext::drawLines ()
+ * if you call beginEdit in any CControl class the control will be the focus view now
+
+2004-10-03 arne
+
+ * added generic attributes interface to the CView class (see CViewAttributes.rtf)
+ * added CFrame::setPosition to change the location of the view inside it's parent view (mac quartz only at the moment)
+ * some mac quartz bugfixes
+ * some bugfixes for CScrollView
+ * added localToFrame and frameToLocal methods to CView
+ * bugfix for CViewContainer::getCurrentView (). Didn't work for nested containers (W.Franke)
+ * quartz: CFrame::getSize returns the size of the mac control now instead of the window
+ * CViewContainer::getViewAt changed so that you can get the deepest view at that position
+ * CControls set now the editView of the frame on beginEdit and set it to zero at endEdit (W.Franke)
+
+2004-08-30 arne
+
+ **** bump version to 3.0 !
+
+ * change CView::getParent to CView::getFrame
+ * correct implementation of beginEdit and endEdit in all CControls, you should change your code of custom controls from getParent->beginEdit (tag) to beginEdit () ;-)
+ * new drawArc method in CDrawContext which takes angels as parameters
+ * added some kind of runtime type information.
+ * mac: changed the kInfinitySymbol to be 'oo' as the mac character is not available in Helvetica
+ * added two new cursor types (kCursorCopy & kCursorNotAllowed). (Currently only for Mac OS X, Windows will follow)
+ * complete new drag & drop implementation. Now all views can react if something is dragged over it.
+ * some fixes to the update methods when drawing with offsets and COffscreenContexts.
+ * mac: the macro 'CARBON' is changed to 'TARGET_API_MAC_CARBON' as this is what the Mac OS itself uses.
+ * mac: compiling with VSTGUI as namespace works now
+ * mac: use current API for creating menus. (fixes some bugs with the old implementation, where you could not create menuitems like "-3db")
+
+2004-08-25 arne
+
+ * mac: change COptionMenuScheme implementation to be optional as it only works for OSX Version >= 10.3 (macro: MAC_ENABLE_MENU_SCHEME)
+
+2004-08-15 arne
+
+ * added CView::acceptDrop. On Mac OS this changes the mouse cursor if a view accepts a drop. For Windows there is currently no action. But it should follow. And maybe it will change so that a real tracking is possible.
+ * with the new update mechanism the modal view is now updated first in CFrame::update, to make sure it will be drawn in all circumstances, even if it is transparent and a view below it is dirty.
+
+2004-08-06 arne
+
+ * quartz: - cache the CGImageRef, so that it is not created every time the CBitmap is drawn. (Performace will be much better with the next os release)
+ - remove the SetPort/GetPort stuff in AEffGUIEditor. It is not needed anymore.
+
+2004-07-30 arne
+
+ * better streamlined mechanism for CViewContainer::update (you can turn this off, if it does not work for you in vstgui.cpp with the NEW_UPDATE_MECHANISM macro at the top)
+ this is not tested with Containers using offscreens (but should work). This should fix the problem that non-transparent containers were not really nestable.
+ * quartz: removed the focus handlers for now as most hosts does not set the focus back on their windows if someone clicks into it. This way they get all key downs again.
+ * added setListener() to CControl
+
+2004-07-12 arne
+
+ * quartz: fix a bug in COffscreenContext::copyTo if the offsetScreen point of the context is not at 0:0
+
+2004-06-28 arne
+
+ * quartz: fix clipping issues
+ * fix a bug in CViewContainer's update method if the container is transparent and embedded into another CViewContainer
+
+2004-06-26 arne
+
+ * the modal view is now added to the frame like all other views.
+ * added a reference counting class. CView, CBitmap and CDrawContext are subclasses of it.
+ * clip handling is more consistent now.
+ * some quartz changes: - first try to implement CDrawDevice::drawArc (not yet finished)
+ - COffscreenContext is now more implemented, copyTo works in most situations
+ - native mac controls can now be embedded into the frame, but it does only work correct with compositing enabled windows
+
+2004-06-20 arne
+
+ * AEffGUIEditor::draw will now draw only the rectangle it should, or as in the past the whole editor if no rect is given.
+ * windows: 64 bit compatibility
+
+2004-06-12 arne
+
+ * CFrame is now subclassed from CViewContainer (thanks Wolfram Franke for the hard work)
+ - One thing to check: CFrame::removeView was declared with (CView *pView, const bool &withForget = false), this has changed to
+ (CView *pView, const bool &withForget = true). So if you have somewhere in your Code frame->removeView (view) you must change it
+ to frame->removeView (view, false).
+ * mac: FDebugPrint implementation for Classic and Mac OS X
+ * changed the CColor unused member variable to be alpha all over the place (no more MS C++ internal compiler error)
+ * macosx: the CFileSelector can now be used to get unix path strings. If vstFileSelect->future[0] is 1 the internal implementation will
+ return unix paths and set vstFileSelect->future[0] to 0. If the host supports openFileSelector vstFileSelect->future[0] will
+ be 1 and the results are in the old FSSpec format.
+ * the CFileSelector is now usable when PLUGGUI is set.
+ * using clipping all over the place
+ * quartz: rechecked the whole graphics drawing functions to work as expected
+
+2004-05-31 arne
+
+ * mac: COptionMenuScheme works now with QUARTZ (Mac OS X 10.3 and above)
+ * mac: QUARTZ implementation of CDrawContext::drawEllipse and fillEllipse
+ * added a global COptionMenuScheme variable, if set all menues will use it
+ * fix a possible crash in COptionMenu::mouse (thanks Wolfram Franke)
+
+2004-05-22 arne
+
+ * moved pBackgroundBitmap and its accessors into CView from CViewContainer, CFrame and CControl as suggested by Wolfram Franke
+ * mac: added implementation for quartz CBitmap::CBitmap (CFrame &frame, long width, long height)
+ * windows: prevent a free memory read in UDropTarget::Release (submitted by Justin Caldicott)
+
+2004-04-27 arne
+
+ * changed CControlListener and added a method to intercept modifier clicks so the listener can decide if the control should handle
+ this click. This makes it easy to implement some kind of 'MIDI Learn' functionality.
+ Note: you need to implement this new method in your CControlListener, otherwise there will be compile errors. If you don't want
+ this feature, just return 0.
+ * changed all controls to support the new CControlListener method.
+ * mac: bugfix for CTextEdit::takeFocus under quartz.
+ * mac: changed fonts from arial to helvetica as on some OS X installations arial is not installed.
+
+2004-04-17 arne
+
+ * windows: support for alpha blended images like it is on Mac OS X with quartz
+ note: this implementation uses libpng (makro is USE_LIBPNG)
+ * CDrawContext::setClipRect uses the offset now
+ * COptionMenu::getSubMenu added
+ * mac: fixed some quartz drawing stuff
+ * mac: fix for CFrame::getPosition with quartz
+ * mac: removed CARBON_EVENTS macro as it only works with QUARTZ
+
+2004-04-11 arne
+
+ * CViewContainer should be completely nestable now
+ * mac: implemented the quartz offscreencontext for existing bitmaps
+
+2004-03-23 arne
+
+ * CTextEdit use the CParamDisplay::stringConvert functions to draw text
+ * Fix of possible crash in CFileSelector::run
+ * CFM Carbon plugs can now draw text antialiased even if the host does not support it
+ (Thanks to Wolfram Franke for this stuff)
+
+ * mac: added waitDoubleClick and waitDrag with carbon events
+
+2004-03-19 arne
+
+ * add CView::getFrameTopLeftPos method to get the topleft position of the view relative to the frame
+ * call AEffGUIEditor instead of AudioEffectX for beginEdit and endEdit
+ * mac: small changes to allow to use a CDrawContext on every Window even those without a CFrame
+
+2004-03-01 arne
+
+ * mac : fix for RGBA Bitmaps on Displays with less than million colors
+
+2004-02-16 arne
+
+ * mac : fix compile error in CDrawContext::getMouseLocation when compiling for CFM plugs
+
+2004-02-06 arne
+
+ * mac : focus fix
+
+2004-02-01 arne
+
+ * add empty CBitmap constructor for easy subclassing
+ * mac : add beginEdit/endEndit hook for AudioUnits
+ * windows : fix for CFrame::setSize for Orion submitted by Ben Allison
+
+2004-01-02 arne
+
+ * mac: corrected code for right mouse click with carbon events
+
+2003-12-15 arne
+
+ * fix a typo in COptionMenu::mouse
+ * mac: fix a typo in CDrawContext::setLineStyle
+ * mac: fix for CDrawContext::getMouseLocation problem with DP 4
+ * mac: on compositing windows the control is now added to the kHIViewWindowContentID if it exists.
+ * mac: should compile on Mac OS X 10.2 again if CARBON_EVENTS are defined.
+
+2003-12-05 arne
+
+ * fix compile problem of COptionMenu::takeFocus on Windows
+
+2003-12-04 arne
+
+ * fix for nested CViewContainers
+ * Mac: fix for using vstgui for other than VST ;-)
+
+2003-11-15 arne
+
+ ***************
+ *** WARNING ***
+ ***************
+ existing code need to be changed !!!
+ You need to change your CView::mouse methods to add the buttons parameter and your calls to CDrawContext::getMouseLocation inside CViews should be changed to call CView::getMouseLocation instead.
+ ***************
+
+ * fixed the CViewContainer stuff with Quartz.
+ NOTE : I had to change the way how the view can get the current mouse location. It has to ask itself now as the CView class can
+ check if it is embedded into a CViewContainer which the CDrawDevice couldn't.
+ * all mouse methods get another parameter: long buttons
+
+ Mac Only:
+ * changed the drag and drop stuff for Carbon Events
+ * With CARBON_EVENTS == 1, CFrame acts now like a Mac Toolbox Control. It works even on compositing enabled windows and on non left-top positions.
+
+2003-11-12 arne
+
+ * Bugfix for CFrame::setSize for hosts which support "audioMasterSizeWindow" submitted by Justus Henkmann (TC Works)
+
+2003-10-10 arne
+
+ * Bugfix for COptionMenu::addEntry submitted by Nicolas Bronnec
+
+2003-09-18 arne
+
+ * incorporated Marc Poirier's CTextEdit fixes
+ * quartz: bugfix in drawString, set cliprect so that the text won't draw outside
+ * carbon events: some code cleanup
+
+2003-09-17 arne
+
+ * Added Carbon Events handling (#define CARBON_EVENTS 1)
+ * Implemented QUARTZ drawing. (#define QUARTZ 1)
+ * CSlider doesn't use a COffscreenContext for drawing on MacOSX anymore
+
+ Quartz Notes:
+ - Not all graphic operations we use in vstgui have an equivalent in quartz.
+ Currently unsupported are :
+ - all drawing modes except kCopyMode
+ - getPoint ()
+ _ floodFill ()
+ - copy from Screen to Offscreen
+
+ - to support alpha drawing on all operations I have made changes to CColor. The 4th variable is now the alpha value where 255 is opaque and 0 is transparent.
+ - transparent bitmap drawing is now handled with the alpha value of the bitmap, if you want the old behaviour turn on OLD_TRANSPARENT_BITMAP_MODE
+ - because of some strange things with CViewContainers while doing mouse downs the drawcontext has an offset which results in wrong drawing. This needs to be fixed !!!
diff --git a/vstgui.sf/vstgui/Documentation/Migrating from 2.3.rtf b/vstgui.sf/vstgui/Documentation/Migrating from 2.3.rtf
new file mode 100644
index 0000000..80e93f3
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/Migrating from 2.3.rtf
@@ -0,0 +1,82 @@
+{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf330
+{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;}
+{\colortbl;\red255\green255\blue255;\red255\green0\blue24;}
+\paperw11900\paperh16840\margl1440\margr1440\vieww22140\viewh20220\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 - CView::mouse(..) has a new parameter, you need to add it to your own view classes\
+\
+- CView::hitTest() now uses mouseableArea instead of size\
+\
+- CColor constants now need an opacity value (255 == opaque, 0 = transparent)\
+
+\fs22 \
+\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)\
+\
+}
\ No newline at end of file
diff --git a/vstgui.sf/vstgui/Documentation/html/aeffguieditor_8cpp.html b/vstgui.sf/vstgui/Documentation/html/aeffguieditor_8cpp.html
new file mode 100644
index 0000000..f6f0570
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/aeffguieditor_8cpp.html
@@ -0,0 +1,119 @@
+
+
+VSTGUI: aeffguieditor.cpp File Reference
+
+
+
+
+
+
+aeffguieditor.cpp File Reference #include "aeffguieditor.h "
+
+Define Documentation
+
+
+
+
+
+
+ #define kIdleRate 100
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kIdleRate2 50
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kIdleRateMin 4
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/aeffguieditor_8h.html b/vstgui.sf/vstgui/Documentation/html/aeffguieditor_8h.html
new file mode 100644
index 0000000..547f40b
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/aeffguieditor_8h.html
@@ -0,0 +1,46 @@
+
+
+VSTGUI: aeffguieditor.h File Reference
+
+
+
+
+
+
+aeffguieditor.h File Reference #include "aeffeditor.h"
+#include "vstgui.h "
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/annotated.html b/vstgui.sf/vstgui/Documentation/html/annotated.html
new file mode 100644
index 0000000..6350658
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/annotated.html
@@ -0,0 +1,92 @@
+
+
+VSTGUI: Class List
+
+
+
+
+
+
+VSTGUI Class List Here are the classes, structs, unions and interfaces with brief descriptions:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/cfileselector_8cpp.html b/vstgui.sf/vstgui/Documentation/html/cfileselector_8cpp.html
new file mode 100644
index 0000000..1d98413
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/cfileselector_8cpp.html
@@ -0,0 +1,195 @@
+
+
+VSTGUI: cfileselector.cpp File Reference
+
+
+
+
+
+
+cfileselector.cpp File Reference #include "AudioEffectX.h"
+#include "cfileselector.h "
+
+Define Documentation
+
+
+
+
+
+
+ #define kPathMax 1024
+
+
+
+
+
+
+
+
+
+
+
+
+ #define stringAllTypes "All Types: ("
+
+
+
+
+
+
+
+
+
+
+
+
+ #define stringAnyType "Any Type (*.*)"
+
+
+
+
+
+
+
+
+
+
+
+
+ #define stringCancel "Cancel"
+
+
+
+
+
+
+
+
+
+
+
+
+ #define stringLookIn "Look in"
+
+
+
+
+
+
+
+
+
+
+
+
+ #define stringSelect "Select"
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/cfileselector_8h.html b/vstgui.sf/vstgui/Documentation/html/cfileselector_8h.html
new file mode 100644
index 0000000..668d02f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/cfileselector_8h.html
@@ -0,0 +1,98 @@
+
+
+VSTGUI: cfileselector.h File Reference
+
+
+
+
+
+
+cfileselector.h File Reference #include "vstgui.h "
+
+Enumeration Type Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kVstFileLoad
+
+ kVstFileSave
+
+ kVstMultipleFilesLoad
+
+ kVstDirectorySelect
+
+ kVstFileType
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_a_eff_g_u_i_editor-members.html b/vstgui.sf/vstgui/Documentation/html/class_a_eff_g_u_i_editor-members.html
new file mode 100644
index 0000000..4446eae
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_a_eff_g_u_i_editor-members.html
@@ -0,0 +1,58 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+AEffGUIEditor Member List This is the complete list of members for AEffGUIEditor , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_a_eff_g_u_i_editor.html b/vstgui.sf/vstgui/Documentation/html/class_a_eff_g_u_i_editor.html
new file mode 100644
index 0000000..082d4b6
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_a_eff_g_u_i_editor.html
@@ -0,0 +1,570 @@
+
+
+VSTGUI: AEffGUIEditor Class Reference
+
+
+
+
+
+
+AEffGUIEditor Class Reference #include <aeffguieditor.h>
+
+List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ AEffGUIEditor::AEffGUIEditor
+ (
+ AudioEffect *
+ effect
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AEffGUIEditor::~AEffGUIEditor
+ (
+
+ )
+
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void AEffGUIEditor::beginEdit
+ (
+ VstInt32
+ index
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void AEffGUIEditor::doIdleStuff
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void AEffGUIEditor::endEdit
+ (
+ VstInt32
+ index
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ CFrame * AEffGUIEditor::getFrame
+ (
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ static VstInt32 AEffGUIEditor::getKnobMode
+ (
+
+ )
+ [inline, static]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool AEffGUIEditor::getRect
+ (
+ ERect **
+ rect
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ unsigned int AEffGUIEditor::getTicks
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ static int AEffGUIEditor::getVstGuiVersion
+ (
+
+ )
+ [inline, static]
+
+
+
+
+
+
+
+
+
+
+
+
+ void AEffGUIEditor::idle
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void AEffGUIEditor::setParameter
+ (
+ VstInt32
+ index ,
+
+
+
+
+ float
+ value
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void AEffGUIEditor::wait
+ (
+ unsigned int
+ ms
+ )
+
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_anim_knob-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_anim_knob-members.html
new file mode 100644
index 0000000..4b3cd3e
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_anim_knob-members.html
@@ -0,0 +1,180 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CAnimKnob Member List This is the complete list of members for CAnimKnob , including all inherited members.
+ aCoef CKnob [protected]
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bCoef CKnob [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bInverseBitmap CAnimKnob [protected]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CAnimKnob (const CRect &size, CControlListener *listener, long tag, CBitmap *background, CPoint &offset)CAnimKnob
+ CAnimKnob (const CRect &size, CControlListener *listener, long tag, long subPixmaps, CCoord heightOfOneImage, CBitmap *background, CPoint &offset)CAnimKnob
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ CKnob (const CRect &size, CControlListener *listener, long tag, CBitmap *background, CBitmap *handle, const CPoint &offset)CKnob
+ colorHandle CKnob [protected]
+ colorShadowHandle CKnob [protected]
+ compute ()CKnob [protected]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *pContext)CAnimKnob [virtual]
+ drawHandle (CDrawContext *pContext)CKnob [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getRangeAngle () const CKnob [inline, virtual]
+ getStartAngle () const CKnob [inline, virtual]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ getZoomFactor () const CKnob [inline, virtual]
+ halfAngle CKnob [protected]
+ heightOfOneImage CAnimKnob [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ inset CKnob [protected]
+ isDirty () const CAnimKnob [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastDrawnPoint CAnimKnob [protected]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CKnob [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CKnob [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CKnob [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CKnob [virtual]
+ CControl::onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pHandle CKnob [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ radius CKnob [protected]
+ rangeAngle CKnob [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setColorHandle (CColor color)CKnob [virtual]
+ setColorShadowHandle (CColor color)CKnob [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setHandleBitmap (CBitmap *bitmap)CKnob [virtual]
+ setInsetValue (long val)CKnob [inline, virtual]
+ setInverseBitmap (bool val)CAnimKnob [inline]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setRangeAngle (float val)CKnob [virtual]
+ setStartAngle (float val)CKnob [virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ setZoomFactor (float val)CKnob [inline, virtual]
+ size CView [protected]
+ startAngle CKnob [protected]
+ subPixmaps CAnimKnob [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ valueFromPoint (CPoint &point) const CKnob [virtual]
+ valueToPoint (CPoint &point) const CKnob [virtual]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ zoomFactor CKnob [protected]
+ ~CAnimKnob ()CAnimKnob [virtual]
+ ~CControl ()CControl [virtual]
+ ~CKnob ()CKnob [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_anim_knob.html b/vstgui.sf/vstgui/Documentation/html/class_c_anim_knob.html
new file mode 100644
index 0000000..8707b40
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_anim_knob.html
@@ -0,0 +1,421 @@
+
+
+VSTGUI: CAnimKnob Class Reference
+
+
+
+
+
+
+CAnimKnob Class Reference a bitmap knob control
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CAnimKnob:
+
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CAnimKnob (const CRect &size , CControlListener *listener , long tag , CBitmap *background, CPoint &offset )
+
+ CAnimKnob (const CRect &size , CControlListener *listener , long tag , long subPixmaps , CCoord heightOfOneImage , CBitmap *background, CPoint &offset )
+
+virtual ~CAnimKnob ()
+
+virtual bool isDirty () const
+
+ check if view is dirty
+virtual void draw (CDrawContext *pContext)
+
+ called if the view should draw itself
+void setInverseBitmap (bool val)
+
+Protected Attributes
+long subPixmaps
+
+CCoord heightOfOneImage
+
+bool bInverseBitmap
+
+CPoint lastDrawnPoint
+
+
+Detailed Description
+a bitmap knob control
+
+Such as a CKnob control object, but there is a unique pixmap which contains different views (subpixmaps) of this knob. According to the value, a specific subpixmap is displayed. The different subpixmaps are stacked in the pixmap object.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CAnimKnob::CAnimKnob
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CAnimKnob::CAnimKnob
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ long
+ subPixmaps ,
+
+
+
+
+ CCoord
+ heightOfOneImage ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CAnimKnob::~CAnimKnob
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CAnimKnob::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Reimplemented from CKnob .
+
+
+
+
+
+
+
+
+ bool CAnimKnob::isDirty
+ (
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+check if view is dirty
+
+
+
+Reimplemented from CControl .
+
+
+
+
+
+
+
+
+ void CAnimKnob::setInverseBitmap
+ (
+ bool
+ val
+ )
+ [inline]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_anim_knob.png b/vstgui.sf/vstgui/Documentation/html/class_c_anim_knob.png
new file mode 100644
index 0000000..9257888
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_anim_knob.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_attribute_list_entry-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_attribute_list_entry-members.html
new file mode 100644
index 0000000..53c8041
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_attribute_list_entry-members.html
@@ -0,0 +1,52 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CAttributeListEntry Member List This is the complete list of members for CAttributeListEntry , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_attribute_list_entry.html b/vstgui.sf/vstgui/Documentation/html/class_c_attribute_list_entry.html
new file mode 100644
index 0000000..20f65f0
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_attribute_list_entry.html
@@ -0,0 +1,393 @@
+
+
+VSTGUI: CAttributeListEntry Class Reference
+
+
+
+
+
+
+CAttributeListEntry Class Reference List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CAttributeListEntry::CAttributeListEntry
+ (
+ long
+ size ,
+
+
+
+
+ CViewAttributeID
+ id
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CAttributeListEntry::~CAttributeListEntry
+ (
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CAttributeListEntry::CAttributeListEntry
+ (
+
+ )
+ [inline, protected]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ const CViewAttributeID CAttributeListEntry::getID
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void* CAttributeListEntry::getPointer
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ const long CAttributeListEntry::getSize
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_auto_animation-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_auto_animation-members.html
new file mode 100644
index 0000000..700b28b
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_auto_animation-members.html
@@ -0,0 +1,157 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CAutoAnimation Member List This is the complete list of members for CAutoAnimation , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ bWindowOpened CAutoAnimation [protected]
+ CAutoAnimation (const CRect &size, CControlListener *listener, long tag, CBitmap *background, CPoint &offset)CAutoAnimation
+ CAutoAnimation (const CRect &size, CControlListener *listener, long tag, long subPixmaps, CCoord heightOfOneImage, CBitmap *background, CPoint &offset)CAutoAnimation
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ closeWindow (void)CAutoAnimation [virtual]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CAutoAnimation [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ heightOfOneImage CAutoAnimation [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ isWindowOpened () const CAutoAnimation [inline]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CAutoAnimation [virtual]
+ mouseableArea CView [protected]
+ nextPixmap (void)CAutoAnimation [virtual]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CAutoAnimation [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ openWindow (void)CAutoAnimation [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ previousPixmap (void)CAutoAnimation [virtual]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ subPixmaps CAutoAnimation [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ totalHeightOfBitmap CAutoAnimation [protected]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CAutoAnimation ()CAutoAnimation [virtual]
+ ~CControl ()CControl [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_auto_animation.html b/vstgui.sf/vstgui/Documentation/html/class_c_auto_animation.html
new file mode 100644
index 0000000..d1a2a3b
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_auto_animation.html
@@ -0,0 +1,575 @@
+
+
+VSTGUI: CAutoAnimation Class Reference
+
+
+
+
+
+
+CAutoAnimation Class Reference #include <vstcontrols.h>
+
+
Inheritance diagram for CAutoAnimation:
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CAutoAnimation (const CRect &size , CControlListener *listener , long tag , CBitmap *background, CPoint &offset )
+
+ CAutoAnimation (const CRect &size , CControlListener *listener , long tag , long subPixmaps , CCoord heightOfOneImage , CBitmap *background, CPoint &offset )
+
+virtual ~CAutoAnimation ()
+
+virtual void draw (CDrawContext *)
+
+ called if the view should draw itself
+virtual void mouse (CDrawContext *pContext, CPoint &where, long button=-1)
+
+ called if a mouse click event occurs
+virtual void openWindow (void)
+
+virtual void closeWindow (void)
+
+virtual void nextPixmap (void)
+
+virtual void previousPixmap (void)
+
+bool isWindowOpened () const
+
+Protected Attributes
+CPoint offset
+
+long subPixmaps
+
+CCoord heightOfOneImage
+
+CCoord totalHeightOfBitmap
+
+bool bWindowOpened
+
+
+Detailed Description
+An auto-animation control contains a given number of subpixmap which can be displayed in loop. Two functions allows to get the previous or the next subpixmap (these functions increase or decrease the current value of this control).
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CAutoAnimation::CAutoAnimation
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CAutoAnimation::CAutoAnimation
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ long
+ subPixmaps ,
+
+
+
+
+ CCoord
+ heightOfOneImage ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CAutoAnimation::~CAutoAnimation
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CAutoAnimation::closeWindow
+ (
+ void
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CAutoAnimation::draw
+ (
+ CDrawContext *
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+
+
+
+
+
+
+ bool CAutoAnimation::isWindowOpened
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CAutoAnimation::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CAutoAnimation::nextPixmap
+ (
+ void
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CAutoAnimation::openWindow
+ (
+ void
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CAutoAnimation::previousPixmap
+ (
+ void
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_auto_animation.png b/vstgui.sf/vstgui/Documentation/html/class_c_auto_animation.png
new file mode 100644
index 0000000..071ca82
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_auto_animation.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_bitmap-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_bitmap-members.html
new file mode 100644
index 0000000..f4ce3de
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_bitmap-members.html
@@ -0,0 +1,69 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CBitmap Member List This is the complete list of members for CBitmap , including all inherited members.
+ CBitmap (long resourceID)CBitmap
+ CBitmap (CFrame &frame, CCoord width, CCoord height)CBitmap
+ CBitmap ()CBitmap [protected]
+ CReferenceCounter ()CReferenceCounter [inline]
+ dispose ()CBitmap [protected, virtual]
+ draw (CDrawContext *pContext, CRect &rect, const CPoint &offset=CPoint(0, 0))CBitmap [virtual]
+ drawAlphaBlend (CDrawContext *pContext, CRect &rect, const CPoint &offset=CPoint(0, 0), unsigned char alpha=128)CBitmap [virtual]
+ drawTransparent (CDrawContext *pContext, CRect &rect, const CPoint &offset=CPoint(0, 0))CBitmap [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ getHandle () const CBitmap
+ getHeight () const CBitmap [inline]
+ getNbReference () const CReferenceCounter [inline]
+ getNoAlpha () const CBitmap [inline]
+ getTransparentColor () const CBitmap [inline]
+ getWidth () const CBitmap [inline]
+ height CBitmap [protected]
+ isLoaded () const CBitmap
+ loadFromPath (const void *platformPath)CBitmap [protected, virtual]
+ loadFromResource (long resourceID)CBitmap [protected, virtual]
+ noAlpha CBitmap [protected]
+ remember ()CReferenceCounter [inline, virtual]
+ resourceID CBitmap [protected]
+ setNoAlpha (bool state)CBitmap [inline]
+ setTransparencyMask (CDrawContext *pContext, const CPoint &offset=CPoint(0, 0))CBitmap
+ setTransparentColor (const CColor color)CBitmap
+ transparentCColor CBitmap [protected]
+ width CBitmap [protected]
+ ~CBitmap ()CBitmap [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_bitmap.html b/vstgui.sf/vstgui/Documentation/html/class_c_bitmap.html
new file mode 100644
index 0000000..be3482a
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_bitmap.html
@@ -0,0 +1,846 @@
+
+
+VSTGUI: CBitmap Class Reference
+
+
+
+
+
+
+CBitmap Class Reference Encapsulates various platform depended kinds of bitmaps.
+More...
+
+#include <vstgui.h>
+
+
Inheritance diagram for CBitmap:
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CBitmap (long resourceID )
+
+ Create a pixmap from a resource identifier.
+ CBitmap (CFrame &frame, CCoord width , CCoord height )
+
+ Create a pixmap with a given size.
+virtual ~CBitmap ()
+
+virtual void draw (CDrawContext *pContext, CRect &rect, const CPoint &offset=CPoint (0, 0))
+
+ Draw the pixmap using a given rect as output position and a given offset of its source pixmap.
+virtual void drawTransparent (CDrawContext *pContext, CRect &rect, const CPoint &offset=CPoint (0, 0))
+
+virtual void drawAlphaBlend (CDrawContext *pContext, CRect &rect, const CPoint &offset=CPoint (0, 0), unsigned char alpha=128)
+
+ Same as CBitmap::draw except that it uses the alpha value to draw the bitmap alpha blended.
+CCoord getWidth () const
+
+CCoord getHeight () const
+
+bool isLoaded () const
+
+void * getHandle () const
+
+void setTransparentColor (const CColor color)
+
+CColor getTransparentColor () const
+
+void setTransparencyMask (CDrawContext *pContext, const CPoint &offset=CPoint (0, 0))
+
+void setNoAlpha (bool state)
+
+bool getNoAlpha () const
+
+Protected Member Functions
+ CBitmap ()
+
+virtual void dispose ()
+
+virtual bool loadFromResource (long resourceID )
+
+virtual bool loadFromPath (const void *platformPath)
+
+Protected Attributes
+long resourceID
+
+CCoord width
+
+CCoord height
+
+CColor transparentCColor
+
+bool noAlpha
+
+
+Detailed Description
+Encapsulates various platform depended kinds of bitmaps.
+
+
+With Version 3.0 of VSTGUI it is possible to use alpha blended bitmaps. This comes free on Mac OS X and with Windows you need to include libpng. Per default PNG images will be rendered alpha blended. If you want to use a transparency color with PNG Bitmaps, you need to call setNoAlpha(true) on the bitmap and set the transparency color.
+The Bitmaps are PICTs and stored inside the resource fork.
+The Bitmaps can be of type PNG, JPEG, PICT, BMP and are stored in the Resources folder of the plugin bundle. They must be named bmp00100.png (or bmp00100.jpg, etc). The number is the resource id.
+The Bitmaps are .bmp files and must be included in the plug (usually using a .rc file). It's also possible to use png as of version 3.0 if you define the macro USE_LIBPNG and include the libpng and zlib libraries/sources to your project.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CBitmap::CBitmap
+ (
+ long
+ resourceID
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Create a pixmap from a resource identifier.
+
+
+
+
+
+
+
+
+
+
+ CBitmap::CBitmap
+ (
+ CFrame &
+ frame ,
+
+
+
+
+ CCoord
+ width ,
+
+
+
+
+ CCoord
+ height
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Create a pixmap with a given size.
+
+
+
+
+
+
+
+
+
+
+ CBitmap::~CBitmap
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ CBitmap::CBitmap
+ (
+
+ )
+ [protected]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CBitmap::dispose
+ (
+
+ )
+ [protected, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CBitmap::draw
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CRect &
+ rect ,
+
+
+
+
+ const CPoint &
+ offset = CPoint (0, 0)
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+Draw the pixmap using a given rect as output position and a given offset of its source pixmap.
+
+
+
+
+
+
+
+
+
+
+ void CBitmap::drawAlphaBlend
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CRect &
+ rect ,
+
+
+
+
+ const CPoint &
+ offset = CPoint (0, 0),
+
+
+
+
+ unsigned char
+ alpha = 128
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+Same as CBitmap::draw except that it uses the alpha value to draw the bitmap alpha blended.
+
+
+
+
+
+
+
+
+
+
+ void CBitmap::drawTransparent
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CRect &
+ rect ,
+
+
+
+
+ const CPoint &
+ offset = CPoint (0, 0)
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void * CBitmap::getHandle
+ (
+
+ )
+ const
+
+
+
+
+
+
+
+
+
+
+
+
+ CCoord CBitmap::getHeight
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CBitmap::getNoAlpha
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor CBitmap::getTransparentColor
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CCoord CBitmap::getWidth
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CBitmap::isLoaded
+ (
+
+ )
+ const
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CBitmap::loadFromPath
+ (
+ const void *
+ platformPath
+ )
+ [protected, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CBitmap::loadFromResource
+ (
+ long
+ resourceID
+ )
+ [protected, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CBitmap::setNoAlpha
+ (
+ bool
+ state
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CBitmap::setTransparencyMask
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ offset = CPoint (0, 0)
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void CBitmap::setTransparentColor
+ (
+ const CColor
+ color
+ )
+
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_bitmap.png b/vstgui.sf/vstgui/Documentation/html/class_c_bitmap.png
new file mode 100644
index 0000000..7ccc8d0
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_bitmap.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_c_view-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_c_view-members.html
new file mode 100644
index 0000000..f6fac7d
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_c_view-members.html
@@ -0,0 +1,45 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CCView Member List This is the complete list of members for CCView , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_c_view.html b/vstgui.sf/vstgui/Documentation/html/class_c_c_view.html
new file mode 100644
index 0000000..6ffe37c
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_c_view.html
@@ -0,0 +1,184 @@
+
+
+VSTGUI: CCView Class Reference
+
+
+
+
+
+
+CCView Class Reference #include <vstgui.h>
+
+List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CCView::CCView
+ (
+ CView *
+ pView
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CCView::~CCView
+ (
+
+ )
+
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_control-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_control-members.html
new file mode 100644
index 0000000..cdaee37
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_control-members.html
@@ -0,0 +1,144 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CControl Member List This is the complete list of members for CControl , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *pContext)=0CControl [pure virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CView [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_control.html b/vstgui.sf/vstgui/Documentation/html/class_c_control.html
new file mode 100644
index 0000000..bbed088
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_control.html
@@ -0,0 +1,1265 @@
+
+
+VSTGUI: CControl Class Reference
+
+
+
+
+
+
+CControl Class Reference base class of all VSTGUI controls
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CControl:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+List of all members.
+Detailed Description
+base class of all VSTGUI controls
+
+This object manages the tag identification and the value of a control object.
+Note: Since version 2.1, when an object uses the transparency for its background and draws on it (tranparency area) or the transparency area changes during different draws (CMovieBitmap ,...), the background will be false (not updated), you have to rewrite the draw function in order to redraw the background and then call the draw of the object.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CControl::CControl
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener = 0,
+
+
+
+
+ long
+ tag = 0,
+
+
+
+
+ CBitmap *
+ pBackground = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CControl::~CControl
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CControl::beginEdit
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CControl::bounceValue
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CControl::checkDefaultValue
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ long
+ button
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CControl::copyBackOffset
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CControl::doIdleStuff
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CControl::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [pure virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Reimplemented from CView .
+
+Implemented in CScrollbar , CTabButton , COnOffButton , CParamDisplay , CTextLabel , CTextEdit , COptionMenu , CKnob , CAnimKnob , CVerticalSwitch , CHorizontalSwitch , CRockerSwitch , CMovieBitmap , CMovieButton , CAutoAnimation , CSlider , CSpecialDigit , CKickButton , CSplashScreen , and CVuMeter .
+
+
+
+
+
+
+
+
+ void CControl::endEdit
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual float CControl::getDefaultValue
+ (
+ void
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual float CControl::getMax
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual float CControl::getMin
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual float CControl::getOldValue
+ (
+ void
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual long CControl::getTag
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual float CControl::getValue
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual float CControl::getWheelInc
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CControl::isDirty
+ (
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+check if view is dirty
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CAnimKnob .
+
+
+
+
+
+
+
+
+ bool CControl::isDoubleClick
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void CControl::setBackOffset
+ (
+ CPoint &
+ offset
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CControl::setDefaultValue
+ (
+ float
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CControl::setDirty
+ (
+ const bool
+ val = true
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the view to dirty so that it is redrawn in the next idle. Thread Safe !
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CVuMeter .
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CControl::setMax
+ (
+ float
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CControl::setMin
+ (
+ float
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CControl::setOldValue
+ (
+ float
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CControl::setTag
+ (
+ long
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CControl::setValue
+ (
+ float
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CControl::setWheelInc
+ (
+ float
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_control.png b/vstgui.sf/vstgui/Documentation/html/class_c_control.png
new file mode 100644
index 0000000..0f93b22
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_control.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_control_listener-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_control_listener-members.html
new file mode 100644
index 0000000..66e7ef2
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_control_listener-members.html
@@ -0,0 +1,42 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CControlListener Member List This is the complete list of members for CControlListener , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_control_listener.html b/vstgui.sf/vstgui/Documentation/html/class_c_control_listener.html
new file mode 100644
index 0000000..93ae9af
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_control_listener.html
@@ -0,0 +1,140 @@
+
+
+VSTGUI: CControlListener Class Reference
+
+
+
+
+
+
+CControlListener Class Reference #include <vstcontrols.h>
+
+
Inheritance diagram for CControlListener:
+
+
+
+
+
+List of all members.
+Member Function Documentation
+
+
+
+
+
+
+ virtual long CControlListener::controlModifierClicked
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CControl *
+ pControl ,
+
+
+
+
+ long
+ button
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CControlListener::valueChanged
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CControl *
+ pControl
+
+
+
+ )
+ [pure virtual]
+
+
+
+
+
+
+ The documentation for this class was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_control_listener.png b/vstgui.sf/vstgui/Documentation/html/class_c_control_listener.png
new file mode 100644
index 0000000..aba9e21
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_control_listener.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_drag_container-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_drag_container-members.html
new file mode 100644
index 0000000..cf8432d
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_drag_container-members.html
@@ -0,0 +1,58 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CDragContainer Member List This is the complete list of members for CDragContainer , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_drag_container.html b/vstgui.sf/vstgui/Documentation/html/class_c_drag_container.html
new file mode 100644
index 0000000..5443c0a
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_drag_container.html
@@ -0,0 +1,398 @@
+
+
+VSTGUI: CDragContainer Class Reference
+
+
+
+
+
+
+CDragContainer Class Reference #include <vstgui.h>
+
+
Inheritance diagram for CDragContainer:
+
+
+
+
+List of all members.
+Member Enumeration Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kFile
+
+ kText
+
+ kUnknown
+
+
+
+
+
+
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CDragContainer::CDragContainer
+ (
+ void *
+ platformDrag
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CDragContainer::~CDragContainer
+ (
+
+ )
+
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void * CDragContainer::first
+ (
+ long &
+ size ,
+
+
+
+
+ long &
+ type
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+returns pointer on a char array if type is known
+
+
+
+
+
+
+
+
+
+
+ long CDragContainer::getCount
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ long CDragContainer::getType
+ (
+ long
+ idx
+ )
+ const
+
+
+
+
+
+
+
+
+
+
+
+
+ void * CDragContainer::next
+ (
+ long &
+ size ,
+
+
+
+
+ long &
+ type
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+returns pointer on a char array if type is known
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_drag_container.png b/vstgui.sf/vstgui/Documentation/html/class_c_drag_container.png
new file mode 100644
index 0000000..93c608f
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_drag_container.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_draw_context-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_draw_context-members.html
new file mode 100644
index 0000000..7e2f9c1
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_draw_context-members.html
@@ -0,0 +1,110 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CDrawContext Member List This is the complete list of members for CDrawContext , including all inherited members.
+ CBitmap classCDrawContext [friend]
+ CDrawContext (CFrame *pFrame, void *pSystemContext, void *pWindow=0)CDrawContext
+ clipRect CDrawContext [protected]
+ COffscreenContext classCDrawContext [friend]
+ CReferenceCounter ()CReferenceCounter [inline]
+ drawArc (const CRect &rect, const float startAngle1, const float endAngle2, const CDrawStyle drawStyle=kDrawStroked)CDrawContext
+ drawArc (const CRect &rect, const CPoint &point1, const CPoint &point2)CDrawContext
+ drawEllipse (const CRect &rect, const CDrawStyle drawStyle=kDrawStroked)CDrawContext
+ drawLines (const CPoint *points, const long &numberOfLines)CDrawContext
+ drawMode CDrawContext [protected]
+ drawPoint (const CPoint &point, CColor color)CDrawContext
+ drawPolygon (const CPoint *pPoints, long numberOfPoints, const CDrawStyle drawStyle=kDrawStroked)CDrawContext
+ drawRect (const CRect &rect, const CDrawStyle drawStyle=kDrawStroked)CDrawContext
+ drawString (const char *pString, const CRect &rect, const short opaque=false, const CHoriTxtAlign hAlign=kCenterText)CDrawContext
+ fillArc (const CRect &rect, const CPoint &point1, const CPoint &point2)CDrawContext
+ fillColor CDrawContext [protected]
+ fillEllipse (const CRect &rect)CDrawContext
+ fillPolygon (const CPoint *pPoint, long numberOfPoints)CDrawContext
+ fillRect (const CRect &rect)CDrawContext
+ floodFill (const CPoint &start)CDrawContext
+ fontColor CDrawContext [protected]
+ fontId CDrawContext [protected]
+ fontSize CDrawContext [protected]
+ fontStyle CDrawContext [protected]
+ forget ()CDrawContext [virtual]
+ frameColor CDrawContext [protected]
+ frameWidth CDrawContext [protected]
+ getClipRect (CRect &clip) const CDrawContext [inline]
+ getDrawMode () const CDrawContext [inline]
+ getFillColor () const CDrawContext [inline]
+ getFont () const CDrawContext [inline]
+ getFontColor () const CDrawContext [inline]
+ getFontSize () const CDrawContext [inline]
+ getFrame () const CDrawContext [inline]
+ getFrameColor () const CDrawContext [inline]
+ getLineStyle () const CDrawContext [inline]
+ getLineWidth () const CDrawContext [inline]
+ getLoc (CPoint &where) const CDrawContext [inline]
+ getMouseButtons ()CDrawContext
+ getMouseLocation (CPoint &point)CDrawContext
+ getNbReference () const CReferenceCounter [inline]
+ getPoint (const CPoint &point)CDrawContext
+ getStringWidth (const char *pStr)CDrawContext
+ getSystemContext () const CDrawContext [inline]
+ getWindow ()CDrawContext [inline]
+ lineStyle CDrawContext [protected]
+ lineTo (const CPoint &point)CDrawContext
+ moveTo (const CPoint &point)CDrawContext
+ offset CDrawContext
+ offsetScreen CDrawContext
+ penLoc CDrawContext [protected]
+ pFrame CDrawContext [protected]
+ polyLine (const CPoint *pPoint, long numberOfPoints)CDrawContext
+ pSystemContext CDrawContext [protected]
+ pWindow CDrawContext [protected]
+ remember ()CReferenceCounter [inline, virtual]
+ resetClipRect ()CDrawContext
+ setClipRect (const CRect &clip)CDrawContext
+ setDrawMode (CDrawMode mode)CDrawContext
+ setFillColor (const CColor color)CDrawContext
+ setFont (CFont fontID, const long size=0, long style=0)CDrawContext
+ setFontColor (const CColor color)CDrawContext
+ setFrameColor (const CColor color)CDrawContext
+ setLineStyle (CLineStyle style)CDrawContext
+ setLineWidth (CCoord width)CDrawContext
+ setWindow (void *ptr)CDrawContext [inline]
+ waitDoubleClick ()CDrawContext
+ waitDrag ()CDrawContext
+ ~CDrawContext ()CDrawContext [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_draw_context.html b/vstgui.sf/vstgui/Documentation/html/class_c_draw_context.html
new file mode 100644
index 0000000..f59a6e6
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_draw_context.html
@@ -0,0 +1,2235 @@
+
+
+VSTGUI: CDrawContext Class Reference
+
+
+
+
+
+
+CDrawContext Class Reference A drawing context encapsulates the drawing context of the underlying OS. It implements the drawing functions.
+More...
+
+#include <vstgui.h>
+
+
Inheritance diagram for CDrawContext:
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CDrawContext (CFrame *pFrame , void *pSystemContext , void *pWindow =0)
+
+virtual ~CDrawContext ()
+
+void moveTo (const CPoint &point)
+
+ move line position to point
+void lineTo (const CPoint &point)
+
+ draw a line from current position to point
+void drawLines (const CPoint *points, const long &numberOfLines)
+
+ draw multiple lines at once
+void drawPolygon (const CPoint *pPoints, long numberOfPoints, const CDrawStyle drawStyle=kDrawStroked)
+
+ draw a polygon
+void polyLine (const CPoint *pPoint, long numberOfPoints)
+
+ draw a stroked polygon
+void fillPolygon (const CPoint *pPoint, long numberOfPoints)
+
+ draw a filled polygon
+void drawRect (const CRect &rect, const CDrawStyle drawStyle=kDrawStroked)
+
+ draw a stroked rect
+void fillRect (const CRect &rect)
+
+ draw a filled rect
+void drawArc (const CRect &rect, const float startAngle1, const float endAngle2, const CDrawStyle drawStyle=kDrawStroked)
+
+ draw a stroked arc, where the angles are in degree
+void drawArc (const CRect &rect, const CPoint &point1, const CPoint &point2)
+
+ draw a stroked arc between point1 and point2
+void fillArc (const CRect &rect, const CPoint &point1, const CPoint &point2)
+
+ draw a filled arc between point1 and point2
+void drawEllipse (const CRect &rect, const CDrawStyle drawStyle=kDrawStroked)
+
+ draw an ellipse
+void fillEllipse (const CRect &rect)
+
+ draw a filled ellipse
+void drawPoint (const CPoint &point, CColor color)
+
+ draw a point
+CColor getPoint (const CPoint &point)
+
+void floodFill (const CPoint &start)
+
+void setLineStyle (CLineStyle style)
+
+ set the current line style
+CLineStyle getLineStyle () const
+
+ get the current line style
+void setLineWidth (CCoord width)
+
+ set the current line width
+CCoord getLineWidth () const
+
+ get the current line width
+void setDrawMode (CDrawMode mode)
+
+ set the current draw mode, see CDrawMode
+CDrawMode getDrawMode () const
+
+ get the current draw mode, see CDrawMode
+void setClipRect (const CRect &clip)
+
+ set the current clip
+CRect & getClipRect (CRect &clip) const
+
+ get the current clip
+void resetClipRect ()
+
+ reset the clip to the default state
+void setFillColor (const CColor color)
+
+ set current fill color
+CColor getFillColor () const
+
+ get current fill color
+void setFrameColor (const CColor color)
+
+ set current stroke color
+CColor getFrameColor () const
+
+ get current stroke color
+void setFontColor (const CColor color)
+
+ set current font color
+CColor getFontColor () const
+
+ get current font color
+void setFont (CFont fontID, const long size=0, long style=0)
+
+ set current font
+CFont getFont () const
+
+ get current font
+long getFontSize () const
+
+ get current font size
+CCoord getStringWidth (const char *pStr)
+
+ get the width of a string
+void drawString (const char *pString, const CRect &rect, const short opaque=false, const CHoriTxtAlign hAlign=kCenterText)
+
+ draw a string
+long getMouseButtons ()
+
+ get current mouse buttons
+void getMouseLocation (CPoint &point)
+
+ get current mouse location. should not be used, see CView::getMouseLocation
+bool waitDoubleClick ()
+
+ check if another mouse click occurs in the near future
+bool waitDrag ()
+
+ check if the mouse will be dragged
+void * getWindow ()
+
+void setWindow (void *ptr)
+
+void getLoc (CPoint &where) const
+
+CFrame * getFrame () const
+
+void * getSystemContext () const
+
+virtual void forget ()
+
+Public Attributes
+CPoint offsetScreen
+
+CPoint offset
+
+Protected Attributes
+void * pSystemContext
+
+void * pWindow
+
+CFrame * pFrame
+
+long fontSize
+
+long fontStyle
+
+CFont fontId
+
+CColor fontColor
+
+CPoint penLoc
+
+CCoord frameWidth
+
+CColor frameColor
+
+CColor fillColor
+
+CLineStyle lineStyle
+
+CDrawMode drawMode
+
+CRect clipRect
+
+Friends
+class CBitmap
+
+class COffscreenContext
+
+
+Detailed Description
+A drawing context encapsulates the drawing context of the underlying OS. It implements the drawing functions.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CDrawContext::CDrawContext
+ (
+ CFrame *
+ inFrame ,
+
+
+
+
+ void *
+ inSystemContext ,
+
+
+
+
+ void *
+ inWindow = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+CDrawContext constructor.
Parameters:
+
+ inFrame the parent CFrame
+ inSystemContext the platform system context, can be NULL
+ inWindow the platform window object
+
+
+
+
+
+
+
+
+
+
+
+ CDrawContext::~CDrawContext
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CDrawContext::drawArc
+ (
+ const CRect &
+ rect ,
+
+
+
+
+ const CPoint &
+ point1 ,
+
+
+
+
+ const CPoint &
+ point2
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a stroked arc between point1 and point2
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::drawArc
+ (
+ const CRect &
+ rect ,
+
+
+
+
+ const float
+ startAngle1 ,
+
+
+
+
+ const float
+ endAngle2 ,
+
+
+
+
+ const CDrawStyle
+ drawStyle = kDrawStroked
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a stroked arc, where the angles are in degree
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::drawEllipse
+ (
+ const CRect &
+ rect ,
+
+
+
+
+ const CDrawStyle
+ drawStyle = kDrawStroked
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw an ellipse
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::drawLines
+ (
+ const CPoint *
+ points ,
+
+
+
+
+ const long &
+ numberOfLines
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw multiple lines at once
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::drawPoint
+ (
+ const CPoint &
+ point ,
+
+
+
+
+ CColor
+ color
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a point
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::drawPolygon
+ (
+ const CPoint *
+ pPoints ,
+
+
+
+
+ long
+ numberOfPoints ,
+
+
+
+
+ const CDrawStyle
+ drawStyle = kDrawStroked
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a polygon
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::drawRect
+ (
+ const CRect &
+ rect ,
+
+
+
+
+ const CDrawStyle
+ drawStyle = kDrawStroked
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a stroked rect
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::drawString
+ (
+ const char *
+ pString ,
+
+
+
+
+ const CRect &
+ rect ,
+
+
+
+
+ const short
+ opaque = false,
+
+
+
+
+ const CHoriTxtAlign
+ hAlign = kCenterText
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a string
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::fillArc
+ (
+ const CRect &
+ rect ,
+
+
+
+
+ const CPoint &
+ point1 ,
+
+
+
+
+ const CPoint &
+ point2
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a filled arc between point1 and point2
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::fillEllipse
+ (
+ const CRect &
+ rect
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a filled ellipse
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::fillPolygon
+ (
+ const CPoint *
+ pPoint ,
+
+
+
+
+ long
+ numberOfPoints
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a filled polygon
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::fillRect
+ (
+ const CRect &
+ rect
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a filled rect
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::floodFill
+ (
+ const CPoint &
+ start
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::forget
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ CRect & CDrawContext::getClipRect
+ (
+ CRect &
+ clip
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the current clip
+
+
+
+
+
+
+
+
+
+
+ CDrawMode CDrawContext::getDrawMode
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the current draw mode, see CDrawMode
+
+
+
+
+
+
+
+
+
+
+ CColor CDrawContext::getFillColor
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get current fill color
+
+
+
+
+
+
+
+
+
+
+ CFont CDrawContext::getFont
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get current font
+
+
+
+
+
+
+
+
+
+
+ CColor CDrawContext::getFontColor
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get current font color
+
+
+
+
+
+
+
+
+
+
+ long CDrawContext::getFontSize
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get current font size
+
+
+
+
+
+
+
+
+
+
+ CFrame * CDrawContext::getFrame
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor CDrawContext::getFrameColor
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get current stroke color
+
+
+
+
+
+
+
+
+
+
+ CLineStyle CDrawContext::getLineStyle
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the current line style
+
+
+
+
+
+
+
+
+
+
+ CCoord CDrawContext::getLineWidth
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the current line width
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::getLoc
+ (
+ CPoint &
+ where
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ long CDrawContext::getMouseButtons
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+get current mouse buttons
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::getMouseLocation
+ (
+ CPoint &
+ point
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor CDrawContext::getPoint
+ (
+ const CPoint &
+ point
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CCoord CDrawContext::getStringWidth
+ (
+ const char *
+ pStr
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the width of a string
+
+
+
+
+
+
+
+
+
+
+ void* CDrawContext::getSystemContext
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void* CDrawContext::getWindow
+ (
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::lineTo
+ (
+ const CPoint &
+ point
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a line from current position to point
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::moveTo
+ (
+ const CPoint &
+ point
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+move line position to point
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::polyLine
+ (
+ const CPoint *
+ pPoint ,
+
+
+
+
+ long
+ numberOfPoints
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw a stroked polygon
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::resetClipRect
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+reset the clip to the default state
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::setClipRect
+ (
+ const CRect &
+ clip
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the current clip
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::setDrawMode
+ (
+ CDrawMode
+ mode
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the current draw mode, see CDrawMode
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::setFillColor
+ (
+ const CColor
+ color
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set current fill color
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::setFont
+ (
+ CFont
+ fontID ,
+
+
+
+
+ const long
+ size = 0,
+
+
+
+
+ long
+ style = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set current font
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::setFontColor
+ (
+ const CColor
+ color
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set current font color
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::setFrameColor
+ (
+ const CColor
+ color
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set current stroke color
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::setLineStyle
+ (
+ CLineStyle
+ style
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the current line style
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::setLineWidth
+ (
+ CCoord
+ width
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the current line width
+
+
+
+
+
+
+
+
+
+
+ void CDrawContext::setWindow
+ (
+ void *
+ ptr
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CDrawContext::waitDoubleClick
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+check if another mouse click occurs in the near future
+
+
+
+
+
+
+
+
+
+
+ bool CDrawContext::waitDrag
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+check if the mouse will be dragged
+
+
+
+
+Friends And Related Function Documentation
+
+
+
+
+
+
+ friend class CBitmap [friend]
+
+
+
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_draw_context.png b/vstgui.sf/vstgui/Documentation/html/class_c_draw_context.png
new file mode 100644
index 0000000..343e535
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_draw_context.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_file_selector-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_file_selector-members.html
new file mode 100644
index 0000000..3cf19e7
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_file_selector-members.html
@@ -0,0 +1,45 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CFileSelector Member List This is the complete list of members for CFileSelector , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_file_selector.html b/vstgui.sf/vstgui/Documentation/html/class_c_file_selector.html
new file mode 100644
index 0000000..8504ec2
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_file_selector.html
@@ -0,0 +1,190 @@
+
+
+VSTGUI: CFileSelector Class Reference
+
+
+
+
+
+
+CFileSelector Class Reference #include <cfileselector.h>
+
+List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ BEGIN_NAMESPACE_VSTGUI CFileSelector::CFileSelector
+ (
+ void *
+ ptr
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CFileSelector::~CFileSelector
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ long CFileSelector::run
+ (
+ VstFileSelect *
+ vstFileSelect
+ )
+
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_frame-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_frame-members.html
new file mode 100644
index 0000000..43778c4
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_frame-members.html
@@ -0,0 +1,184 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CFrame Member List This is the complete list of members for CFrame , including all inherited members.
+ addView (CView *pView)CViewContainer [virtual]
+ addView (CView *pView, CRect &mouseableArea, bool mouseEnabled=true)CViewContainer [virtual]
+ advanceNextFocusView (CView *oldFocus, bool reverse=false)CFrame [virtual]
+ attached (CView *view)CViewContainer [virtual]
+ backgroundColor CViewContainer [protected]
+ backgroundOffset CViewContainer [protected]
+ bDirty CView [protected]
+ bDrawInOffscreen CViewContainer [protected]
+ bDropActive CFrame [protected]
+ beginEdit (long index)CFrame [virtual]
+ bFirstDraw CFrame [protected]
+ bMouseEnabled CView [protected]
+ bOpenFlag CFrame [protected]
+ bTransparencyEnabled CView [protected]
+ bUpdatesDisabled CFrame [protected]
+ bWantsFocus CView [protected]
+ CControl classCView [friend]
+ CFrame (const CRect &size, void *pSystemWindow, void *pEditor)CFrame
+ CFrame (const CRect &size, const char *pTitle, void *pEditor, const long style=0)CFrame
+ CViewContainer::CFrame classCView [friend]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ close ()CFrame [virtual]
+ createDrawContext ()CFrame
+ CReferenceCounter ()CReferenceCounter [inline]
+ currentDragView CViewContainer [protected]
+ CView (const CRect &size)CView
+ CViewContainer (const CRect &size, CFrame *pParent, CBitmap *pBackground=0)CViewContainer
+ CView::CViewContainer classCView [friend]
+ doIdleStuff ()CFrame [virtual]
+ draw (CDrawContext *pContext)CFrame [virtual]
+ draw (CView *pView=0)CFrame [virtual]
+ drawBackgroundRect (CDrawContext *pContext, CRect &_updateRect)CViewContainer [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CFrame [virtual]
+ endEdit (long index)CFrame [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CViewContainer [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getBackgroundColor () const CViewContainer [inline, virtual]
+ getBackgroundOffset () const CViewContainer [inline, virtual]
+ getCurrentLocation (CPoint &where)CFrame [virtual]
+ getCurrentView () const CFrame [virtual]
+ getEditor () const CFrame [inline, virtual]
+ getFocusView () const CFrame [inline, virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getKnobMode () const CFrame [virtual]
+ getModalView () const CFrame [inline, virtual]
+ getMode () const CViewContainer [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getNbViews () const CViewContainer [virtual]
+ getOpenFlag () const CFrame [inline, virtual]
+ getParentSystemWindow () const CFrame [inline]
+ getParentView () const CView [inline]
+ getPosition (CCoord &x, CCoord &y) const CFrame [virtual]
+ getSize (CRect *pSize) const CFrame [virtual]
+ getSize (CRect &pSize) const CFrame [virtual]
+ getSystemWindow () const CFrame [inline]
+ getTicks () const CFrame [virtual]
+ getTransparency () const CView [inline, virtual]
+ getView (long index) const CViewContainer [virtual]
+ getViewAt (const CPoint &where, bool deep=false) const CViewContainer [virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CViewContainer [virtual]
+ hitTestSubViews (const CPoint &where, const long buttons=-1)CViewContainer [protected]
+ idle ()CFrame [virtual]
+ initFrame (void *pSystemWin)CFrame [protected]
+ invalidate (const CRect &rect)CFrame [virtual]
+ isChild (CView *pView) const CViewContainer [virtual]
+ isDirty () const CViewContainer [virtual]
+ isDropActive () const CFrame [inline, virtual]
+ isOpen () const CFrame [inline, virtual]
+ isTypeOf (const char *s) const CView [inline, virtual]
+ kNormalUpdate enum valueCViewContainer
+ kOnlyDirtyUpdate enum valueCViewContainer
+ localToFrame (CPoint &point) const CViewContainer [virtual]
+ looseFocus (CDrawContext *pContext=0)CViewContainer [virtual]
+ mode CViewContainer [protected]
+ modifyDrawContext (CCoord save[4], CDrawContext *pContext)CViewContainer
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CFrame [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CViewContainer [virtual]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onKeyDown (VstKeyCode &keyCode)CFrame [virtual]
+ onKeyUp (VstKeyCode &keyCode)CFrame [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CFrame [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CFrame [virtual]
+ open (CPoint *pPoint=0)CFrame [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pEditor CFrame [protected]
+ pFirstView CViewContainer [protected]
+ pFocusView CFrame [protected]
+ pLastView CViewContainer [protected]
+ pModalView CFrame [protected]
+ pOffscreenContext CViewContainer [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ pSystemWindow CFrame [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CViewContainer [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removeAll (const bool &withForget=true)CViewContainer [virtual]
+ removed (CView *parent)CViewContainer [virtual]
+ removeView (CView *pView, const bool &withForget=true)CViewContainer [virtual]
+ restoreDrawContext (CDrawContext *pContext, CCoord save[4])CViewContainer
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackgroundColor (const CColor color)CViewContainer [virtual]
+ setBackgroundOffset (const CPoint &p)CViewContainer [inline, virtual]
+ setCursor (CCursorType type)CFrame [virtual]
+ setDirty (const bool val=true)CView [inline, virtual]
+ setDropActive (bool val)CFrame [virtual]
+ setFocusView (CView *pView)CFrame [virtual]
+ setModalView (CView *pView)CFrame [virtual]
+ setMode (long val)CViewContainer [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOpenFlag (bool val)CFrame [inline, virtual]
+ setParentSystemWindow (void *val)CFrame [inline]
+ setPosition (CCoord x, CCoord y)CFrame [virtual]
+ setSize (CCoord width, CCoord height)CFrame [virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setViewSize (CRect &inRect)CFrame [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ size CView [protected]
+ takeFocus (CDrawContext *pContext=0)CViewContainer [virtual]
+ update (CDrawContext *pContext)CFrame [virtual]
+ updatesDisabled () const CFrame [inline, virtual]
+ updatesDisabled (bool state)CFrame [inline, virtual]
+ useOffscreen (bool b)CViewContainer [virtual]
+ wantsFocus () const CView [inline, virtual]
+ ~CFrame ()CFrame [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+ ~CViewContainer ()CViewContainer [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_frame.html b/vstgui.sf/vstgui/Documentation/html/class_c_frame.html
new file mode 100644
index 0000000..d8d4ba4
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_frame.html
@@ -0,0 +1,1886 @@
+
+
+VSTGUI: CFrame Class Reference
+
+
+
+
+
+
+CFrame Class Reference The CFrame is the parent container of all views.
+More...
+
+#include <vstgui.h>
+
+
Inheritance diagram for CFrame:
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CFrame (const CRect &size , void *pSystemWindow , void *pEditor )
+
+ CFrame (const CRect &size , const char *pTitle, void *pEditor , const long style=0)
+
+virtual ~CFrame ()
+
+virtual bool open (CPoint *pPoint=0)
+
+virtual bool close ()
+
+virtual bool isOpen () const
+
+virtual void idle ()
+
+virtual void doIdleStuff ()
+
+virtual unsigned long getTicks () const
+
+ get the current time (in ms)
+virtual long getKnobMode () const
+
+ get hosts knob mode
+virtual bool setPosition (CCoord x, CCoord y)
+
+virtual bool getPosition (CCoord &x, CCoord &y) const
+
+virtual bool setSize (CCoord width, CCoord height)
+
+virtual bool getSize (CRect *pSize) const
+
+virtual bool getSize (CRect &pSize) const
+
+virtual long setModalView (CView *pView)
+
+virtual CView * getModalView () const
+
+virtual void beginEdit (long index)
+
+virtual void endEdit (long index)
+
+virtual bool getCurrentLocation (CPoint &where)
+
+virtual void setCursor (CCursorType type)
+
+virtual void setFocusView (CView *pView)
+
+virtual CView * getFocusView () const
+
+virtual bool advanceNextFocusView (CView *oldFocus, bool reverse=false)
+
+virtual bool setDropActive (bool val)
+
+virtual bool isDropActive () const
+
+CDrawContext * createDrawContext ()
+
+virtual void setOpenFlag (bool val)
+
+virtual bool getOpenFlag () const
+
+virtual void invalidate (const CRect &rect)
+
+virtual bool updatesDisabled () const
+
+virtual bool updatesDisabled (bool state)
+
+void * getSystemWindow () const
+
+void * getParentSystemWindow () const
+
+void setParentSystemWindow (void *val)
+
+virtual void draw (CDrawContext *pContext)
+
+virtual void drawRect (CDrawContext *pContext, const CRect &updateRect)
+
+virtual void draw (CView *pView=0)
+
+virtual void mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)
+
+ called if a mouse click event occurs
+virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+
+ called if a mouse wheel event is happening over this view
+virtual bool onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)
+
+ called if a mouse wheel event is happening over this view
+virtual long onKeyDown (VstKeyCode &keyCode)
+
+ called if a key down event occurs and this view has focus
+virtual long onKeyUp (VstKeyCode &keyCode)
+
+ called if a key up event occurs and this view has focus
+virtual void update (CDrawContext *pContext)
+
+virtual void setViewSize (CRect &inRect)
+
+virtual CView * getCurrentView () const
+
+ get the current view under the mouse
+virtual void * getEditor () const
+
+Protected Member Functions
+bool initFrame (void *pSystemWin)
+
+Protected Attributes
+void * pEditor
+
+void * pSystemWindow
+
+CView * pModalView
+
+CView * pFocusView
+
+bool bFirstDraw
+
+bool bOpenFlag
+
+bool bDropActive
+
+bool bUpdatesDisabled
+
+
+Detailed Description
+The CFrame is the parent container of all views.
+
+It creates a platform dependend view object. On classic Mac OS it just draws into the provided window. On Mac OS X it is a ControlRef. On Windows it's a WS_CHILD Window.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CFrame::CFrame
+ (
+ const CRect &
+ size ,
+
+
+
+
+ void *
+ pSystemWindow ,
+
+
+
+
+ void *
+ pEditor
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CFrame::CFrame
+ (
+ const CRect &
+ size ,
+
+
+
+
+ const char *
+ pTitle ,
+
+
+
+
+ void *
+ pEditor ,
+
+
+
+
+ const long
+ style = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CFrame::~CFrame
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ bool CFrame::advanceNextFocusView
+ (
+ CView *
+ oldFocus ,
+
+
+
+
+ bool
+ reverse = false
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CFrame::beginEdit
+ (
+ long
+ index
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CFrame::close
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ CDrawContext * CFrame::createDrawContext
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void CFrame::doIdleStuff
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CFrame::draw
+ (
+ CView *
+ pView = 0
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CFrame::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Parameters:
+
+ pContext the context which to use to draw this container and its subviews
+
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ void CFrame::drawRect
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CRect &
+ updateRect
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Parameters:
+
+ pContext the context which to use to draw
+ _updateRect the area which to draw
+
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ void CFrame::endEdit
+ (
+ long
+ index
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CFrame::getCurrentLocation
+ (
+ CPoint &
+ where
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ CView * CFrame::getCurrentView
+ (
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the current view under the mouse
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ virtual void* CFrame::getEditor
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ virtual CView * CFrame::getFocusView
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ long CFrame::getKnobMode
+ (
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get hosts knob mode
+
+
+
+
+
+
+
+
+
+
+ virtual CView * CFrame::getModalView
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual bool CFrame::getOpenFlag
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void* CFrame::getParentSystemWindow
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CFrame::getPosition
+ (
+ CCoord &
+ x ,
+
+
+
+
+ CCoord &
+ y
+
+
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CFrame::getSize
+ (
+ CRect &
+ pSize
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CFrame::getSize
+ (
+ CRect *
+ pSize
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void* CFrame::getSystemWindow
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ unsigned long CFrame::getTicks
+ (
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the current time (in ms)
+
+
+
+
+
+
+
+
+
+
+ void CFrame::idle
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CFrame::initFrame
+ (
+ void *
+ pSystemWin
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CFrame::invalidate
+ (
+ const CRect &
+ rect
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual bool CFrame::isDropActive
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual bool CFrame::isOpen
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CFrame::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ buttons = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ long CFrame::onKeyDown
+ (
+ VstKeyCode &
+ keyCode
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a key down event occurs and this view has focus
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ long CFrame::onKeyUp
+ (
+ VstKeyCode &
+ keyCode
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a key up event occurs and this view has focus
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ bool CFrame::onWheel
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ where ,
+
+
+
+
+ const CMouseWheelAxis
+ axis ,
+
+
+
+
+ float
+ distance
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse wheel event is happening over this view
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ bool CFrame::onWheel
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ where ,
+
+
+
+
+ float
+ distance
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse wheel event is happening over this view
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ bool CFrame::open
+ (
+ CPoint *
+ pPoint = 0
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CFrame::setCursor
+ (
+ CCursorType
+ type
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CFrame::setDropActive
+ (
+ bool
+ val
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CFrame::setFocusView
+ (
+ CView *
+ pView
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ long CFrame::setModalView
+ (
+ CView *
+ pView
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CFrame::setOpenFlag
+ (
+ bool
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CFrame::setParentSystemWindow
+ (
+ void *
+ val
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CFrame::setPosition
+ (
+ CCoord
+ x ,
+
+
+
+
+ CCoord
+ y
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CFrame::setSize
+ (
+ CCoord
+ width ,
+
+
+
+
+ CCoord
+ height
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CFrame::setViewSize
+ (
+ CRect &
+ inRect
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Parameters:
+
+ rect the new size of the container
+
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ void CFrame::update
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual bool CFrame::updatesDisabled
+ (
+ bool
+ state
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual bool CFrame::updatesDisabled
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_frame.png b/vstgui.sf/vstgui/Documentation/html/class_c_frame.png
new file mode 100644
index 0000000..b826261
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_frame.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider-members.html
new file mode 100644
index 0000000..fe8cea8
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider-members.html
@@ -0,0 +1,173 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CHorizontalSlider Member List This is the complete list of members for CHorizontalSlider , including all inherited members.
+ attached (CView *parent)CSlider [virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ bDrawTransparentEnabled CSlider [protected]
+ beginEdit ()CControl [virtual]
+ bFreeClick CSlider [protected]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ CHorizontalSlider (const CRect &size, CControlListener *listener, long tag, long iMinPos, long iMaxPos, CBitmap *handle, CBitmap *background, CPoint &offset, const long style=kRight)CHorizontalSlider
+ CHorizontalSlider (const CRect &rect, CControlListener *listener, long tag, CPoint &offsetHandle, long rangeHandle, CBitmap *handle, CBitmap *background, CPoint &offset, const long style=kRight)CHorizontalSlider
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CSlider (const CRect &size, CControlListener *listener, long tag, long iMinPos, long iMaxPos, CBitmap *handle, CBitmap *background, CPoint &offset, const long style=kLeft|kHorizontal)CSlider
+ CSlider (const CRect &rect, CControlListener *listener, long tag, CPoint &offsetHandle, long rangeHandle, CBitmap *handle, CBitmap *background, CPoint &offset, const long style=kLeft|kHorizontal)CSlider
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CSlider [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getFreeClick () const CSlider [inline, virtual]
+ getHandle () const CSlider [inline, virtual]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ getZoomFactor () const CSlider [inline, virtual]
+ heightControl CSlider [protected]
+ heightOfSlider CSlider [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ maxTmp CSlider [protected]
+ minPos CSlider [protected]
+ minTmp CSlider [protected]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CSlider [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CSlider [protected]
+ offsetHandle CSlider [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CSlider [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CSlider [virtual]
+ CControl::onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pHandle CSlider [protected]
+ pOScreen CSlider [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ rangeHandle CSlider [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CSlider [virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setDrawTransparentHandle (bool val)CSlider [inline, virtual]
+ setFreeClick (bool val)CSlider [inline, virtual]
+ setHandle (CBitmap *pHandle)CSlider [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOffsetHandle (CPoint &val)CSlider [virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ setZoomFactor (float val)CSlider [inline, virtual]
+ size CView [protected]
+ style CSlider [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ widthControl CSlider [protected]
+ widthOfSlider CSlider [protected]
+ zoomFactor CSlider [protected]
+ ~CControl ()CControl [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CSlider ()CSlider [virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider.html b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider.html
new file mode 100644
index 0000000..9dd2cac
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider.html
@@ -0,0 +1,226 @@
+
+
+VSTGUI: CHorizontalSlider Class Reference
+
+
+
+
+
+
+CHorizontalSlider Class Reference a horizontal slider control
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CHorizontalSlider:
+
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CHorizontalSlider (const CRect &size , CControlListener *listener , long tag , long iMinPos, long iMaxPos, CBitmap *handle, CBitmap *background, CPoint &offset , const long style =kRight)
+
+ CHorizontalSlider (const CRect &rect, CControlListener *listener , long tag , CPoint &offsetHandle , long rangeHandle , CBitmap *handle, CBitmap *background, CPoint &offset , const long style =kRight)
+
+
+Detailed Description
+a horizontal slider control
+
+This is the horizontal slider. See CSlider .
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CHorizontalSlider::CHorizontalSlider
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ long
+ iMinPos ,
+
+
+
+
+ long
+ iMaxPos ,
+
+
+
+
+ CBitmap *
+ handle ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset ,
+
+
+
+
+ const long
+ style = kRight
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CHorizontalSlider::CHorizontalSlider
+ (
+ const CRect &
+ rect ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CPoint &
+ offsetHandle ,
+
+
+
+
+ long
+ rangeHandle ,
+
+
+
+
+ CBitmap *
+ handle ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset ,
+
+
+
+
+ const long
+ style = kRight
+
+
+
+ )
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider.png b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider.png
new file mode 100644
index 0000000..8eb091f
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_slider.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch-members.html
new file mode 100644
index 0000000..b1ad86f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch-members.html
@@ -0,0 +1,151 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CHorizontalSwitch Member List This is the complete list of members for CHorizontalSwitch , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ CHorizontalSwitch (const CRect &size, CControlListener *listener, long tag, CBitmap *background, CPoint &offset)CHorizontalSwitch
+ CHorizontalSwitch (const CRect &size, CControlListener *listener, long tag, long subPixmaps, CCoord heightOfOneImage, long iMaxPositions, CBitmap *background, CPoint &offset)CHorizontalSwitch
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CHorizontalSwitch [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ heightOfOneImage CHorizontalSwitch [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ iMaxPositions CHorizontalSwitch [protected]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CHorizontalSwitch [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CHorizontalSwitch [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ subPixmaps CHorizontalSwitch [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CHorizontalSwitch ()CHorizontalSwitch [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch.html b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch.html
new file mode 100644
index 0000000..a1ac33d
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch.html
@@ -0,0 +1,412 @@
+
+
+VSTGUI: CHorizontalSwitch Class Reference
+
+
+
+
+
+
+CHorizontalSwitch Class Reference a horizontal switch control
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CHorizontalSwitch:
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CHorizontalSwitch (const CRect &size , CControlListener *listener , long tag , CBitmap *background, CPoint &offset )
+
+ CHorizontalSwitch (const CRect &size , CControlListener *listener , long tag , long subPixmaps , CCoord heightOfOneImage , long iMaxPositions , CBitmap *background, CPoint &offset )
+
+virtual ~CHorizontalSwitch ()
+
+virtual void draw (CDrawContext *)
+
+ called if the view should draw itself
+virtual void mouse (CDrawContext *pContext, CPoint &where, long button=-1)
+
+ called if a mouse click event occurs
+Protected Attributes
+CPoint offset
+
+long subPixmaps
+
+long iMaxPositions
+
+CCoord heightOfOneImage
+
+
+Detailed Description
+a horizontal switch control
+
+Same as the CVerticalSwitch but horizontal.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CHorizontalSwitch::CHorizontalSwitch
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CHorizontalSwitch::CHorizontalSwitch
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ long
+ subPixmaps ,
+
+
+
+
+ CCoord
+ heightOfOneImage ,
+
+
+
+
+ long
+ iMaxPositions ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CHorizontalSwitch::~CHorizontalSwitch
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CHorizontalSwitch::draw
+ (
+ CDrawContext *
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+
+
+
+
+
+
+ void CHorizontalSwitch::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch.png b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch.png
new file mode 100644
index 0000000..b44cf10
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_horizontal_switch.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_kick_button-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_kick_button-members.html
new file mode 100644
index 0000000..7545bb5
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_kick_button-members.html
@@ -0,0 +1,149 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CKickButton Member List This is the complete list of members for CKickButton , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ CKickButton (const CRect &size, CControlListener *listener, long tag, CBitmap *background, CPoint &offset)CKickButton
+ CKickButton (const CRect &size, CControlListener *listener, long tag, CCoord heightOfOneImage, CBitmap *background, CPoint &offset)CKickButton
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CKickButton [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ heightOfOneImage CKickButton [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CKickButton [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CKickButton [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CKickButton ()CKickButton [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_kick_button.html b/vstgui.sf/vstgui/Documentation/html/class_c_kick_button.html
new file mode 100644
index 0000000..bf10704
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_kick_button.html
@@ -0,0 +1,345 @@
+
+
+VSTGUI: CKickButton Class Reference
+
+
+
+
+
+
+CKickButton Class Reference #include <vstcontrols.h>
+
+
Inheritance diagram for CKickButton:
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CKickButton (const CRect &size , CControlListener *listener , long tag , CBitmap *background, CPoint &offset )
+
+ CKickButton (const CRect &size , CControlListener *listener , long tag , CCoord heightOfOneImage , CBitmap *background, CPoint &offset )
+
+virtual ~CKickButton ()
+
+virtual void draw (CDrawContext *)
+
+ called if the view should draw itself
+virtual void mouse (CDrawContext *pContext, CPoint &where, long button=-1)
+
+ called if a mouse click event occurs
+Protected Attributes
+CPoint offset
+
+CCoord heightOfOneImage
+
+
+Detailed Description
+Define a button with 2 states using 2 subpixmaps. One click on it, then the second subpixmap is displayed. When the mouse button is relaxed, the first subpixmap is framed.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CKickButton::CKickButton
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CKickButton::CKickButton
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CCoord
+ heightOfOneImage ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CKickButton::~CKickButton
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CKickButton::draw
+ (
+ CDrawContext *
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+
+
+
+
+
+
+ void CKickButton::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+Member Data Documentation
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_kick_button.png b/vstgui.sf/vstgui/Documentation/html/class_c_kick_button.png
new file mode 100644
index 0000000..26b0a49
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_kick_button.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_knob-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_knob-members.html
new file mode 100644
index 0000000..b279b08
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_knob-members.html
@@ -0,0 +1,172 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CKnob Member List This is the complete list of members for CKnob , including all inherited members.
+ aCoef CKnob [protected]
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bCoef CKnob [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ CKnob (const CRect &size, CControlListener *listener, long tag, CBitmap *background, CBitmap *handle, const CPoint &offset)CKnob
+ colorHandle CKnob [protected]
+ colorShadowHandle CKnob [protected]
+ compute ()CKnob [protected]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *pContext)CKnob [virtual]
+ drawHandle (CDrawContext *pContext)CKnob [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getRangeAngle () const CKnob [inline, virtual]
+ getStartAngle () const CKnob [inline, virtual]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ getZoomFactor () const CKnob [inline, virtual]
+ halfAngle CKnob [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ inset CKnob [protected]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CKnob [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CKnob [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CKnob [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CKnob [virtual]
+ CControl::onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pHandle CKnob [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ radius CKnob [protected]
+ rangeAngle CKnob [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setColorHandle (CColor color)CKnob [virtual]
+ setColorShadowHandle (CColor color)CKnob [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setHandleBitmap (CBitmap *bitmap)CKnob [virtual]
+ setInsetValue (long val)CKnob [inline, virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setRangeAngle (float val)CKnob [virtual]
+ setStartAngle (float val)CKnob [virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ setZoomFactor (float val)CKnob [inline, virtual]
+ size CView [protected]
+ startAngle CKnob [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ valueFromPoint (CPoint &point) const CKnob [virtual]
+ valueToPoint (CPoint &point) const CKnob [virtual]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ zoomFactor CKnob [protected]
+ ~CControl ()CControl [virtual]
+ ~CKnob ()CKnob [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_knob.html b/vstgui.sf/vstgui/Documentation/html/class_c_knob.html
new file mode 100644
index 0000000..c5b6e7b
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_knob.html
@@ -0,0 +1,1048 @@
+
+
+VSTGUI: CKnob Class Reference
+
+
+
+
+
+
+CKnob Class Reference a knob control
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CKnob:
+
+
+
+
+
+
+
+List of all members.
+Detailed Description
+a knob control
+
+Define a knob with a given background and foreground handle. The handle describes a circle over the background (between -45deg and +225deg). By clicking Alt+Left Mouse the default value is used. By clicking Alt+Left Mouse the value changes with a vertical move (version 2.1)
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CKnob::CKnob
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CBitmap *
+ handle ,
+
+
+
+
+ const CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CKnob::~CKnob
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CKnob::compute
+ (
+
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CKnob::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+Reimplemented in CAnimKnob .
+
+
+
+
+
+
+
+
+ void CKnob::drawHandle
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual float CKnob::getRangeAngle
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual float CKnob::getStartAngle
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual float CKnob::getZoomFactor
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CKnob::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ long CKnob::onKeyDown
+ (
+ VstKeyCode &
+ keyCode
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a key down event occurs and this view has focus
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ bool CKnob::onWheel
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ where ,
+
+
+
+
+ float
+ distance
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse wheel event is happening over this view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CKnob::setColorHandle
+ (
+ CColor
+ color
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CKnob::setColorShadowHandle
+ (
+ CColor
+ color
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CKnob::setHandleBitmap
+ (
+ CBitmap *
+ bitmap
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CKnob::setInsetValue
+ (
+ long
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CKnob::setRangeAngle
+ (
+ float
+ val
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CKnob::setStartAngle
+ (
+ float
+ val
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CKnob::setZoomFactor
+ (
+ float
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ float CKnob::valueFromPoint
+ (
+ CPoint &
+ point
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CKnob::valueToPoint
+ (
+ CPoint &
+ point
+ )
+ const [virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_knob.png b/vstgui.sf/vstgui/Documentation/html/class_c_knob.png
new file mode 100644
index 0000000..e81b50d
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_knob.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap-members.html
new file mode 100644
index 0000000..91c85e8
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap-members.html
@@ -0,0 +1,150 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CMovieBitmap Member List This is the complete list of members for CMovieBitmap , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ CMovieBitmap (const CRect &size, CControlListener *listener, long tag, CBitmap *background, CPoint &offset)CMovieBitmap
+ CMovieBitmap (const CRect &size, CControlListener *listener, long tag, long subPixmaps, CCoord heightOfOneImage, CBitmap *background, CPoint &offset)CMovieBitmap
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CMovieBitmap [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ heightOfOneImage CMovieBitmap [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CView [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CMovieBitmap [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ subPixmaps CMovieBitmap [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CMovieBitmap ()CMovieBitmap [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap.html b/vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap.html
new file mode 100644
index 0000000..e676686
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap.html
@@ -0,0 +1,331 @@
+
+
+VSTGUI: CMovieBitmap Class Reference
+
+
+
+
+
+
+CMovieBitmap Class Reference a bitmap control that displays different bitmaps according to its current value
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CMovieBitmap:
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CMovieBitmap (const CRect &size , CControlListener *listener , long tag , CBitmap *background, CPoint &offset )
+
+ CMovieBitmap (const CRect &size , CControlListener *listener , long tag , long subPixmaps , CCoord heightOfOneImage , CBitmap *background, CPoint &offset )
+
+virtual ~CMovieBitmap ()
+
+virtual void draw (CDrawContext *)
+
+ called if the view should draw itself
+Protected Attributes
+CPoint offset
+
+long subPixmaps
+
+CCoord heightOfOneImage
+
+
+Detailed Description
+a bitmap control that displays different bitmaps according to its current value
+
+A movie pixmap allows to display different subpixmaps according to its current value.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CMovieBitmap::CMovieBitmap
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CMovieBitmap::CMovieBitmap
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ long
+ subPixmaps ,
+
+
+
+
+ CCoord
+ heightOfOneImage ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CMovieBitmap::~CMovieBitmap
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CMovieBitmap::draw
+ (
+ CDrawContext *
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap.png b/vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap.png
new file mode 100644
index 0000000..5016ef3
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_movie_bitmap.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_movie_button-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_movie_button-members.html
new file mode 100644
index 0000000..6ce3205
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_movie_button-members.html
@@ -0,0 +1,150 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CMovieButton Member List This is the complete list of members for CMovieButton , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ buttonState CMovieButton [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ CMovieButton (const CRect &size, CControlListener *listener, long tag, CBitmap *background, CPoint &offset)CMovieButton
+ CMovieButton (const CRect &size, CControlListener *listener, long tag, CCoord heightOfOneImage, CBitmap *background, CPoint &offset)CMovieButton
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CMovieButton [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ heightOfOneImage CMovieButton [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CMovieButton [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CMovieButton [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CMovieButton ()CMovieButton [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_movie_button.html b/vstgui.sf/vstgui/Documentation/html/class_c_movie_button.html
new file mode 100644
index 0000000..82790e0
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_movie_button.html
@@ -0,0 +1,375 @@
+
+
+VSTGUI: CMovieButton Class Reference
+
+
+
+
+
+
+CMovieButton Class Reference a bi-states button with 2 subbitmaps
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CMovieButton:
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CMovieButton (const CRect &size , CControlListener *listener , long tag , CBitmap *background, CPoint &offset )
+
+ CMovieButton (const CRect &size , CControlListener *listener , long tag , CCoord heightOfOneImage , CBitmap *background, CPoint &offset )
+
+virtual ~CMovieButton ()
+
+virtual void draw (CDrawContext *)
+
+ called if the view should draw itself
+virtual void mouse (CDrawContext *pContext, CPoint &where, long button=-1)
+
+ called if a mouse click event occurs
+Protected Attributes
+CPoint offset
+
+CCoord heightOfOneImage
+
+float buttonState
+
+
+Detailed Description
+a bi-states button with 2 subbitmaps
+
+A movie button is a bi-states button with 2 subpixmaps. These subpixmaps are stacked in the pixmap.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CMovieButton::CMovieButton
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CMovieButton::CMovieButton
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CCoord
+ heightOfOneImage ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CMovieButton::~CMovieButton
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CMovieButton::draw
+ (
+ CDrawContext *
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+
+
+
+
+
+
+ void CMovieButton::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_movie_button.png b/vstgui.sf/vstgui/Documentation/html/class_c_movie_button.png
new file mode 100644
index 0000000..fc56ca0
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_movie_button.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context-members.html
new file mode 100644
index 0000000..4905325
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context-members.html
@@ -0,0 +1,123 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+COffscreenContext Member List This is the complete list of members for COffscreenContext , including all inherited members.
+ backgroundColor COffscreenContext [protected]
+ bDestroyPixmap COffscreenContext [protected]
+ CBitmap classCDrawContext [friend]
+ CDrawContext (CFrame *pFrame, void *pSystemContext, void *pWindow=0)CDrawContext
+ clipRect CDrawContext [protected]
+ COffscreenContext (CDrawContext *pContext, CBitmap *pBitmap, bool drawInBitmap=false)COffscreenContext
+ COffscreenContext (CFrame *pFrame, long width, long height, const CColor backgroundColor=kBlackCColor)COffscreenContext
+ CDrawContext::COffscreenContext classCDrawContext [friend]
+ copyFrom (CDrawContext *pContext, CRect destRect, CPoint srcOffset=CPoint(0, 0))COffscreenContext
+ copyTo (CDrawContext *pContext, CRect &srcRect, CPoint destOffset=CPoint(0, 0))COffscreenContext
+ CReferenceCounter ()CReferenceCounter [inline]
+ drawArc (const CRect &rect, const float startAngle1, const float endAngle2, const CDrawStyle drawStyle=kDrawStroked)CDrawContext
+ drawArc (const CRect &rect, const CPoint &point1, const CPoint &point2)CDrawContext
+ drawEllipse (const CRect &rect, const CDrawStyle drawStyle=kDrawStroked)CDrawContext
+ drawLines (const CPoint *points, const long &numberOfLines)CDrawContext
+ drawMode CDrawContext [protected]
+ drawPoint (const CPoint &point, CColor color)CDrawContext
+ drawPolygon (const CPoint *pPoints, long numberOfPoints, const CDrawStyle drawStyle=kDrawStroked)CDrawContext
+ drawRect (const CRect &rect, const CDrawStyle drawStyle=kDrawStroked)CDrawContext
+ drawString (const char *pString, const CRect &rect, const short opaque=false, const CHoriTxtAlign hAlign=kCenterText)CDrawContext
+ fillArc (const CRect &rect, const CPoint &point1, const CPoint &point2)CDrawContext
+ fillColor CDrawContext [protected]
+ fillEllipse (const CRect &rect)CDrawContext
+ fillPolygon (const CPoint *pPoint, long numberOfPoints)CDrawContext
+ fillRect (const CRect &rect)CDrawContext
+ floodFill (const CPoint &start)CDrawContext
+ fontColor CDrawContext [protected]
+ fontId CDrawContext [protected]
+ fontSize CDrawContext [protected]
+ fontStyle CDrawContext [protected]
+ forget ()CDrawContext [virtual]
+ frameColor CDrawContext [protected]
+ frameWidth CDrawContext [protected]
+ getClipRect (CRect &clip) const CDrawContext [inline]
+ getDrawMode () const CDrawContext [inline]
+ getFillColor () const CDrawContext [inline]
+ getFont () const CDrawContext [inline]
+ getFontColor () const CDrawContext [inline]
+ getFontSize () const CDrawContext [inline]
+ getFrame () const CDrawContext [inline]
+ getFrameColor () const CDrawContext [inline]
+ getHeight () const COffscreenContext [inline]
+ getLineStyle () const CDrawContext [inline]
+ getLineWidth () const CDrawContext [inline]
+ getLoc (CPoint &where) const CDrawContext [inline]
+ getMouseButtons ()CDrawContext
+ getMouseLocation (CPoint &point)CDrawContext
+ getNbReference () const CReferenceCounter [inline]
+ getPoint (const CPoint &point)CDrawContext
+ getStringWidth (const char *pStr)CDrawContext
+ getSystemContext () const CDrawContext [inline]
+ getWidth () const COffscreenContext [inline]
+ getWindow ()CDrawContext [inline]
+ height COffscreenContext [protected]
+ lineStyle CDrawContext [protected]
+ lineTo (const CPoint &point)CDrawContext
+ moveTo (const CPoint &point)CDrawContext
+ offset CDrawContext
+ offsetScreen CDrawContext
+ pBitmap COffscreenContext [protected]
+ pBitmapBg COffscreenContext [protected]
+ penLoc CDrawContext [protected]
+ pFrame CDrawContext [protected]
+ polyLine (const CPoint *pPoint, long numberOfPoints)CDrawContext
+ pSystemContext CDrawContext [protected]
+ pWindow CDrawContext [protected]
+ remember ()CReferenceCounter [inline, virtual]
+ resetClipRect ()CDrawContext
+ setClipRect (const CRect &clip)CDrawContext
+ setDrawMode (CDrawMode mode)CDrawContext
+ setFillColor (const CColor color)CDrawContext
+ setFont (CFont fontID, const long size=0, long style=0)CDrawContext
+ setFontColor (const CColor color)CDrawContext
+ setFrameColor (const CColor color)CDrawContext
+ setLineStyle (CLineStyle style)CDrawContext
+ setLineWidth (CCoord width)CDrawContext
+ setWindow (void *ptr)CDrawContext [inline]
+ waitDoubleClick ()CDrawContext
+ waitDrag ()CDrawContext
+ width COffscreenContext [protected]
+ ~CDrawContext ()CDrawContext [virtual]
+ ~COffscreenContext ()COffscreenContext [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context.html b/vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context.html
new file mode 100644
index 0000000..4432d4c
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context.html
@@ -0,0 +1,492 @@
+
+
+VSTGUI: COffscreenContext Class Reference
+
+
+
+
+
+
+COffscreenContext Class Reference A drawing device which uses a pixmap as its drawing surface.
+More...
+
+#include <vstgui.h>
+
+
Inheritance diagram for COffscreenContext:
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ COffscreenContext (CDrawContext *pContext, CBitmap *pBitmap , bool drawInBitmap=false)
+
+ COffscreenContext (CFrame *pFrame , long width , long height , const CColor backgroundColor =kBlackCColor )
+
+virtual ~COffscreenContext ()
+
+void copyFrom (CDrawContext *pContext, CRect destRect, CPoint srcOffset=CPoint (0, 0))
+
+ copy from offscreen to pContext
+void copyTo (CDrawContext *pContext, CRect &srcRect, CPoint destOffset=CPoint (0, 0))
+
+ copy to offscreen from pContext
+CCoord getWidth () const
+
+CCoord getHeight () const
+
+Protected Attributes
+CBitmap * pBitmap
+
+CBitmap * pBitmapBg
+
+CCoord height
+
+CCoord width
+
+bool bDestroyPixmap
+
+CColor backgroundColor
+
+
+Detailed Description
+A drawing device which uses a pixmap as its drawing surface.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ COffscreenContext::COffscreenContext
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CBitmap *
+ pBitmap ,
+
+
+
+
+ bool
+ drawInBitmap = false
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ COffscreenContext::COffscreenContext
+ (
+ CFrame *
+ pFrame ,
+
+
+
+
+ long
+ width ,
+
+
+
+
+ long
+ height ,
+
+
+
+
+ const CColor
+ backgroundColor = kBlackCColor
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ COffscreenContext::~COffscreenContext
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void COffscreenContext::copyFrom
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CRect
+ destRect ,
+
+
+
+
+ CPoint
+ srcOffset = CPoint (0, 0)
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+copy from offscreen to pContext
+
+
+
+
+
+
+
+
+
+
+ void COffscreenContext::copyTo
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CRect &
+ srcRect ,
+
+
+
+
+ CPoint
+ destOffset = CPoint (0, 0)
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+copy to offscreen from pContext
+
+
+
+
+
+
+
+
+
+
+ CCoord COffscreenContext::getHeight
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CCoord COffscreenContext::getWidth
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context.png b/vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context.png
new file mode 100644
index 0000000..e1391f7
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_offscreen_context.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_on_off_button-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_on_off_button-members.html
new file mode 100644
index 0000000..fc21ce9
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_on_off_button-members.html
@@ -0,0 +1,151 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+COnOffButton Member List This is the complete list of members for COnOffButton , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ COnOffButton (const CRect &size, CControlListener *listener, long tag, CBitmap *background, long style=kPreListenerUpdate)COnOffButton
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)COnOffButton [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getStyle () const COnOffButton [inline, virtual]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ kPostListenerUpdate enum valueCOnOffButton
+ kPreListenerUpdate enum valueCOnOffButton
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)COnOffButton [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setStyle (long newStyle)COnOffButton [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ style COnOffButton [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~COnOffButton ()COnOffButton [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_on_off_button.html b/vstgui.sf/vstgui/Documentation/html/class_c_on_off_button.html
new file mode 100644
index 0000000..12fd296
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_on_off_button.html
@@ -0,0 +1,363 @@
+
+
+VSTGUI: COnOffButton Class Reference
+
+
+
+
+
+
+COnOffButton Class Reference a button control with 2 states
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for COnOffButton:
+
+
+
+
+
+
+
+List of all members.
+Detailed Description
+a button control with 2 states
+
+Define a button with 2 positions. The pixmap includes the 2 subpixmaps (i.e the rectangle used for the display of this button is half-height of the pixmap). When its value changes, the listener is called.
+
+
Member Enumeration Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kPreListenerUpdate
+listener will be called after doIdleStuff was called
+ kPostListenerUpdate
+listener will be called before doIdleStuff is called
+
+
+
+
+
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ COnOffButton::COnOffButton
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ long
+ style = kPreListenerUpdate
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ COnOffButton::~COnOffButton
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void COnOffButton::draw
+ (
+ CDrawContext *
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+Reimplemented in CTabButton .
+
+
+
+
+
+
+
+
+ virtual long COnOffButton::getStyle
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void COnOffButton::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CTabButton .
+
+
+
+
+
+
+
+
+ virtual void COnOffButton::setStyle
+ (
+ long
+ newStyle
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_on_off_button.png b/vstgui.sf/vstgui/Documentation/html/class_c_on_off_button.png
new file mode 100644
index 0000000..ddaeaeb
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_on_off_button.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_option_menu-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu-members.html
new file mode 100644
index 0000000..0ba08d1
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu-members.html
@@ -0,0 +1,225 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+COptionMenu Member List This is the complete list of members for COptionMenu , including all inherited members.
+ addEntry (COptionMenu *subMenu, char *txt)COptionMenu [virtual]
+ addEntry (char *txt, long index=-1)COptionMenu [virtual]
+ allocateMenu (long nb)COptionMenu [protected]
+ allocateSubMenu (long nb)COptionMenu [protected]
+ appendItems (long &offsetIdx)COptionMenu [protected]
+ attached (CView *view)CView [inline, virtual]
+ backColor CParamDisplay [protected]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bgWhenClick COptionMenu [protected]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTextTransparencyEnabled CParamDisplay [protected]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ check COptionMenu [protected]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkEntry (long index, bool state)COptionMenu [virtual]
+ checkEntryAlone (long index)COptionMenu [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ COptionMenu (const CRect &size, CControlListener *listener, long tag, CBitmap *background=0, CBitmap *bgWhenClick=0, const long style=0)COptionMenu
+ copyBackOffset ()CControl [virtual]
+ CParamDisplay (const CRect &size, CBitmap *background=0, const long style=0)CParamDisplay
+ CReferenceCounter ()CReferenceCounter [inline]
+ currentIndex COptionMenu [protected]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *pContext)COptionMenu [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ drawText (CDrawContext *pContext, char *string, CBitmap *newBack=0)CParamDisplay [protected]
+ endEdit ()CControl [virtual]
+ entry COptionMenu [protected]
+ fontColor CParamDisplay [protected]
+ fontID CParamDisplay [protected]
+ forget ()CReferenceCounter [inline, virtual]
+ frameColor CParamDisplay [protected]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackColor () const CParamDisplay [inline]
+ getBackground () const CView [inline, virtual]
+ getCurrent (char *txt=0, bool countSeparator=true) const COptionMenu [virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getEntry (long index, char *txt) const COptionMenu [virtual]
+ getFont () const CParamDisplay [inline]
+ getFontColor () const CParamDisplay [inline]
+ getFrame () const CView [inline]
+ getFrameColor () const CParamDisplay [inline]
+ getHeight () const CView [inline]
+ getIndex (char *txt) const COptionMenu [virtual]
+ getItemMenu (long idx, long &idxInMenu, long &offsetIdx)COptionMenu [protected]
+ getLastItemMenu (long &idxInMenu) const COptionMenu
+ getLastResult () const COptionMenu [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbEntries () const COptionMenu [inline, virtual]
+ getNbItemsPerColumn () const COptionMenu [inline, virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getScheme () const COptionMenu [inline, virtual]
+ getShadowColor () const CParamDisplay [inline]
+ getStyle () const CParamDisplay [inline]
+ getSubMenu (long idx) const COptionMenu
+ getTag () const CControl [inline, virtual]
+ getTextTransparency () const CParamDisplay [inline]
+ getTransparency () const CView [inline, virtual]
+ getTxtFace () const CParamDisplay [inline]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ horiTxtAlign CParamDisplay [protected]
+ isCheckEntry (long index) const COptionMenu [virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastButton COptionMenu [protected]
+ lastMenu COptionMenu [protected]
+ lastResult COptionMenu [protected]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)COptionMenu [virtual]
+ MAX_ENTRY enum valueCOptionMenu
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)COptionMenu [virtual]
+ mouseableArea CView [protected]
+ nbAllocated COptionMenu [protected]
+ nbEntries COptionMenu [protected]
+ nbItemsPerColumn COptionMenu [protected]
+ nbSubMenuAllocated COptionMenu [protected]
+ nbSubMenus COptionMenu [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ platformControl COptionMenu [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ prefixNumbers COptionMenu [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removeAllEntry ()COptionMenu [virtual]
+ removed (CView *parent)CView [inline, virtual]
+ removeEntry (long index)COptionMenu [virtual]
+ removeItems ()COptionMenu [protected]
+ scheme COptionMenu [protected]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackColor (CColor color)CParamDisplay [virtual]
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setCurrent (long index, bool countSeparator=true)COptionMenu [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setEntry (long index, char *txt)COptionMenu [virtual]
+ setFont (CFont fontID)CParamDisplay [virtual]
+ setFontColor (CColor color)CParamDisplay [virtual]
+ setFrameColor (CColor color)CParamDisplay [virtual]
+ setHoriAlign (CHoriTxtAlign hAlign)CParamDisplay [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setNbItemsPerColumn (long val)COptionMenu [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setPrefixNumbers (long preCount)COptionMenu [virtual]
+ setScheme (COptionMenuScheme *s)COptionMenu [inline]
+ setShadowColor (CColor color)CParamDisplay [virtual]
+ setString2FloatConvert (void(*convert)(char *string, float &output))CParamDisplay [virtual]
+ setStringConvert (void(*convert)(float value, char *string))CParamDisplay [virtual]
+ setStringConvert (void(*convert)(float value, char *string, void *userDta), void *userData)CParamDisplay [virtual]
+ setStyle (long val)CParamDisplay [virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTextTransparency (bool val)CParamDisplay [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setTxtFace (CTxtFace val)CParamDisplay [virtual]
+ setValue (float val)COptionMenu [virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ shadowColor CParamDisplay [protected]
+ size CView [protected]
+ string2FloatConvert CParamDisplay [protected]
+ stringConvert CParamDisplay [protected]
+ stringConvert2 CParamDisplay [protected]
+ style CParamDisplay [protected]
+ submenuEntry COptionMenu [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)COptionMenu [virtual]
+ txtFace CParamDisplay [protected]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ userData CParamDisplay [protected]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~COptionMenu ()COptionMenu [virtual]
+ ~CParamDisplay ()CParamDisplay [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_option_menu.html b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu.html
new file mode 100644
index 0000000..3e8fbd1
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu.html
@@ -0,0 +1,1633 @@
+
+
+VSTGUI: COptionMenu Class Reference
+
+
+
+
+
+
+COptionMenu Class Reference a popup menu control
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for COptionMenu:
+
+
+
+
+
+
+
+List of all members.
+
+Public Types
+enum { MAX_ENTRY = 1024
+ }
+
+Public Member Functions
+ COptionMenu (const CRect &size , CControlListener *listener , long tag , CBitmap *background=0, CBitmap *bgWhenClick =0, const long style =0)
+
+virtual ~COptionMenu ()
+
+virtual void setValue (float val)
+
+virtual bool addEntry (COptionMenu *subMenu, char *txt)
+
+virtual bool addEntry (char *txt, long index=-1)
+
+virtual long getCurrent (char *txt=0, bool countSeparator=true) const
+
+virtual bool setCurrent (long index, bool countSeparator=true)
+
+virtual bool getEntry (long index, char *txt) const
+
+virtual bool setEntry (long index, char *txt)
+
+virtual bool removeEntry (long index)
+
+virtual bool removeAllEntry ()
+
+virtual long getNbEntries () const
+
+virtual long getIndex (char *txt) const
+
+virtual bool checkEntry (long index, bool state)
+
+virtual bool checkEntryAlone (long index)
+
+virtual bool isCheckEntry (long index) const
+
+virtual void draw (CDrawContext *pContext)
+
+ called if the view should draw itself
+virtual void mouse (CDrawContext *pContext, CPoint &where, long button=-1)
+
+ called if a mouse click event occurs
+virtual void takeFocus (CDrawContext *pContext=0)
+
+ called if view should take focus
+virtual void looseFocus (CDrawContext *pContext=0)
+
+ called if view should loose focus
+virtual void setNbItemsPerColumn (long val)
+
+virtual long getNbItemsPerColumn () const
+
+long getLastResult () const
+
+COptionMenu * getLastItemMenu (long &idxInMenu) const
+
+void setScheme (COptionMenuScheme *s)
+
+virtual COptionMenuScheme * getScheme () const
+
+virtual void setPrefixNumbers (long preCount)
+
+COptionMenu * getSubMenu (long idx) const
+
+Protected Member Functions
+COptionMenu * getItemMenu (long idx, long &idxInMenu, long &offsetIdx)
+
+void removeItems ()
+
+void * appendItems (long &offsetIdx)
+
+bool allocateMenu (long nb)
+
+bool allocateSubMenu (long nb)
+
+Protected Attributes
+void * platformControl
+
+char ** entry
+
+COptionMenu ** submenuEntry
+
+bool * check
+
+long nbEntries
+
+long nbSubMenus
+
+long currentIndex
+
+CBitmap * bgWhenClick
+
+long lastButton
+
+long nbItemsPerColumn
+
+long nbAllocated
+
+long nbSubMenuAllocated
+
+long lastResult
+
+long prefixNumbers
+
+COptionMenu * lastMenu
+
+COptionMenuScheme * scheme
+
+
+Detailed Description
+a popup menu control
+
+Define a rectangle view where a text-value can be displayed with a given font and color. The text-value is centered in the given rect. A pixmap can be used as background, a second pixmap can be used when the option menu is popuped. There are 2 styles with or without a shadowed text. When a mouse click occurs, a popup menu is displayed.
+
+
Member Enumeration Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+
+
+
+
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ COptionMenu::COptionMenu
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background = 0,
+
+
+
+
+ CBitmap *
+ bgWhenClick = 0,
+
+
+
+
+ const long
+ style = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ COptionMenu::~COptionMenu
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ bool COptionMenu::addEntry
+ (
+ char *
+ txt ,
+
+
+
+
+ long
+ index = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool COptionMenu::addEntry
+ (
+ COptionMenu *
+ subMenu ,
+
+
+
+
+ char *
+ txt
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool COptionMenu::allocateMenu
+ (
+ long
+ nb
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool COptionMenu::allocateSubMenu
+ (
+ long
+ nb
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ void * COptionMenu::appendItems
+ (
+ long &
+ offsetIdx
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool COptionMenu::checkEntry
+ (
+ long
+ index ,
+
+
+
+
+ bool
+ state
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool COptionMenu::checkEntryAlone
+ (
+ long
+ index
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void COptionMenu::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Reimplemented from CParamDisplay .
+
+
+
+
+
+
+
+
+ long COptionMenu::getCurrent
+ (
+ char *
+ txt = 0,
+
+
+
+
+ bool
+ countSeparator = true
+
+
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool COptionMenu::getEntry
+ (
+ long
+ index ,
+
+
+
+
+ char *
+ txt
+
+
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ long COptionMenu::getIndex
+ (
+ char *
+ txt
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ COptionMenu * COptionMenu::getItemMenu
+ (
+ long
+ idx ,
+
+
+
+
+ long &
+ idxInMenu ,
+
+
+
+
+ long &
+ offsetIdx
+
+
+
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ COptionMenu * COptionMenu::getLastItemMenu
+ (
+ long &
+ idxInMenu
+ )
+ const
+
+
+
+
+
+
+
+
+
+
+
+
+ long COptionMenu::getLastResult
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual long COptionMenu::getNbEntries
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual long COptionMenu::getNbItemsPerColumn
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual COptionMenuScheme * COptionMenu::getScheme
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ COptionMenu * COptionMenu::getSubMenu
+ (
+ long
+ idx
+ )
+ const
+
+
+
+
+
+
+
+
+
+
+
+
+ bool COptionMenu::isCheckEntry
+ (
+ long
+ index
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void COptionMenu::looseFocus
+ (
+ CDrawContext *
+ pContext = 0
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if view should loose focus
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void COptionMenu::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ bool COptionMenu::removeAllEntry
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool COptionMenu::removeEntry
+ (
+ long
+ index
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void COptionMenu::removeItems
+ (
+
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool COptionMenu::setCurrent
+ (
+ long
+ index ,
+
+
+
+
+ bool
+ countSeparator = true
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool COptionMenu::setEntry
+ (
+ long
+ index ,
+
+
+
+
+ char *
+ txt
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void COptionMenu::setNbItemsPerColumn
+ (
+ long
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void COptionMenu::setPrefixNumbers
+ (
+ long
+ preCount
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void COptionMenu::setValue
+ (
+ float
+ val
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Reimplemented from CControl .
+
+
+
+
+
+
+
+
+ void COptionMenu::takeFocus
+ (
+ CDrawContext *
+ pContext = 0
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if view should take focus
+
+
+
+Reimplemented from CView .
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_option_menu.png b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu.png
new file mode 100644
index 0000000..ccdaad9
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme-members.html
new file mode 100644
index 0000000..99abb50
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme-members.html
@@ -0,0 +1,63 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+COptionMenuScheme Member List This is the complete list of members for COptionMenuScheme , including all inherited members.
+ backgroundColor COptionMenuScheme [protected]
+ COptionMenuScheme ()COptionMenuScheme
+ CReferenceCounter ()CReferenceCounter [inline]
+ disableTextColor COptionMenuScheme [protected]
+ drawItem (const char *text, long itemId, long state, CDrawContext *pContext, const CRect &rect)COptionMenuScheme [virtual]
+ drawItemBack (CDrawContext *pContext, const CRect &rect, bool hilite)COptionMenuScheme [protected, virtual]
+ font COptionMenuScheme [protected]
+ forget ()CReferenceCounter [inline, virtual]
+ getItemSize (const char *text, CDrawContext *pContext, CPoint &size)COptionMenuScheme [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ hiliteTextColor COptionMenuScheme [protected]
+ kChecked enum valueCOptionMenuScheme
+ kDisabled enum valueCOptionMenuScheme
+ kSelected enum valueCOptionMenuScheme
+ kSubMenu enum valueCOptionMenuScheme
+ kTitle enum valueCOptionMenuScheme
+ remember ()CReferenceCounter [inline, virtual]
+ selectionColor COptionMenuScheme [protected]
+ setColors (CColor back, CColor select, CColor text, CColor htext, CColor dtext)COptionMenuScheme [inline]
+ setFont (CFont f)COptionMenuScheme [inline]
+ textColor COptionMenuScheme [protected]
+ ~COptionMenuScheme ()COptionMenuScheme [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme.html b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme.html
new file mode 100644
index 0000000..b1f9781
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme.html
@@ -0,0 +1,555 @@
+
+
+VSTGUI: COptionMenuScheme Class Reference
+
+
+
+
+
+
+COptionMenuScheme Class Reference #include <vstcontrols.h>
+
+
Inheritance diagram for COptionMenuScheme:
+
+
+
+
+List of all members.
+
+Public Types
+enum {
+ kChecked = 0x01,
+kDisabled = 0x02,
+kSelected = 0x04,
+kSubMenu = 0x08,
+
+ kTitle = 0x10
+
+ }
+
+Public Member Functions
+ COptionMenuScheme ()
+
+virtual ~COptionMenuScheme ()
+
+virtual void getItemSize (const char *text, CDrawContext *pContext, CPoint &size)
+
+virtual void drawItem (const char *text, long itemId, long state, CDrawContext *pContext, const CRect &rect)
+
+void setColors (CColor back, CColor select, CColor text, CColor htext, CColor dtext)
+
+void setFont (CFont f)
+
+Protected Member Functions
+virtual void drawItemBack (CDrawContext *pContext, const CRect &rect, bool hilite)
+
+Protected Attributes
+CColor backgroundColor
+
+CColor selectionColor
+
+CColor textColor
+
+CColor hiliteTextColor
+
+CColor disableTextColor
+
+CFont font
+
+
+Detailed Description
+Used to define the appearance (font color, background color...) of a popup-menu. To define the scheme of a menu, use the appropriate setScheme method (see COptionMenu ).
+You can also use the global variable gOptionMenuScheme to use one scheme on all menus.
+If you want to use it on Mac OS X, you must set the macro MAC_ENABLE_MENU_SCHEME (needs Mac OS X 10.3 or higher)
+
+
Member Enumeration Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kChecked
+
+ kDisabled
+
+ kSelected
+
+ kSubMenu
+
+ kTitle
+
+
+
+
+
+
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ COptionMenuScheme::COptionMenuScheme
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ COptionMenuScheme::~COptionMenuScheme
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void COptionMenuScheme::drawItem
+ (
+ const char *
+ text ,
+
+
+
+
+ long
+ itemId ,
+
+
+
+
+ long
+ state ,
+
+
+
+
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CRect &
+ rect
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void COptionMenuScheme::drawItemBack
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CRect &
+ rect ,
+
+
+
+
+ bool
+ hilite
+
+
+
+ )
+ [protected, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void COptionMenuScheme::getItemSize
+ (
+ const char *
+ text ,
+
+
+
+
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ size
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void COptionMenuScheme::setColors
+ (
+ CColor
+ back ,
+
+
+
+
+ CColor
+ select ,
+
+
+
+
+ CColor
+ text ,
+
+
+
+
+ CColor
+ htext ,
+
+
+
+
+ CColor
+ dtext
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void COptionMenuScheme::setFont
+ (
+ CFont
+ f
+ )
+ [inline]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme.png b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme.png
new file mode 100644
index 0000000..7b74632
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_option_menu_scheme.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_param_display-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_param_display-members.html
new file mode 100644
index 0000000..eb76da5
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_param_display-members.html
@@ -0,0 +1,180 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CParamDisplay Member List This is the complete list of members for CParamDisplay , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backColor CParamDisplay [protected]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTextTransparencyEnabled CParamDisplay [protected]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CParamDisplay (const CRect &size, CBitmap *background=0, const long style=0)CParamDisplay
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *pContext)CParamDisplay [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ drawText (CDrawContext *pContext, char *string, CBitmap *newBack=0)CParamDisplay [protected]
+ endEdit ()CControl [virtual]
+ fontColor CParamDisplay [protected]
+ fontID CParamDisplay [protected]
+ forget ()CReferenceCounter [inline, virtual]
+ frameColor CParamDisplay [protected]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackColor () const CParamDisplay [inline]
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFont () const CParamDisplay [inline]
+ getFontColor () const CParamDisplay [inline]
+ getFrame () const CView [inline]
+ getFrameColor () const CParamDisplay [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getShadowColor () const CParamDisplay [inline]
+ getStyle () const CParamDisplay [inline]
+ getTag () const CControl [inline, virtual]
+ getTextTransparency () const CParamDisplay [inline]
+ getTransparency () const CView [inline, virtual]
+ getTxtFace () const CParamDisplay [inline]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ horiTxtAlign CParamDisplay [protected]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CView [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackColor (CColor color)CParamDisplay [virtual]
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setFont (CFont fontID)CParamDisplay [virtual]
+ setFontColor (CColor color)CParamDisplay [virtual]
+ setFrameColor (CColor color)CParamDisplay [virtual]
+ setHoriAlign (CHoriTxtAlign hAlign)CParamDisplay [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setShadowColor (CColor color)CParamDisplay [virtual]
+ setString2FloatConvert (void(*convert)(char *string, float &output))CParamDisplay [virtual]
+ setStringConvert (void(*convert)(float value, char *string))CParamDisplay [virtual]
+ setStringConvert (void(*convert)(float value, char *string, void *userDta), void *userData)CParamDisplay [virtual]
+ setStyle (long val)CParamDisplay [virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTextTransparency (bool val)CParamDisplay [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setTxtFace (CTxtFace val)CParamDisplay [virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ shadowColor CParamDisplay [protected]
+ size CView [protected]
+ string2FloatConvert CParamDisplay [protected]
+ stringConvert CParamDisplay [protected]
+ stringConvert2 CParamDisplay [protected]
+ style CParamDisplay [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ txtFace CParamDisplay [protected]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ userData CParamDisplay [protected]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CParamDisplay ()CParamDisplay [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_param_display.html b/vstgui.sf/vstgui/Documentation/html/class_c_param_display.html
new file mode 100644
index 0000000..e7b8ef7
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_param_display.html
@@ -0,0 +1,1152 @@
+
+
+VSTGUI: CParamDisplay Class Reference
+
+
+
+
+
+
+CParamDisplay Class Reference a parameter display control
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CParamDisplay:
+
+
+
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CParamDisplay (const CRect &size , CBitmap *background=0, const long style =0)
+
+virtual ~CParamDisplay ()
+
+virtual void setFont (CFont fontID )
+
+CFont getFont () const
+
+virtual void setFontColor (CColor color)
+
+CColor getFontColor () const
+
+virtual void setBackColor (CColor color)
+
+CColor getBackColor () const
+
+virtual void setFrameColor (CColor color)
+
+CColor getFrameColor () const
+
+virtual void setShadowColor (CColor color)
+
+CColor getShadowColor () const
+
+virtual void setHoriAlign (CHoriTxtAlign hAlign)
+
+virtual void setStringConvert (void(*convert)(float value , char *string))
+
+virtual void setStringConvert (void(*convert)(float value , char *string, void *userDta), void *userData )
+
+virtual void setString2FloatConvert (void(*convert)(char *string, float &output))
+
+virtual void setStyle (long val)
+
+long getStyle () const
+
+virtual void setTxtFace (CTxtFace val)
+
+CTxtFace getTxtFace () const
+
+virtual void draw (CDrawContext *pContext)
+
+ called if the view should draw itself
+virtual void setTextTransparency (bool val)
+
+bool getTextTransparency () const
+
+Protected Member Functions
+void drawText (CDrawContext *pContext, char *string, CBitmap *newBack=0)
+
+Protected Attributes
+void(* stringConvert )(float value , char *string)
+
+void(* stringConvert2 )(float value , char *string, void *userData )
+
+void(* string2FloatConvert )(char *string, float &output)
+
+void * userData
+
+CHoriTxtAlign horiTxtAlign
+
+long style
+
+CFont fontID
+
+CTxtFace txtFace
+
+CColor fontColor
+
+CColor backColor
+
+CColor frameColor
+
+CColor shadowColor
+
+bool bTextTransparencyEnabled
+
+
+Detailed Description
+a parameter display control
+
+Define a rectangle view where a text-value can be displayed with a given font and color. The user can specify its convert function (from float to char) by default the string format is "%2.2f". The text-value is centered in the given rect.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CParamDisplay::CParamDisplay
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CBitmap *
+ background = 0,
+
+
+
+
+ const long
+ style = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CParamDisplay::~CParamDisplay
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CParamDisplay::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::drawText
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ char *
+ string ,
+
+
+
+
+ CBitmap *
+ newBack = 0
+
+
+
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor CParamDisplay::getBackColor
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CFont CParamDisplay::getFont
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor CParamDisplay::getFontColor
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor CParamDisplay::getFrameColor
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor CParamDisplay::getShadowColor
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ long CParamDisplay::getStyle
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CParamDisplay::getTextTransparency
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CTxtFace CParamDisplay::getTxtFace
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::setBackColor
+ (
+ CColor
+ color
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::setFont
+ (
+ CFont
+ fontID
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::setFontColor
+ (
+ CColor
+ color
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::setFrameColor
+ (
+ CColor
+ color
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::setHoriAlign
+ (
+ CHoriTxtAlign
+ hAlign
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::setShadowColor
+ (
+ CColor
+ color
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::setString2FloatConvert
+ (
+ void(*)(char *string, float &output)
+ convert
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::setStringConvert
+ (
+ void(*)(float value , char *string, void *userDta)
+ convert ,
+
+
+
+
+ void *
+ userData
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::setStringConvert
+ (
+ void(*)(float value , char *string)
+ convert
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::setStyle
+ (
+ long
+ val
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CParamDisplay::setTextTransparency
+ (
+ bool
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CParamDisplay::setTxtFace
+ (
+ CTxtFace
+ val
+ )
+ [virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_param_display.png b/vstgui.sf/vstgui/Documentation/html/class_c_param_display.png
new file mode 100644
index 0000000..9afbc7a
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_param_display.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_reference_counter-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_reference_counter-members.html
new file mode 100644
index 0000000..26cb1f2
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_reference_counter-members.html
@@ -0,0 +1,45 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CReferenceCounter Member List This is the complete list of members for CReferenceCounter , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_reference_counter.html b/vstgui.sf/vstgui/Documentation/html/class_c_reference_counter.html
new file mode 100644
index 0000000..e9c53de
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_reference_counter.html
@@ -0,0 +1,229 @@
+
+
+VSTGUI: CReferenceCounter Class Reference
+
+
+
+
+
+
+CReferenceCounter Class Reference #include <vstgui.h>
+
+
Inheritance diagram for CReferenceCounter:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CReferenceCounter::CReferenceCounter
+ (
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual CReferenceCounter::~CReferenceCounter
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ virtual void CReferenceCounter::forget
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ long CReferenceCounter::getNbReference
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CReferenceCounter::remember
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+ The documentation for this class was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_reference_counter.png b/vstgui.sf/vstgui/Documentation/html/class_c_reference_counter.png
new file mode 100644
index 0000000..811ea3a
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_reference_counter.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch-members.html
new file mode 100644
index 0000000..f25ed53
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch-members.html
@@ -0,0 +1,150 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CRockerSwitch Member List This is the complete list of members for CRockerSwitch , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CRockerSwitch (const CRect &size, CControlListener *listener, long tag, CBitmap *background, CPoint &offset, const long style=kHorizontal)CRockerSwitch
+ CRockerSwitch (const CRect &size, CControlListener *listener, long tag, CCoord heightOfOneImage, CBitmap *background, CPoint &offset, const long style=kHorizontal)CRockerSwitch
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CRockerSwitch [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ heightOfOneImage CRockerSwitch [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CRockerSwitch [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CRockerSwitch [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CRockerSwitch [virtual]
+ CControl::onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ style CRockerSwitch [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CRockerSwitch ()CRockerSwitch [virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch.html b/vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch.html
new file mode 100644
index 0000000..c299fab
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch.html
@@ -0,0 +1,437 @@
+
+
+VSTGUI: CRockerSwitch Class Reference
+
+
+
+
+
+
+CRockerSwitch Class Reference a switch control with 3 sub bitmaps
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CRockerSwitch:
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CRockerSwitch (const CRect &size , CControlListener *listener , long tag , CBitmap *background, CPoint &offset , const long style =kHorizontal)
+
+ CRockerSwitch (const CRect &size , CControlListener *listener , long tag , CCoord heightOfOneImage , CBitmap *background, CPoint &offset , const long style =kHorizontal)
+
+virtual ~CRockerSwitch ()
+
+virtual void draw (CDrawContext *)
+
+ called if the view should draw itself
+virtual void mouse (CDrawContext *pContext, CPoint &where, long button=-1)
+
+ called if a mouse click event occurs
+virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+
+ called if a mouse wheel event is happening over this view
+Protected Attributes
+CPoint offset
+
+CCoord heightOfOneImage
+
+long style
+
+
+Detailed Description
+a switch control with 3 sub bitmaps
+
+Define a rocker switch with 3 states using 3 subpixmaps. One click on its leftside, then the first subpixmap is displayed. One click on its rightside, then the third subpixmap is displayed. When the mouse button is relaxed, the second subpixmap is framed.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CRockerSwitch::CRockerSwitch
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset ,
+
+
+
+
+ const long
+ style = kHorizontal
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CRockerSwitch::CRockerSwitch
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CCoord
+ heightOfOneImage ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset ,
+
+
+
+
+ const long
+ style = kHorizontal
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CRockerSwitch::~CRockerSwitch
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CRockerSwitch::draw
+ (
+ CDrawContext *
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+
+
+
+
+
+
+ void CRockerSwitch::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ bool CRockerSwitch::onWheel
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ where ,
+
+
+
+
+ float
+ distance
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse wheel event is happening over this view
+
+
+
+Reimplemented from CView .
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch.png b/vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch.png
new file mode 100644
index 0000000..1aa89b9
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_rocker_switch.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_scroll_container-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_container-members.html
new file mode 100644
index 0000000..f301b6d
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_container-members.html
@@ -0,0 +1,148 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CScrollContainer Member List This is the complete list of members for CScrollContainer , including all inherited members.
+ addView (CView *pView)CViewContainer [virtual]
+ addView (CView *pView, CRect &mouseableArea, bool mouseEnabled=true)CViewContainer [virtual]
+ advanceNextFocusView (CView *oldFocus, bool reverse=false)CViewContainer [virtual]
+ attached (CView *view)CViewContainer [virtual]
+ backgroundColor CViewContainer [protected]
+ backgroundOffset CViewContainer [protected]
+ bDirty CView [protected]
+ bDrawInOffscreen CViewContainer [protected]
+ bMouseEnabled CView [protected]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl classCView [friend]
+ CFrame classCView [friend]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ containerSize CScrollContainer [protected]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CScrollContainer (const CRect &size, const CRect &containerSize, CFrame *pParent, CBitmap *pBackground=0)CScrollContainer
+ currentDragView CViewContainer [protected]
+ CView (const CRect &size)CView
+ CViewContainer (const CRect &size, CFrame *pParent, CBitmap *pBackground=0)CViewContainer
+ CView::CViewContainer classCView [friend]
+ draw (CDrawContext *pContext)CViewContainer [virtual]
+ drawBackgroundRect (CDrawContext *pContext, CRect &_updateRect)CViewContainer [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CViewContainer [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CViewContainer [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getBackgroundColor () const CViewContainer [inline, virtual]
+ getBackgroundOffset () const CViewContainer [inline, virtual]
+ getContainerSize () const CScrollContainer [inline]
+ getCurrentView () const CViewContainer [virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getMode () const CViewContainer [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getNbViews () const CViewContainer [virtual]
+ getParentView () const CView [inline]
+ getScrollOffset (CPoint &off) const CScrollContainer [inline]
+ getTransparency () const CView [inline, virtual]
+ getView (long index) const CViewContainer [virtual]
+ getViewAt (const CPoint &where, bool deep=false) const CViewContainer [virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CViewContainer [virtual]
+ hitTestSubViews (const CPoint &where, const long buttons=-1)CViewContainer [protected]
+ isChild (CView *pView) const CViewContainer [virtual]
+ isDirty () const CScrollContainer [virtual]
+ isTypeOf (const char *s) const CView [inline, virtual]
+ kNormalUpdate enum valueCViewContainer
+ kOnlyDirtyUpdate enum valueCViewContainer
+ localToFrame (CPoint &point) const CViewContainer [virtual]
+ looseFocus (CDrawContext *pContext=0)CViewContainer [virtual]
+ mode CViewContainer [protected]
+ modifyDrawContext (CCoord save[4], CDrawContext *pContext)CViewContainer
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CViewContainer [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CViewContainer [virtual]
+ offset CScrollContainer [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onKeyDown (VstKeyCode &keyCode)CViewContainer [virtual]
+ onKeyUp (VstKeyCode &keyCode)CViewContainer [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CViewContainer [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CViewContainer [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pFirstView CViewContainer [protected]
+ pLastView CViewContainer [protected]
+ pOffscreenContext CViewContainer [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CScrollContainer [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removeAll (const bool &withForget=true)CViewContainer [virtual]
+ removed (CView *parent)CViewContainer [virtual]
+ removeView (CView *pView, const bool &withForget=true)CViewContainer [virtual]
+ restoreDrawContext (CDrawContext *pContext, CCoord save[4])CViewContainer
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackgroundColor (const CColor color)CViewContainer [virtual]
+ setBackgroundOffset (const CPoint &p)CViewContainer [inline, virtual]
+ setContainerSize (const CRect &cs)CScrollContainer
+ setDirty (const bool val=true)CView [inline, virtual]
+ setMode (long val)CViewContainer [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setScrollOffset (CPoint offset, bool withRedraw=false)CScrollContainer
+ setTransparency (bool val)CView [inline, virtual]
+ setViewSize (CRect &rect)CViewContainer [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ size CView [protected]
+ takeFocus (CDrawContext *pContext=0)CViewContainer [virtual]
+ update (CDrawContext *pContext)CViewContainer [virtual]
+ useOffscreen (bool b)CViewContainer [virtual]
+ wantsFocus () const CView [inline, virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CScrollContainer ()CScrollContainer [virtual]
+ ~CView ()CView [virtual]
+ ~CViewContainer ()CViewContainer [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_scroll_container.html b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_container.html
new file mode 100644
index 0000000..8001d0f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_container.html
@@ -0,0 +1,397 @@
+
+
+VSTGUI: CScrollContainer Class Reference
+
+
+
+
+
+
+CScrollContainer Class Reference #include <cscrollview.h>
+
+
Inheritance diagram for CScrollContainer:
+
+
+
+
+
+
+List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CScrollContainer::CScrollContainer
+ (
+ const CRect &
+ size ,
+
+
+
+
+ const CRect &
+ containerSize ,
+
+
+
+
+ CFrame *
+ pParent ,
+
+
+
+
+ CBitmap *
+ pBackground = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CScrollContainer::~CScrollContainer
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ CRect CScrollContainer::getContainerSize
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CScrollContainer::getScrollOffset
+ (
+ CPoint &
+ off
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CScrollContainer::isDirty
+ (
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+check if view is dirty
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ void CScrollContainer::redrawRect
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ const CRect &
+ rect
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Parameters:
+
+ context the context which to use to redraw this container
+ rect the area which to redraw
+
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ void CScrollContainer::setContainerSize
+ (
+ const CRect &
+ cs
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void CScrollContainer::setScrollOffset
+ (
+ CPoint
+ offset ,
+
+
+
+
+ bool
+ withRedraw = false
+
+
+
+ )
+
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_scroll_container.png b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_container.png
new file mode 100644
index 0000000..0321fb7
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_container.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_scroll_view-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_view-members.html
new file mode 100644
index 0000000..b04c887
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_view-members.html
@@ -0,0 +1,154 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CScrollView Member List This is the complete list of members for CScrollView , including all inherited members.
+ addView (CView *pView)CScrollView [virtual]
+ CViewContainer::addView (CView *pView, CRect &mouseableArea, bool mouseEnabled=true)CViewContainer [virtual]
+ advanceNextFocusView (CView *oldFocus, bool reverse=false)CViewContainer [virtual]
+ attached (CView *view)CViewContainer [virtual]
+ backgroundColor CViewContainer [protected]
+ backgroundOffset CViewContainer [protected]
+ bDirty CView [protected]
+ bDrawInOffscreen CViewContainer [protected]
+ bMouseEnabled CView [protected]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl classCView [friend]
+ CFrame classCView [friend]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ containerSize CScrollView [protected]
+ controlModifierClicked (CDrawContext *pContext, CControl *pControl, long button)CControlListener [inline, private, virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CScrollView (const CRect &size, const CRect &containerSize, CFrame *pParent, long style, long scrollbarWidth=16, CBitmap *pBackground=0)CScrollView
+ currentDragView CViewContainer [protected]
+ CView (const CRect &size)CView
+ CViewContainer (const CRect &size, CFrame *pParent, CBitmap *pBackground=0)CViewContainer
+ CView::CViewContainer classCView [friend]
+ draw (CDrawContext *pContext)CViewContainer [virtual]
+ drawBackgroundRect (CDrawContext *pContext, CRect &_updateRect)CScrollView [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CViewContainer [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CViewContainer [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getBackgroundColor () const CViewContainer [inline, virtual]
+ getBackgroundOffset () const CViewContainer [inline, virtual]
+ getCurrentView () const CViewContainer [virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getHorizontalScrollbar () const CScrollView [inline, virtual]
+ getMode () const CViewContainer [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getNbViews () const CViewContainer [virtual]
+ getParentView () const CView [inline]
+ getTransparency () const CView [inline, virtual]
+ getVerticalScrollbar () const CScrollView [inline, virtual]
+ getView (long index) const CViewContainer [virtual]
+ getViewAt (const CPoint &where, bool deep=false) const CViewContainer [virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CViewContainer [virtual]
+ hitTestSubViews (const CPoint &where, const long buttons=-1)CViewContainer [protected]
+ hsb CScrollView [protected]
+ isChild (CView *pView) const CViewContainer [virtual]
+ isDirty () const CViewContainer [virtual]
+ isTypeOf (const char *s) const CView [inline, virtual]
+ kHorizontalScrollbar enum valueCScrollView
+ kNormalUpdate enum valueCViewContainer
+ kOnlyDirtyUpdate enum valueCViewContainer
+ kVerticalScrollbar enum valueCScrollView
+ localToFrame (CPoint &point) const CViewContainer [virtual]
+ looseFocus (CDrawContext *pContext=0)CViewContainer [virtual]
+ mode CViewContainer [protected]
+ modifyDrawContext (CCoord save[4], CDrawContext *pContext)CViewContainer
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CViewContainer [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CViewContainer [virtual]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onKeyDown (VstKeyCode &keyCode)CViewContainer [virtual]
+ onKeyUp (VstKeyCode &keyCode)CViewContainer [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CScrollView [virtual]
+ CViewContainer::onWheel (CDrawContext *pContext, const CPoint &where, float distance)CViewContainer [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pFirstView CViewContainer [protected]
+ pLastView CViewContainer [protected]
+ pOffscreenContext CViewContainer [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CViewContainer [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removeAll (const bool &withForget=true)CViewContainer [virtual]
+ removed (CView *parent)CViewContainer [virtual]
+ removeView (CView *pView, const bool &withForget=true)CViewContainer [virtual]
+ restoreDrawContext (CDrawContext *pContext, CCoord save[4])CViewContainer
+ sc CScrollView [protected]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackgroundColor (const CColor color)CViewContainer [virtual]
+ setBackgroundOffset (const CPoint &p)CViewContainer [inline, virtual]
+ setContainerSize (const CRect &cs)CScrollView [virtual]
+ setDirty (const bool val=true)CView [inline, virtual]
+ setMode (long val)CViewContainer [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setViewSize (CRect &rect)CViewContainer [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ size CView [protected]
+ style CScrollView [protected]
+ takeFocus (CDrawContext *pContext=0)CViewContainer [virtual]
+ update (CDrawContext *pContext)CViewContainer [virtual]
+ useOffscreen (bool b)CViewContainer [virtual]
+ valueChanged (CDrawContext *pContext, CControl *pControl)CScrollView [virtual]
+ vsb CScrollView [protected]
+ wantsFocus () const CView [inline, virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CScrollView ()CScrollView [virtual]
+ ~CView ()CView [virtual]
+ ~CViewContainer ()CViewContainer [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_scroll_view.html b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_view.html
new file mode 100644
index 0000000..b9da8a4
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_view.html
@@ -0,0 +1,597 @@
+
+
+VSTGUI: CScrollView Class Reference
+
+
+
+
+
+
+CScrollView Class Reference a scrollable view
+More...
+
+#include <cscrollview.h>
+
+
Inheritance diagram for CScrollView:
+
+
+
+
+
+
+
+List of all members.
+
+Public Types
+enum { kHorizontalScrollbar = 1 << 1,
+kVerticalScrollbar = 1 << 2
+ }
+
+Public Member Functions
+ CScrollView (const CRect &size , const CRect &containerSize , CFrame *pParent, long style , long scrollbarWidth=16, CBitmap *pBackground =0)
+
+virtual ~CScrollView ()
+
+virtual void setContainerSize (const CRect &cs)
+
+ set the virtual size of this container
+virtual void addView (CView *pView)
+
+ add a child view
+virtual void drawBackgroundRect (CDrawContext *pContext, CRect &_updateRect)
+
+ draw the background
+virtual bool onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)
+
+ called if a mouse wheel event is happening over this view
+virtual void valueChanged (CDrawContext *pContext, CControl *pControl)
+
+virtual CScrollbar * getVerticalScrollbar () const
+
+virtual CScrollbar * getHorizontalScrollbar () const
+
+Protected Attributes
+CScrollContainer * sc
+
+CScrollbar * vsb
+
+CScrollbar * hsb
+
+CRect containerSize
+
+long style
+
+
+Detailed Description
+a scrollable view
+
+
Member Enumeration Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kHorizontalScrollbar
+add a horizontal scrollbar
+ kVerticalScrollbar
+add a vertical scrollbar
+
+
+
+
+
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CScrollView::CScrollView
+ (
+ const CRect &
+ size ,
+
+
+
+
+ const CRect &
+ containerSize ,
+
+
+
+
+ CFrame *
+ pParent ,
+
+
+
+
+ long
+ style ,
+
+
+
+
+ long
+ scrollbarWidth = 16,
+
+
+
+
+ CBitmap *
+ pBackground = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CScrollView::~CScrollView
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CScrollView::addView
+ (
+ CView *
+ pView
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+add a child view
+
+
Parameters:
+
+ pView the view object to add to this container
+
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ void CScrollView::drawBackgroundRect
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CRect &
+ _updateRect
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw the background
+
+
Parameters:
+
+ pContext the context which to use to draw the background
+ _updateRect the area which to draw
+
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ virtual CScrollbar * CScrollView::getHorizontalScrollbar
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual CScrollbar * CScrollView::getVerticalScrollbar
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CScrollView::onWheel
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ where ,
+
+
+
+
+ const CMouseWheelAxis
+ axis ,
+
+
+
+
+ float
+ distance
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse wheel event is happening over this view
+
+
+
+Reimplemented from CViewContainer .
+
+
+
+
+
+
+
+
+ void CScrollView::setContainerSize
+ (
+ const CRect &
+ cs
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the virtual size of this container
+
+
+
+
+
+
+
+
+
+
+ void CScrollView::valueChanged
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CControl *
+ pControl
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_scroll_view.png b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_view.png
new file mode 100644
index 0000000..6c1bd83
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_scroll_view.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_scrollbar-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_scrollbar-members.html
new file mode 100644
index 0000000..95e2e83
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_scrollbar-members.html
@@ -0,0 +1,172 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CScrollbar Member List This is the complete list of members for CScrollbar , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backgroundColor CScrollbar [protected]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ calculateScrollerLength ()CScrollbar [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CScrollbar (const CRect &size, CControlListener *listener, long tag, long style, const CRect &scrollSize)CScrollbar
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *pContext)CScrollbar [virtual]
+ drawBackground (CDrawContext *pContext)CScrollbar [protected]
+ drawer CScrollbar [protected]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ drawScroller (CDrawContext *pContext, const CRect &size)CScrollbar [protected]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameColor CScrollbar [protected]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getBackgroundColor () const CScrollbar [inline]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getFrameColor () const CScrollbar [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getScrollerColor () const CScrollbar [inline]
+ getScrollerRect ()CScrollbar [protected]
+ getScrollSize (CRect &rect) const CScrollbar [inline]
+ getStep () const CScrollbar [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ kHorizontal enum valueCScrollbar
+ kVertical enum valueCScrollbar
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CScrollbar [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CScrollbar [virtual]
+ CControl::onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ scrollerArea CScrollbar [protected]
+ scrollerColor CScrollbar [protected]
+ scrollerLength CScrollbar [protected]
+ scrollSize CScrollbar [protected]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackgroundColor (const CColor &color)CScrollbar [inline, virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setDrawer (IScrollbarDrawer *d)CScrollbar [inline, virtual]
+ setFrameColor (const CColor &color)CScrollbar [inline, virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setScrollerColor (const CColor &color)CScrollbar [inline, virtual]
+ setScrollSize (const CRect &ssize)CScrollbar [virtual]
+ setStep (float newStep)CScrollbar [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ stepValue CScrollbar [protected]
+ style CScrollbar [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CScrollbar ()CScrollbar [virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_scrollbar.html b/vstgui.sf/vstgui/Documentation/html/class_c_scrollbar.html
new file mode 100644
index 0000000..c987a3c
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_scrollbar.html
@@ -0,0 +1,1001 @@
+
+
+VSTGUI: CScrollbar Class Reference
+
+
+
+
+
+
+CScrollbar Class Reference a scrollbar control
+More...
+
+#include <cscrollview.h>
+
+
Inheritance diagram for CScrollbar:
+
+
+
+
+
+
+List of all members.
+
+Public Types
+enum { kHorizontal ,
+kVertical
+ }
+
+Public Member Functions
+ CScrollbar (const CRect &size , CControlListener *listener , long tag , long style , const CRect &scrollSize )
+
+virtual ~CScrollbar ()
+
+virtual void setDrawer (IScrollbarDrawer *d)
+
+virtual void setScrollSize (const CRect &ssize)
+
+virtual void setStep (float newStep)
+
+CRect & getScrollSize (CRect &rect) const
+
+float getStep () const
+
+virtual void setFrameColor (const CColor &color)
+
+virtual void setScrollerColor (const CColor &color)
+
+virtual void setBackgroundColor (const CColor &color)
+
+CColor getFrameColor () const
+
+CColor getScrollerColor () const
+
+CColor getBackgroundColor () const
+
+virtual void draw (CDrawContext *pContext)
+
+ called if the view should draw itself
+virtual void mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)
+
+ called if a mouse click event occurs
+virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+
+ called if a mouse wheel event is happening over this view
+Protected Member Functions
+void drawBackground (CDrawContext *pContext)
+
+void drawScroller (CDrawContext *pContext, const CRect &size )
+
+void calculateScrollerLength ()
+
+CRect getScrollerRect ()
+
+Protected Attributes
+long style
+
+CRect scrollSize
+
+CRect scrollerArea
+
+float stepValue
+
+CCoord scrollerLength
+
+CColor frameColor
+
+CColor scrollerColor
+
+CColor backgroundColor
+
+IScrollbarDrawer * drawer
+
+
+Detailed Description
+a scrollbar control
+
+
Member Enumeration Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kHorizontal
+
+ kVertical
+
+
+
+
+
+
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CScrollbar::CScrollbar
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ long
+ style ,
+
+
+
+
+ const CRect &
+ scrollSize
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CScrollbar::~CScrollbar
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CScrollbar::calculateScrollerLength
+ (
+
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CScrollbar::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+
+
+
+
+
+
+ void CScrollbar::drawBackground
+ (
+ CDrawContext *
+ pContext
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CScrollbar::drawScroller
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CRect &
+ size
+
+
+
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor CScrollbar::getBackgroundColor
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor CScrollbar::getFrameColor
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor CScrollbar::getScrollerColor
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CRect CScrollbar::getScrollerRect
+ (
+
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ CRect & CScrollbar::getScrollSize
+ (
+ CRect &
+ rect
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ float CScrollbar::getStep
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CScrollbar::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ buttons = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ bool CScrollbar::onWheel
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ where ,
+
+
+
+
+ float
+ distance
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse wheel event is happening over this view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ virtual void CScrollbar::setBackgroundColor
+ (
+ const CColor &
+ color
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CScrollbar::setDrawer
+ (
+ IScrollbarDrawer *
+ d
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CScrollbar::setFrameColor
+ (
+ const CColor &
+ color
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CScrollbar::setScrollerColor
+ (
+ const CColor &
+ color
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CScrollbar::setScrollSize
+ (
+ const CRect &
+ ssize
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CScrollbar::setStep
+ (
+ float
+ newStep
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_scrollbar.png b/vstgui.sf/vstgui/Documentation/html/class_c_scrollbar.png
new file mode 100644
index 0000000..f0f54f3
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_scrollbar.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_slider-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_slider-members.html
new file mode 100644
index 0000000..b458832
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_slider-members.html
@@ -0,0 +1,171 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CSlider Member List This is the complete list of members for CSlider , including all inherited members.
+ attached (CView *parent)CSlider [virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ bDrawTransparentEnabled CSlider [protected]
+ beginEdit ()CControl [virtual]
+ bFreeClick CSlider [protected]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CSlider (const CRect &size, CControlListener *listener, long tag, long iMinPos, long iMaxPos, CBitmap *handle, CBitmap *background, CPoint &offset, const long style=kLeft|kHorizontal)CSlider
+ CSlider (const CRect &rect, CControlListener *listener, long tag, CPoint &offsetHandle, long rangeHandle, CBitmap *handle, CBitmap *background, CPoint &offset, const long style=kLeft|kHorizontal)CSlider
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CSlider [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getFreeClick () const CSlider [inline, virtual]
+ getHandle () const CSlider [inline, virtual]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ getZoomFactor () const CSlider [inline, virtual]
+ heightControl CSlider [protected]
+ heightOfSlider CSlider [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ maxTmp CSlider [protected]
+ minPos CSlider [protected]
+ minTmp CSlider [protected]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CSlider [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CSlider [protected]
+ offsetHandle CSlider [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CSlider [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CSlider [virtual]
+ CControl::onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pHandle CSlider [protected]
+ pOScreen CSlider [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ rangeHandle CSlider [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CSlider [virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setDrawTransparentHandle (bool val)CSlider [inline, virtual]
+ setFreeClick (bool val)CSlider [inline, virtual]
+ setHandle (CBitmap *pHandle)CSlider [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOffsetHandle (CPoint &val)CSlider [virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ setZoomFactor (float val)CSlider [inline, virtual]
+ size CView [protected]
+ style CSlider [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ widthControl CSlider [protected]
+ widthOfSlider CSlider [protected]
+ zoomFactor CSlider [protected]
+ ~CControl ()CControl [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CSlider ()CSlider [virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_slider.html b/vstgui.sf/vstgui/Documentation/html/class_c_slider.html
new file mode 100644
index 0000000..fc6b5e6
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_slider.html
@@ -0,0 +1,1136 @@
+
+
+VSTGUI: CSlider Class Reference
+
+
+
+
+
+
+CSlider Class Reference a slider control
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CSlider:
+
+
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CSlider (const CRect &size , CControlListener *listener , long tag , long iMinPos, long iMaxPos, CBitmap *handle, CBitmap *background, CPoint &offset , const long style =kLeft|kHorizontal)
+
+ CSlider (const CRect &rect, CControlListener *listener , long tag , CPoint &offsetHandle , long rangeHandle , CBitmap *handle, CBitmap *background, CPoint &offset , const long style =kLeft|kHorizontal)
+
+virtual ~CSlider ()
+
+virtual bool attached (CView *parent)
+
+ view is attached to a parent view
+virtual bool removed (CView *parent)
+
+ view is removed from parent view
+virtual void draw (CDrawContext *)
+
+ called if the view should draw itself
+virtual void mouse (CDrawContext *pContext, CPoint &where, long button=-1)
+
+ called if a mouse click event occurs
+virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+
+ called if a mouse wheel event is happening over this view
+virtual long onKeyDown (VstKeyCode &keyCode)
+
+ called if a key down event occurs and this view has focus
+virtual void setDrawTransparentHandle (bool val)
+
+virtual void setFreeClick (bool val)
+
+virtual bool getFreeClick () const
+
+virtual void setOffsetHandle (CPoint &val)
+
+virtual void setHandle (CBitmap *pHandle )
+
+virtual CBitmap * getHandle () const
+
+virtual void setZoomFactor (float val)
+
+virtual float getZoomFactor () const
+
+Protected Attributes
+CPoint offset
+
+CPoint offsetHandle
+
+CBitmap * pHandle
+
+COffscreenContext * pOScreen
+
+long style
+
+CCoord widthOfSlider
+
+CCoord heightOfSlider
+
+CCoord rangeHandle
+
+CCoord minTmp
+
+CCoord maxTmp
+
+CCoord minPos
+
+CCoord widthControl
+
+CCoord heightControl
+
+float zoomFactor
+
+bool bDrawTransparentEnabled
+
+bool bFreeClick
+
+
+Detailed Description
+a slider control
+
+Define a slider with a given background and handle. The range of variation of the handle should be defined. By default the handler is drawn with transparency (white color). By clicking Alt+Left Mouse the default value is used.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CSlider::CSlider
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ long
+ iMinPos ,
+
+
+
+
+ long
+ iMaxPos ,
+
+
+
+
+ CBitmap *
+ handle ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset ,
+
+
+
+
+ const long
+ style = kLeft|kHorizontal
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CSlider::CSlider
+ (
+ const CRect &
+ rect ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CPoint &
+ offsetHandle ,
+
+
+
+
+ long
+ rangeHandle ,
+
+
+
+
+ CBitmap *
+ handle ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset ,
+
+
+
+
+ const long
+ style = kLeft|kHorizontal
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CSlider::~CSlider
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ bool CSlider::attached
+ (
+ CView *
+ parent
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+view is attached to a parent view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CSlider::draw
+ (
+ CDrawContext *
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+
+
+
+
+
+
+ virtual bool CSlider::getFreeClick
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual CBitmap * CSlider::getHandle
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual float CSlider::getZoomFactor
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CSlider::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ long CSlider::onKeyDown
+ (
+ VstKeyCode &
+ keyCode
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a key down event occurs and this view has focus
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ bool CSlider::onWheel
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ where ,
+
+
+
+
+ float
+ distance
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse wheel event is happening over this view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ bool CSlider::removed
+ (
+ CView *
+ parent
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+view is removed from parent view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ virtual void CSlider::setDrawTransparentHandle
+ (
+ bool
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CSlider::setFreeClick
+ (
+ bool
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CSlider::setHandle
+ (
+ CBitmap *
+ pHandle
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CSlider::setOffsetHandle
+ (
+ CPoint &
+ val
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CSlider::setZoomFactor
+ (
+ float
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_slider.png b/vstgui.sf/vstgui/Documentation/html/class_c_slider.png
new file mode 100644
index 0000000..7638a23
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_slider.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_special_digit-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_special_digit-members.html
new file mode 100644
index 0000000..6d32828
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_special_digit-members.html
@@ -0,0 +1,152 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CSpecialDigit Member List This is the complete list of members for CSpecialDigit , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CSpecialDigit (const CRect &size, CControlListener *listener, long tag, long dwPos, long iNumbers, long *xpos, long *ypos, long width, long height, CBitmap *background)CSpecialDigit
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CSpecialDigit [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getNormValue (void) const CSpecialDigit [virtual]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ height CSpecialDigit [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ iNumbers CSpecialDigit [protected]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CView [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ width CSpecialDigit [protected]
+ xpos CSpecialDigit [protected]
+ ypos CSpecialDigit [protected]
+ ~CControl ()CControl [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CSpecialDigit ()CSpecialDigit [virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_special_digit.html b/vstgui.sf/vstgui/Documentation/html/class_c_special_digit.html
new file mode 100644
index 0000000..151afea
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_special_digit.html
@@ -0,0 +1,372 @@
+
+
+VSTGUI: CSpecialDigit Class Reference
+
+
+
+
+
+
+CSpecialDigit Class Reference special display with custom numbers (0...9)
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CSpecialDigit:
+
+
+
+
+
+
+List of all members.
+Detailed Description
+special display with custom numbers (0...9)
+
+Can be used to display a counter with maximum 7 digits. All digit have the same size and are stacked in height in the pixmap.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CSpecialDigit::CSpecialDigit
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ long
+ dwPos ,
+
+
+
+
+ long
+ iNumbers ,
+
+
+
+
+ long *
+ xpos ,
+
+
+
+
+ long *
+ ypos ,
+
+
+
+
+ long
+ width ,
+
+
+
+
+ long
+ height ,
+
+
+
+
+ CBitmap *
+ background
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CSpecialDigit::~CSpecialDigit
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CSpecialDigit::draw
+ (
+ CDrawContext *
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+
+
+
+
+
+
+ float CSpecialDigit::getNormValue
+ (
+ void
+
+ )
+ const [virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_special_digit.png b/vstgui.sf/vstgui/Documentation/html/class_c_special_digit.png
new file mode 100644
index 0000000..0f430d3
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_special_digit.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen-members.html
new file mode 100644
index 0000000..ddca12c
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen-members.html
@@ -0,0 +1,154 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CSplashScreen Member List This is the complete list of members for CSplashScreen , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bitmapTransparency CSplashScreen [protected]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CSplashScreen (const CRect &size, CControlListener *listener, long tag, CBitmap *background, CRect &toDisplay, CPoint &offset)CSplashScreen
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CSplashScreen [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getBitmapTransparency () const CSplashScreen [inline]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOffset () const CSplashScreen [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CSplashScreen [virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ keepSize CSplashScreen [protected]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CSplashScreen [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CSplashScreen [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setBitmapTransparency (unsigned char transparency)CSplashScreen
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ toDisplay CSplashScreen [protected]
+ unSplash (CDrawContext *pContext=0)CSplashScreen [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CSplashScreen ()CSplashScreen [virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen.html b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen.html
new file mode 100644
index 0000000..044c0d3
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen.html
@@ -0,0 +1,500 @@
+
+
+VSTGUI: CSplashScreen Class Reference
+
+
+
+
+
+
+CSplashScreen Class Reference #include <vstcontrols.h>
+
+
Inheritance diagram for CSplashScreen:
+
+
+
+
+
+
+List of all members.
+Detailed Description
+One click on its activated region and its pixmap is displayed, in this state the other control can not be used, an another click on the displayed area reinstalls the normal frame. This can be used to display a help view over the other views.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CSplashScreen::CSplashScreen
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CRect &
+ toDisplay ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CSplashScreen::~CSplashScreen
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CSplashScreen::draw
+ (
+ CDrawContext *
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+
+
+
+
+
+
+ unsigned char CSplashScreen::getBitmapTransparency
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ const CPoint & CSplashScreen::getOffset
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CSplashScreen::hitTest
+ (
+ const CPoint &
+ where ,
+
+
+
+
+ const long
+ buttons = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+check if where hits this view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CSplashScreen::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CSplashScreen::setBitmapTransparency
+ (
+ unsigned char
+ transparency
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void CSplashScreen::unSplash
+ (
+ CDrawContext *
+ pContext = 0
+ )
+ [virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen.png b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen.png
new file mode 100644
index 0000000..33c1350
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view-members.html
new file mode 100644
index 0000000..fdd2b56
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view-members.html
@@ -0,0 +1,109 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CSplashScreenView Member List This is the complete list of members for CSplashScreenView , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ bDirty CView [protected]
+ bMouseEnabled CView [protected]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl classCView [friend]
+ CFrame classCView [friend]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CSplashScreenView (const CRect &size, CSplashScreen *splashScreen)CSplashScreenView [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ draw (CDrawContext *pContext)CSplashScreenView [inline, virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getParentView () const CView [inline]
+ getTransparency () const CView [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CView [inline, virtual]
+ isTypeOf (const char *s) const CView [inline, virtual]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button)CSplashScreenView [inline, virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setDirty (const bool val=true)CView [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ size CView [protected]
+ splashScreen CSplashScreenView [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ wantsFocus () const CView [inline, virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view.html b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view.html
new file mode 100644
index 0000000..9f06e3f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view.html
@@ -0,0 +1,204 @@
+
+
+VSTGUI: CSplashScreenView Class Reference
+
+
+
+
+
+
+CSplashScreenView Class Reference Inheritance diagram for CSplashScreenView:
+
+
+
+
+
+List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CSplashScreenView::CSplashScreenView
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CSplashScreen *
+ splashScreen
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CSplashScreenView::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CSplashScreenView::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+Member Data Documentation
+
+
+
+ The documentation for this class was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view.png b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view.png
new file mode 100644
index 0000000..10d3e25
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_splash_screen_view.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_tab_button-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_tab_button-members.html
new file mode 100644
index 0000000..259f8d0
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_tab_button-members.html
@@ -0,0 +1,162 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CTabButton Member List This is the complete list of members for CTabButton , including all inherited members.
+ activeTextColor CTabButton [protected]
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ COnOffButton (const CRect &size, CControlListener *listener, long tag, CBitmap *background, long style=kPreListenerUpdate)COnOffButton
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CTabButton (const CRect &size, CControlListener *listener, long tag, CBitmap *background, const char *inName)CTabButton [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *pContext)CTabButton [inline, virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ fontSize CTabButton [protected]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getStyle () const COnOffButton [inline, virtual]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ inactiveTextColor CTabButton [protected]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ kPostListenerUpdate enum valueCOnOffButton
+ kPreListenerUpdate enum valueCOnOffButton
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button)CTabButton [inline, virtual]
+ mouseableArea CView [protected]
+ name CTabButton [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CTabButton [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setActiveTextColor (const CColor &color)CTabButton [inline]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setInactiveTextColor (const CColor &color)CTabButton [inline]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setStyle (long newStyle)COnOffButton [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTextFont (const CFont &font)CTabButton [inline]
+ setTextSize (const long &textSize)CTabButton [inline]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ style COnOffButton [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ textFont CTabButton [protected]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~COnOffButton ()COnOffButton [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CTabButton ()CTabButton [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_tab_button.html b/vstgui.sf/vstgui/Documentation/html/class_c_tab_button.html
new file mode 100644
index 0000000..29f7ab5
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_tab_button.html
@@ -0,0 +1,523 @@
+
+
+VSTGUI: CTabButton Class Reference
+
+
+
+
+
+
+CTabButton Class Reference Inheritance diagram for CTabButton:
+
+
+
+
+
+
+
+List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CTabButton::CTabButton
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ const char *
+ inName
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual CTabButton::~CTabButton
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ virtual void CTabButton::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Reimplemented from COnOffButton .
+
+
+
+
+
+
+
+
+ void CTabButton::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from COnOffButton .
+
+
+
+
+
+
+
+
+ virtual void CTabButton::onDragEnter
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ CDragContainer *
+ drag ,
+
+
+
+
+ const CPoint &
+ where
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a drag is entering this view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CTabButton::setActiveTextColor
+ (
+ const CColor &
+ color
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CTabButton::setInactiveTextColor
+ (
+ const CColor &
+ color
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CTabButton::setTextFont
+ (
+ const CFont &
+ font
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CTabButton::setTextSize
+ (
+ const long &
+ textSize
+ )
+ [inline]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_tab_button.png b/vstgui.sf/vstgui/Documentation/html/class_c_tab_button.png
new file mode 100644
index 0000000..4bb09fa
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_tab_button.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view-members.html
new file mode 100644
index 0000000..6d47f7e
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view-members.html
@@ -0,0 +1,51 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CTabChildView Member List This is the complete list of members for CTabChildView , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view.html b/vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view.html
new file mode 100644
index 0000000..bef9740
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view.html
@@ -0,0 +1,212 @@
+
+
+VSTGUI: CTabChildView Class Reference
+
+
+
+
+
+
+CTabChildView Class Reference Inheritance diagram for CTabChildView:
+
+
+
+
+List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CTabChildView::CTabChildView
+ (
+ CView *
+ view
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual CTabChildView::~CTabChildView
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view.png b/vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view.png
new file mode 100644
index 0000000..0f788cd
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_tab_child_view.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_tab_view-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_tab_view-members.html
new file mode 100644
index 0000000..29120c2
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_tab_view-members.html
@@ -0,0 +1,170 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CTabView Member List This is the complete list of members for CTabView , including all inherited members.
+ addTab (CView *view, const char *name=0, CBitmap *tabBitmap=0)CTabView [virtual]
+ addView (CView *pView)CViewContainer [virtual]
+ addView (CView *pView, CRect &mouseableArea, bool mouseEnabled=true)CViewContainer [virtual]
+ advanceNextFocusView (CView *oldFocus, bool reverse=false)CViewContainer [virtual]
+ alignTabs (long alignment=kAlignCenter)CTabView [virtual]
+ attached (CView *view)CViewContainer [virtual]
+ backgroundColor CViewContainer [protected]
+ backgroundOffset CViewContainer [protected]
+ bDirty CView [protected]
+ bDrawInOffscreen CViewContainer [protected]
+ bMouseEnabled CView [protected]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl classCView [friend]
+ CFrame classCView [friend]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ controlModifierClicked (CDrawContext *pContext, CControl *pControl, long button)CControlListener [inline, virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CTabView (const CRect &size, CFrame *parent, CBitmap *tabBitmap, CBitmap *background=0, long tabPosition=kPositionTop, long style=0)CTabView
+ CTabView (const CRect &size, CFrame *parent, const CRect &tabSize, CBitmap *background=0, long tabPosition=kPositionTop, long style=0)CTabView
+ currentChild CTabView [protected]
+ currentDragView CViewContainer [protected]
+ CView (const CRect &size)CView
+ CViewContainer (const CRect &size, CFrame *pParent, CBitmap *pBackground=0)CViewContainer
+ CView::CViewContainer classCView [friend]
+ draw (CDrawContext *pContext)CViewContainer [virtual]
+ drawBackgroundRect (CDrawContext *pContext, CRect &_updateRect)CViewContainer [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CViewContainer [virtual]
+ firstChild CTabView [protected]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CViewContainer [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getBackgroundColor () const CViewContainer [inline, virtual]
+ getBackgroundOffset () const CViewContainer [inline, virtual]
+ getCurrentView () const CViewContainer [virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getMode () const CViewContainer [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getNbViews () const CViewContainer [virtual]
+ getParentView () const CView [inline]
+ getTabViewSize (CRect &rect) const CTabView [virtual]
+ getTransparency () const CView [inline, virtual]
+ getView (long index) const CViewContainer [virtual]
+ getViewAt (const CPoint &where, bool deep=false) const CViewContainer [virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CViewContainer [virtual]
+ hitTestSubViews (const CPoint &where, const long buttons=-1)CViewContainer [protected]
+ isChild (CView *pView) const CViewContainer [virtual]
+ isDirty () const CViewContainer [virtual]
+ isTypeOf (const char *s) const CView [inline, virtual]
+ kAlignBottom enum valueCTabView
+ kAlignCenter enum valueCTabView
+ kAlignLeft enum valueCTabView
+ kAlignRight enum valueCTabView
+ kAlignTop enum valueCTabView
+ kNormalUpdate enum valueCViewContainer
+ kOnlyDirtyUpdate enum valueCViewContainer
+ kPositionBottom enum valueCTabView
+ kPositionLeft enum valueCTabView
+ kPositionRight enum valueCTabView
+ kPositionTop enum valueCTabView
+ lastChild CTabView [protected]
+ localToFrame (CPoint &point) const CViewContainer [virtual]
+ looseFocus (CDrawContext *pContext=0)CViewContainer [virtual]
+ mode CViewContainer [protected]
+ modifyDrawContext (CCoord save[4], CDrawContext *pContext)CViewContainer
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CViewContainer [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CViewContainer [virtual]
+ numberOfChilds CTabView [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onKeyDown (VstKeyCode &keyCode)CViewContainer [virtual]
+ onKeyUp (VstKeyCode &keyCode)CViewContainer [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CViewContainer [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CViewContainer [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pFirstView CViewContainer [protected]
+ pLastView CViewContainer [protected]
+ pOffscreenContext CViewContainer [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CViewContainer [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removeAll (const bool &withForget=true)CViewContainer [virtual]
+ removeAllTabs ()CTabView [virtual]
+ removed (CView *parent)CViewContainer [virtual]
+ removeTab (CView *view)CTabView [virtual]
+ removeView (CView *pView, const bool &withForget=true)CViewContainer [virtual]
+ restoreDrawContext (CDrawContext *pContext, CCoord save[4])CViewContainer
+ selectTab (long index)CTabView [virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackgroundColor (const CColor color)CViewContainer [virtual]
+ setBackgroundOffset (const CPoint &p)CViewContainer [inline, virtual]
+ setCurrentChild (CTabChildView *childView)CTabView [protected]
+ setDirty (const bool val=true)CView [inline, virtual]
+ setMode (long val)CViewContainer [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setTabFontStyle (const CFont &font, long fontSize=12, CColor selectedColor=kBlackCColor, CColor deselectedColor=kWhiteCColor)CTabView [virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setViewSize (CRect &rect)CViewContainer [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ size CView [protected]
+ style CTabView [protected]
+ tabBitmap CTabView [protected]
+ tabPosition CTabView [protected]
+ tabSize CTabView [protected]
+ takeFocus (CDrawContext *pContext=0)CViewContainer [virtual]
+ update (CDrawContext *pContext)CViewContainer [virtual]
+ useOffscreen (bool b)CViewContainer [virtual]
+ valueChanged (CDrawContext *pContext, CControl *pControl)CTabView [virtual]
+ wantsFocus () const CView [inline, virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CTabView ()CTabView [virtual]
+ ~CView ()CView [virtual]
+ ~CViewContainer ()CViewContainer [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_tab_view.html b/vstgui.sf/vstgui/Documentation/html/class_c_tab_view.html
new file mode 100644
index 0000000..58863e9
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_tab_view.html
@@ -0,0 +1,833 @@
+
+
+VSTGUI: CTabView Class Reference
+
+
+
+
+
+
+CTabView Class Reference a tab view
+More...
+
+#include <ctabview.h>
+
+
Inheritance diagram for CTabView:
+
+
+
+
+
+
+
+List of all members.
+
+Public Types
+enum { kPositionLeft = 0,
+kPositionRight ,
+kPositionTop ,
+kPositionBottom
+ }
+
+enum {
+ kAlignCenter = 0,
+kAlignLeft ,
+kAlignRight ,
+kAlignTop = kAlignLeft,
+
+ kAlignBottom = kAlignRight
+
+ }
+
+Public Member Functions
+ CTabView (const CRect &size , CFrame *parent, CBitmap *tabBitmap , CBitmap *background=0, long tabPosition =kPositionTop, long style =0)
+
+ CTabView (const CRect &size , CFrame *parent, const CRect &tabSize , CBitmap *background=0, long tabPosition =kPositionTop, long style =0)
+
+virtual ~CTabView ()
+
+virtual bool addTab (CView *view, const char *name=0, CBitmap *tabBitmap =0)
+
+virtual bool removeTab (CView *view)
+
+virtual bool removeAllTabs ()
+
+virtual bool selectTab (long index)
+
+virtual CRect & getTabViewSize (CRect &rect) const
+
+virtual void setTabFontStyle (const CFont &font, long fontSize=12, CColor selectedColor=kBlackCColor , CColor deselectedColor=kWhiteCColor )
+
+ call this after the tabs are added. Tabs added after this call will have the default font style.
+virtual void alignTabs (long alignment=kAlignCenter)
+
+ call this after you have added all tabs
+virtual void valueChanged (CDrawContext *pContext, CControl *pControl)
+
+Protected Member Functions
+void setCurrentChild (CTabChildView *childView)
+
+Protected Attributes
+unsigned long numberOfChilds
+
+long tabPosition
+
+long style
+
+CRect tabSize
+
+CBitmap * tabBitmap
+
+CTabChildView * firstChild
+
+CTabChildView * lastChild
+
+CTabChildView * currentChild
+
+
+Detailed Description
+a tab view
+
+
Member Enumeration Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kPositionLeft
+
+ kPositionRight
+
+ kPositionTop
+
+ kPositionBottom
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kAlignCenter
+
+ kAlignLeft
+
+ kAlignRight
+
+ kAlignTop
+
+ kAlignBottom
+
+
+
+
+
+
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CTabView::CTabView
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CFrame *
+ parent ,
+
+
+
+
+ CBitmap *
+ tabBitmap ,
+
+
+
+
+ CBitmap *
+ background = 0,
+
+
+
+
+ long
+ tabPosition = kPositionTop,
+
+
+
+
+ long
+ style = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CTabView::CTabView
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CFrame *
+ parent ,
+
+
+
+
+ const CRect &
+ tabSize ,
+
+
+
+
+ CBitmap *
+ background = 0,
+
+
+
+
+ long
+ tabPosition = kPositionTop,
+
+
+
+
+ long
+ style = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CTabView::~CTabView
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ bool CTabView::addTab
+ (
+ CView *
+ view ,
+
+
+
+
+ const char *
+ name = 0,
+
+
+
+
+ CBitmap *
+ tabBitmap = 0
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CTabView::alignTabs
+ (
+ long
+ alignment = kAlignCenter
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+call this after you have added all tabs
+
+
+
+
+
+
+
+
+
+
+ CRect & CTabView::getTabViewSize
+ (
+ CRect &
+ rect
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CTabView::removeAllTabs
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CTabView::removeTab
+ (
+ CView *
+ view
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CTabView::selectTab
+ (
+ long
+ index
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CTabView::setCurrentChild
+ (
+ CTabChildView *
+ childView
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CTabView::setTabFontStyle
+ (
+ const CFont &
+ font ,
+
+
+
+
+ long
+ fontSize = 12,
+
+
+
+
+ CColor
+ selectedColor = kBlackCColor ,
+
+
+
+
+ CColor
+ deselectedColor = kWhiteCColor
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+call this after the tabs are added. Tabs added after this call will have the default font style.
+
+
+
+
+
+
+
+
+
+
+ void CTabView::valueChanged
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CControl *
+ pControl
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_tab_view.png b/vstgui.sf/vstgui/Documentation/html/class_c_tab_view.png
new file mode 100644
index 0000000..55691e8
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_tab_view.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_text_edit-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_text_edit-members.html
new file mode 100644
index 0000000..7897961
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_text_edit-members.html
@@ -0,0 +1,193 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CTextEdit Member List This is the complete list of members for CTextEdit , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backColor CParamDisplay [protected]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTextTransparencyEnabled CParamDisplay [protected]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ bWasReturnPressed CTextEdit
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CParamDisplay (const CRect &size, CBitmap *background=0, const long style=0)CParamDisplay
+ CReferenceCounter ()CReferenceCounter [inline]
+ CTextEdit (const CRect &size, CControlListener *listener, long tag, const char *txt=0, CBitmap *background=0, const long style=0)CTextEdit
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *pContext)CTextEdit [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ drawText (CDrawContext *pContext, char *string, CBitmap *newBack=0)CParamDisplay [protected]
+ editConvert CTextEdit [protected]
+ editConvert2 CTextEdit [protected]
+ endEdit ()CControl [virtual]
+ fontColor CParamDisplay [protected]
+ fontID CParamDisplay [protected]
+ forget ()CReferenceCounter [inline, virtual]
+ frameColor CParamDisplay [protected]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackColor () const CParamDisplay [inline]
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFont () const CParamDisplay [inline]
+ getFontColor () const CParamDisplay [inline]
+ getFrame () const CView [inline]
+ getFrameColor () const CParamDisplay [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getShadowColor () const CParamDisplay [inline]
+ getStyle () const CParamDisplay [inline]
+ getTag () const CControl [inline, virtual]
+ getText (char *txt) const CTextEdit [virtual]
+ getTextTransparency () const CParamDisplay [inline]
+ getTransparency () const CView [inline, virtual]
+ getTxtFace () const CParamDisplay [inline]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ horiTxtAlign CParamDisplay [protected]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CTextEdit [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CTextEdit [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ platformControl CTextEdit
+ platformFont CTextEdit [protected]
+ platformFontColor CTextEdit
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackColor (CColor color)CParamDisplay [virtual]
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setFont (CFont fontID)CParamDisplay [virtual]
+ setFontColor (CColor color)CParamDisplay [virtual]
+ setFrameColor (CColor color)CParamDisplay [virtual]
+ setHoriAlign (CHoriTxtAlign hAlign)CParamDisplay [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setShadowColor (CColor color)CParamDisplay [virtual]
+ setString2FloatConvert (void(*convert)(char *string, float &output))CParamDisplay [virtual]
+ setStringConvert (void(*convert)(float value, char *string))CParamDisplay [virtual]
+ setStringConvert (void(*convert)(float value, char *string, void *userDta), void *userData)CParamDisplay [virtual]
+ setStyle (long val)CParamDisplay [virtual]
+ setTag (long val)CControl [inline, virtual]
+ setText (char *txt)CTextEdit [virtual]
+ setTextEditConvert (void(*editConvert)(char *input, char *string))CTextEdit [virtual]
+ setTextEditConvert (void(*editConvert2)(char *input, char *string, void *userDta), void *userData)CTextEdit [virtual]
+ setTextTransparency (bool val)CParamDisplay [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setTxtFace (CTxtFace val)CParamDisplay [virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ shadowColor CParamDisplay [protected]
+ size CView [protected]
+ string2FloatConvert CParamDisplay [protected]
+ stringConvert CParamDisplay [protected]
+ stringConvert2 CParamDisplay [protected]
+ style CParamDisplay [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CTextEdit [virtual]
+ text CTextEdit [protected]
+ txtFace CParamDisplay [protected]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ userData CParamDisplay [protected]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CParamDisplay ()CParamDisplay [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CTextEdit ()CTextEdit [virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_text_edit.html b/vstgui.sf/vstgui/Documentation/html/class_c_text_edit.html
new file mode 100644
index 0000000..66145c1
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_text_edit.html
@@ -0,0 +1,619 @@
+
+
+VSTGUI: CTextEdit Class Reference
+
+
+
+
+
+
+CTextEdit Class Reference a text edit control
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CTextEdit:
+
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CTextEdit (const CRect &size , CControlListener *listener , long tag , const char *txt=0, CBitmap *background=0, const long style =0)
+
+virtual ~CTextEdit ()
+
+virtual void setText (char *txt)
+
+virtual void getText (char *txt) const
+
+virtual void draw (CDrawContext *pContext)
+
+ called if the view should draw itself
+virtual void mouse (CDrawContext *pContext, CPoint &where, long button=-1)
+
+ called if a mouse click event occurs
+virtual void setTextEditConvert (void(*editConvert )(char *input, char *string))
+
+virtual void setTextEditConvert (void(*editConvert2 )(char *input, char *string, void *userDta), void *userData )
+
+virtual void takeFocus (CDrawContext *pContext=0)
+
+ called if view should take focus
+virtual void looseFocus (CDrawContext *pContext=0)
+
+ called if view should loose focus
+Public Attributes
+void * platformFontColor
+
+void * platformControl
+
+bool bWasReturnPressed
+
+Protected Attributes
+void * platformFont
+
+char text [256]
+
+void(* editConvert )(char *input, char *string)
+
+void(* editConvert2 )(char *input, char *string, void *userData )
+
+
+Detailed Description
+a text edit control
+
+Define a rectangle view where a text-value can be displayed and edited with a given font and color. The user can specify its convert function (from char to char). The text-value is centered in the given rect. A pixmap can be used as background.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CTextEdit::CTextEdit
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ const char *
+ txt = 0,
+
+
+
+
+ CBitmap *
+ background = 0,
+
+
+
+
+ const long
+ style = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CTextEdit::~CTextEdit
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CTextEdit::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Reimplemented from CParamDisplay .
+
+
+
+
+
+
+
+
+ void CTextEdit::getText
+ (
+ char *
+ txt
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CTextEdit::looseFocus
+ (
+ CDrawContext *
+ pContext = 0
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if view should loose focus
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CTextEdit::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CTextEdit::setText
+ (
+ char *
+ txt
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CTextEdit::setTextEditConvert
+ (
+ void(*)(char *input, char *string, void *userDta)
+ editConvert2 ,
+
+
+
+
+ void *
+ userData
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CTextEdit::setTextEditConvert
+ (
+ void(*)(char *input, char *string)
+ editConvert
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CTextEdit::takeFocus
+ (
+ CDrawContext *
+ pContext = 0
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if view should take focus
+
+
+
+Reimplemented from CView .
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_text_edit.png b/vstgui.sf/vstgui/Documentation/html/class_c_text_edit.png
new file mode 100644
index 0000000..4fc0df5
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_text_edit.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_text_label-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_text_label-members.html
new file mode 100644
index 0000000..edb7de8
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_text_label-members.html
@@ -0,0 +1,186 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CTextLabel Member List This is the complete list of members for CTextLabel , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backColor CParamDisplay [protected]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTextTransparencyEnabled CParamDisplay [protected]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CParamDisplay (const CRect &size, CBitmap *background=0, const long style=0)CParamDisplay
+ CReferenceCounter ()CReferenceCounter [inline]
+ CTextLabel (const CRect &size, const char *txt=0, CBitmap *background=0, const long style=0)CTextLabel
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *pContext)CTextLabel [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ drawText (CDrawContext *pContext, char *string, CBitmap *newBack=0)CParamDisplay [protected]
+ endEdit ()CControl [virtual]
+ fontColor CParamDisplay [protected]
+ fontID CParamDisplay [protected]
+ forget ()CReferenceCounter [inline, virtual]
+ frameColor CParamDisplay [protected]
+ frameToLocal (CPoint &point) const CView [virtual]
+ freeText ()CTextLabel [protected]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackColor () const CParamDisplay [inline]
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFont () const CParamDisplay [inline]
+ getFontColor () const CParamDisplay [inline]
+ getFrame () const CView [inline]
+ getFrameColor () const CParamDisplay [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getShadowColor () const CParamDisplay [inline]
+ getStyle () const CParamDisplay [inline]
+ getTag () const CControl [inline, virtual]
+ getText () const CTextLabel [virtual]
+ getTextTransparency () const CParamDisplay [inline]
+ getTransparency () const CView [inline, virtual]
+ getTxtFace () const CParamDisplay [inline]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ horiTxtAlign CParamDisplay [protected]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CView [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackColor (CColor color)CParamDisplay [virtual]
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setFont (CFont fontID)CParamDisplay [virtual]
+ setFontColor (CColor color)CParamDisplay [virtual]
+ setFrameColor (CColor color)CParamDisplay [virtual]
+ setHoriAlign (CHoriTxtAlign hAlign)CParamDisplay [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setShadowColor (CColor color)CParamDisplay [virtual]
+ setString2FloatConvert (void(*convert)(char *string, float &output))CParamDisplay [virtual]
+ setStringConvert (void(*convert)(float value, char *string))CParamDisplay [virtual]
+ setStringConvert (void(*convert)(float value, char *string, void *userDta), void *userData)CParamDisplay [virtual]
+ setStyle (long val)CParamDisplay [virtual]
+ setTag (long val)CControl [inline, virtual]
+ setText (const char *txt)CTextLabel [virtual]
+ setTextTransparency (bool val)CParamDisplay [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setTxtFace (CTxtFace val)CParamDisplay [virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ shadowColor CParamDisplay [protected]
+ size CView [protected]
+ string2FloatConvert CParamDisplay [protected]
+ stringConvert CParamDisplay [protected]
+ stringConvert2 CParamDisplay [protected]
+ style CParamDisplay [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ text CTextLabel [protected]
+ txtFace CParamDisplay [protected]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ userData CParamDisplay [protected]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CParamDisplay ()CParamDisplay [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CTextLabel ()CTextLabel
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_text_label.html b/vstgui.sf/vstgui/Documentation/html/class_c_text_label.html
new file mode 100644
index 0000000..f46cea1
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_text_label.html
@@ -0,0 +1,294 @@
+
+
+VSTGUI: CTextLabel Class Reference
+
+
+
+
+
+
+CTextLabel Class Reference a text label
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CTextLabel:
+
+
+
+
+
+
+
+List of all members.
+Detailed Description
+a text label
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CTextLabel::CTextLabel
+ (
+ const CRect &
+ size ,
+
+
+
+
+ const char *
+ txt = 0,
+
+
+
+
+ CBitmap *
+ background = 0,
+
+
+
+
+ const long
+ style = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CTextLabel::~CTextLabel
+ (
+
+ )
+
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CTextLabel::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Reimplemented from CParamDisplay .
+
+
+
+
+
+
+
+
+ void CTextLabel::freeText
+ (
+
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ const char * CTextLabel::getText
+ (
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CTextLabel::setText
+ (
+ const char *
+ txt
+ )
+ [virtual]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_text_label.png b/vstgui.sf/vstgui/Documentation/html/class_c_text_label.png
new file mode 100644
index 0000000..99867a6
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_text_label.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider-members.html
new file mode 100644
index 0000000..e6bf98a
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider-members.html
@@ -0,0 +1,173 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CVerticalSlider Member List This is the complete list of members for CVerticalSlider , including all inherited members.
+ attached (CView *parent)CSlider [virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ bDrawTransparentEnabled CSlider [protected]
+ beginEdit ()CControl [virtual]
+ bFreeClick CSlider [protected]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CSlider (const CRect &size, CControlListener *listener, long tag, long iMinPos, long iMaxPos, CBitmap *handle, CBitmap *background, CPoint &offset, const long style=kLeft|kHorizontal)CSlider
+ CSlider (const CRect &rect, CControlListener *listener, long tag, CPoint &offsetHandle, long rangeHandle, CBitmap *handle, CBitmap *background, CPoint &offset, const long style=kLeft|kHorizontal)CSlider
+ CVerticalSlider (const CRect &size, CControlListener *listener, long tag, long iMinPos, long iMaxPos, CBitmap *handle, CBitmap *background, CPoint &offset, const long style=kBottom)CVerticalSlider
+ CVerticalSlider (const CRect &rect, CControlListener *listener, long tag, CPoint &offsetHandle, long rangeHandle, CBitmap *handle, CBitmap *background, CPoint &offset, const long style=kBottom)CVerticalSlider
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CSlider [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getFreeClick () const CSlider [inline, virtual]
+ getHandle () const CSlider [inline, virtual]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ getZoomFactor () const CSlider [inline, virtual]
+ heightControl CSlider [protected]
+ heightOfSlider CSlider [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ maxTmp CSlider [protected]
+ minPos CSlider [protected]
+ minTmp CSlider [protected]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CSlider [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CSlider [protected]
+ offsetHandle CSlider [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CSlider [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CSlider [virtual]
+ CControl::onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pHandle CSlider [protected]
+ pOScreen CSlider [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ rangeHandle CSlider [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CSlider [virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setDrawTransparentHandle (bool val)CSlider [inline, virtual]
+ setFreeClick (bool val)CSlider [inline, virtual]
+ setHandle (CBitmap *pHandle)CSlider [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOffsetHandle (CPoint &val)CSlider [virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ setZoomFactor (float val)CSlider [inline, virtual]
+ size CView [protected]
+ style CSlider [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ widthControl CSlider [protected]
+ widthOfSlider CSlider [protected]
+ zoomFactor CSlider [protected]
+ ~CControl ()CControl [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CSlider ()CSlider [virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider.html b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider.html
new file mode 100644
index 0000000..4c04543
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider.html
@@ -0,0 +1,226 @@
+
+
+VSTGUI: CVerticalSlider Class Reference
+
+
+
+
+
+
+CVerticalSlider Class Reference a vertical slider control
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CVerticalSlider:
+
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CVerticalSlider (const CRect &size , CControlListener *listener , long tag , long iMinPos, long iMaxPos, CBitmap *handle, CBitmap *background, CPoint &offset , const long style =kBottom)
+
+ CVerticalSlider (const CRect &rect, CControlListener *listener , long tag , CPoint &offsetHandle , long rangeHandle , CBitmap *handle, CBitmap *background, CPoint &offset , const long style =kBottom)
+
+
+Detailed Description
+a vertical slider control
+
+This is the vertical slider. See CSlider .
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CVerticalSlider::CVerticalSlider
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ long
+ iMinPos ,
+
+
+
+
+ long
+ iMaxPos ,
+
+
+
+
+ CBitmap *
+ handle ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset ,
+
+
+
+
+ const long
+ style = kBottom
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CVerticalSlider::CVerticalSlider
+ (
+ const CRect &
+ rect ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CPoint &
+ offsetHandle ,
+
+
+
+
+ long
+ rangeHandle ,
+
+
+
+
+ CBitmap *
+ handle ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset ,
+
+
+
+
+ const long
+ style = kBottom
+
+
+
+ )
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider.png b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider.png
new file mode 100644
index 0000000..fc50710
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_slider.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch-members.html
new file mode 100644
index 0000000..ac85e2a
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch-members.html
@@ -0,0 +1,151 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CVerticalSwitch Member List This is the complete list of members for CVerticalSwitch , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CVerticalSwitch (const CRect &size, CControlListener *listener, long tag, CBitmap *background, CPoint &offset)CVerticalSwitch
+ CVerticalSwitch (const CRect &size, CControlListener *listener, long tag, long subPixmaps, CCoord heightOfOneImage, long iMaxPositions, CBitmap *background, CPoint &offset)CVerticalSwitch
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *)CVerticalSwitch [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ heightOfOneImage CVerticalSwitch [protected]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ iMaxPositions CVerticalSwitch [protected]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long button=-1)CVerticalSwitch [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offset CVerticalSwitch [protected]
+ oldValue CControl [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CControl [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ subPixmaps CVerticalSwitch [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CVerticalSwitch ()CVerticalSwitch [virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch.html b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch.html
new file mode 100644
index 0000000..a55c6ac
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch.html
@@ -0,0 +1,412 @@
+
+
+VSTGUI: CVerticalSwitch Class Reference
+
+
+
+
+
+
+CVerticalSwitch Class Reference a vertical switch control
+More...
+
+#include <vstcontrols.h>
+
+
Inheritance diagram for CVerticalSwitch:
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CVerticalSwitch (const CRect &size , CControlListener *listener , long tag , CBitmap *background, CPoint &offset )
+
+ CVerticalSwitch (const CRect &size , CControlListener *listener , long tag , long subPixmaps , CCoord heightOfOneImage , long iMaxPositions , CBitmap *background, CPoint &offset )
+
+virtual ~CVerticalSwitch ()
+
+virtual void draw (CDrawContext *)
+
+ called if the view should draw itself
+virtual void mouse (CDrawContext *pContext, CPoint &where, long button=-1)
+
+ called if a mouse click event occurs
+Protected Attributes
+CPoint offset
+
+long subPixmaps
+
+CCoord heightOfOneImage
+
+long iMaxPositions
+
+
+Detailed Description
+a vertical switch control
+
+Define a switch with a given number of positions, the current position is defined by the position of the last click on this object (the object is divided in its height by the number of position). Each position has its subpixmap, each subpixmap is stacked in the given handle pixmap. By clicking Alt+Left Mouse the default value is used.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CVerticalSwitch::CVerticalSwitch
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CVerticalSwitch::CVerticalSwitch
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CControlListener *
+ listener ,
+
+
+
+
+ long
+ tag ,
+
+
+
+
+ long
+ subPixmaps ,
+
+
+
+
+ CCoord
+ heightOfOneImage ,
+
+
+
+
+ long
+ iMaxPositions ,
+
+
+
+
+ CBitmap *
+ background ,
+
+
+
+
+ CPoint &
+ offset
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CVerticalSwitch::~CVerticalSwitch
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CVerticalSwitch::draw
+ (
+ CDrawContext *
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+
+
+
+
+
+
+ void CVerticalSwitch::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ button = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch.png b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch.png
new file mode 100644
index 0000000..2159a80
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_vertical_switch.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_view-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_view-members.html
new file mode 100644
index 0000000..2d7ebe3
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_view-members.html
@@ -0,0 +1,107 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CView Member List This is the complete list of members for CView , including all inherited members.
+ attached (CView *view)CView [inline, virtual]
+ bDirty CView [protected]
+ bMouseEnabled CView [protected]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl classCView [friend]
+ CFrame classCView [friend]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ draw (CDrawContext *pContext)CView [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getParentView () const CView [inline]
+ getTransparency () const CView [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CView [inline, virtual]
+ isTypeOf (const char *s) const CView [inline, virtual]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CView [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CView [inline, virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setDirty (const bool val=true)CView [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ size CView [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ wantsFocus () const CView [inline, virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_view.html b/vstgui.sf/vstgui/Documentation/html/class_c_view.html
new file mode 100644
index 0000000..2c07d5c
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_view.html
@@ -0,0 +1,2253 @@
+
+
+VSTGUI: CView Class Reference
+
+
+
+
+
+
+CView Class Reference #include <vstgui.h>
+
+
Inheritance diagram for CView:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+List of all members.
+
+Public Member Functions
+ CView (const CRect &size )
+
+virtual ~CView ()
+
+virtual void draw (CDrawContext *pContext)
+
+ called if the view should draw itself
+virtual void drawRect (CDrawContext *pContext, const CRect &updateRect)
+
+ called if the view should draw itself
+virtual bool checkUpdate (CRect &updateRect) const
+
+virtual void mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)
+
+ called if a mouse click event occurs
+virtual void setBackground (CBitmap *background)
+
+ set the background image of this view
+virtual CBitmap * getBackground () const
+
+ get the background image of this view
+virtual long onKeyDown (VstKeyCode &keyCode)
+
+ called if a key down event occurs and this view has focus
+virtual long onKeyUp (VstKeyCode &keyCode)
+
+ called if a key up event occurs and this view has focus
+virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+
+ called if a mouse wheel event is happening over this view
+virtual bool onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)
+
+ called if a mouse wheel event is happening over this view
+virtual bool onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)
+
+ called if a drag is dropped onto this view
+virtual void onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)
+
+ called if a drag is entering this view
+virtual void onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)
+
+ called if a drag is leaving this view
+virtual void onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)
+
+ called if a drag is current moved over this view
+virtual void looseFocus (CDrawContext *pContext=0)
+
+ called if view should loose focus
+virtual void takeFocus (CDrawContext *pContext=0)
+
+ called if view should take focus
+virtual bool isDirty () const
+
+ check if view is dirty
+virtual void setDirty (const bool val=true)
+
+ set the view to dirty so that it is redrawn in the next idle. Thread Safe !
+virtual void setMouseEnabled (const bool bEnable=true)
+
+ turn on/off mouse usage for this view
+virtual bool getMouseEnabled () const
+
+ get the state of wheather this view uses the mouse or not
+virtual void setMouseableArea (const CRect &rect)
+
+ set the area in which the view reacts to the mouse
+virtual CRect & getMouseableArea (CRect &rect) const
+
+ get the area in which the view reacts to the mouse
+virtual bool hitTest (const CPoint &where, const long buttons=-1)
+
+ check if where hits this view
+virtual void setTransparency (bool val)
+
+ set views transparent state
+virtual bool getTransparency () const
+
+ is view transparent ?
+CCoord getHeight () const
+
+ get the height of the view
+CCoord getWidth () const
+
+ get the width of the view
+virtual void setViewSize (CRect &rect)
+
+ set views size
+virtual CRect & getViewSize (CRect &rect) const
+
+ returns the current view size
+virtual bool removed (CView *parent)
+
+ view is removed from parent view
+virtual bool attached (CView *view)
+
+ view is attached to a parent view
+virtual void getMouseLocation (CDrawContext *context, CPoint &point)
+
+ get current mouse location in local view coordinates
+virtual CPoint & frameToLocal (CPoint &point) const
+
+ conversion from frame coordinates to local view coordinates
+virtual CPoint & localToFrame (CPoint &point) const
+
+ conversion from local view coordinates to frame coordinates
+bool getAttributeSize (const CViewAttributeID id, long &outSize) const
+
+ get the size of an attribute
+bool getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const
+
+ get an attribute
+bool setAttribute (const CViewAttributeID id, const long inSize, void *inData)
+
+ set an attribute
+CView * getParentView () const
+
+CFrame * getFrame () const
+
+virtual void * getEditor () const
+
+virtual long notify (CView *sender, const char *message)
+
+void redraw ()
+
+virtual void redrawRect (CDrawContext *context, const CRect &rect)
+
+virtual bool wantsFocus () const
+
+ check if view supports focus
+virtual void setWantsFocus (bool state)
+
+ set focus support on/off
+virtual bool isTypeOf (const char *s) const
+
+Protected Member Functions
+virtual void update (CDrawContext *pContext)
+
+Protected Attributes
+CRect size
+
+CRect mouseableArea
+
+CFrame * pParentFrame
+
+CView * pParentView
+
+bool bDirty
+
+bool bMouseEnabled
+
+bool bTransparencyEnabled
+
+bool bWantsFocus
+
+CBitmap * pBackground
+
+CAttributeListEntry * pAttributeList
+
+Friends
+class CControl
+
+class CFrame
+
+class CViewContainer
+
+
+Detailed Description
+base class of all view objects
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ CView::CView
+ (
+ const CRect &
+ size
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CView::~CView
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ virtual bool CView::attached
+ (
+ CView *
+ view
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual bool CView::checkUpdate
+ (
+ CRect &
+ updateRect
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CView::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Reimplemented in CScrollbar , CTabButton , CSplashScreenView , CControl , COnOffButton , CParamDisplay , CTextLabel , CTextEdit , COptionMenu , CKnob , CAnimKnob , CVerticalSwitch , CHorizontalSwitch , CRockerSwitch , CMovieBitmap , CMovieButton , CAutoAnimation , CSlider , CSpecialDigit , CKickButton , CSplashScreen , CVuMeter , CViewContainer , and CFrame .
+
+
+
+
+
+
+
+
+ virtual void CView::drawRect
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CRect &
+ updateRect
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Reimplemented in CViewContainer , and CFrame .
+
+
+
+
+
+
+
+
+ CPoint & CView::frameToLocal
+ (
+ CPoint &
+ point
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+conversion from frame coordinates to local view coordinates
+
+
+
+Reimplemented in CViewContainer .
+
+
+
+
+
+
+
+
+ bool CView::getAttribute
+ (
+ const CViewAttributeID
+ id ,
+
+
+
+
+ const long
+ inSize ,
+
+
+
+
+ void *
+ outData ,
+
+
+
+
+ long &
+ outSize
+
+
+
+ )
+ const
+
+
+
+
+
+
+
+
+
+
+
+
+
+get an attribute
+
+
Parameters:
+
+ id the ID of the Attribute
+ inSize the size of the outData pointer
+ outData a pointer where to copy the attribute data
+ outSize the size in bytes which was copied into outData
+
+
+
+
+
+
+
+
+
+
+
+ bool CView::getAttributeSize
+ (
+ const CViewAttributeID
+ id ,
+
+
+
+
+ long &
+ outSize
+
+
+
+ )
+ const
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the size of an attribute
+
+
Parameters:
+
+ id the ID of the Attribute
+ outSize on return the size of the attribute
+
+
+
+
+
+
+
+
+
+
+
+ virtual CBitmap * CView::getBackground
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the background image of this view
+
+
+
+
+
+
+
+
+
+
+ void * CView::getEditor
+ (
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Reimplemented in CFrame .
+
+
+
+
+
+
+
+
+ CFrame * CView::getFrame
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CCoord CView::getHeight
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the height of the view
+
+
+
+
+
+
+
+
+
+
+ virtual CRect & CView::getMouseableArea
+ (
+ CRect &
+ rect
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the area in which the view reacts to the mouse
+
+
+
+
+
+
+
+
+
+
+ virtual bool CView::getMouseEnabled
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the state of wheather this view uses the mouse or not
+
+
+
+
+
+
+
+
+
+
+ void CView::getMouseLocation
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ CPoint &
+ point
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get current mouse location in local view coordinates
+
+
+
+
+
+
+
+
+
+
+ CView * CView::getParentView
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual bool CView::getTransparency
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+is view transparent ?
+
+
+
+
+
+
+
+
+
+
+ virtual CRect & CView::getViewSize
+ (
+ CRect &
+ rect
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+returns the current view size
+
+
+
+
+
+
+
+
+
+
+ CCoord CView::getWidth
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the width of the view
+
+
+
+
+
+
+
+
+
+
+ virtual bool CView::hitTest
+ (
+ const CPoint &
+ where ,
+
+
+
+
+ const long
+ buttons = -1
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual bool CView::isDirty
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual bool CView::isTypeOf
+ (
+ const char *
+ s
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ CPoint & CView::localToFrame
+ (
+ CPoint &
+ point
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+conversion from local view coordinates to frame coordinates
+
+
+
+Reimplemented in CViewContainer .
+
+
+
+
+
+
+
+
+ void CView::looseFocus
+ (
+ CDrawContext *
+ pContext = 0
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CView::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ buttons = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented in CScrollbar , CTabButton , CSplashScreenView , COnOffButton , CTextEdit , COptionMenu , CKnob , CVerticalSwitch , CHorizontalSwitch , CRockerSwitch , CMovieButton , CAutoAnimation , CSlider , CKickButton , CSplashScreen , CViewContainer , and CFrame .
+
+
+
+
+
+
+
+
+ long CView::notify
+ (
+ CView *
+ sender ,
+
+
+
+
+ const char *
+ message
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CView::onDragEnter
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ CDragContainer *
+ drag ,
+
+
+
+
+ const CPoint &
+ where
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CView::onDragLeave
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ CDragContainer *
+ drag ,
+
+
+
+
+ const CPoint &
+ where
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a drag is leaving this view
+
+
+
+Reimplemented in CViewContainer .
+
+
+
+
+
+
+
+
+ virtual void CView::onDragMove
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ CDragContainer *
+ drag ,
+
+
+
+
+ const CPoint &
+ where
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a drag is current moved over this view
+
+
+
+Reimplemented in CViewContainer .
+
+
+
+
+
+
+
+
+ virtual bool CView::onDrop
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ CDragContainer *
+ drag ,
+
+
+
+
+ const CPoint &
+ where
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a drag is dropped onto this view
+
+
+
+Reimplemented in CViewContainer .
+
+
+
+
+
+
+
+
+ long CView::onKeyDown
+ (
+ VstKeyCode &
+ keyCode
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ long CView::onKeyUp
+ (
+ VstKeyCode &
+ keyCode
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a key up event occurs and this view has focus
+
+
+
+Reimplemented in CViewContainer , and CFrame .
+
+
+
+
+
+
+
+
+ bool CView::onWheel
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ where ,
+
+
+
+
+ const CMouseWheelAxis
+ axis ,
+
+
+
+
+ float
+ distance
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CView::onWheel
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ where ,
+
+
+
+
+ float
+ distance
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CView::redraw
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void CView::redrawRect
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ const CRect &
+ rect
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual bool CView::removed
+ (
+ CView *
+ parent
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CView::setAttribute
+ (
+ const CViewAttributeID
+ id ,
+
+
+
+
+ const long
+ inSize ,
+
+
+
+
+ void *
+ inData
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+set an attribute
+
+copies data into the attribute. If it does not exist, creates a new attribute.
Parameters:
+
+ id the ID of the Attribute
+ inSize the size of the outData pointer
+ inData a pointer to the data
+
+
+
+
+
+
+
+
+
+
+
+ void CView::setBackground
+ (
+ CBitmap *
+ background
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the background image of this view
+
+
+
+
+
+
+
+
+
+
+ virtual void CView::setDirty
+ (
+ const bool
+ val = true
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the view to dirty so that it is redrawn in the next idle. Thread Safe !
+
+
+
+Reimplemented in CControl , and CVuMeter .
+
+
+
+
+
+
+
+
+ virtual void CView::setMouseableArea
+ (
+ const CRect &
+ rect
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the area in which the view reacts to the mouse
+
+
+
+
+
+
+
+
+
+
+ virtual void CView::setMouseEnabled
+ (
+ const bool
+ bEnable = true
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+turn on/off mouse usage for this view
+
+
+
+
+
+
+
+
+
+
+ virtual void CView::setTransparency
+ (
+ bool
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+set views transparent state
+
+
+
+
+
+
+
+
+
+
+ void CView::setViewSize
+ (
+ CRect &
+ rect
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CView::setWantsFocus
+ (
+ bool
+ state
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+set focus support on/off
+
+
+
+
+
+
+
+
+
+
+ void CView::takeFocus
+ (
+ CDrawContext *
+ pContext = 0
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CView::update
+ (
+ CDrawContext *
+ pContext
+ )
+ [protected, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual bool CView::wantsFocus
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+check if view supports focus
+
+
+
+
+Friends And Related Function Documentation
+
+
+
+
+
+
+
+
+
+ friend class CFrame [friend]
+
+
+
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_view.png b/vstgui.sf/vstgui/Documentation/html/class_c_view.png
new file mode 100644
index 0000000..70496b0
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_view.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_view_container-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_view_container-members.html
new file mode 100644
index 0000000..1dcf42a
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_view_container-members.html
@@ -0,0 +1,140 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CViewContainer Member List This is the complete list of members for CViewContainer , including all inherited members.
+ addView (CView *pView)CViewContainer [virtual]
+ addView (CView *pView, CRect &mouseableArea, bool mouseEnabled=true)CViewContainer [virtual]
+ advanceNextFocusView (CView *oldFocus, bool reverse=false)CViewContainer [virtual]
+ attached (CView *view)CViewContainer [virtual]
+ backgroundColor CViewContainer [protected]
+ backgroundOffset CViewContainer [protected]
+ bDirty CView [protected]
+ bDrawInOffscreen CViewContainer [protected]
+ bMouseEnabled CView [protected]
+ bTransparencyEnabled CView [protected]
+ bWantsFocus CView [protected]
+ CControl classCView [friend]
+ CFrame classCView [friend]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ currentDragView CViewContainer [protected]
+ CView (const CRect &size)CView
+ CViewContainer (const CRect &size, CFrame *pParent, CBitmap *pBackground=0)CViewContainer
+ CView::CViewContainer classCView [friend]
+ draw (CDrawContext *pContext)CViewContainer [virtual]
+ drawBackgroundRect (CDrawContext *pContext, CRect &_updateRect)CViewContainer [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CViewContainer [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CViewContainer [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getBackgroundColor () const CViewContainer [inline, virtual]
+ getBackgroundOffset () const CViewContainer [inline, virtual]
+ getCurrentView () const CViewContainer [virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getMode () const CViewContainer [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getNbViews () const CViewContainer [virtual]
+ getParentView () const CView [inline]
+ getTransparency () const CView [inline, virtual]
+ getView (long index) const CViewContainer [virtual]
+ getViewAt (const CPoint &where, bool deep=false) const CViewContainer [virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CViewContainer [virtual]
+ hitTestSubViews (const CPoint &where, const long buttons=-1)CViewContainer [protected]
+ isChild (CView *pView) const CViewContainer [virtual]
+ isDirty () const CViewContainer [virtual]
+ isTypeOf (const char *s) const CView [inline, virtual]
+ kNormalUpdate enum valueCViewContainer
+ kOnlyDirtyUpdate enum valueCViewContainer
+ localToFrame (CPoint &point) const CViewContainer [virtual]
+ looseFocus (CDrawContext *pContext=0)CViewContainer [virtual]
+ mode CViewContainer [protected]
+ modifyDrawContext (CCoord save[4], CDrawContext *pContext)CViewContainer
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CViewContainer [virtual]
+ mouseableArea CView [protected]
+ notify (CView *sender, const char *message)CViewContainer [virtual]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CViewContainer [virtual]
+ onKeyDown (VstKeyCode &keyCode)CViewContainer [virtual]
+ onKeyUp (VstKeyCode &keyCode)CViewContainer [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CViewContainer [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CViewContainer [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pFirstView CViewContainer [protected]
+ pLastView CViewContainer [protected]
+ pOffscreenContext CViewContainer [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CViewContainer [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removeAll (const bool &withForget=true)CViewContainer [virtual]
+ removed (CView *parent)CViewContainer [virtual]
+ removeView (CView *pView, const bool &withForget=true)CViewContainer [virtual]
+ restoreDrawContext (CDrawContext *pContext, CCoord save[4])CViewContainer
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackgroundColor (const CColor color)CViewContainer [virtual]
+ setBackgroundOffset (const CPoint &p)CViewContainer [inline, virtual]
+ setDirty (const bool val=true)CView [inline, virtual]
+ setMode (long val)CViewContainer [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setViewSize (CRect &rect)CViewContainer [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ size CView [protected]
+ takeFocus (CDrawContext *pContext=0)CViewContainer [virtual]
+ update (CDrawContext *pContext)CViewContainer [virtual]
+ useOffscreen (bool b)CViewContainer [virtual]
+ wantsFocus () const CView [inline, virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+ ~CViewContainer ()CViewContainer [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_view_container.html b/vstgui.sf/vstgui/Documentation/html/class_c_view_container.html
new file mode 100644
index 0000000..1303cd9
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_view_container.html
@@ -0,0 +1,2169 @@
+
+
+VSTGUI: CViewContainer Class Reference
+
+
+
+
+
+
+CViewContainer Class Reference Container Class of CView objects.
+More...
+
+#include <vstgui.h>
+
+
Inheritance diagram for CViewContainer:
+
+
+
+
+
+
+
+
+
+List of all members.
+
+Public Types
+enum { kNormalUpdate = 0,
+kOnlyDirtyUpdate
+ }
+
+Public Member Functions
+ CViewContainer (const CRect &size , CFrame *pParent, CBitmap *pBackground =0)
+
+virtual ~CViewContainer ()
+
+virtual void addView (CView *pView)
+
+ add a child view
+virtual void addView (CView *pView, CRect &mouseableArea , bool mouseEnabled=true)
+
+ add a child view
+virtual void removeView (CView *pView, const bool &withForget=true)
+
+ remove a child view
+virtual void removeAll (const bool &withForget=true)
+
+ remove all child views
+virtual bool isChild (CView *pView) const
+
+ check if pView is a child view of this container
+virtual long getNbViews () const
+
+ get the number of child views
+virtual CView * getView (long index) const
+
+ get the child view at index
+virtual void setBackgroundColor (const CColor color)
+
+ set the background color (will only be drawn if this container is not set to transparent and does not have a background bitmap)
+virtual CColor getBackgroundColor () const
+
+ get the background color
+virtual void setBackgroundOffset (const CPoint &p)
+
+ set the offset of the background bitmap
+virtual const CPoint & getBackgroundOffset () const
+
+ get the offset of the background bitmap
+virtual void drawBackgroundRect (CDrawContext *pContext, CRect &_updateRect)
+
+ draw the background
+virtual void setMode (long val)
+
+ set the update mode
+virtual long getMode () const
+
+ get the update mode
+virtual void useOffscreen (bool b)
+
+ turn on/off using an offscreen
+virtual CView * getCurrentView () const
+
+ get the current view under the mouse
+virtual CView * getViewAt (const CPoint &where, bool deep=false) const
+
+ get the view at point where
+void modifyDrawContext (CCoord save[4], CDrawContext *pContext)
+
+void restoreDrawContext (CDrawContext *pContext, CCoord save[4])
+
+virtual void draw (CDrawContext *pContext)
+
+virtual void drawRect (CDrawContext *pContext, const CRect &updateRect)
+
+virtual void mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)
+
+ called if a mouse click event occurs
+virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+
+ called if a mouse wheel event is happening over this view
+virtual bool onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)
+
+ called if a mouse wheel event is happening over this view
+virtual void update (CDrawContext *pContext)
+
+virtual bool hitTest (const CPoint &where, const long buttons=-1)
+
+ check if where hits this view
+virtual long onKeyDown (VstKeyCode &keyCode)
+
+ called if a key down event occurs and this view has focus
+virtual long onKeyUp (VstKeyCode &keyCode)
+
+ called if a key up event occurs and this view has focus
+virtual long notify (CView *sender, const char *message)
+
+virtual bool onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)
+
+ called if a drag is dropped onto this view
+virtual void onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)
+
+ called if a drag is entering this view
+virtual void onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)
+
+ called if a drag is leaving this view
+virtual void onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)
+
+ called if a drag is current moved over this view
+virtual void looseFocus (CDrawContext *pContext=0)
+
+ called if view should loose focus
+virtual void takeFocus (CDrawContext *pContext=0)
+
+ called if view should take focus
+virtual bool advanceNextFocusView (CView *oldFocus, bool reverse=false)
+
+virtual bool isDirty () const
+
+ check if view is dirty
+virtual void setViewSize (CRect &rect)
+
+virtual bool removed (CView *parent)
+
+ view is removed from parent view
+virtual bool attached (CView *view)
+
+ view is attached to a parent view
+virtual CPoint & frameToLocal (CPoint &point) const
+
+ conversion from frame coordinates to local view coordinates
+virtual CPoint & localToFrame (CPoint &point) const
+
+ conversion from local view coordinates to frame coordinates
+virtual void redrawRect (CDrawContext *context, const CRect &rect)
+
+Protected Member Functions
+bool hitTestSubViews (const CPoint &where, const long buttons=-1)
+
+Protected Attributes
+CCView * pFirstView
+
+CCView * pLastView
+
+long mode
+
+COffscreenContext * pOffscreenContext
+
+CColor backgroundColor
+
+CPoint backgroundOffset
+
+bool bDrawInOffscreen
+
+CView * currentDragView
+
+
+Detailed Description
+Container Class of CView objects.
+
+
Member Enumeration Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kNormalUpdate
+this mode redraws the whole container if something is dirty
+ kOnlyDirtyUpdate
+this mode only redraws the views which are dirty
+
+
+
+
+
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CViewContainer::CViewContainer
+ (
+ const CRect &
+ rect ,
+
+
+
+
+ CFrame *
+ pParent ,
+
+
+
+
+ CBitmap *
+ pBackground = 0
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+CViewContainer constructor.
Parameters:
+
+ rect the size of the container
+ pParent the parent CFrame
+ pBackground the background bitmap, can be NULL
+
+
+
+
+
+
+
+
+
+
+
+ CViewContainer::~CViewContainer
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CViewContainer::addView
+ (
+ CView *
+ pView ,
+
+
+
+
+ CRect &
+ mouseableArea ,
+
+
+
+
+ bool
+ mouseEnabled = true
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+add a child view
+
+
Parameters:
+
+ pView the view object to add to this container
+ mouseableArea the view area in where the view will get mouse events
+ mouseEnabled bool to set if view will get mouse events
+
+
+
+
+
+
+
+
+
+
+
+ void CViewContainer::addView
+ (
+ CView *
+ pView
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+add a child view
+
+
Parameters:
+
+ pView the view object to add to this container
+
+
+
+
+Reimplemented in CScrollView .
+
+
+
+
+
+
+
+
+ bool CViewContainer::advanceNextFocusView
+ (
+ CView *
+ oldFocus ,
+
+
+
+
+ bool
+ reverse = false
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Reimplemented in CFrame .
+
+
+
+
+
+
+
+
+ bool CViewContainer::attached
+ (
+ CView *
+ view
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+view is attached to a parent view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CViewContainer::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Parameters:
+
+ pContext the context which to use to draw this container and its subviews
+
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CFrame .
+
+
+
+
+
+
+
+
+ void CViewContainer::drawBackgroundRect
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CRect &
+ _updateRect
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+draw the background
+
+
Parameters:
+
+ pContext the context which to use to draw the background
+ _updateRect the area which to draw
+
+
+
+
+Reimplemented in CScrollView .
+
+
+
+
+
+
+
+
+ void CViewContainer::drawRect
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CRect &
+ _updateRect
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Parameters:
+
+ pContext the context which to use to draw
+ _updateRect the area which to draw
+
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CFrame .
+
+
+
+
+
+
+
+
+ CPoint & CViewContainer::frameToLocal
+ (
+ CPoint &
+ point
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+conversion from frame coordinates to local view coordinates
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ virtual CColor CViewContainer::getBackgroundColor
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the background color
+
+
+
+
+
+
+
+
+
+
+ virtual const CPoint & CViewContainer::getBackgroundOffset
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the offset of the background bitmap
+
+
+
+
+
+
+
+
+
+
+ CView * CViewContainer::getCurrentView
+ (
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the current view under the mouse
+
+
+
+Reimplemented in CFrame .
+
+
+
+
+
+
+
+
+ virtual long CViewContainer::getMode
+ (
+
+ )
+ const [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the update mode
+
+
+
+
+
+
+
+
+
+
+ long CViewContainer::getNbViews
+ (
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the number of child views
+
+
+
+
+
+
+
+
+
+
+ CView * CViewContainer::getView
+ (
+ long
+ index
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the child view at index
+
+
Parameters:
+
+ index the index of the view to return
+
+
+
+
+
+
+
+
+
+
+
+ CView * CViewContainer::getViewAt
+ (
+ const CPoint &
+ where ,
+
+
+
+
+ bool
+ deep = false
+
+
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+get the view at point where
+
+
+
+
+
+
+
+
+
+
+ bool CViewContainer::hitTest
+ (
+ const CPoint &
+ where ,
+
+
+
+
+ const long
+ buttons = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+check if where hits this view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ bool CViewContainer::hitTestSubViews
+ (
+ const CPoint &
+ where ,
+
+
+
+
+ const long
+ buttons = -1
+
+
+
+ )
+ [protected]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CViewContainer::isChild
+ (
+ CView *
+ pView
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+check if pView is a child view of this container
+
+
Parameters:
+
+ pView the view which should be checked if it is a child of this container
+
+
+
+
+
+
+
+
+
+
+
+ bool CViewContainer::isDirty
+ (
+
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+check if view is dirty
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CScrollContainer .
+
+
+
+
+
+
+
+
+ CPoint & CViewContainer::localToFrame
+ (
+ CPoint &
+ point
+ )
+ const [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+conversion from local view coordinates to frame coordinates
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CViewContainer::looseFocus
+ (
+ CDrawContext *
+ pContext = 0
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if view should loose focus
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CViewContainer::modifyDrawContext
+ (
+ CCoord
+ save [4],
+
+
+
+
+ CDrawContext *
+ pContext
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void CViewContainer::mouse
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CPoint &
+ where ,
+
+
+
+
+ long
+ buttons = -1
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse click event occurs
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CFrame .
+
+
+
+
+
+
+
+
+ long CViewContainer::notify
+ (
+ CView *
+ sender ,
+
+
+
+
+ const char *
+ message
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CViewContainer::onDragEnter
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ CDragContainer *
+ drag ,
+
+
+
+
+ const CPoint &
+ where
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a drag is entering this view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CViewContainer::onDragLeave
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ CDragContainer *
+ drag ,
+
+
+
+
+ const CPoint &
+ where
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a drag is leaving this view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CViewContainer::onDragMove
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ CDragContainer *
+ drag ,
+
+
+
+
+ const CPoint &
+ where
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a drag is current moved over this view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+
+
+
+
+called if a drag is dropped onto this view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ long CViewContainer::onKeyDown
+ (
+ VstKeyCode &
+ keyCode
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a key down event occurs and this view has focus
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CFrame .
+
+
+
+
+
+
+
+
+ long CViewContainer::onKeyUp
+ (
+ VstKeyCode &
+ keyCode
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a key up event occurs and this view has focus
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CFrame .
+
+
+
+
+
+
+
+
+ bool CViewContainer::onWheel
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ where ,
+
+
+
+
+ const CMouseWheelAxis
+ axis ,
+
+
+
+
+ float
+ distance
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse wheel event is happening over this view
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CScrollView , and CFrame .
+
+
+
+
+
+
+
+
+ bool CViewContainer::onWheel
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CPoint &
+ where ,
+
+
+
+
+ float
+ distance
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if a mouse wheel event is happening over this view
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CFrame .
+
+
+
+
+
+
+
+
+ void CViewContainer::redrawRect
+ (
+ CDrawContext *
+ context ,
+
+
+
+
+ const CRect &
+ rect
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Parameters:
+
+ context the context which to use to redraw this container
+ rect the area which to redraw
+
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CScrollContainer .
+
+
+
+
+
+
+
+
+ void CViewContainer::removeAll
+ (
+ const bool &
+ withForget = true
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+remove all child views
+
+
Parameters:
+
+ withForget bool to indicate if the view's reference counter should be decreased after removed from the container
+
+
+
+
+
+
+
+
+
+
+
+ bool CViewContainer::removed
+ (
+ CView *
+ parent
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+view is removed from parent view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CViewContainer::removeView
+ (
+ CView *
+ pView ,
+
+
+
+
+ const bool &
+ withForget = true
+
+
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+remove a child view
+
+
Parameters:
+
+ pView the view which should be removed from the container
+ withForget bool to indicate if the view's reference counter should be decreased after removed from the container
+
+
+
+
+
+
+
+
+
+
+
+ void CViewContainer::restoreDrawContext
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ CCoord
+ save [4]
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void CViewContainer::setBackgroundColor
+ (
+ const CColor
+ color
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the background color (will only be drawn if this container is not set to transparent and does not have a background bitmap)
+
+
Parameters:
+
+ color the new background color of the container
+
+
+
+
+
+
+
+
+
+
+
+ virtual void CViewContainer::setBackgroundOffset
+ (
+ const CPoint &
+ p
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the offset of the background bitmap
+
+
+
+
+
+
+
+
+
+
+ virtual void CViewContainer::setMode
+ (
+ long
+ val
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the update mode
+
+
+
+
+
+
+
+
+
+
+ void CViewContainer::setViewSize
+ (
+ CRect &
+ rect
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Parameters:
+
+ rect the new size of the container
+
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CFrame .
+
+
+
+
+
+
+
+
+ void CViewContainer::takeFocus
+ (
+ CDrawContext *
+ pContext = 0
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if view should take focus
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CViewContainer::update
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Reimplemented from CView .
+
+Reimplemented in CFrame .
+
+
+
+
+
+
+
+
+ void CViewContainer::useOffscreen
+ (
+ bool
+ b
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+turn on/off using an offscreen
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_view_container.png b/vstgui.sf/vstgui/Documentation/html/class_c_view_container.png
new file mode 100644
index 0000000..a5efb2e
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_view_container.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_vu_meter-members.html b/vstgui.sf/vstgui/Documentation/html/class_c_vu_meter-members.html
new file mode 100644
index 0000000..e2c6079
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_vu_meter-members.html
@@ -0,0 +1,158 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CVuMeter Member List This is the complete list of members for CVuMeter , including all inherited members.
+ attached (CView *parent)CVuMeter [virtual]
+ backOffset CControl [protected]
+ bDirty CView [protected]
+ beginEdit ()CControl [virtual]
+ bMouseEnabled CView [protected]
+ bounceValue ()CControl [virtual]
+ bTransparencyEnabled CView [protected]
+ bUseOffscreen CVuMeter [protected]
+ bWantsFocus CView [protected]
+ CControl (const CRect &size, CControlListener *listener=0, long tag=0, CBitmap *pBackground=0)CControl
+ CView::CControl classCView [friend]
+ CFrame classCView [friend]
+ checkDefaultValue (CDrawContext *pContext, long button)CControl [virtual]
+ checkUpdate (CRect &updateRect) const CView [inline, virtual]
+ copyBackOffset ()CControl [virtual]
+ CReferenceCounter ()CReferenceCounter [inline]
+ CView (const CRect &size)CView
+ CViewContainer classCView [friend]
+ CVuMeter (const CRect &size, CBitmap *onBitmap, CBitmap *offBitmap, long nbLed, const long style=kVertical)CVuMeter
+ decreaseValue CVuMeter [protected]
+ defaultValue CControl [protected]
+ delta CControl [protected]
+ doIdleStuff ()CControl [inline, virtual]
+ draw (CDrawContext *pContext)CVuMeter [virtual]
+ drawRect (CDrawContext *pContext, const CRect &updateRect)CView [inline, virtual]
+ endEdit ()CControl [virtual]
+ forget ()CReferenceCounter [inline, virtual]
+ frameToLocal (CPoint &point) const CView [virtual]
+ getAttribute (const CViewAttributeID id, const long inSize, void *outData, long &outSize) const CView
+ getAttributeSize (const CViewAttributeID id, long &outSize) const CView
+ getBackground () const CView [inline, virtual]
+ getDefaultValue (void) const CControl [inline, virtual]
+ getEditor () const CView [virtual]
+ getFrame () const CView [inline]
+ getHeight () const CView [inline]
+ getListener () const CControl [inline]
+ getMax () const CControl [inline, virtual]
+ getMin () const CControl [inline, virtual]
+ getMouseableArea (CRect &rect) const CView [inline, virtual]
+ getMouseEnabled () const CView [inline, virtual]
+ getMouseLocation (CDrawContext *context, CPoint &point)CView [virtual]
+ getNbReference () const CReferenceCounter [inline]
+ getOldValue (void) const CControl [inline, virtual]
+ getParentView () const CView [inline]
+ getTag () const CControl [inline, virtual]
+ getTransparency () const CView [inline, virtual]
+ getUseOffscreen () const CVuMeter [inline]
+ getValue () const CControl [inline, virtual]
+ getViewSize (CRect &rect) const CView [inline, virtual]
+ getWheelInc () const CControl [inline, virtual]
+ getWidth () const CView [inline]
+ hitTest (const CPoint &where, const long buttons=-1)CView [inline, virtual]
+ isDirty () const CControl [virtual]
+ isDoubleClick ()CControl
+ isTypeOf (const char *s) const CView [inline, virtual]
+ lastTicks CControl [protected]
+ listener CControl [protected]
+ localToFrame (CPoint &point) const CView [virtual]
+ looseFocus (CDrawContext *pContext=0)CView [virtual]
+ mouse (CDrawContext *pContext, CPoint &where, long buttons=-1)CView [virtual]
+ mouseableArea CView [protected]
+ nbLed CVuMeter [protected]
+ notify (CView *sender, const char *message)CView [virtual]
+ offBitmap CVuMeter [protected]
+ oldValue CControl [protected]
+ onBitmap CVuMeter [protected]
+ onDragEnter (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragLeave (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDragMove (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onDrop (CDrawContext *context, CDragContainer *drag, const CPoint &where)CView [inline, virtual]
+ onKeyDown (VstKeyCode &keyCode)CView [virtual]
+ onKeyUp (VstKeyCode &keyCode)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, float distance)CView [virtual]
+ onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)CView [virtual]
+ pAttributeList CView [protected]
+ pBackground CView [protected]
+ pOScreen CVuMeter [protected]
+ pParentFrame CView [protected]
+ pParentView CView [protected]
+ rectOff CVuMeter [protected]
+ rectOn CVuMeter [protected]
+ redraw ()CView
+ redrawRect (CDrawContext *context, const CRect &rect)CView [virtual]
+ remember ()CReferenceCounter [inline, virtual]
+ removed (CView *parent)CVuMeter [virtual]
+ setAttribute (const CViewAttributeID id, const long inSize, void *inData)CView
+ setBackground (CBitmap *background)CView [virtual]
+ setBackOffset (CPoint &offset)CControl [virtual]
+ setDecreaseStepValue (float value)CVuMeter [inline, virtual]
+ setDefaultValue (float val)CControl [inline, virtual]
+ setDirty (const bool val=true)CVuMeter [virtual]
+ setListener (CControlListener *l)CControl [inline]
+ setMax (float val)CControl [inline, virtual]
+ setMin (float val)CControl [inline, virtual]
+ setMouseableArea (const CRect &rect)CView [inline, virtual]
+ setMouseEnabled (const bool bEnable=true)CView [inline, virtual]
+ setOldValue (float val)CControl [inline, virtual]
+ setTag (long val)CControl [inline, virtual]
+ setTransparency (bool val)CView [inline, virtual]
+ setUseOffscreen (bool val=true)CVuMeter
+ setValue (float val)CControl [inline, virtual]
+ setViewSize (CRect &rect)CView [virtual]
+ setWantsFocus (bool state)CView [inline, virtual]
+ setWheelInc (float val)CControl [inline, virtual]
+ size CView [protected]
+ style CVuMeter [protected]
+ tag CControl [protected]
+ takeFocus (CDrawContext *pContext=0)CView [virtual]
+ update (CDrawContext *pContext)CView [protected, virtual]
+ value CControl [protected]
+ vmax CControl [protected]
+ vmin CControl [protected]
+ wantsFocus () const CView [inline, virtual]
+ wheelInc CControl [protected]
+ ~CControl ()CControl [virtual]
+ ~CReferenceCounter ()CReferenceCounter [inline, virtual]
+ ~CView ()CView [virtual]
+ ~CVuMeter ()CVuMeter [virtual]
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_vu_meter.html b/vstgui.sf/vstgui/Documentation/html/class_c_vu_meter.html
new file mode 100644
index 0000000..cbbc614
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_c_vu_meter.html
@@ -0,0 +1,598 @@
+
+
+VSTGUI: CVuMeter Class Reference
+
+
+
+
+
+
+CVuMeter Class Reference #include <vstcontrols.h>
+
+
Inheritance diagram for CVuMeter:
+
+
+
+
+
+
+List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CVuMeter::CVuMeter
+ (
+ const CRect &
+ size ,
+
+
+
+
+ CBitmap *
+ onBitmap ,
+
+
+
+
+ CBitmap *
+ offBitmap ,
+
+
+
+
+ long
+ nbLed ,
+
+
+
+
+ const long
+ style = kVertical
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CVuMeter::~CVuMeter
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ bool CVuMeter::attached
+ (
+ CView *
+ parent
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+view is attached to a parent view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ void CVuMeter::draw
+ (
+ CDrawContext *
+ pContext
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+called if the view should draw itself
+
+
+
+Implements CControl .
+
+
+
+
+
+
+
+
+ bool CVuMeter::getUseOffscreen
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CVuMeter::removed
+ (
+ CView *
+ parent
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+view is removed from parent view
+
+
+
+Reimplemented from CView .
+
+
+
+
+
+
+
+
+ virtual void CVuMeter::setDecreaseStepValue
+ (
+ float
+ value
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CVuMeter::setDirty
+ (
+ const bool
+ val = true
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+
+set the view to dirty so that it is redrawn in the next idle. Thread Safe !
+
+
+
+Reimplemented from CControl .
+
+
+
+
+
+
+
+
+ void CVuMeter::setUseOffscreen
+ (
+ bool
+ val = true
+ )
+
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_c_vu_meter.png b/vstgui.sf/vstgui/Documentation/html/class_c_vu_meter.png
new file mode 100644
index 0000000..3cb3ffe
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/class_c_vu_meter.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/class_i_scrollbar_drawer-members.html b/vstgui.sf/vstgui/Documentation/html/class_i_scrollbar_drawer-members.html
new file mode 100644
index 0000000..cb949e1
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_i_scrollbar_drawer-members.html
@@ -0,0 +1,42 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+IScrollbarDrawer Member List This is the complete list of members for IScrollbarDrawer , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_i_scrollbar_drawer.html b/vstgui.sf/vstgui/Documentation/html/class_i_scrollbar_drawer.html
new file mode 100644
index 0000000..8131b4e
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_i_scrollbar_drawer.html
@@ -0,0 +1,150 @@
+
+
+VSTGUI: IScrollbarDrawer Class Reference
+
+
+
+
+
+
+IScrollbarDrawer Class Reference #include <cscrollview.h>
+
+List of all members.
+Member Function Documentation
+
+
+
+
+
+
+ virtual void IScrollbarDrawer::drawScrollbarBackground
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CRect &
+ size ,
+
+
+
+
+ long
+ style ,
+
+
+
+
+ CScrollbar *
+ bar
+
+
+
+ )
+ [pure virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void IScrollbarDrawer::drawScrollbarScroller
+ (
+ CDrawContext *
+ pContext ,
+
+
+
+
+ const CRect &
+ size ,
+
+
+
+
+ long
+ style ,
+
+
+
+
+ CScrollbar *
+ bar
+
+
+
+ )
+ [pure virtual]
+
+
+
+
+
+
+ The documentation for this class was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_plugin_g_u_i_editor-members.html b/vstgui.sf/vstgui/Documentation/html/class_plugin_g_u_i_editor-members.html
new file mode 100644
index 0000000..98bc785
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_plugin_g_u_i_editor-members.html
@@ -0,0 +1,63 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+PluginGUIEditor Member List This is the complete list of members for PluginGUIEditor , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/class_plugin_g_u_i_editor.html b/vstgui.sf/vstgui/Documentation/html/class_plugin_g_u_i_editor.html
new file mode 100644
index 0000000..85c6737
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/class_plugin_g_u_i_editor.html
@@ -0,0 +1,725 @@
+
+
+VSTGUI: PluginGUIEditor Class Reference
+
+
+
+
+
+
+PluginGUIEditor Class Reference #include <plugguieditor.h>
+
+List of all members.
+Detailed Description
+This is the same as the AEffGUIEditor class except that this one allows the VSTGUI lib to build without VST dependencies.
+
+
Constructor & Destructor Documentation
+
+
+
+
+
+
+ PluginGUIEditor::PluginGUIEditor
+ (
+ void *
+ pEffect
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PluginGUIEditor::~PluginGUIEditor
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ virtual void PluginGUIEditor::beginEdit
+ (
+ long
+ index
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void PluginGUIEditor::close
+ (
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void PluginGUIEditor::doIdleStuff
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void PluginGUIEditor::draw
+ (
+ ERect *
+ pRect
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void PluginGUIEditor::endEdit
+ (
+ long
+ index
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void* PluginGUIEditor::getEffect
+ (
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CFrame * PluginGUIEditor::getFrame
+ (
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ static long PluginGUIEditor::getKnobMode
+ (
+
+ )
+ [inline, static]
+
+
+
+
+
+
+
+
+
+
+
+
+ long PluginGUIEditor::getRect
+ (
+ ERect **
+ ppRect
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ unsigned long PluginGUIEditor::getTicks
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ long PluginGUIEditor::getVstGuiVersion
+ (
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void PluginGUIEditor::idle
+ (
+
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool PluginGUIEditor::onWheel
+ (
+ float
+ distance
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool PluginGUIEditor::open
+ (
+ void *
+ ptr
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ long PluginGUIEditor::setKnobMode
+ (
+ int
+ val
+ )
+ [virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ virtual void PluginGUIEditor::setParameter
+ (
+ long
+ index ,
+
+
+
+
+ float
+ value
+
+
+
+ )
+ [inline, virtual]
+
+
+
+
+
+
+
+
+
+
+
+
+ void PluginGUIEditor::wait
+ (
+ unsigned long
+ ms
+ )
+
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this class was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/cscrollview_8cpp.html b/vstgui.sf/vstgui/Documentation/html/cscrollview_8cpp.html
new file mode 100644
index 0000000..fcfff06
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/cscrollview_8cpp.html
@@ -0,0 +1,94 @@
+
+
+VSTGUI: cscrollview.cpp File Reference
+
+
+
+
+
+
+cscrollview.cpp File Reference #include "cscrollview.h "
+
+Define Documentation
+
+
+
+
+
+
+
+
+
+ #define FOREACHSUBVIEW for (CCView *pSv = pFirstView; pSv; pSv = pSv->pNext) {CView *pV = pSv->pView;
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/cscrollview_8h.html b/vstgui.sf/vstgui/Documentation/html/cscrollview_8h.html
new file mode 100644
index 0000000..c596f9b
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/cscrollview_8h.html
@@ -0,0 +1,53 @@
+
+
+VSTGUI: cscrollview.h File Reference
+
+
+
+
+
+
+cscrollview.h File Reference #include "vstgui.h "
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/ctabview_8cpp.html b/vstgui.sf/vstgui/Documentation/html/ctabview_8cpp.html
new file mode 100644
index 0000000..3f7e9af
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/ctabview_8cpp.html
@@ -0,0 +1,74 @@
+
+
+VSTGUI: ctabview.cpp File Reference
+
+
+
+
+
+
+ctabview.cpp File Reference #include "ctabview.h "
+
+Define Documentation
+
+
+
+
+
+
+ #define kTabButtonTagStart 20000
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/ctabview_8h.html b/vstgui.sf/vstgui/Documentation/html/ctabview_8h.html
new file mode 100644
index 0000000..fbf021e
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/ctabview_8h.html
@@ -0,0 +1,46 @@
+
+
+VSTGUI: ctabview.h File Reference
+
+
+
+
+
+
+ctabview.h File Reference #include "vstcontrols.h "
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/deprecated.html b/vstgui.sf/vstgui/Documentation/html/deprecated.html
new file mode 100644
index 0000000..6a3fa57
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/deprecated.html
@@ -0,0 +1,42 @@
+
+
+VSTGUI: Deprecated List
+
+
+
+
+
+
+Member CDrawContext::floodFill (const CPoint &start)
+
+
+
+
+Member CDrawContext::getPoint (const CPoint &point)
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/doc_8h.html b/vstgui.sf/vstgui/Documentation/html/doc_8h.html
new file mode 100644
index 0000000..f7ffac9
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/doc_8h.html
@@ -0,0 +1,41 @@
+
+
+VSTGUI: doc.h File Reference
+
+
+
+
+
+
+doc.h File Reference
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/doxygen.css b/vstgui.sf/vstgui/Documentation/html/doxygen.css
new file mode 100644
index 0000000..05615b2
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/doxygen.css
@@ -0,0 +1,310 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+BODY,TD {
+ font-size: 90%;
+}
+H1 {
+ text-align: center;
+ font-size: 160%;
+}
+H2 {
+ font-size: 120%;
+}
+H3 {
+ font-size: 100%;
+}
+CAPTION { font-weight: bold }
+DIV.qindex {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.nav {
+ width: 100%;
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+ line-height: 140%;
+}
+DIV.navtab {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+TD.navtab {
+ font-size: 70%;
+}
+A.qindex {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D;
+}
+A.qindex:visited {
+ text-decoration: none;
+ font-weight: bold;
+ color: #1A419D
+}
+A.qindex:hover {
+ text-decoration: none;
+ background-color: #ddddff;
+}
+A.qindexHL {
+ text-decoration: none;
+ font-weight: bold;
+ background-color: #6666cc;
+ color: #ffffff;
+ border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+ text-decoration: none;
+ background-color: #6666cc;
+ color: #ffffff;
+}
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+.fragment {
+ font-family: Fixed, monospace;
+ font-size: 95%;
+}
+PRE.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ margin-left: 2px;
+ margin-right: 8px;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdPrefix {
+ background-color: #F4F4FB;
+ color: #606060;
+ font-size: 80%;
+}
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+ background: white;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+TD.indexkey {
+ background-color: #e8eef2;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+ background-color: #e8eef2;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ border: 1px solid #CCCCCC;
+}
+TR.memlist {
+ background-color: #f0f0f0;
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+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 }
+.mdTable {
+ border: 1px solid #868686;
+ background-color: #F4F4FB;
+}
+.mdRow {
+ padding: 8px 10px;
+}
+.mdescLeft {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.mdescRight {
+ padding: 0px 8px 4px 8px;
+ font-size: 80%;
+ font-style: italic;
+ background-color: #FAFAFA;
+ border-top: 1px none #E0E0E0;
+ border-right: 1px none #E0E0E0;
+ border-bottom: 1px none #E0E0E0;
+ border-left: 1px none #E0E0E0;
+ margin: 0px;
+}
+.memItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemLeft {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplItemRight {
+ padding: 1px 8px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: none;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.memTemplParams {
+ padding: 1px 0px 0px 8px;
+ margin: 4px;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-top-color: #E0E0E0;
+ border-right-color: #E0E0E0;
+ border-bottom-color: #E0E0E0;
+ border-left-color: #E0E0E0;
+ border-top-style: solid;
+ border-right-style: none;
+ border-bottom-style: none;
+ border-left-style: none;
+ color: #606060;
+ background-color: #FAFAFA;
+ font-size: 80%;
+}
+.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%;
+}
+a {
+ color: #1A41A8;
+}
+a:visited {
+ color: #2A3798;
+}
+.dirtab { padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #84b0c7;
+}
+TH.dirtab { background: #e8eef2;
+ font-weight: bold;
+}
+HR { height: 1px;
+ border: none;
+ border-top: 1px solid black;
+}
+
diff --git a/vstgui.sf/vstgui/Documentation/html/doxygen.png b/vstgui.sf/vstgui/Documentation/html/doxygen.png
new file mode 100644
index 0000000..f0a274b
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/doxygen.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/files.html b/vstgui.sf/vstgui/Documentation/html/files.html
new file mode 100644
index 0000000..4572d04
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/files.html
@@ -0,0 +1,60 @@
+
+
+VSTGUI: File Index
+
+
+
+
+
+
+VSTGUI File List Here is a list of all files with brief descriptions:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2blank.png b/vstgui.sf/vstgui/Documentation/html/ftv2blank.png
new file mode 100644
index 0000000..493c3c0
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2blank.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2doc.png b/vstgui.sf/vstgui/Documentation/html/ftv2doc.png
new file mode 100644
index 0000000..f72999f
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2doc.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2folderclosed.png b/vstgui.sf/vstgui/Documentation/html/ftv2folderclosed.png
new file mode 100644
index 0000000..d6d0634
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2folderclosed.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2folderopen.png b/vstgui.sf/vstgui/Documentation/html/ftv2folderopen.png
new file mode 100644
index 0000000..bbe2c91
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2folderopen.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2lastnode.png b/vstgui.sf/vstgui/Documentation/html/ftv2lastnode.png
new file mode 100644
index 0000000..e7b9ba9
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2lastnode.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2link.png b/vstgui.sf/vstgui/Documentation/html/ftv2link.png
new file mode 100644
index 0000000..14f3fed
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2link.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2mlastnode.png b/vstgui.sf/vstgui/Documentation/html/ftv2mlastnode.png
new file mode 100644
index 0000000..09ceb6a
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2mlastnode.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2mnode.png b/vstgui.sf/vstgui/Documentation/html/ftv2mnode.png
new file mode 100644
index 0000000..3254c05
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2mnode.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2node.png b/vstgui.sf/vstgui/Documentation/html/ftv2node.png
new file mode 100644
index 0000000..c9f06a5
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2node.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2plastnode.png b/vstgui.sf/vstgui/Documentation/html/ftv2plastnode.png
new file mode 100644
index 0000000..0b07e00
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2plastnode.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2pnode.png b/vstgui.sf/vstgui/Documentation/html/ftv2pnode.png
new file mode 100644
index 0000000..2001b79
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2pnode.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/ftv2vertline.png b/vstgui.sf/vstgui/Documentation/html/ftv2vertline.png
new file mode 100644
index 0000000..b330f3a
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/ftv2vertline.png differ
diff --git a/vstgui.sf/vstgui/Documentation/html/functions.html b/vstgui.sf/vstgui/Documentation/html/functions.html
new file mode 100644
index 0000000..dd1fef0
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions.html
@@ -0,0 +1,96 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x62.html b/vstgui.sf/vstgui/Documentation/html/functions_0x62.html
new file mode 100644
index 0000000..5e501b2
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x62.html
@@ -0,0 +1,114 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x63.html b/vstgui.sf/vstgui/Documentation/html/functions_0x63.html
new file mode 100644
index 0000000..693b283
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x63.html
@@ -0,0 +1,148 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x64.html b/vstgui.sf/vstgui/Documentation/html/functions_0x64.html
new file mode 100644
index 0000000..8332a87
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x64.html
@@ -0,0 +1,111 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+decreaseValue
+: CVuMeter defaultValue
+: CControl delta
+: CControl disableTextColor
+: COptionMenuScheme dispose()
+: CBitmap doIdleStuff()
+: CFrame , CControl , PluginGUIEditor , AEffGUIEditor dosType
+: VstFileType draw()
+: CFrame , CViewContainer , CView , CBitmap , CVuMeter , CSplashScreen , CKickButton , CSpecialDigit , CSlider , CAutoAnimation , CMovieButton , CMovieBitmap , CRockerSwitch , CHorizontalSwitch , CVerticalSwitch , CAnimKnob , CKnob , COptionMenu , CTextEdit , CTextLabel , CParamDisplay , COnOffButton , CControl , CSplashScreenView , PluginGUIEditor , CTabButton , CScrollbar drawAlphaBlend()
+: CBitmap drawArc()
+: CDrawContext drawBackground()
+: CScrollbar drawBackgroundRect()
+: CViewContainer , CScrollView drawEllipse()
+: CDrawContext drawer
+: CScrollbar drawHandle()
+: CKnob drawItem()
+: COptionMenuScheme drawItemBack()
+: COptionMenuScheme drawLines()
+: CDrawContext drawMode
+: CDrawContext drawPoint()
+: CDrawContext drawPolygon()
+: CDrawContext drawRect()
+: CFrame , CViewContainer , CView , CDrawContext drawScrollbarBackground()
+: IScrollbarDrawer drawScrollbarScroller()
+: IScrollbarDrawer drawScroller()
+: CScrollbar drawString()
+: CDrawContext drawText()
+: CParamDisplay drawTransparent()
+: CBitmap
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x65.html b/vstgui.sf/vstgui/Documentation/html/functions_0x65.html
new file mode 100644
index 0000000..962ee78
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x65.html
@@ -0,0 +1,88 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x66.html b/vstgui.sf/vstgui/Documentation/html/functions_0x66.html
new file mode 100644
index 0000000..a3571d2
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x66.html
@@ -0,0 +1,105 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x67.html b/vstgui.sf/vstgui/Documentation/html/functions_0x67.html
new file mode 100644
index 0000000..1a140bb
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x67.html
@@ -0,0 +1,183 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+getAttribute()
+: CView getAttributeSize()
+: CView getBackColor()
+: CParamDisplay getBackground()
+: CView getBackgroundColor()
+: CViewContainer , CScrollbar getBackgroundOffset()
+: CViewContainer getBitmapTransparency()
+: CSplashScreen getClipRect()
+: CDrawContext getContainerSize()
+: CScrollContainer getCount()
+: CDragContainer getCurrent()
+: COptionMenu getCurrentLocation()
+: CFrame getCurrentView()
+: CFrame , CViewContainer getDefaultValue()
+: CControl getDrawMode()
+: CDrawContext getEditor()
+: CFrame , CView getEffect()
+: PluginGUIEditor getEntry()
+: COptionMenu getFillColor()
+: CDrawContext getFocusView()
+: CFrame getFont()
+: CDrawContext , CParamDisplay getFontColor()
+: CDrawContext , CParamDisplay getFontSize()
+: CDrawContext getFrame()
+: CView , CDrawContext , PluginGUIEditor , AEffGUIEditor getFrameColor()
+: CDrawContext , CParamDisplay , CScrollbar getFreeClick()
+: CSlider getHandle()
+: CBitmap , CSlider getHeight()
+: CView , CBitmap , COffscreenContext , CRect getHorizontalScrollbar()
+: CScrollView getID()
+: CAttributeListEntry getIndex()
+: COptionMenu getItemMenu()
+: COptionMenu getItemSize()
+: COptionMenuScheme getKnobMode()
+: CFrame , PluginGUIEditor , AEffGUIEditor getLastItemMenu()
+: COptionMenu getLastResult()
+: COptionMenu getLineStyle()
+: CDrawContext getLineWidth()
+: CDrawContext getListener()
+: CControl getLoc()
+: CDrawContext getMax()
+: CControl getMin()
+: CControl getModalView()
+: CFrame getMode()
+: CViewContainer getMouseableArea()
+: CView getMouseButtons()
+: CDrawContext getMouseEnabled()
+: CView getMouseLocation()
+: CView , CDrawContext getNbEntries()
+: COptionMenu getNbItemsPerColumn()
+: COptionMenu getNbReference()
+: CReferenceCounter getNbViews()
+: CViewContainer getNext()
+: CAttributeListEntry getNoAlpha()
+: CBitmap getNormValue()
+: CSpecialDigit getOffset()
+: CSplashScreen getOldValue()
+: CControl getOpenFlag()
+: CFrame getParentSystemWindow()
+: CFrame getParentView()
+: CView getPoint()
+: CDrawContext getPointer()
+: CAttributeListEntry getPosition()
+: CFrame getRangeAngle()
+: CKnob getRect()
+: PluginGUIEditor , AEffGUIEditor getScheme()
+: COptionMenu getScrollerColor()
+: CScrollbar getScrollerRect()
+: CScrollbar getScrollOffset()
+: CScrollContainer getScrollSize()
+: CScrollbar getShadowColor()
+: CParamDisplay getSize()
+: CFrame , CAttributeListEntry getStartAngle()
+: CKnob getStep()
+: CScrollbar getStringWidth()
+: CDrawContext getStyle()
+: CParamDisplay , COnOffButton getSubMenu()
+: COptionMenu getSystemContext()
+: CDrawContext getSystemWindow()
+: CFrame getTabViewSize()
+: CTabView getTag()
+: CControl getText()
+: CTextEdit , CTextLabel getTextTransparency()
+: CParamDisplay getTicks()
+: CFrame , PluginGUIEditor , AEffGUIEditor getTransparency()
+: CView getTransparentColor()
+: CBitmap getTxtFace()
+: CParamDisplay getType()
+: CDragContainer getUseOffscreen()
+: CVuMeter getValue()
+: CControl getVerticalScrollbar()
+: CScrollView getView()
+: CViewContainer getViewAt()
+: CViewContainer getViewSize()
+: CView getVstGuiVersion()
+: PluginGUIEditor , AEffGUIEditor getWheelInc()
+: CControl getWidth()
+: CView , CBitmap , COffscreenContext , CRect getWindow()
+: CDrawContext getZoomFactor()
+: CSlider , CKnob green
+: CColor
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x68.html b/vstgui.sf/vstgui/Documentation/html/functions_0x68.html
new file mode 100644
index 0000000..00686f7
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x68.html
@@ -0,0 +1,94 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+h
+: CPoint halfAngle
+: CKnob height
+: CRect , CBitmap , COffscreenContext , CSpecialDigit heightControl
+: CSlider heightOfOneImage
+: CKickButton , CAutoAnimation , CMovieButton , CMovieBitmap , CRockerSwitch , CHorizontalSwitch , CVerticalSwitch , CAnimKnob heightOfSlider
+: CSlider hiliteTextColor
+: COptionMenuScheme hitTest()
+: CViewContainer , CView , CSplashScreen hitTestSubViews()
+: CViewContainer horiTxtAlign
+: CParamDisplay hsb
+: CScrollView
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x69.html b/vstgui.sf/vstgui/Documentation/html/functions_0x69.html
new file mode 100644
index 0000000..8db83bd
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x69.html
@@ -0,0 +1,105 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x6b.html b/vstgui.sf/vstgui/Documentation/html/functions_0x6b.html
new file mode 100644
index 0000000..157892c
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x6b.html
@@ -0,0 +1,110 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x6c.html b/vstgui.sf/vstgui/Documentation/html/functions_0x6c.html
new file mode 100644
index 0000000..8357a89
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x6c.html
@@ -0,0 +1,99 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x6d.html b/vstgui.sf/vstgui/Documentation/html/functions_0x6d.html
new file mode 100644
index 0000000..360a77f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x6d.html
@@ -0,0 +1,97 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+macCreator
+: VstFileSelect macType
+: VstFileType MAX_ENTRY
+: COptionMenu maxTmp
+: CSlider mimeType1
+: VstFileType mimeType2
+: VstFileType minPos
+: CSlider minTmp
+: CSlider mode
+: CViewContainer modifier
+: VstKeyCode modifyDrawContext()
+: CViewContainer mouse()
+: CFrame , CViewContainer , CView , CSplashScreen , CKickButton , CSlider , CAutoAnimation , CMovieButton , CRockerSwitch , CHorizontalSwitch , CVerticalSwitch , CKnob , COptionMenu , CTextEdit , COnOffButton , CSplashScreenView , CTabButton , CScrollbar mouseableArea
+: CView moveTo()
+: CDrawContext , CRect
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x6e.html b/vstgui.sf/vstgui/Documentation/html/functions_0x6e.html
new file mode 100644
index 0000000..b1670bb
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x6e.html
@@ -0,0 +1,99 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x6f.html b/vstgui.sf/vstgui/Documentation/html/functions_0x6f.html
new file mode 100644
index 0000000..6940a36
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x6f.html
@@ -0,0 +1,103 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+offBitmap
+: CVuMeter offset
+: CPoint , CRect , CDrawContext , CSplashScreen , CKickButton , CSlider , CAutoAnimation , CMovieButton , CMovieBitmap , CRockerSwitch , CHorizontalSwitch , CVerticalSwitch , CKnob , CScrollContainer offsetHandle
+: CSlider offsetScreen
+: CDrawContext oldValue
+: CControl onBitmap
+: CVuMeter onDragEnter()
+: CViewContainer , CView , CTabButton onDragLeave()
+: CViewContainer , CView onDragMove()
+: CViewContainer , CView onDrop()
+: CViewContainer , CView onKeyDown()
+: CFrame , CViewContainer , CView , CSlider , CKnob onKeyUp()
+: CFrame , CViewContainer , CView onWheel()
+: CFrame , CViewContainer , CView , CSlider , CRockerSwitch , CKnob , PluginGUIEditor , CScrollbar , CScrollView open()
+: CFrame , PluginGUIEditor openWindow()
+: CAutoAnimation operator!=()
+: CColor , CPoint , CRect operator()()
+: CColor , CPoint , CRect operator=()
+: CColor operator==()
+: CColor , CPoint , CRect operator~()
+: CColor
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x70.html b/vstgui.sf/vstgui/Documentation/html/functions_0x70.html
new file mode 100644
index 0000000..83086b2
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x70.html
@@ -0,0 +1,117 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x72.html b/vstgui.sf/vstgui/Documentation/html/functions_0x72.html
new file mode 100644
index 0000000..b06e6b5
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x72.html
@@ -0,0 +1,110 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x73.html b/vstgui.sf/vstgui/Documentation/html/functions_0x73.html
new file mode 100644
index 0000000..cd3372f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x73.html
@@ -0,0 +1,193 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+sc
+: CScrollView scheme
+: COptionMenu scrollerArea
+: CScrollbar scrollerColor
+: CScrollbar scrollerLength
+: CScrollbar scrollSize
+: CScrollbar selectionColor
+: COptionMenuScheme selectTab()
+: CTabView setActiveTextColor()
+: CTabButton setAttribute()
+: CView setBackColor()
+: CParamDisplay setBackground()
+: CView setBackgroundColor()
+: CViewContainer , CScrollbar setBackgroundOffset()
+: CViewContainer setBackOffset()
+: CControl setBitmapTransparency()
+: CSplashScreen setClipRect()
+: CDrawContext setColorHandle()
+: CKnob setColors()
+: COptionMenuScheme setColorShadowHandle()
+: CKnob setContainerSize()
+: CScrollContainer , CScrollView setCurrent()
+: COptionMenu setCurrentChild()
+: CTabView setCursor()
+: CFrame setDecreaseStepValue()
+: CVuMeter setDefaultValue()
+: CControl setDirty()
+: CView , CVuMeter , CControl setDrawer()
+: CScrollbar setDrawMode()
+: CDrawContext setDrawTransparentHandle()
+: CSlider setDropActive()
+: CFrame setEntry()
+: COptionMenu setFillColor()
+: CDrawContext setFocusView()
+: CFrame setFont()
+: CDrawContext , COptionMenuScheme , CParamDisplay setFontColor()
+: CDrawContext , CParamDisplay setFrameColor()
+: CDrawContext , CParamDisplay , CScrollbar setFreeClick()
+: CSlider setHandle()
+: CSlider setHandleBitmap()
+: CKnob setHeight()
+: CRect setHoriAlign()
+: CParamDisplay setInactiveTextColor()
+: CTabButton setInsetValue()
+: CKnob setInverseBitmap()
+: CAnimKnob setKnobMode()
+: PluginGUIEditor setLineStyle()
+: CDrawContext setLineWidth()
+: CDrawContext setListener()
+: CControl setMax()
+: CControl setMin()
+: CControl setModalView()
+: CFrame setMode()
+: CViewContainer setMouseableArea()
+: CView setMouseEnabled()
+: CView setNbItemsPerColumn()
+: COptionMenu setNext()
+: CAttributeListEntry setNoAlpha()
+: CBitmap setOffsetHandle()
+: CSlider setOldValue()
+: CControl setOpenFlag()
+: CFrame setParameter()
+: PluginGUIEditor , AEffGUIEditor setParentSystemWindow()
+: CFrame setPosition()
+: CFrame setPrefixNumbers()
+: COptionMenu setRangeAngle()
+: CKnob setScheme()
+: COptionMenu setScrollerColor()
+: CScrollbar setScrollOffset()
+: CScrollContainer setScrollSize()
+: CScrollbar setShadowColor()
+: CParamDisplay setSize()
+: CFrame setStartAngle()
+: CKnob setStep()
+: CScrollbar setString2FloatConvert()
+: CParamDisplay setStringConvert()
+: CParamDisplay setStyle()
+: CParamDisplay , COnOffButton setTabFontStyle()
+: CTabView setTag()
+: CControl setText()
+: CTextEdit , CTextLabel setTextEditConvert()
+: CTextEdit setTextFont()
+: CTabButton setTextSize()
+: CTabButton setTextTransparency()
+: CParamDisplay setTransparency()
+: CView setTransparencyMask()
+: CBitmap setTransparentColor()
+: CBitmap setTxtFace()
+: CParamDisplay setUseOffscreen()
+: CVuMeter setValue()
+: COptionMenu , CControl setViewSize()
+: CFrame , CViewContainer , CView setWantsFocus()
+: CView setWheelInc()
+: CControl setWidth()
+: CRect setWindow()
+: CDrawContext setZoomFactor()
+: CSlider , CKnob shadowColor
+: CParamDisplay size
+: CView sizeOfPointer
+: CAttributeListEntry sizeReturnPath
+: VstFileSelect splashScreen
+: CSplashScreenView startAngle
+: CKnob stepValue
+: CScrollbar string2FloatConvert
+: CParamDisplay stringConvert
+: CParamDisplay stringConvert2
+: CParamDisplay style
+: CVuMeter , CSlider , CRockerSwitch , CParamDisplay , COnOffButton , CTabView , CScrollbar , CScrollView submenuEntry
+: COptionMenu subPixmaps
+: CAutoAnimation , CMovieBitmap , CHorizontalSwitch , CVerticalSwitch , CAnimKnob systemWindow
+: PluginGUIEditor
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x74.html b/vstgui.sf/vstgui/Documentation/html/functions_0x74.html
new file mode 100644
index 0000000..8c3687f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x74.html
@@ -0,0 +1,98 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x75.html b/vstgui.sf/vstgui/Documentation/html/functions_0x75.html
new file mode 100644
index 0000000..34f6fe7
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x75.html
@@ -0,0 +1,89 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x76.html b/vstgui.sf/vstgui/Documentation/html/functions_0x76.html
new file mode 100644
index 0000000..293b271
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x76.html
@@ -0,0 +1,95 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x77.html b/vstgui.sf/vstgui/Documentation/html/functions_0x77.html
new file mode 100644
index 0000000..306c736
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x77.html
@@ -0,0 +1,91 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x78.html b/vstgui.sf/vstgui/Documentation/html/functions_0x78.html
new file mode 100644
index 0000000..9859d22
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x78.html
@@ -0,0 +1,86 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x79.html b/vstgui.sf/vstgui/Documentation/html/functions_0x79.html
new file mode 100644
index 0000000..09b296a
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x79.html
@@ -0,0 +1,86 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x7a.html b/vstgui.sf/vstgui/Documentation/html/functions_0x7a.html
new file mode 100644
index 0000000..4d0c862
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x7a.html
@@ -0,0 +1,84 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_0x7e.html b/vstgui.sf/vstgui/Documentation/html/functions_0x7e.html
new file mode 100644
index 0000000..30e31bc
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_0x7e.html
@@ -0,0 +1,122 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all class members with links to the classes they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_eval.html b/vstgui.sf/vstgui/Documentation/html/functions_eval.html
new file mode 100644
index 0000000..4edf298
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_eval.html
@@ -0,0 +1,78 @@
+
+
+VSTGUI: Class Members - Enumerator
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func.html b/vstgui.sf/vstgui/Documentation/html/functions_func.html
new file mode 100644
index 0000000..8ab0a61
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func.html
@@ -0,0 +1,89 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x62.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x62.html
new file mode 100644
index 0000000..54ec784
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x62.html
@@ -0,0 +1,82 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x63.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x63.html
new file mode 100644
index 0000000..4012af4
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x63.html
@@ -0,0 +1,134 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x64.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x64.html
new file mode 100644
index 0000000..44a7661
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x64.html
@@ -0,0 +1,100 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+dispose()
+: CBitmap doIdleStuff()
+: CFrame , CControl , PluginGUIEditor , AEffGUIEditor draw()
+: CFrame , CViewContainer , CView , CBitmap , CVuMeter , CSplashScreen , CKickButton , CSpecialDigit , CSlider , CAutoAnimation , CMovieButton , CMovieBitmap , CRockerSwitch , CHorizontalSwitch , CVerticalSwitch , CAnimKnob , CKnob , COptionMenu , CTextEdit , CTextLabel , CParamDisplay , COnOffButton , CControl , CSplashScreenView , PluginGUIEditor , CTabButton , CScrollbar drawAlphaBlend()
+: CBitmap drawArc()
+: CDrawContext drawBackground()
+: CScrollbar drawBackgroundRect()
+: CViewContainer , CScrollView drawEllipse()
+: CDrawContext drawHandle()
+: CKnob drawItem()
+: COptionMenuScheme drawItemBack()
+: COptionMenuScheme drawLines()
+: CDrawContext drawPoint()
+: CDrawContext drawPolygon()
+: CDrawContext drawRect()
+: CFrame , CViewContainer , CView , CDrawContext drawScrollbarBackground()
+: IScrollbarDrawer drawScrollbarScroller()
+: IScrollbarDrawer drawScroller()
+: CScrollbar drawString()
+: CDrawContext drawText()
+: CParamDisplay drawTransparent()
+: CBitmap
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x65.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x65.html
new file mode 100644
index 0000000..4bb8e99
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x65.html
@@ -0,0 +1,80 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x66.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x66.html
new file mode 100644
index 0000000..2e7e308
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x66.html
@@ -0,0 +1,88 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x67.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x67.html
new file mode 100644
index 0000000..3a8af5d
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x67.html
@@ -0,0 +1,178 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+getAttribute()
+: CView getAttributeSize()
+: CView getBackColor()
+: CParamDisplay getBackground()
+: CView getBackgroundColor()
+: CViewContainer , CScrollbar getBackgroundOffset()
+: CViewContainer getBitmapTransparency()
+: CSplashScreen getClipRect()
+: CDrawContext getContainerSize()
+: CScrollContainer getCount()
+: CDragContainer getCurrent()
+: COptionMenu getCurrentLocation()
+: CFrame getCurrentView()
+: CFrame , CViewContainer getDefaultValue()
+: CControl getDrawMode()
+: CDrawContext getEditor()
+: CFrame , CView getEffect()
+: PluginGUIEditor getEntry()
+: COptionMenu getFillColor()
+: CDrawContext getFocusView()
+: CFrame getFont()
+: CDrawContext , CParamDisplay getFontColor()
+: CDrawContext , CParamDisplay getFontSize()
+: CDrawContext getFrame()
+: CView , CDrawContext , PluginGUIEditor , AEffGUIEditor getFrameColor()
+: CDrawContext , CParamDisplay , CScrollbar getFreeClick()
+: CSlider getHandle()
+: CBitmap , CSlider getHeight()
+: CView , CBitmap , COffscreenContext , CRect getHorizontalScrollbar()
+: CScrollView getID()
+: CAttributeListEntry getIndex()
+: COptionMenu getItemMenu()
+: COptionMenu getItemSize()
+: COptionMenuScheme getKnobMode()
+: CFrame , PluginGUIEditor , AEffGUIEditor getLastItemMenu()
+: COptionMenu getLastResult()
+: COptionMenu getLineStyle()
+: CDrawContext getLineWidth()
+: CDrawContext getListener()
+: CControl getLoc()
+: CDrawContext getMax()
+: CControl getMin()
+: CControl getModalView()
+: CFrame getMode()
+: CViewContainer getMouseableArea()
+: CView getMouseButtons()
+: CDrawContext getMouseEnabled()
+: CView getMouseLocation()
+: CView , CDrawContext getNbEntries()
+: COptionMenu getNbItemsPerColumn()
+: COptionMenu getNbReference()
+: CReferenceCounter getNbViews()
+: CViewContainer getNext()
+: CAttributeListEntry getNoAlpha()
+: CBitmap getNormValue()
+: CSpecialDigit getOffset()
+: CSplashScreen getOldValue()
+: CControl getOpenFlag()
+: CFrame getParentSystemWindow()
+: CFrame getParentView()
+: CView getPoint()
+: CDrawContext getPointer()
+: CAttributeListEntry getPosition()
+: CFrame getRangeAngle()
+: CKnob getRect()
+: PluginGUIEditor , AEffGUIEditor getScheme()
+: COptionMenu getScrollerColor()
+: CScrollbar getScrollerRect()
+: CScrollbar getScrollOffset()
+: CScrollContainer getScrollSize()
+: CScrollbar getShadowColor()
+: CParamDisplay getSize()
+: CFrame , CAttributeListEntry getStartAngle()
+: CKnob getStep()
+: CScrollbar getStringWidth()
+: CDrawContext getStyle()
+: CParamDisplay , COnOffButton getSubMenu()
+: COptionMenu getSystemContext()
+: CDrawContext getSystemWindow()
+: CFrame getTabViewSize()
+: CTabView getTag()
+: CControl getText()
+: CTextEdit , CTextLabel getTextTransparency()
+: CParamDisplay getTicks()
+: CFrame , PluginGUIEditor , AEffGUIEditor getTransparency()
+: CView getTransparentColor()
+: CBitmap getTxtFace()
+: CParamDisplay getType()
+: CDragContainer getUseOffscreen()
+: CVuMeter getValue()
+: CControl getVerticalScrollbar()
+: CScrollView getView()
+: CViewContainer getViewAt()
+: CViewContainer getViewSize()
+: CView getVstGuiVersion()
+: PluginGUIEditor , AEffGUIEditor getWheelInc()
+: CControl getWidth()
+: CView , CBitmap , COffscreenContext , CRect getWindow()
+: CDrawContext getZoomFactor()
+: CSlider , CKnob
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x68.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x68.html
new file mode 100644
index 0000000..9a0d585
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x68.html
@@ -0,0 +1,82 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x69.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x69.html
new file mode 100644
index 0000000..0b7d205
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x69.html
@@ -0,0 +1,94 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x6c.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x6c.html
new file mode 100644
index 0000000..c7d43ec
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x6c.html
@@ -0,0 +1,84 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x6d.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x6d.html
new file mode 100644
index 0000000..8e0637f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x6d.html
@@ -0,0 +1,82 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+modifyDrawContext()
+: CViewContainer mouse()
+: CFrame , CViewContainer , CView , CSplashScreen , CKickButton , CSlider , CAutoAnimation , CMovieButton , CRockerSwitch , CHorizontalSwitch , CVerticalSwitch , CKnob , COptionMenu , CTextEdit , COnOffButton , CSplashScreenView , CTabButton , CScrollbar moveTo()
+: CDrawContext , CRect
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x6e.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x6e.html
new file mode 100644
index 0000000..f18e90f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x6e.html
@@ -0,0 +1,82 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x6f.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x6f.html
new file mode 100644
index 0000000..459422f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x6f.html
@@ -0,0 +1,94 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+offset()
+: CPoint , CRect , CDrawContext , CSplashScreen , CKickButton , CSlider , CAutoAnimation , CMovieButton , CMovieBitmap , CRockerSwitch , CHorizontalSwitch , CVerticalSwitch , CKnob , CScrollContainer onDragEnter()
+: CViewContainer , CView , CTabButton onDragLeave()
+: CViewContainer , CView onDragMove()
+: CViewContainer , CView onDrop()
+: CViewContainer , CView onKeyDown()
+: CFrame , CViewContainer , CView , CSlider , CKnob onKeyUp()
+: CFrame , CViewContainer , CView onWheel()
+: CFrame , CViewContainer , CView , CSlider , CRockerSwitch , CKnob , PluginGUIEditor , CScrollbar , CScrollView open()
+: CFrame , PluginGUIEditor openWindow()
+: CAutoAnimation operator!=()
+: CColor , CPoint , CRect operator()()
+: CColor , CPoint , CRect operator=()
+: CColor operator==()
+: CColor , CPoint , CRect operator~()
+: CColor
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x70.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x70.html
new file mode 100644
index 0000000..67d2359
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x70.html
@@ -0,0 +1,83 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x72.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x72.html
new file mode 100644
index 0000000..8e5aeaa
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x72.html
@@ -0,0 +1,94 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x73.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x73.html
new file mode 100644
index 0000000..ba9fe20
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x73.html
@@ -0,0 +1,168 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+selectTab()
+: CTabView setActiveTextColor()
+: CTabButton setAttribute()
+: CView setBackColor()
+: CParamDisplay setBackground()
+: CView setBackgroundColor()
+: CViewContainer , CScrollbar setBackgroundOffset()
+: CViewContainer setBackOffset()
+: CControl setBitmapTransparency()
+: CSplashScreen setClipRect()
+: CDrawContext setColorHandle()
+: CKnob setColors()
+: COptionMenuScheme setColorShadowHandle()
+: CKnob setContainerSize()
+: CScrollContainer , CScrollView setCurrent()
+: COptionMenu setCurrentChild()
+: CTabView setCursor()
+: CFrame setDecreaseStepValue()
+: CVuMeter setDefaultValue()
+: CControl setDirty()
+: CView , CVuMeter , CControl setDrawer()
+: CScrollbar setDrawMode()
+: CDrawContext setDrawTransparentHandle()
+: CSlider setDropActive()
+: CFrame setEntry()
+: COptionMenu setFillColor()
+: CDrawContext setFocusView()
+: CFrame setFont()
+: CDrawContext , COptionMenuScheme , CParamDisplay setFontColor()
+: CDrawContext , CParamDisplay setFrameColor()
+: CDrawContext , CParamDisplay , CScrollbar setFreeClick()
+: CSlider setHandle()
+: CSlider setHandleBitmap()
+: CKnob setHeight()
+: CRect setHoriAlign()
+: CParamDisplay setInactiveTextColor()
+: CTabButton setInsetValue()
+: CKnob setInverseBitmap()
+: CAnimKnob setKnobMode()
+: PluginGUIEditor setLineStyle()
+: CDrawContext setLineWidth()
+: CDrawContext setListener()
+: CControl setMax()
+: CControl setMin()
+: CControl setModalView()
+: CFrame setMode()
+: CViewContainer setMouseableArea()
+: CView setMouseEnabled()
+: CView setNbItemsPerColumn()
+: COptionMenu setNext()
+: CAttributeListEntry setNoAlpha()
+: CBitmap setOffsetHandle()
+: CSlider setOldValue()
+: CControl setOpenFlag()
+: CFrame setParameter()
+: PluginGUIEditor , AEffGUIEditor setParentSystemWindow()
+: CFrame setPosition()
+: CFrame setPrefixNumbers()
+: COptionMenu setRangeAngle()
+: CKnob setScheme()
+: COptionMenu setScrollerColor()
+: CScrollbar setScrollOffset()
+: CScrollContainer setScrollSize()
+: CScrollbar setShadowColor()
+: CParamDisplay setSize()
+: CFrame setStartAngle()
+: CKnob setStep()
+: CScrollbar setString2FloatConvert()
+: CParamDisplay setStringConvert()
+: CParamDisplay setStyle()
+: CParamDisplay , COnOffButton setTabFontStyle()
+: CTabView setTag()
+: CControl setText()
+: CTextEdit , CTextLabel setTextEditConvert()
+: CTextEdit setTextFont()
+: CTabButton setTextSize()
+: CTabButton setTextTransparency()
+: CParamDisplay setTransparency()
+: CView setTransparencyMask()
+: CBitmap setTransparentColor()
+: CBitmap setTxtFace()
+: CParamDisplay setUseOffscreen()
+: CVuMeter setValue()
+: COptionMenu , CControl setViewSize()
+: CFrame , CViewContainer , CView setWantsFocus()
+: CView setWheelInc()
+: CControl setWidth()
+: CRect setWindow()
+: CDrawContext setZoomFactor()
+: CSlider , CKnob
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x74.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x74.html
new file mode 100644
index 0000000..922eb11
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x74.html
@@ -0,0 +1,80 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x75.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x75.html
new file mode 100644
index 0000000..70e584a
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x75.html
@@ -0,0 +1,83 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x76.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x76.html
new file mode 100644
index 0000000..222ddd4
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x76.html
@@ -0,0 +1,83 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x77.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x77.html
new file mode 100644
index 0000000..b734559
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x77.html
@@ -0,0 +1,84 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_func_0x7e.html b/vstgui.sf/vstgui/Documentation/html/functions_func_0x7e.html
new file mode 100644
index 0000000..5ab03ad
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_func_0x7e.html
@@ -0,0 +1,118 @@
+
+
+VSTGUI: Class Members - Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_rela.html b/vstgui.sf/vstgui/Documentation/html/functions_rela.html
new file mode 100644
index 0000000..125b4fd
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_rela.html
@@ -0,0 +1,57 @@
+
+
+VSTGUI: Class Members - Related Functions
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars.html b/vstgui.sf/vstgui/Documentation/html/functions_vars.html
new file mode 100644
index 0000000..437b399
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars.html
@@ -0,0 +1,85 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x62.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x62.html
new file mode 100644
index 0000000..c8c2890
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x62.html
@@ -0,0 +1,110 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x63.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x63.html
new file mode 100644
index 0000000..ae3d704
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x63.html
@@ -0,0 +1,92 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x64.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x64.html
new file mode 100644
index 0000000..5741d29
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x64.html
@@ -0,0 +1,89 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x65.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x65.html
new file mode 100644
index 0000000..1085448
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x65.html
@@ -0,0 +1,86 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x66.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x66.html
new file mode 100644
index 0000000..c217f34
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x66.html
@@ -0,0 +1,95 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x67.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x67.html
new file mode 100644
index 0000000..4c42204
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x67.html
@@ -0,0 +1,83 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x68.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x68.html
new file mode 100644
index 0000000..ca4cfcd
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x68.html
@@ -0,0 +1,91 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+h
+: CPoint halfAngle
+: CKnob height
+: CRect , CBitmap , COffscreenContext , CSpecialDigit heightControl
+: CSlider heightOfOneImage
+: CKickButton , CAutoAnimation , CMovieButton , CMovieBitmap , CRockerSwitch , CHorizontalSwitch , CVerticalSwitch , CAnimKnob heightOfSlider
+: CSlider hiliteTextColor
+: COptionMenuScheme horiTxtAlign
+: CParamDisplay hsb
+: CScrollView
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x69.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x69.html
new file mode 100644
index 0000000..2d667db
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x69.html
@@ -0,0 +1,90 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6b.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6b.html
new file mode 100644
index 0000000..d697e0d
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6b.html
@@ -0,0 +1,84 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6c.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6c.html
new file mode 100644
index 0000000..609cc7f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6c.html
@@ -0,0 +1,93 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6d.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6d.html
new file mode 100644
index 0000000..6b1e9c3
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6d.html
@@ -0,0 +1,92 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6e.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6e.html
new file mode 100644
index 0000000..0e40424
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6e.html
@@ -0,0 +1,96 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6f.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6f.html
new file mode 100644
index 0000000..6b57846
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x6f.html
@@ -0,0 +1,88 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+offBitmap
+: CVuMeter offset
+: CPoint , CRect , CDrawContext , CSplashScreen , CKickButton , CSlider , CAutoAnimation , CMovieButton , CMovieBitmap , CRockerSwitch , CHorizontalSwitch , CVerticalSwitch , CKnob , CScrollContainer offsetHandle
+: CSlider offsetScreen
+: CDrawContext oldValue
+: CControl onBitmap
+: CVuMeter
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x70.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x70.html
new file mode 100644
index 0000000..ddfeeff
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x70.html
@@ -0,0 +1,112 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x72.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x72.html
new file mode 100644
index 0000000..9f668cd
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x72.html
@@ -0,0 +1,94 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x73.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x73.html
new file mode 100644
index 0000000..d0f2930
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x73.html
@@ -0,0 +1,103 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+sc
+: CScrollView scheme
+: COptionMenu scrollerArea
+: CScrollbar scrollerColor
+: CScrollbar scrollerLength
+: CScrollbar scrollSize
+: CScrollbar selectionColor
+: COptionMenuScheme shadowColor
+: CParamDisplay size
+: CView sizeOfPointer
+: CAttributeListEntry sizeReturnPath
+: VstFileSelect splashScreen
+: CSplashScreenView startAngle
+: CKnob stepValue
+: CScrollbar string2FloatConvert
+: CParamDisplay stringConvert
+: CParamDisplay stringConvert2
+: CParamDisplay style
+: CVuMeter , CSlider , CRockerSwitch , CParamDisplay , COnOffButton , CTabView , CScrollbar , CScrollView submenuEntry
+: COptionMenu subPixmaps
+: CAutoAnimation , CMovieBitmap , CHorizontalSwitch , CVerticalSwitch , CAnimKnob systemWindow
+: PluginGUIEditor
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x74.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x74.html
new file mode 100644
index 0000000..6e8d16a
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x74.html
@@ -0,0 +1,96 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x75.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x75.html
new file mode 100644
index 0000000..c839bfd
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x75.html
@@ -0,0 +1,84 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x76.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x76.html
new file mode 100644
index 0000000..9405b4c
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x76.html
@@ -0,0 +1,90 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x77.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x77.html
new file mode 100644
index 0000000..bef06f1
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x77.html
@@ -0,0 +1,86 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x78.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x78.html
new file mode 100644
index 0000000..8988204
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x78.html
@@ -0,0 +1,85 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x79.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x79.html
new file mode 100644
index 0000000..53cfeb8
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x79.html
@@ -0,0 +1,85 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/functions_vars_0x7a.html b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x7a.html
new file mode 100644
index 0000000..4acba8c
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/functions_vars_0x7a.html
@@ -0,0 +1,83 @@
+
+
+VSTGUI: Class Members - Variables
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals.html b/vstgui.sf/vstgui/Documentation/html/globals.html
new file mode 100644
index 0000000..2726be6
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals.html
@@ -0,0 +1,78 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x61.html b/vstgui.sf/vstgui/Documentation/html/globals_0x61.html
new file mode 100644
index 0000000..fd94a35
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x61.html
@@ -0,0 +1,77 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x62.html b/vstgui.sf/vstgui/Documentation/html/globals_0x62.html
new file mode 100644
index 0000000..dff208d
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x62.html
@@ -0,0 +1,78 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x63.html b/vstgui.sf/vstgui/Documentation/html/globals_0x63.html
new file mode 100644
index 0000000..bfe3770
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x63.html
@@ -0,0 +1,92 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x65.html b/vstgui.sf/vstgui/Documentation/html/globals_0x65.html
new file mode 100644
index 0000000..ecfa583
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x65.html
@@ -0,0 +1,78 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x66.html b/vstgui.sf/vstgui/Documentation/html/globals_0x66.html
new file mode 100644
index 0000000..72588bb
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x66.html
@@ -0,0 +1,78 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x67.html b/vstgui.sf/vstgui/Documentation/html/globals_0x67.html
new file mode 100644
index 0000000..4374576
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x67.html
@@ -0,0 +1,81 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x6b.html b/vstgui.sf/vstgui/Documentation/html/globals_0x6b.html
new file mode 100644
index 0000000..e5c8e90
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x6b.html
@@ -0,0 +1,175 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+k2PI
+: vstcontrols.h k3DIn
+: vstcontrols.h k3DOut
+: vstcontrols.h kAlt
+: vstgui.h kAntialias
+: vstgui.h kApple
+: vstgui.h kBlackCColor
+: vstgui.h , vstgui.cpp kBlueCColor
+: vstgui.h , vstgui.cpp kBoldFace
+: vstgui.h kBottom
+: vstcontrols.h kCenterText
+: vstgui.h kCheckStyle
+: vstcontrols.h kCircularMode
+: vstgui.h kControl
+: vstgui.h kCopyMode
+: vstgui.h kCursorCopy
+: vstgui.h kCursorDefault
+: vstgui.h kCursorHand
+: vstgui.h kCursorHSize
+: vstgui.h kCursorNESWSize
+: vstgui.h kCursorNotAllowed
+: vstgui.h kCursorNWSESize
+: vstgui.h kCursorSizeAll
+: vstgui.h kCursorVSize
+: vstgui.h kCursorWait
+: vstgui.h kCViewAttributeReferencePointer
+: vstgui.h , vstgui.cpp kCyanCColor
+: vstgui.h , vstgui.cpp kDoubleClickStyle
+: vstcontrols.h kDragDelay
+: vstgui.cpp kDrawFilled
+: vstgui.h kDrawFilledAndStroked
+: vstgui.h kDrawStroked
+: vstgui.h kE
+: vstcontrols.h kGreenCColor
+: vstgui.h , vstgui.cpp kGreyCColor
+: vstgui.h , vstgui.cpp kHorizontal
+: vstcontrols.h kIdleRate
+: plugguieditor.cpp , aeffguieditor.cpp kIdleRate2
+: plugguieditor.cpp , aeffguieditor.cpp kIdleRateMin
+: plugguieditor.cpp , aeffguieditor.cpp kItalicFace
+: vstgui.h kLButton
+: vstgui.h kLeft
+: vstcontrols.h kLeftText
+: vstgui.h kLinearMode
+: vstgui.h kLineOnOffDash
+: vstgui.h kLineSolid
+: vstgui.h kLN2
+: vstcontrols.h kMagentaCColor
+: vstgui.h , vstgui.cpp kMButton
+: vstgui.h kMenuDisable
+: vstcontrols.h kMenuSeparator
+: vstcontrols.h kMenuSubMenu
+: vstcontrols.h kMenuTitle
+: vstcontrols.h kMessageNotified
+: vstgui.h kMessageUnknown
+: vstgui.h kMouseWheelAxisX
+: vstgui.h kMouseWheelAxisY
+: vstgui.h kMsgCheckIfViewContainer
+: vstgui.h , vstgui.cpp kMultipleCheckStyle
+: vstcontrols.h kNoDrawStyle
+: vstcontrols.h kNoFrame
+: vstcontrols.h kNormalFace
+: vstgui.h kNormalFont
+: vstgui.h kNormalFontBig
+: vstgui.h kNormalFontSmall
+: vstgui.h kNormalFontSmaller
+: vstgui.h kNormalFontVeryBig
+: vstgui.h kNormalFontVerySmall
+: vstgui.h kNoTextStyle
+: vstcontrols.h kNumStandardFonts
+: vstgui.h kOrMode
+: vstgui.h kPathMax
+: cfileselector.cpp kPI
+: vstcontrols.h kPI_2
+: vstcontrols.h kPI_4
+: vstcontrols.h kPopupStyle
+: vstcontrols.h kRButton
+: vstgui.h kRedCColor
+: vstgui.h , vstgui.cpp kRelativCircularMode
+: vstgui.h kRight
+: vstcontrols.h kRightText
+: vstgui.h kShadowText
+: vstcontrols.h kShift
+: vstgui.h kSQRT2
+: vstcontrols.h kSymbolFont
+: vstgui.h kSystemFont
+: vstgui.h kTabButtonTagStart
+: ctabview.cpp kTop
+: vstcontrols.h kTransparentCColor
+: vstgui.h , vstgui.cpp kUnderlineFace
+: vstgui.h kVertical
+: vstcontrols.h kVstDirectorySelect
+: cfileselector.h kVstFileLoad
+: cfileselector.h kVstFileSave
+: cfileselector.h kVstFileType
+: cfileselector.h kVstMultipleFilesLoad
+: cfileselector.h kWhiteCColor
+: vstgui.h , vstgui.cpp kXorMode
+: vstgui.h kYellowCColor
+: vstgui.h , vstgui.cpp
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x6d.html b/vstgui.sf/vstgui/Documentation/html/globals_0x6d.html
new file mode 100644
index 0000000..0d69358
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x6d.html
@@ -0,0 +1,86 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x6e.html b/vstgui.sf/vstgui/Documentation/html/globals_0x6e.html
new file mode 100644
index 0000000..4bb87f1
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x6e.html
@@ -0,0 +1,77 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x6f.html b/vstgui.sf/vstgui/Documentation/html/globals_0x6f.html
new file mode 100644
index 0000000..75949ea
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x6f.html
@@ -0,0 +1,78 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x71.html b/vstgui.sf/vstgui/Documentation/html/globals_0x71.html
new file mode 100644
index 0000000..d173273
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x71.html
@@ -0,0 +1,77 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x72.html b/vstgui.sf/vstgui/Documentation/html/globals_0x72.html
new file mode 100644
index 0000000..0676ed4
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x72.html
@@ -0,0 +1,77 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x73.html b/vstgui.sf/vstgui/Documentation/html/globals_0x73.html
new file mode 100644
index 0000000..ed3ae28
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x73.html
@@ -0,0 +1,82 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x74.html b/vstgui.sf/vstgui/Documentation/html/globals_0x74.html
new file mode 100644
index 0000000..7783178
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x74.html
@@ -0,0 +1,78 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x75.html b/vstgui.sf/vstgui/Documentation/html/globals_0x75.html
new file mode 100644
index 0000000..e8f4491
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x75.html
@@ -0,0 +1,83 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x76.html b/vstgui.sf/vstgui/Documentation/html/globals_0x76.html
new file mode 100644
index 0000000..7c2b793
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x76.html
@@ -0,0 +1,146 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_0x77.html b/vstgui.sf/vstgui/Documentation/html/globals_0x77.html
new file mode 100644
index 0000000..4dbbe47
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_0x77.html
@@ -0,0 +1,77 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+Here is a list of all file members with links to the files they belong to:
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_defs.html b/vstgui.sf/vstgui/Documentation/html/globals_defs.html
new file mode 100644
index 0000000..6d84ce5
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_defs.html
@@ -0,0 +1,179 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_enum.html b/vstgui.sf/vstgui/Documentation/html/globals_enum.html
new file mode 100644
index 0000000..5dc84a4
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_enum.html
@@ -0,0 +1,65 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_eval.html b/vstgui.sf/vstgui/Documentation/html/globals_eval.html
new file mode 100644
index 0000000..e7db6ee
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_eval.html
@@ -0,0 +1,196 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_type.html b/vstgui.sf/vstgui/Documentation/html/globals_type.html
new file mode 100644
index 0000000..da1e678
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_type.html
@@ -0,0 +1,54 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/globals_vars.html b/vstgui.sf/vstgui/Documentation/html/globals_vars.html
new file mode 100644
index 0000000..1611e9b
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/globals_vars.html
@@ -0,0 +1,67 @@
+
+
+VSTGUI: Class Members
+
+
+
+
+
+
+
+
+
+
+gOptionMenuScheme
+: vstcontrols.h , vstcontrols.cpp gStandardFontName
+: vstcontrols.cpp gStandardFontSize
+: vstcontrols.cpp kBlackCColor
+: vstgui.h , vstgui.cpp kBlueCColor
+: vstgui.h , vstgui.cpp kCViewAttributeReferencePointer
+: vstgui.h , vstgui.cpp kCyanCColor
+: vstgui.h , vstgui.cpp kGreenCColor
+: vstgui.h , vstgui.cpp kGreyCColor
+: vstgui.h , vstgui.cpp kMagentaCColor
+: vstgui.h , vstgui.cpp kMsgCheckIfViewContainer
+: vstgui.h , vstgui.cpp kRedCColor
+: vstgui.h , vstgui.cpp kTransparentCColor
+: vstgui.h , vstgui.cpp kWhiteCColor
+: vstgui.h , vstgui.cpp kYellowCColor
+: vstgui.h , vstgui.cpp
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/hierarchy.html b/vstgui.sf/vstgui/Documentation/html/hierarchy.html
new file mode 100644
index 0000000..e3ee9a1
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/hierarchy.html
@@ -0,0 +1,114 @@
+
+
+VSTGUI: Hierarchical Index
+
+
+
+
+
+
+VSTGUI Class Hierarchy This inheritance list is sorted roughly, but not completely, alphabetically:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/index.html b/vstgui.sf/vstgui/Documentation/html/index.html
new file mode 100644
index 0000000..97a977d
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/index.html
@@ -0,0 +1,8 @@
+
+
+VSTGUI
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/intro.html b/vstgui.sf/vstgui/Documentation/html/intro.html
new file mode 100644
index 0000000..ef70551
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/intro.html
@@ -0,0 +1,63 @@
+
+
+VSTGUI: Introduction
+
+
+
+
+
+
+Essentially, a VST Plug-in is a pure audio processing component, and not an audio application: It is a component that is utilized within a host application. This host application provides the audio streams that are processed by the plug-in's code.
+Generally speaking, a VST plug-in it can take a stream of audio data, apply a process to the audio, and return the result to the host application. A VST Plug-In performs its process normally using the processor of the computer; It does not necessarily need dedicated digital signal processors. The audio stream is broken down into a series of blocks. The host supplies the blocks in sequence. The host and its current environment control the block-size. The VST applicationsPlug-In maintains the status of all its own parameters relating to the running process: The host does not maintain any information about what the plug-in did with the last block of data it processed.
+From the host application’s point of view, a VST Plug-In is a black box with an arbitrary number of inputs, outputs (MIDI or Audio), and associated parameters. The host needs no implicit knowledge of the plug-in's process to be able to use it. The plug-in process can use whatever parameters it wishes, internally to the process, but depending on the capabilities of the host, it can allow the changes to user parameters to be automated by the host.
+The source code of a VST Plug-In is platform independent, but the delivery system depends on the platform architecture:
+
+On the Windows platform, a VST Plug-In is a multi-threaded DLL (Dynamic Link Library). A standard (default) folder for the VST Plug-Ins is defined in the registry under "HKEY_LOCAL_MACHINE\SOFTWARE\VST\VSTPluginsPath".
+On Mac OS X , a VST Plug-In is a Bundle. You define the Plug-In's name in the plist.info file with the CFBundleName key.
+On BeOS and SGI (under MOTIF, UNIX), a VST Plug-In is a shared Library.
+
+To learn more about VST you can subscribe to the VST Developer Mailing List - check the 3rd Party Developer Support section at www.steinberg.net .
+
+
+Audio processing in the plug is accomplished by one of 3 methods, namely process (), processReplacing () and processDoubleReplacing (). While process () takes input data, applies its processing algorithm, and then adds the result to the output (accumulating), processReplacing () and processDoubleReplacing (), overwrite the output buffer.
+
Note: The accumulating process mode is deprecated in VST 2.4. Please implement processReplacing (mandatory!) and processDoubleReplacing (optional).
+Audio data processed by VST Plug-Ins is 32 bit (single precision) and optionally 64 bit (double precision) floating-point data. The default used range is from -1.0 to +1.0 inclusive [-1.0, +1.0] (where 1.0 corresponds to 0dB, 0.5 to -6dB and 0.0 to -oodB). Note that an effect could generate values above this range.
+All parameters - the user parameters, acting directly or indirectly on that data, as automated by the host, are 32 bit floating-point data. They must always range from 0.0 to 1.0 inclusive [0.0, +1.0], regardless of their internal or external representation.
+
See also: Threading issues
+
+
+If you want to develop a VST Plug-In, you may prefer to go straight to the code examples now. These are very simple examples in which you will learn most of the important basic concepts just by reading a few lines of code. As a Plug-In developer you actually need to know very little about hosting a Plug-In. You should concentrate on the AudioEffect (VST 1.0) and AudioEffectX (VST 2.x extensions) base classes. Note: Never edit any of the SDK source files. Never ever. The host application relies on them being used as they are provided. Anything can be added or changed by overriding in your private classes derived from AudioEffectX.
+
+
+All user-interface issues are entirely separated from the audio processing issues. At its simplest there is an option where you can avoid providing a user interface at all. In this case the host requests character strings from the Plug-In representing each of the parameters. The host can use the separate ASCII strings for the value, the label, and the units of the parameters to construct its own user interface. This is how the simple code-examples, AGain & ADelay, work. This is also often a good way to develop a VST Plug-In, it offers a very short development cycle to start to test the algorithm. The proper interface can come later.
+The next user interface level is provided when the Plug-In defines its own editor. This allows practically any user interface to be defined. A negative aspect is that then you can quickly land up in platform specifics when dealing with the nuts an bolts of the interface issues, even though the audio process, the concepts and methodology remain platform independent.
+The final option is to use a portable framework for creating sophisticated user interfaces. This framework takes the form of the VSTGUI Library files that are available for almost all supported VST platforms. The VSTGUI Library classes and their usage is described in separate documentation.
See also: VSTGUI on SourceForge
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/license.html b/vstgui.sf/vstgui/Documentation/html/license.html
new file mode 100644
index 0000000..3f3e328
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/license.html
@@ -0,0 +1,97 @@
+
+
+VSTGUI: Licensing Issues
+
+
+
+
+
+The Steinberg VST Plug-In Software Development Kit can be used freely subject to certain licensing conditions by anyone interested in developing Plug-Ins, or to extend an application so that it’s capable of hosting VST Plug-Ins. When you chose to receive the VST Plug-In SDK you declared yourself to be in agreement with the Licensing conditions.
+These notes don’t replace the licensing agreement in any way, but quickly explain what you can and cannot do with the Steinberg VST Plug-In Software Development Kit.
+
+is not time limited.
+is subject to the laws of the Federal Republic of Germany only.
+its remaining conditions remain valid even if one of the conditions becomes invalid.
+
+
+
+is created with the sole aim that you can create or host VST Plug-Ins.
+is offered ‘AS IS’ and we make no claims about how suitable it is for your application.
+
+
+
+still holds the copyright for VST Plug-In specification.
+are not responsible for anything that happens because you chose to use the VST Plug-In Interface.
+cannot be held liable if your use of the VST Plug-In Interfaces causes damage or loss to anyone.
+may release improved versions of the Licensed Software Developer Kit
+offer no commitment that updates will occur at anytime or for anybody.
+are not aware of VST Plug-In technology infringing the intellectual copyright of anyone else,
+cannot accept any responsibility for any claims made against you.
+
+
+
+transfer your License to anyone
+license the information contained in this SDK to anyone else.
+sell the information contained in this SDK to anyone.
+re-work or otherwise pass this technology off as your own.
+give it away or in any other way distribute it, or cause it to be become distributed.
+use the VST logo or other marks on promotional merchandise. So no VST t-shirts or baseball caps.
+claim to be a partner of Steinberg or be acting on our behalf.
+make any statements on Steinberg’s behalf.
+
+
+
+bring the VST technology into disrepute, or damage its reputation in any way.
+use VST technology in connection with products that are obscene, pornographic or illegal.
+use VST technology in connection with products that are excessively violent, or in poor taste.
+break the rules of the license, or we have the right terminate the License immediately.
+
+
+
+include references to Steinberg’s copyrights and trademarks in a product that uses this SDK.
+ensure “VST is a trademark of Steinberg Media Technologies GmbH” appears on any packaging
+place the VST Logo on packages and promotional material. We provide the artwork.
+add our copyright notice to your about box. “VST Plug-In Technology by Steinberg.”
+agree that we hold your details on file for our internal purposes.
+inform Steinberg immediately if any one makes a claim against you in regard to VST-Plug-Ins.
+make sure the end-publisher of your work is also a VST license holder.
+
+
+
+make VST Plug-Ins or VST Host Applications and distribute them worldwide.
+release products without having to pay to use the VST Plug-In Interface technology
+use VST technology in Demo Versions of your products.
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/maceditor.html b/vstgui.sf/vstgui/Documentation/html/maceditor.html
new file mode 100644
index 0000000..702648f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/maceditor.html
@@ -0,0 +1,73 @@
+
+
+VSTGUI: Macintosh Editor as HIViewRef
+
+
+
+
+
+
+In the beginning of VST the Plug-In's GUI was attached at the left-top corner without a mechanism for the host to move it. This and the evolution of the macintosh platform makes it necessary to change this old behaviour. The modern way on Mac OS X to do UI design with C/C++ is to use HIViews and window compositing.
+ The VST SDK 2.4 requires the Plug-In to attach one HIView to the window and that this HIView can be moved around and that it can be embedded into other subviews.
+ Hosts which implement VST 2.4 need to provide a window to the Plug-In which is composited if the Plug-In itself uses 2.4. If the Plug-In uses an earlier VST SDK it should provide a non composited window.
+
+
+As before the ptr in effEditOpen is a WindowRef. You need to add one HIView to the content view of this window.
+
HIViewRef contentView;
+if (HIViewFindByID (HIViewGetRoot ((WindowRef)ptr, kHIViewWindowContentID, &contentView) == noErr)
+ HIViewAddSubview (contentView, myPluginView);
+
+
+
+When effEditClose is called you should remove your HIView from the window.
+
HIViewRemoveFromSuperview (myPluginView);
+
+Don't do anything with the window. It is not your window.
+
+
+If you want to resize your view, just do it, but don't resize the host window.
+
HIRect pluginBounds;
+HIViewGetFrame (myPluginView, &pluginBounds);
+pluginBounds.size.width = newWidth;
+pluginBounds.size.height = newHeight;
+HIViewSetFrame (myPluginView, &pluginBounds);
+
+The host needs to listen to bounds changes on the Plug-In view and resize its window accordingly.
+
+
+You need to use Carbon Events now, which you register on the HIView, not on the window if possible. But don't remove these opcodes from your editor yet.
+
+
+Now there is a conflict situation that VST 2.3 hosts may not work with HIViews and window compositing. Therefore you need at least support effEditDraw, so that your Plug-In draws correctly in these hosts. Mouse, idle and activation events can be handled via Carbon Events.
+
See also: Apple HIView Programming Guide
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/main.html b/vstgui.sf/vstgui/Documentation/html/main.html
new file mode 100644
index 0000000..ed6ccc1
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/main.html
@@ -0,0 +1,47 @@
+
+
+VSTGUI: Main Page
+
+
+
+
+
+VSTGUI Documentation
+
+Welcome to VSTGUI 3.0!
+Providing an interface to your Plug-In makes you be immediately confronted with platform specifics of different windows handling and event handling models. For this very reason, the VSTGUI libraries have been created. These are available for all supported platforms and make the handling of user interaction with a graphic-rich user interface also cross-platform. Thus they propose common objects for plugs's GUI, like knobs , sliders ...and of course nothing prevents you from adding via inheritance any more specific components you should need.
+You can contribute to VSTGUI development thru Sourceforge project (http://sourceforge.net/projects/vstgui/ ). You can join the associated mailing list (check https://lists.sourceforge.net/lists/listinfo/vstgui-devel )
+The source code of VSTGUI is included in this SDK and is under the following Licensing:
+
+ 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.
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/others.html b/vstgui.sf/vstgui/Documentation/html/others.html
new file mode 100644
index 0000000..3f774a9
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/others.html
@@ -0,0 +1,51 @@
+
+
+VSTGUI: Others
+
+
+
+
+
+
+The VSTMonitor Plug-In provided with this SDK is dedicated to "monitor" the communications between a VST Plug-In and the host which instanciates it: it keeps track of all the calls made by the host to the Plug-In's dispatcher, and of all the calls made by the Plug-In to the host's audiomaster. This is useful to record the sequence of calls done by any host to a VST Plug-In while loading it. Besides VSTMonitor has a "trigger" function which lets the user trigger (via a pop-up menu) any call to the host's audiomaster, to see how the host reacts (and notably to see if the function is implemented by the host...).
+You will find this plug-in in the VSTPlug-ins folder dedicated to each platform. You only need to put it directly in your own VST plug-ins folder in order to make it work.
+Calls made by the host to the plug-in are shown in grey, calls from the plug-in to the host are displayed in red. Internal (to the plug-in) calls are shown in blue.
+All the GUI buttons don't correspond to "real" parameters declared to the host, in order to prevent from disturbing the monitoring. Nevertheless, 3 "real" parameters and 2 programs are declared "publically" (although they are not used internally) to let you see how they are handled by the host.
+
Note: Many hosts, while loading, open each Vst plug-in, for example to check their IO configuration. This is "hidden" to the user (as the plug-in is always closed as soon as the information needed has been recorded by the host), but VstMonitor can record even those calls, and display them the next time it is opened "normally" in the sequencer. That's why while the host is loading, an alert window may be automatically opened (on Windows platform), asking if the user want to keep track of "what has happened" (and although he has not explicitly opened the plug-in). On Mac, things recorded are kept by default (use Reset -see below- to delete them).
+VstMonitor's buttons:
+
+display : by default, comms (a "comm" means a call to the dispatcher or audiomaster) are not automatically displayed when they occur. Clicking on this button causes the displaying.
+reset : used to erase all the comms recorded.
+export : export as a .txt file all the comms recorded,
+trigger : a pop-up menu from which you can select a call to the host you would like to trigger VstMonitor's options :
+filters : the user can choose to filter (ie not display, as they are always recorded in the background) some coms. In order to do that, you simply need to right-click (in the display) on the comm you want to filter. This comm is then added to the "filter menu" (one of the buttons beneath the display). Clicking on the name of a function in this menu cause the filter to be removed. Some filters are set by default, notably those which concern parameters (setParameter...), but can be unset via the menu.
+function's params : the user can choose to display the parameters of the calls
+function's returned value : the user can choose to display the "result" of th call (it means the value returned, and pointers which have been filled if necessary).
+continuous display : set this if you want the synchronous display of the comms.
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/pages.html b/vstgui.sf/vstgui/Documentation/html/pages.html
new file mode 100644
index 0000000..a5db300
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/pages.html
@@ -0,0 +1,37 @@
+
+
+VSTGUI: Page Index
+
+
+
+
+
+VSTGUI Related Pages Here is a list of all related documentation pages:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/plugguieditor_8cpp.html b/vstgui.sf/vstgui/Documentation/html/plugguieditor_8cpp.html
new file mode 100644
index 0000000..ace74e7
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/plugguieditor_8cpp.html
@@ -0,0 +1,119 @@
+
+
+VSTGUI: plugguieditor.cpp File Reference
+
+
+
+
+
+
+plugguieditor.cpp File Reference #include "plugguieditor.h "
+
+Define Documentation
+
+
+
+
+
+
+ #define kIdleRate 100
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kIdleRate2 50
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kIdleRateMin 4
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/plugguieditor_8h.html b/vstgui.sf/vstgui/Documentation/html/plugguieditor_8h.html
new file mode 100644
index 0000000..9984988
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/plugguieditor_8h.html
@@ -0,0 +1,47 @@
+
+
+VSTGUI: plugguieditor.h File Reference
+
+
+
+
+
+
+plugguieditor.h File Reference #include "vstgui.h "
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/sequences.html b/vstgui.sf/vstgui/Documentation/html/sequences.html
new file mode 100644
index 0000000..61fa489
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/sequences.html
@@ -0,0 +1,97 @@
+
+
+VSTGUI: VST Calling Sequences
+
+
+
+
+
+
+The diagrams below illustrate the most important calling sequences taking place between VST host application and plug-in. This is of interest to plug-in developers as well as to host developers.
+
+
+In general, processEvents(), startProcess(), stopProcess(), process(), processReplacing() and processDoubleReplacing() are called from a time-critical high priority thread (except for offline processing).
+ To satisfy realtime constraints for low latency audio processing, memory allocations and lock-based syncronisation should be avoided.
+ The same applies to setParameter() and setProgram() when playing automation from host. Any others functions are called from UI thread in general.
+ The host takes care that processing and setup functions are isolated from each other. setSampleRate(), setBlockSize(), setProcessPrecision(), etc. calls occur only in suspended state, i.e. before resume() is called.
+
+
+
+
+
+
+
+
+
Figure 3: A plug-in is initialized
+
+
+
Figure 4: A plug-in is terminated
+
+
+
+
+
Figure 1: A plug-in is turned on
+
+
+
Figure 2: A plug-in is turned off
+
+
+
+
+
Figure 6: The sample rate changed
+
+
+
Figure 9: The block size changed
+
+
+
+
+
+
+
Figure 5: The speaker arrangements negotiation between the host and the plug-in
+
+
+
+
+
Figure 7: The number of IOs changed caused e.g. by user interaction
+
+
+
+
+
Figure 8: A control changed within the userinterface of the plug-in
+
+
+
+
+
Figure 10: A plug-in processes offline
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_c_color-members.html b/vstgui.sf/vstgui/Documentation/html/struct_c_color-members.html
new file mode 100644
index 0000000..8e93719
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_c_color-members.html
@@ -0,0 +1,49 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CColor Member List This is the complete list of members for CColor , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_c_color.html b/vstgui.sf/vstgui/Documentation/html/struct_c_color.html
new file mode 100644
index 0000000..448633c
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_c_color.html
@@ -0,0 +1,320 @@
+
+
+VSTGUI: CColor Struct Reference
+
+
+
+
+
+
+CColor Struct Reference #include <vstgui.h>
+
+List of all members.
+Member Function Documentation
+
+
+
+
+
+
+ bool CColor::operator!=
+ (
+ const CColor &
+ other
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor & CColor::operator()
+ (
+ unsigned char
+ red ,
+
+
+
+
+ unsigned char
+ green ,
+
+
+
+
+ unsigned char
+ blue ,
+
+
+
+
+ unsigned char
+ alpha
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor & CColor::operator=
+ (
+ const CColor &
+ newColor
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CColor::operator==
+ (
+ const CColor &
+ other
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CColor CColor::operator~
+ (
+
+ )
+ [inline]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_c_point-members.html b/vstgui.sf/vstgui/Documentation/html/struct_c_point-members.html
new file mode 100644
index 0000000..69b71d7
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_c_point-members.html
@@ -0,0 +1,50 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CPoint Member List This is the complete list of members for CPoint , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_c_point.html b/vstgui.sf/vstgui/Documentation/html/struct_c_point.html
new file mode 100644
index 0000000..89cf6fa
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_c_point.html
@@ -0,0 +1,349 @@
+
+
+VSTGUI: CPoint Struct Reference
+
+
+
+
+
+
+CPoint Struct Reference #include <vstgui.h>
+
+List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CPoint::CPoint
+ (
+ CCoord
+ h = 0,
+
+
+
+
+ CCoord
+ v = 0
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ bool CPoint::isInside
+ (
+ CRect &
+ r
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CPoint & CPoint::offset
+ (
+ CCoord
+ h ,
+
+
+
+
+ CCoord
+ v
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CPoint::operator!=
+ (
+ const CPoint &
+ other
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CPoint & CPoint::operator()
+ (
+ CCoord
+ h ,
+
+
+
+
+ CCoord
+ v
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CPoint::operator==
+ (
+ const CPoint &
+ other
+ )
+ const [inline]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_c_rect-members.html b/vstgui.sf/vstgui/Documentation/html/struct_c_rect-members.html
new file mode 100644
index 0000000..3f67edf
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_c_rect-members.html
@@ -0,0 +1,66 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+CRect Member List This is the complete list of members for CRect , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_c_rect.html b/vstgui.sf/vstgui/Documentation/html/struct_c_rect.html
new file mode 100644
index 0000000..4429a87
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_c_rect.html
@@ -0,0 +1,838 @@
+
+
+VSTGUI: CRect Struct Reference
+
+
+
+
+
+
+CRect Struct Reference #include <vstgui.h>
+
+List of all members.
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ CRect::CRect
+ (
+ CCoord
+ left = 0,
+
+
+
+
+ CCoord
+ top = 0,
+
+
+
+
+ CCoord
+ right = 0,
+
+
+
+
+ CCoord
+ bottom = 0
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CRect::CRect
+ (
+ const CRect &
+ r
+ )
+ [inline]
+
+
+
+
+
+
+Member Function Documentation
+
+
+
+
+
+
+ void CRect::bound
+ (
+ const CRect &
+ rect
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CCoord CRect::getHeight
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CCoord CRect::getWidth
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CCoord CRect::height
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CRect & CRect::inset
+ (
+ CCoord
+ deltaX ,
+
+
+
+
+ CCoord
+ deltaY
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CRect::isEmpty
+ (
+
+ )
+ const
+
+
+
+
+
+
+
+
+
+
+
+
+ CRect & CRect::moveTo
+ (
+ CCoord
+ x ,
+
+
+
+
+ CCoord
+ y
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CRect & CRect::offset
+ (
+ CCoord
+ x ,
+
+
+
+
+ CCoord
+ y
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CRect::operator!=
+ (
+ const CRect &
+ other
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CRect & CRect::operator()
+ (
+ CCoord
+ left ,
+
+
+
+
+ CCoord
+ top ,
+
+
+
+
+ CCoord
+ right ,
+
+
+
+
+ CCoord
+ bottom
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CRect::operator==
+ (
+ const CRect &
+ other
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CRect::pointInside
+ (
+ const CPoint &
+ where
+ )
+ const
+
+
+
+
+
+
+
+
+
+
+
+
+ bool CRect::rectOverlap
+ (
+ const CRect &
+ rect
+ )
+ const [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CRect::setHeight
+ (
+ CCoord
+ height
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ void CRect::setWidth
+ (
+ CCoord
+ width
+ )
+ [inline]
+
+
+
+
+
+
+
+
+
+
+
+
+ CCoord CRect::width
+ (
+
+ )
+ const [inline]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this struct was generated from the following files:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_e_rect-members.html b/vstgui.sf/vstgui/Documentation/html/struct_e_rect-members.html
new file mode 100644
index 0000000..f71d82d
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_e_rect-members.html
@@ -0,0 +1,44 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+ERect Member List This is the complete list of members for ERect , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_e_rect.html b/vstgui.sf/vstgui/Documentation/html/struct_e_rect.html
new file mode 100644
index 0000000..2832d0f
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_e_rect.html
@@ -0,0 +1,148 @@
+
+
+VSTGUI: ERect Struct Reference
+
+
+
+
+
+
+ERect Struct Reference #include <plugguieditor.h>
+
+List of all members.
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_vst_file_select-members.html b/vstgui.sf/vstgui/Documentation/html/struct_vst_file_select-members.html
new file mode 100644
index 0000000..81db599
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_vst_file_select-members.html
@@ -0,0 +1,53 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+VstFileSelect Member List This is the complete list of members for VstFileSelect , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_vst_file_select.html b/vstgui.sf/vstgui/Documentation/html/struct_vst_file_select.html
new file mode 100644
index 0000000..d5d44af
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_vst_file_select.html
@@ -0,0 +1,373 @@
+
+
+VSTGUI: VstFileSelect Struct Reference
+
+
+
+
+
+
+VstFileSelect Struct Reference #include <cfileselector.h>
+
+List of all members.
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_vst_file_type-members.html b/vstgui.sf/vstgui/Documentation/html/struct_vst_file_type-members.html
new file mode 100644
index 0000000..55e7d21
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_vst_file_type-members.html
@@ -0,0 +1,47 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+VstFileType Member List This is the complete list of members for VstFileType , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_vst_file_type.html b/vstgui.sf/vstgui/Documentation/html/struct_vst_file_type.html
new file mode 100644
index 0000000..847a55a
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_vst_file_type.html
@@ -0,0 +1,263 @@
+
+
+VSTGUI: VstFileType Struct Reference
+
+
+
+
+
+
+VstFileType Struct Reference #include <cfileselector.h>
+
+List of all members.
+
+Public Member Functions
+ VstFileType (char *_name, char *_macType, char *_dosType, char *_unixType=0, char *_mimeType1=0, char *_mimeType2=0)
+
+Public Attributes
+char name [128]
+
+char macType [8]
+
+char dosType [8]
+
+char unixType [8]
+
+char mimeType1 [128]
+
+char mimeType2 [128]
+
+
+Constructor & Destructor Documentation
+
+
+
+
+
+
+ VstFileType::VstFileType
+ (
+ char *
+ _name ,
+
+
+
+
+ char *
+ _macType ,
+
+
+
+
+ char *
+ _dosType ,
+
+
+
+
+ char *
+ _unixType = 0,
+
+
+
+
+ char *
+ _mimeType1 = 0,
+
+
+
+
+ char *
+ _mimeType2 = 0
+
+
+
+ )
+ [inline]
+
+
+
+
+
+
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_vst_key_code-members.html b/vstgui.sf/vstgui/Documentation/html/struct_vst_key_code-members.html
new file mode 100644
index 0000000..019b07b
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_vst_key_code-members.html
@@ -0,0 +1,43 @@
+
+
+VSTGUI: Member List
+
+
+
+
+
+
+VstKeyCode Member List This is the complete list of members for VstKeyCode , including all inherited members.
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/struct_vst_key_code.html b/vstgui.sf/vstgui/Documentation/html/struct_vst_key_code.html
new file mode 100644
index 0000000..a3362a8
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/struct_vst_key_code.html
@@ -0,0 +1,123 @@
+
+
+VSTGUI: VstKeyCode Struct Reference
+
+
+
+
+
+
+VstKeyCode Struct Reference #include <vstkeycode.h>
+
+List of all members.
+Member Data Documentation
+
+
+
+
+
+
+
+
+
+ The documentation for this struct was generated from the following file:
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/tab_b.gif b/vstgui.sf/vstgui/Documentation/html/tab_b.gif
new file mode 100644
index 0000000..0d62348
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/tab_b.gif differ
diff --git a/vstgui.sf/vstgui/Documentation/html/tab_l.gif b/vstgui.sf/vstgui/Documentation/html/tab_l.gif
new file mode 100644
index 0000000..9b1e633
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/tab_l.gif differ
diff --git a/vstgui.sf/vstgui/Documentation/html/tab_r.gif b/vstgui.sf/vstgui/Documentation/html/tab_r.gif
new file mode 100644
index 0000000..ce9dd9f
Binary files /dev/null and b/vstgui.sf/vstgui/Documentation/html/tab_r.gif differ
diff --git a/vstgui.sf/vstgui/Documentation/html/tabs.css b/vstgui.sf/vstgui/Documentation/html/tabs.css
new file mode 100644
index 0000000..a61552a
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/tabs.css
@@ -0,0 +1,102 @@
+/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
+
+DIV.tabs
+{
+ float : left;
+ width : 100%;
+ background : url("tab_b.gif") repeat-x bottom;
+ margin-bottom : 4px;
+}
+
+DIV.tabs UL
+{
+ margin : 0px;
+ padding-left : 10px;
+ list-style : none;
+}
+
+DIV.tabs LI, DIV.tabs FORM
+{
+ display : inline;
+ margin : 0px;
+ padding : 0px;
+}
+
+DIV.tabs FORM
+{
+ float : right;
+}
+
+DIV.tabs A
+{
+ float : left;
+ background : url("tab_r.gif") no-repeat right top;
+ border-bottom : 1px solid #84B0C7;
+ font-size : x-small;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+DIV.tabs A:hover
+{
+ background-position: 100% -150px;
+}
+
+DIV.tabs A:link, DIV.tabs A:visited,
+DIV.tabs A:active, DIV.tabs A:hover
+{
+ color: #1A419D;
+}
+
+DIV.tabs SPAN
+{
+ float : left;
+ display : block;
+ background : url("tab_l.gif") no-repeat left top;
+ padding : 5px 9px;
+ white-space : nowrap;
+}
+
+DIV.tabs INPUT
+{
+ float : right;
+ display : inline;
+ font-size : 1em;
+}
+
+DIV.tabs TD
+{
+ font-size : x-small;
+ font-weight : bold;
+ text-decoration : none;
+}
+
+
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+DIV.tabs SPAN {float : none;}
+/* End IE5-Mac hack */
+
+DIV.tabs A:hover SPAN
+{
+ background-position: 0% -150px;
+}
+
+DIV.tabs LI#current A
+{
+ background-position: 100% -150px;
+ border-width : 0px;
+}
+
+DIV.tabs LI#current SPAN
+{
+ background-position: 0% -150px;
+ padding-bottom : 6px;
+}
+
+DIV.nav
+{
+ background : none;
+ border : none;
+ border-bottom : 1px solid #84B0C7;
+}
diff --git a/vstgui.sf/vstgui/Documentation/html/thanks.html b/vstgui.sf/vstgui/Documentation/html/thanks.html
new file mode 100644
index 0000000..e856a3b
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/thanks.html
@@ -0,0 +1,38 @@
+
+
+VSTGUI: Acknowledgements
+
+
+
+
+
+The VSTGUI interfaces & libraries were created by Yvan Grabit and Michael Schmidt (additional development Matthias Juwan, Arne Scheffler). The time they have invested has really made the huge inroads into cross-platform code compatibility.
+Thanks too, to Philippe Goutier who provided the VST Offline Interface.
+Not forgetting Dave Nicholson, Julien Junod, Pierre Jean Camillieri, Janne Roeper, Rene Hansen who did some additional typing.
+There were many more people involved in the creation of this interface, not all of whom can be mentioned here. We extend our thanks not just to the Steinberg Staff and Associates that contributed but also to the many other developers from other parties have helped with their input - mainly all the nice people on the VST Plug-In DEVELOPER MAILING LIST
+Thanks to all of you for having made this possible.
+Charlie Steinberg 2006
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/tree.html b/vstgui.sf/vstgui/Documentation/html/tree.html
new file mode 100644
index 0000000..48c270d
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/tree.html
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+ TreeView
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/vstcontrols_8cpp.html b/vstgui.sf/vstgui/Documentation/html/vstcontrols_8cpp.html
new file mode 100644
index 0000000..7ac750c
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/vstcontrols_8cpp.html
@@ -0,0 +1,127 @@
+
+
+VSTGUI: vstcontrols.cpp File Reference
+
+
+
+
+
+
+vstcontrols.cpp File Reference #include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+#include "vstcontrols.h "
+#include "vstkeycode.h "
+
+Variable Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/vstcontrols_8h.html b/vstgui.sf/vstgui/Documentation/html/vstcontrols_8h.html
new file mode 100644
index 0000000..6bd42cc
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/vstcontrols_8h.html
@@ -0,0 +1,494 @@
+
+
+VSTGUI: vstcontrols.h File Reference
+
+
+
+
+
+
+vstcontrols.h File Reference #include "vstgui.h "
+
+
+Classes
+class CControlListener
+
+class CControl
+
+ base class of all VSTGUI controls More...
+class COnOffButton
+
+ a button control with 2 states More...
+class CParamDisplay
+
+ a parameter display control More...
+class CTextLabel
+
+ a text label More...
+class CTextEdit
+
+ a text edit control More...
+class COptionMenuScheme
+
+class COptionMenu
+
+ a popup menu control More...
+class CKnob
+
+ a knob control More...
+class CAnimKnob
+
+ a bitmap knob control More...
+class CVerticalSwitch
+
+ a vertical switch control More...
+class CHorizontalSwitch
+
+ a horizontal switch control More...
+class CRockerSwitch
+
+ a switch control with 3 sub bitmaps More...
+class CMovieBitmap
+
+ a bitmap control that displays different bitmaps according to its current value More...
+class CMovieButton
+
+ a bi-states button with 2 subbitmaps More...
+class CAutoAnimation
+
+class CSlider
+
+ a slider control More...
+class CVerticalSlider
+
+ a vertical slider control More...
+class CHorizontalSlider
+
+ a horizontal slider control More...
+class CSpecialDigit
+
+ special display with custom numbers (0...9) More...
+class CKickButton
+
+class CSplashScreen
+
+class CVuMeter
+
+Defines
+#define kPI 3.14159265358979323846
+
+#define k2PI 6.28318530717958647692
+
+#define kPI_2 1.57079632679489661923f
+
+#define kPI_4 0.78539816339744830962
+
+#define kE 2.7182818284590452354
+
+#define kLN2 0.69314718055994530942
+
+#define kSQRT2 1.41421356237309504880
+
+#define kMenuTitle "-T"
+
+#define kMenuSeparator "-"
+
+#define kMenuDisable "-G"
+
+#define kMenuSubMenu "-M"
+
+Enumerations
+enum CControlEnum {
+ kHorizontal = 1 << 0,
+kVertical = 1 << 1,
+kShadowText = 1 << 2,
+kLeft = 1 << 3,
+
+ kRight = 1 << 4,
+kTop = 1 << 5,
+kBottom = 1 << 6,
+k3DIn = 1 << 7,
+
+ k3DOut = 1 << 8,
+kPopupStyle = 1 << 9,
+kCheckStyle = 1 << 10,
+kMultipleCheckStyle ,
+
+ kNoTextStyle = 1 << 11,
+kNoDrawStyle = 1 << 12,
+kDoubleClickStyle = 1 << 13,
+kNoFrame = 1 << 14
+
+ }
+
+Variables
+COptionMenuScheme * gOptionMenuScheme
+
+
+Define Documentation
+
+
+
+
+
+
+ #define k2PI 6.28318530717958647692
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kE 2.7182818284590452354
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kLN2 0.69314718055994530942
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kMenuDisable "-G"
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kMenuSeparator "-"
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kMenuSubMenu "-M"
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kMenuTitle "-T"
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kPI 3.14159265358979323846
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kPI_2 1.57079632679489661923f
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kPI_4 0.78539816339744830962
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kSQRT2 1.41421356237309504880
+
+
+
+
+
+
+Enumeration Type Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kHorizontal
+
+ kVertical
+
+ kShadowText
+
+ kLeft
+
+ kRight
+
+ kTop
+
+ kBottom
+
+ k3DIn
+
+ k3DOut
+
+ kPopupStyle
+
+ kCheckStyle
+
+ kMultipleCheckStyle
+
+ kNoTextStyle
+
+ kNoDrawStyle
+
+ kDoubleClickStyle
+
+ kNoFrame
+
+
+
+
+
+
+Variable Documentation
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/vstgui_8cpp.html b/vstgui.sf/vstgui/Documentation/html/vstgui_8cpp.html
new file mode 100644
index 0000000..0ad40ab
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/vstgui_8cpp.html
@@ -0,0 +1,835 @@
+
+
+VSTGUI: vstgui.cpp File Reference
+
+
+
+
+
+
+vstgui.cpp File Reference #include "vstgui.h "
+#include "audioeffectx.h"
+#include "vstkeycode.h "
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+
+Classes
+class CAttributeListEntry
+
+Defines
+#define USE_ALPHA_BLEND QUARTZ || USE_LIBPNG
+
+#define USE_CLIPPING_DRAWRECT 1
+
+#define MAC_OLD_DRAG 1
+
+#define NEW_UPDATE_MECHANISM 1
+
+#define USE_VST_WINDOW (!PLUGGUI && !VST_FORCE_DEPRECATED)
+
+#define USE_GLOBAL_CONTEXT 1
+
+#define VSTGUI_CFrame CFrame
+
+#define VSTGUI_CPoint CPoint
+
+#define VSTGUI_CTextEdit CTextEdit
+
+#define VSTGUI_CColor CColor
+
+#define VSTGUI_CDrawContext CDrawContext
+
+#define VSTGUI_COffscreenContext COffscreenContext
+
+#define VSTGUI_COptionMenu COptionMenu
+
+#define VSTGUI_COptionMenuScheme COptionMenuScheme
+
+#define VSTGUI_CDragContainer CDragContainer
+
+#define kDragDelay 0
+
+#define FOREACHSUBVIEW for (CCView *pSv = pFirstView; pSv; pSv = pSv->pNext) {CView *pV = pSv->pView;
+
+#define FOREACHSUBVIEW_REVERSE (reverse) for (CCView *pSv = reverse ? pLastView : pFirstView; pSv; pSv = reverse ? pSv->pPrevious : pSv->pNext) {CView *pV = pSv->pView;
+
+#define ENDFOR }
+
+Variables
+BEGIN_NAMESPACE_VSTGUI CColor kTransparentCColor = {255, 255, 255, 0}
+
+CColor kBlackCColor = {0, 0, 0, 255}
+
+CColor kWhiteCColor = {255, 255, 255, 255}
+
+CColor kGreyCColor = {127, 127, 127, 255}
+
+CColor kRedCColor = {255, 0, 0, 255}
+
+CColor kGreenCColor = {0 , 255, 0, 255}
+
+CColor kBlueCColor = {0 , 0, 255, 255}
+
+CColor kYellowCColor = {255, 255, 0, 255}
+
+CColor kMagentaCColor = {255, 0, 255, 255}
+
+CColor kCyanCColor = {0 , 255, 255, 255}
+
+char * kMsgCheckIfViewContainer = "kMsgCheckIfViewContainer"
+
+const CViewAttributeID kCViewAttributeReferencePointer = 'cvrp'
+
+
+Define Documentation
+
+
+
+
+
+
+
+
+
+ #define FOREACHSUBVIEW for (CCView *pSv = pFirstView; pSv; pSv = pSv->pNext) {CView *pV = pSv->pView;
+
+
+
+
+
+
+
+
+
+
+
+
+ #define FOREACHSUBVIEW_REVERSE
+ (
+ reverse
+
+ )
+ for (CCView *pSv = reverse ? pLastView : pFirstView; pSv; pSv = reverse ? pSv->pPrevious : pSv->pNext) {CView *pV = pSv->pView;
+
+
+
+
+
+
+
+
+
+
+
+
+ #define kDragDelay 0
+
+
+
+
+
+
+
+
+
+
+
+
+ #define MAC_OLD_DRAG 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define NEW_UPDATE_MECHANISM 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define USE_ALPHA_BLEND QUARTZ || USE_LIBPNG
+
+
+
+
+
+
+
+
+
+
+
+
+ #define USE_CLIPPING_DRAWRECT 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define USE_GLOBAL_CONTEXT 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define USE_VST_WINDOW (!PLUGGUI && !VST_FORCE_DEPRECATED)
+
+
+
+
+
+
+
+
+
+
+
+
+ #define VSTGUI_CColor CColor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #define VSTGUI_CFrame CFrame
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #define VSTGUI_CPoint CPoint
+
+
+
+
+
+
+
+
+
+Variable Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/vstgui_8h.html b/vstgui.sf/vstgui/Documentation/html/vstgui_8h.html
new file mode 100644
index 0000000..5c4cf35
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/vstgui_8h.html
@@ -0,0 +1,1068 @@
+
+
+VSTGUI: vstgui.h File Reference
+
+
+
+
+
+
+vstgui.h File Reference #include "vstcontrols.h "
+#include "aeffguieditor.h "
+
+
+Classes
+struct CRect
+
+struct CPoint
+
+struct CColor
+
+class CReferenceCounter
+
+class CDrawContext
+
+ A drawing context encapsulates the drawing context of the underlying OS. It implements the drawing functions. More...
+class COffscreenContext
+
+ A drawing device which uses a pixmap as its drawing surface. More...
+class CBitmap
+
+ Encapsulates various platform depended kinds of bitmaps. More...
+class CView
+
+class CViewContainer
+
+ Container Class of CView objects. More...
+class CFrame
+
+ The CFrame is the parent container of all views. More...
+class CDragContainer
+
+class CCView
+
+Defines
+#define BEGIN_NAMESPACE_VSTGUI
+
+#define END_NAMESPACE_VSTGUI
+
+#define USING_NAMESPACE_VSTGUI
+
+#define VSTGUI_VERSION_MAJOR 3
+
+#define VSTGUI_VERSION_MINOR 0
+
+#define CLASS_METHODS (name, parent)
+
+Typedefs
+typedef long CCoord
+
+typedef unsigned long CViewAttributeID
+
+Enumerations
+enum CFont {
+ kSystemFont = 0,
+kNormalFontVeryBig ,
+kNormalFontBig ,
+kNormalFont ,
+
+ kNormalFontSmall ,
+kNormalFontSmaller ,
+kNormalFontVerySmall ,
+kSymbolFont ,
+
+ kNumStandardFonts
+
+ }
+
+enum CTxtFace { kNormalFace = 0,
+kBoldFace = 1,
+kItalicFace = 2,
+kUnderlineFace = 4
+ }
+
+enum CLineStyle { kLineSolid = 0,
+kLineOnOffDash
+ }
+
+enum CDrawMode { kCopyMode = 0,
+kOrMode ,
+kXorMode ,
+kAntialias
+ }
+
+enum CHoriTxtAlign { kLeftText = 0,
+kCenterText ,
+kRightText
+ }
+
+enum CButton {
+ kLButton = 1,
+kMButton = 2,
+kRButton = 4,
+kShift = 8,
+
+ kControl = 16,
+kAlt = 32,
+kApple = 64
+
+ }
+
+enum CCursorType {
+ kCursorDefault = 0,
+kCursorWait ,
+kCursorHSize ,
+kCursorVSize ,
+
+ kCursorSizeAll ,
+kCursorNESWSize ,
+kCursorNWSESize ,
+kCursorCopy ,
+
+ kCursorNotAllowed ,
+kCursorHand
+
+ }
+
+enum CKnobMode { kCircularMode = 0,
+kRelativCircularMode ,
+kLinearMode
+ }
+
+enum CDrawStyle { kDrawStroked = 0,
+kDrawFilled ,
+kDrawFilledAndStroked
+ }
+
+enum CMouseWheelAxis { kMouseWheelAxisX = 0,
+kMouseWheelAxisY
+ }
+
+enum { kMessageUnknown = 0,
+kMessageNotified = 1
+ }
+
+Variables
+CColor kTransparentCColor
+
+CColor kBlackCColor
+
+CColor kWhiteCColor
+
+CColor kGreyCColor
+
+CColor kRedCColor
+
+CColor kGreenCColor
+
+CColor kBlueCColor
+
+CColor kYellowCColor
+
+CColor kCyanCColor
+
+CColor kMagentaCColor
+
+const CViewAttributeID kCViewAttributeReferencePointer
+
+char * kMsgCheckIfViewContainer
+
+
+Define Documentation
+
+
+
+
+
+
+ #define BEGIN_NAMESPACE_VSTGUI
+
+
+
+
+
+
+
+
+
+
+
+
+ #define CLASS_METHODS
+ (
+ name,
+
+
+ parent
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Value:
virtual bool isTypeOf (const char * s) const \
+ { return (!strcmp (s, (#name))) ? true : parent::isTypeOf (s); }\
+
+
+
+
+
+
+
+
+
+ #define END_NAMESPACE_VSTGUI
+
+
+
+
+
+
+
+
+
+
+
+
+ #define USING_NAMESPACE_VSTGUI
+
+
+
+
+
+
+
+
+
+
+
+
+ #define VSTGUI_VERSION_MAJOR 3
+
+
+
+
+
+
+
+
+
+
+
+
+ #define VSTGUI_VERSION_MINOR 0
+
+
+
+
+
+
+Typedef Documentation
+
+
+
+
+
+
+Enumeration Type Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kMessageUnknown
+
+ kMessageNotified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kLButton
+
+ kMButton
+
+ kRButton
+
+ kShift
+
+ kControl
+
+ kAlt
+
+ kApple
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kCursorDefault
+
+ kCursorWait
+
+ kCursorHSize
+
+ kCursorVSize
+
+ kCursorSizeAll
+
+ kCursorNESWSize
+
+ kCursorNWSESize
+
+ kCursorCopy
+
+ kCursorNotAllowed
+
+ kCursorHand
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kCopyMode
+
+ kOrMode
+
+ kXorMode
+
+ kAntialias
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kDrawStroked
+
+ kDrawFilled
+
+ kDrawFilledAndStroked
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kSystemFont
+
+ kNormalFontVeryBig
+
+ kNormalFontBig
+
+ kNormalFont
+
+ kNormalFontSmall
+
+ kNormalFontSmaller
+
+ kNormalFontVerySmall
+
+ kSymbolFont
+
+ kNumStandardFonts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kLeftText
+
+ kCenterText
+
+ kRightText
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kCircularMode
+
+ kRelativCircularMode
+
+ kLinearMode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kLineSolid
+
+ kLineOnOffDash
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kMouseWheelAxisX
+
+ kMouseWheelAxisY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ kNormalFace
+
+ kBoldFace
+
+ kItalicFace
+
+ kUnderlineFace
+
+
+
+
+
+
+Variable Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/vstkeycode_8h.html b/vstgui.sf/vstgui/Documentation/html/vstkeycode_8h.html
new file mode 100644
index 0000000..78cf2d2
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/vstkeycode_8h.html
@@ -0,0 +1,303 @@
+
+
+VSTGUI: vstkeycode.h File Reference
+
+
+
+
+
+
+vstkeycode.h File Reference
+
+Classes
+struct VstKeyCode
+
+Enumerations
+enum VstVirtualKey {
+ VKEY_BACK = 1,
+VKEY_TAB ,
+VKEY_CLEAR ,
+VKEY_RETURN ,
+
+ VKEY_PAUSE ,
+VKEY_ESCAPE ,
+VKEY_SPACE ,
+VKEY_NEXT ,
+
+ VKEY_END ,
+VKEY_HOME ,
+VKEY_LEFT ,
+VKEY_UP ,
+
+ VKEY_RIGHT ,
+VKEY_DOWN ,
+VKEY_PAGEUP ,
+VKEY_PAGEDOWN ,
+
+ VKEY_SELECT ,
+VKEY_PRINT ,
+VKEY_ENTER ,
+VKEY_SNAPSHOT ,
+
+ VKEY_INSERT ,
+VKEY_DELETE ,
+VKEY_HELP ,
+VKEY_NUMPAD0 ,
+
+ VKEY_NUMPAD1 ,
+VKEY_NUMPAD2 ,
+VKEY_NUMPAD3 ,
+VKEY_NUMPAD4 ,
+
+ VKEY_NUMPAD5 ,
+VKEY_NUMPAD6 ,
+VKEY_NUMPAD7 ,
+VKEY_NUMPAD8 ,
+
+ VKEY_NUMPAD9 ,
+VKEY_MULTIPLY ,
+VKEY_ADD ,
+VKEY_SEPARATOR ,
+
+ VKEY_SUBTRACT ,
+VKEY_DECIMAL ,
+VKEY_DIVIDE ,
+VKEY_F1 ,
+
+ VKEY_F2 ,
+VKEY_F3 ,
+VKEY_F4 ,
+VKEY_F5 ,
+
+ VKEY_F6 ,
+VKEY_F7 ,
+VKEY_F8 ,
+VKEY_F9 ,
+
+ VKEY_F10 ,
+VKEY_F11 ,
+VKEY_F12 ,
+VKEY_NUMLOCK ,
+
+ VKEY_SCROLL ,
+VKEY_SHIFT ,
+VKEY_CONTROL ,
+VKEY_ALT ,
+
+ VKEY_EQUALS
+
+ }
+
+enum VstModifierKey { MODIFIER_SHIFT = 1<<0,
+MODIFIER_ALTERNATE = 1<<1,
+MODIFIER_COMMAND = 1<<2,
+MODIFIER_CONTROL = 1<<3
+ }
+
+
+Enumeration Type Documentation
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ MODIFIER_SHIFT
+
+ MODIFIER_ALTERNATE
+
+ MODIFIER_COMMAND
+
+ MODIFIER_CONTROL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enumerator:
+
+ VKEY_BACK
+
+ VKEY_TAB
+
+ VKEY_CLEAR
+
+ VKEY_RETURN
+
+ VKEY_PAUSE
+
+ VKEY_ESCAPE
+
+ VKEY_SPACE
+
+ VKEY_NEXT
+
+ VKEY_END
+
+ VKEY_HOME
+
+ VKEY_LEFT
+
+ VKEY_UP
+
+ VKEY_RIGHT
+
+ VKEY_DOWN
+
+ VKEY_PAGEUP
+
+ VKEY_PAGEDOWN
+
+ VKEY_SELECT
+
+ VKEY_PRINT
+
+ VKEY_ENTER
+
+ VKEY_SNAPSHOT
+
+ VKEY_INSERT
+
+ VKEY_DELETE
+
+ VKEY_HELP
+
+ VKEY_NUMPAD0
+
+ VKEY_NUMPAD1
+
+ VKEY_NUMPAD2
+
+ VKEY_NUMPAD3
+
+ VKEY_NUMPAD4
+
+ VKEY_NUMPAD5
+
+ VKEY_NUMPAD6
+
+ VKEY_NUMPAD7
+
+ VKEY_NUMPAD8
+
+ VKEY_NUMPAD9
+
+ VKEY_MULTIPLY
+
+ VKEY_ADD
+
+ VKEY_SEPARATOR
+
+ VKEY_SUBTRACT
+
+ VKEY_DECIMAL
+
+ VKEY_DIVIDE
+
+ VKEY_F1
+
+ VKEY_F2
+
+ VKEY_F3
+
+ VKEY_F4
+
+ VKEY_F5
+
+ VKEY_F6
+
+ VKEY_F7
+
+ VKEY_F8
+
+ VKEY_F9
+
+ VKEY_F10
+
+ VKEY_F11
+
+ VKEY_F12
+
+ VKEY_NUMLOCK
+
+ VKEY_SCROLL
+
+ VKEY_SHIFT
+
+ VKEY_CONTROL
+
+ VKEY_ALT
+
+ VKEY_EQUALS
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/vstoffline.html b/vstgui.sf/vstgui/Documentation/html/vstoffline.html
new file mode 100644
index 0000000..097f1ee
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/vstoffline.html
@@ -0,0 +1,33 @@
+
+
+VSTGUI: VST Offline Processing
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/vstparamstruct.html b/vstgui.sf/vstgui/Documentation/html/vstparamstruct.html
new file mode 100644
index 0000000..246aff6
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/vstparamstruct.html
@@ -0,0 +1,33 @@
+
+
+VSTGUI: VST Parameters Structure
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/vstplugscarbon_8h.html b/vstgui.sf/vstgui/Documentation/html/vstplugscarbon_8h.html
new file mode 100644
index 0000000..2774036
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/vstplugscarbon_8h.html
@@ -0,0 +1,293 @@
+
+
+VSTGUI: vstplugscarbon.h File Reference
+
+
+
+
+
+
+vstplugscarbon.h File Reference
+Define Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #define OPAQUE_TOOLBOX_STRUCTS 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #define TARGET_API_MAC_CARBON 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define TARGET_OS_MAC 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define WINDOWS 0
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/vstplugsmac_8h.html b/vstgui.sf/vstgui/Documentation/html/vstplugsmac_8h.html
new file mode 100644
index 0000000..c05f80c
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/vstplugsmac_8h.html
@@ -0,0 +1,381 @@
+
+
+VSTGUI: vstplugsmac.h File Reference
+
+
+
+
+
+
+vstplugsmac.h File Reference
+Define Documentation
+
+
+
+
+
+
+ #define ACCESSOR_CALLS_ARE_FUNCTIONS 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #define CALL_NOT_IN_CARBON 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define GetPortBounds
+ (
+ port,
+
+
+ rect
+
+ )
+ *(rect) = port->portRect
+
+
+
+
+
+
+
+
+
+
+
+
+ #define GetPortPixMap
+ (
+ port
+
+ )
+ port->portPixMap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #define OPAQUE_TOOLBOX_STRUCTS 0
+
+
+
+
+
+
+
+
+
+
+
+
+ #define RHAPSODY 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #define TARGET_OS_MAC 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define USENAVSERVICES 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define WINDOWS 0
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/vstplugsmacho_8h.html b/vstgui.sf/vstgui/Documentation/html/vstplugsmacho_8h.html
new file mode 100644
index 0000000..9755d2e
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/vstplugsmacho_8h.html
@@ -0,0 +1,418 @@
+
+
+VSTGUI: vstplugsmacho.h File Reference
+
+
+
+
+
+
+vstplugsmacho.h File Reference
+Define Documentation
+
+
+
+
+
+
+ #define __CF_USE_FRAMEWORK_INCLUDES__
+
+
+
+
+
+
+
+
+
+
+
+
+ #define __DEBUGGING__
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #define OPAQUE_TOOLBOX_STRUCTS 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #define TARGET_API_MAC_CARBON 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define TARGET_OS_MAC 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define USE_NAMESPACE 0
+
+
+
+
+
+
+
+
+
+
+
+
+ #define USENAVSERVICES 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define WINDOWS 0
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/vstplugsquartz_8h.html b/vstgui.sf/vstgui/Documentation/html/vstplugsquartz_8h.html
new file mode 100644
index 0000000..a919d68
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/vstplugsquartz_8h.html
@@ -0,0 +1,369 @@
+
+
+VSTGUI: vstplugsquartz.h File Reference
+
+
+
+
+
+
+vstplugsquartz.h File Reference #include <AvailabilityMacros.h>
+
+Define Documentation
+
+
+
+
+
+
+ #define __CF_USE_FRAMEWORK_INCLUDES__
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #define MAC_OS_X_VERSION_MAX_ALLOWED 1030
+
+
+
+
+
+
+
+
+
+
+
+
+ #define MAC_OS_X_VERSION_MIN_REQUIRED 1020
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #define TARGET_API_MAC_CARBON 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define USE_NAMESPACE 0
+
+
+
+
+
+
+
+
+
+
+
+
+ #define USENAVSERVICES 1
+
+
+
+
+
+
+
+
+
+
+
+
+ #define WINDOWS 0
+
+
+
+
+
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/html/whatsnew.html b/vstgui.sf/vstgui/Documentation/html/whatsnew.html
new file mode 100644
index 0000000..c4cfe73
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/html/whatsnew.html
@@ -0,0 +1,84 @@
+
+
+VSTGUI: What's new in VST 2.4
+
+
+
+
+
+
+With VST SDK 2.4 you can compile native VST Plug-Ins for 64 Bit Platforms (e.g. Windows XP x64 Edition). The formerly used 'long' data type has been replaced by VstInt32 and VstIntPtr:
+VstInt32 is always 32 bits wide, regardless of the platform compiled for.
+VstIntPtr is a generic type, with the same size as a pointer (4 Bytes on a 32 bit OS, 8 Bytes on x64 Systems).
+
+
+
+A new process function has been added to support 64 bit (double precision) floating-point audio samples. Please note that this function is optional, whereas the processReplacing function for 32 bit (single precision) floating-point samples is mandatory! See also: AudioEffect::canDoubleReplacing
+ AudioEffect::processDoubleReplacing
+ AudioEffectX::setProcessPrecision
+
+
+New enum VstMidiEventFlags for VstMidiEvent::flags with value kVstMidiEventIsRealtime which indicates that an event is played live, not from a sequencer track.
+
See also: AudioEffectX::getNumMidiInputChannels
+ AudioEffectX::getNumMidiOutputChannels
+
+
+The VST Parameters Structure XML definition provides an easy way to structure parameters of existing VST Plug-Ins hierarchically, without having to recompile the Plug-In binary. The VST SDK package contains a tool to test, extract and embed VSTXML resources.
+
See also: VST Parameters Structure
+
+
+All Plug-Ins built with this SDK must support composited windows on OSX.
+
See also: Macintosh Editor as HIViewRef
+
+
+The VST Protocol is a historically grown technology. In Revision 2.4 the API has undergone a general cleanup. Some rarely (or not at all) used features and inconsistent or redundant parts of the protocol have been declared as deprecated. Deprecated opcodes and data structures are still available in the SDK headers, but their names are modified if the VST_FORCE_DEPRECATED compile switch is active (1 by default) - this might cause errors when compiling existing code.
+What does it mean? Exisiting (already released) Hosts and Plug-Ins of course remain uninfluenced. If you create a new Plug with VST SDK 2.4 it should work in any existing host as well. However, there are some details that might cause compatibility problems:
+
+MIDI Input: New Plugs should implement AudioEffectX::canDo "receiveVstMidiEvent" to indicate the presence of a MIDI Input, instead of wantEvents. The base class method AudioEffectX::resume can be called for compatibility with old VST hosts (< 2.4).
+MIDI Output: implement AudioEffectX::canDo "sendVstMidiEvent".
+Idle Calls outside Editor: AudioEffectX::needIdle and AudioEffectX::fxIdle are not widely supported, thus Plugs can not rely on it. Please create your own timer/background thread if needed. On Windows SetTimer with a callback function could be used (look it up on MSDN), the MacOS X equivalent is InstallEventLoopTimer .
+No more accumulating process mode: New Plugs have to implement AudioEffect::processReplacing instead!
+The exported 'main ' function (aka 'main_macho ' on Mac or 'main_plugin ') should be named 'VSTPluginMain ' on all platforms! For downwards compatibility, you can export both.
+
+To support VST Plug-Ins <= 2.4 in new Host Applications, you'll have to implement workarounds. In the long run, deprecated features shouldn't be used anymore. Future versions of VST SDK will not contain them at all.
+
See also: Deprecated List
+
+
+You might have already noticed some more minor changes in VST SDK 2.4:
+New SDK folder structure
+Some files have been renamed (e.g. AudioEffect.hpp -> audioeffect.h)
+MiniHost Example
+Updated documentation
+
+
+
+
+ Empty
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/Documentation/index.html b/vstgui.sf/vstgui/Documentation/index.html
new file mode 100644
index 0000000..6270b94
--- /dev/null
+++ b/vstgui.sf/vstgui/Documentation/index.html
@@ -0,0 +1,11 @@
+
+
+
+ VSTGUI
+
+
+
+
+
+
diff --git a/vstgui.sf/vstgui/aeffguieditor.cpp b/vstgui.sf/vstgui/aeffguieditor.cpp
new file mode 100644
index 0000000..504a918
--- /dev/null
+++ b/vstgui.sf/vstgui/aeffguieditor.cpp
@@ -0,0 +1,409 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins
+//
+// Version 3.0 Date : 30/06/04
+//
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __aeffguieditor__
+#include "aeffguieditor.h"
+#endif
+
+//-----------------------------------------------------------------------------
+#define kIdleRate 100 // host idle rate in ms
+#define kIdleRate2 50
+#define kIdleRateMin 4 // minimum time between 2 idles in ms
+
+#if MOTIF
+static unsigned int _getTicks ();
+#endif
+
+//-----------------------------------------------------------------------------
+VstInt32 AEffGUIEditor::knobMode = kCircularMode;
+
+//-----------------------------------------------------------------------------
+// AEffGUIEditor Implementation
+//-----------------------------------------------------------------------------
+AEffGUIEditor::AEffGUIEditor (AudioEffect* effect)
+: AEffEditor (effect),
+ lLastTicks (0),
+ inIdleStuff (false),
+ frame (0)
+{
+ rect.left = rect.top = rect.right = rect.bottom = 0;
+ lLastTicks = getTicks ();
+
+ effect->setEditor (this);
+
+ #if WINDOWS
+ OleInitialize (0);
+ #endif
+
+ #if MACX
+ void InitMachOLibrary ();
+ InitMachOLibrary ();
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+AEffGUIEditor::~AEffGUIEditor ()
+{
+ #if WINDOWS
+ OleUninitialize ();
+ #endif
+
+ #if MACX
+ void ExitMachOLibrary ();
+ ExitMachOLibrary ();
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void AEffGUIEditor::setParameter (VstInt32 index, float value)
+{}
+
+//-----------------------------------------------------------------------------
+void AEffGUIEditor::beginEdit (VstInt32 index)
+{
+ ((AudioEffectX*)effect)->beginEdit (index);
+}
+
+//-----------------------------------------------------------------------------
+void AEffGUIEditor::endEdit (VstInt32 index)
+{
+ ((AudioEffectX*)effect)->endEdit (index);
+}
+
+//-----------------------------------------------------------------------------
+#if VST_2_1_EXTENSIONS
+bool AEffGUIEditor::onKeyDown (VstKeyCode& keyCode)
+{
+ return frame && frame->onKeyDown (keyCode) == 1 ? true : false;
+}
+
+//-----------------------------------------------------------------------------
+bool AEffGUIEditor::onKeyUp (VstKeyCode& keyCode)
+{
+ return frame && frame->onKeyUp (keyCode) == 1 ? true : false;
+}
+
+//-----------------------------------------------------------------------------
+bool AEffGUIEditor::setKnobMode (VstInt32 val)
+{
+ knobMode = val;
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+bool AEffGUIEditor::onWheel (float distance)
+{
+ if (frame)
+ {
+ CDrawContext context (frame, NULL, systemWindow);
+ CPoint where;
+ context.getMouseLocation (where);
+ return frame->onWheel (&context, where, distance);
+ }
+ return false;
+}
+#endif
+
+//-----------------------------------------------------------------------------
+#if MAC
+void AEffGUIEditor::DECLARE_VST_DEPRECATED (draw) (ERect* rect)
+{
+ if (frame)
+ {
+ if (rect)
+ {
+ CRect r (rect->left, rect->top, rect->right, rect->bottom);
+ CDrawContext context (frame, NULL, systemWindow);
+ frame->drawRect (&context, r);
+ }
+ else
+ frame->draw ();
+ }
+}
+
+//-----------------------------------------------------------------------------
+VstInt32 AEffGUIEditor::DECLARE_VST_DEPRECATED (mouse) (VstInt32 x, VstInt32 y)
+{
+ CDrawContext context (frame, NULL, systemWindow);
+ CPoint where (x, y);
+
+ if (frame)
+ frame->mouse (&context, where);
+
+ return 1;
+}
+#endif
+
+//-----------------------------------------------------------------------------
+bool AEffGUIEditor::getRect (ERect **ppErect)
+{
+ *ppErect = ▭
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+void AEffGUIEditor::idle ()
+{
+#if MAC && !QUARTZ
+ GrafPtr savePort;
+ GetPort (&savePort);
+ SetPort ((GrafPtr)GetWindowPort ((WindowRef)systemWindow));
+
+ AEffEditor::idle ();
+ if (frame)
+ frame->idle ();
+
+ SetPort (savePort);
+#else
+
+ #if BEOS
+ PlugView *plugView = 0;
+ if (frame)
+ {
+ plugView = (PlugView *) frame->getSystemWindow ();
+ if (plugView->LockLooperWithTimeout (0) != B_OK)
+ return;
+ }
+ #else
+ if (inIdleStuff)
+ return;
+ #endif
+
+ AEffEditor::idle ();
+ if (frame)
+ frame->idle ();
+
+ #if BEOS
+ if (frame)
+ plugView->UnlockLooper ();
+ #endif
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void AEffGUIEditor::wait (unsigned int ms)
+{
+ #if MAC
+ unsigned long ticks;
+ Delay (ms * 60 / 1000, &ticks);
+
+ #elif WINDOWS
+ Sleep (ms);
+
+ #elif SGI
+ struct timespec sleeptime = {0, ms * 1000000};
+ nanosleep (&sleeptime, NULL);
+
+ #elif BEOS
+ snooze (ms * 1000);
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+unsigned int AEffGUIEditor::getTicks ()
+{
+ #if MAC
+ return (TickCount () * 1000) / 60;
+
+ #elif WINDOWS
+ return (unsigned int)GetTickCount ();
+
+ #elif MOTIF
+ return _getTicks ();
+
+ #elif BEOS
+ return (system_time () / 1000);
+ #endif
+
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+void AEffGUIEditor::doIdleStuff ()
+{
+ #if !(MAC && !TARGET_API_MAC_CARBON)
+ // get the current time
+ unsigned int currentTicks = getTicks ();
+
+ // YG TEST idle ();
+ if (currentTicks < lLastTicks)
+ {
+ #if (MAC && TARGET_API_MAC_CARBON)
+ RunCurrentEventLoop (kEventDurationMillisecond * kIdleRateMin);
+ #else
+ wait (kIdleRateMin);
+ #endif
+ currentTicks += kIdleRateMin;
+ if (currentTicks < lLastTicks - kIdleRate2)
+ return;
+ }
+
+ idle ();
+
+ #if WINDOWS
+ MSG windowsMessage;
+ if (PeekMessage (&windowsMessage, NULL, WM_PAINT, WM_PAINT, PM_REMOVE))
+ DispatchMessage (&windowsMessage);
+
+ #elif MACX
+ EventRef event;
+ EventTypeSpec eventTypes[] = { {kEventClassWindow, kEventWindowUpdate}, {kEventClassWindow, kEventWindowDrawContent} };
+ if (ReceiveNextEvent (GetEventTypeCount (eventTypes), eventTypes, kEventDurationNoWait, true, &event) == noErr)
+ {
+ SendEventToEventTarget (event, GetEventDispatcherTarget ());
+ ReleaseEvent (event);
+ }
+ #endif
+
+ // save the next time
+ lLastTicks = currentTicks + kIdleRate;
+ #endif
+
+ inIdleStuff = true;
+
+ #if !BEOS
+ if (effect)
+ effect->masterIdle ();
+ #endif
+
+ inIdleStuff = false;
+}
+
+
+#if MOTIF
+//-----------------------------------------------------------------------------
+unsigned int _getTicks ()
+{
+ #if SGI
+ long long time;
+ syssgi (SGI_GET_UST, &time, 0);
+ return time / 1000000;
+
+ #elif SUN
+ hrtime_t nanosecs = gethrtime ();
+ return (unsigned long long)nanosecs / 1000000UL;
+
+ #elif LINUX
+ // gettimeofday is not what we need here, checkout API for hw time
+ struct timeval tv;
+ struct timezone tz;
+ gettimeofday (&tv, &tz);
+ return tv.tv_sec * 1000 + tv.tv_usec / 1000;
+ #endif
+}
+#endif
+#if MACX
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+extern "C" {
+#include
+#include
+}
+#include
+
+BEGIN_NAMESPACE_VSTGUI
+
+void* gBundleRef = 0;
+
+END_NAMESPACE_VSTGUI
+
+#if USE_NAMESPACE
+#define VSTGUI_BUNDLEREF VSTGUI::gBundleRef
+#else
+#define VSTGUI_BUNDLEREF gBundleRef
+#endif
+
+// -----------------------------------------------------------------------------
+static CFBundleRef _CFXBundleCreateFromImageName (CFAllocatorRef allocator, const char* image_name);
+static CFBundleRef _CFXBundleCreateFromImageName (CFAllocatorRef allocator, const char* image_name)
+{
+ CFURLRef myBundleExecutableURL = CFURLCreateFromFileSystemRepresentation (allocator, (const unsigned char*)image_name, strlen (image_name), false);
+ if (myBundleExecutableURL == 0)
+ return 0;
+
+ CFURLRef myBundleContentsMacOSURL = CFURLCreateCopyDeletingLastPathComponent (allocator, myBundleExecutableURL); // Delete Versions/Current/Executable
+ CFRelease (myBundleExecutableURL);
+ if (myBundleContentsMacOSURL == 0)
+ return 0;
+
+ CFURLRef myBundleContentsURL = CFURLCreateCopyDeletingLastPathComponent (allocator, myBundleContentsMacOSURL); // Delete Current
+ CFRelease (myBundleContentsMacOSURL);
+ if (myBundleContentsURL == 0)
+ return 0;
+
+ CFURLRef theBundleURL = CFURLCreateCopyDeletingLastPathComponent (allocator, myBundleContentsURL); // Delete Versions
+ CFRelease (myBundleContentsURL);
+ if (theBundleURL == 0)
+ return 0;
+
+ CFBundleRef result = CFBundleCreate (allocator, theBundleURL);
+ CFRelease (theBundleURL);
+
+ return result;
+}
+
+// -----------------------------------------------------------------------------
+void InitMachOLibrary ();
+void InitMachOLibrary ()
+{
+ const mach_header* header = &_mh_bundle_header;
+
+ const char* imagename = 0;
+ /* determine the image name, TODO: ther have to be a better way */
+ int cnt = _dyld_image_count();
+ for (int idx1 = 1; idx1 < cnt; idx1++)
+ {
+ if (_dyld_get_image_header(idx1) == header)
+ {
+ imagename = _dyld_get_image_name(idx1);
+ break;
+ }
+ }
+ if (imagename == 0)
+ return;
+ /* get the bundle of a header, TODO: ther have to be a better way */
+ VSTGUI_BUNDLEREF = (void*)_CFXBundleCreateFromImageName (NULL, imagename);
+}
+
+// -----------------------------------------------------------------------------
+void ExitMachOLibrary ();
+void ExitMachOLibrary ()
+{
+ if (VSTGUI_BUNDLEREF)
+ CFRelease (VSTGUI_BUNDLEREF);
+}
+
+#endif
diff --git a/vstgui.sf/vstgui/aeffguieditor.h b/vstgui.sf/vstgui/aeffguieditor.h
new file mode 100644
index 0000000..3ec990b
--- /dev/null
+++ b/vstgui.sf/vstgui/aeffguieditor.h
@@ -0,0 +1,113 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins
+//
+// Version 3.0 Date : 30/06/04
+//
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __aeffguieditor__
+#define __aeffguieditor__
+
+#ifndef __aeffeditor__
+#include "aeffeditor.h"
+#endif
+
+#ifndef __vstgui__
+#include "vstgui.h"
+#endif
+
+//-----------------------------------------------------------------------------
+// AEffGUIEditor Declaration
+//-----------------------------------------------------------------------------
+class AEffGUIEditor : public AEffEditor
+{
+public:
+//-----------------------------------------------------------------------------
+ AEffGUIEditor (AudioEffect* effect);
+ ~AEffGUIEditor ();
+
+ // get the CFrame object
+ #if USE_NAMESPACE
+ VSTGUI::CFrame* getFrame () { return frame; }
+ #else
+ CFrame* getFrame () { return frame; }
+ #endif
+
+ virtual void setParameter (VstInt32 index, float value);
+ virtual void beginEdit (VstInt32 index);
+ virtual void endEdit (VstInt32 index);
+
+ // feedback to application
+ virtual void doIdleStuff ();
+
+ // wait (in ms)
+ void wait (unsigned int ms);
+
+ // get the current time (in ms)
+ unsigned int getTicks ();
+
+ // get version of this VSTGUI
+ static int getVstGuiVersion () { return (VSTGUI_VERSION_MAJOR << 16) + VSTGUI_VERSION_MINOR; }
+
+ // get the knob mode
+ static VstInt32 getKnobMode () { return knobMode; }
+//-----------------------------------------------------------------------------
+// AEffEditor overrides:
+//-----------------------------------------------------------------------------
+ bool getRect (ERect** rect);
+ void idle ();
+
+ #if MAC
+ void DECLARE_VST_DEPRECATED (draw) (ERect* rect);
+ VstInt32 DECLARE_VST_DEPRECATED (mouse) (VstInt32 x, VstInt32 y);
+ #endif
+
+ #if VST_2_1_EXTENSIONS
+ bool onKeyDown (VstKeyCode& keyCode);
+ bool onKeyUp (VstKeyCode& keyCode);
+ bool onWheel (float distance);
+ bool setKnobMode (VstInt32 val);
+ #endif
+//-----------------------------------------------------------------------------
+protected:
+ ERect rect;
+ unsigned int lLastTicks;
+ bool inIdleStuff;
+ static VstInt32 knobMode;
+ #if USE_NAMESPACE
+ VSTGUI::CFrame* frame;
+ #else
+ CFrame* frame;
+ #endif
+};
+
+#endif
diff --git a/vstgui.sf/vstgui/cfileselector.cpp b/vstgui.sf/vstgui/cfileselector.cpp
new file mode 100644
index 0000000..0a715ea
--- /dev/null
+++ b/vstgui.sf/vstgui/cfileselector.cpp
@@ -0,0 +1,1156 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins :
+//
+// Version 3.0 $Date: 2006/01/31 10:03:38 $
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#if !PLUGGUI
+#include "AudioEffectX.h"
+#endif
+
+#ifndef __cfileselector__
+#include "cfileselector.h"
+#endif
+
+//-----------------------------------------------------------------------------
+// CFileSelector Implementation
+//-----------------------------------------------------------------------------
+#define stringAnyType "Any Type (*.*)"
+#define stringAllTypes "All Types: ("
+#define stringSelect "Select"
+#define stringCancel "Cancel"
+#define stringLookIn "Look in"
+#define kPathMax 1024
+
+#if WINDOWS
+#include
+
+static UINT_PTR APIENTRY SelectDirectoryHook (HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam);
+static LRESULT CALLBACK SelectDirectoryButtonProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
+WNDPROC fpOldSelectDirectoryButtonProc;
+static UINT_PTR APIENTRY WinSaveHook (HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam);
+static bool bFolderSelected;
+static bool bDidCancel;
+static char selDirPath[kPathMax];
+#if PLUGGUI
+ extern HINSTANCE ghInst;
+ inline HINSTANCE GetInstance () { return ghInst; }
+#else
+ extern void* hInstance;
+ inline HINSTANCE GetInstance () { return (HINSTANCE)hInstance; }
+#endif
+#endif
+
+BEGIN_NAMESPACE_VSTGUI
+
+//-----------------------------------------------------------------------------
+CFileSelector::CFileSelector (void* ptr)
+: ptr (ptr)
+, vstFileSelect (0)
+{}
+
+//-----------------------------------------------------------------------------
+CFileSelector::~CFileSelector ()
+{
+ if (vstFileSelect)
+ {
+ #if VST
+ if (ptr && ((AudioEffectX*)ptr)->canHostDo ("closeFileSelector"))
+ ((AudioEffectX*)ptr)->closeFileSelector (vstFileSelect);
+ else
+ #endif
+ {
+ if (vstFileSelect->reserved == 1 && vstFileSelect->returnPath)
+ {
+ delete []vstFileSelect->returnPath;
+ vstFileSelect->returnPath = 0;
+ vstFileSelect->sizeReturnPath = 0;
+ }
+ if (vstFileSelect->returnMultiplePaths)
+ {
+ for (long i = 0; i < vstFileSelect->nbReturnPath; i++)
+ {
+ delete []vstFileSelect->returnMultiplePaths[i];
+ vstFileSelect->returnMultiplePaths[i] = 0;
+ }
+ delete[] vstFileSelect->returnMultiplePaths;
+ vstFileSelect->returnMultiplePaths = 0;
+ }
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+long CFileSelector::run (VstFileSelect *vstFileSelect)
+{
+ this->vstFileSelect = vstFileSelect;
+ vstFileSelect->nbReturnPath = 0;
+ if (vstFileSelect->returnPath)
+ vstFileSelect->returnPath[0] = 0;
+
+ #if !PLUGGUI
+ if (ptr
+ #if MACX
+ && vstFileSelect->command != kVstFileSave
+ #endif
+ && ((AudioEffectX*)ptr)->canHostDo ("openFileSelector") && ((AudioEffectX*)ptr)->canHostDo ("closeFileSelector"))
+ {
+ if (((AudioEffectX*)ptr)->openFileSelector (vstFileSelect))
+ return vstFileSelect->nbReturnPath;
+ }
+ else
+ #endif
+ {
+#if WINDOWS
+ char filter[512];
+ char filePathBuffer[kPathMax];
+ strcpy (filePathBuffer, "");
+ char* filePath = filePathBuffer;
+ char fileName[kPathMax];
+ strcpy (fileName, "");
+ filter[0] = 0;
+ filePath[0] = 0;
+ fileName[0] = 0;
+
+ //-----------------------------------------
+ if (vstFileSelect->command == kVstFileLoad ||
+ vstFileSelect->command == kVstMultipleFilesLoad ||
+ vstFileSelect->command == kVstDirectorySelect)
+ {
+ char* multiBuffer = 0;
+ if (vstFileSelect->command == kVstMultipleFilesLoad)
+ {
+ multiBuffer = new char [kPathMax * 100];
+ strcpy (multiBuffer, "");
+ filePath = multiBuffer;
+ }
+
+ if (vstFileSelect->command != kVstDirectorySelect)
+ {
+ char allBuffer [kPathMax] = {0};
+ char* p = filter;
+ char* p2 = allBuffer;
+
+ const char* ext;
+ const char* extensions [100];
+ long i, j, extCount = 0;
+ char string[24];
+
+ for (long ty = 0; ty < vstFileSelect->nbFileTypes; ty++)
+ {
+ for (i = 0; i < 2 ; i++)
+ {
+ if (i == 0)
+ {
+ ext = vstFileSelect->fileTypes[ty].dosType;
+
+ strcpy (p, vstFileSelect->fileTypes[ty].name);
+ strcat (p, " (.");
+ strcat (p, ext);
+ strcat (p, ")");
+ p += strlen (p) + 1;
+
+ strcpy (string, "*.");
+ strcat (string, ext);
+ strcpy (p, string);
+ p += strlen (p);
+ }
+ else
+ {
+ if (!strcmp (vstFileSelect->fileTypes[ty].dosType, vstFileSelect->fileTypes[ty].unixType) || !strcmp (vstFileSelect->fileTypes[ty].unixType, ""))
+ break; // for
+ ext = vstFileSelect->fileTypes[ty].unixType;
+ strcpy (string, ";*.");
+ strcat (string, ext);
+ strcpy (p, string);
+ p += strlen (p);
+ }
+ bool found = false;
+ for (j = 0; j < extCount;j ++)
+ {
+ if (strcmp (ext, extensions [j]) == 0)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found && extCount < 100)
+ extensions [extCount++] = ext;
+ }
+ p ++;
+ } // end for filetype
+
+ if (extCount > 1)
+ {
+ for (i = 0; i < extCount ;i ++)
+ {
+ ext = extensions [i];
+ strcpy (string, "*.");
+ strcat (string, ext);
+
+ if (p2 != allBuffer)
+ {
+ strcpy (p2, ";");
+ p2++;
+ }
+ strcpy (p2, string);
+ p2 += strlen (p2);
+ }
+
+ // add the : All types
+ strcpy (p, stringAllTypes);
+ strcat (p, allBuffer);
+ strcat (p, ")");
+ p += strlen (p) + 1;
+ strcpy (p, allBuffer);
+ p += strlen (p) + 1;
+ }
+
+ strcpy (p, stringAnyType);
+ p += strlen (p) + 1;
+ strcpy (p, "*.*");
+ p += strlen (p) + 1;
+
+ *p++ = 0;
+ *p++ = 0;
+ }
+
+ OPENFILENAME ofn = {0};
+ ofn.lStructSize = sizeof (OPENFILENAME);
+ HWND owner = 0;
+ #if !PLUGGUI
+ if (ptr && ((AudioEffectX*)ptr)->getEditor () && ((AEffGUIEditor*)((AudioEffectX*)ptr)->getEditor ())->getFrame ())
+ owner = (HWND)((AEffGUIEditor*)((AudioEffectX*)ptr)->getEditor ())->getFrame ()->getSystemWindow ();
+ #endif
+ ofn.hwndOwner = owner;
+
+ if (vstFileSelect->command == kVstDirectorySelect)
+ ofn.lpstrFilter = "HideFileFilter\0*.___\0\0"; // to hide files
+ else
+ ofn.lpstrFilter = filter[0] ? filter : 0;
+ ofn.nFilterIndex = 1;
+ ofn.lpstrCustomFilter = NULL;
+ ofn.lpstrFile = filePath;
+ if (vstFileSelect->command == kVstMultipleFilesLoad)
+ ofn.nMaxFile = 100 * kPathMax - 1;
+ else
+ ofn.nMaxFile = sizeof (filePathBuffer) - 1;
+
+ ofn.lpstrFileTitle = fileName;
+ ofn.nMaxFileTitle = 64;
+ ofn.lpstrInitialDir = vstFileSelect->initialPath;
+ ofn.lpstrTitle = vstFileSelect->title;
+ ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_EXPLORER | OFN_ENABLESIZING | OFN_ENABLEHOOK;
+ if (vstFileSelect->command == kVstDirectorySelect)
+ {
+ ofn.Flags &= ~OFN_FILEMUSTEXIST;
+ ofn.lpfnHook = SelectDirectoryHook;
+ }
+
+ if (vstFileSelect->command == kVstMultipleFilesLoad)
+ ofn.Flags |= OFN_ALLOWMULTISELECT;
+
+ vstFileSelect->nbReturnPath = 0;
+ bDidCancel = true;
+
+ if (GetOpenFileName (&ofn) ||
+ ((vstFileSelect->command == kVstDirectorySelect) && !bDidCancel && strlen (selDirPath) != 0))
+ {
+ switch (vstFileSelect->command)
+ {
+ case kVstFileLoad:
+ vstFileSelect->nbReturnPath = 1;
+ if (!vstFileSelect->returnPath)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char[strlen (ofn.lpstrFile) + 1];
+ vstFileSelect->sizeReturnPath = (long)strlen (ofn.lpstrFile) + 1;
+ }
+ strcpy (vstFileSelect->returnPath, ofn.lpstrFile);
+ break;
+
+ case kVstMultipleFilesLoad:
+ {
+ char string[kPathMax], directory[kPathMax];
+ char *previous = ofn.lpstrFile;
+ size_t len;
+ bool dirFound = false;
+ bool first = true;
+ directory[0] = 0; // !!
+ vstFileSelect->returnMultiplePaths = new char*[kPathMax];
+ long i = 0;
+ while (1)
+ {
+ if (*previous != 0)
+ { // something found
+ if (!dirFound)
+ {
+ dirFound = true;
+ strcpy (directory, previous);
+ len = strlen (previous) + 1; // including 0
+ previous += len;
+
+ if (*previous == 0)
+ { // 1 selected file only
+ vstFileSelect->returnMultiplePaths[i] = new char [strlen (directory) + 1];
+ strcpy (vstFileSelect->returnMultiplePaths[i++], directory);
+ }
+ else
+ {
+ if (directory[strlen (directory) - 1] != '\\')
+ strcat (directory, "\\");
+ }
+ }
+ else
+ {
+ sprintf (string, "%s%s", directory, previous);
+ len = strlen (previous) + 1; // including 0
+ previous += len;
+
+ vstFileSelect->returnMultiplePaths[i] = new char [strlen (string) + 1];
+ strcpy (vstFileSelect->returnMultiplePaths[i++], string);
+ }
+ }
+ else
+ break;
+ }
+ vstFileSelect->nbReturnPath = i;
+ } break;
+
+ case kVstDirectorySelect:
+ vstFileSelect->nbReturnPath = 1;
+ if (!vstFileSelect->returnPath)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char[strlen (selDirPath) + 1];
+ vstFileSelect->sizeReturnPath = (long)strlen (selDirPath) + 1;
+ }
+ strcpy (vstFileSelect->returnPath, selDirPath);
+ }
+ if (multiBuffer)
+ delete []multiBuffer;
+ return vstFileSelect->nbReturnPath;
+ }
+ if (multiBuffer)
+ delete []multiBuffer;
+ }
+
+ //-----------------------------------------
+ else if (vstFileSelect->command == kVstFileSave)
+ {
+ char* p = filter;
+ for (long ty = 0; ty < vstFileSelect->nbFileTypes; ty++)
+ {
+ const char* ext = vstFileSelect->fileTypes[ty].dosType;
+ if (ext)
+ {
+ strcpy (p, vstFileSelect->fileTypes[ty].name);
+ strcat (p, " (.");
+ strcat (p, ext);
+ strcat (p, ")");
+ p += strlen (p) + 1;
+
+ char string[24];
+ strcpy (string, "*.");
+ strcat (string, ext);
+ strcpy (p, string);
+ p += strlen (p) + 1;
+ }
+ }
+ *p++ = 0;
+ *p++ = 0;
+
+ OPENFILENAME ofn = {0};
+ ofn.lStructSize = sizeof (OPENFILENAME);
+ HWND owner = 0;
+ #if !PLUGGUI
+ if (((AudioEffectX*)ptr)->getEditor () && ((AEffGUIEditor*)((AudioEffectX*)ptr)->getEditor ())->getFrame ())
+ owner = (HWND)((AEffGUIEditor*)((AudioEffectX*)ptr)->getEditor ())->getFrame ()->getSystemWindow ();
+ #endif
+ ofn.hwndOwner = owner;
+ ofn.hInstance = GetInstance ();
+ ofn.lpstrFilter = filter[0] ? filter : 0;
+ ofn.nFilterIndex = 1;
+ ofn.lpstrFile = filePath;
+ ofn.lpstrCustomFilter = NULL;
+ ofn.nMaxFile = sizeof (filePathBuffer) - 1;
+ ofn.lpstrFileTitle = fileName;
+ ofn.nMaxFileTitle = 64;
+ ofn.lpstrInitialDir = vstFileSelect->initialPath;
+ ofn.lpstrTitle = vstFileSelect->title;
+ ofn.Flags = OFN_EXPLORER | OFN_ENABLESIZING | OFN_HIDEREADONLY | OFN_ENABLEHOOK;
+
+ if (vstFileSelect->nbFileTypes >= 1)
+ ofn.lpstrDefExt = vstFileSelect->fileTypes[0].dosType;
+
+ // add a template view
+ ofn.lCustData = (DWORD)0;
+ ofn.lpfnHook = WinSaveHook;
+
+ if (GetSaveFileName (&ofn))
+ {
+ vstFileSelect->nbReturnPath = 1;
+ if (!vstFileSelect->returnPath)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char[strlen (ofn.lpstrFile) + 1];
+ vstFileSelect->sizeReturnPath = (long)strlen (ofn.lpstrFile) + 1;
+ }
+ strcpy (vstFileSelect->returnPath, ofn.lpstrFile);
+
+ return vstFileSelect->nbReturnPath;
+ }
+ #if _DEBUG
+ else
+ {
+ DWORD err = CommDlgExtendedError (); // for breakpoint
+ }
+ #endif
+ }
+
+#elif MAC
+#if TARGET_API_MAC_CARBON
+ #if MACX
+ // new approach for supporting long filenames on mac os x is to use unix path mode
+ // if vstFileSelect->future[0] is 1 on entry and 0 on exit the resulting paths are UTF8 encoded paths
+ bool unixPathMode = (vstFileSelect->future[0] == 1);
+ #endif
+ NavEventUPP eventUPP = NewNavEventUPP (CFileSelector::navEventProc);
+ if (vstFileSelect->command == kVstFileSave)
+ {
+ NavDialogCreationOptions dialogOptions;
+ NavGetDefaultDialogCreationOptions (&dialogOptions);
+ dialogOptions.windowTitle = CFStringCreateWithCString (NULL, vstFileSelect->title[0] ? vstFileSelect->title : "Select a Destination", kCFStringEncodingUTF8);
+ CFStringRef defSaveName = 0;
+ #if MACX
+ if (unixPathMode && vstFileSelect->initialPath)
+ {
+ char* name = strrchr (vstFileSelect->initialPath, '/');
+ if (name && name[1] != 0)
+ {
+ defSaveName = dialogOptions.saveFileName = CFStringCreateWithCString (NULL, name+1, kCFStringEncodingUTF8);
+ name[0] = 0;
+ dialogOptions.optionFlags |= kNavPreserveSaveFileExtension;
+ }
+ else if (name == 0)
+ {
+ defSaveName = dialogOptions.saveFileName = CFStringCreateWithCString (NULL, vstFileSelect->initialPath, kCFStringEncodingUTF8);
+ dialogOptions.optionFlags |= kNavPreserveSaveFileExtension;
+ vstFileSelect->initialPath = 0;
+ }
+ }
+ else
+ #endif
+ if (vstFileSelect->initialPath && ((FSSpec*)vstFileSelect->initialPath)->name)
+ {
+ FSSpec* defaultSpec = (FSSpec*)vstFileSelect->initialPath;
+ defSaveName = CFStringCreateWithPascalString (NULL, defaultSpec->name, kCFStringEncodingASCII);
+ if (defSaveName)
+ {
+ dialogOptions.saveFileName = defSaveName;
+ dialogOptions.optionFlags |= kNavPreserveSaveFileExtension;
+ }
+ *defaultSpec->name = 0;
+ }
+ NavDialogRef dialogRef;
+ if (NavCreatePutFileDialog (&dialogOptions, NULL, kNavGenericSignature, eventUPP, this, &dialogRef) == noErr)
+ {
+ AEDesc defaultLocation;
+ AEDesc* defLocPtr = 0;
+ if (vstFileSelect->initialPath)
+ {
+ #if MACX
+ if (unixPathMode)
+ {
+ FSRef fsRef;
+ if (FSPathMakeRef ((const unsigned char*)vstFileSelect->initialPath, &fsRef, NULL) == noErr)
+ {
+ if (AECreateDesc (typeFSRef, &fsRef, sizeof(FSRef), &defaultLocation) == noErr)
+ defLocPtr = &defaultLocation;
+ }
+ }
+ else
+ #endif
+ {
+ FSSpec* defaultSpec = (FSSpec*)vstFileSelect->initialPath;
+ if (defaultSpec->parID && defaultSpec->vRefNum)
+ {
+ if (AECreateDesc (typeFSS, defaultSpec, sizeof(FSSpec), &defaultLocation) == noErr)
+ defLocPtr = &defaultLocation;
+ }
+ }
+ }
+ if (defLocPtr)
+ NavCustomControl (dialogRef, kNavCtlSetLocation, (void*)defLocPtr);
+ NavDialogRun (dialogRef);
+
+ if (defLocPtr)
+ AEDisposeDesc (defLocPtr);
+
+ NavReplyRecord navReply;
+ if (NavDialogGetReply (dialogRef, &navReply) == noErr)
+ {
+ FSRef parentFSRef;
+ AEKeyword theAEKeyword;
+ DescType typeCode;
+ Size actualSize;
+ // get the FSRef referring to the parent directory
+ if (AEGetNthPtr(&navReply.selection, 1, typeFSRef,
+ &theAEKeyword, &typeCode, &parentFSRef, sizeof(FSRef), &actualSize) == noErr)
+ {
+ #if MACX
+ if (unixPathMode)
+ {
+ bool success = true;
+ vstFileSelect->nbReturnPath = 1;
+ if (vstFileSelect->returnPath == 0)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char [PATH_MAX];
+ }
+ if (FSRefMakePath (&parentFSRef, (unsigned char*)vstFileSelect->returnPath, PATH_MAX) == noErr)
+ {
+ char saveFileName [PATH_MAX];
+ if (CFStringGetCString (navReply.saveFileName, saveFileName, PATH_MAX, kCFStringEncodingUTF8))
+ {
+ strcat (vstFileSelect->returnPath, "/");
+ strcat (vstFileSelect->returnPath, saveFileName);
+ vstFileSelect->future[0] = 0;
+ }
+ else
+ success = false;
+ }
+ else
+ success = false;
+ if (!success && vstFileSelect->reserved)
+ {
+ vstFileSelect->nbReturnPath = 0;
+ delete [] vstFileSelect->returnPath;
+ }
+ }
+ else
+ #endif
+ {
+ FSSpec spec;
+ FSCatalogInfoBitmap infoBitmap = kFSCatInfoNone;
+ FSGetCatalogInfo (&parentFSRef, infoBitmap, NULL, NULL, &spec, NULL);
+ CInfoPBRec pbRec = {0};
+ pbRec.dirInfo.ioDrDirID = spec.parID;
+ pbRec.dirInfo.ioVRefNum = spec.vRefNum;
+ pbRec.dirInfo.ioNamePtr = spec.name;
+ if (PBGetCatInfoSync (&pbRec) == noErr)
+ {
+ spec.parID = pbRec.dirInfo.ioDrDirID;
+ // the cfstring -> pascalstring can fail if the filename length > 63 (FSSpec sucks)
+ if (CFStringGetPascalString (navReply.saveFileName, (unsigned char*)&spec.name, sizeof (spec.name), kCFStringEncodingASCII))
+ {
+ vstFileSelect->nbReturnPath = 1;
+ if (!vstFileSelect->returnPath)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char [sizeof (FSSpec)];
+ }
+ memcpy (vstFileSelect->returnPath, &spec, sizeof (FSSpec));
+ }
+ }
+ }
+ }
+ NavDisposeReply (&navReply);
+ }
+ if (defSaveName)
+ CFRelease (defSaveName);
+ NavDialogDispose (dialogRef);
+ DisposeNavEventUPP (eventUPP);
+ return vstFileSelect->nbReturnPath;
+ }
+ if (defSaveName)
+ CFRelease (defSaveName);
+ }
+ else if (vstFileSelect->command == kVstDirectorySelect)
+ {
+ NavDialogCreationOptions dialogOptions;
+ NavGetDefaultDialogCreationOptions (&dialogOptions);
+ dialogOptions.windowTitle = CFStringCreateWithCString (NULL, vstFileSelect->title[0] ? vstFileSelect->title : "Select Directory", kCFStringEncodingUTF8);
+ NavDialogRef dialogRef;
+ if (NavCreateChooseFolderDialog (&dialogOptions, eventUPP, NULL, this, &dialogRef) == noErr)
+ {
+ AEDesc defaultLocation;
+ AEDesc* defLocPtr = 0;
+ if (vstFileSelect->initialPath)
+ {
+ #if MACX
+ if (unixPathMode)
+ {
+ FSRef fsRef;
+ if (FSPathMakeRef ((const unsigned char*)vstFileSelect->initialPath, &fsRef, NULL) == noErr)
+ {
+ if (AECreateDesc (typeFSRef, &fsRef, sizeof(FSRef), &defaultLocation) == noErr)
+ defLocPtr = &defaultLocation;
+ }
+ }
+ else
+ #endif
+ {
+ FSSpec* defaultSpec = (FSSpec*)vstFileSelect->initialPath;
+ if (defaultSpec->parID && defaultSpec->vRefNum)
+ if (AECreateDesc (typeFSS, defaultSpec, sizeof(FSSpec), &defaultLocation) == noErr)
+ defLocPtr = &defaultLocation;
+ }
+ }
+ if (defLocPtr)
+ NavCustomControl (dialogRef, kNavCtlSetLocation, (void*)defLocPtr);
+ NavDialogRun (dialogRef);
+ if (defLocPtr)
+ AEDisposeDesc (defLocPtr);
+ NavReplyRecord navReply;
+ if (NavDialogGetReply (dialogRef, &navReply) == noErr)
+ {
+ FSRef parentFSRef;
+ AEKeyword theAEKeyword;
+ DescType typeCode;
+ Size actualSize;
+ if (AEGetNthPtr(&navReply.selection, 1, typeFSRef,
+ &theAEKeyword, &typeCode, &parentFSRef, sizeof(FSRef), &actualSize) == noErr)
+ {
+ #if MACX
+ if (unixPathMode)
+ {
+ vstFileSelect->nbReturnPath = 1;
+ if (vstFileSelect->returnPath == 0)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char [PATH_MAX];
+ }
+ if (FSRefMakePath (&parentFSRef, (unsigned char*)vstFileSelect->returnPath, PATH_MAX) != noErr)
+ {
+ vstFileSelect->nbReturnPath = 0;
+ if (vstFileSelect->reserved)
+ delete [] vstFileSelect->returnPath;
+ }
+ else
+ vstFileSelect->future[0] = 0;
+ }
+ else
+ #endif
+ {
+ FSSpec spec;
+ FSCatalogInfoBitmap infoBitmap = kFSCatInfoNone;
+ FSGetCatalogInfo (&parentFSRef, infoBitmap, NULL, NULL, &spec, NULL);
+ vstFileSelect->nbReturnPath = 1;
+ if (!vstFileSelect->returnPath)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char [sizeof (FSSpec)];
+ }
+ memcpy (vstFileSelect->returnPath, &spec, sizeof (FSSpec));
+ }
+ }
+
+ NavDisposeReply (&navReply);
+ }
+ NavDialogDispose (dialogRef);
+ DisposeNavEventUPP (eventUPP);
+ return vstFileSelect->nbReturnPath;
+ }
+ }
+ else // FileLoad
+ {
+ NavDialogCreationOptions dialogOptions;
+ NavGetDefaultDialogCreationOptions (&dialogOptions);
+ if (vstFileSelect->command == kVstFileLoad)
+ {
+ dialogOptions.windowTitle = CFStringCreateWithCString (NULL, vstFileSelect->title[0] ? vstFileSelect->title : "Select a File to Open", kCFStringEncodingUTF8);
+ dialogOptions.optionFlags &= ~kNavAllowMultipleFiles;
+ }
+ else
+ {
+ dialogOptions.windowTitle = CFStringCreateWithCString (NULL, vstFileSelect->title[0] ? vstFileSelect->title : "Select Files to Open", kCFStringEncodingUTF8);
+ dialogOptions.optionFlags |= kNavAllowMultipleFiles;
+ }
+ NavObjectFilterUPP objectFilterUPP = NewNavObjectFilterUPP (CFileSelector::navObjectFilterProc);
+ NavDialogRef dialogRef;
+ if (NavCreateGetFileDialog (&dialogOptions, NULL, eventUPP, NULL, objectFilterUPP, this, &dialogRef) == noErr)
+ {
+ AEDesc defaultLocation;
+ AEDesc* defLocPtr = 0;
+ if (vstFileSelect->initialPath)
+ {
+ #if MACX
+ if (unixPathMode)
+ {
+ FSRef fsRef;
+ if (FSPathMakeRef ((const unsigned char*)vstFileSelect->initialPath, &fsRef, NULL) == noErr)
+ {
+ if (AECreateDesc (typeFSRef, &fsRef, sizeof(FSRef), &defaultLocation) == noErr)
+ defLocPtr = &defaultLocation;
+ }
+ }
+ else
+ #endif
+ {
+ FSSpec* defaultSpec = (FSSpec*)vstFileSelect->initialPath;
+ if (defaultSpec->parID && defaultSpec->vRefNum)
+ if (AECreateDesc (typeFSS, defaultSpec, sizeof(FSSpec), &defaultLocation) == noErr)
+ defLocPtr = &defaultLocation;
+ }
+ }
+ if (defLocPtr)
+ NavCustomControl (dialogRef, kNavCtlSetLocation, (void*)defLocPtr);
+
+ NavDialogRun (dialogRef);
+
+ if (defLocPtr)
+ AEDisposeDesc (defLocPtr);
+
+ NavReplyRecord navReply;
+ if (NavDialogGetReply (dialogRef, &navReply) == noErr)
+ {
+ FSRef parentFSRef;
+ AEKeyword theAEKeyword;
+ DescType typeCode;
+ Size actualSize;
+ if (vstFileSelect->command == kVstFileLoad)
+ {
+ if (AEGetNthPtr(&navReply.selection, 1, typeFSRef,
+ &theAEKeyword, &typeCode, &parentFSRef, sizeof(FSRef), &actualSize) == noErr)
+ {
+ #if MACX
+ if (unixPathMode)
+ {
+ vstFileSelect->nbReturnPath = 1;
+ if (vstFileSelect->returnPath == 0)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char [PATH_MAX];
+ }
+ if (FSRefMakePath (&parentFSRef, (unsigned char*)vstFileSelect->returnPath, PATH_MAX) != noErr)
+ {
+ vstFileSelect->nbReturnPath = 0;
+ if (vstFileSelect->reserved)
+ delete [] vstFileSelect->returnPath;
+ }
+ else
+ vstFileSelect->future[0] = 0;
+ }
+ else
+ #endif
+ {
+ FSSpec spec;
+ FSCatalogInfoBitmap infoBitmap = kFSCatInfoNone;
+ FSGetCatalogInfo (&parentFSRef, infoBitmap, NULL, NULL, &spec, NULL);
+ vstFileSelect->nbReturnPath = 1;
+ if (!vstFileSelect->returnPath)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char [sizeof (FSSpec)];
+ }
+ memcpy (vstFileSelect->returnPath, &spec, sizeof (FSSpec));
+ }
+ }
+ }
+ else
+ {
+ long nbReturnPath;
+ AECountItems (&navReply.selection, &nbReturnPath);
+ vstFileSelect->nbReturnPath = nbReturnPath;
+ vstFileSelect->returnMultiplePaths = new char* [vstFileSelect->nbReturnPath];
+ int index = 1;
+ while (AEGetNthPtr(&navReply.selection, index++, typeFSRef,
+ &theAEKeyword, &typeCode, &parentFSRef, sizeof(FSRef), &actualSize) == noErr)
+ {
+ #if MACX
+ if (unixPathMode)
+ {
+ vstFileSelect->returnMultiplePaths[index-2] = new char[PATH_MAX];
+ FSRefMakePath (&parentFSRef, (unsigned char*)vstFileSelect->returnMultiplePaths[index-2], PATH_MAX);
+ vstFileSelect->future[0] = 0;
+ }
+ else
+ #endif
+ {
+ FSSpec spec;
+ FSCatalogInfoBitmap infoBitmap = kFSCatInfoNone;
+ FSGetCatalogInfo (&parentFSRef, infoBitmap, NULL, NULL, &spec, NULL);
+ vstFileSelect->returnMultiplePaths[index-2] = new char[sizeof (FSSpec)];
+ memcpy (vstFileSelect->returnMultiplePaths[index-2], &spec, sizeof (FSSpec));
+ }
+ }
+ }
+ }
+ DisposeNavObjectFilterUPP (objectFilterUPP);
+ DisposeNavEventUPP (eventUPP);
+ NavDialogDispose (dialogRef);
+ return vstFileSelect->nbReturnPath;
+ }
+ DisposeNavObjectFilterUPP (objectFilterUPP);
+ }
+ DisposeNavEventUPP (eventUPP);
+#else
+ StandardFileReply reply;
+ if (vstFileSelect->command == kVstFileSave)
+ {
+ unsigned char defName[64];
+ defName[0] = 0;
+ StandardPutFile ("\pSelect a Destination", defName, &reply);
+ if (reply.sfGood && reply.sfFile.name[0] != 0)
+ {
+ if (!vstFileSelect->returnPath)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char [301];
+ }
+ memcpy (vstFileSelect->returnPath, &reply.sfFile, 300);
+ vstFileSelect->nbReturnPath = 1;
+ return 1;
+ }
+ }
+
+ else if (vstFileSelect->command == kVstDirectorySelect)
+ {
+ #if USENAVSERVICES
+ if (NavServicesAvailable ())
+ {
+ NavReplyRecord navReply;
+ NavDialogOptions dialogOptions;
+ short ret = false;
+ AEDesc defLoc;
+ defLoc.descriptorType = typeFSS;
+ defLoc.dataHandle = NewHandle (sizeof (FSSpec));
+ FSSpec finalFSSpec;
+ finalFSSpec.parID = 0; // *dirID;
+ finalFSSpec.vRefNum = 0; // *volume;
+ finalFSSpec.name[0] = 0;
+
+ NavGetDefaultDialogOptions (&dialogOptions);
+ dialogOptions.dialogOptionFlags &= ~kNavAllowMultipleFiles;
+ dialogOptions.dialogOptionFlags |= kNavSelectDefaultLocation;
+ strcpy ((char* )dialogOptions.message, "Select Directory");
+ c2pstr ((char* )dialogOptions.message);
+ NavChooseFolder (&defLoc, &navReply, &dialogOptions, 0 /* eventUPP */, 0, 0);
+ DisposeHandle (defLoc.dataHandle);
+
+ AEDesc resultDesc;
+ AEKeyword keyword;
+ resultDesc.dataHandle = 0L;
+
+ if (navReply.validRecord && AEGetNthDesc (&navReply.selection, 1, typeFSS, &keyword, &resultDesc) == noErr)
+ {
+ ret = true;
+ vstFileSelect->nbReturnPath = 1;
+ if (!vstFileSelect->returnPath)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char [sizeof (FSSpec)];
+ }
+ memcpy (vstFileSelect->returnPath, *resultDesc.dataHandle, sizeof (FSSpec));
+ }
+ NavDisposeReply (&navReply);
+ return vstFileSelect->nbReturnPath;
+ }
+ else
+ #endif
+ {
+ // Can't select a Folder; the Application does not support it, and Navigational Services are not available...
+ return 0;
+ }
+ }
+
+ else
+ {
+ SFTypeList typelist;
+ long numFileTypes = vstFileSelect->nbFileTypes;
+ //seem not to work... if (numFileTypes <= 0)
+ {
+ numFileTypes = -1; // all files
+ typelist[0] = 'AIFF';
+ }
+ /*else
+ {
+ if (numFileTypes > 4)
+ numFileTypes = 4;
+ for (long i = 0; i < numFileTypes; i++)
+ memcpy (&typelist[i], vstFileSelect->fileTypes[i].macType, 4);
+ }*/
+ StandardGetFile (0L, numFileTypes, typelist, &reply);
+ if (reply.sfGood)
+ {
+ if (!vstFileSelect->returnPath)
+ {
+ vstFileSelect->reserved = 1;
+ vstFileSelect->returnPath = new char [301];
+ }
+ memcpy (vstFileSelect->returnPath, &reply.sfFile, 300);
+ vstFileSelect->nbReturnPath = 1;
+ return 1;
+ }
+ }
+#endif // TARGET_API_MAC_CARBON
+#else
+ //CAlert::alert ("The current Host application doesn't support FileSelector !", "Warning");
+#endif
+ }
+ return 0;
+}
+
+#if MAC && TARGET_API_MAC_CARBON
+//-----------------------------------------------------------------------------
+pascal void CFileSelector::navEventProc (const NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, NavCallBackUserData callBackUD)
+{
+ CFileSelector* fs = (CFileSelector*)callBackUD;
+ switch (callBackSelector)
+ {
+ case kNavCBEvent:
+ {
+ #if !PLUGGUI
+ AudioEffectX* effect = (AudioEffectX*)fs->ptr;
+ if (effect && callBackParms->eventData.eventDataParms.event->what == nullEvent)
+ effect->masterIdle ();
+ #endif
+ break;
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+pascal Boolean CFileSelector::navObjectFilterProc (AEDesc *theItem, void *info, void *callBackUD, NavFilterModes filterMode)
+{
+ Boolean result = false;
+ CFileSelector* fs = (CFileSelector*)callBackUD;
+ NavFileOrFolderInfo *theInfo = (NavFileOrFolderInfo*)info;
+
+ if (theInfo->isFolder || fs->vstFileSelect->nbFileTypes == 0)
+ result = true;
+ else
+ {
+ FSRef ref;
+ AECoerceDesc (theItem, typeFSRef, theItem);
+ if (AEGetDescData (theItem, &ref, sizeof (FSRef)) == noErr)
+ {
+ LSItemInfoRecord infoRecord;
+ if (LSCopyItemInfoForRef (&ref, kLSRequestExtension | kLSRequestTypeCreator, &infoRecord) == noErr)
+ {
+ char extension [128];
+ extension[0] = 0;
+ if (infoRecord.extension)
+ CFStringGetCString (infoRecord.extension, extension, 128, kCFStringEncodingUTF8);
+ for (long i = 0; i < fs->vstFileSelect->nbFileTypes; i++)
+ {
+ VstFileType* ft = &fs->vstFileSelect->fileTypes[i];
+ if ((OSType)ft->macType == infoRecord.filetype)
+ {
+ result = true;
+ break;
+ }
+ else if (infoRecord.extension)
+ {
+ if (!strcasecmp (extension, ft->unixType) || !strcasecmp (extension, ft->dosType))
+ {
+ result = true;
+ break;
+ }
+ }
+ }
+ if (infoRecord.extension)
+ CFRelease (infoRecord.extension);
+ }
+ }
+ }
+ return result;
+}
+#endif
+
+END_NAMESPACE_VSTGUI
+
+#if WINDOWS
+#include
+//-----------------------------------------------------------------------------
+UINT_PTR APIENTRY SelectDirectoryHook (HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message)
+ {
+ case WM_NOTIFY:
+ {
+ OFNOTIFY *lpon = (OFNOTIFY *)lParam;
+
+ switch (lpon->hdr.code)
+ {
+ case CDN_FILEOK:
+ CommDlg_OpenSave_GetFolderPath (GetParent (hdlg), selDirPath, kPathMax);
+ bDidCancel = false;
+ break;
+
+ case CDN_INITDONE: {
+ #define HIDE_ITEMS 4
+ int i;
+ UINT hide_items[HIDE_ITEMS] = {edt1, stc3, cmb1, stc2};
+
+ for (i = 0; i < HIDE_ITEMS; i++)
+ CommDlg_OpenSave_HideControl (GetParent (hdlg), hide_items[i]);
+
+ CommDlg_OpenSave_SetControlText (GetParent (hdlg), stc4, (char*)(const char*)stringLookIn);
+ CommDlg_OpenSave_SetControlText (GetParent (hdlg), IDOK, (char*)(const char*)stringSelect);
+ CommDlg_OpenSave_SetControlText (GetParent (hdlg), IDCANCEL, (char*)(const char*)stringCancel);
+ } break;
+ }
+ } break;
+
+ case WM_INITDIALOG:
+ fpOldSelectDirectoryButtonProc = /*(FARPROC)*/(WNDPROC)SetWindowLongPtr (
+ GetDlgItem (GetParent (hdlg), IDOK),
+ GWLP_WNDPROC, (LONG_PTR)SelectDirectoryButtonProc);
+ break;
+
+ case WM_DESTROY:
+ SetWindowLongPtr (GetDlgItem (GetParent (hdlg), IDOK),
+ GWLP_WNDPROC, (LONG_PTR)fpOldSelectDirectoryButtonProc);
+ }
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+LRESULT CALLBACK SelectDirectoryButtonProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message)
+ {
+ case WM_SETTEXT:
+ if (! (strcmp ((char *)lParam, stringSelect) == 0))
+ return false;
+ break;
+
+ case WM_LBUTTONUP:
+ case WM_RBUTTONUP: {
+ char mode[256];
+ GetWindowText (hwnd, mode, 256);
+ if (!strcmp (mode, stringSelect))
+ {
+ bFolderSelected = true;
+ char oldDirPath[kPathMax];
+ CommDlg_OpenSave_GetFolderPath (GetParent (hwnd), oldDirPath, kPathMax);
+ // you need a lot of tricks to get name of currently selected folder:
+ // the following call of the original windows procedure causes the
+ // selected folder to open and after that you can retrieve its name
+ // by calling ..._GetFolderPath (...)
+ CallWindowProc ((WNDPROC)fpOldSelectDirectoryButtonProc, hwnd, message, wParam, lParam);
+ CommDlg_OpenSave_GetFolderPath (GetParent (hwnd), selDirPath, kPathMax);
+
+ if (1) // consumers like it like this
+ {
+ if (strcmp (oldDirPath, selDirPath) == 0 || selDirPath [0] == 0)
+ {
+ // the same folder as the old one, means nothing selected: close
+ bFolderSelected = true;
+ bDidCancel = false;
+ PostMessage (GetParent (hwnd), WM_CLOSE, 0, 0);
+ return false;
+ }
+ else
+ {
+ // another folder is selected: browse into it
+ bFolderSelected = false;
+ return true;
+ }
+ }
+ else // original code
+ {
+ if (strcmp (oldDirPath, selDirPath) == 0 || selDirPath [0] == 0)
+ {
+ // the same folder as the old one, means nothing selected: stay open
+ bFolderSelected = false;
+ return true;
+ }
+ }
+ }
+
+ bDidCancel = false;
+ PostMessage (GetParent (hwnd), WM_CLOSE, 0, 0);
+ return false;
+ } break;
+ } // end switch
+
+ return CallWindowProc ((WNDPROC)fpOldSelectDirectoryButtonProc, hwnd, message, wParam, lParam);
+}
+
+//-----------------------------------------------------------------------------
+static void showPathInWindowTitle (HWND hParent, LPOFNOTIFY lpon)
+{
+ #define WINDOWTEXTSIZE 260 + 64
+ OPENFILENAME *ofn = lpon->lpOFN;
+ char text[WINDOWTEXTSIZE];
+ char *p;
+ size_t len;
+
+ // Put the path into the Window Title
+ if (lpon->lpOFN->lpstrTitle)
+ strcpy (text, lpon->lpOFN->lpstrTitle);
+ else
+ {
+ char *pp;
+
+ GetWindowText (hParent, text, WINDOWTEXTSIZE);
+ pp = strchr (text, '-');
+ if (pp)
+ *--pp = 0;
+ }
+
+ p = strcat (text, " - [");
+ p = text;
+ len = strlen (text);
+ p += len;
+ len = WINDOWTEXTSIZE - len - 2;
+ CommDlg_OpenSave_GetFolderPath (hParent, p, len);
+ strcat (text, "]");
+ SetWindowText (hParent, text);
+}
+
+//------------------------------------------------------------------------
+UINT_PTR APIENTRY WinSaveHook (HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch (msg)
+ {
+ case WM_NOTIFY: {
+ LPOFNOTIFY lpon = (LPOFNOTIFY)lParam;
+ if (!lpon)
+ break;
+
+ switch (lpon->hdr.code)
+ {
+ case CDN_FOLDERCHANGE:
+ showPathInWindowTitle (GetParent (hdlg), lpon);
+ break;
+ }
+ } break;
+ } // end switch
+
+ return 0;
+}
+#endif
+
+//-----------------------------------------------------------------------------
diff --git a/vstgui.sf/vstgui/cfileselector.h b/vstgui.sf/vstgui/cfileselector.h
new file mode 100644
index 0000000..11d84be
--- /dev/null
+++ b/vstgui.sf/vstgui/cfileselector.h
@@ -0,0 +1,133 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins :
+//
+// Version 3.0 $Date: 2005/11/01 10:03:05 $
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __cfileselector__
+#define __cfileselector__
+
+#include "vstgui.h"
+
+BEGIN_NAMESPACE_VSTGUI
+
+#ifndef __aeffectx__
+struct VstFileSelect;
+#endif
+
+//-----------------------------------------------------------------------------
+// CFileSelector Declaration
+//!
+//-----------------------------------------------------------------------------
+class CFileSelector
+{
+public:
+ CFileSelector (void* ptr);
+ virtual ~CFileSelector ();
+
+ long run (VstFileSelect *vstFileSelect);
+
+protected:
+ void* ptr;
+ VstFileSelect *vstFileSelect;
+
+ #if MAC
+ static pascal void navEventProc (const NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, NavCallBackUserData callBackUD);
+ static pascal Boolean navObjectFilterProc (AEDesc *theItem, void *info, void *callBackUD, NavFilterModes filterMode);
+ #endif
+};
+
+#ifndef __aeffectx__
+struct VstFileType
+{
+ VstFileType (char* _name, char *_macType, char *_dosType, char *_unixType = 0, char *_mimeType1 = 0, char *_mimeType2 = 0)
+ {
+ if (_name)
+ strcpy (name, _name);
+ if (_macType)
+ strcpy (macType, _macType);
+ if (_dosType)
+ strcpy (dosType, _dosType);
+ if (_unixType)
+ strcpy (unixType, _unixType);
+ if (_mimeType1)
+ strcpy (mimeType1, _mimeType1);
+ if (_mimeType2)
+ strcpy (mimeType2, _mimeType2);
+ }
+ char name[128];
+ char macType[8];
+ char dosType[8];
+ char unixType[8];
+ char mimeType1[128];
+ char mimeType2[128];
+};
+
+struct VstFileSelect
+{
+ long command; // see enum kVstFileLoad....
+ long type; // see enum kVstFileType...
+
+ long macCreator; // optional: 0 = no creator
+
+ long nbFileTypes; // nb of fileTypes to used
+ VstFileType *fileTypes; // list of fileTypes
+
+ char title[1024]; // text display in the file selector's title
+
+ char *initialPath; // initial path
+
+ char *returnPath; // use with kVstFileLoad and kVstDirectorySelect
+ // if null is passed, the host will allocated memory
+ // the plugin should then called closeOpenFileSelector for freeing memory
+ long sizeReturnPath;
+
+ char **returnMultiplePaths; // use with kVstMultipleFilesLoad
+ // the host allocates this array. The plugin should then called closeOpenFileSelector for freeing memory
+ long nbReturnPath; // number of selected paths
+
+ long reserved; // reserved for host application
+ char future[116]; // future use
+};
+
+enum {
+ kVstFileLoad = 0,
+ kVstFileSave,
+ kVstMultipleFilesLoad,
+ kVstDirectorySelect,
+
+ kVstFileType = 0
+};
+#endif
+
+END_NAMESPACE_VSTGUI
+
+#endif
diff --git a/vstgui.sf/vstgui/cscrollview.cpp b/vstgui.sf/vstgui/cscrollview.cpp
new file mode 100644
index 0000000..77638bd
--- /dev/null
+++ b/vstgui.sf/vstgui/cscrollview.cpp
@@ -0,0 +1,497 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins :
+//
+// CScrollView written 2004 by Arne Scheffler
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __cscrollview__
+#include "cscrollview.h"
+#endif
+
+#define FOREACHSUBVIEW for (CCView *pSv = pFirstView; pSv; pSv = pSv->pNext) {CView *pV = pSv->pView;
+#define ENDFOR }
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+CScrollContainer::CScrollContainer (const CRect &size, const CRect &containerSize, CFrame *pParent, CBitmap *pBackground)
+: CViewContainer (size, pParent, pBackground)
+, containerSize (containerSize)
+, offset (CPoint (0, 0))
+{
+ setTransparency (true);
+ setMode (kOnlyDirtyUpdate);
+}
+
+//-----------------------------------------------------------------------------
+CScrollContainer::~CScrollContainer ()
+{
+}
+
+
+//-----------------------------------------------------------------------------
+void CScrollContainer::setContainerSize (const CRect& cs)
+{
+ containerSize = cs;
+ setScrollOffset (offset, false);
+}
+
+//-----------------------------------------------------------------------------
+void CScrollContainer::setScrollOffset (CPoint newOffset, bool redraw)
+{
+ if (newOffset.x < containerSize.left - containerSize.width ())
+ newOffset.x = containerSize.left - containerSize.width ();
+ if (newOffset.x > containerSize.right)
+ newOffset.x = containerSize.right;
+ if (newOffset.y < containerSize.top)
+ newOffset.y = containerSize.top;
+ if (newOffset.y > containerSize.bottom)
+ newOffset.y = containerSize.bottom;
+ CPoint diff (newOffset.x - offset.x, offset.y - newOffset.y);
+ if (diff.x == 0 && diff.y == 0)
+ return;
+ CCView *pV = pFirstView;
+ while (pV)
+ {
+ CRect r;
+ pV->pView->getViewSize (r);
+ r.offset (diff.x , diff.y);
+ pV->pView->setViewSize (r);
+ pV->pView->getMouseableArea (r);
+ r.offset (diff.x , diff.y);
+ pV->pView->setMouseableArea (r);
+
+ pV = pV->pNext;
+ }
+ offset = newOffset;
+
+ if (0) //redraw)
+ {
+ CDrawContext* pContext = getFrame ()->createDrawContext ();
+ CPoint contextOffset = pContext->offset;
+ pContext->offset.offset (-contextOffset.x, -contextOffset.y);
+ pContext->offsetScreen.offset (-contextOffset.x, -contextOffset.y);
+ redrawRect (pContext, size);
+ pContext->offset.offset (contextOffset.x, contextOffset.y);
+ pContext->offsetScreen.offset (contextOffset.x, contextOffset.y);
+ pContext->forget ();
+ }
+ else
+ setDirty (true);
+}
+
+//-----------------------------------------------------------------------------
+void CScrollContainer::redrawRect (CDrawContext* context, const CRect& rect)
+{
+ CRect _rect (rect);
+ _rect.offset (size.left, size.top);
+ _rect.bound (size);
+ if (bTransparencyEnabled)
+ {
+ // as this is transparent, we call the parentview to redraw this area.
+ if (pParentView)
+ pParentView->redrawRect (context, _rect);
+ else if (pParentFrame)
+ pParentFrame->drawRect (context, _rect);
+ }
+ else
+ drawRect (context, _rect);
+}
+
+//-----------------------------------------------------------------------------
+bool CScrollContainer::isDirty () const
+{
+ if (bDirty)
+ return true;
+
+ FOREACHSUBVIEW
+ if (pV->isDirty ())
+ {
+ CRect vs = pV->getViewSize (vs);
+ vs.offset (size.left, size.top);
+ if (size.rectOverlap (vs))
+ return true;
+ }
+ ENDFOR
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+CScrollView::CScrollView (const CRect &size, const CRect &containerSize, CFrame* pParent, long style, long scrollbarWidth, CBitmap* pBackground)
+: CViewContainer (size, pParent, pBackground)
+, sc (0)
+, vsb (0)
+, hsb (0)
+, containerSize (containerSize)
+, style (style)
+{
+ setTransparency (true);
+ setMode (kOnlyDirtyUpdate);
+
+ CRect scsize (size);
+ scsize.offset (-scsize.left, -scsize.top);
+// CScrollbar* sb = 0;
+ if (style & kHorizontalScrollbar)
+ {
+ CRect sbr (size);
+ sbr.offset (-size.left, -size.top);
+ sbr.top = sbr.bottom - scrollbarWidth;
+ if (style & kVerticalScrollbar)
+ {
+ sbr.right -= (scrollbarWidth - 1);
+ }
+ hsb = new CScrollbar (sbr, this, kHSBTag, CScrollbar::kHorizontal, containerSize);
+ CViewContainer::addView (hsb);
+ scsize.bottom = sbr.top;
+ }
+ if (style & kVerticalScrollbar)
+ {
+ CRect sbr (size);
+ sbr.offset (-size.left, -size.top);
+ sbr.left = sbr.right - scrollbarWidth;
+ if (style & kHorizontalScrollbar)
+ {
+ sbr.bottom -= (scrollbarWidth - 1);
+ }
+ vsb = new CScrollbar (sbr, this, kVSBTag, CScrollbar::kVertical, containerSize);
+ CViewContainer::addView (vsb);
+ scsize.right = sbr.left;
+ }
+
+ sc = new CScrollContainer (scsize, this->containerSize, pParent);
+ CViewContainer::addView (sc);
+}
+
+//-----------------------------------------------------------------------------
+CScrollView::~CScrollView ()
+{
+}
+
+//-----------------------------------------------------------------------------
+void CScrollView::setContainerSize (const CRect& cs)
+{
+ containerSize = cs;
+ if (sc)
+ {
+ sc->setContainerSize (cs);
+ }
+ if (vsb)
+ {
+ vsb->setScrollSize (cs);
+ valueChanged (NULL, vsb);
+ }
+ if (hsb)
+ {
+ hsb->setScrollSize (cs);
+ valueChanged (NULL, hsb);
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CScrollView::addView (CView *pView)
+{
+ sc->addView (pView);
+}
+
+//-----------------------------------------------------------------------------
+void CScrollView::valueChanged (CDrawContext *pContext, CControl *pControl)
+{
+ if (sc)
+ {
+ float value = pControl->getValue ();
+ long tag = pControl->getTag ();
+ CPoint offset;
+ CRect vsize = sc->getViewSize (vsize);
+ CRect csize = sc->getContainerSize ();
+ sc->getScrollOffset (offset);
+
+ switch (tag)
+ {
+ case kHSBTag:
+ {
+ offset.x = csize.left - (CCoord)((csize.width () - vsize.width ()) * value);
+ sc->setScrollOffset (offset, false);
+ break;
+ }
+ case kVSBTag:
+ {
+ offset.y = csize.top + (CCoord)((csize.height () - vsize.height ()) * value);
+ sc->setScrollOffset (offset, false);
+ break;
+ }
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CScrollView::drawBackgroundRect (CDrawContext *pContext, CRect& _updateRect)
+{
+ CRect r (size);
+ r.offset (-r.left, -r.top);
+ pContext->setFrameColor (kBlackCColor);
+ pContext->setLineWidth (1);
+ pContext->drawRect (r);
+ CViewContainer::drawBackgroundRect (pContext, _updateRect);
+}
+
+//-----------------------------------------------------------------------------
+bool CScrollView::onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)
+{
+ bool result = CViewContainer::onWheel (pContext, where, axis, distance);
+ if (!result)
+ {
+ if (vsb && axis == kMouseWheelAxisY)
+ result = vsb->onWheel (pContext, where, distance);
+ else if (hsb && axis == kMouseWheelAxisX)
+ result = hsb->onWheel (pContext, where, distance);
+ }
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+CScrollbar::CScrollbar (const CRect& size, CControlListener* listener, long tag, long style, const CRect& scrollSize)
+: CControl (size, listener, tag, 0)
+, style (style)
+, scrollSize (scrollSize)
+, scrollerArea (size)
+, stepValue (0.1f)
+, scrollerLength (0)
+, drawer (0)
+{
+ setWheelInc (0.05f);
+ scrollerArea.inset (2, 2);
+ calculateScrollerLength ();
+ frameColor (0, 0, 0, 255);
+ scrollerColor (0, 0, 255, 255);
+ backgroundColor (255, 255, 255, 200);
+}
+
+//-----------------------------------------------------------------------------
+CScrollbar::~CScrollbar ()
+{
+}
+
+//-----------------------------------------------------------------------------
+void CScrollbar::setScrollSize (const CRect& ssize)
+{
+ scrollSize = ssize;
+ calculateScrollerLength ();
+ setDirty (true);
+}
+
+//-----------------------------------------------------------------------------
+void CScrollbar::calculateScrollerLength ()
+{
+ CCoord newScrollerLength = scrollerLength;
+ if (style == kHorizontal)
+ {
+ float factor = (float)size.width () / (float)scrollSize.width ();
+ if (factor >= 1.f)
+ factor = 0;
+ newScrollerLength = (CCoord)(size.width () * factor);
+ }
+ else
+ {
+ float factor = (float)size.height () / (float)scrollSize.height ();
+ if (factor >= 1.f)
+ factor = 0;
+ newScrollerLength = (CCoord)(size.height () * factor);
+ }
+ if (newScrollerLength != scrollerLength)
+ {
+ scrollerLength = newScrollerLength;
+ setDirty (true);
+ }
+}
+
+//-----------------------------------------------------------------------------
+CRect CScrollbar::getScrollerRect ()
+{
+ CRect scrollerRect (scrollerArea);
+ CCoord l = (style == kHorizontal) ? scrollerArea.width () : scrollerArea.height ();
+ CCoord scrollerOffset = (CCoord)(value * (l - scrollerLength));
+ if (style == kHorizontal)
+ {
+ scrollerRect.setWidth (scrollerLength);
+ scrollerRect.offset (scrollerOffset, 0);
+ }
+ else
+ {
+ scrollerRect.setHeight (scrollerLength);
+ scrollerRect.offset (0, scrollerOffset);
+ }
+ return scrollerRect;
+}
+
+//-----------------------------------------------------------------------------
+void CScrollbar::mouse (CDrawContext* pContext, CPoint& where, long buttons)
+{
+ if (buttons == -1) buttons = pContext->getMouseButtons ();
+ if (buttons != kLButton || scrollerLength == 0) return;
+
+ float newValue = 0.f;
+
+ // scrolling
+ CRect scrollerRect = getScrollerRect ();
+ if (where.isInside (scrollerRect))
+ {
+ CPoint newPoint (where);
+ while (pContext->waitDrag ())
+ {
+ getMouseLocation (pContext, newPoint);
+ newPoint.x -= where.x - scrollerRect.left;
+ newPoint.y -= where.y - scrollerRect.top;
+ if (style == kHorizontal)
+ {
+ newValue = (float)(newPoint.x - scrollerArea.left) / ((float)scrollerArea.width () - scrollerRect.width ());
+ }
+ else
+ {
+ newValue = (float)(newPoint.y - scrollerArea.top) / ((float)scrollerArea.height () - scrollerRect.height ());
+ }
+ if (newValue < 0.f) newValue = 0.f;
+ if (newValue > 1.f) newValue = 1.f;
+ if (newValue != value)
+ {
+ value = newValue;
+ if (listener)
+ listener->valueChanged (pContext, this);
+ }
+ doIdleStuff ();
+ }
+ }
+ // stepping
+ else if (where.isInside (scrollerArea))
+ {
+ long kWaitTime = 100;
+ long nextUpdateTime = getFrame ()->getTicks ();
+ do
+ {
+ long ticks = getFrame ()->getTicks ();
+ if (nextUpdateTime - ticks < 0)
+ {
+ if (style == kHorizontal)
+ {
+ if (where.x < scrollerRect.left)
+ newValue = value - (float)scrollerLength / (float)scrollerArea.width ();
+ else
+ newValue = value + (float)scrollerLength / (float)scrollerArea.width ();
+ }
+ else
+ {
+ if (where.y < scrollerRect.top)
+ newValue = value - (float)scrollerLength / (float)scrollerArea.height ();
+ else
+ newValue = value + (float)scrollerLength / (float)scrollerArea.height ();
+ }
+ if (newValue < 0.f) newValue = 0.f;
+ if (newValue > 1.f) newValue = 1.f;
+ if (newValue != value)
+ {
+ value = newValue;
+ if (listener)
+ listener->valueChanged (pContext, this);
+ }
+ scrollerRect = getScrollerRect ();
+ if (where.isInside (scrollerRect))
+ break;
+ nextUpdateTime = ticks + kWaitTime;
+ }
+ doIdleStuff ();
+ } while (pContext->getMouseButtons () == kLButton);
+ }
+}
+
+//------------------------------------------------------------------------
+bool CScrollbar::onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+{
+ if (!bMouseEnabled)
+ return false;
+
+ if (style == kHorizontal)
+ distance *= -1;
+
+ long buttons = pContext->getMouseButtons ();
+ if (buttons & kShift)
+ value -= 0.1f * distance * wheelInc;
+ else
+ value -= distance * wheelInc;
+ bounceValue ();
+
+ if (isDirty () && listener)
+ listener->valueChanged (pContext, this);
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+void CScrollbar::drawBackground (CDrawContext* pContext)
+{
+ CRect r (size);
+ if (drawer)
+ drawer->drawScrollbarBackground (pContext, r, style, this);
+ else
+ {
+ pContext->setLineWidth (1);
+ pContext->setFillColor (backgroundColor);
+ pContext->setFrameColor (frameColor);
+ pContext->drawRect (r, kDrawFilledAndStroked);
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CScrollbar::drawScroller (CDrawContext* pContext, const CRect& size)
+{
+ CRect r (size);
+ if (drawer)
+ drawer->drawScrollbarScroller (pContext, r, style, this);
+ else
+ {
+ pContext->setLineWidth (1);
+ pContext->setFillColor (scrollerColor);
+ pContext->setFrameColor (frameColor);
+ pContext->drawRect (r, kDrawFilledAndStroked);
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CScrollbar::draw (CDrawContext* pContext)
+{
+ drawBackground (pContext);
+ if (scrollerLength > 0)
+ {
+ CRect scrollerRect = getScrollerRect ();
+ drawScroller (pContext, scrollerRect);
+ }
+ setDirty (false);
+}
+
diff --git a/vstgui.sf/vstgui/cscrollview.h b/vstgui.sf/vstgui/cscrollview.h
new file mode 100644
index 0000000..f5f85cd
--- /dev/null
+++ b/vstgui.sf/vstgui/cscrollview.h
@@ -0,0 +1,179 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins :
+//
+// CScrollView written 2004 by Arne Scheffler
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2003, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __cscrollview__
+#define __cscrollview__
+
+#ifndef __vstgui__
+#include "vstgui.h"
+#endif
+
+BEGIN_NAMESPACE_VSTGUI
+
+class CScrollbar;
+class CScrollContainer;
+
+//-----------------------------------------------------------------------------
+class CScrollView : public CViewContainer, CControlListener
+//! a scrollable view
+//-----------------------------------------------------------------------------
+{
+public:
+ CScrollView (const CRect &size, const CRect &containerSize, CFrame* pParent, long style, long scrollbarWidth = 16, CBitmap* pBackground = 0);
+ virtual ~CScrollView ();
+
+ // style
+ enum {
+ kHorizontalScrollbar = 1 << 1, ///< add a horizontal scrollbar
+ kVerticalScrollbar = 1 << 2 ///< add a vertical scrollbar
+ };
+
+ virtual void setContainerSize (const CRect& cs); ///< set the virtual size of this container
+ virtual void addView (CView *pView);
+ virtual void drawBackgroundRect (CDrawContext *pContext, CRect& _updateRect);
+ virtual bool onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance);
+ virtual void valueChanged (CDrawContext *pContext, CControl *pControl);
+
+ virtual CScrollbar* getVerticalScrollbar () const { return vsb; }
+ virtual CScrollbar* getHorizontalScrollbar () const { return hsb; }
+
+ CLASS_METHODS(CScrollView, CViewContainer)
+//-----------------------------------------------------------------------------
+protected:
+ CScrollContainer* sc;
+ CScrollbar* vsb;
+ CScrollbar* hsb;
+
+ CRect containerSize;
+ long style;
+
+private:
+ enum {
+ kHSBTag,
+ kVSBTag,
+ };
+};
+
+//-----------------------------------------------------------------------------
+class CScrollContainer : public CViewContainer
+//-----------------------------------------------------------------------------
+{
+public:
+ CScrollContainer (const CRect &size, const CRect &containerSize, CFrame *pParent, CBitmap *pBackground = 0);
+ virtual ~CScrollContainer ();
+
+ void setScrollOffset (CPoint offset, bool withRedraw = false);
+ void getScrollOffset (CPoint& off) const { off = offset; }
+
+ CRect getContainerSize () const { return containerSize; }
+ void setContainerSize (const CRect& cs);
+
+ virtual void redrawRect (CDrawContext* context, const CRect& rect);
+ virtual bool isDirty () const;
+
+ CLASS_METHODS(CScrollContainer, CViewContainer)
+//-----------------------------------------------------------------------------
+protected:
+ CRect containerSize;
+ CPoint offset;
+};
+
+//-----------------------------------------------------------------------------
+class IScrollbarDrawer
+//-----------------------------------------------------------------------------
+{
+public:
+ virtual void drawScrollbarBackground (CDrawContext* pContext, const CRect& size, long style, CScrollbar* bar) = 0;
+ virtual void drawScrollbarScroller (CDrawContext* pContext, const CRect& size, long style, CScrollbar* bar) = 0;
+};
+
+//-----------------------------------------------------------------------------
+class CScrollbar : public CControl
+//! a scrollbar control
+//-----------------------------------------------------------------------------
+{
+public:
+ CScrollbar (const CRect& size, CControlListener* listener, long tag, long style, const CRect& scrollSize);
+ virtual ~CScrollbar ();
+
+ enum {
+ kHorizontal,
+ kVertical,
+ };
+
+ virtual void setDrawer (IScrollbarDrawer* d) { drawer = d; }
+ virtual void setScrollSize (const CRect& ssize);
+ virtual void setStep (float newStep) { stepValue = newStep; }
+
+ CRect& getScrollSize (CRect& rect) const { rect = scrollSize; return rect; }
+ float getStep () const { return stepValue; }
+
+ virtual void setFrameColor (const CColor& color) { frameColor = color; }
+ virtual void setScrollerColor (const CColor& color) { scrollerColor = color; }
+ virtual void setBackgroundColor (const CColor& color) { backgroundColor = color; }
+
+ CColor getFrameColor () const { return frameColor; }
+ CColor getScrollerColor () const { return scrollerColor; }
+ CColor getBackgroundColor () const { return backgroundColor; }
+
+ virtual void draw (CDrawContext* pContext);
+ virtual void mouse (CDrawContext* pContext, CPoint& where, long buttons = -1);
+ virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance);
+
+ CLASS_METHODS(CScrollbar, CControl)
+//-----------------------------------------------------------------------------
+protected:
+ void drawBackground (CDrawContext* pContext);
+ void drawScroller (CDrawContext* pContext, const CRect& size);
+
+ void calculateScrollerLength ();
+ CRect getScrollerRect ();
+
+ long style;
+ CRect scrollSize;
+ CRect scrollerArea;
+
+ float stepValue;
+ CCoord scrollerLength;
+
+ CColor frameColor;
+ CColor scrollerColor;
+ CColor backgroundColor;
+
+ IScrollbarDrawer* drawer;
+};
+
+END_NAMESPACE_VSTGUI
+
+#endif
diff --git a/vstgui.sf/vstgui/ctabview.cpp b/vstgui.sf/vstgui/ctabview.cpp
new file mode 100644
index 0000000..805fbad
--- /dev/null
+++ b/vstgui.sf/vstgui/ctabview.cpp
@@ -0,0 +1,404 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework not only for VST plugins :
+//
+// CTabView written 2004 by Arne Scheffler
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __ctabview__
+#include "ctabview.h"
+#endif
+
+BEGIN_NAMESPACE_VSTGUI
+
+#define kTabButtonTagStart 20000
+
+//-----------------------------------------------------------------------------
+class CTabButton : public COnOffButton
+//-----------------------------------------------------------------------------
+{
+public:
+ CTabButton (const CRect &size, CControlListener *listener, long tag, CBitmap *background, const char* inName)
+ : COnOffButton (size, listener, tag, background)
+ , name (0)
+ {
+ if (inName)
+ {
+ name = (char*)malloc (strlen (inName) + 1);
+ strcpy (name, inName);
+ }
+ activeTextColor = kBlackCColor;
+ inactiveTextColor (90, 90, 90, 255);
+ textFont = kSystemFont;
+ fontSize = 12;
+ }
+
+ virtual ~CTabButton ()
+ {
+ if (name)
+ free (name);
+ }
+
+ virtual void draw (CDrawContext *pContext)
+ {
+ COnOffButton::draw (pContext);
+ if (name)
+ {
+ pContext->setFont (textFont, fontSize);
+ pContext->setFontColor (value ? activeTextColor : inactiveTextColor);
+ pContext->drawString (name, size, false);
+ }
+ }
+
+ void mouse (CDrawContext *pContext, CPoint &where, long button)
+ {
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+ if (!(button & kLButton))
+ return;
+
+ value = ((long)value) ? 0.f : 1.f;
+
+ if (listener)
+ listener->valueChanged (pContext, this);
+ }
+
+ virtual void onDragEnter (CDrawContext* context, CDragContainer* drag, const CPoint& where)
+ {
+ if (value == 0.f)
+ {
+ value = 1.f;
+ if (listener)
+ listener->valueChanged (context, this);
+ }
+ }
+
+ void setTextFont (const CFont& font) { textFont = font; }
+ void setActiveTextColor (const CColor& color) { activeTextColor = color; }
+ void setInactiveTextColor (const CColor& color) { inactiveTextColor = color; }
+ void setTextSize (const long& textSize) { fontSize = textSize; }
+
+ CLASS_METHODS (CTabButton, COnOffButton)
+protected:
+ char* name;
+ CFont textFont;
+ CColor activeTextColor;
+ CColor inactiveTextColor;
+ long fontSize;
+};
+
+//-----------------------------------------------------------------------------
+class CTabChildView : public CReferenceCounter
+//-----------------------------------------------------------------------------
+{
+public:
+ CTabChildView (CView* view)
+ : view (view)
+ , previous (0)
+ , next (0)
+ , button (0)
+ {
+ }
+
+ virtual ~CTabChildView ()
+ {
+ view->forget ();
+ }
+
+ CView* view;
+ CTabChildView* previous;
+ CTabChildView* next;
+ CTabButton* button;
+};
+
+//-----------------------------------------------------------------------------
+CTabView::CTabView (const CRect& size, CFrame* parent, CBitmap* tabBitmap, CBitmap* background, long tabPosition, long style)
+: CViewContainer (size, parent, background)
+, numberOfChilds (0)
+, tabPosition (tabPosition)
+, style (style)
+, tabSize (CRect (0, 0, 0, 0))
+, tabBitmap (tabBitmap)
+, firstChild (0)
+, lastChild (0)
+, currentChild (0)
+{
+ if (tabBitmap)
+ {
+ tabBitmap->remember ();
+ tabSize.right = tabBitmap->getWidth ();
+ tabSize.bottom = tabBitmap->getHeight ();
+ }
+ setMode (kOnlyDirtyUpdate);
+}
+
+//-----------------------------------------------------------------------------
+CTabView::CTabView (const CRect& size, CFrame* parent, const CRect& tabSize, CBitmap* background, long tabPosition, long style)
+: CViewContainer (size, parent, background)
+, numberOfChilds (0)
+, tabPosition (tabPosition)
+, style (style)
+, tabSize (tabSize)
+, tabBitmap (0)
+, firstChild (0)
+, lastChild (0)
+, currentChild (0)
+{
+ setMode (kOnlyDirtyUpdate);
+}
+
+//-----------------------------------------------------------------------------
+CTabView::~CTabView ()
+{
+ pParentFrame = 0;
+ removeAllTabs ();
+ if (tabBitmap)
+ tabBitmap->forget ();
+}
+
+//-----------------------------------------------------------------------------
+bool CTabView::addTab (CView* view, const char* name, CBitmap* tabBitmap)
+{
+ if (!view)
+ return false;
+ if (tabBitmap == 0)
+ tabBitmap = this->tabBitmap;
+
+ CRect ts (0, 0, tabSize.getWidth (), tabSize.getHeight () / 2);
+ switch (tabPosition)
+ {
+ case kPositionTop:
+ ts.offset (tabSize.getWidth () * numberOfChilds, 0); break;
+ case kPositionBottom:
+ ts.offset (tabSize.getWidth () * numberOfChilds, size.getHeight () - tabSize.getHeight () / 2); break;
+ case kPositionLeft:
+ ts.offset (0, tabSize.getHeight () / 2 * numberOfChilds); break;
+ case kPositionRight:
+ ts.offset (size.getWidth () - tabSize.getWidth (), tabSize.getHeight () / 2 * numberOfChilds); break;
+ }
+ CTabButton* b = new CTabButton (ts, this, numberOfChilds + kTabButtonTagStart, tabBitmap, name);
+ b->setTransparency (true);
+ addView (b);
+ CTabChildView* v = new CTabChildView (view);
+ v->button = b;
+ if (lastChild)
+ {
+ lastChild->next = v;
+ v->previous = lastChild;
+ lastChild = v;
+ }
+ else
+ {
+ firstChild = lastChild = v;
+ setCurrentChild (v);
+ }
+ numberOfChilds++;
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+bool CTabView::removeTab (CView* view)
+{
+ if (!view)
+ return false;
+
+ CTabChildView* v = firstChild;
+ while (v)
+ {
+ if (v->view == view)
+ {
+ if (v->previous)
+ v->previous->next = v->next;
+ if (v->next)
+ v->next->previous = v->previous;
+ if (v == currentChild)
+ setCurrentChild (v->previous ? v->previous : v->next);
+ removeView (v->button, true);
+ v->forget ();
+ numberOfChilds--;
+ return true;
+ }
+ v = v->next;
+ }
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+bool CTabView::removeAllTabs ()
+{
+ setCurrentChild (0);
+ CTabChildView* v = lastChild;
+ while (v)
+ {
+ CTabChildView* next = v->previous;
+ removeTab (v->view);
+ v = next;
+ }
+ firstChild = 0;
+ lastChild = 0;
+ numberOfChilds = 0;
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+bool CTabView::selectTab (long index)
+{
+ if (index > (long)numberOfChilds)
+ return false;
+ CTabChildView* v = firstChild;
+ long i = 0;
+ while (v)
+ {
+ if (index == i)
+ break;
+ v = v->next;
+ i++;
+ }
+ if (v)
+ {
+ setCurrentChild (v);
+ return true;
+ }
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+void CTabView::setCurrentChild (CTabChildView* childView)
+{
+ if (childView == currentChild)
+ {
+ if (currentChild->button)
+ currentChild->button->setValue (1.f);
+ return;
+ }
+ if (currentChild)
+ {
+ if (currentChild->button)
+ currentChild->button->setValue (0.f);
+ removeView (currentChild->view, false);
+ }
+ currentChild = childView;
+ if (currentChild)
+ {
+ addView (currentChild->view);
+ if (currentChild->button)
+ currentChild->button->setValue (1.f);
+ }
+ setDirty ();
+}
+
+//-----------------------------------------------------------------------------
+void CTabView::valueChanged (CDrawContext *pContext, CControl *pControl)
+{
+ if (pControl->isTypeOf ("CTabButton"))
+ selectTab (pControl->getTag () - kTabButtonTagStart);
+}
+
+//-----------------------------------------------------------------------------
+CRect& CTabView::getTabViewSize (CRect& rect) const
+{
+ rect = size;
+ rect.offset (-size.left, -size.top);
+ switch (tabPosition)
+ {
+ case kPositionTop:
+ rect.top += tabSize.getHeight () / 2; break;
+ case kPositionBottom:
+ rect.bottom -= tabSize.getHeight () / 2; break;
+ case kPositionLeft:
+ rect.left += tabSize.getWidth (); break;
+ case kPositionRight:
+ rect.right -= tabSize.getWidth (); break;
+ }
+ return rect;
+}
+
+//-----------------------------------------------------------------------------
+void CTabView::setTabFontStyle (const CFont& font, long fontSize, CColor selectedColor, CColor deselectedColor)
+{
+ CTabChildView* v = firstChild;
+ while (v)
+ {
+ v->button->setTextFont (font);
+ v->button->setTextSize (fontSize);
+ v->button->setActiveTextColor (selectedColor);
+ v->button->setInactiveTextColor (deselectedColor);
+ v = v->next;
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CTabView::alignTabs (long alignment)
+{
+ CCoord allTabsWidth;
+ CCoord viewWidth;
+ CCoord offset = 0;
+ CRect ts (0, 0, tabSize.getWidth (), tabSize.getHeight () / 2);
+ if (tabPosition == kPositionTop || tabPosition == kPositionBottom)
+ {
+ allTabsWidth = tabSize.getWidth () * numberOfChilds;
+ viewWidth = size.getWidth ();
+ }
+ else
+ {
+ allTabsWidth = (tabSize.getHeight () / 2) * numberOfChilds;
+ viewWidth = size.getHeight ();
+ }
+ if (alignment == kAlignCenter)
+ offset = (viewWidth - allTabsWidth) / 2;
+ else if (alignment == kAlignLeft)
+ offset = 0;
+ else if (alignment == kAlignRight)
+ offset = viewWidth - allTabsWidth;
+ if (tabPosition == kPositionTop)
+ ts.offset (offset, 0);
+ else if (tabPosition == kPositionBottom)
+ ts.offset (offset, size.getHeight () - tabSize.getHeight () / 2);
+ else if (tabPosition == kPositionLeft)
+ ts.offset (0, offset);
+ else if (tabPosition == kPositionRight)
+ ts.offset (size.getWidth () - tabSize.getWidth (), offset);
+ CTabChildView* v = firstChild;
+ while (v)
+ {
+ v->button->setViewSize (ts);
+ v->button->setMouseableArea (ts);
+ if (tabPosition == kPositionTop || tabPosition == kPositionBottom)
+ ts.offset (tabSize.getWidth (), 0);
+ else
+ ts.offset (0, tabSize.getHeight () / 2);
+ v = v->next;
+ }
+ setDirty (true);
+}
+
+END_NAMESPACE_VSTGUI
diff --git a/vstgui.sf/vstgui/ctabview.h b/vstgui.sf/vstgui/ctabview.h
new file mode 100644
index 0000000..c7d4678
--- /dev/null
+++ b/vstgui.sf/vstgui/ctabview.h
@@ -0,0 +1,100 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework not only for VST plugins :
+//
+// CTabView written 2004 by Arne Scheffler
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __ctabview__
+#define __ctabview__
+
+#ifndef __vstcontrols__
+#include "vstcontrols.h"
+#endif
+
+BEGIN_NAMESPACE_VSTGUI
+
+class CTabChildView;
+
+//-----------------------------------------------------------------------------
+class CTabView : public CViewContainer, public CControlListener
+//! a tab view
+//-----------------------------------------------------------------------------
+{
+public:
+ CTabView (const CRect& size, CFrame* parent, CBitmap* tabBitmap, CBitmap* background = 0, long tabPosition = kPositionTop, long style = 0);
+ CTabView (const CRect& size, CFrame* parent, const CRect& tabSize, CBitmap* background = 0, long tabPosition = kPositionTop, long style = 0);
+ virtual ~CTabView ();
+
+ virtual bool addTab (CView* view, const char* name = 0, CBitmap* tabBitmap = 0);
+ virtual bool removeTab (CView* view);
+ virtual bool removeAllTabs ();
+ virtual bool selectTab (long index);
+
+ virtual CRect& getTabViewSize (CRect& rect) const;
+
+ virtual void setTabFontStyle (const CFont& font, long fontSize = 12, CColor selectedColor = kBlackCColor, CColor deselectedColor = kWhiteCColor); ///< call this after the tabs are added. Tabs added after this call will have the default font style.
+
+ virtual void alignTabs (long alignment = kAlignCenter); ///< call this after you have added all tabs
+
+ enum {
+ kPositionLeft = 0,
+ kPositionRight,
+ kPositionTop,
+ kPositionBottom,
+ };
+
+ enum {
+ kAlignCenter = 0,
+ kAlignLeft,
+ kAlignRight,
+ kAlignTop = kAlignLeft,
+ kAlignBottom = kAlignRight
+ };
+
+ virtual void valueChanged (CDrawContext *pContext, CControl *pControl);
+//-----------------------------------------------------------------------------
+ CLASS_METHODS (CTabView, CViewContainer)
+protected:
+ void setCurrentChild (CTabChildView* childView);
+
+ unsigned long numberOfChilds;
+ long tabPosition;
+ long style;
+ CRect tabSize;
+ CBitmap* tabBitmap;
+ CTabChildView* firstChild;
+ CTabChildView* lastChild;
+ CTabChildView* currentChild;
+};
+
+END_NAMESPACE_VSTGUI
+
+#endif
diff --git a/vstgui.sf/vstgui/plugguieditor.cpp b/vstgui.sf/vstgui/plugguieditor.cpp
new file mode 100644
index 0000000..c1f1599
--- /dev/null
+++ b/vstgui.sf/vstgui/plugguieditor.cpp
@@ -0,0 +1,301 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins
+//
+// Version 3.0 Date : 30/06/04
+//
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __plugguieditor__
+#include "plugguieditor.h"
+#endif
+
+#define kIdleRate 100 // host idle rate in ms
+#define kIdleRate2 50
+#define kIdleRateMin 4 // minimum time between 2 idles in ms
+
+#if WINDOWS
+static struct tagMSG windowsMessage;
+#endif
+
+//-----------------------------------------------------------------------------
+// PluginGUIEditor Implementation
+//-----------------------------------------------------------------------------
+/*! @class PluginGUIEditor
+This is the same as the AEffGUIEditor class except that this one allows
+the VSTGUI lib to build without VST dependencies.
+*/
+PluginGUIEditor::PluginGUIEditor (void *pEffect)
+ : effect (pEffect), frame (0), inIdleStuff (false)
+{
+ systemWindow = 0;
+ lLastTicks = getTicks ();
+
+ #if WINDOWS
+ OleInitialize (0);
+ #endif
+ #if MACX
+ void InitMachOLibrary ();
+ InitMachOLibrary ();
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+PluginGUIEditor::~PluginGUIEditor ()
+{
+ #if WINDOWS
+ OleUninitialize ();
+ #endif
+ #if MACX
+ void ExitMachOLibrary ();
+ ExitMachOLibrary ();
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void PluginGUIEditor::draw (ERect *ppErect)
+{
+ if (frame)
+ {
+ if (ppErect)
+ {
+ CRect r (ppErect->left, ppErect->top, ppErect->right, ppErect->bottom);
+ CDrawContext context (frame, NULL, systemWindow);
+ frame->drawRect (&context, r);
+ }
+ else
+ frame->draw ();
+ }
+}
+
+//-----------------------------------------------------------------------------
+bool PluginGUIEditor::open (void *ptr)
+{
+ systemWindow = ptr;
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+void PluginGUIEditor::idle ()
+{
+ if (frame)
+ frame->idle ();
+}
+
+//-----------------------------------------------------------------------------
+long PluginGUIEditor::knobMode = kCircularMode;
+
+//-----------------------------------------------------------------------------
+long PluginGUIEditor::setKnobMode (int val)
+{
+ PluginGUIEditor::knobMode = val;
+ return 1;
+}
+
+//-----------------------------------------------------------------------------
+bool PluginGUIEditor::onWheel (float distance)
+{
+ if (frame)
+ {
+ CDrawContext context (frame, NULL, systemWindow);
+ CPoint where;
+ context.getMouseLocation (where);
+ return frame->onWheel (&context, where, distance);
+ }
+
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+void PluginGUIEditor::wait (unsigned long ms)
+{
+ #if MAC
+ unsigned long ticks;
+ Delay (ms * 60 / 1000, &ticks);
+
+ #elif WINDOWS
+ Sleep (ms);
+
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+unsigned long PluginGUIEditor::getTicks ()
+{
+ #if MAC
+ return (TickCount () * 1000) / 60;
+
+ #elif WINDOWS
+ return (unsigned long)GetTickCount ();
+
+ #endif
+
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+void PluginGUIEditor::doIdleStuff ()
+{
+ // get the current time
+ unsigned long currentTicks = getTicks ();
+
+ // YG TEST idle ();
+ if (currentTicks < lLastTicks)
+ {
+ #if (MAC && TARGET_API_MAC_CARBON)
+ RunCurrentEventLoop (kEventDurationMillisecond * kIdleRateMin);
+ #else
+ wait (kIdleRateMin);
+ #endif
+ currentTicks += kIdleRateMin;
+ if (currentTicks < lLastTicks - kIdleRate2)
+ return;
+ }
+ idle (); // TEST
+
+ #if WINDOWS
+ if (PeekMessage (&windowsMessage, NULL, WM_PAINT, WM_PAINT, PM_REMOVE))
+ DispatchMessage (&windowsMessage);
+
+ #elif MACX
+ EventRef event;
+ EventTypeSpec eventTypes[] = { {kEventClassWindow, kEventWindowUpdate}, {kEventClassWindow, kEventWindowDrawContent} };
+ if (ReceiveNextEvent (GetEventTypeCount (eventTypes), eventTypes, kEventDurationNoWait, true, &event) == noErr)
+ {
+ SendEventToEventTarget (event, GetEventDispatcherTarget ());
+ ReleaseEvent (event);
+ }
+ #endif
+
+ // save the next time
+ lLastTicks = currentTicks + kIdleRate;
+}
+
+//-----------------------------------------------------------------------------
+long PluginGUIEditor::getRect (ERect **ppErect)
+{
+ *ppErect = ▭
+ return true;
+}
+
+#if MACX
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+extern "C" {
+#include
+#include
+}
+#include
+
+BEGIN_NAMESPACE_VSTGUI
+
+void* gBundleRef = 0;
+
+END_NAMESPACE_VSTGUI
+
+#if USE_NAMESPACE
+#define VSTGUI_BUNDLEREF VSTGUI::gBundleRef
+#else
+#define VSTGUI_BUNDLEREF gBundleRef
+#endif
+
+#if PLUGGUI_STANDALONE
+void InitMachOLibrary ()
+{
+ VSTGUI_BUNDLEREF = CFBundleGetMainBundle ();
+}
+
+void ExitMachOLibrary () {}
+#else
+// -----------------------------------------------------------------------------
+static CFBundleRef _CFXBundleCreateFromImageName (CFAllocatorRef allocator, const char* image_name);
+static CFBundleRef _CFXBundleCreateFromImageName (CFAllocatorRef allocator, const char* image_name)
+{
+ CFURLRef myBundleExecutableURL = CFURLCreateFromFileSystemRepresentation (allocator, (const unsigned char*)image_name, strlen (image_name), false);
+ if (myBundleExecutableURL == 0)
+ return 0;
+
+ CFURLRef myBundleContentsMacOSURL = CFURLCreateCopyDeletingLastPathComponent (allocator, myBundleExecutableURL); // Delete Versions/Current/Executable
+ CFRelease (myBundleExecutableURL);
+ if (myBundleContentsMacOSURL == 0)
+ return 0;
+
+ CFURLRef myBundleContentsURL = CFURLCreateCopyDeletingLastPathComponent (allocator, myBundleContentsMacOSURL); // Delete Current
+ CFRelease (myBundleContentsMacOSURL);
+ if (myBundleContentsURL == 0)
+ return 0;
+
+ CFURLRef theBundleURL = CFURLCreateCopyDeletingLastPathComponent (allocator, myBundleContentsURL); // Delete Versions
+ CFRelease (myBundleContentsURL);
+ if (theBundleURL == 0)
+ return 0;
+
+ CFBundleRef result = CFBundleCreate (allocator, theBundleURL);
+ CFRelease (theBundleURL);
+
+ return result;
+}
+
+// -----------------------------------------------------------------------------
+void InitMachOLibrary ();
+void InitMachOLibrary ()
+{
+ const mach_header* header = &_mh_bundle_header;
+ if (header == 0)
+ return;
+
+ const char* imagename = 0;
+ /* determine the image name, TODO: ther have to be a better way */
+ int cnt = _dyld_image_count();
+ for (int idx1 = 1; idx1 < cnt; idx1++)
+ {
+ if (_dyld_get_image_header(idx1) == header)
+ {
+ imagename = _dyld_get_image_name(idx1);
+ break;
+ }
+ }
+ if (imagename == 0)
+ return;
+ /* get the bundle of a header, TODO: ther have to be a better way */
+ VSTGUI_BUNDLEREF = _CFXBundleCreateFromImageName (NULL, imagename);
+}
+
+// -----------------------------------------------------------------------------
+void ExitMachOLibrary ();
+void ExitMachOLibrary ()
+{
+ if (VSTGUI_BUNDLEREF)
+ CFRelease (VSTGUI_BUNDLEREF);
+}
+
+#endif
+#endif
diff --git a/vstgui.sf/vstgui/plugguieditor.h b/vstgui.sf/vstgui/plugguieditor.h
new file mode 100644
index 0000000..11c27ab
--- /dev/null
+++ b/vstgui.sf/vstgui/plugguieditor.h
@@ -0,0 +1,122 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins
+//
+// Version 3.0 Date : 30/06/04
+//
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __plugguieditor__
+#define __plugguieditor__
+
+#ifndef __vstgui__
+#include "vstgui.h"
+#endif
+
+//----------------------------------------------------------------------
+struct ERect
+{
+ short top;
+ short left;
+ short bottom;
+ short right;
+};
+
+//-----------------------------------------------------------------------------
+// AEffGUIEditor Declaration
+//-----------------------------------------------------------------------------
+class PluginGUIEditor
+{
+public :
+
+ PluginGUIEditor (void *pEffect);
+
+ virtual ~PluginGUIEditor ();
+
+ virtual void setParameter (long index, float value) {}
+ virtual long getRect (ERect **ppRect);
+ virtual bool open (void *ptr);
+ virtual void close () { systemWindow = 0; }
+ virtual void idle ();
+ virtual void draw (ERect *pRect);
+
+ // wait (in ms)
+ void wait (unsigned long ms);
+
+ // get the current time (in ms)
+ unsigned long getTicks ();
+
+ // feedback to appli.
+ virtual void doIdleStuff ();
+
+ // get the effect attached to this editor
+ void *getEffect () { return effect; }
+
+ // get version of this VSTGUI
+ long getVstGuiVersion () { return (VSTGUI_VERSION_MAJOR << 16) + VSTGUI_VERSION_MINOR; }
+
+ // set/get the knob mode
+ virtual long setKnobMode (int val);
+ static long getKnobMode () { return knobMode; }
+
+ virtual bool onWheel (float distance);
+
+ // get the CFrame object
+ #if USE_NAMESPACE
+ VSTGUI::CFrame *getFrame () { return frame; }
+ #else
+ CFrame *getFrame () { return frame; }
+ #endif
+
+ virtual void beginEdit (long index) {}
+ virtual void endEdit (long index) {}
+
+//---------------------------------------
+protected:
+ ERect rect;
+
+ #if USE_NAMESPACE
+ VSTGUI::CFrame *frame;
+ #else
+ CFrame *frame;
+ #endif
+
+ void* effect;
+ void* systemWindow;
+
+private:
+ unsigned long lLastTicks;
+ bool inIdleStuff;
+
+ static long knobMode;
+};
+
+#endif
diff --git a/vstgui.sf/vstgui/vstcontrols.cpp b/vstgui.sf/vstgui/vstcontrols.cpp
new file mode 100644
index 0000000..ba164d9
--- /dev/null
+++ b/vstgui.sf/vstgui/vstcontrols.cpp
@@ -0,0 +1,5516 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins :
+// Standard Control Objects
+//
+// Version 3.0 $Date: 2006/02/09 10:18:20 $
+//
+// Added new objects : Michael Schmidt 08.97
+// Added new objects : Yvan Grabit 01.98
+// Added BeOS version : Georges-Edouard Berenger 05.99
+// Added MacOSX version : Arne Scheffler 02.03
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#include
+#include
+#include
+#include
+
+#ifndef __vstcontrols__
+#include "vstcontrols.h"
+#endif
+
+#include "vstkeycode.h"
+
+#if (__MACH__ && __MWERKS__)
+ #ifndef cosf
+ #define cosf (float)cos
+ #endif
+
+ #ifndef sinf
+ #define sinf (float)sin
+ #endif
+#endif
+
+BEGIN_NAMESPACE_VSTGUI
+
+// some external variables (vstgui.cpp)
+extern long gStandardFontSize [];
+extern const char *gStandardFontName [];
+
+//------------------------------------------------------------------------
+// CControl
+//------------------------------------------------------------------------
+/*! @class CControl
+This object manages the tag identification and the value of a control object.
+
+Note:
+Since version 2.1, when an object uses the transparency for its background and draws on it (tranparency area)
+or the transparency area changes during different draws (CMovieBitmap ,...), the background will be false (not updated),
+you have to rewrite the draw function in order to redraw the background and then call the draw of the object.
+*/
+CControl::CControl (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *pBackground)
+: CView (size),
+ listener (listener), tag (tag), oldValue (1), defaultValue (0.5f),
+ value (0), vmin (0), vmax (1.f), wheelInc (0.1f), lastTicks (-1)
+{
+ #if WINDOWS
+ delta = GetDoubleClickTime ();
+ #elif MAC
+ delta = GetDblTime ();
+ #else
+ delta = 500;
+ #endif
+
+ if (delta < 250)
+ delta = 250;
+
+ setTransparency (false);
+ setMouseEnabled (true);
+ backOffset (0 ,0);
+
+ setBackground (pBackground);
+}
+
+//------------------------------------------------------------------------
+CControl::~CControl ()
+{
+}
+
+//------------------------------------------------------------------------
+void CControl::beginEdit ()
+{
+ // begin of edit parameter
+ getFrame ()->setFocusView(this);
+ getFrame ()->beginEdit (tag);
+}
+
+//------------------------------------------------------------------------
+void CControl::endEdit ()
+{
+ // end of edit parameter
+ getFrame ()->endEdit (tag);
+}
+
+//------------------------------------------------------------------------
+bool CControl::isDirty () const
+{
+ if (oldValue != value || CView::isDirty ())
+ return true;
+ return false;
+}
+
+//------------------------------------------------------------------------
+void CControl::setDirty (const bool val)
+{
+ CView::setDirty (val);
+ if (val)
+ {
+ if (value != -1.f)
+ oldValue = -1.f;
+ else
+ oldValue = 0.f;
+ }
+ else
+ oldValue = value;
+}
+
+//------------------------------------------------------------------------
+void CControl::setBackOffset (CPoint &offset)
+{
+ backOffset = offset;
+}
+
+//-----------------------------------------------------------------------------
+void CControl::copyBackOffset ()
+{
+ backOffset (size.left, size.top);
+}
+
+//------------------------------------------------------------------------
+void CControl::bounceValue ()
+{
+ if (value > vmax)
+ value = vmax;
+ else if (value < vmin)
+ value = vmin;
+}
+
+//-----------------------------------------------------------------------------
+bool CControl::checkDefaultValue (CDrawContext *pContext, long button)
+{
+ if (button == (kControl|kLButton))
+ {
+ // begin of edit parameter
+ beginEdit ();
+
+ value = getDefaultValue ();
+ if (isDirty () && listener)
+ listener->valueChanged (pContext, this);
+
+ // end of edit parameter
+ endEdit ();
+ return true;
+ }
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+bool CControl::isDoubleClick ()
+{
+ long ticks = getFrame ()->getTicks ();
+ if (lastTicks <= 0)
+ {
+ lastTicks = ticks;
+ return false;
+ }
+
+ if (lastTicks + delta > ticks)
+ lastTicks = 0;
+ else
+ {
+ lastTicks = ticks;
+ return false;
+ }
+ return true;
+}
+
+//------------------------------------------------------------------------
+// COnOffButton
+//------------------------------------------------------------------------
+/*! @class COnOffButton
+Define a button with 2 positions.
+The pixmap includes the 2 subpixmaps (i.e the rectangle used for the display of this button is half-height of the pixmap).
+When its value changes, the listener is called.
+*/
+COnOffButton::COnOffButton (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, long style)
+: CControl (size, listener, tag, background)
+, style (style)
+{}
+
+//------------------------------------------------------------------------
+COnOffButton::~COnOffButton ()
+{}
+
+//------------------------------------------------------------------------
+void COnOffButton::draw (CDrawContext *pContext)
+{
+ CCoord off;
+
+ if (value && pBackground)
+ off = pBackground->getHeight () / 2;
+ else
+ off = 0;
+
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size, CPoint (0, off));
+ else
+ pBackground->draw (pContext, size, CPoint (0, off));
+ }
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+void COnOffButton::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+ if (!(button & kLButton))
+ return;
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+ value = ((long)value) ? 0.f : 1.f;
+
+ if (listener && style == kPostListenerUpdate)
+ {
+ // begin of edit parameter
+ beginEdit ();
+
+ listener->valueChanged (pContext, this);
+
+ // end of edit parameter
+ endEdit ();
+ }
+
+ doIdleStuff ();
+
+ if (listener && style == kPreListenerUpdate)
+ {
+ // begin of edit parameter
+ beginEdit ();
+
+ listener->valueChanged (pContext, this);
+
+ // end of edit parameter
+ endEdit ();
+ }
+}
+
+
+//------------------------------------------------------------------------
+// CKnob
+//------------------------------------------------------------------------
+/*! @class CKnob
+Define a knob with a given background and foreground handle.
+The handle describes a circle over the background (between -45deg and +225deg).
+By clicking Alt+Left Mouse the default value is used.
+By clicking Alt+Left Mouse the value changes with a vertical move (version 2.1)
+*/
+CKnob::CKnob (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CBitmap *handle, const CPoint &offset)
+: CControl (size, listener, tag, background), offset (offset), pHandle (handle)
+{
+ if (pHandle)
+ {
+ pHandle->remember ();
+ inset = (long)((float)pHandle->getWidth () / 2.f + 2.5f);
+ }
+ else
+ inset = 3;
+
+ colorShadowHandle = kGreyCColor;
+ colorHandle = kWhiteCColor;
+ radius = (float)(size.right - size.left) / 2.f;
+
+ rangeAngle = 1.f;
+ setStartAngle ((float)(5.f * kPI / 4.f));
+ setRangeAngle ((float)(-3.f * kPI / 2.f));
+ zoomFactor = 1.5f;
+
+ setWantsFocus (true);
+}
+
+//------------------------------------------------------------------------
+CKnob::~CKnob ()
+{
+ if (pHandle)
+ pHandle->forget ();
+}
+
+//------------------------------------------------------------------------
+void CKnob::draw (CDrawContext *pContext)
+{
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size, offset);
+ else
+ pBackground->draw (pContext, size, offset);
+ }
+ drawHandle (pContext);
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+void CKnob::drawHandle (CDrawContext *pContext)
+{
+ CPoint where;
+ valueToPoint (where);
+
+ if (pHandle)
+ {
+ long width = (long)pHandle->getWidth ();
+ long height = (long)pHandle->getHeight ();
+ where.offset (size.left - width / 2, size.top - height / 2);
+
+ CRect handleSize (0, 0, width, height);
+ handleSize.offset (where.h, where.v);
+ pHandle->drawTransparent (pContext, handleSize);
+ }
+ else
+ {
+ CPoint origin (size.width () / 2, size.height () / 2);
+
+ where.offset (size.left - 1, size.top);
+ origin.offset (size.left - 1, size.top);
+ pContext->setFrameColor (colorShadowHandle);
+ pContext->moveTo (where);
+ pContext->lineTo (origin);
+
+ where.offset (1, -1);
+ origin.offset (1, -1);
+ pContext->setFrameColor (colorHandle);
+ pContext->moveTo (where);
+ pContext->lineTo (origin);
+ }
+}
+
+//------------------------------------------------------------------------
+void CKnob::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+ if (!(button & kLButton))
+ return;
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+
+ // check if default value wanted
+ if (checkDefaultValue (pContext, button))
+ return;
+
+ float old = oldValue;
+ CPoint firstPoint;
+ bool modeLinear = false;
+ float fEntryState = value;
+ float middle = (vmax - vmin) * 0.5f;
+ float range = 200.f;
+ float coef = (vmax - vmin) / range;
+ long oldButton = button;
+
+ long mode = kCircularMode;
+ long newMode = getFrame ()->getKnobMode ();
+ if (kLinearMode == newMode)
+ {
+ if (!(button & kAlt))
+ mode = newMode;
+ }
+ else if (button & kAlt)
+ mode = kLinearMode;
+
+ if (mode == kLinearMode && (button & kLButton))
+ {
+ if (button & kShift)
+ range *= zoomFactor;
+ firstPoint = where;
+ modeLinear = true;
+ coef = (vmax - vmin) / range;
+ }
+ else
+ {
+ CPoint where2 (where);
+ where2.offset (-size.left, -size.top);
+ old = valueFromPoint (where2);
+ }
+
+ CPoint oldWhere (-1, -1);
+
+ // begin of edit parameter
+ beginEdit ();
+ do
+ {
+ button = pContext->getMouseButtons ();
+ if (where != oldWhere)
+ {
+ oldWhere = where;
+ if (modeLinear)
+ {
+ CCoord diff = (firstPoint.v - where.v) + (where.h - firstPoint.h);
+ if (button != oldButton)
+ {
+ range = 200.f;
+ if (button & kShift)
+ range *= zoomFactor;
+
+ float coef2 = (vmax - vmin) / range;
+ fEntryState += diff * (coef - coef2);
+ coef = coef2;
+ oldButton = button;
+ }
+ value = fEntryState + diff * coef;
+ bounceValue ();
+ }
+ else
+ {
+ where.offset (-size.left, -size.top);
+ value = valueFromPoint (where);
+ if (old - value > middle)
+ value = vmax;
+ else if (value - old > middle)
+ value = vmin;
+ else
+ old = value;
+ }
+ if (isDirty () && listener)
+ listener->valueChanged (pContext, this);
+ }
+ getMouseLocation (pContext, where);
+ doIdleStuff ();
+
+ } while (button & kLButton);
+
+ // end of edit parameter
+ endEdit ();
+}
+
+//------------------------------------------------------------------------
+bool CKnob::onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+{
+ if (!bMouseEnabled)
+ return false;
+
+ long buttons = pContext->getMouseButtons ();
+ if (buttons & kShift)
+ value += 0.1f * distance * wheelInc;
+ else
+ value += distance * wheelInc;
+ bounceValue ();
+
+ if (isDirty () && listener)
+ {
+ // begin of edit parameter
+ beginEdit ();
+
+ listener->valueChanged (pContext, this);
+
+ // end of edit parameter
+ endEdit ();
+ }
+ return true;
+}
+
+//------------------------------------------------------------------------
+long CKnob::onKeyDown (VstKeyCode& keyCode)
+{
+ switch (keyCode.virt)
+ {
+ case VKEY_UP :
+ case VKEY_RIGHT :
+ case VKEY_DOWN :
+ case VKEY_LEFT :
+ {
+ float distance = 1.f;
+ if (keyCode.virt == VKEY_DOWN || keyCode.virt == VKEY_LEFT)
+ distance = -distance;
+
+ if (keyCode.modifier & MODIFIER_SHIFT)
+ value += 0.1f * distance * wheelInc;
+ else
+ value += distance * wheelInc;
+ bounceValue ();
+
+ if (isDirty () && listener)
+ {
+ // begin of edit parameter
+ beginEdit ();
+
+ listener->valueChanged (0, this);
+
+ // end of edit parameter
+ endEdit ();
+ }
+ } return 1;
+ }
+ return -1;
+}
+
+//------------------------------------------------------------------------
+void CKnob::setStartAngle (float val)
+{
+ startAngle = val;
+ compute ();
+}
+
+//------------------------------------------------------------------------
+void CKnob::setRangeAngle (float val)
+{
+ rangeAngle = val;
+ compute ();
+}
+
+//------------------------------------------------------------------------
+void CKnob::compute ()
+{
+ aCoef = (vmax - vmin) / rangeAngle;
+ bCoef = vmin - aCoef * startAngle;
+ halfAngle = ((float)k2PI - fabsf (rangeAngle)) * 0.5f;
+ setDirty ();
+}
+
+//------------------------------------------------------------------------
+void CKnob::valueToPoint (CPoint &point) const
+{
+ float alpha = (value - bCoef) / aCoef;
+ point.h = (long)(radius + cosf (alpha) * (radius - inset) + 0.5f);
+ point.v = (long)(radius - sinf (alpha) * (radius - inset) + 0.5f);
+}
+
+//------------------------------------------------------------------------
+float CKnob::valueFromPoint (CPoint &point) const
+{
+ float v;
+ float alpha = (float)atan2 (radius - point.v, point.h - radius);
+ if (alpha < 0.f)
+ alpha += (float)k2PI;
+
+ float alpha2 = alpha - startAngle;
+ if (rangeAngle < 0)
+ {
+ alpha2 -= rangeAngle;
+ float alpha3 = alpha2;
+ if (alpha3 < 0.f)
+ alpha3 += (float)k2PI;
+ else if (alpha3 > k2PI)
+ alpha3 -= (float)k2PI;
+ if (alpha3 > halfAngle - rangeAngle)
+ v = vmax;
+ else if (alpha3 > -rangeAngle)
+ v = vmin;
+ else
+ {
+ if (alpha2 > halfAngle - rangeAngle)
+ alpha2 -= (float)k2PI;
+ else if (alpha2 < -halfAngle)
+ alpha2 += (float)k2PI;
+ v = aCoef * alpha2 + vmax;
+ }
+ }
+ else
+ {
+ float alpha3 = alpha2;
+ if (alpha3 < 0.f)
+ alpha3 += (float)k2PI;
+ else if (alpha3 > k2PI)
+ alpha3 -= (float)k2PI;
+ if (alpha3 > rangeAngle + halfAngle)
+ v = vmin;
+ else if (alpha3 > rangeAngle)
+ v = vmax;
+ else
+ {
+ if (alpha2 > rangeAngle + halfAngle)
+ alpha2 -= (float)k2PI;
+ else if (alpha2 < -halfAngle)
+ alpha2 += (float)k2PI;
+ v = aCoef * alpha2 + vmin;
+ }
+ }
+
+ return v;
+}
+
+//------------------------------------------------------------------------
+void CKnob::setColorShadowHandle (CColor color)
+{
+ colorShadowHandle = color;
+ setDirty ();
+}
+
+//------------------------------------------------------------------------
+void CKnob::setColorHandle (CColor color)
+{
+ colorHandle = color;
+ setDirty ();
+}
+
+//------------------------------------------------------------------------
+void CKnob::setHandleBitmap (CBitmap *bitmap)
+{
+ if (pHandle)
+ {
+ pHandle->forget ();
+ pHandle = 0;
+ }
+
+ if (bitmap)
+ {
+ pHandle = bitmap;
+ pHandle->remember ();
+ inset = (long)((float)pHandle->getWidth () / 2.f + 2.5f);
+ }
+}
+
+
+//------------------------------------------------------------------------
+// CParamDisplay
+//------------------------------------------------------------------------
+/*! @class CParamDisplay
+Define a rectangle view where a text-value can be displayed with a given font and color.
+The user can specify its convert function (from float to char) by default the string format is "%2.2f".
+The text-value is centered in the given rect.
+*/
+CParamDisplay::CParamDisplay (const CRect &size, CBitmap *background, const long style)
+: CControl (size, 0, 0, background), stringConvert (0), stringConvert2 (0), string2FloatConvert (0),
+ horiTxtAlign (kCenterText), style (style), bTextTransparencyEnabled (true)
+{
+ backOffset (0, 0);
+
+ fontID = kNormalFont;
+ txtFace = kNormalFace;
+ fontColor = kWhiteCColor;
+ backColor = kBlackCColor;
+ frameColor = kBlackCColor;
+ shadowColor = kRedCColor;
+ userData = 0;
+ if (style & kNoDrawStyle)
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+CParamDisplay::~CParamDisplay ()
+{}
+
+//------------------------------------------------------------------------
+void CParamDisplay::setStyle (long val)
+{
+ if (style != val)
+ {
+ style = val;
+ setDirty ();
+ }
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::draw (CDrawContext *pContext)
+{
+ char string[256];
+ string[0] = 0;
+
+ if (stringConvert2)
+ stringConvert2 (value, string, userData);
+ else if (stringConvert)
+ stringConvert (value, string);
+ else
+ sprintf (string, "%2.2f", value);
+
+ drawText (pContext, string);
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::drawText (CDrawContext *pContext, char *string, CBitmap *newBack)
+{
+ setDirty (false);
+
+ if (style & kNoDrawStyle)
+ return;
+
+ // draw the background
+ if (newBack)
+ {
+ if (bTransparencyEnabled)
+ newBack->drawTransparent (pContext, size, backOffset);
+ else
+ newBack->draw (pContext, size, backOffset);
+ }
+ else if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size, backOffset);
+ else
+ pBackground->draw (pContext, size, backOffset);
+ }
+ else
+ {
+ if (!bTransparencyEnabled)
+ {
+ pContext->setFillColor (backColor);
+ pContext->fillRect (size);
+
+ if (!(style & (k3DIn|k3DOut|kNoFrame)))
+ {
+ pContext->setFrameColor (frameColor);
+ pContext->drawRect (size);
+ }
+ }
+ }
+ // draw the frame for the 3D effect
+ if (style & (k3DIn|k3DOut))
+ {
+ CRect r (size);
+ r.right--; r.top++;
+ r.bottom--;
+ pContext->setLineWidth (1);
+ if (style & k3DIn)
+ pContext->setFrameColor (backColor);
+ else
+ pContext->setFrameColor (frameColor);
+ CPoint p;
+ pContext->moveTo (p (r.left, r.bottom));
+ pContext->lineTo (p (r.left, r.top));
+ pContext->lineTo (p (r.right, r.top));
+
+ if (style & k3DIn)
+ pContext->setFrameColor (frameColor);
+ else
+ pContext->setFrameColor (backColor);
+ pContext->moveTo (p (r.right, r.top));
+ pContext->lineTo (p (r.right, r.bottom));
+ pContext->lineTo (p (r.left, r.bottom));
+ }
+
+ if (!(style & kNoTextStyle) && string)
+ {
+ CRect oldClip;
+ pContext->getClipRect (oldClip);
+ CRect newClip (size);
+ newClip.bound (oldClip);
+ pContext->setClipRect (newClip);
+ pContext->setFont (fontID, 0, txtFace);
+
+ // draw darker text (as shadow)
+ if (style & kShadowText)
+ {
+ CRect newSize (size);
+ newSize.offset (1, 1);
+ pContext->setFontColor (shadowColor);
+ pContext->drawString (string, newSize, !bTextTransparencyEnabled, horiTxtAlign);
+ }
+ pContext->setFontColor (fontColor);
+ pContext->drawString (string, size, !bTextTransparencyEnabled, horiTxtAlign);
+ pContext->setClipRect (oldClip);
+ }
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::setFont (CFont fontID)
+{
+ // to force the redraw
+ if (this->fontID != fontID)
+ setDirty ();
+ this->fontID = fontID;
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::setTxtFace (CTxtFace txtFace)
+{
+ // to force the redraw
+ if (this->txtFace != txtFace)
+ setDirty ();
+ this->txtFace = txtFace;
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::setFontColor (CColor color)
+{
+ // to force the redraw
+ if (fontColor != color)
+ setDirty ();
+ fontColor = color;
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::setBackColor (CColor color)
+{
+ // to force the redraw
+ if (backColor != color)
+ setDirty ();
+ backColor = color;
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::setFrameColor (CColor color)
+{
+ // to force the redraw
+ if (frameColor != color)
+ setDirty ();
+ frameColor = color;
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::setShadowColor (CColor color)
+{
+ // to force the redraw
+ if (shadowColor != color)
+ setDirty ();
+ shadowColor = color;
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::setHoriAlign (CHoriTxtAlign hAlign)
+{
+ // to force the redraw
+ if (horiTxtAlign != hAlign)
+ setDirty ();
+ horiTxtAlign = hAlign;
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::setStringConvert (void (*convert) (float value, char *string))
+{
+ stringConvert = convert;
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::setStringConvert (void (*convert) (float value, char *string,
+ void *userDta), void *userData)
+{
+ stringConvert2 = convert;
+ this->userData = userData;
+}
+
+//------------------------------------------------------------------------
+void CParamDisplay::setString2FloatConvert (void (*convert) (char *string, float &output))
+{
+ string2FloatConvert = convert;
+}
+
+//------------------------------------------------------------------------
+// CTextLabel
+//------------------------------------------------------------------------
+/*! @class CTextLabel
+*/
+CTextLabel::CTextLabel (const CRect& size, const char* txt, CBitmap* background, const long style)
+: CParamDisplay (size, background, style)
+, text (0)
+{
+ setText (txt);
+}
+
+//------------------------------------------------------------------------
+CTextLabel::~CTextLabel ()
+{
+ freeText ();
+}
+
+//------------------------------------------------------------------------
+void CTextLabel::freeText ()
+{
+ if (text)
+ free (text);
+ text = 0;
+}
+
+//------------------------------------------------------------------------
+void CTextLabel::setText (const char* txt)
+{
+ freeText ();
+ if (txt)
+ {
+ text = (char*)malloc (strlen (txt)+1);
+ strcpy (text, txt);
+ }
+}
+
+//------------------------------------------------------------------------
+const char* CTextLabel::getText () const
+{
+ return text;
+}
+
+//------------------------------------------------------------------------
+void CTextLabel::draw (CDrawContext *pContext)
+{
+ drawText (pContext, text);
+ setDirty (false);
+}
+
+
+//------------------------------------------------------------------------
+// CTextEdit
+//------------------------------------------------------------------------
+/*! @class CTextEdit
+Define a rectangle view where a text-value can be displayed and edited with a given font and color.
+The user can specify its convert function (from char to char). The text-value is centered in the given rect.
+A pixmap can be used as background.
+*/
+CTextEdit::CTextEdit (const CRect &size, CControlListener *listener, long tag,
+ const char *txt, CBitmap *background, const long style)
+: CParamDisplay (size, background, style), platformFontColor (0), platformControl (0),
+ platformFont (0), editConvert (0), editConvert2 (0)
+{
+#if (MAC && !MACX)
+ text_edit = 0;
+#endif
+ this->listener = listener;
+ this->tag = tag;
+
+ if (txt)
+ strcpy (text, txt);
+ else
+ strcpy (text, "");
+#if MAC
+ // remember our VST plugin's resource map ID (it should be the current one at this moment)
+ pluginResID = CurResFile();
+#endif
+#if QUARTZ
+ textControl = 0;
+#endif
+ setWantsFocus (true);
+}
+
+//------------------------------------------------------------------------
+CTextEdit::~CTextEdit ()
+{}
+
+//------------------------------------------------------------------------
+void CTextEdit::setText (char *txt)
+{
+ if (txt)
+ {
+ if (strcmp (text, txt))
+ {
+ strcpy (text, txt);
+
+ // to force the redraw
+ setDirty ();
+ }
+ }
+ else
+ {
+ if (strcmp (text, ""))
+ {
+ strcpy (text, "");
+
+ // to force the redraw
+ setDirty ();
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+void CTextEdit::getText (char *txt) const
+{
+ if (txt)
+ strcpy (txt, text);
+}
+
+//------------------------------------------------------------------------
+void CTextEdit::draw (CDrawContext *pContext)
+{
+ if (platformControl)
+ {
+ #if MACX
+ #if QUARTZ
+ if (textControl)
+ {
+ HIViewSetNeedsDisplay (textControl, true);
+ }
+ else
+ #endif
+ TXNDraw ((TXNObject)platformControl, NULL);
+ #endif
+ setDirty (false);
+ return;
+ }
+
+ char string[256];
+ string[0] = 0;
+
+ if (editConvert2)
+ editConvert2 (text, string, userData);
+ else if (editConvert)
+ editConvert (text, string);
+ // Allow to display strings through the stringConvert
+ // callbacks inherited from CParamDisplay
+ else if (stringConvert2)
+ {
+ string[0] = 0;
+ stringConvert2 (value, string, userData);
+ strcpy(text, string);
+ }
+ else if (stringConvert)
+ {
+ string[0] = 0;
+ stringConvert (value, string);
+ strcpy(text, string);
+ }
+ else
+ sprintf (string, "%s", text);
+
+ drawText (pContext, string);
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+void CTextEdit::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+
+ if (button & kLButton)
+ {
+ if (getFrame ()->getFocusView () != this)
+ {
+ if (style & kDoubleClickStyle)
+ if (!isDoubleClick ())
+ return;
+
+ beginEdit();
+ takeFocus (pContext);
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+#if WINDOWS
+#define WIN32_LEAN_AND_MEAN 1
+#include
+
+END_NAMESPACE_VSTGUI
+
+#if PLUGGUI
+ extern HINSTANCE ghInst;
+ inline HINSTANCE GetInstance () { return ghInst; }
+#else
+ extern void* hInstance;
+ inline HINSTANCE GetInstance () { return (HINSTANCE)hInstance; }
+#endif
+
+BEGIN_NAMESPACE_VSTGUI
+
+extern long standardFontSize [];
+extern const char *standardFontName [];
+
+#ifdef STRICT
+#define WINDOWSPROC WNDPROC
+#else
+#define WINDOWSPROC FARPROC
+#endif
+
+static WINDOWSPROC oldWndProcEdit;
+LONG_PTR WINAPI WindowProcEdit (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
+LONG_PTR WINAPI WindowProcEdit (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message)
+ {
+ case WM_GETDLGCODE :
+ {
+ long flags = DLGC_WANTALLKEYS;
+ return flags;
+ }
+
+ case WM_KEYDOWN:
+ {
+ if (wParam == VK_RETURN)
+ {
+ CTextEdit *textEdit = (CTextEdit*) GetWindowLongPtr (hwnd, GWLP_USERDATA);
+ if (textEdit)
+ {
+ textEdit->bWasReturnPressed = true;
+ textEdit->looseFocus ();
+ }
+ }
+ } break;
+
+ case WM_KILLFOCUS:
+ {
+ CTextEdit *textEdit = (CTextEdit*) GetWindowLongPtr (hwnd, GWLP_USERDATA);
+ if (textEdit)
+ textEdit->looseFocus ();
+ } break;
+ }
+
+ return CallWindowProc (oldWndProcEdit, hwnd, message, wParam, lParam);
+}
+
+//------------------------------------------------------------------------
+#elif MOTIF
+#include
+extern XFontStruct *gFontStructs[];
+#endif
+
+//------------------------------------------------------------------------
+#if BEOS
+#include
+#include
+
+class BeTextView : public BTextView
+{
+public:
+ BeTextView (CTextEdit* cTextEdit, BRect frame,
+ const char *name, BRect textRect);
+ void MakeFocus (bool focusState = true);
+ void KeyDown (const char *bytes, int32 numBytes);
+private:
+ CTextEdit *cTextEdit;
+};
+
+//------------------------------------------------------------------------
+BeTextView::BeTextView (CTextEdit* cTextEdit, BRect frame, const char *name, BRect textRect)
+: BTextView (frame, name, textRect, B_FOLLOW_NONE), cTextEdit (cTextEdit)
+{}
+
+//------------------------------------------------------------------------
+void BeTextView::MakeFocus (bool focusState)
+{
+ BTextView::MakeFocus (focusState);
+ if (!focusState && cTextEdit)
+ cTextEdit->looseFocus ();
+}
+
+//------------------------------------------------------------------------
+void BeTextView::KeyDown (const char *bytes, int32 numBytes)
+{
+ if (cTextEdit && (bytes[0] == B_RETURN || bytes[0] == B_TAB))
+ cTextEdit->looseFocus ();
+ else
+ BTextView::KeyDown (bytes, numBytes);
+}
+#endif
+
+#if MACX
+static EventHandlerRef gTextEditEventHandler = 0;
+static bool gTextEditCanceled = false;
+pascal OSStatus CarbonEventsTextControlProc (EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void *inUserData);
+pascal OSStatus CarbonEventsTextControlProc (EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void *inUserData)
+{
+ OSStatus result = eventNotHandledErr;
+ UInt32 eventClass = GetEventClass (inEvent);
+ UInt32 eventKind = GetEventKind (inEvent);
+ CTextEdit* textEdit = (CTextEdit*)inUserData;
+
+ switch (eventClass)
+ {
+ case kEventClassKeyboard:
+ {
+ switch (eventKind)
+ {
+ case kEventRawKeyDown:
+ case kEventRawKeyRepeat:
+ {
+ char macCharCode;
+ UInt32 keyCode;
+ UInt32 modifiers;
+ GetEventParameter (inEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof (char), NULL, &macCharCode);
+ GetEventParameter (inEvent, kEventParamKeyCode, typeUInt32, NULL, sizeof (UInt32), NULL, &keyCode);
+ GetEventParameter (inEvent, kEventParamKeyModifiers, typeUInt32, NULL, sizeof (UInt32), NULL, &modifiers);
+ if (macCharCode == 13 || macCharCode == 3 || macCharCode == 27)
+ {
+ if (macCharCode == 27)
+ gTextEditCanceled = true;
+ else
+ textEdit->bWasReturnPressed = true;
+
+ WindowRef window = (WindowRef) (textEdit->getFrame ()->getSystemWindow());
+ GrafPtr savedPort;
+ bool portChanged = window ? QDSwapPort (GetWindowPort (window), &savedPort) : false;
+
+ // remember the current resource map ID
+ short currentResID = CurResFile();
+ short vstResFileID = textEdit->pluginResID;
+ // if it's different (and if it's valid), set the current resource map ID to our plugin's resource map
+ if ( (vstResFileID != currentResID) && (vstResFileID > 0) )
+ UseResFile(vstResFileID);
+
+ textEdit->looseFocus ();
+
+ // revert the window port, if we changed it
+ if (portChanged)
+ QDSwapPort (savedPort, NULL);
+ // revert the current resource map, if we changed it
+ if ( (currentResID > 0) && (vstResFileID != currentResID) && (vstResFileID > 0) )
+ UseResFile(currentResID);
+
+ result = noErr;
+ }
+ #if QUARTZ
+ else if (textEdit->textControl)
+ break;
+ #endif
+ else if (modifiers & cmdKey)
+ {
+ result = noErr;
+ TXNObject text_edit = (TXNObject) (textEdit->platformControl);
+ switch (toupper(macCharCode))
+ {
+ // copy
+ case 'C':
+ if (!TXNIsSelectionEmpty(text_edit))
+ {
+ OSStatus scrapErr = ClearCurrentScrap();
+ scrapErr = TXNCopy(text_edit);
+ result = noErr;
+ }
+ break;
+ // cut
+ case 'X':
+ if (!TXNIsSelectionEmpty(text_edit))
+ {
+ OSStatus scrapErr = ClearCurrentScrap();
+ scrapErr = TXNCut(text_edit);
+ result = noErr;
+ }
+ break;
+ // paste
+ case 'V':
+ TXNPaste(text_edit);
+ result = noErr;
+ break;
+
+ // select all
+ case 'A':
+ TXNSelectAll(text_edit);
+ break;
+
+ default:
+ break;
+ }
+ }
+ else
+ {
+ EventRecord eventRecord;
+ if (ConvertEventRefToEventRecord (inEvent, &eventRecord))
+ TXNKeyDown ((TXNObject)textEdit->platformControl, &eventRecord);
+ result = noErr;
+ }
+ break;
+ }
+ }
+ break;
+ }
+ case kEventClassMouse:
+ {
+ switch (eventKind)
+ {
+ case kEventMouseDown:
+ case kEventMouseUp:
+ {
+ WindowRef window;
+ GetEventParameter (inEvent, kEventParamWindowRef, typeWindowRef, NULL, sizeof (WindowRef), NULL, &window);
+ HIPoint p;
+ GetEventParameter (inEvent, kEventParamMouseLocation, typeHIPoint, NULL, sizeof (HIPoint), NULL, &p);
+ Point point = {(short)p.y, (short)p.x};
+ QDGlobalToLocalPoint (GetWindowPort (window), &point);
+ Rect rect;
+ TXNGetViewRect ((TXNObject)textEdit->platformControl, &rect);
+ if (PtInRect (point, &rect))
+ {
+ EventRecord eventRecord;
+ if (eventKind == kEventMouseDown && ConvertEventRefToEventRecord (inEvent, &eventRecord))
+ TXNClick ((TXNObject)textEdit->platformControl, &eventRecord);
+ result = noErr;
+ }
+ break;
+ }
+ case kEventMouseMoved:
+ {
+ TXNAdjustCursor ((TXNObject)textEdit->platformControl, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ case kEventClassWindow:
+ {
+ WindowRef window;
+ if (GetEventParameter (inEvent, kEventParamDirectObject, typeWindowRef, NULL, sizeof (WindowRef), NULL, &window) != noErr)
+ break;
+ switch (eventKind)
+ {
+ case kEventWindowDeactivated:
+ {
+ result = CallNextEventHandler (inHandlerCallRef, inEvent);
+ ClearKeyboardFocus (window);
+
+ // set up the correct drawing port for the window
+ GrafPtr savedPort;
+ bool portChanged = QDSwapPort (GetWindowPort (window), &savedPort);
+
+ // remember the current resource map ID
+ short currentResID = CurResFile();
+ short vstResFileID = textEdit->pluginResID;
+ // if it's different (and if it's valid), set the current resource map ID to our plugin's resource map
+ if ( (vstResFileID != currentResID) && (vstResFileID > 0) )
+ UseResFile(vstResFileID);
+
+ textEdit->looseFocus ();
+
+ // revert the window port, if we changed it
+ if (portChanged)
+ QDSwapPort (savedPort, NULL);
+ // revert the current resource map, if we changed it
+ if ( (currentResID > 0) && (vstResFileID != currentResID) && (vstResFileID > 0) )
+ UseResFile(currentResID);
+
+ break;
+ }
+ }
+ break;
+ }
+ }
+ return result;
+}
+#endif
+
+#if MAC && CALL_NOT_IN_CARBON
+#include
+#include
+#define ClearCurrentScrap ZeroScrap
+#endif
+
+//------------------------------------------------------------------------
+void CTextEdit::takeFocus (CDrawContext *pContext)
+{
+ bWasReturnPressed = false;
+
+#if WINDOWS || MACX
+ // calculate offset for CViewContainers
+ CRect rect (size);
+ CView* parent = getParentView ();
+ CRect vSize;
+ while (parent)
+ {
+ if (parent->notify (this, kMsgCheckIfViewContainer) == kMessageNotified)
+ {
+ parent->getViewSize (vSize);
+ rect.offset (vSize.left, vSize.top);
+ }
+ parent = parent->getParentView ();
+ }
+ if (pContext)
+ rect.offset (pContext->offset.h, pContext->offset.v);
+#endif
+
+#if WINDOWS
+ int wstyle = 0;
+ if (horiTxtAlign == kLeftText)
+ wstyle |= ES_LEFT;
+ else if (horiTxtAlign == kRightText)
+ wstyle |= ES_RIGHT;
+ else
+ wstyle |= ES_CENTER;
+
+ wstyle |= WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL;
+ platformControl = (void*)CreateWindow (
+ "EDIT", text, wstyle,
+ rect.left, rect.top, rect.width ()/* + 1*/, rect.height ()/* + 1*/,
+ (HWND)getFrame ()->getSystemWindow (), NULL, GetInstance (), 0);
+
+ // get/set the current font
+ LOGFONT logfont = {0};
+
+ long fontH = gStandardFontSize [fontID];
+ if (fontH > rect.height () - 2)
+ fontH = rect.height () - 2;
+
+ logfont.lfWeight = FW_NORMAL;
+ logfont.lfHeight = -fontH;
+ logfont.lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;
+ strcpy (logfont.lfFaceName, gStandardFontName[fontID]);
+
+ logfont.lfClipPrecision = CLIP_STROKE_PRECIS;
+ logfont.lfOutPrecision = OUT_STRING_PRECIS;
+ logfont.lfQuality = DEFAULT_QUALITY;
+ logfont.lfCharSet = ANSI_CHARSET;
+
+ platformFont = (HANDLE)CreateFontIndirect (&logfont);
+ platformFontColor = 0;
+
+ SetWindowLongPtr ((HWND)platformControl, GWLP_USERDATA, (LONG_PTR)this);
+ SendMessage ((HWND)platformControl, WM_SETFONT, (WPARAM)platformFont, true);
+ SendMessage ((HWND)platformControl, EM_SETMARGINS, EC_LEFTMARGIN|EC_RIGHTMARGIN, MAKELONG (0, 0));
+ SendMessage ((HWND)platformControl, EM_SETSEL, 0, -1);
+ SendMessage ((HWND)platformControl, EM_LIMITTEXT, 255, 0);
+ SetFocus ((HWND)platformControl);
+
+ oldWndProcEdit = (WINDOWSPROC)SetWindowLongPtr ((HWND)platformControl, GWLP_WNDPROC, (LONG_PTR)WindowProcEdit);
+
+#elif MAC
+#if MACX
+ WindowRef window = (WindowRef)getFrame ()->getSystemWindow ();
+ #if QUARTZ
+ WindowAttributes winAttributes;
+ GetWindowAttributes (window, &winAttributes);
+ if (winAttributes & kWindowCompositingAttribute)
+ {
+ Rect r;
+ r.left = (short)rect.left;// + 2;
+ r.right = (short)rect.right;// - 4;
+ r.top = (short)rect.top;// + 2;
+ r.bottom = (short)rect.bottom;// - 4;
+ if (rect.getHeight () > gStandardFontSize [fontID])
+ {
+ r.top = (short)(rect.top + rect.getHeight () / 2 - gStandardFontSize [fontID] / 2 + 1);
+ r.bottom = (short)(r.top + gStandardFontSize [fontID]);
+ }
+ if (CreateEditUnicodeTextControl (NULL, &r, NULL, false, NULL, &textControl) == noErr)
+ {
+ HIViewAddSubview ((HIViewRef)getFrame ()->getPlatformControl (), textControl);
+ HIViewSetFirstSubViewFocus ((HIViewRef)getFrame ()->getPlatformControl (), textControl);
+ HIViewAdvanceFocus ((HIViewRef)getFrame ()->getPlatformControl (), 0);
+ EventTypeSpec eventTypes[] = { { kEventClassWindow, kEventWindowDeactivated }, { kEventClassKeyboard, kEventRawKeyDown }, { kEventClassKeyboard, kEventRawKeyRepeat } };
+ InstallControlEventHandler (textControl, CarbonEventsTextControlProc, GetEventTypeCount (eventTypes), eventTypes, this, &gTextEditEventHandler);
+ platformControl = textControl;
+ if (strlen (text) > 0)
+ {
+ CFStringRef textString = CFStringCreateWithCString (NULL, text, kCFStringEncodingUTF8);
+ if (textString)
+ {
+ SetControlData (textControl, kControlEditTextPart, kControlEditTextCFStringTag, sizeof (CFStringRef), &textString);
+ CFRelease (textString);
+ }
+ ControlEditTextSelectionRec selection;
+ selection.selStart = 0;
+ selection.selEnd = strlen (text);
+ SetControlData (textControl, kControlEditTextPart, kControlEditTextSelectionTag, sizeof (ControlEditTextSelectionRec), &selection);
+ }
+ Boolean singleLineStyle = true;
+ SetControlData (textControl, kControlEditTextPart, kControlEditTextSingleLineTag, sizeof (Boolean), &singleLineStyle);
+ ControlFontStyleRec fontStyle;
+ memset (&fontStyle, 0, sizeof (fontStyle));
+ fontStyle.flags = kControlUseJustMask | kControlUseSizeMask | kControlUseFontMask;
+ switch (horiTxtAlign)
+ {
+ case kLeftText: fontStyle.just = teFlushLeft; break;
+ case kRightText: fontStyle.just = teFlushRight; break;
+ default: fontStyle.just = teCenter; break;
+ }
+ fontStyle.size = gStandardFontSize [fontID];
+ extern const char* gMacXfontNames[];
+ Str255 fontName;
+ CopyCStringToPascal ((const char*)gMacXfontNames[fontID], fontName);
+ GetFNum (fontName, &fontStyle.font);
+ SetControlData (textControl, kControlEditTextPart, kControlFontStyleTag, sizeof (fontStyle), &fontStyle);
+ HIViewSetVisible (textControl, true);
+ }
+ return;
+ }
+ if (pContext)
+ rect.offset (pContext->offsetScreen.h, pContext->offsetScreen.v);
+ #endif
+ static bool gTXNInititalized = false;
+ if (!gTXNInititalized)
+ {
+ TXNMacOSPreferredFontDescription defaults; // fontID, pointSize, encoding, and fontStyle
+ defaults.fontID = 0;
+ defaults.pointSize = kTXNDefaultFontSize;
+ defaults.encoding = CreateTextEncoding(kTextEncodingMacRoman, kTextEncodingDefaultVariant, kTextEncodingDefaultFormat);
+ defaults.fontStyle = kTXNDefaultFontStyle;
+ TXNInitOptions options = 0;
+ TXNInitTextension(&defaults, 1, options);
+ gTXNInititalized = true;
+ }
+ gTextEditCanceled = false;
+ TXNFrameOptions iFrameOptions = kTXNMonostyledTextMask | kTXNDisableDragAndDropMask | kTXNSingleLineOnlyMask; //kTXNNoKeyboardSyncMask | kTXNDisableDragAndDropMask | kTXNSingleLineOnlyMask | kTXNMonostyledTextMask;
+ TXNFrameID frameID = 0;
+ TXNObjectRefcon iRefCon = 0;
+ TXNObject object;
+ Rect r;
+ r.left = (short)rect.left;
+ r.right = (short)rect.right;
+ r.top = (short)rect.top;
+ r.bottom = (short)rect.bottom;
+ OSStatus err;
+ err = TXNNewObject (NULL, window, &r, iFrameOptions, kTXNTextEditStyleFrameType, kTXNSingleStylePerTextDocumentResType, kTXNMacOSEncoding, &object, &frameID, iRefCon);
+ if (err == noErr)
+ {
+ platformControl = object;
+ TXNSetFrameBounds ((TXNObject)platformControl, r.top, r.left, r.bottom, r.right, frameID);
+
+ if (strlen (text) > 0)
+ TXNSetData ((TXNObject)platformControl, kTXNTextData, (void*)text, strlen (text), kTXNStartOffset, kTXNEndOffset);
+ // set background
+ extern void CColor2RGBColor (const CColor &cc, RGBColor &rgb);
+ RGBColor rgbBackColor = { 0, 0, 0};
+ CColor2RGBColor (kWhiteCColor /*backColor*/, rgbBackColor);
+ RGBColor rgbTextColor = { 32767, 32767, 32767 };
+ CColor2RGBColor (kBlackCColor /*fontColor*/, rgbTextColor);
+ RGBBackColor (&rgbBackColor);
+ RGBForeColor (&rgbTextColor);
+ TXNBackground txnBackground;
+ txnBackground.bgType = kTXNBackgroundTypeRGB;
+ txnBackground.bg.color = rgbBackColor;
+ TXNSetBackground ((TXNObject)platformControl, &txnBackground);
+ // set justification
+ TXNControlTag controlTag[1];
+ TXNControlData controlData[1];
+ SInt32 just;
+ switch (horiTxtAlign)
+ {
+ case kLeftText : just = kTXNFlushLeft; break;
+ case kRightText : just = kTXNFlushRight; break;
+ default : just = kTXNCenter; break;
+ }
+ controlTag[0] = kTXNJustificationTag;
+ controlData[0].sValue = just;
+ TXNSetTXNObjectControls ((TXNObject)platformControl, false, 1, controlTag, controlData);
+ // set font
+ TXNTypeAttributes attributes[3];
+ // font name
+ extern const unsigned char* gMacXfontNames[];
+
+ short familyID;
+ #if QUARTZ
+ Str255 fontName;
+ CopyCStringToPascal ((const char*)gMacXfontNames[fontID], fontName);
+ GetFNum (fontName, &familyID);
+ #else
+ GetFNum (gMacXfontNames[fontID], &familyID);
+ #endif
+
+ ATSUFontID fontNameID;
+
+ ATSUFONDtoFontID (familyID, 0, &fontNameID);
+
+ attributes[0].tag = kATSUFontTag;
+ attributes[0].size = sizeof(ATSUFontID);
+ attributes[0].data.dataPtr = &fontNameID;
+ // size
+ long fontSize = gStandardFontSize [fontID] << 16; // needs to be in Fixed format
+ attributes[1].tag = kTXNQDFontSizeAttribute;
+ attributes[1].size = kTXNFontSizeAttributeSize;
+ attributes[1].data.dataValue = fontSize;
+ // color
+ attributes[2].tag = kTXNQDFontColorAttribute;
+ attributes[2].size = kTXNQDFontColorAttributeSize;
+ attributes[2].data.dataPtr = &rgbTextColor;
+
+ TXNSetTypeAttributes ((TXNObject)platformControl, 3, attributes, kTXNStartOffset, kTXNEndOffset);
+
+ SetUserFocusWindow (window);
+ AdvanceKeyboardFocus (window);
+ TXNActivate ((TXNObject)platformControl, frameID, false);
+ TXNFocus ((TXNObject)platformControl, true);
+ EventTypeSpec eventTypes[] = { { kEventClassMouse, kEventMouseMoved }, { kEventClassMouse, kEventMouseDown }, { kEventClassMouse, kEventMouseUp }, { kEventClassWindow, kEventWindowDeactivated }, { kEventClassKeyboard, kEventRawKeyDown }, { kEventClassKeyboard, kEventRawKeyRepeat } };
+ InstallWindowEventHandler (window, CarbonEventsTextControlProc, GetEventTypeCount (eventTypes), eventTypes, this, &gTextEditEventHandler);
+ TXNSelectAll ((TXNObject)platformControl);
+
+ }
+
+#else
+ bool ende = false;
+ char c;
+ EventRecord theEvent;
+ Rect rect, vrect;
+
+ platformControl = new char[256];
+
+ rect.left = size.left;
+ rect.right = size.right;
+ rect.top = size.top;
+ rect.bottom = size.bottom;
+ #if !TARGET_API_MAC_CARBON
+ rect.bottom++;
+ rect.right++;
+ #endif
+
+ if (pContext)
+ {
+ rect.left += pContext->offset.h;
+ rect.right += pContext->offset.h;
+ rect.top += pContext->offset.v;
+ rect.bottom += pContext->offset.v;
+ }
+ vrect = rect;
+
+ vrect.top++;
+ vrect.left++;
+ vrect.right--;
+ #if TARGET_API_MAC_CARBON
+ vrect.bottom--;
+ #endif
+
+ RGBColor blackrgb = {0, 0, 0};
+ RGBColor whitergb = {0xffff, 0xffff, 0xffff};
+ RGBForeColor (&blackrgb);
+ RGBBackColor (&whitergb);
+
+ EraseRect (&rect);
+ //FrameRect (&rect); // Dave
+ #if !TARGET_API_MAC_CARBON
+ InsetRect (&vrect, 0, -2);
+ #endif
+
+ TextFont (kFontIDHelvetica);
+ TextSize (gStandardFontSize [fontID]);
+
+ text_edit = TENew (&rect, &vrect);
+
+ if (horiTxtAlign == kLeftText)
+ TESetAlignment (teJustLeft, (TEHandle)text_edit);
+ else if (horiTxtAlign == kRightText)
+ TESetAlignment (teJustRight, (TEHandle)text_edit);
+ else
+ TESetAlignment (teJustCenter, (TEHandle)text_edit);
+
+ char string[256];
+ strcpy (string, text);
+ TESetText (string, strlen (string), (TEHandle)text_edit);
+ TESetSelect (0, strlen (string), (TEHandle)text_edit);
+ TEUpdate (&(**(TEHandle)text_edit).viewRect, (TEHandle)text_edit);
+ TEActivate ((TEHandle)text_edit);
+ HLock ((Handle)text_edit);
+
+ (**(TEHandle)text_edit).crOnly = -1;
+
+ bLoosefocusWanted = false;
+
+ while (!ende && !bLoosefocusWanted)
+ {
+ GetNextEvent (everyEvent, &theEvent);
+ switch (theEvent.what)
+ {
+ case nullEvent:
+ doIdleStuff ();
+ break;
+ case autoKey :
+ case keyDown :
+ RGBForeColor (&blackrgb);
+ RGBBackColor (&whitergb);
+
+ c = theEvent.message & charCodeMask;
+ if (c == 13 || c == 3 || c == 27)
+ {
+ if (c == 13)
+ bWasReturnPressed = true;
+ ende = true;
+ }
+ else if (((theEvent.message >> 8) & 0xFF) == 0x75)
+ {
+ if ((**(TEHandle)text_edit).selEnd < (**(TEHandle)text_edit).teLength)
+ {
+ if (((**(TEHandle)text_edit).selEnd - (**(TEHandle)text_edit).selStart) > 1)
+ TEDelete ((TEHandle)text_edit);
+ else
+ TEKey (0x1D, (TEHandle)text_edit);
+ c = 8;
+ }
+ else
+ c = -1;
+ }
+ if (theEvent.modifiers & cmdKey)
+ {
+ switch (toupper(c))
+ {
+ // copy
+ case 'C':
+ if ((**(TEHandle)text_edit).selEnd > (**(TEHandle)text_edit).selStart)
+ {
+ OSStatus scrapErr = ClearCurrentScrap();
+ TECopy((TEHandle)text_edit);
+ if (scrapErr == noErr)
+ scrapErr = TEToScrap();
+ }
+ break;
+ // cut
+ case 'X':
+ if ((**(TEHandle)text_edit).selEnd > (**(TEHandle)text_edit).selStart)
+ {
+ OSStatus scrapErr = ClearCurrentScrap();
+ TECut((TEHandle)text_edit);
+ if (scrapErr == noErr)
+ scrapErr = TEToScrap();
+ }
+ break;
+ // paste
+ case 'V':
+ {
+ OSErr scrapErr = TEFromScrap();
+ TEPaste((TEHandle)text_edit);
+ }
+ break;
+ // select all
+ case 'A':
+ TESetSelect(0, (**(TEHandle)text_edit).teLength, (TEHandle)text_edit);
+ break;
+ default:
+ break;
+ }
+ }
+ else if (!ende)
+ TEKey (c, (TEHandle)text_edit);
+ break;
+ case mouseDown :
+ GlobalToLocal (&theEvent.where);
+ if (PtInRect (theEvent.where, &rect))
+ {
+ bool shiftdown = (theEvent.modifiers & shiftKey) != 0;
+ TEClick (theEvent.where, shiftdown, (TEHandle)text_edit);
+ }
+ else
+ ende = true;
+ break;
+ }
+ }
+ CharsHandle h = TEGetText ((TEHandle)text_edit);
+ short length = (**(TEHandle)text_edit).teLength;
+ if (length > 255)
+ length = 255;
+ strncpy ((char*)platformControl, (char*)*h, length);
+ ((char*)platformControl)[length] = 0;
+
+ HUnlock ((Handle)text_edit);
+ TEDeactivate ((TEHandle)text_edit);
+ TEDispose ((TEHandle)text_edit);
+ text_edit = 0;
+ looseFocus ();
+
+#endif
+#elif MOTIF
+ // we have to add the Text to the parent !!
+ Dimension posX, posY;
+ Widget widget = (Widget)(getFrame ()->getSystemWindow ());
+ XtVaGetValues (widget, XmNx, &posX, XmNy, &posY, 0);
+
+ Arg args[20];
+ int n = 0;
+ XtSetArg (args[n], XmNx, size.left + posX); n++;
+ XtSetArg (args[n], XmNy, size.top + posY); n++;
+ XtSetArg (args[n], XmNwidth, size.width () + 1); n++;
+ XtSetArg (args[n], XmNheight, size.height () + 2); n++;
+
+ XtSetArg (args[n], XmNvalue, text); n++;
+
+ XtSetArg (args[n], XmNshadowType, XmSHADOW_IN); n++;
+ XtSetArg (args[n], XmNshadowThickness, 0); n++;
+ XtSetArg (args[n], XmNcursorPositionVisible, true); n++;
+
+ XtSetArg (args[n], XmNmarginWidth, 0); n++;
+ XtSetArg (args[n], XmNmarginHeight, 0); n++;
+ XtSetArg (args[n], XmNresizeHeight, True); n++;
+ XtSetArg (args[n], XmNborderWidth, 0); n++;
+ XtSetArg (args[n], XmNeditMode, XmSINGLE_LINE_EDIT); n++;
+
+ // get/set the current font
+ XmFontList fl = 0;
+ XFontStruct* fs = fontStructs[fontID];
+ if (fs)
+ {
+ XmFontListEntry entry = XmFontListEntryCreate (XmFONTLIST_DEFAULT_TAG, XmFONT_IS_FONT, fs);
+ XmFontList fl = XmFontListAppendEntry (0, entry);
+ XtSetArg (args[n], XmNfontList, fl); n++;
+ }
+
+ platformControl = XmCreateText (XtParent (widget), "Text", args, n);
+ XtManageChild ((Widget)platformControl);
+ if (fl)
+ XmFontListFree (fl);
+ XmTextSetSelection ((Widget)platformControl, 0, strlen (text), 0);
+ XmTextSetHighlight ((Widget)platformControl, 0, strlen (text), XmHIGHLIGHT_SELECTED);
+
+#elif BEOS
+ BView* plugView = (BView*) getFrame ()->getSystemWindow ();
+ CRect rect;
+ getFrame ()->getSize (&rect);
+ BRect r (rect.left + size.left, rect.top + size.top, rect.left + size.right, rect.top + size.bottom);
+ BRect tr = r;
+ tr.OffsetTo (B_ORIGIN);
+ tr.InsetBy (1, 1);
+ BeTextView* textView = new BeTextView (this, r, NULL, tr);
+ plugView->Window ()->Activate (true);
+ plugView->AddChild (textView);
+ BFont font;
+ if (fontID < 0 || fontID >= kNumStandardFonts)
+ fontID = kSystemFont;
+ extern const char* gStandardFontStyle[];
+ font.SetFamilyAndStyle (gStandardFontName[fontID], gStandardFontStyle[fontID]);
+ font.SetSize (gStandardFontSize[fontID]);
+ rgb_color c = { fontColor.red, fontColor.green, fontColor.blue, 255 };
+ textView->SetFontAndColor (&font, B_FONT_FAMILY_AND_STYLE | B_FONT_SIZE, &c);
+ rgb_color cv = { backColor.red, backColor.green, backColor.blue, 255 };
+ textView->SetMaxBytes (255);
+ textView->SetViewColor (cv);
+ alignment a;
+ if (horiTxtAlign == kRightText)
+ a = B_ALIGN_RIGHT;
+ else if (horiTxtAlign == kLeftText)
+ a = B_ALIGN_LEFT;
+ else
+ a = B_ALIGN_CENTER;
+ textView->SetAlignment (a);
+ textView->SetText (text);
+ textView->DisallowChar ('\n');
+ textView->DisallowChar ('\t');
+ textView->MakeResizable (true);
+ textView->MakeFocus (true);
+ textView->SelectAll ();
+ platformControl = textView;
+#endif
+}
+
+//------------------------------------------------------------------------
+void CTextEdit::looseFocus (CDrawContext *pContext)
+{
+ // Call this yet to avoid recursive call
+ endEdit();
+ if (getFrame ()->getFocusView () == this)
+ getFrame ()->setFocusView (0);
+
+ if (platformControl == 0)
+ return;
+
+ char oldText[256];
+ strcpy (oldText, text);
+
+#if WINDOWS
+ char newText[255];
+ GetWindowText ((HWND)platformControl, newText, 255);
+ strcpy (text, newText);
+
+ DestroyWindow ((HWND)platformControl);
+ if (platformFont)
+ {
+ DeleteObject ((HGDIOBJ)platformFont);
+ platformFont = 0;
+ }
+ if (platformFontColor)
+ {
+ DeleteObject (platformFontColor);
+ platformFontColor = 0;
+ }
+
+#elif MAC
+
+ #if MACX
+ if (platformControl == 0)
+ return;
+
+ if (gTextEditEventHandler)
+ RemoveEventHandler (gTextEditEventHandler);
+ gTextEditEventHandler = 0;
+ #if QUARTZ
+ if (textControl)
+ {
+ CFStringRef cfstr;
+ if (!gTextEditCanceled && GetControlData (textControl, kControlEditTextPart, kControlEditTextCFStringTag, sizeof cfstr, (void*)&cfstr, NULL) == noErr)
+ {
+ CFStringGetCString (cfstr, text, 255, kCFStringEncodingUTF8);
+ CFRelease (cfstr);
+ }
+ HIViewSetVisible (textControl, false);
+ HIViewRemoveFromSuperview (textControl);
+ textControl = 0;
+ pParentFrame->setCursor (kCursorDefault);
+ }
+ else
+ #endif
+ {
+ if (!gTextEditCanceled)
+ {
+ CharsHandle dataHandle;
+ TXNGetDataEncoded ((TXNObject)platformControl, kTXNStartOffset, kTXNEndOffset, &dataHandle, kTXNTextData);
+ if (dataHandle != NULL && GetHandleSize (dataHandle) > 0)
+ {
+ long s = GetHandleSize (dataHandle);
+ strncpy (text, *dataHandle, (s > 255) ? 255 : s);
+ text [(s > 255) ? 255 : s] = 0;
+ DisposeHandle (dataHandle);
+ }
+ else
+ text[0] = 0;
+ }
+ TXNFocus ((TXNObject)platformControl, false);
+ TXNDeleteObject ((TXNObject)platformControl);
+ }
+
+ platformControl = 0;
+
+ setDirty (true);
+
+ #if 0//QUARTZ
+ CRect fr (size);
+ CPoint offset;
+ localToFrame (offset);
+ fr.offset (offset.x, offset.y);
+
+ RgnHandle rgn = NewRgn ();
+ MacSetRectRgn (rgn, fr.left, fr.top, fr.right, fr.bottom);
+ HIViewSetNeedsDisplayInRegion ((HIViewRef)getFrame ()->getPlatformControl () , rgn, true);
+ DisposeRgn (rgn);
+ #endif
+// doIdleStuff ();
+
+ #else
+
+ strcpy (text, (char*)platformControl);
+ delete[] platformControl;
+ #endif
+#elif MOTIF
+ char *pNewText = XmTextGetString ((Widget)platformControl);
+ strcpy (text, pNewText);
+ XtFree (pNewText);
+
+ XtUnmanageChild ((Widget)platformControl);
+ XtDestroyWidget ((Widget)platformControl);
+
+#elif BEOS
+ BTextView* textView = (BTextView*) platformControl;
+ strncpy (text, textView->Text (), 255);
+ if (textView->LockLooper ())
+ {
+ BWindow* w = textView->Window ();
+ textView->RemoveSelf ();
+ w->Unlock ();
+ }
+ delete textView;
+
+#endif
+ CPoint origOffset;
+ bool resetContextOffset = false;
+ if (!pContext)
+ {
+ // create a local context
+ pContext = getFrame ()->createDrawContext ();
+ if (getParentView ())
+ {
+ resetContextOffset = true;
+ origOffset.x = pContext->offset.x;
+ origOffset.y = pContext->offset.y;
+ CView *view= getParentView ();
+ CRect rect2;
+ view->getViewSize (rect2);
+ CPoint offset;
+ view->localToFrame (offset);
+ rect2.offset (offset.x, offset.y);
+ pContext->offset.h = rect2.left;
+ pContext->offset.v = rect2.top;
+ }
+ }
+ else
+ pContext->remember ();
+
+ // update dependency
+ bool change = false;
+ if (strcmp (oldText, text))
+ {
+ change = true;
+ if (listener)
+ listener->valueChanged (pContext, this);
+ }
+
+ platformControl = 0;
+ if (resetContextOffset)
+ {
+ pContext->offset.x = origOffset.x;
+ pContext->offset.y = origOffset.y;
+ }
+ pContext->forget ();
+
+ if (change)
+ doIdleStuff ();
+
+ CView* receiver = pParentView ? pParentView : pParentFrame;
+ if (receiver)
+ receiver->notify (this, "LooseFocus");
+}
+
+//------------------------------------------------------------------------
+void CTextEdit::setTextEditConvert (void (*convert) (char *input, char *string))
+{
+ editConvert = convert;
+}
+
+//------------------------------------------------------------------------
+void CTextEdit::setTextEditConvert (void (*convert) (char *input, char *string,
+ void *userDta), void *userData)
+{
+ editConvert2 = convert;
+ this->userData = userData;
+}
+
+//------------------------------------------------------------------------
+// COptionMenuScheme
+//------------------------------------------------------------------------
+/*! @class COptionMenuScheme
+Used to define the appearance (font color, background color...) of a popup-menu.
+To define the scheme of a menu, use the appropriate setScheme method (see COptionMenu).
+@section coptionmenuscheme_new_in_3_0 New since 3.0
+You can also use the global variable gOptionMenuScheme to use one scheme on all menus.
+@section coptionmenuscheme_note Note
+If you want to use it on Mac OS X, you must set the macro MAC_ENABLE_MENU_SCHEME (needs Mac OS X 10.3 or higher)
+*/
+COptionMenuScheme* gOptionMenuScheme = 0;
+
+//------------------------------------------------------------------------
+COptionMenuScheme::COptionMenuScheme ()
+{
+#if WINDOWS
+ COLORREF c = GetSysColor (COLOR_MENU);
+ backgroundColor (GetRValue (c), GetGValue (c), GetBValue (c), 0);
+ c = GetSysColor (COLOR_HIGHLIGHT);
+ selectionColor (GetRValue (c), GetGValue (c), GetBValue (c), 0);
+ c = GetSysColor (COLOR_MENUTEXT);
+ textColor (GetRValue (c), GetGValue (c), GetBValue (c), 0);
+ c = GetSysColor (COLOR_HIGHLIGHTTEXT);
+ hiliteTextColor (GetRValue (c), GetGValue (c), GetBValue (c), 0);
+ c = GetSysColor (COLOR_GRAYTEXT);
+ disableTextColor (GetRValue (c), GetGValue (c), GetBValue (c), 0);
+#else
+ backgroundColor = kGreyCColor;
+ selectionColor = kBlueCColor;
+ textColor = kBlackCColor;
+ hiliteTextColor = kWhiteCColor;
+ disableTextColor = kWhiteCColor;
+#endif
+ font = kNormalFontSmall;
+ #if MAC_ENABLE_MENU_SCHEME
+ registerWithToolbox ();
+ #endif
+}
+
+//------------------------------------------------------------------------
+COptionMenuScheme::~COptionMenuScheme ()
+{
+ #if MAC_ENABLE_MENU_SCHEME
+ unregisterWithToolbox ();
+ #endif
+}
+
+//------------------------------------------------------------------------
+void COptionMenuScheme::getItemSize (const char* text, CDrawContext* pContext, CPoint& size)
+{
+ if (!strcmp (text, kMenuSeparator)) // separator
+ {
+ #if MAC
+ size.h = 6;
+ size.v = 9;
+ #else
+ // was: size.h = size.v = 6;
+ size.h = 6;
+ size.v = 18;
+ // separators must have same height, otherwise we have problems
+ // in multi-column menus :(
+ #endif
+ }
+ else
+ {
+ pContext->setFont (font);
+ size.h = pContext->getStringWidth (text) + 18;
+ size.v = 18;
+ #if MAC
+ size.h += 18;
+ #endif
+ }
+}
+
+//------------------------------------------------------------------------
+void COptionMenuScheme::drawItemBack (CDrawContext* pContext, const CRect& rect, bool hilite)
+{
+ if (hilite)
+ pContext->setFillColor (selectionColor);
+ else
+ pContext->setFillColor (backgroundColor);
+ pContext->fillRect (rect);
+}
+
+//------------------------------------------------------------------------
+void COptionMenuScheme::drawItem (const char* text, long itemId, long state, CDrawContext* pContext, const CRect& rect)
+{
+ bool hilite = (state & kSelected) != 0;
+
+ drawItemBack (pContext, rect, hilite);
+
+ if (!strcmp (text, kMenuSeparator))
+ {
+ CCoord y = rect.top + rect.height () / 2;
+
+ const CColor bc = { 0, 0, 0, 150};
+ const CColor wc = { 255, 255, 255, 150};
+
+ pContext->setFrameColor (bc);
+ pContext->moveTo (CPoint (rect.left + 2, y - 1));
+ pContext->lineTo (CPoint (rect.right - 2, y - 1));
+ pContext->setFrameColor (wc);
+ pContext->moveTo (CPoint (rect.left + 2, y));
+ pContext->lineTo (CPoint (rect.right - 2, y));
+ return;
+ }
+
+ CRect r;
+ if (state & kChecked)
+ {
+ r (6, 4, 14, 12);
+ r.offset (rect.left, rect.top);
+ if (hilite)
+ pContext->setFillColor (hiliteTextColor);
+ else
+ pContext->setFillColor (textColor);
+ pContext->fillEllipse (r);
+ }
+
+ r = rect;
+ r.left += 18;
+ pContext->setFont (font);
+ if (state & kDisabled)
+ pContext->setFontColor (disableTextColor);
+ else
+ {
+ if (hilite)
+ pContext->setFontColor (hiliteTextColor);
+ else
+ pContext->setFontColor (textColor);
+ }
+
+ // this needs to be done right, without changing the text pointer in anyway ;-)
+ char *ptr = (char*)strstr (text, "\t");
+ if (ptr)
+ {
+ char modifier[32];
+ strcpy (modifier, ptr + 1);
+ *ptr = 0;
+ pContext->drawString (text, r, false, kLeftText);
+
+ *ptr = '\t';
+ r.left = r.right - 50;
+ pContext->drawString (modifier, r, false, kLeftText);
+ }
+ else
+ pContext->drawString (text, r, false, kLeftText);
+}
+
+#if MAC_ENABLE_MENU_SCHEME
+#define kHIMenuViewClassID CFSTR("com.apple.HIMenuView")
+
+struct HIMenuScheme
+{
+ HIViewRef hiView;
+ COptionMenuScheme* scheme;
+ COptionMenu* menu;
+ COffscreenContext* offscreenContext;
+ float maxWidth;
+};
+
+const EventParamName kEventParamCOptionMenuScheme = 'COMS';
+const EventParamName kEventParamCOptionMenu = 'COM ';
+
+#define kItemHeight 18
+
+static CFStringRef gOptionMenuSchemeClassID = 0;
+static HIObjectClassRef gMenuClassRef = 0;
+static CFIndex gOptionMenuSchemeClassIDRefCount = 0;
+
+//------------------------------------------------------------------------
+void COptionMenuScheme::registerWithToolbox ()
+{
+ if (gOptionMenuSchemeClassID == 0)
+ {
+ gOptionMenuSchemeClassID = CFStringCreateWithFormat (NULL, NULL, CFSTR("net.sourceforge.vstgui.COptionMenuSchemeClassID.%d"), this);
+
+ static const EventTypeSpec events[] =
+ {
+ { kEventClassHIObject, kEventHIObjectConstruct } ,
+ { kEventClassHIObject, kEventHIObjectInitialize },
+ { kEventClassHIObject, kEventHIObjectDestruct },
+
+ { kEventClassControl, kEventControlHitTest },
+ { kEventClassControl, kEventControlGetPartRegion },
+ { kEventClassControl, kEventControlDraw },
+ { kEventClassControl, kEventControlGetOptimalBounds },
+
+ { kEventClassMenu, kEventMenuCreateFrameView },
+
+ { kEventClassScrollable, kEventScrollableGetInfo },
+ };
+
+ HIObjectRegisterSubclass ( gOptionMenuSchemeClassID,
+ kHIMenuViewClassID,
+ kNilOptions,
+ COptionMenuScheme::eventHandler,
+ GetEventTypeCount (events),
+ events,
+ NULL,
+ &gMenuClassRef);
+ gOptionMenuSchemeClassIDRefCount = CFGetRetainCount (gOptionMenuSchemeClassID);
+ }
+ else
+ CFRetain (gOptionMenuSchemeClassID);
+}
+
+//------------------------------------------------------------------------
+void COptionMenuScheme::unregisterWithToolbox ()
+{
+ if (gOptionMenuSchemeClassID)
+ {
+ if (CFGetRetainCount (gOptionMenuSchemeClassID) == gOptionMenuSchemeClassIDRefCount)
+ {
+ HIObjectUnregisterClass (gMenuClassRef);
+ gMenuClassRef = 0;
+ }
+ CFRelease (gOptionMenuSchemeClassID);
+ }
+}
+
+//------------------------------------------------------------------------
+pascal OSStatus COptionMenuScheme::eventHandler (EventHandlerCallRef inCallRef, EventRef inEvent, void *inUserData)
+{
+ OSStatus err = eventNotHandledErr;
+ UInt32 eventClass = GetEventClass (inEvent);
+ UInt32 eventKind = GetEventKind (inEvent);
+ HIMenuScheme* scheme = (HIMenuScheme*)inUserData;
+
+ switch (eventClass)
+ {
+ case kEventClassHIObject:
+ {
+ switch (eventKind)
+ {
+ case kEventHIObjectConstruct:
+ {
+ scheme = (HIMenuScheme*)calloc (1, sizeof (HIMenuScheme));
+ GetEventParameter (inEvent, kEventParamHIObjectInstance, typeHIObjectRef, NULL, sizeof (HIObjectRef), NULL, &scheme->hiView);
+ SetEventParameter (inEvent, kEventParamHIObjectInstance, typeVoidPtr, sizeof (HIMenuScheme*), &scheme);
+ scheme->maxWidth = 100;
+ err = noErr;
+ break;
+ }
+ case kEventHIObjectInitialize:
+ {
+ err = CallNextEventHandler (inCallRef, inEvent);
+ if (err == noErr)
+ {
+ GetEventParameter (inEvent, kEventParamCOptionMenuScheme, typeVoidPtr, NULL, sizeof (COptionMenuScheme*), NULL, &scheme->scheme);
+ GetEventParameter (inEvent, kEventParamCOptionMenu, typeVoidPtr, NULL, sizeof (COptionMenu*), NULL, &scheme->menu);
+ scheme->scheme->remember ();
+ scheme->menu->remember ();
+ scheme->offscreenContext = new COffscreenContext (scheme->menu->getFrame (), 600, 100);
+ }
+ break;
+ }
+ case kEventHIObjectDestruct:
+ {
+ delete scheme->offscreenContext;
+ scheme->scheme->forget ();
+ scheme->menu->forget ();
+ free (scheme);
+ err = noErr;
+ break;
+ }
+ }
+ break;
+ }
+ case kEventClassControl:
+ {
+ HIViewRef control;
+ GetEventParameter (inEvent, kEventParamDirectObject, typeControlRef, NULL, sizeof (HIViewRef), NULL, &control);
+ switch (eventKind)
+ {
+ case kEventControlInitialize:
+ {
+ err = CallNextEventHandler (inCallRef, inEvent);
+ break;
+ }
+ case kEventControlHitTest:
+ {
+ HIPoint mouseLoc;
+ GetEventParameter (inEvent, kEventParamMouseLocation, typeHIPoint, NULL, sizeof (mouseLoc), NULL, &mouseLoc);
+ ControlPartCode partHit = mouseLoc.y / kItemHeight + 1;
+ char temp[1024];
+ CPoint size;
+ long yPos = 0;
+ for (long i = 0; i < scheme->menu->getNbEntries (); i++)
+ {
+ scheme->menu->getEntry (i, temp);
+ scheme->scheme->getItemSize (temp, scheme->offscreenContext, size);
+ yPos += size.y;
+ if (yPos >= mouseLoc.y)
+ {
+ partHit = i + 1;
+ break;
+ }
+ }
+ SetEventParameter (inEvent, kEventParamControlPart, typeControlPartCode, sizeof (partHit), &partHit);
+ err = noErr;
+ break;
+ }
+ case kEventControlGetOptimalBounds:
+ {
+ HIRect r = { {0, 0}, { 0, 0 }};
+ r.size.width = scheme->maxWidth;
+ char temp[1024];
+ CPoint size;
+ for (long i = 0; i < scheme->menu->getNbEntries (); i++)
+ {
+ scheme->menu->getEntry (i, temp);
+ scheme->scheme->getItemSize (temp, scheme->offscreenContext, size);
+ if (!strncmp (temp, kMenuSubMenu, 2))
+ size.x += 16;
+ r.size.height += size.y;
+ if (r.size.width < size.x)
+ r.size.width = size.x;
+ }
+ //r.size.height += scheme->menu->getNbEntries ();
+ scheme->maxWidth = r.size.width;
+ SetEventParameter (inEvent, kEventParamControlOptimalBounds, typeHIRect, sizeof (HIRect), &r);
+ err = noErr;
+ break;
+ }
+ case kEventControlGetPartRegion:
+ {
+ HIRect r = { {0, 0}, { 0, 0 }};
+ ControlPartCode whichItem;
+ RgnHandle outRegion = NULL;
+ GetEventParameter (inEvent, kEventParamControlPart, typeControlPartCode, NULL, sizeof (whichItem), NULL, &whichItem);
+ GetEventParameter (inEvent, kEventParamControlRegion, typeQDRgnHandle, NULL, sizeof(outRegion), NULL, &outRegion);
+ if (whichItem <= 0)
+ {
+ r.size.width = scheme->maxWidth;
+ char temp[1024];
+ CPoint size;
+ for (long i = 0; i < scheme->menu->getNbEntries (); i++)
+ {
+ scheme->menu->getEntry (i, temp);
+ scheme->scheme->getItemSize (temp, scheme->offscreenContext, size);
+ if (!strncmp (temp, kMenuSubMenu, 2))
+ size.x += 16;
+ r.size.height += size.y;
+ if (r.size.width < size.x)
+ r.size.width = size.x;
+ }
+ scheme->maxWidth = r.size.width;
+ r.size.height += scheme->menu->getNbEntries ();
+ }
+ else
+ {
+ char temp[1024];
+ CPoint size;
+ for (long i = 0; i < whichItem; i++)
+ {
+ r.origin.y += size.y;
+ scheme->menu->getEntry (i, temp);
+ scheme->scheme->getItemSize (temp, scheme->offscreenContext, size);
+ r.size.height += size.y;
+ }
+ r.size.width = scheme->maxWidth;
+ }
+ SetRectRgn (outRegion, (short) r.origin.x, (short) r.origin.y,(short) r.origin.x + r.size.width, (short) r.origin.y+ r.size.height + 1);
+ err = noErr;
+ break;
+ }
+ case kEventControlDraw:
+ {
+ CGContextRef cgContext;
+ GetEventParameter (inEvent, kEventParamCGContextRef, typeCGContextRef, NULL, sizeof (cgContext), NULL, &cgContext);
+ HIRect r;
+ HIViewGetBounds (control, &r);
+ CGContextClearRect (cgContext, r);
+ if (control != scheme->hiView)
+ {
+ err = noErr;
+ break;
+ }
+ ControlPartCode focusPart;
+ HIViewGetFocusPart (scheme->hiView, &focusPart);
+ focusPart--;
+ WindowRef window = HIViewGetWindow (scheme->hiView);
+ CDrawContext context (NULL, cgContext, window);
+ char entryText[1024];
+ CPoint size;
+ CRect rect (0, 0);
+ rect.setHeight (kItemHeight);
+ rect.setWidth (scheme->maxWidth);
+ for (int i = 0; i < scheme->menu->getNbEntries (); i++)
+ {
+ if (scheme->menu->getEntry (i, entryText))
+ {
+ scheme->scheme->getItemSize (entryText, &context, size);
+ long state = scheme->menu->isCheckEntry (i) ? kChecked : 0;
+ if (focusPart >= 0 && focusPart == i)
+ state |= kSelected;
+ long offset = 0;
+ if (!strncmp (entryText, kMenuSubMenu, 2))
+ {
+ state |= kSubMenu;
+ offset = 2;
+ }
+ else if (!strncmp (entryText, kMenuTitle, 2))
+ {
+ state |= kTitle;
+ offset = 2;
+ }
+ else if (!strncmp (entryText, kMenuDisable, 2))
+ {
+ state |= kDisabled;
+ offset = 2;
+ }
+ rect.setHeight (size.y+1);
+ context.setClipRect (rect);
+ scheme->scheme->drawItem (entryText+offset, i, state, &context, rect);
+ rect.offset (0, size.y);
+ }
+ }
+ break;
+ }
+ case kEventControlGetFrameMetrics:
+ {
+ err = CallNextEventHandler (inCallRef, inEvent);
+ HIViewFrameMetrics metrics;
+ GetEventParameter (inEvent, kEventParamControlFrameMetrics, typeControlFrameMetrics, NULL, sizeof (metrics), NULL, &metrics);
+ metrics.top = metrics.bottom = 0;
+ SetEventParameter (inEvent, kEventParamControlFrameMetrics, typeControlFrameMetrics, sizeof (metrics), &metrics);
+ break;
+ }
+ case kEventControlOwningWindowChanged:
+ {
+ WindowRef newWindow = GetControlOwner (control);
+ HIWindowChangeFeatures (newWindow, 0, kWindowIsOpaque);
+ err = noErr;
+ HIViewRef root = HIViewGetRoot (newWindow);
+ if (root)
+ {
+ HIRect bounds, frame;
+ HIViewGetBounds (root, &bounds);
+ HIViewGetFrame (root, &frame);
+ }
+ break;
+ }
+ }
+ break;
+ }
+ case kEventClassMenu:
+ {
+ switch (eventKind)
+ {
+ case kEventMenuCreateFrameView:
+ {
+ err = CallNextEventHandler (inCallRef, inEvent);
+ HIViewRef frameView;
+ GetEventParameter (inEvent, kEventParamMenuFrameView, typeControlRef, NULL, sizeof (ControlRef), NULL, &frameView);
+ HIViewFindByID (frameView, kHIViewWindowContentID, &frameView);
+ if (frameView)
+ {
+ EventTypeSpec events [] = { { kEventClassControl, kEventControlDraw }, { kEventClassControl, kEventControlOwningWindowChanged }, { kEventClassControl, kEventControlGetFrameMetrics } };
+ InstallControlEventHandler (frameView, COptionMenuScheme::eventHandler, GetEventTypeCount (events), events, scheme, NULL);
+ }
+ break;
+ }
+ }
+ break;
+ }
+ case kEventClassScrollable:
+ {
+ switch (eventKind)
+ {
+ case kEventScrollableGetInfo:
+ {
+ HISize size;
+ HIPoint origin = { 0, 0 };
+
+ size.width = 200;
+ size.height = kItemHeight * (scheme->menu->getNbEntries () + 1);;
+
+ SetEventParameter(inEvent, kEventParamImageSize, typeHISize, sizeof( size ), &size );
+ SetEventParameter(inEvent, kEventParamViewSize, typeHISize, sizeof( size ), &size );
+ SetEventParameter(inEvent, kEventParamOrigin, typeHIPoint, sizeof( origin ), &origin );
+
+ // line size is 1/10th total size
+ size.width /= 10;
+ size.height /= 10;
+
+ SetEventParameter(inEvent, kEventParamLineSize, typeHISize, sizeof( size ), &size );
+
+ err = noErr;
+ break;
+ }
+ }
+ break;
+ }
+ }
+
+ return err;
+}
+#endif
+
+//------------------------------------------------------------------------
+// COptionMenu
+//------------------------------------------------------------------------
+/*! @class COptionMenu
+Define a rectangle view where a text-value can be displayed with a given font and color.
+The text-value is centered in the given rect.
+A pixmap can be used as background, a second pixmap can be used when the option menu is popuped.
+There are 2 styles with or without a shadowed text. When a mouse click occurs, a popup menu is displayed.
+*/
+COptionMenu::COptionMenu (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CBitmap *bgWhenClick, const long style)
+: CParamDisplay (size, background, style), bgWhenClick (bgWhenClick), nbItemsPerColumn (-1),
+ prefixNumbers (0), scheme (0)
+{
+ this->listener = listener;
+ this->tag = tag;
+
+ nbEntries = 0;
+ nbSubMenus = 0;
+ currentIndex = -1;
+ lastButton = kRButton;
+ platformControl = 0;
+ lastResult = -1;
+ lastMenu = 0;
+
+ #if MAC
+ menuID = 0;
+ #endif
+
+ if (bgWhenClick)
+ bgWhenClick->remember ();
+
+ nbSubMenuAllocated = nbAllocated = 0;
+
+ check = 0;
+ entry = 0;
+ submenuEntry = 0;
+}
+
+//------------------------------------------------------------------------
+COptionMenu::~COptionMenu ()
+{
+ removeAllEntry ();
+
+ if (bgWhenClick)
+ bgWhenClick->forget ();
+}
+
+//------------------------------------------------------------------------
+void COptionMenu::setPrefixNumbers (long preCount)
+{
+ prefixNumbers = preCount;
+}
+
+//-----------------------------------------------------------------------------
+bool COptionMenu::allocateSubMenu (long nb)
+{
+ long newAllocated = nbSubMenuAllocated + nb;
+
+ if (submenuEntry)
+ submenuEntry = (COptionMenu**)realloc (submenuEntry, newAllocated * sizeof (COptionMenu*));
+ else
+ submenuEntry = (COptionMenu**)malloc (newAllocated * sizeof (COptionMenu*));
+
+ long i;
+ for (i = nbSubMenuAllocated; i < newAllocated; i++)
+ submenuEntry[i] = 0;
+
+ nbSubMenuAllocated = newAllocated;
+
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool COptionMenu::allocateMenu (long nb)
+{
+ long newAllocated = nbAllocated + nb;
+
+ if (check)
+ check = (bool*)realloc (check, newAllocated * sizeof (bool));
+ else
+ check = (bool*)malloc (newAllocated * sizeof (bool));
+ if (!check)
+ return false;
+
+ if (entry)
+ entry = (char**)realloc (entry, newAllocated * sizeof (char*));
+ else
+ entry = (char**)malloc (newAllocated * sizeof (char*));
+ if (!entry)
+ {
+ free (check);
+ return false;
+ }
+
+ long i;
+ for (i = nbAllocated; i < newAllocated; i++)
+ {
+ check[i] = false;
+ entry[i] = 0;
+ }
+
+ nbAllocated = newAllocated;
+
+ return true;
+}
+
+//------------------------------------------------------------------------
+COptionMenu* COptionMenu::getSubMenu (long idx) const
+{
+ if (submenuEntry && idx < nbSubMenus)
+ return submenuEntry[idx];
+ return 0;
+}
+
+//------------------------------------------------------------------------
+bool COptionMenu::addEntry (COptionMenu *subMenu, char *txt)
+{
+ if (nbEntries >= MAX_ENTRY || !subMenu || !txt)
+ return false;
+
+ if (nbEntries >= nbAllocated)
+ if (!allocateMenu (32))
+ return false;
+
+ entry[nbEntries] = (char*)malloc (256);
+ switch (prefixNumbers)
+ {
+ case 2:
+ sprintf (entry[nbEntries], "-M%1d %s", (int)(nbEntries + 1), txt);
+ break;
+
+ case 3:
+ sprintf (entry[nbEntries], "-M%02d %s", (int)(nbEntries + 1), txt);
+ break;
+
+ case 4:
+ sprintf (entry[nbEntries], "-M%03d %s", (int)(nbEntries + 1), txt);
+ break;
+
+ default:
+ sprintf (entry[nbEntries], "-M%s", txt);
+ }
+
+
+ if (nbSubMenus >= nbSubMenuAllocated)
+ if (!allocateSubMenu (10))
+ return false;
+
+ submenuEntry[nbSubMenus++] = subMenu;
+ subMenu->remember ();
+
+ nbEntries++;
+
+ if (currentIndex < 0)
+ currentIndex = 0;
+
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool COptionMenu::addEntry (char *txt, long index)
+{
+ if (nbEntries >= MAX_ENTRY)
+ return false;
+
+ if (nbEntries >= nbAllocated)
+ if (!allocateMenu (32))
+ return false;
+
+ entry[nbEntries] = (char*)malloc (256);
+
+ long pos = nbEntries;
+
+ // switch the entries for the insert
+ if (index >= 0)
+ {
+ for (long i = nbEntries; i > index; i--)
+ strcpy (entry[i], entry[i - 1]);
+ if (index >= nbEntries)
+ pos = nbEntries;
+ else
+ pos = index;
+ if (currentIndex >= index)
+ currentIndex++;
+ }
+
+ *entry[pos] = 0;
+ if (txt)
+ {
+ switch (prefixNumbers)
+ {
+ case 2:
+ sprintf (entry[pos], "%1d %s", (int)(index + 1), txt);
+ break;
+
+ case 3:
+ sprintf (entry[pos], "%02d %s", (int)(index + 1), txt);
+ break;
+
+ case 4:
+ sprintf (entry[pos], "%03d %s", (int)(index + 1), txt);
+ break;
+
+ default:
+ strncpy (entry[pos], txt, 256);
+ }
+ }
+
+ nbEntries++;
+
+ if (currentIndex < 0)
+ currentIndex = 0;
+
+ return true;
+}
+
+//------------------------------------------------------------------------
+long COptionMenu::getCurrent (char *txt, bool countSeparator) const
+{
+ if (currentIndex < 0)
+ return -1;
+
+ long result = 0;
+
+ if (countSeparator)
+ {
+ if (txt)
+ strcpy (txt, entry[currentIndex]);
+ result = currentIndex;
+ }
+ else
+ {
+ for (long i = 0; i < currentIndex; i++)
+ {
+ if (strcmp (entry[i], kMenuSeparator) && strncmp (entry[i], kMenuTitle, 2))
+ result++;
+ }
+ if (txt)
+ strcpy (txt, entry[currentIndex]);
+ }
+ return result;
+}
+
+//------------------------------------------------------------------------
+bool COptionMenu::setCurrent (long index, bool countSeparator)
+{
+ if (index < 0 || index >= nbEntries)
+ return false;
+
+ if (countSeparator)
+ {
+ if (!strcmp (entry[index], kMenuSeparator) && strncmp (entry[index], kMenuTitle, 2))
+ return false;
+
+ currentIndex = index;
+ }
+ else
+ {
+ long newCurrent = 0;
+ long i = 0;
+ while (i <= index && newCurrent < nbEntries)
+ {
+ if (strcmp (entry[newCurrent], kMenuSeparator) && strncmp (entry[newCurrent], kMenuTitle, 2))
+ i++;
+ newCurrent++;
+ }
+ currentIndex = newCurrent - 1;
+ }
+ if (style & (kMultipleCheckStyle & ~kCheckStyle))
+ check[currentIndex] = !check[currentIndex];
+
+ // to force the redraw
+ setDirty ();
+
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool COptionMenu::getEntry (long index, char *txt) const
+{
+ if (index < 0 || index >= nbEntries)
+ return false;
+
+ if (txt)
+ strcpy (txt, entry[index]);
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool COptionMenu::setEntry (long index, char *txt)
+{
+ if (index < 0 || index >= nbEntries)
+ return false;
+
+ if (txt)
+ strcpy (entry[index], txt);
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool COptionMenu::removeEntry (long index)
+{
+ if (index < 0 || index >= nbEntries)
+ return false;
+
+ nbEntries--;
+
+ // switch the entries
+ for (long i = index; i < nbEntries; i++)
+ {
+ strcpy (entry[i], entry[i + 1]);
+ check[i] = check [i + 1];
+ }
+
+ if (currentIndex >= index)
+ currentIndex--;
+
+ // delete the last one
+ free (entry[nbEntries]);
+ entry[nbEntries] = 0;
+ check[nbEntries] = false;
+
+ if (nbEntries == 0)
+ currentIndex = -1;
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool COptionMenu::removeAllEntry ()
+{
+ long i;
+ for (i = 0; i < nbEntries; i++)
+ {
+ free (entry[i]);
+ entry[i] = 0;
+ check[i] = false;
+ }
+
+ nbEntries = 0;
+ currentIndex = -1;
+
+ for (i = 0; i < nbSubMenus; i++)
+ {
+ submenuEntry[i]->forget ();
+ submenuEntry[i] = 0;
+ }
+ nbSubMenus = 0;
+
+ if (check)
+ free (check);
+ check = 0;
+ if (entry)
+ free (entry);
+ entry = 0;
+ if (submenuEntry)
+ free (submenuEntry);
+ submenuEntry = 0;
+ nbAllocated = 0;
+ nbSubMenuAllocated = 0;
+
+ return true;
+}
+
+//------------------------------------------------------------------------
+long COptionMenu::getIndex (char *txt) const
+{
+ if (!txt)
+ return -1;
+
+ // search entries
+ for (long i = 0; i < nbEntries; i++)
+ if (!strcmp (entry[i], txt))
+ return i;
+
+ // not found
+ return -1;
+}
+
+//------------------------------------------------------------------------
+bool COptionMenu::checkEntry (long index, bool state)
+{
+ if (index < 0 || index >= nbEntries)
+ return false;
+
+ check[index] = state;
+
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool COptionMenu::checkEntryAlone (long index)
+{
+ if (index < 0 || index >= nbEntries)
+ return false;
+ for (long i = 0; i < nbEntries; i++)
+ check[i] = false;
+ check[index] = true;
+
+ return true;
+}
+
+//------------------------------------------------------------------------
+bool COptionMenu::isCheckEntry (long index) const
+{
+ if (index < 0 || index >= nbEntries)
+ return false;
+
+ return check[index];
+}
+
+//------------------------------------------------------------------------
+void COptionMenu::draw (CDrawContext *pContext)
+{
+ if (currentIndex >= 0 && nbEntries)
+ drawText (pContext, entry[currentIndex] + prefixNumbers);
+ else
+ drawText (pContext, NULL);
+}
+
+//------------------------------------------------------------------------
+void COptionMenu::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled || !getFrame () || !pContext)
+ return;
+
+ lastButton = (button != -1) ? button : pContext->getMouseButtons ();
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+
+ if (lastButton & (kLButton|kRButton|kApple))
+ {
+ if (bgWhenClick)
+ {
+ char string[256];
+ if (currentIndex >= 0)
+ sprintf (string, "%s", entry[currentIndex]);
+ else
+ string[0] = 0;
+
+ drawText (pContext, string, bgWhenClick);
+ }
+
+ beginEdit();
+ takeFocus (pContext);
+ }
+}
+
+//------------------------------------------------------------------------
+#if MOTIF
+#include
+#include
+#include
+#include
+
+static void _unmapCallback (Widget item, XtPointer clientData, XtPointer callData);
+static void _activateCallback (Widget item, XtPointer clientData, XtPointer callData);
+
+//------------------------------------------------------------------------
+static void _unmapCallback (Widget item, XtPointer clientData, XtPointer callData)
+{
+ COptionMenu *optionMenu= (COptionMenu*)clientData;
+ optionMenu->looseFocus ();
+}
+
+//------------------------------------------------------------------------
+static void _activateCallback (Widget item, XtPointer clientData, XtPointer callData)
+{
+ COptionMenu *optionMenu= (COptionMenu*)clientData;
+ optionMenu->setCurrentSelected ((void*)item);
+}
+#endif
+
+//------------------------------------------------------------------------
+#if BEOS
+#include
+#include
+#endif
+
+//------------------------------------------------------------------------
+COptionMenu *COptionMenu::getLastItemMenu (long &idxInMenu) const
+{
+ idxInMenu = lastMenu ? (long)lastMenu->getValue (): -1;
+ return lastMenu;
+}
+
+//------------------------------------------------------------------------
+COptionMenu *COptionMenu::getItemMenu (long idx, long &idxInMenu, long &offsetIdx)
+{
+#if WINDOWS
+ long oldIDx = offsetIdx;
+ offsetIdx += nbEntries;
+
+ if (idx < offsetIdx)
+ {
+ idxInMenu = idx - oldIDx;
+ return this;
+ }
+
+#elif MAC
+ if (menuID == offsetIdx)
+ {
+ idxInMenu = idx;
+ return this;
+ }
+#endif
+ COptionMenu *menu = 0;
+ for (long i = 0; i < nbSubMenus; i++)
+ {
+ menu = submenuEntry[i]->getItemMenu (idx, idxInMenu, offsetIdx);
+ if (menu)
+ break;
+ }
+ return menu;
+}
+
+//------------------------------------------------------------------------
+void COptionMenu::removeItems ()
+{
+ for (long i = 0; i < nbSubMenus; i++)
+ submenuEntry[i]->removeItems ();
+
+#if WINDOWS
+ // destroy the menu
+ if (platformControl)
+ DestroyMenu ((HMENU)platformControl);
+ platformControl = 0;
+
+#elif MAC
+ // destroy the menu
+ if (menuID)
+ DeleteMenu (menuID);
+ if (platformControl)
+ DisposeMenu ((MenuHandle)platformControl);
+ platformControl = 0;
+
+#endif
+}
+
+//------------------------------------------------------------------------
+void *COptionMenu::appendItems (long &offsetIdx)
+{
+ bool multipleCheck = style & (kMultipleCheckStyle & ~kCheckStyle);
+
+#if WINDOWS
+ void *menu = (void*)CreatePopupMenu ();
+
+ bool ownerDraw = (scheme != 0) || (gOptionMenuScheme != 0);
+
+ int flags = 0;
+ long idxSubmenu = 0;
+ long offset = offsetIdx;
+ offsetIdx += nbEntries;
+ long inc = 0;
+ for (long i = 0; i < nbEntries; i++)
+ {
+ //---Separator-----
+ if (!strcmp (entry[i], kMenuSeparator))
+ {
+ if (ownerDraw)
+ AppendMenu ((HMENU)menu, MF_OWNERDRAW|MF_SEPARATOR, 0, entry[i]);
+ else
+ AppendMenu ((HMENU)menu, MF_SEPARATOR, 0, entry[i]);
+ }
+ else
+ {
+ flags = ownerDraw ? MF_OWNERDRAW : MF_STRING;
+ if (nbEntries < 160 && nbItemsPerColumn > 0 && inc && !(inc % nbItemsPerColumn))
+ flags |= MF_MENUBARBREAK;
+
+ if (!strncmp (entry[i], kMenuSubMenu, 2))
+ {
+ if (idxSubmenu < nbSubMenus)
+ {
+ void *submenu = submenuEntry[idxSubmenu]->appendItems (offsetIdx);
+ if (submenu)
+ {
+ idxSubmenu++;
+ AppendMenu ((HMENU)menu, flags|MF_POPUP|MF_ENABLED, (UINT_PTR)submenu, entry[i] + 2);
+ }
+ else
+ continue;
+ }
+ else
+ continue;
+ }
+ //---Disable/Gray entry-----------
+ else if (!strncmp (entry[i], kMenuDisable, 2))
+ {
+ AppendMenu ((HMENU)menu, flags|MF_GRAYED, offset + inc, entry[i] + 2);
+ }
+ //---Disable entry--------
+ else if (!strncmp (entry[i], kMenuTitle, 2))
+ {
+ AppendMenu ((HMENU)menu, flags|MF_DISABLED, offset + inc, entry[i] + 2);
+ }
+ //---Multiple Checked entry---
+ else if (multipleCheck)
+ {
+ AppendMenu ((HMENU)menu, flags|MF_ENABLED |
+ (check[i] ? MF_CHECKED : MF_UNCHECKED), offset + inc, entry[i]);
+ }
+ //---Checked Entry---------
+ else if (style & kCheckStyle)
+ {
+ AppendMenu ((HMENU)menu, flags|MF_ENABLED |
+ ((i == currentIndex) ? MF_CHECKED : MF_UNCHECKED), offset + inc, entry[i]);
+ }
+ else
+ AppendMenu ((HMENU)menu, flags|MF_ENABLED, offset + inc, entry[i]);
+ }
+ inc++;
+ }
+ platformControl = menu;
+ return menu;
+
+#elif MAC
+ //---Get an non-existing ID for the menu:
+ menuID = UniqueID ('MENU');
+
+ MenuHandle theMenu = 0;
+ //---Create the menu
+ #if MAC_ENABLE_MENU_SCHEME
+ extern long pSystemVersion;
+ if ((scheme || gOptionMenuScheme) && pSystemVersion >= 0x1030)
+ {
+ COptionMenuScheme* s = gOptionMenuScheme ? gOptionMenuScheme : scheme;
+ EventRef initEvent = NULL;
+ if (CreateEvent (NULL, kEventClassHIObject, kEventHIObjectInitialize, 0, 0, &initEvent) == noErr)
+ {
+ MenuDefSpec customMenuDef;
+ COptionMenu* optMenu = this;
+ SetEventParameter (initEvent, kEventParamCOptionMenu, typeVoidPtr, sizeof(COptionMenu*), &optMenu);
+ customMenuDef.defType = kMenuDefClassID;
+ customMenuDef.u.view.classID = gOptionMenuSchemeClassID;
+ customMenuDef.u.view.initEvent = initEvent;
+ SetEventParameter (initEvent, kEventParamCOptionMenuScheme, typeVoidPtr, sizeof(COptionMenuScheme*), &s);
+ CreateCustomMenu (&customMenuDef, menuID, 0, &theMenu);
+ ReleaseEvent (initEvent);
+ if (theMenu == NULL)
+ return NULL;
+ }
+ }
+ else
+ #endif
+ theMenu = NewMenu (menuID, "\pPopUp");
+
+ char text2[256];
+ long keyChar;
+ long idxSubmenu = 0;
+ offsetIdx += nbEntries;
+ short keyModifiers;
+ bool useGlyph;
+ for (long i = 0; i < nbEntries; i++)
+ {
+ keyChar = 0;
+ keyModifiers = kMenuNoModifiers;
+ useGlyph = false;
+
+ strcpy (text2, entry[i]);
+ char *ptr = strstr (text2, "\t");
+ if (ptr)
+ {
+ *ptr = '\0';
+ ptr++;
+ if (strlen (ptr) > 0)
+ {
+ if (!strstr (ptr, "Ctrl"))
+ keyModifiers |= kMenuNoCommandModifier;
+ if (strstr (ptr, "Alt"))
+ keyModifiers |= kMenuOptionModifier;
+ if (strstr (ptr, "Shift"))
+ keyModifiers |= kMenuShiftModifier;
+ if (strstr (ptr, "Apple"))
+ keyModifiers |= kMenuControlModifier;
+
+ if (!strncmp (ptr, "Del", 3))
+ keyChar = 0x17;
+ else if (!strncmp (ptr, "Left", 4))
+ {
+ keyChar = 0x64;
+ useGlyph = true;
+ }
+ else if (!strncmp (ptr, "Right", 5))
+ {
+ keyChar = 0x65;
+ useGlyph = true;
+ }
+ else if (!strncmp (ptr, "Up", 2))
+ {
+ keyChar = 0x68;
+ useGlyph = true;
+ }
+ else if (!strncmp (ptr, "Down", 4))
+ {
+ keyChar = 0x6a;
+ useGlyph = true;
+ }
+ else
+ keyChar = (long)ptr[strlen (ptr) - 1];
+ }
+ else
+ {
+ keyModifiers = kMenuNoCommandModifier;
+ keyChar = (long)*ptr;
+ }
+ }
+ #if TARGET_API_MAC_CARBON
+
+ if (!strcmp (entry[i], kMenuSeparator))
+ {
+ AppendMenuItemTextWithCFString (theMenu, CFSTR(""), kMenuItemAttrSeparator, 0, NULL);
+ }
+ else
+ {
+ CFStringRef itemString = 0;
+ MenuItemAttributes itemAttribs = kMenuItemAttrIgnoreMeta;
+ // Submenu
+ if (!strncmp (entry[i], kMenuSubMenu, 2))
+ {
+ if (idxSubmenu < nbSubMenus)
+ {
+ itemString = CFStringCreateWithCString (NULL, entry[i] + 2, kCFStringEncodingUTF8);
+ InsertMenuItemTextWithCFString (theMenu, itemString, i+1, itemAttribs, 0);
+ CFRelease (itemString);
+ void *submenu = submenuEntry[idxSubmenu]->appendItems (offsetIdx);
+ if (submenu)
+ {
+ SetMenuItemHierarchicalID (theMenu, i + 1, submenuEntry[idxSubmenu]->getMenuID ());
+ idxSubmenu++;
+ continue;
+ }
+ else
+ continue;
+ }
+ else
+ continue;
+ }
+ //---Disable/Gray entry-----------
+ else if (!strncmp (entry[i], kMenuDisable, 2))
+ {
+ itemString = CFStringCreateWithCString (NULL, entry[i] + 2, kCFStringEncodingUTF8);
+ itemAttribs |= kMenuItemAttrDisabled;
+ }
+ //---Disable entry--------
+ else if (!strncmp (entry[i], kMenuTitle, 2))
+ {
+ itemString = CFStringCreateWithCString (NULL, entry[i] + 2, kCFStringEncodingUTF8);
+ itemAttribs |= kMenuItemAttrSectionHeader;
+ }
+ else
+ itemString = CFStringCreateWithCString (NULL, entry[i], kCFStringEncodingUTF8);
+
+ InsertMenuItemTextWithCFString (theMenu, itemString, i+1, itemAttribs, 0);
+ CFRelease (itemString);
+ }
+
+ #else
+ Str255 menuItem;
+ strcpy ((char*)menuItem, (const char*)"\p\0");
+ menuItem[0] = strlen ((const char*)text2);
+ AppendMenu (theMenu, "\pjunk");
+
+ if (!strncmp (text2, kMenuTitle, 2) || !strncmp (text2, kMenuDisable, 2) || !strncmp (text2, kMenuSubMenu, 2))
+ {
+ menuItem[0] -= 2;
+ strcat ((char*)menuItem, text2 + 2);
+
+ //---Disable item--------
+ if (!strncmp (text2, kMenuDisable, 2))
+ {
+ #if TARGET_API_MAC_CARBON
+ DisableMenuItem (theMenu, i + 1);
+ #else
+ DisableItem (theMenu, i + 1);
+ #endif
+ }
+ //---Submenu-------------
+ else if (!strncmp (text2, kMenuSubMenu, 2))
+ {
+ if (idxSubmenu < nbSubMenus)
+ {
+ void *submenu = submenuEntry[idxSubmenu]->appendItems (offsetIdx);
+ if (submenu)
+ {
+ SetMenuItemHierarchicalID (theMenu, i + 1, submenuEntry[idxSubmenu]->getMenuID ());
+ idxSubmenu++;
+ }
+ else
+ continue;
+ }
+ else
+ continue;
+ }
+ }
+ else
+ {
+ strcat ((char*)menuItem, text2);
+ }
+ SetMenuItemText (theMenu, i + 1, menuItem);
+
+ #endif // !TARGET_API_MAC_CARBON
+
+ //---Set the shortcut
+ if (keyChar != 0)
+ {
+ SetItemCmd (theMenu, i + 1, keyChar);
+ if (useGlyph)
+ SetMenuItemKeyGlyph (theMenu, i + 1, keyChar);
+ SetMenuItemModifiers (theMenu, i + 1, keyModifiers);
+ }
+
+ if (multipleCheck && check[i])
+ CheckMenuItem (theMenu, i + 1, true);
+
+ }
+
+ // set the check
+ if (style & kCheckStyle && !multipleCheck)
+ CheckMenuItem (theMenu, currentIndex + 1, true);
+
+ InsertMenu ((MenuHandle)theMenu, -1);
+
+ platformControl = (void*)theMenu;
+ return platformControl;
+#endif
+}
+
+//------------------------------------------------------------------------
+void COptionMenu::setValue (float val)
+{
+ if ((long)val < 0 || (long)val >= nbEntries)
+ return;
+
+ currentIndex = (long)val;
+ if (style & (kMultipleCheckStyle & ~kCheckStyle))
+ check[currentIndex] = !check[currentIndex];
+ CParamDisplay::setValue (val);
+
+ // to force the redraw
+ setDirty ();
+}
+
+//------------------------------------------------------------------------
+void COptionMenu::takeFocus (CDrawContext *pContext)
+{
+ if (!getFrame ())
+ return;
+
+ bool multipleCheck = style & (kMultipleCheckStyle & ~kCheckStyle);
+ lastResult = -1;
+ lastMenu = 0;
+
+#if MAC || WINDOWS
+ // calculate Screen Position
+ #if WINDOWS
+ HWND hwnd = (HWND)getFrame ()->getSystemWindow ();
+
+ #endif
+
+ CRect rect;
+ if (pContext)
+ {
+ rect.left = pContext->offsetScreen.h;
+ rect.top = pContext->offsetScreen.v;
+ }
+ else
+ {
+ #if WINDOWS
+ RECT rctWinParent;
+ GetWindowRect (hwnd, &rctWinParent);
+ rect.left = rctWinParent.left;
+ rect.top = rctWinParent.top;
+ #elif QUARTZ
+ HIRect bounds;
+ HIViewRef control = (HIViewRef)getFrame ()->getPlatformControl ();
+ HIViewGetFrame (control, &bounds);
+ WindowRef window = (WindowRef)getFrame ()->getSystemWindow ();
+ WindowAttributes attr;
+ GetWindowAttributes (window, &attr);
+ if (attr & kWindowCompositingAttribute)
+ {
+ HIViewRef contentView;
+ HIViewFindByID (HIViewGetRoot (window), kHIViewWindowContentID, &contentView);
+ if (HIViewGetSuperview (control) != contentView)
+ HIViewConvertRect (&bounds, control, contentView);
+ bounds.origin.x += getFrame ()->hiScrollOffset.x;
+ bounds.origin.y += getFrame ()->hiScrollOffset.y;
+ }
+ rect.left = (CCoord)bounds.origin.x;
+ rect.top = (CCoord)bounds.origin.y;
+ #endif
+ }
+ CView* parent = getParentView ();
+ while (parent)
+ {
+ if (parent->notify (this, kMsgCheckIfViewContainer) == kMessageNotified)
+ {
+ CRect vSize;
+ parent->getViewSize (vSize);
+ rect.offset (vSize.left, vSize.top);
+ }
+ parent = parent->getParentView ();
+ }
+#endif
+
+#if WINDOWS
+ MSG msg;
+ long result = -1;
+
+ //---Create the popup menu---
+ long offIdx = 0;
+ appendItems (offIdx);
+
+ //---Popup the menu---
+ long offset;
+ if (style & kPopupStyle)
+ offset = (long)(rect.top + size.top);
+ else
+ offset = (long)(rect.top + size.bottom);
+
+ int flags = TPM_LEFTALIGN;
+ if (lastButton & kRButton)
+ flags |= TPM_RIGHTBUTTON;
+
+ if (TrackPopupMenu ((HMENU)platformControl, flags,
+ (int)(rect.left + size.left), offset, 0, hwnd, 0))
+ {
+ if (PeekMessage (&msg, hwnd, WM_COMMAND, WM_COMMAND, PM_REMOVE))
+ {
+ if (HIWORD (msg.wParam) == 0)
+ {
+ result = LOWORD (msg.wParam);
+ lastResult = result;
+ }
+ }
+ }
+
+ //---Destroy the menu----
+ removeItems ();
+
+ //---Update the dependencies
+ if (result != -1 || bgWhenClick)
+ {
+ CDrawContext *pContextTemp = 0;
+ HDC hdc;
+ if (!pContext && result != -1)
+ {
+ // create a local context
+ hdc = GetDC (hwnd);
+ pContextTemp = new CDrawContext (getFrame (), hdc, hwnd);
+ }
+ else
+ pContextTemp = pContext;
+
+ // to force the redraw
+ if (bgWhenClick)
+ setDirty ();
+
+ if (result != -1)
+ {
+ long idx = 0;
+ offIdx = 0;
+ COptionMenu *menu = getItemMenu (result, idx, offIdx);
+ if (menu)
+ {
+ lastMenu = menu;
+ menu->setValue ((float)idx);
+
+ // update dependency
+ if (listener)
+ listener->valueChanged (pContextTemp, menu);
+ }
+ }
+
+ // redraw the display
+ // AAAAARRRRGHHHHHHHHHHHHH!!
+ //doIdleStuff ();
+ //setDirty (false);
+
+ if (!pContext && pContextTemp)
+ {
+ delete pContextTemp;
+ ReleaseDC (hwnd, hdc);
+ }
+ }
+
+#elif MAC
+ // no entries, no menu
+ if (nbEntries == 0)
+ {
+ endEdit();
+ getFrame ()->setFocusView (0);
+ return;
+ }
+
+ //---Transform local coordinates to global coordinates
+ long offset;
+
+ if (style & kPopupStyle)
+ offset = (long)size.top;
+ else
+ offset = (long)size.bottom;
+
+ CCoord gx = 0, gy = 0;
+ Point LToG;
+ getFrame()->getPosition(gx, gy);
+ LToG.v = (short)(gy + rect.top + offset);
+ LToG.h = (short)(gx + rect.left + size.left);
+
+ //---Create the popup menu---
+ long offIdx = 0;
+ MenuHandle theMenu = (MenuHandle)appendItems (offIdx);
+
+ // Calculate the menu size (height and width)
+ CalcMenuSize (theMenu);
+
+ // Get a handle to the screen
+ RgnHandle rgn = GetGrayRgn ();
+ #if TARGET_API_MAC_CARBON
+ Rect bounds;
+ GetRegionBounds (rgn, &bounds);
+ int bottom = bounds.bottom;
+ long menuHeight = GetMenuHeight (theMenu);
+ #else
+ int bottom = (*rgn)->rgnBBox.bottom;
+ long menuHeight = (*theMenu)->menuHeight;
+ #endif
+
+ // Calculate the size of one menu item (round to the next int)
+ int menuItemSize = (menuHeight + nbEntries - 1) / nbEntries;
+
+ setDirty (false);
+
+ //---Popup the Menu
+ long popUpItem = 1;
+ long PopUpMenuItem = 0;
+
+ if (LToG.v + menuHeight >= bottom - menuItemSize / 2)
+ {
+ if (nbEntries * menuItemSize >= bottom)
+ {
+ popUpItem = currentIndex + 2;
+ if (popUpItem > nbEntries)
+ popUpItem = nbEntries;
+ }
+ if (nbEntries * menuItemSize >= bottom)
+ PopUpMenuItem = PopUpMenuSelect (theMenu, LToG.v, LToG.h, popUpItem);
+ else
+ PopUpMenuItem = PopUpMenuSelect (theMenu, bottom - menuHeight - menuItemSize, LToG.h, popUpItem);
+ }
+ else
+ PopUpMenuItem = PopUpMenuSelect (theMenu, LToG.v, LToG.h, popUpItem);
+
+ //---Destroy the menu----
+ removeItems ();
+
+ // HiWord indicates MenuID, LoWord indicates the item index
+ short result = LoWord (PopUpMenuItem) - 1;
+ lastResult = result;
+ short menuIDResult = HiWord (PopUpMenuItem);
+ if (menuIDResult != 0 || bgWhenClick)
+ {
+ // to force the redraw
+ if (bgWhenClick)
+ setDirty ();
+
+ if (!pContext && menuIDResult != 0)
+ {
+ pContext = getFrame ()->createDrawContext ();
+ }
+ else if (pContext)
+ pContext->remember ();
+
+ if (menuIDResult != 0)
+ {
+ long idx = 0;
+ offIdx = menuIDResult;
+ COptionMenu *menu = getItemMenu (result, idx, offIdx);
+ if (menu)
+ {
+ lastMenu = menu;
+ menu->setValue (result);
+ if (listener)
+ listener->valueChanged (pContext, menu);
+ }
+ }
+
+ if (pContext)
+ pContext->forget ();
+ }
+
+#elif MOTIF
+ Arg args[10];
+ int n = 0;
+
+ // get the position of the pParent
+ CRect rect;
+ getFrame ()->getSize (&rect);
+
+ if (pContext)
+ {
+ rect.left += pContext->offset.h;
+ rect.top += pContext->offset.v;
+ }
+
+ // create a popup menu
+ int offset;
+ if (style & kPopupStyle)
+ offset = (int)(rect.top + size.top);
+ else
+ offset = (int)(rect.top + size.bottom);
+
+ XtSetArg (args[n], XmNx, rect.left + size.left); n++;
+ XtSetArg (args[n], XmNy, offset); n++;
+ XtSetArg (args[n], XmNmenuHistory, currentIndex); n++;
+ XtSetArg (args[n], XmNtraversalOn, true); n++;
+
+ platformControl = (void*)XmCreatePopupMenu ((Widget)(getFrame ()->getSystemWindow ()),
+ "popup", args, n);
+
+ XtAddCallback ((Widget)platformControl, XmNunmapCallback, _unmapCallback, this);
+
+ // insert the menu items
+ for (long i = 0; i < nbEntries; i++)
+ {
+ if (!strcmp (entry[i], kMenuSeparator))
+ {
+ itemWidget[i] = (void*)XtCreateManagedWidget ("separator",
+ xmSeparatorGadgetClass, (Widget)platformControl, 0, 0);
+ }
+ else
+ {
+ if (multipleCheck)
+ {
+ itemWidget[i] = (void*)XtVaCreateManagedWidget (entry[i],
+ xmToggleButtonWidgetClass, (Widget)platformControl,
+ XmNset, check[i], XmNvisibleWhenOff, false, 0);
+ XtAddCallback ((Widget)itemWidget[i], XmNvalueChangedCallback, _activateCallback, this);
+ }
+ else if (style & kCheckStyle)
+ {
+ itemWidget[i] = (void*)XtVaCreateManagedWidget (entry[i],
+ xmToggleButtonWidgetClass, (Widget)platformControl,
+ XmNset, (i == currentIndex) ? true : false, XmNvisibleWhenOff, false, 0);
+ XtAddCallback ((Widget)itemWidget[i], XmNvalueChangedCallback, _activateCallback, this);
+ }
+ else
+ {
+ itemWidget[i] = (void*)XtVaCreateManagedWidget (entry[i],
+ xmPushButtonWidgetClass, (Widget)platformControl, 0);
+ XtAddCallback ((Widget)itemWidget[i], XmNactivateCallback, _activateCallback, this);
+ }
+ }
+ }
+
+ XtManageChild ((Widget)platformControl);
+
+#elif BEOS
+ BPopUpMenu* popup = new BPopUpMenu ("popup", false, false);
+ BMessage* message;
+ BMenuItem* item;
+ for (long i = 0; i < nbEntries; i++)
+ {
+ if (strcmp (entry[i], kMenuSeparator) == 0)
+ popup->AddSeparatorItem ();
+ else
+ {
+ message = new BMessage (i);
+ item = new BMenuItem (entry[i], message);
+ popup->AddItem (item);
+ if (multipleCheck)
+ {
+ if (check[i])
+ item->SetMarked (true);
+ }
+ else if ((style & kCheckStyle) && currentIndex == i)
+ item->SetMarked (true);
+ }
+ }
+ CRect rect;
+ getFrame ()->getSize (&rect);
+ if (pContext)
+ {
+ rect.left += pContext->offset.h;
+ rect.top += pContext->offset.v;
+ }
+ long offset;
+ if (style & kPopupStyle)
+ offset = (int)(rect.top + size.top);
+ else
+ offset = (int)(rect.top + size.bottom);
+ BPoint where (rect.left + size.left, offset);
+ BView* plugView = (BView*) getFrame ()->getSystemWindow ();
+ plugView->ConvertToScreen (&where);
+ item = popup->Go (where);
+ if (item)
+ {
+ message = item->Message ();
+ if (message)
+ {
+ CDrawContext *pContextTemp = pContext;
+ // create a local context
+ if (!pContextTemp)
+ pContextTemp = new CDrawContext (getFrame (), plugView, NULL);
+
+ setValue (message->what);
+
+ if (listener)
+ listener->valueChanged (pContextTemp, this);
+
+ // redraw the display
+ draw (pContextTemp);
+
+ if (!pContext && pContextTemp)
+ delete pContextTemp;
+ }
+ }
+ delete popup;
+#endif
+
+ getFrame ()->setFocusView (0);
+ endEdit();
+}
+
+//------------------------------------------------------------------------
+void COptionMenu::looseFocus (CDrawContext *pContext)
+{
+ if (platformControl == 0)
+ return;
+
+#if WINDOWS
+#elif MAC
+#elif MOTIF
+ for (long i = 0; i < nbEntries; i++)
+ if (itemWidget[i])
+ XtDestroyWidget ((Widget)itemWidget[i]);
+
+ if (platformControl)
+ {
+ XtUnmanageChild ((Widget)platformControl);
+ XtDestroyWidget ((Widget)platformControl);
+ }
+#endif
+
+ platformControl = 0;
+}
+
+#if MOTIF
+//------------------------------------------------------------------------
+void COptionMenu::setCurrentSelected (void *itemSelected)
+{
+ // retrieve the current index
+ if (itemSelected != 0)
+ {
+ for (long i = 0; i < nbEntries; i++)
+ if (itemWidget[i] == itemSelected)
+ {
+ currentIndex = i;
+ break;
+ }
+ }
+
+ // update dependency
+ CDrawContext *pContext = new CDrawContext (getFrame (), (void*)getFrame ()->getGC (), (void*)getFrame ()->getWindow ());
+
+ setValue (currentIndex);
+
+ if (listener)
+ listener->valueChanged (pContext, this);
+ delete pContext;
+}
+#endif
+
+
+//------------------------------------------------------------------------
+// CAnimKnob
+//------------------------------------------------------------------------
+/*! @class CAnimKnob
+Such as a CKnob control object, but there is a unique pixmap which contains different views (subpixmaps) of this knob.
+According to the value, a specific subpixmap is displayed. The different subpixmaps are stacked in the pixmap object.
+*/
+CAnimKnob::CAnimKnob (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset)
+: CKnob (size, listener, tag, background, 0, offset), bInverseBitmap (false)
+{
+ heightOfOneImage = size.height ();
+ subPixmaps = (short)(background->getHeight () / heightOfOneImage);
+ inset = 0;
+}
+
+//------------------------------------------------------------------------
+CAnimKnob::CAnimKnob (const CRect &size, CControlListener *listener, long tag,
+ long subPixmaps, // number of subPixmaps
+ CCoord heightOfOneImage, // height of one image in pixel
+ CBitmap *background, CPoint &offset)
+: CKnob (size, listener, tag, background, 0, offset),
+ subPixmaps (subPixmaps), heightOfOneImage (heightOfOneImage), bInverseBitmap (false)
+{
+ inset = 0;
+}
+
+//------------------------------------------------------------------------
+CAnimKnob::~CAnimKnob ()
+{}
+
+//-----------------------------------------------------------------------------------------------
+bool CAnimKnob::isDirty () const
+{
+ if (!bDirty)
+ {
+ CPoint p;
+ valueToPoint (p);
+ if (p == lastDrawnPoint)
+ return false;
+ }
+ return CKnob::isDirty ();
+}
+
+//------------------------------------------------------------------------
+void CAnimKnob::draw (CDrawContext *pContext)
+{
+ CPoint where (0, 0);
+ if (value >= 0.f)
+ {
+ CCoord tmp = heightOfOneImage * (subPixmaps - 1);
+ if (bInverseBitmap)
+ where.v = (long)((1 - value) * (float)tmp);
+ else
+ where.v = (long)(value * (float)tmp);
+ for (CCoord realY = 0; realY <= tmp; realY += heightOfOneImage)
+ {
+ if (where.v < realY)
+ {
+ where.v = realY - heightOfOneImage;
+ if (where.v < 0)
+ where.v = 0;
+ break;
+ }
+ }
+ }
+
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size, where);
+ else
+ pBackground->draw (pContext, size, where);
+ }
+ valueToPoint (lastDrawnPoint);
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+// CVerticalSwitch
+//------------------------------------------------------------------------
+/*! @class CVerticalSwitch
+Define a switch with a given number of positions, the current position is defined by the position
+of the last click on this object (the object is divided in its height by the number of position).
+Each position has its subpixmap, each subpixmap is stacked in the given handle pixmap.
+By clicking Alt+Left Mouse the default value is used.
+*/
+CVerticalSwitch::CVerticalSwitch (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset)
+: CControl (size, listener, tag, background), offset (offset)
+{
+ heightOfOneImage = size.height ();
+ subPixmaps = (long)(background->getHeight () / heightOfOneImage);
+ iMaxPositions = subPixmaps;
+
+ setDefaultValue (0.f);
+}
+
+//------------------------------------------------------------------------
+CVerticalSwitch::CVerticalSwitch (const CRect &size, CControlListener *listener, long tag,
+ long subPixmaps, // number of subPixmaps
+ CCoord heightOfOneImage, // height of one image in pixel
+ long iMaxPositions,
+ CBitmap *background, CPoint &offset)
+: CControl (size, listener, tag, background), offset (offset),
+ subPixmaps (subPixmaps), heightOfOneImage (heightOfOneImage),
+ iMaxPositions (iMaxPositions)
+{
+ setDefaultValue (0.f);
+}
+
+//------------------------------------------------------------------------
+CVerticalSwitch::~CVerticalSwitch ()
+{}
+
+//------------------------------------------------------------------------
+void CVerticalSwitch::draw (CDrawContext *pContext)
+{
+ if (pBackground)
+ {
+ // source position in bitmap
+ CPoint where (0, heightOfOneImage * ((long)(value * (iMaxPositions - 1) + 0.5f)));
+
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size, where);
+ else
+ pBackground->draw (pContext, size, where);
+ }
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+void CVerticalSwitch::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+ if (!(button & kLButton))
+ return;
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+
+ // check if default value wanted
+ if (checkDefaultValue (pContext, button))
+ return;
+
+ double coef = (double)heightOfOneImage / (double)iMaxPositions;
+
+ // begin of edit parameter
+ beginEdit ();
+ do
+ {
+ value = (long)((where.v - size.top) / coef) / (float)(iMaxPositions - 1);
+ if (value > 1.f)
+ value = 1.f;
+ else if (value < 0.f)
+ value = 0.f;
+
+ if (isDirty () && listener)
+ listener->valueChanged (pContext, this);
+
+ getMouseLocation (pContext, where);
+
+ doIdleStuff ();
+ }
+ while (pContext->getMouseButtons () == button);
+
+ // end of edit parameter
+ endEdit ();
+}
+
+
+//------------------------------------------------------------------------
+// CHorizontalSwitch
+//------------------------------------------------------------------------
+/*! @class CHorizontalSwitch
+Same as the CVerticalSwitch but horizontal.
+*/
+CHorizontalSwitch::CHorizontalSwitch (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset)
+: CControl (size, listener, tag, background), offset (offset)
+{
+ heightOfOneImage = size.width ();
+ subPixmaps = (long)(background->getWidth () / heightOfOneImage);
+ iMaxPositions = subPixmaps;
+
+ setDefaultValue (0.f);
+}
+
+//------------------------------------------------------------------------
+CHorizontalSwitch::CHorizontalSwitch (const CRect &size, CControlListener *listener, long tag,
+ long subPixmaps, // number of subPixmaps
+ CCoord heightOfOneImage, // height of one image in pixel
+ long iMaxPositions,
+ CBitmap *background, CPoint &offset)
+: CControl (size, listener, tag, background), offset (offset),
+ subPixmaps (subPixmaps), heightOfOneImage (heightOfOneImage),
+ iMaxPositions (iMaxPositions)
+{
+ setDefaultValue (0.f);
+}
+
+//------------------------------------------------------------------------
+CHorizontalSwitch::~CHorizontalSwitch ()
+{}
+
+//------------------------------------------------------------------------
+void CHorizontalSwitch::draw (CDrawContext *pContext)
+{
+ if (pBackground)
+ {
+ // source position in bitmap
+ CPoint where (0, heightOfOneImage * ((long)(value * (iMaxPositions - 1) + 0.5f)));
+
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size, where);
+ else
+ pBackground->draw (pContext, size, where);
+ }
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+void CHorizontalSwitch::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+
+ if (!(button & kLButton))
+ return;
+
+ // check if default value wanted
+ if (checkDefaultValue (pContext, button))
+ return;
+
+ double coef = (double)pBackground->getWidth () / (double)iMaxPositions;
+
+ // begin of edit parameter
+ beginEdit ();
+ do
+ {
+ value = (long)((where.h - size.left) / coef) / (float)(iMaxPositions - 1);
+ if (value > 1.f)
+ value = 1.f;
+ else if (value < 0.f)
+ value = 0.f;
+
+ if (isDirty () && listener)
+ listener->valueChanged (pContext, this);
+
+ getMouseLocation (pContext, where);
+
+ doIdleStuff ();
+ }
+ while (pContext->getMouseButtons () == button);
+
+ // end of edit parameter
+ endEdit ();
+}
+
+
+//------------------------------------------------------------------------
+// CRockerSwitch
+//------------------------------------------------------------------------
+/*! @class CRockerSwitch
+Define a rocker switch with 3 states using 3 subpixmaps.
+One click on its leftside, then the first subpixmap is displayed.
+One click on its rightside, then the third subpixmap is displayed.
+When the mouse button is relaxed, the second subpixmap is framed.
+*/
+CRockerSwitch::CRockerSwitch (const CRect &size, CControlListener *listener, long tag, // identifier tag (ID)
+ CBitmap *background, CPoint &offset, const long style)
+: CControl (size, listener, tag, background), offset (offset), style (style)
+{
+ heightOfOneImage = size.width ();
+}
+
+//------------------------------------------------------------------------
+CRockerSwitch::CRockerSwitch (const CRect &size, CControlListener *listener, long tag, // identifier tag (ID)
+ CCoord heightOfOneImage, // height of one image in pixel
+ CBitmap *background, CPoint &offset, const long style)
+: CControl (size, listener, tag, background), offset (offset),
+ heightOfOneImage (heightOfOneImage), style (style)
+{}
+
+//------------------------------------------------------------------------
+CRockerSwitch::~CRockerSwitch ()
+{}
+
+//------------------------------------------------------------------------
+void CRockerSwitch::draw (CDrawContext *pContext)
+{
+ CPoint where (offset.h, offset.v);
+
+ if (value == 1.f)
+ where.v += 2 * heightOfOneImage;
+ else if (value == 0.f)
+ where.v += heightOfOneImage;
+
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size, where);
+ else
+ pBackground->draw (pContext, size, where);
+ }
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+void CRockerSwitch::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+
+ if (!(button & kLButton))
+ return;
+
+ float fEntryState = value;
+
+ CCoord width_2 = size.width () / 2;
+ CCoord height_2 = size.height () / 2;
+
+ // begin of edit parameter
+ beginEdit ();
+
+ if (button)
+ {
+ do
+ {
+ if (style & kHorizontal)
+ {
+ if (where.h >= size.left && where.v >= size.top &&
+ where.h <= (size.left + width_2) && where.v <= size.bottom)
+ value = -1.0f;
+ else if (where.h >= (size.left + width_2) && where.v >= size.top &&
+ where.h <= size.right && where.v <= size.bottom)
+ value = 1.0f;
+ else
+ value = fEntryState;
+ }
+ else
+ {
+ if (where.h >= size.left && where.v >= size.top &&
+ where.h <= size.right && where.v <= (size.top + height_2))
+ value = -1.0f;
+ else if (where.h >= size.left && where.v >= (size.top + height_2) &&
+ where.h <= size.right && where.v <= size.bottom)
+ value = 1.0f;
+ else
+ value = fEntryState;
+ }
+
+ if (isDirty () && listener)
+ listener->valueChanged (pContext, this);
+
+ getMouseLocation (pContext, where);
+
+ doIdleStuff ();
+ }
+ while (pContext->getMouseButtons ());
+ }
+ else
+ {
+ if (where.h >= size.left && where.v >= size.top &&
+ where.h <= (size.left + width_2) && where.v <= size.bottom)
+ value = -1.0f;
+ else if (where.h >= (size.left + width_2) && where.v >= size.top &&
+ where.h <= size.right && where.v <= size.bottom)
+ value = 1.0f;
+
+ if (listener)
+ listener->valueChanged (pContext, this);
+ }
+
+ value = 0.f; // set button to UNSELECTED state
+ if (listener)
+ listener->valueChanged (pContext, this);
+
+ // end of edit parameter
+ endEdit ();
+}
+
+//------------------------------------------------------------------------
+bool CRockerSwitch::onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+{
+ if (!bMouseEnabled)
+ return false;
+
+ if (distance > 0)
+ value = -1.0f;
+ else
+ value = 1.0f;
+
+ // begin of edit parameter
+ beginEdit ();
+
+ if (isDirty () && listener)
+ listener->valueChanged (pContext, this);
+
+ value = 0.0f; // set button to UNSELECTED state
+ if (listener)
+ listener->valueChanged (pContext, this);
+
+ // end of edit parameter
+ endEdit ();
+
+ return true;
+}
+
+
+//------------------------------------------------------------------------
+// CMovieBitmap
+//------------------------------------------------------------------------
+/*! @class CMovieBitmap
+A movie pixmap allows to display different subpixmaps according to its current value.
+*/
+CMovieBitmap::CMovieBitmap (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset)
+ : CControl (size, listener, tag, background), offset (offset),
+ subPixmaps (subPixmaps), heightOfOneImage (heightOfOneImage)
+{
+ heightOfOneImage = size.height ();
+ subPixmaps = (long)(background->getHeight () / heightOfOneImage);
+}
+
+//------------------------------------------------------------------------
+CMovieBitmap::CMovieBitmap (const CRect &size, CControlListener *listener, long tag,
+ long subPixmaps, // number of subPixmaps
+ CCoord heightOfOneImage, // height of one image in pixel
+ CBitmap *background, CPoint &offset)
+ : CControl (size, listener, tag, background), offset (offset),
+ subPixmaps (subPixmaps), heightOfOneImage (heightOfOneImage)
+{}
+
+//------------------------------------------------------------------------
+CMovieBitmap::~CMovieBitmap ()
+{}
+
+//------------------------------------------------------------------------
+void CMovieBitmap::draw (CDrawContext *pContext)
+{
+ CPoint where (offset.h, offset.v);
+
+ if (value > 1.0f)
+ value = 1.0f;
+
+ if (value > 0.0f)
+ where.v += heightOfOneImage * (int)(value * (subPixmaps - 1) + 0.5);
+
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size, where);
+ else
+ pBackground->draw (pContext, size, where);
+ }
+ setDirty (false);
+}
+
+
+//------------------------------------------------------------------------
+// CMovieButton
+//------------------------------------------------------------------------
+/*! @class CMovieButton
+A movie button is a bi-states button with 2 subpixmaps. These subpixmaps are stacked in the pixmap.
+*/
+CMovieButton::CMovieButton (const CRect &size, CControlListener *listener, long tag, // identifier tag (ID)
+ CBitmap *background, CPoint &offset)
+: CControl (size, listener, tag, background), offset (offset), buttonState (value)
+{
+ heightOfOneImage = size.height ();
+}
+
+//------------------------------------------------------------------------
+CMovieButton::CMovieButton (const CRect &size, CControlListener *listener, long tag,
+ CCoord heightOfOneImage, // height of one image in pixel
+ CBitmap *background, CPoint &offset)
+ : CControl (size, listener, tag, background), offset (offset),
+ heightOfOneImage (heightOfOneImage), buttonState (value)
+{}
+
+//------------------------------------------------------------------------
+CMovieButton::~CMovieButton ()
+{}
+
+//------------------------------------------------------------------------
+void CMovieButton::draw (CDrawContext *pContext)
+{
+ CPoint where;
+
+ where.h = 0;
+
+ bounceValue ();
+
+ if (value)
+ where.v = heightOfOneImage;
+ else
+ where.v = 0;
+
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size, where);
+ else
+ pBackground->draw (pContext, size, where);
+ }
+ buttonState = value;
+
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+void CMovieButton::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+
+ if (!(button & kLButton))
+ return;
+
+ // this simulates a real windows button
+ float fEntryState = value;
+
+ // begin of edit parameter
+ beginEdit ();
+
+ if (pContext->getMouseButtons ())
+ {
+ do
+ {
+ if (where.h >= size.left &&
+ where.v >= size.top &&
+ where.h <= size.right &&
+ where.v <= size.bottom)
+ value = !fEntryState;
+ else
+ value = fEntryState;
+
+ if (isDirty () && listener)
+ listener->valueChanged (pContext, this);
+
+ getMouseLocation (pContext, where);
+
+ doIdleStuff ();
+ }
+ while (pContext->getMouseButtons () == button);
+ }
+ else
+ {
+ value = !value;
+ if (listener)
+ listener->valueChanged (pContext, this);
+ }
+
+ // end of edit parameter
+ endEdit ();
+
+ buttonState = value;
+}
+
+
+//------------------------------------------------------------------------
+// CAutoAnimation
+//------------------------------------------------------------------------
+/*! @class CAutoAnimation
+An auto-animation control contains a given number of subpixmap which can be displayed in loop.
+Two functions allows to get the previous or the next subpixmap (these functions increase or decrease the current value of this control).
+*/
+// displays bitmaps within a (child-) window
+CAutoAnimation::CAutoAnimation (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset)
+: CControl (size, listener, tag, background), offset (offset), bWindowOpened (false)
+{
+ heightOfOneImage = size.height ();
+ subPixmaps = (long)(background->getHeight () / heightOfOneImage);
+
+ totalHeightOfBitmap = heightOfOneImage * subPixmaps;
+}
+
+//------------------------------------------------------------------------
+CAutoAnimation::CAutoAnimation (const CRect &size, CControlListener *listener, long tag,
+ long subPixmaps, // number of subPixmaps...
+ CCoord heightOfOneImage, // height of one image in pixel
+ CBitmap *background, CPoint &offset)
+ : CControl (size, listener, tag, background), offset (offset),
+ subPixmaps (subPixmaps), heightOfOneImage (heightOfOneImage),
+ bWindowOpened (false)
+{
+ totalHeightOfBitmap = heightOfOneImage * subPixmaps;
+}
+
+//------------------------------------------------------------------------
+CAutoAnimation::~CAutoAnimation ()
+{}
+
+//------------------------------------------------------------------------
+void CAutoAnimation::draw (CDrawContext *pContext)
+{
+ if (isWindowOpened ())
+ {
+ CPoint where;
+ where.v = (long)value + offset.v;
+ where.h = offset.h;
+
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size, where);
+ else
+ pBackground->draw (pContext, size, where);
+ }
+ }
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+void CAutoAnimation::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+
+ if (!(button & kLButton))
+ return;
+
+ if (!isWindowOpened ())
+ {
+ value = 0;
+ openWindow ();
+ setDirty (); // force to redraw
+ if (listener)
+ listener->valueChanged (pContext, this);
+ }
+ else
+ {
+ // stop info animation
+ value = 0; // draw first pic of bitmap
+ setDirty ();
+ closeWindow ();
+ }
+}
+
+//------------------------------------------------------------------------
+void CAutoAnimation::openWindow ()
+{
+ bWindowOpened = true;
+}
+
+//------------------------------------------------------------------------
+void CAutoAnimation::closeWindow ()
+{
+ bWindowOpened = false;
+}
+
+//------------------------------------------------------------------------
+void CAutoAnimation::nextPixmap ()
+{
+ value += heightOfOneImage;
+ if (value >= (totalHeightOfBitmap - heightOfOneImage))
+ value = 0;
+}
+
+//------------------------------------------------------------------------
+void CAutoAnimation::previousPixmap ()
+{
+ value -= heightOfOneImage;
+ if (value < 0.f)
+ value = (float)(totalHeightOfBitmap - heightOfOneImage - 1);
+}
+
+
+//------------------------------------------------------------------------
+// CSlider
+//------------------------------------------------------------------------
+/*! @class CSlider
+Define a slider with a given background and handle.
+The range of variation of the handle should be defined.
+By default the handler is drawn with transparency (white color).
+By clicking Alt+Left Mouse the default value is used.
+*/
+CSlider::CSlider (const CRect &rect, CControlListener *listener, long tag,
+ long iMinPos, // min position in pixel
+ long iMaxPos, // max position in pixel
+ CBitmap *handle, // bitmap of slider
+ CBitmap *background, // bitmap of background
+ CPoint &offset, // offset in the background
+ const long style) // style (kBottom,kRight,kTop,kLeft,kHorizontal,kVertical)
+ : CControl (rect, listener, tag, background), offset (offset), pHandle (handle),
+ pOScreen (0), style (style), bFreeClick (true)
+{
+ setDrawTransparentHandle (true);
+
+ if (pHandle)
+ {
+ pHandle->remember ();
+ widthOfSlider = pHandle->getWidth ();
+ heightOfSlider = pHandle->getHeight ();
+ }
+ else
+ {
+ widthOfSlider = 1;
+ heightOfSlider = 1;
+ }
+
+ widthControl = size.width ();
+ heightControl = size.height ();
+
+ if (style & kHorizontal)
+ {
+ minPos = iMinPos - size.left;
+ rangeHandle = iMaxPos - iMinPos;
+ CPoint p (0, 0);
+ setOffsetHandle (p);
+ }
+ else
+ {
+ minPos = iMinPos - size.top;
+ rangeHandle = iMaxPos - iMinPos;
+ CPoint p (0, 0);
+ setOffsetHandle (p);
+ }
+
+ zoomFactor = 10.f;
+
+ setWantsFocus (true);
+}
+
+//------------------------------------------------------------------------
+CSlider::CSlider (const CRect &rect, CControlListener *listener, long tag,
+ CPoint &offsetHandle, // handle offset
+ long _rangeHandle, // size of handle range
+ CBitmap *handle, // bitmap of slider
+ CBitmap *background, // bitmap of background
+ CPoint &offset, // offset in the background
+ const long style) // style (kBottom,kRight,kTop,kLeft,kHorizontal,kVertical)
+: CControl (rect, listener, tag, background), offset (offset), pHandle (handle),
+ pOScreen (0), style (style), minPos (0), bFreeClick (true)
+{
+ setDrawTransparentHandle (true);
+
+ if (pHandle)
+ {
+ pHandle->remember ();
+ widthOfSlider = pHandle->getWidth ();
+ heightOfSlider = pHandle->getHeight ();
+ }
+ else
+ {
+ widthOfSlider = 1;
+ heightOfSlider = 1;
+ }
+
+ widthControl = size.width ();
+ heightControl = size.height ();
+ if (style & kHorizontal)
+ rangeHandle = _rangeHandle - widthOfSlider;
+ else
+ rangeHandle = _rangeHandle - heightOfSlider;
+
+ setOffsetHandle (offsetHandle);
+
+ zoomFactor = 10.f;
+
+ setWantsFocus (true);
+}
+
+//------------------------------------------------------------------------
+CSlider::~CSlider ()
+{
+ if (pHandle)
+ pHandle->forget ();
+}
+
+//------------------------------------------------------------------------
+void CSlider::setOffsetHandle (CPoint &val)
+{
+ offsetHandle = val;
+
+ if (style & kHorizontal)
+ {
+ minTmp = offsetHandle.h + minPos;
+ maxTmp = minTmp + rangeHandle + widthOfSlider;
+ }
+ else
+ {
+ minTmp = offsetHandle.v + minPos;
+ maxTmp = minTmp + rangeHandle + heightOfSlider;
+ }
+}
+
+//-----------------------------------------------------------------------------
+bool CSlider::attached (CView *parent)
+{
+ if (pOScreen)
+ delete pOScreen;
+ #if !MACX
+ pOScreen = new COffscreenContext (getFrame (), widthControl, heightControl, kBlackCColor);
+ #endif
+ return CControl::attached (parent);
+}
+
+//-----------------------------------------------------------------------------
+bool CSlider::removed (CView *parent)
+{
+ if (pOScreen)
+ {
+ delete pOScreen;
+ pOScreen = 0;
+ }
+ return CControl::removed (parent);
+}
+
+//------------------------------------------------------------------------
+void CSlider::draw (CDrawContext *pContext)
+{
+ CDrawContext* drawContext = pOScreen ? pOScreen : pContext;
+
+ #if 1
+ if (pOScreen && bTransparencyEnabled)
+ pOScreen->copyTo (pContext, size);
+ #endif
+ float fValue;
+ if (style & kLeft || style & kTop)
+ fValue = value;
+ else
+ fValue = 1.f - value;
+
+ // (re)draw background
+ CRect rect (0, 0, widthControl, heightControl);
+ if (!pOScreen)
+ rect.offset (size.left, size.top);
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (drawContext, rect, offset);
+ else
+ pBackground->draw (drawContext, rect, offset);
+ }
+
+ // calc new coords of slider
+ CRect rectNew;
+ if (style & kHorizontal)
+ {
+ rectNew.top = offsetHandle.v;
+ rectNew.bottom = rectNew.top + heightOfSlider;
+
+ rectNew.left = offsetHandle.h + (int)(fValue * rangeHandle);
+ rectNew.left = (rectNew.left < minTmp) ? minTmp : rectNew.left;
+
+ rectNew.right = rectNew.left + widthOfSlider;
+ rectNew.right = (rectNew.right > maxTmp) ? maxTmp : rectNew.right;
+ }
+ else
+ {
+ rectNew.left = offsetHandle.h;
+ rectNew.right = rectNew.left + widthOfSlider;
+
+ rectNew.top = offsetHandle.v + (int)(fValue * rangeHandle);
+ rectNew.top = (rectNew.top < minTmp) ? minTmp : rectNew.top;
+
+ rectNew.bottom = rectNew.top + heightOfSlider;
+ rectNew.bottom = (rectNew.bottom > maxTmp) ? maxTmp : rectNew.bottom;
+ }
+ if (!pOScreen)
+ rectNew.offset (size.left, size.top);
+
+ // draw slider at new position
+ if (pHandle)
+ {
+ if (bDrawTransparentEnabled)
+ pHandle->drawTransparent (drawContext, rectNew);
+ else
+ pHandle->draw (drawContext, rectNew);
+ }
+
+ if (pOScreen)
+ pOScreen->copyFrom (pContext, size);
+
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+void CSlider::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+
+ // check if default value wanted
+ if (checkDefaultValue (pContext, button))
+ return;
+
+ // allow left mousebutton only
+ if (!(button & kLButton))
+ return;
+
+ CCoord delta;
+ if (style & kHorizontal)
+ delta = size.left + offsetHandle.h;
+ else
+ delta = size.top + offsetHandle.v;
+ if (!bFreeClick)
+ {
+ float fValue;
+ if (style & kLeft || style & kTop)
+ fValue = value;
+ else
+ fValue = 1.f - value;
+ CCoord actualPos;
+ CRect rect;
+
+ if (style & kHorizontal)
+ {
+ actualPos = offsetHandle.h + (int)(fValue * rangeHandle) + size.left;
+
+ rect.left = actualPos;
+ rect.top = size.top + offsetHandle.v;
+ rect.right = rect.left + widthOfSlider;
+ rect.bottom = rect.top + heightOfSlider;
+
+ if (!where.isInside (rect))
+ return;
+ else
+ delta += where.h - actualPos;
+ }
+ else
+ {
+ actualPos = offsetHandle.v + (int)(fValue * rangeHandle) + size.top;
+
+ rect.left = size.left + offsetHandle.h;
+ rect.top = actualPos;
+ rect.right = rect.left + widthOfSlider;
+ rect.bottom = rect.top + heightOfSlider;
+
+ if (!where.isInside (rect))
+ return;
+ else
+ delta += where.v - actualPos;
+ }
+ }
+ else
+ {
+ if (style & kHorizontal)
+ delta += widthOfSlider / 2 - 1;
+ else
+ delta += heightOfSlider / 2 - 1;
+ }
+
+ float oldVal = value;
+ long oldButton = button;
+
+ // begin of edit parameter
+ beginEdit ();
+
+ while (1)
+ {
+ button = pContext->getMouseButtons ();
+ if (!(button & kLButton))
+ break;
+
+ if ((oldButton != button) && (button & kShift))
+ {
+ oldVal = value;
+ oldButton = button;
+ }
+ else if (!(button & kShift))
+ oldVal = value;
+
+ if (style & kHorizontal)
+ value = (float)(where.h - delta) / (float)rangeHandle;
+ else
+ value = (float)(where.v - delta) / (float)rangeHandle;
+
+ if (style & kRight || style & kBottom)
+ value = 1.f - value;
+
+ if (button & kShift)
+ value = oldVal + ((value - oldVal) / zoomFactor);
+ bounceValue ();
+
+ if (isDirty () && listener)
+ listener->valueChanged (pContext, this);
+
+ getMouseLocation (pContext, where);
+
+ doIdleStuff ();
+ }
+
+ // end of edit parameter
+ endEdit ();
+}
+
+//------------------------------------------------------------------------
+bool CSlider::onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+{
+ if (!bMouseEnabled)
+ return false;
+
+ long buttons = pContext->getMouseButtons ();
+ if (buttons & kShift)
+ value += 0.1f * distance * wheelInc;
+ else
+ value += distance * wheelInc;
+ bounceValue ();
+
+ if (isDirty () && listener)
+ {
+ // begin of edit parameter
+ beginEdit ();
+
+ listener->valueChanged (pContext, this);
+
+ // end of edit parameter
+ endEdit ();
+ }
+
+ return true;
+}
+
+//------------------------------------------------------------------------
+long CSlider::onKeyDown (VstKeyCode& keyCode)
+{
+ switch (keyCode.virt)
+ {
+ case VKEY_UP :
+ case VKEY_RIGHT :
+ case VKEY_DOWN :
+ case VKEY_LEFT :
+ {
+ float distance = 1.f;
+ if (keyCode.virt == VKEY_DOWN || keyCode.virt == VKEY_LEFT)
+ distance = -distance;
+
+ if (keyCode.modifier & MODIFIER_SHIFT)
+ value += 0.1f * distance * wheelInc;
+ else
+ value += distance * wheelInc;
+ bounceValue ();
+
+ if (isDirty () && listener)
+ {
+ // begin of edit parameter
+ beginEdit ();
+
+ listener->valueChanged (0, this);
+
+ // end of edit parameter
+ endEdit ();
+ }
+ } return 1;
+ }
+ return -1;
+}
+
+//------------------------------------------------------------------------
+void CSlider::setHandle (CBitmap *_pHandle)
+{
+ if (pHandle)
+ pHandle->forget ();
+ pHandle = _pHandle;
+ if (pHandle)
+ {
+ pHandle->remember ();
+ widthOfSlider = pHandle->getWidth ();
+ heightOfSlider = pHandle->getHeight ();
+ }
+}
+
+
+//------------------------------------------------------------------------
+// CVerticalSlider
+//------------------------------------------------------------------------
+/*! @class CVerticalSlider
+This is the vertical slider. See CSlider.
+*/
+CVerticalSlider::CVerticalSlider (const CRect &rect, CControlListener *listener, long tag,
+ long iMinPos, // min position in pixel
+ long iMaxPos, // max position in pixel
+ CBitmap *handle, // bitmap of slider
+ CBitmap *background, // bitmap of background
+ CPoint &offset, // offset in the background
+ const long style) // style (kLeft, kRight)
+ : CSlider (rect, listener, tag, iMinPos, iMaxPos, handle, background, offset, style|kVertical)
+{}
+
+//------------------------------------------------------------------------
+CVerticalSlider::CVerticalSlider (const CRect &rect, CControlListener *listener, long tag,
+ CPoint &offsetHandle, // handle offset
+ long rangeHandle, // size of handle range
+ CBitmap *handle, // bitmap of slider
+ CBitmap *background, // bitmap of background
+ CPoint &offset, // offset in the background
+ const long style) // style (kLeft, kRight)
+: CSlider (rect, listener, tag, offsetHandle, rangeHandle, handle, background, offset, style|kVertical)
+{}
+
+
+//------------------------------------------------------------------------
+// CHorizontalSlider
+//------------------------------------------------------------------------
+/*! @class CHorizontalSlider
+This is the horizontal slider. See CSlider.
+*/
+CHorizontalSlider::CHorizontalSlider (const CRect &rect, CControlListener *listener, long tag,
+ long iMinPos, // min Y position in pixel
+ long iMaxPos, // max Y position in pixel
+ CBitmap *handle, // bitmap of slider
+ CBitmap *background, // bitmap of background
+ CPoint &offset, // offset in the background
+ const long style) // style (kLeft, kRight)
+ : CSlider (rect, listener, tag, iMinPos, iMaxPos, handle, background, offset, style|kHorizontal)
+{}
+
+//------------------------------------------------------------------------
+CHorizontalSlider::CHorizontalSlider (const CRect &rect, CControlListener *listener, long tag,
+ CPoint &offsetHandle, // handle offset
+ long rangeHandle, // size of handle range
+ CBitmap *handle, // bitmap of slider
+ CBitmap *background, // bitmap of background
+ CPoint &offset, // offset in the background
+ const long style) // style (kLeft, kRight)
+: CSlider (rect, listener, tag, offsetHandle, rangeHandle, handle, background, offset, style|kHorizontal)
+{}
+
+
+//------------------------------------------------------------------------
+// CSpecialDigit
+//------------------------------------------------------------------------
+/*! @class CSpecialDigit
+Can be used to display a counter with maximum 7 digits.
+All digit have the same size and are stacked in height in the pixmap.
+*/
+CSpecialDigit::CSpecialDigit (const CRect &size,
+ CControlListener *listener,
+ long tag, // tag identifier
+ long dwPos, // actual value
+ long iNumbers, // amount of numbers (max 7)
+ long *xpos, // array of all XPOS
+ long *ypos, // array of all YPOS
+ long width, // width of ONE number
+ long height, // height of ONE number
+ CBitmap *background) // bitmap numbers
+ : CControl (size, listener, tag, background),
+ iNumbers (iNumbers), width (width), height (height)
+{
+ setValue ((float)dwPos); // actual value
+
+ if (iNumbers > 7)
+ iNumbers = 7;
+
+ if (xpos == NULL)
+ {
+ // automatically init xpos/ypos if not provided by caller
+ const int numw = (const int)background->getWidth();
+ int x = (int)size.left;
+ for (long i = 0; i < iNumbers; i++)
+ {
+ this->xpos[i] = x;
+ this->ypos[i] = (long)size.top;
+ x += numw;
+ }
+ }
+ else
+ {
+ // store coordinates of x/y pos of each digit
+ for (long i = 0; i < iNumbers; i++)
+ {
+ this->xpos[i] = xpos[i];
+ this->ypos[i] = ypos[i];
+ }
+ }
+
+ setMax ((float)pow (10., (double)iNumbers) - 1.0f);
+ setMin (0.0f);
+}
+
+//------------------------------------------------------------------------
+CSpecialDigit::~CSpecialDigit ()
+{}
+
+//------------------------------------------------------------------------
+void CSpecialDigit::draw (CDrawContext *pContext)
+{
+ CPoint where;
+ CRect rectDest;
+ long i, j;
+ long dwValue;
+ long one_digit[16];
+
+ if ((long)value >= getMax ())
+ dwValue = (long)getMax ();
+ else if ((long)value < getMin ())
+ dwValue = (long)getMin ();
+ else
+ dwValue = (long)value;
+
+ for (i = 0, j = ((long)getMax () + 1) / 10; i < iNumbers; i++, j /= 10)
+ {
+ one_digit[i] = dwValue / j;
+ dwValue -= (one_digit[i] * j);
+ }
+
+ where.h = 0;
+ for (i = 0; i < iNumbers; i++)
+ {
+ j = one_digit[i];
+ if (j > 9)
+ j = 9;
+
+ rectDest.left = xpos[i];
+ rectDest.top = ypos[i];
+
+ rectDest.right = rectDest.left + width;
+ rectDest.bottom = rectDest.top + height;
+
+ // where = src from bitmap
+ where.v = j * height;
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, rectDest, where);
+ else
+ pBackground->draw (pContext, rectDest, where);
+ }
+ }
+
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+float CSpecialDigit::getNormValue () const
+{
+ float fTemp;
+ fTemp = value / getMax ();
+ if (fTemp > 1.0f)
+ fTemp = 1.0f;
+ else if (fTemp < 0.0f)
+ fTemp = 0.0f;
+
+ return fTemp;
+}
+
+
+//------------------------------------------------------------------------
+// CKickButton
+//------------------------------------------------------------------------
+/*! @class CKickButton
+Define a button with 2 states using 2 subpixmaps.
+One click on it, then the second subpixmap is displayed.
+When the mouse button is relaxed, the first subpixmap is framed.
+*/
+CKickButton::CKickButton (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset)
+: CControl (size, listener, tag, background), offset (offset)
+{
+ heightOfOneImage = size.height ();
+}
+
+//------------------------------------------------------------------------
+CKickButton::CKickButton (const CRect &size, CControlListener *listener, long tag,
+ CCoord heightOfOneImage, // height of one image in pixel
+ CBitmap *background, CPoint &offset)
+: CControl (size, listener, tag, background), offset (offset),
+ heightOfOneImage (heightOfOneImage)
+{}
+
+//------------------------------------------------------------------------
+CKickButton::~CKickButton ()
+{}
+
+//------------------------------------------------------------------------
+void CKickButton::draw (CDrawContext *pContext)
+{
+ CPoint where (offset.h, offset.v);
+
+ bounceValue ();
+
+ if (value)
+ where.v += heightOfOneImage;
+
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size, where);
+ else
+ pBackground->draw (pContext, size, where);
+ }
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+void CKickButton::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+
+ if (!(button & kLButton))
+ return;
+
+ // this simulates a real windows button
+ float fEntryState = value;
+
+ // begin of edit parameter
+ beginEdit ();
+
+ if (pContext->getMouseButtons () == kLButton)
+ {
+ do
+ {
+ if (where.h >= size.left && where.v >= size.top &&
+ where.h <= size.right && where.v <= size.bottom)
+ value = !fEntryState;
+ else
+ value = fEntryState;
+
+ if (isDirty () && listener)
+ listener->valueChanged (pContext, this);
+
+ getMouseLocation (pContext, where);
+
+ doIdleStuff ();
+ }
+ while (pContext->getMouseButtons () == kLButton);
+ }
+ else
+ {
+ value = !value;
+ if (listener)
+ listener->valueChanged (pContext, this);
+ }
+
+ value = 0.0f; // set button to UNSELECTED state
+ if (listener)
+ listener->valueChanged (pContext, this);
+
+ // end of edit parameter
+ endEdit ();
+}
+
+
+//------------------------------------------------------------------------
+class CSplashScreenView : public CView
+{
+public:
+ CSplashScreenView (const CRect& size, CSplashScreen* splashScreen)
+ : CView (size)
+ , splashScreen (splashScreen)
+ {
+ setTransparency (splashScreen->getTransparency ());
+ setBackground (splashScreen->getBackground ());
+ }
+
+ void draw (CDrawContext *pContext)
+ {
+ if (bTransparencyEnabled)
+ {
+ if (splashScreen->getBitmapTransparency ())
+ pBackground->drawAlphaBlend (pContext, size, splashScreen->getOffset (), splashScreen->getBitmapTransparency ());
+ else
+ pBackground->drawTransparent (pContext, size, splashScreen->getOffset ());
+ }
+ else
+ pBackground->draw (pContext, size, splashScreen->getOffset ());
+ setDirty (false);
+ }
+
+ void mouse (CDrawContext *pContext, CPoint &where, long button)
+ {
+ if (button & kLButton)
+ {
+ splashScreen->unSplash (pContext);
+ getFrame ()->setDirty (true);
+ getFrame ()->setModalView (0);
+ forget ();
+ }
+ }
+
+protected:
+ CSplashScreen* splashScreen;
+};
+
+//------------------------------------------------------------------------
+// CSplashScreen
+//------------------------------------------------------------------------
+/*! @class CSplashScreen
+One click on its activated region and its pixmap is displayed, in this state the other control can not be used,
+an another click on the displayed area reinstalls the normal frame.
+This can be used to display a help view over the other views.
+*/
+// one click draw its pixmap, an another click redraw its parent
+CSplashScreen::CSplashScreen (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background,
+ CRect &toDisplay,
+ CPoint &offset)
+: CControl (size, listener, tag, background),
+ toDisplay (toDisplay), offset (offset), bitmapTransparency (255)
+{}
+
+//------------------------------------------------------------------------
+CSplashScreen::~CSplashScreen ()
+{}
+
+//------------------------------------------------------------------------
+void CSplashScreen::setBitmapTransparency (unsigned char transparency)
+{
+ bitmapTransparency = transparency;
+ setTransparency (bitmapTransparency != 255);
+}
+
+//------------------------------------------------------------------------
+void CSplashScreen::draw (CDrawContext *pContext)
+{
+ if (value && pBackground)
+ {
+ if (bTransparencyEnabled)
+ {
+ if (bitmapTransparency)
+ pBackground->drawAlphaBlend (pContext, toDisplay, offset, bitmapTransparency);
+ else
+ pBackground->drawTransparent (pContext, toDisplay, offset);
+ }
+ else
+ pBackground->draw (pContext, toDisplay, offset);
+ }
+ setDirty (false);
+}
+
+//------------------------------------------------------------------------
+bool CSplashScreen::hitTest (const CPoint& where, const long buttons)
+{
+ bool result = CView::hitTest (where, buttons);
+ if (result && !(buttons & kLButton))
+ return false;
+ return result;
+}
+
+//------------------------------------------------------------------------
+void CSplashScreen::mouse (CDrawContext *pContext, CPoint &where, long button)
+{
+ if (!bMouseEnabled)
+ return;
+
+ if (button == -1) button = pContext->getMouseButtons ();
+
+ if (listener && button & (kAlt | kShift | kControl | kApple))
+ {
+ if (listener->controlModifierClicked (pContext, this, button) != 0)
+ return;
+ }
+
+ if (!(button & kLButton))
+ return;
+
+ value = !value;
+ if (value)
+ {
+ CSplashScreenView* ssv = new CSplashScreenView (toDisplay, this);
+ if (getFrame () && getFrame ()->setModalView (ssv))
+ {
+// keepSize = size;
+// size = toDisplay;
+// mouseableArea = size;
+ if (listener)
+ listener->valueChanged (pContext, this);
+ }
+ setDirty ();
+ }
+// else
+// {
+// size = keepSize;
+// mouseableArea = size;
+// if (listener)
+// listener->valueChanged (pContext, this);
+// if (getFrame ())
+// {
+// getFrame ()->setDirty (true);
+// getFrame ()->setModalView (NULL);
+// }
+// }
+}
+
+//------------------------------------------------------------------------
+void CSplashScreen::unSplash (CDrawContext* pContext)
+{
+// setDirty ();
+// value = 0.f;
+//
+// size = keepSize;
+// if (getFrame ())
+// {
+// if (getFrame ()->getModalView () == this)
+// {
+// getFrame ()->setModalView (NULL);
+// getFrame ()->redraw ();
+// }
+// }
+ if (value)
+ {
+ value = 0;
+ if (listener)
+ listener->valueChanged (pContext, this);
+ }
+}
+
+//------------------------------------------------------------------------
+// CVuMeter
+//------------------------------------------------------------------------
+CVuMeter::CVuMeter (const CRect &size, CBitmap *onBitmap, CBitmap *offBitmap,
+ long nbLed, const long style)
+ : CControl (size, 0, 0),
+ onBitmap (onBitmap), offBitmap (offBitmap), pOScreen (0),
+ nbLed (nbLed), style (style)
+{
+ setDecreaseStepValue (0.1f);
+
+#if WINDOWS && !USE_LIBPNG
+ setUseOffscreen (true);
+#endif
+
+ if (onBitmap)
+ onBitmap->remember ();
+ if (offBitmap)
+ offBitmap->remember ();
+
+ rectOn (size.left, size.top, size.right, size.bottom);
+ rectOff (size.left, size.top, size.right, size.bottom);
+}
+
+//------------------------------------------------------------------------
+CVuMeter::~CVuMeter ()
+{
+ if (onBitmap)
+ onBitmap->forget ();
+ if (offBitmap)
+ offBitmap->forget ();
+}
+
+//------------------------------------------------------------------------
+void CVuMeter::setDirty (const bool val)
+{
+ CView::setDirty (val);
+}
+
+//-----------------------------------------------------------------------------
+bool CVuMeter::attached (CView *parent)
+{
+ if (pOScreen)
+ delete pOScreen;
+
+ if (bUseOffscreen)
+ {
+ pOScreen = new COffscreenContext (getFrame (), (long)size.width (), (long)size.height (), kBlackCColor);
+ rectOn (0, 0, size.width (), size.height ());
+ rectOff (0, 0, size.width (), size.height ());
+ }
+ else
+ {
+ rectOn (size.left, size.top, size.right, size.bottom);
+ rectOff (size.left, size.top, size.right, size.bottom);
+ }
+
+ return CControl::attached (parent);
+}
+
+//------------------------------------------------------------------------
+void CVuMeter::setUseOffscreen (bool val)
+{
+ bUseOffscreen = val;
+}
+
+//-----------------------------------------------------------------------------
+bool CVuMeter::removed (CView *parent)
+{
+ if (pOScreen)
+ {
+ delete pOScreen;
+ pOScreen = 0;
+ }
+ return CControl::removed (parent);
+}
+
+//------------------------------------------------------------------------
+void CVuMeter::draw (CDrawContext *_pContext)
+{
+ if (!onBitmap)
+ return;
+
+ CPoint pointOn;
+ CPoint pointOff;
+ CDrawContext *pContext = _pContext;
+
+ bounceValue ();
+
+ float newValue = oldValue - decreaseValue;
+ if (newValue < value)
+ newValue = value;
+ oldValue = newValue;
+
+ if (bUseOffscreen)
+ {
+ if (!pOScreen)
+ {
+ pOScreen = new COffscreenContext (getFrame (), (long)size.width (), (long)size.height (), kBlackCColor);
+ rectOn (0, 0, size.width (), size.height ());
+ rectOff (0, 0, size.width (), size.height ());
+ }
+ pContext = pOScreen;
+ }
+
+ if (style & kHorizontal)
+ {
+ CCoord tmp = (long)(((long)(nbLed * newValue + 0.5f) / (float)nbLed) * onBitmap->getWidth ());
+ pointOff (tmp, 0);
+ if (!bUseOffscreen)
+ tmp += size.left;
+
+ rectOff.left = tmp;
+ rectOn.right = tmp;
+ }
+ else
+ {
+ CCoord tmp = (long)(((long)(nbLed * (getMax () - newValue) + 0.5f) / (float)nbLed) * onBitmap->getHeight ());
+ pointOn (0, tmp);
+ if (!bUseOffscreen)
+ tmp += size.top;
+
+ rectOff.bottom = tmp;
+ rectOn.top = tmp;
+ }
+
+ if (offBitmap)
+ {
+ if (bTransparencyEnabled)
+ offBitmap->drawTransparent (pContext, rectOff, pointOff);
+ else
+ offBitmap->draw (pContext, rectOff, pointOff);
+ }
+
+ if (bTransparencyEnabled)
+ onBitmap->drawTransparent (pContext, rectOn, pointOn);
+ else
+ onBitmap->draw (pContext, rectOn, pointOn);
+
+ if (pOScreen)
+ pOScreen->copyFrom (_pContext, size);
+ setDirty (false);
+}
+
+END_NAMESPACE_VSTGUI
+//------------------------------------------------------------------------
+// END.
+//------------------------------------------------------------------------
diff --git a/vstgui.sf/vstgui/vstcontrols.h b/vstgui.sf/vstgui/vstcontrols.h
new file mode 100644
index 0000000..515cafc
--- /dev/null
+++ b/vstgui.sf/vstgui/vstcontrols.h
@@ -0,0 +1,996 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins :
+// Standard Control Objects
+//
+// Version 3.0 $Date: 2006/02/08 17:29:59 $
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __vstcontrols__
+#define __vstcontrols__
+
+#ifndef __vstgui__
+#include "vstgui.h"
+#endif
+
+//------------------
+// defines
+//------------------
+#ifndef kPI
+#define kPI 3.14159265358979323846
+#endif
+
+#ifndef k2PI
+#define k2PI 6.28318530717958647692
+#endif
+
+#ifndef kPI_2
+#define kPI_2 1.57079632679489661923f
+#endif
+
+#ifndef kPI_4
+#define kPI_4 0.78539816339744830962
+#endif
+
+#ifndef kE
+#define kE 2.7182818284590452354
+#endif
+
+#ifndef kLN2
+#define kLN2 0.69314718055994530942
+#endif
+
+#ifndef kSQRT2
+#define kSQRT2 1.41421356237309504880
+#endif
+
+//------------------
+// CControlEnum type
+//------------------
+enum CControlEnum
+{
+ kHorizontal = 1 << 0,
+ kVertical = 1 << 1,
+ kShadowText = 1 << 2,
+ kLeft = 1 << 3,
+ kRight = 1 << 4,
+ kTop = 1 << 5,
+ kBottom = 1 << 6,
+ k3DIn = 1 << 7,
+ k3DOut = 1 << 8,
+ kPopupStyle = 1 << 9,
+ kCheckStyle = 1 << 10,
+ kMultipleCheckStyle,
+ kNoTextStyle = 1 << 11,
+ kNoDrawStyle = 1 << 12,
+ kDoubleClickStyle = 1 << 13,
+ kNoFrame = 1 << 14
+};
+
+//---------------------------
+// Some defines for Menu item
+//---------------------------
+#define kMenuTitle "-T"
+#define kMenuSeparator "-"
+#define kMenuDisable "-G"
+#define kMenuSubMenu "-M"
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+class CControlListener
+{
+public:
+ #if USE_NAMESPACE
+ virtual void valueChanged (VSTGUI::CDrawContext *pContext, VSTGUI::CControl *pControl) = 0;
+ virtual long controlModifierClicked (VSTGUI::CDrawContext *pContext, VSTGUI::CControl *pControl, long button) { return 0; } // return 1 if you want the control to not handle it, otherwise 0
+ #else
+ virtual void valueChanged (CDrawContext *pContext, CControl *pControl) = 0;
+ virtual long controlModifierClicked (CDrawContext *pContext, CControl *pControl, long button) { return 0; } // return 1 if you want the control to not handle it, otherwise 0
+ #endif
+};
+
+class AudioEffectX;
+
+//-----------------------------------------------------------------------------
+BEGIN_NAMESPACE_VSTGUI
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// CControl Declaration
+//! base class of all VSTGUI controls
+//-----------------------------------------------------------------------------
+class CControl : public CView
+{
+public:
+ CControl (const CRect &size, CControlListener *listener = 0, long tag = 0,
+ CBitmap *pBackground = 0);
+ virtual ~CControl ();
+
+ virtual void draw (CDrawContext *pContext) = 0;
+ virtual void doIdleStuff () { if (pParentFrame) pParentFrame->doIdleStuff (); }
+
+ virtual void setValue (float val) { value = val; }
+ virtual float getValue () const { return value; };
+
+ virtual void setMin (float val) { vmin = val; }
+ virtual float getMin () const { return vmin; }
+ virtual void setMax (float val) { vmax = val; }
+ virtual float getMax () const { return vmax; }
+
+ virtual void setOldValue (float val) { oldValue = val; }
+ virtual float getOldValue (void) const { return oldValue; }
+ virtual void setDefaultValue (float val) { defaultValue = val; }
+ virtual float getDefaultValue (void) const { return defaultValue; }
+
+ virtual void setTag (long val) { tag = val; }
+ virtual long getTag () const { return tag; }
+
+ virtual bool isDirty () const;
+ virtual void setDirty (const bool val = true);
+
+ virtual void beginEdit ();
+ virtual void endEdit ();
+
+ virtual void setBackOffset (CPoint &offset);
+ virtual void copyBackOffset ();
+
+ virtual void setWheelInc (float val) { wheelInc = val; }
+ virtual float getWheelInc () const { return wheelInc; }
+
+ virtual void bounceValue ();
+ virtual bool checkDefaultValue (CDrawContext *pContext, long button);
+
+ CControlListener* getListener () const { return listener; }
+ void setListener (CControlListener* l) { listener = l; }
+ bool isDoubleClick ();
+
+ CLASS_METHODS(CControl, CView)
+
+protected:
+ CControlListener *listener;
+ long tag;
+ float oldValue;
+ float defaultValue;
+ float value;
+ float vmin;
+ float vmax;
+ float wheelInc;
+
+ long lastTicks;
+ long delta;
+
+ CPoint backOffset;
+};
+
+
+//-----------------------------------------------------------------------------
+// COnOffButton Declaration
+//! a button control with 2 states
+//-----------------------------------------------------------------------------
+class COnOffButton : public CControl
+{
+public:
+ COnOffButton (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, long style = kPreListenerUpdate);
+ virtual ~COnOffButton ();
+
+ virtual void draw (CDrawContext*);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+
+ virtual long getStyle () const { return style; }
+ virtual void setStyle (long newStyle) { style = newStyle; }
+
+ enum {
+ kPreListenerUpdate, ///< listener will be called after doIdleStuff was called
+ kPostListenerUpdate, ///< listener will be called before doIdleStuff is called
+ };
+
+ CLASS_METHODS(COnOffButton, CControl)
+protected:
+ long style;
+};
+
+
+//-----------------------------------------------------------------------------
+// CParamDisplay Declaration
+//! a parameter display control
+//-----------------------------------------------------------------------------
+class CParamDisplay : public CControl
+{
+public:
+ CParamDisplay (const CRect &size, CBitmap *background = 0, const long style = 0);
+ virtual ~CParamDisplay ();
+
+ virtual void setFont (CFont fontID);
+ CFont getFont () const { return fontID; }
+
+ virtual void setFontColor (CColor color);
+ CColor getFontColor () const { return fontColor; }
+
+ virtual void setBackColor (CColor color);
+ CColor getBackColor () const { return backColor; }
+
+ virtual void setFrameColor (CColor color);
+ CColor getFrameColor () const { return frameColor; }
+
+ virtual void setShadowColor (CColor color);
+ CColor getShadowColor () const { return shadowColor; }
+
+ virtual void setHoriAlign (CHoriTxtAlign hAlign);
+
+ virtual void setStringConvert (void (*convert) (float value, char *string));
+ virtual void setStringConvert (void (*convert) (float value, char *string, void *userDta),
+ void *userData);
+ virtual void setString2FloatConvert (void (*convert) (char *string, float &output));
+
+ virtual void setStyle (long val);
+ long getStyle () const { return style; }
+
+ virtual void setTxtFace (CTxtFace val);
+ CTxtFace getTxtFace () const { return txtFace; }
+
+ virtual void draw (CDrawContext *pContext);
+
+ virtual void setTextTransparency (bool val) { bTextTransparencyEnabled = val; }
+ bool getTextTransparency () const { return bTextTransparencyEnabled; }
+
+ CLASS_METHODS(CParamDisplay, CControl)
+
+protected:
+ void drawText (CDrawContext *pContext, char *string, CBitmap *newBack = 0);
+
+ void (*stringConvert) (float value, char *string);
+ void (*stringConvert2) (float value, char *string, void *userData);
+ void (*string2FloatConvert) (char *string, float &output);
+ void *userData;
+
+ CHoriTxtAlign horiTxtAlign;
+ long style;
+
+ CFont fontID;
+ CTxtFace txtFace;
+ CColor fontColor;
+ CColor backColor;
+ CColor frameColor;
+ CColor shadowColor;
+ bool bTextTransparencyEnabled;
+};
+
+
+//-----------------------------------------------------------------------------
+// CLabel Declaration
+//! a text label
+//-----------------------------------------------------------------------------
+class CTextLabel : public CParamDisplay
+{
+public:
+ CTextLabel (const CRect& size, const char* txt = 0, CBitmap* background = 0, const long style = 0);
+ ~CTextLabel ();
+
+ virtual void setText (const char* txt);
+ virtual const char* getText () const;
+
+ virtual void draw (CDrawContext *pContext);
+
+ CLASS_METHODS(CTextLabel, CParamDisplay)
+
+protected:
+ void freeText ();
+ char* text;
+};
+
+//-----------------------------------------------------------------------------
+// CTextEdit Declaration
+//! a text edit control
+//-----------------------------------------------------------------------------
+class CTextEdit : public CParamDisplay
+{
+public:
+ CTextEdit (const CRect &size, CControlListener *listener, long tag, const char *txt = 0,
+ CBitmap *background = 0, const long style = 0);
+ virtual ~CTextEdit ();
+
+ virtual void setText (char *txt);
+ virtual void getText (char *txt) const;
+
+ virtual void draw (CDrawContext *pContext);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+
+ virtual void setTextEditConvert (void (*editConvert) (char *input, char *string));
+ virtual void setTextEditConvert (void (*editConvert2) (char *input, char *string,
+ void *userDta), void *userData);
+
+ virtual void takeFocus (CDrawContext *pContext = 0);
+ virtual void looseFocus (CDrawContext *pContext = 0);
+
+ void *platformFontColor;
+ void *platformControl;
+ bool bWasReturnPressed;
+ #if MAC
+ short pluginResID;
+ #if QUARTZ
+ HIViewRef textControl;
+ #endif
+ #endif
+
+ CLASS_METHODS(CTextEdit, CParamDisplay)
+
+protected:
+ void *platformFont;
+ char text[256];
+
+#if (MAC && !MACX)
+ void *text_edit;
+ bool bLoosefocusWanted;
+#endif
+
+ void (*editConvert) (char *input, char *string);
+ void (*editConvert2) (char *input, char *string, void *userData);
+};
+
+
+//-----------------------------------------------------------------------------
+// COptionMenuScheme Declaration
+//-----------------------------------------------------------------------------
+class COptionMenuScheme : public CReferenceCounter
+{
+public:
+ COptionMenuScheme ();
+ virtual ~COptionMenuScheme ();
+
+ enum { kChecked = 0x01, kDisabled = 0x02, kSelected = 0x04, kSubMenu = 0x08, kTitle = 0x10 };
+
+ virtual void getItemSize (const char* text, CDrawContext* pContext, CPoint& size);
+ virtual void drawItem (const char* text, long itemId, long state, CDrawContext* pContext, const CRect& rect);
+
+ void setColors (CColor back, CColor select, CColor text, CColor htext, CColor dtext)
+ { backgroundColor = back; selectionColor = select; textColor = text;
+ hiliteTextColor = htext; disableTextColor = dtext;}
+
+ void setFont (CFont f) { font = f; }
+protected:
+
+ CColor backgroundColor;
+ CColor selectionColor;
+ CColor textColor;
+ CColor hiliteTextColor;
+ CColor disableTextColor;
+ CFont font;
+
+ virtual void drawItemBack (CDrawContext* pContext, const CRect& rect, bool hilite);
+
+ #if MAC_ENABLE_MENU_SCHEME
+ static pascal OSStatus eventHandler (EventHandlerCallRef inCallRef, EventRef inEvent, void *inUserData);
+ void registerWithToolbox ();
+ void unregisterWithToolbox ();
+ #endif
+};
+
+//-----------------------------------------------------------------------------
+extern COptionMenuScheme* gOptionMenuScheme;
+
+//-----------------------------------------------------------------------------
+// COptionMenu Declaration
+//! a popup menu control
+//-----------------------------------------------------------------------------
+class COptionMenu : public CParamDisplay
+{
+public:
+ COptionMenu (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background = 0, CBitmap *bgWhenClick = 0,
+ const long style = 0);
+ virtual ~COptionMenu ();
+
+ enum { MAX_ENTRY = 1024 };
+
+ virtual void setValue (float val);
+ virtual bool addEntry (COptionMenu *subMenu, char *txt);
+ virtual bool addEntry (char *txt, long index = -1);
+ virtual long getCurrent (char *txt = 0, bool countSeparator = true) const;
+ virtual bool setCurrent (long index, bool countSeparator = true);
+ virtual bool getEntry (long index, char *txt) const;
+ virtual bool setEntry (long index, char *txt);
+ virtual bool removeEntry (long index);
+ virtual bool removeAllEntry ();
+ virtual long getNbEntries () const { return nbEntries; }
+ virtual long getIndex (char *txt) const;
+
+ virtual bool checkEntry (long index, bool state);
+ virtual bool checkEntryAlone (long index);
+ virtual bool isCheckEntry (long index) const;
+
+ virtual void draw (CDrawContext *pContext);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+
+ virtual void takeFocus (CDrawContext *pContext = 0);
+ virtual void looseFocus (CDrawContext *pContext = 0);
+
+ virtual void setNbItemsPerColumn (long val) { nbItemsPerColumn = val; }
+ virtual long getNbItemsPerColumn () const { return nbItemsPerColumn; }
+
+#if MOTIF
+ void setCurrentSelected (void *itemSelected);
+#elif MAC
+ short getMenuID () const { return menuID; }
+#endif
+
+ long getLastResult () const { return lastResult; }
+ COptionMenu *getLastItemMenu (long &idxInMenu) const;
+
+ void setScheme (COptionMenuScheme* s) { scheme = s; }
+ virtual COptionMenuScheme* getScheme () const { return scheme; }
+
+ virtual void setPrefixNumbers (long preCount);
+
+ COptionMenu* getSubMenu (long idx) const;
+
+ CLASS_METHODS(COptionMenu, CParamDisplay)
+
+protected:
+ COptionMenu *getItemMenu (long idx, long &idxInMenu, long &offsetIdx);
+ void removeItems ();
+ void *appendItems (long &offsetIdx);
+
+ void *platformControl;
+
+ bool allocateMenu (long nb);
+ bool allocateSubMenu (long nb);
+
+ char **entry;
+ COptionMenu **submenuEntry;
+ bool *check;
+
+#if MOTIF
+ void *itemWidget[MAX_ENTRY];
+#elif MAC
+ short menuID;
+#endif
+
+ long nbEntries;
+ long nbSubMenus;
+ long currentIndex;
+ CBitmap *bgWhenClick;
+ long lastButton;
+ long nbItemsPerColumn;
+ long nbAllocated;
+ long nbSubMenuAllocated;
+ long lastResult;
+ long prefixNumbers;
+ COptionMenu *lastMenu;
+ COptionMenuScheme* scheme;
+};
+
+
+//-----------------------------------------------------------------------------
+// CKnob Declaration
+//! a knob control
+//-----------------------------------------------------------------------------
+class CKnob : public CControl
+{
+public:
+ CKnob (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CBitmap *handle, const CPoint &offset);
+ virtual ~CKnob ();
+
+ virtual void draw (CDrawContext *pContext);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+ virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance);
+ virtual long onKeyDown (VstKeyCode& keyCode);
+
+ virtual void drawHandle (CDrawContext *pContext);
+
+ virtual void setStartAngle (float val);
+ virtual float getStartAngle () const { return startAngle; }
+
+ virtual void setRangeAngle (float val);
+ virtual float getRangeAngle () const { return rangeAngle; }
+
+ virtual void valueToPoint (CPoint &point) const;
+ virtual float valueFromPoint (CPoint &point) const;
+
+ virtual void setInsetValue (long val) { inset = val; }
+
+ virtual void setColorShadowHandle (CColor color);
+ virtual void setColorHandle (CColor color);
+
+ virtual void setHandleBitmap (CBitmap *bitmap);
+
+ virtual void setZoomFactor (float val) { zoomFactor = val; }
+ virtual float getZoomFactor () const { return zoomFactor; }
+
+ CLASS_METHODS(CKnob, CControl)
+
+protected:
+ void compute ();
+
+ CPoint offset;
+ CColor colorHandle, colorShadowHandle;
+
+ CBitmap *pHandle;
+ long inset;
+ float startAngle, rangeAngle, halfAngle;
+ float aCoef, bCoef;
+ float radius;
+ float zoomFactor;
+};
+
+//-----------------------------------------------------------------------------
+// CAnimKnob Declaration
+//! a bitmap knob control
+//-----------------------------------------------------------------------------
+class CAnimKnob : public CKnob
+{
+public:
+ CAnimKnob (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset);
+ CAnimKnob (const CRect &size, CControlListener *listener, long tag,
+ long subPixmaps, // number of subPixmaps
+ CCoord heightOfOneImage, // pixel
+ CBitmap *background, CPoint &offset);
+ virtual ~CAnimKnob ();
+
+ virtual bool isDirty () const;
+
+ virtual void draw (CDrawContext* pContext);
+
+ void setInverseBitmap (bool val) { bInverseBitmap = val; }
+
+ CLASS_METHODS(CAnimKnob, CKnob)
+
+protected:
+ long subPixmaps; // number of subPixmaps
+ CCoord heightOfOneImage;
+ bool bInverseBitmap;
+ CPoint lastDrawnPoint;
+};
+
+//-----------------------------------------------------------------------------
+// CVerticalSwitch Declaration
+//! a vertical switch control
+//-----------------------------------------------------------------------------
+class CVerticalSwitch : public CControl
+{
+public:
+ CVerticalSwitch (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset);
+ CVerticalSwitch (const CRect &size, CControlListener *listener, long tag,
+ long subPixmaps, // number of subPixmaps
+ CCoord heightOfOneImage, // pixel
+ long iMaxPositions,
+ CBitmap *background, CPoint &offset);
+ virtual ~CVerticalSwitch ();
+
+ virtual void draw (CDrawContext*);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+
+ CLASS_METHODS(CVerticalSwitch, CControl)
+
+protected:
+ CPoint offset;
+ long subPixmaps; // number of subPixmaps
+ CCoord heightOfOneImage;
+ long iMaxPositions;
+};
+
+
+//-----------------------------------------------------------------------------
+// CHorizontalSwitch Declaration
+//! a horizontal switch control
+//-----------------------------------------------------------------------------
+class CHorizontalSwitch : public CControl
+{
+public:
+ CHorizontalSwitch (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset);
+ CHorizontalSwitch (const CRect &size, CControlListener *listener, long tag,
+ long subPixmaps, // number of subPixmaps
+ CCoord heightOfOneImage, // pixel
+ long iMaxPositions,
+ CBitmap *background, CPoint &offset);
+ virtual ~CHorizontalSwitch ();
+
+ virtual void draw (CDrawContext*);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+
+ CLASS_METHODS(CHorizontalSwitch, CControl)
+
+protected:
+ CPoint offset;
+ long subPixmaps; // number of subPixmaps
+ long iMaxPositions;
+ CCoord heightOfOneImage;
+};
+
+
+//-----------------------------------------------------------------------------
+// CRockerSwitch Declaration
+//! a switch control with 3 sub bitmaps
+//-----------------------------------------------------------------------------
+class CRockerSwitch : public CControl
+{
+public:
+ CRockerSwitch (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset, const long style = kHorizontal);
+ CRockerSwitch (const CRect &size, CControlListener *listener, long tag,
+ CCoord heightOfOneImage, // pixel
+ CBitmap *background, CPoint &offset, const long style = kHorizontal);
+ virtual ~CRockerSwitch ();
+
+ virtual void draw (CDrawContext*);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+ virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance);
+
+ CLASS_METHODS(CRockerSwitch, CControl)
+
+protected:
+ CPoint offset;
+ CCoord heightOfOneImage;
+ long style;
+};
+
+
+//-----------------------------------------------------------------------------
+// CMovieBitmap Declaration
+//! a bitmap control that displays different bitmaps according to its current value
+//-----------------------------------------------------------------------------
+class CMovieBitmap : public CControl
+{
+public:
+ CMovieBitmap (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset);
+ CMovieBitmap (const CRect &size, CControlListener *listener, long tag,
+ long subPixmaps, // number of subPixmaps
+ CCoord heightOfOneImage, // pixel
+ CBitmap *background, CPoint &offset);
+ virtual ~CMovieBitmap ();
+
+ virtual void draw (CDrawContext*);
+
+ CLASS_METHODS(CMovieBitmap, CControl)
+
+protected:
+ CPoint offset;
+ long subPixmaps; // number of subPixmaps
+ CCoord heightOfOneImage;
+};
+
+
+//-----------------------------------------------------------------------------
+// CMovieButton Declaration
+//! a bi-states button with 2 subbitmaps
+//-----------------------------------------------------------------------------
+class CMovieButton : public CControl
+{
+public:
+ CMovieButton (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset);
+ CMovieButton (const CRect &size, CControlListener *listener, long tag,
+ CCoord heightOfOneImage, // pixel
+ CBitmap *background, CPoint &offset);
+ virtual ~CMovieButton ();
+
+ virtual void draw (CDrawContext*);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+
+ CLASS_METHODS(CMovieButton, CControl)
+
+protected:
+ CPoint offset;
+ CCoord heightOfOneImage;
+ float buttonState;
+};
+
+
+//-----------------------------------------------------------------------------
+// CAutoAnimation Declaration
+//!
+//-----------------------------------------------------------------------------
+class CAutoAnimation : public CControl
+{
+public:
+ CAutoAnimation (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset);
+ CAutoAnimation (const CRect &size, CControlListener *listener, long tag,
+ long subPixmaps, // number of subPixmaps...
+ CCoord heightOfOneImage, // pixel
+ CBitmap *background, CPoint &offset);
+ virtual ~CAutoAnimation ();
+
+ virtual void draw (CDrawContext*);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+
+ virtual void openWindow (void);
+ virtual void closeWindow (void);
+
+ virtual void nextPixmap (void);
+ virtual void previousPixmap (void);
+
+ bool isWindowOpened () const { return bWindowOpened; }
+
+ CLASS_METHODS(CAutoAnimation, CControl)
+
+protected:
+ CPoint offset;
+
+ long subPixmaps;
+ CCoord heightOfOneImage;
+ CCoord totalHeightOfBitmap;
+
+ bool bWindowOpened;
+};
+
+
+//-----------------------------------------------------------------------------
+// CSlider Declaration
+//! a slider control
+//-----------------------------------------------------------------------------
+class CSlider : public CControl
+{
+public:
+ CSlider (const CRect &size, CControlListener *listener, long tag,
+ long iMinPos, // min position in pixel
+ long iMaxPos, // max position in pixel
+ CBitmap *handle, // handle bitmap
+ CBitmap *background, // background bitmap
+ CPoint &offset, // offset in the background
+ const long style = kLeft|kHorizontal); // style (kBottom,kRight,kTop,kLeft,kHorizontal,kVertical)
+
+ CSlider (const CRect &rect, CControlListener *listener, long tag,
+ CPoint &offsetHandle, // handle offset
+ long rangeHandle, // size of handle range
+ CBitmap *handle, // handle bitmap
+ CBitmap *background, // background bitmap
+ CPoint &offset, // offset in the background
+ const long style = kLeft|kHorizontal); // style (kBottom,kRight,kTop,kLeft,kHorizontal,kVertical)
+
+ virtual ~CSlider ();
+
+ virtual bool attached (CView *parent);
+ virtual bool removed (CView *parent);
+ virtual void draw (CDrawContext*);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+ virtual bool onWheel (CDrawContext *pContext, const CPoint &where, float distance);
+ virtual long onKeyDown (VstKeyCode& keyCode);
+
+ virtual void setDrawTransparentHandle (bool val) { bDrawTransparentEnabled = val; }
+ virtual void setFreeClick (bool val) { bFreeClick = val; }
+ virtual bool getFreeClick () const { return bFreeClick; }
+ virtual void setOffsetHandle (CPoint &val);
+
+ virtual void setHandle (CBitmap* pHandle);
+ virtual CBitmap *getHandle () const { return pHandle; }
+
+ virtual void setZoomFactor (float val) { zoomFactor = val; }
+ virtual float getZoomFactor () const { return zoomFactor; }
+
+ CLASS_METHODS(CSlider, CControl)
+
+protected:
+ CPoint offset;
+ CPoint offsetHandle;
+
+ CBitmap *pHandle;
+ COffscreenContext *pOScreen;
+
+ long style;
+
+ CCoord widthOfSlider; // size of the handle-slider
+ CCoord heightOfSlider;
+ CCoord rangeHandle;
+ CCoord minTmp;
+ CCoord maxTmp;
+ CCoord minPos;
+ CCoord widthControl;
+ CCoord heightControl;
+ float zoomFactor;
+
+ bool bDrawTransparentEnabled;
+ bool bFreeClick;
+};
+
+//-----------------------------------------------------------------------------
+// CVerticalSlider Declaration
+//! a vertical slider control
+//-----------------------------------------------------------------------------
+class CVerticalSlider : public CSlider
+{
+public:
+ CVerticalSlider (const CRect &size, CControlListener *listener, long tag,
+ long iMinPos, // min Y position in pixel
+ long iMaxPos, // max Y position in pixel
+ CBitmap *handle, // bitmap slider
+ CBitmap *background, // bitmap background
+ CPoint &offset, // offset in the background
+ const long style = kBottom); // style (kBottom, kTop))
+
+ CVerticalSlider (const CRect &rect, CControlListener *listener, long tag,
+ CPoint &offsetHandle, // handle offset
+ long rangeHandle, // size of handle range
+ CBitmap *handle, // bitmap of slider
+ CBitmap *background, // bitmap of background
+ CPoint &offset, // offset in the background
+ const long style = kBottom); // style (kBottom, kTop)
+};
+
+//-----------------------------------------------------------------------------
+// CHorizontalSlider Declaration
+//! a horizontal slider control
+//-----------------------------------------------------------------------------
+class CHorizontalSlider : public CSlider
+{
+public:
+ CHorizontalSlider (const CRect &size, CControlListener *listener, long tag,
+ long iMinPos, // min X position in pixel
+ long iMaxPos, // max X position in pixel
+ CBitmap *handle, // bitmap slider
+ CBitmap *background, // bitmap background
+ CPoint &offset, // offset in the background
+ const long style = kRight); // style (kRight, kLeft)
+
+ CHorizontalSlider (const CRect &rect, CControlListener *listener, long tag,
+ CPoint &offsetHandle, // handle offset
+ long rangeHandle, // size of handle range
+ CBitmap *handle, // bitmap of slider
+ CBitmap *background, // bitmap of background
+ CPoint &offset, // offset in the background
+ const long style = kRight); // style (kRight, kLeft)
+};
+
+
+//-----------------------------------------------------------------------------
+// CSpecialDigit Declaration
+//! special display with custom numbers (0...9)
+//-----------------------------------------------------------------------------
+class CSpecialDigit : public CControl
+{
+public:
+ CSpecialDigit (const CRect &size, CControlListener *listener, long tag, // tag identifier
+ long dwPos, // actual value
+ long iNumbers, // amount of numbers (max 7)
+ long *xpos, // array of all XPOS
+ long *ypos, // array of all YPOS
+ long width, // width of ONE number
+ long height, // height of ONE number
+ CBitmap *background); // bitmap numbers
+ virtual ~CSpecialDigit ();
+
+ virtual void draw (CDrawContext*);
+
+ virtual float getNormValue (void) const;
+
+ CLASS_METHODS(CSpecialDigit, CControl)
+
+protected:
+ long iNumbers; // amount of numbers
+ long xpos[7]; // array of all XPOS, max 7 possible
+ long ypos[7]; // array of all YPOS, max 7 possible
+ long width; // width of ONE number
+ long height; // height of ONE number
+};
+
+
+//-----------------------------------------------------------------------------
+// CKickButton Declaration
+//!
+//-----------------------------------------------------------------------------
+class CKickButton : public CControl
+{
+public:
+ CKickButton (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background, CPoint &offset);
+ CKickButton (const CRect &size, CControlListener *listener, long tag,
+ CCoord heightOfOneImage, // pixel
+ CBitmap *background, CPoint &offset);
+ virtual ~CKickButton ();
+
+ virtual void draw (CDrawContext*);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+
+ CLASS_METHODS(CKickButton, CControl)
+
+protected:
+ CPoint offset;
+ CCoord heightOfOneImage;
+};
+
+
+//-----------------------------------------------------------------------------
+// CSplashScreen Declaration
+//!
+//-----------------------------------------------------------------------------
+class CSplashScreen : public CControl
+{
+public:
+ CSplashScreen (const CRect &size, CControlListener *listener, long tag,
+ CBitmap *background,
+ CRect &toDisplay,
+ CPoint &offset);
+ virtual ~CSplashScreen ();
+
+ virtual void draw (CDrawContext*);
+ virtual bool hitTest (const CPoint& where, const long buttons = -1);
+ virtual void mouse (CDrawContext *pContext, CPoint &where, long button = -1);
+ virtual void unSplash (CDrawContext *pContext = 0);
+
+ void setBitmapTransparency (unsigned char transparency);
+ unsigned char getBitmapTransparency () const { return bitmapTransparency; }
+
+ const CPoint& getOffset () const { return offset; }
+
+ CLASS_METHODS(CSplashScreen, CControl)
+
+protected:
+ CRect toDisplay;
+ CRect keepSize;
+ CPoint offset;
+ unsigned char bitmapTransparency;
+};
+
+
+//-----------------------------------------------------------------------------
+// CVuMeter Declaration
+//!
+//-----------------------------------------------------------------------------
+class CVuMeter : public CControl
+{
+public:
+ CVuMeter (const CRect& size, CBitmap *onBitmap, CBitmap *offBitmap,
+ long nbLed, const long style = kVertical);
+ virtual ~CVuMeter ();
+
+ virtual void setDecreaseStepValue (float value) { decreaseValue = value; }
+
+ virtual bool attached (CView *parent);
+ virtual bool removed (CView *parent);
+ virtual void draw (CDrawContext *pContext);
+ virtual void setDirty (const bool val = true);
+
+ void setUseOffscreen (bool val = true);
+ bool getUseOffscreen () const { return bUseOffscreen; }
+
+ CLASS_METHODS(CVuMeter, CControl)
+
+protected:
+ CBitmap *onBitmap;
+ CBitmap *offBitmap;
+ COffscreenContext *pOScreen;
+
+ long nbLed;
+ long style;
+ float decreaseValue;
+ bool bUseOffscreen;
+
+ CRect rectOn;
+ CRect rectOff;
+};
+
+END_NAMESPACE_VSTGUI
+
+#endif // __vstcontrol__
diff --git a/vstgui.sf/vstgui/vstgui.cpp b/vstgui.sf/vstgui/vstgui.cpp
new file mode 100644
index 0000000..9375e6f
--- /dev/null
+++ b/vstgui.sf/vstgui/vstgui.cpp
@@ -0,0 +1,9851 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins :
+//
+// Version 3.0 $Date: 2006/02/08 17:31:19 $
+//
+// Added Motif/Windows vers.: Yvan Grabit 01.98
+// Added Mac version : Charlie Steinberg 02.98
+// Added BeOS version : Georges-Edouard Berenger 05.99
+// Added new functions : Matthias Juwan 12.01
+// Added MacOSX version : Arne Scheffler 02.03
+// Added Quartz stuff : Arne Scheffler 08.03
+// Added Win Alpha Blending : Arne Scheffler 04.04
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __vstgui__
+#include "vstgui.h"
+#endif
+
+#if !PLUGGUI
+#ifndef __audioeffectx__
+#include "audioeffectx.h"
+#endif
+#endif
+
+#include "vstkeycode.h"
+
+#include
+#include
+#include
+#include
+
+//---Some defines-------------------------------------
+#define USE_ALPHA_BLEND QUARTZ || USE_LIBPNG
+#define USE_CLIPPING_DRAWRECT 1
+#define MAC_OLD_DRAG 1
+#define NEW_UPDATE_MECHANISM 1
+#define USE_VST_WINDOW (!PLUGGUI && !VST_FORCE_DEPRECATED)
+
+#if !WINDOWS
+// For OS which allows a lot of Drawing contexts
+#define USE_GLOBAL_CONTEXT 1
+#endif
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+#if USE_NAMESPACE
+#define VSTGUI_CFrame VSTGUI::CFrame
+#define VSTGUI_CPoint VSTGUI::CPoint
+#define VSTGUI_CTextEdit VSTGUI::CTextEdit
+#define VSTGUI_CColor VSTGUI::CColor
+#define VSTGUI_CDrawContext VSTGUI::CDrawContext
+#define VSTGUI_COffscreenContext VSTGUI::COffscreenContext
+#define VSTGUI_COptionMenu VSTGUI::COptionMenu
+#define VSTGUI_COptionMenuScheme VSTGUI::COptionMenuScheme
+#define VSTGUI_CDragContainer VSTGUI::CDragContainer
+#else
+#define VSTGUI_CFrame CFrame
+#define VSTGUI_CPoint CPoint
+#define VSTGUI_CTextEdit CTextEdit
+#define VSTGUI_CColor CColor
+#define VSTGUI_CDrawContext CDrawContext
+#define VSTGUI_COffscreenContext COffscreenContext
+#define VSTGUI_COptionMenu COptionMenu
+#define VSTGUI_COptionMenuScheme COptionMenuScheme
+#define VSTGUI_CDragContainer CDragContainer
+#endif
+
+static VSTGUI_CDragContainer* gDragContainer = 0;
+
+//---For Debugging------------------------
+#if DEBUG
+
+long gNbCBitmap = 0;
+long gNbCView = 0;
+long gNbCDrawContext = 0;
+long gNbCOffscreenContext = 0;
+long gBitmapAllocation = 0;
+long gNbDC = 0;
+
+#include
+
+void DebugPrint (char *format, ...);
+void DebugPrint (char *format, ...)
+{
+ char string[300];
+ va_list marker;
+ va_start (marker, format);
+ vsprintf (string, format, marker);
+ if (!string)
+ strcpy (string, "Empty string\n");
+ #if WINDOWS
+ OutputDebugString (string);
+ #elif MAC && !MACX
+ Str255 pStr;
+ c2pstrcpy (pStr, string);
+ DebugStr (pStr);
+ #else
+ fprintf (stderr, string);
+ #endif
+}
+#endif
+//---End For Debugging------------------------
+
+#if WINDOWS
+static bool bSwapped_mouse_buttons = false;
+OSVERSIONINFOEX gSystemVersion;
+
+// Alpha blending for Windows using library : msimg32.dll
+#define DYNAMICALPHABLEND 1
+
+#define WIN32_LEAN_AND_MEAN 1
+#include
+#include
+#include
+#include
+#include
+
+#if DYNAMICALPHABLEND
+typedef BOOL (WINAPI *PFNALPHABLEND)(
+ HDC hdcDest, // handle to destination DC
+ int nXOriginDest, // x-coord of upper-left corner
+ int nYOriginDest, // y-coord of upper-left corner
+ int nWidthDest, // destination width
+ int nHeightDest, // destination height
+ HDC hdcSrc, // handle to source DC
+ int nXOriginSrc, // x-coord of upper-left corner
+ int nYOriginSrc, // y-coord of upper-left corner
+ int nWidthSrc, // source width
+ int nHeightSrc, // source height
+ BLENDFUNCTION blendFunction // alpha-blending function
+);
+
+PFNALPHABLEND pfnAlphaBlend = NULL;
+
+typedef BOOL (WINAPI *PFNTRANSPARENTBLT)(
+ HDC hdcDest, // handle to destination DC
+ int nXOriginDest, // x-coord of destination upper-left corner
+ int nYOriginDest, // y-coord of destination upper-left corner
+ int nWidthDest, // width of destination rectangle
+ int hHeightDest, // height of destination rectangle
+ HDC hdcSrc, // handle to source DC
+ int nXOriginSrc, // x-coord of source upper-left corner
+ int nYOriginSrc, // y-coord of source upper-left corner
+ int nWidthSrc, // width of source rectangle
+ int nHeightSrc, // height of source rectangle
+ UINT crTransparent // color to make transparent
+);
+
+PFNTRANSPARENTBLT pfnTransparentBlt = NULL;
+#endif
+
+#if PLUGGUI
+ extern HINSTANCE ghInst;
+ inline HINSTANCE GetInstance () { return ghInst; }
+#else
+ extern void* hInstance;
+ inline HINSTANCE GetInstance () { return (HINSTANCE)hInstance; }
+#endif
+
+static long gUseCount = 0;
+static char gClassName[100] = {0};
+static bool InitWindowClass ();
+static void ExitWindowClass ();
+LONG_PTR WINAPI WindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
+
+static HANDLE CreateMaskBitmap (CDrawContext* pContext, CRect& rect, CColor transparentColor);
+static void DrawTransparent (CDrawContext* pContext, CRect& rect, const CPoint& offset, HDC hdcBitmap, POINT ptSize, HBITMAP pMask, COLORREF color);
+static bool checkResolveLink (const char* nativePath, char* resolved);
+static void *createDropTarget (VSTGUI_CFrame* pFrame);
+
+BEGIN_NAMESPACE_VSTGUI
+long gStandardFontSize[] = { 12, 18, 14, 12, 11, 10, 9, 13 };
+const char* gStandardFontName[] = {
+ "Arial", "Arial", "Arial",
+ "Arial", "Arial", "Arial",
+ "Arial", "Symbol" };
+END_NAMESPACE_VSTGUI
+
+#if USE_LIBPNG
+#include "png.h"
+#endif
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+#elif MOTIF
+
+ #define USE_XPM 0
+ #define TEST_REGION 0
+
+ #if USE_XPM
+ #include
+ #endif
+
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+
+ #if SGI
+ #include
+ #elif SUN
+ #elif LINUX
+ #endif
+
+ #define XDRAWPARAM pDisplay, (Window)pWindow, (GC)pSystemContext
+ #define XWINPARAM pDisplay, (Window)pWindow
+ #define XGCPARAM pDisplay, (GC)pSystemContext
+
+// init the static variable about font
+bool gFontInit = false;
+XFontStruct *gFontStructs[] = {0, 0, 0, 0, 0, 0, 0};
+
+struct SFontTable {char* name; char* string;};
+
+static SFontTable gFontTable[] = {
+ {"SystemFont", "-adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-*-*"}, // kSystemFont
+ {"NormalFontVeryBig", "-adobe-helvetica-medium-r-*-*-18-*-*-*-*-*-*-*"}, // kNormalFontVeryBig
+ {"NormalFontBig", "-adobe-helvetica-medium-r-normal-*-14-*-*-*-*-*-*-*"}, // kNormalFontBig
+ {"NormalFont", "-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-*-*"}, // kNormalFont
+ {"NormalFontSmall", "-adobe-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*"}, // kNormalFontSmall
+ {"NormalFontSmaller", "-adobe-helvetica-medium-r-*-*-9-*-*-*-*-*-*-*"}, // kNormalFontSmaller
+ {"NormalFontVerySmall", "-adobe-helvetica-medium-r-*-*-8-*-*-*-*-*-*-*"}, // kNormalFontVerySmall
+ {"SymbolFont", "-adobe-symbol-medium-r-*-*-12-*-*-*-*-*-*-*"} // kSymbolFont
+};
+
+long gStandardFontSize[] = { 12, 16, 14, 12, 10, 9, 8, 10 };
+
+//-----------------------------------------------------------------------------
+// declaration of different local functions
+long convertPoint2Angle (CPoint &pm, CPoint &pt);
+
+// callback for the frame
+void _drawingAreaCallback (Widget widget, XtPointer clientData, XtPointer callData);
+void _eventHandler (Widget w, XtPointer clientData, XEvent *event, char *p);
+void _destroyCallback (Widget widget, XtPointer clientData, XtPointer callData);
+
+// stuff for color
+long getIndexColor8Bit (CColor color, Display *pDisplay, Colormap colormap);
+long CDrawContext::nbNewColor = 0;
+static CColor paletteNewColor[256];
+
+//------ our user-defined XPM functions
+bool xpmGetValues (char **ppDataXpm, long *pWidth, long *pHeight, long *pNcolor, long *pCpp);
+
+ #if !USE_XPM
+ #include "xpmloader.cpp"
+ #endif
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+#elif MAC
+BEGIN_NAMESPACE_VSTGUI
+
+long pSystemVersion;
+
+#if MACX
+//-----------------------------------------------------------------------------
+#include
+
+#if QUARTZ
+const char* gMacXfontNames[] = {
+ "Helvetica",
+ "Helvetica",
+ "Helvetica",
+ "Helvetica",
+ "Helvetica",
+ "Helvetica",
+ "Helvetica",
+ "Symbol"
+};
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846 /* pi */
+#endif
+
+static inline void QuartzSetLineDash (CGContextRef context, CLineStyle style, CCoord lineWidth);
+static inline void QuartzSetupClip (CGContextRef context, const CRect clipRect);
+static inline double radians (double degrees) { return degrees * M_PI / 180; }
+CGColorSpaceRef GetGenericRGBColorSpace ();
+
+typedef void (*CGContextStrokeLineSegmentsProc) (CGContextRef c, const CGPoint points[], size_t count);
+typedef CGImageRef (*CGImageCreateWithImageInRectProc) (CGImageRef image, CGRect rect);
+static CGImageCreateWithImageInRectProc _CGImageCreateWithImageInRect = NULL;
+static CGContextStrokeLineSegmentsProc _CGContextStrokeLineSegments = NULL;
+
+// cache graphics importer
+static ComponentInstance bmpGI = 0;
+static ComponentInstance pngGI = 0;
+static ComponentInstance jpgGI = 0;
+static ComponentInstance pictGI = 0;
+
+
+#else
+const unsigned char* gMacXfontNames[] = {
+ "\pArial",
+ "\pArial",
+ "\pArial",
+ "\pArial",
+ "\pArial",
+ "\pArial",
+ "\pArial",
+ "\pSymbol"
+};
+#endif
+
+//-----------------------------------------------------------------------------
+#else
+#include
+#include
+#include
+#include
+#endif
+
+long gStandardFontSize[] = { 12, 18, 14, 12, 10, 9, 9, 12 };
+
+long convertPoint2Angle (CPoint &pm, CPoint &pt);
+void RectNormalize (Rect& rect);
+void CRect2Rect (const CRect &cr, Rect &rr);
+void Rect2CRect (Rect &rr, CRect &cr);
+void CColor2RGBColor (const CColor &cc, RGBColor &rgb);
+void RGBColor2CColor (const RGBColor &rgb, CColor &cc);
+
+#if MAC_OLD_DRAG
+static void install_drop (CFrame *frame);
+static void remove_drop (CFrame *frame);
+#endif
+
+//-----------------------------------------------------------------------------
+void RectNormalize (Rect& rect)
+{
+ if (rect.left > rect.right)
+ {
+ long temp = rect.right;
+ rect.right = rect.left;
+ rect.left = temp;
+ }
+ if (rect.top > rect.bottom)
+ {
+ long temp = rect.bottom;
+ rect.bottom = rect.top;
+ rect.top = temp;
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CRect2Rect (const CRect &cr, Rect &rr)
+{
+ rr.left = (short)cr.left;
+ rr.right = (short)cr.right;
+ rr.top = (short)cr.top;
+ rr.bottom = (short)cr.bottom;
+ RectNormalize (rr);
+}
+
+//-----------------------------------------------------------------------------
+void Rect2CRect (Rect &rr, CRect &cr)
+{
+ cr.left = rr.left;
+ cr.right = rr.right;
+ cr.top = rr.top;
+ cr.bottom = rr.bottom;
+}
+
+//-----------------------------------------------------------------------------
+void CColor2RGBColor (const CColor &cc, RGBColor &rgb)
+{
+ rgb.red = cc.red * 257;
+ rgb.green = cc.green * 257;
+ rgb.blue = cc.blue * 257;
+}
+
+//-----------------------------------------------------------------------------
+void RGBColor2CColor (const RGBColor &rgb, CColor &cc)
+{
+ cc.red = rgb.red / 257;
+ cc.green = rgb.green / 257;
+ cc.blue = rgb.blue / 257;
+}
+
+END_NAMESPACE_VSTGUI
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+#elif BEOS
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+//--------------------------
+class PlugView: public BView
+{
+public:
+ PlugView (BRect frame, CFrame* cframe);
+ void Draw (BRect updateRect);
+ void MouseDown (BPoint where);
+ void MessageReceived (BMessage *msg);
+private:
+ CFrame* cframe;
+};
+
+long convertPoint2Angle (CPoint &pm, CPoint &pt);
+
+drawing_mode modeToPlatform [] = {
+// kCopyMode kOrMode kXorMode
+ B_OP_COPY, B_OP_OVER, B_OP_INVERT
+};
+
+long gStandardFontSize[] = { 12, 18, 14, 12, 11, 10, 9, 12 };
+const char* standardFont = "Swis721 BT";
+const char* standardFontS = "Roman";
+const char* systemFont = "Swis721 BT";
+const char* systemFontS = "Bold";
+const char* gStandardFontName[] = { systemFont,
+ standardFont, standardFont, standardFont, standardFont, standardFont,
+ standardFont };
+const char* gStandardFontStyle[] = { systemFontS,
+ standardFontS, standardFontS, standardFontS, standardFontS, standardFontS,
+ standardFontS };
+#endif
+
+//-----------------------------------------------------------------------------
+bool CRect::pointInside (const CPoint& where) const
+{
+ return where.h >= left && where.h < right && where.v >= top && where.v < bottom;
+}
+
+//-----------------------------------------------------------------------------
+bool CRect::isEmpty () const
+{
+ if (right <= left)
+ return true;
+ if (bottom <= top)
+ return true;
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+void CRect::bound (const CRect& rect)
+{
+ if (left < rect.left)
+ left = rect.left;
+ if (top < rect.top)
+ top = rect.top;
+ if (right > rect.right)
+ right = rect.right;
+ if (bottom > rect.bottom)
+ bottom = rect.bottom;
+ if (bottom < top)
+ bottom = top;
+ if (right < left)
+ right = left;
+}
+
+BEGIN_NAMESPACE_VSTGUI
+
+CColor kTransparentCColor = {255, 255, 255, 0};
+CColor kBlackCColor = {0, 0, 0, 255};
+CColor kWhiteCColor = {255, 255, 255, 255};
+CColor kGreyCColor = {127, 127, 127, 255};
+CColor kRedCColor = {255, 0, 0, 255};
+CColor kGreenCColor = {0 , 255, 0, 255};
+CColor kBlueCColor = {0 , 0, 255, 255};
+CColor kYellowCColor = {255, 255, 0, 255};
+CColor kMagentaCColor= {255, 0, 255, 255};
+CColor kCyanCColor = {0 , 255, 255, 255};
+
+#define kDragDelay 0
+
+//-----------------------------------------------------------------------------
+// CDrawContext Implementation
+//-----------------------------------------------------------------------------
+/**
+ * CDrawContext constructor.
+ * @param inFrame the parent CFrame
+ * @param inSystemContext the platform system context, can be NULL
+ * @param inWindow the platform window object
+ */
+CDrawContext::CDrawContext (CFrame *inFrame, void *inSystemContext, void *inWindow)
+: pSystemContext (inSystemContext)
+, pWindow (inWindow)
+, pFrame (inFrame)
+, fontSize (-1)
+, fontStyle (0)
+, fontId (kNumStandardFonts)
+, frameWidth (0)
+, lineStyle (kLineOnOffDash)
+, drawMode (kAntialias)
+#if WINDOWS
+, pBrush (0), pFont (0), pPen (0)
+, pOldBrush (0), pOldFont (0), pOldPen (0)
+#elif MAC && !QUARTZ
+, bInitialized (false)
+#endif
+{
+ #if DEBUG
+ gNbCDrawContext++;
+ #endif
+
+ // initialize values
+ if (pFrame)
+ pFrame->getViewSize (clipRect);
+ else
+ clipRect (0, 0, 1000, 1000);
+
+ const CColor notInitalized = {0, 0, 0, 0};
+ frameColor = notInitalized;
+ fillColor = notInitalized;
+ fontColor = notInitalized;
+
+ // offsets use by offscreen
+ offset (0, 0);
+ offsetScreen (0, 0);
+
+#if WINDOWS
+ pHDC = 0;
+ if (!pSystemContext && pWindow)
+ pSystemContext = pHDC = GetDC ((HWND)pWindow);
+
+ if (pSystemContext)
+ {
+ pOldBrush = GetCurrentObject ((HDC)pSystemContext, OBJ_BRUSH);
+ pOldPen = GetCurrentObject ((HDC)pSystemContext, OBJ_PEN);
+ pOldFont = GetCurrentObject ((HDC)pSystemContext, OBJ_FONT);
+ SetBkMode ((HDC)pSystemContext, TRANSPARENT);
+ }
+ iPenStyle = PS_SOLID;
+
+ // get position
+ if (pWindow)
+ {
+ RECT rctTempWnd;
+ GetWindowRect ((HWND)pWindow, &rctTempWnd);
+ offsetScreen.h = rctTempWnd.left;
+ offsetScreen.v = rctTempWnd.top;
+ }
+
+#elif MAC
+ #if QUARTZ
+ if (pFrame && (pSystemContext || pWindow))
+ {
+ HIRect bounds;
+ HIViewGetFrame ((HIViewRef)pFrame->getPlatformControl (), &bounds);
+ if (pWindow || !pSystemContext)
+ {
+ WindowAttributes attr;
+ GetWindowAttributes ((WindowRef)pWindow, &attr);
+ if (attr & kWindowCompositingAttribute)
+ {
+ HIViewRef contentView;
+ HIViewFindByID (HIViewGetRoot ((WindowRef)pWindow), kHIViewWindowContentID, &contentView);
+ if (HIViewGetSuperview ((HIViewRef)pFrame->getPlatformControl ()) != contentView)
+ HIViewConvertRect (&bounds, (HIViewRef)pFrame->getPlatformControl (), contentView);
+ bounds.origin.x += pFrame->hiScrollOffset.x;
+ bounds.origin.y += pFrame->hiScrollOffset.y;
+ }
+ }
+ offsetScreen.x = (CCoord)bounds.origin.x;
+ offsetScreen.y = (CCoord)bounds.origin.y;
+ clipRect (0, 0, (CCoord)bounds.size.width, (CCoord)bounds.size.height);
+ clipRect.offset (pFrame->hiScrollOffset.x, pFrame->hiScrollOffset.y);
+ }
+ gCGContext = 0;
+ if (pSystemContext)
+ {
+ gCGContext = (CGContextRef) pSystemContext;
+ CGContextSaveGState (gCGContext); // save the original state
+ CGContextScaleCTM (gCGContext, 1, -1);
+ CGContextSetShouldAntialias (gCGContext, false);
+ CGContextSetFillColorSpace (gCGContext, GetGenericRGBColorSpace ());
+ CGContextSetStrokeColorSpace (gCGContext, GetGenericRGBColorSpace ());
+ CGContextSaveGState (gCGContext);
+ setClipRect (clipRect);
+ if (pFrame)
+ pFrame->setDrawContext (this);
+ }
+ else if (pWindow)
+ {
+ GrafPtr port = GetWindowPort ((WindowRef)pWindow);
+ OSStatus err = QDBeginCGContext (port, &gCGContext);
+ if (err == noErr)
+ {
+ CGContextSaveGState (gCGContext); // save the original state
+ SyncCGContextOriginWithPort (gCGContext, port);
+ Rect rect;
+ GetPortBounds (port, &rect);
+ CGContextTranslateCTM (gCGContext, 0, rect.bottom - rect.top);
+ CGContextTranslateCTM (gCGContext, offsetScreen.x, -offsetScreen.y);
+ CGContextTranslateCTM (gCGContext, -pFrame->hiScrollOffset.x, pFrame->hiScrollOffset.y);
+ CGContextSetShouldAntialias (gCGContext, false);
+ CGContextSetFillColorSpace (gCGContext, GetGenericRGBColorSpace ());
+ CGContextSetStrokeColorSpace (gCGContext, GetGenericRGBColorSpace ());
+ CGContextScaleCTM (gCGContext, 1, -1);
+ QuartzSetupClip (gCGContext, clipRect);
+ CGContextScaleCTM (gCGContext, 1, -1);
+ CGContextSaveGState (gCGContext);
+ setClipRect (clipRect);
+ if (pFrame)
+ pFrame->setDrawContext (this);
+ }
+ }
+ if (gCGContext)
+ {
+ CGAffineTransform cgCTM = CGAffineTransformMake (1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
+ CGContextSetTextMatrix (gCGContext, cgCTM);
+ }
+ needToSynchronizeCGContext = false;
+
+ #else
+ pSystemContext = pWindow;
+
+ #endif
+
+#elif MOTIF
+ if (pFrame)
+ pDisplay = pFrame->getDisplay ();
+
+ // set the current font
+ if (pSystemContext)
+ setFont (kNormalFont);
+ else
+ fprintf (stderr, "Error in CDrawContext::CDrawContext : pSystemContext must not be Null!!!\n");
+
+#elif BEOS
+ pView = (BView*) pSystemContext;
+ if (pView)
+ pView->LockLooper ();
+
+#endif
+
+ if (1 || pSystemContext)
+ {
+ // set the default values
+ setFrameColor (kWhiteCColor);
+ setLineStyle (kLineSolid);
+ setLineWidth (1);
+#if !MOTIF
+ setFillColor (kBlackCColor);
+ setFontColor (kWhiteCColor);
+#endif
+ setFont (kSystemFont);
+ setDrawMode (kCopyMode);
+ }
+}
+
+//-----------------------------------------------------------------------------
+CDrawContext::~CDrawContext ()
+{
+ #if DEBUG
+ gNbCDrawContext--;
+ #endif
+
+#if WINDOWS
+ if (pOldBrush)
+ SelectObject ((HDC)pSystemContext, pOldBrush);
+ if (pOldPen)
+ SelectObject ((HDC)pSystemContext, pOldPen);
+ if (pOldFont)
+ SelectObject ((HDC)pSystemContext, pOldFont);
+
+ if (pBrush)
+ DeleteObject (pBrush);
+ if (pPen)
+ DeleteObject (pPen);
+ if (pFont)
+ DeleteObject (pFont);
+
+ if (pHDC)
+ {
+ ReleaseDC ((HWND)pWindow, pHDC);
+ #if DEBUG
+ gNbDC--;
+ #endif
+ }
+
+#elif (MAC && QUARTZ)
+ if (gCGContext)
+ {
+ CGContextRestoreGState (gCGContext); // restore the original state
+ CGContextRestoreGState (gCGContext); // we need to do it twice !!!
+ CGContextSynchronize (gCGContext);
+ if (!pSystemContext && pWindow)
+ QDEndCGContext (GetWindowPort ((WindowRef)pWindow), &gCGContext);
+ if (pFrame)
+ pFrame->setDrawContext (0);
+ }
+#elif MOTIF
+#elif BEOS
+ if (pView)
+ {
+ pView->Flush ();
+ pView->UnlockLooper ();
+ }
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::setLineStyle (CLineStyle style)
+{
+ if (lineStyle == style)
+ return;
+
+ lineStyle = style;
+
+#if WINDOWS
+ switch (lineStyle)
+ {
+ case kLineOnOffDash:
+ iPenStyle = PS_DOT;
+ break;
+ default:
+ iPenStyle = PS_SOLID;
+ break;
+ }
+
+ LOGPEN logPen = {iPenStyle, {frameWidth, frameWidth},
+ RGB (frameColor.red, frameColor.green, frameColor.blue)};
+
+ HANDLE newPen = CreatePenIndirect (&logPen);
+ SelectObject ((HDC)pSystemContext, newPen);
+ if (pPen)
+ DeleteObject (pPen);
+ pPen = newPen;
+
+#elif MAC
+ #if QUARTZ
+
+ // nothing to do here
+
+ #else
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ if (pWindow)
+ {
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ PenState penState;
+ GetPenState (&penState);
+ switch (lineStyle)
+ {
+ case kLineOnOffDash:
+ StuffHex (&penState.pnPat, "\pF0F0F0F00F0F0F0F"); // dashed line 4 pixel
+ break;
+ default:
+ StuffHex (&penState.pnPat, "\pFFFFFFFFFFFFFFFF");
+ break;
+ }
+ SetPenState (&penState);
+ SetGWorld (OrigPort, OrigDevice);
+ }
+ #endif
+
+#elif MOTIF
+ long line_width;
+ long line_style;
+ if (frameWidth == 1)
+ line_width = 0;
+ else
+ line_width = frameWidth;
+
+ switch (lineStyle)
+ {
+ case kLineOnOffDash:
+ line_style = LineOnOffDash;
+ break;
+ default:
+ line_style = LineSolid;
+ break;
+ }
+
+ XSetLineAttributes (XGCPARAM, line_width, line_style, CapNotLast, JoinRound);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::setLineWidth (CCoord width)
+{
+ if (frameWidth == width)
+ return;
+
+ frameWidth = width;
+
+#if WINDOWS
+ LOGPEN logPen = {iPenStyle, {frameWidth, frameWidth},
+ RGB (frameColor.red, frameColor.green, frameColor.blue)};
+
+ HANDLE newPen = CreatePenIndirect (&logPen);
+ SelectObject ((HDC)pSystemContext, newPen);
+ if (pPen)
+ DeleteObject (pPen);
+ pPen = newPen;
+
+#elif MAC
+ #if QUARTZ
+ if (gCGContext)
+ CGContextSetLineWidth (gCGContext, width);
+ #else
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ if (pWindow)
+ {
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ PenState penState;
+ GetPenState (&penState);
+ penState.pnSize.h = width;
+ penState.pnSize.v = width;
+ SetPenState (&penState);
+ SetGWorld (OrigPort, OrigDevice);
+ }
+ #endif
+#elif MOTIF
+ setLineStyle (lineStyle);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::setDrawMode (CDrawMode mode)
+{
+ if (drawMode == mode)
+ return;
+
+ drawMode = mode;
+
+#if WINDOWS
+ long iMode = 0;
+ switch (drawMode)
+ {
+ case kXorMode :
+ iMode = R2_NOTXORPEN; // Pixel is the inverse of the R2_XORPEN color (final pixel = ~ (pen ^ screen pixel)).
+ break;
+ case kOrMode :
+ iMode = R2_MERGEPEN; // Pixel is a combination of the pen color and the screen color (final pixel = pen | screen pixel).
+ break;
+ default:
+ iMode = R2_COPYPEN;
+ break;
+ }
+ SetROP2 ((HDC)pSystemContext, iMode);
+
+#elif MAC
+ #if QUARTZ
+ // quartz only support antialias
+ if (gCGContext)
+ CGContextSetShouldAntialias (gCGContext, drawMode == kAntialias ? true : false);
+
+ #else
+ if (pWindow)
+ {
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ long iMode = 0;
+
+ switch (drawMode)
+ {
+ case kXorMode :
+ iMode = patXor;
+ break;
+ case kOrMode :
+ iMode = patOr;
+ break;
+ default:
+ iMode = patCopy;
+ }
+ PenMode (mode);
+
+ SetGWorld (OrigPort, OrigDevice);
+ }
+ #endif
+
+#elif MOTIF
+ long iMode = 0;
+ switch (drawMode)
+ {
+ case kXorMode :
+ iMode = GXinvert;
+ break;
+ case kOrMode :
+ iMode = GXor;
+ break;
+ default:
+ iMode = GXcopy;
+ }
+ ((XGCValues*)pSystemContext)->function = iMode;
+ XChangeGC (XGCPARAM, GCFunction, (XGCValues*)pSystemContext);
+#endif
+}
+
+//------------------------------------------------------------------------------
+void CDrawContext::setClipRect (const CRect &clip)
+{
+ CRect _clip (clip);
+ _clip.offset (offset.h, offset.v);
+
+ if (clipRect == _clip)
+ return;
+
+ clipRect = _clip;
+
+#if MAC
+ #if QUARTZ
+ if (0 && gCGContext)
+ {
+ CGContextRestoreGState (gCGContext);
+ CGContextSaveGState (gCGContext);
+ CGContextScaleCTM (gCGContext, 1, -1);
+ CGRect cgClipRect = CGRectMake (clipRect.left, clipRect.top, clipRect.width ()-1.f, clipRect.height ()-1.f);
+ CGContextClipToRect (gCGContext, cgClipRect);
+ CGContextScaleCTM (gCGContext, 1, -1);
+ setLineWidth (frameWidth);
+ setLineStyle (lineStyle);
+ setFrameColor (frameColor);
+ setFillColor (fillColor);
+ setFont (fontId, fontSize);
+ setDrawMode (drawMode);
+ }
+
+ #else
+ Rect r;
+ CRect2Rect (_clip, r);
+
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ ClipRect (&r);
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+
+#elif WINDOWS
+ RECT r = {clipRect.left, clipRect.top, clipRect.right, clipRect.bottom};
+ HRGN hRgn = CreateRectRgn (r.left, r.top, r.right, r.bottom);
+ SelectClipRgn ((HDC)pSystemContext, hRgn);
+ DeleteObject (hRgn);
+
+#elif MOTIF
+ XRectangle r;
+ r.x = 0;
+ r.y = 0;
+ r.width = clipRect.right - clipRect.left;
+ r.height = clipRect.bottom - clipRect.top;
+ XSetClipRectangles (XGCPARAM, clipRect.left, clipRect.top, &r, 1, Unsorted);
+
+#elif BEOS
+ clipping_rect r = {clipRect.left, clipRect.top, clipRect.right - 1, clipRect.bottom - 1};
+ BRegion region;
+ region.Set (r);
+ pView->ConstrainClippingRegion (®ion);
+#endif
+}
+
+//------------------------------------------------------------------------------
+void CDrawContext::resetClipRect ()
+{
+ CRect newClip;
+ if (pFrame)
+ pFrame->getViewSize (newClip);
+ else
+ newClip (0, 0, 1000, 1000);
+
+#if (MAC && QUARTZ)
+ if (0 && gCGContext)
+ {
+ CGContextRestoreGState (gCGContext);
+ CGContextScaleCTM (gCGContext, 1, -1);
+ CGRect cgClipRect = CGRectMake (newClip.left, newClip.top, newClip.width (), newClip.height ());
+ CGContextClipToRect (gCGContext, cgClipRect);
+ CGContextScaleCTM (gCGContext, 1, -1);
+ CGContextSaveGState (gCGContext);
+ setLineWidth (frameWidth);
+ setLineStyle (lineStyle);
+ setFrameColor (frameColor);
+ setFillColor (fillColor);
+ setFont (fontId, fontSize);
+ setDrawMode (drawMode);
+ }
+
+#elif MAC || WINDOWS || MOTIF
+ setClipRect (newClip);
+
+#elif BEOS
+ pView->ConstrainClippingRegion (NULL);
+#endif
+
+ clipRect = newClip;
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::moveTo (const CPoint &_point)
+{
+ CPoint point (_point);
+ point.offset (offset.h, offset.v);
+
+#if WINDOWS
+ MoveToEx ((HDC)pSystemContext, point.h, point.v, NULL);
+
+#elif MAC
+ #if QUARTZ
+ #else
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice); // get current GrafPort
+ SetGWorld (getPort (), NULL); // activate our GWorld
+ MoveTo (point.h, point.v);
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+ penLoc = point;
+
+#elif MOTIF || BEOS
+ penLoc = point;
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::lineTo (const CPoint& _point)
+{
+ CPoint point (_point);
+ point.offset (offset.h, offset.v);
+
+#if WINDOWS
+ LineTo ((HDC)pSystemContext, point.h, point.v);
+
+#elif MAC
+ #if QUARTZ
+ CGContextRef context = beginCGContext (true);
+ {
+ QuartzSetLineDash (context, lineStyle, frameWidth);
+
+ CGContextBeginPath (context);
+ CGContextMoveToPoint (context, penLoc.h, penLoc.v);
+ CGContextAddLineToPoint (context, point.h, point.v);
+ CGContextDrawPath (context, kCGPathStroke);
+ releaseCGContext (context);
+ }
+ penLoc = point;
+ #else
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice); // get current GrafPort
+ SetGWorld (getPort (), NULL); // activate our GWorld
+ RGBColor col;
+ CColor2RGBColor (frameColor, col);
+ RGBForeColor (&col);
+ #if 1
+ if (point.v == penLoc.v)
+ {
+ CPoint old = point;
+ if (point.h > penLoc.h)
+ point.h--;
+ else
+ point.h++;
+ penLoc = old;
+ LineTo (point.h, point.v);
+ MoveTo (penLoc.h, penLoc.v);
+ }
+ else if (point.h == penLoc.h)
+ {
+ CPoint old = point;
+ if (point.v > penLoc.v)
+ point.v--;
+ else
+ point.v++;
+ penLoc = old;
+ LineTo (point.h, point.v);
+ MoveTo (penLoc.h, penLoc.v);
+ }
+ else
+ {
+ penLoc = point;
+ LineTo (point.h, point.v);
+ }
+ #else
+ if (point.v > penLoc.v)
+ point.v--;
+ else if (point.v < penLoc.v)
+ point.v++;
+ if (point.h > penLoc.h)
+ point.h--;
+ else if (point.h < penLoc.h)
+ point.h++;
+ penLoc = point;
+ LineTo (point.h, point.v);
+ #endif
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+
+#elif MOTIF
+ CPoint start (penLoc);
+ CPoint end (point);
+ if (start.h == end.h)
+ {
+ if (start.v < -5)
+ start.v = -5;
+ else if (start.v > 10000)
+ start.v = 10000;
+
+ if (end.v < -5)
+ end.v = -5;
+ else if (end.v > 10000)
+ end.v = 10000;
+ }
+ if (start.v == end.v)
+ {
+ if (start.h < -5)
+ start.h = -5;
+ else if (start.h > 10000)
+ start.h = 10000;
+
+ if (end.h < -5)
+ end.h = -5;
+ else if (end.h > 10000)
+ end.h = 10000;
+ }
+ XDrawLine (XDRAWPARAM, start.h, start.v, end.h, end.v);
+
+ // keep trace of the new position
+ penLoc = point;
+
+#elif BEOS
+ rgb_color c = { frameColor.red, frameColor.green, frameColor.blue, 255 };
+ pView->SetHighColor (c);
+ pView->SetDrawingMode (modeToPlatform [drawMode]);
+ pView->SetPenSize (frameWidth);
+ lineFromTo (penLoc, point);
+ penLoc = point;
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::drawLines (const CPoint* points, const long& numLines)
+{
+ #if QUARTZ
+ CGContextRef context = beginCGContext (true);
+ if (context)
+ {
+ QuartzSetLineDash (context, lineStyle, frameWidth);
+
+ #ifdef MAC_OS_X_VERSION_10_4
+ if (_CGContextStrokeLineSegments)
+ {
+ CGPoint* cgPoints = new CGPoint[numLines*2];
+ for (long i = 0; i < numLines * 2; i += 2)
+ {
+ cgPoints[i].x = points[i].x + offset.x;
+ cgPoints[i+1].x = points[i+1].x + offset.x;
+ cgPoints[i].y = points[i].y + offset.y;
+ cgPoints[i+1].y = points[i+1].y + offset.y;
+ }
+ _CGContextStrokeLineSegments (context, cgPoints, numLines*2);
+ delete [] cgPoints;
+ }
+ else
+ #endif
+ {
+ CGContextBeginPath (context);
+ for (long i = 0; i < numLines * 2; i += 2)
+ {
+ CGContextMoveToPoint (context, points[i].x + offset.x, points[i].y + offset.y);
+ CGContextAddLineToPoint (context, points[i+1].x + offset.x, points[i+1].y + offset.y);
+ }
+ CGContextDrawPath (context, kCGPathStroke);
+ }
+ releaseCGContext (context);
+ }
+
+ #else
+ // default implementation, when no platform optimized code is implemented
+ for (long i = 0; i < numLines * 2; i+=2)
+ {
+ moveTo (points[i]);
+ lineTo (points[i+1]);
+ }
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::drawPolygon (const CPoint *pPoints, long numberOfPoints, const CDrawStyle drawStyle)
+{
+#if MAC && QUARTZ
+ CGContextRef context = beginCGContext (true);
+ {
+ CGPathDrawingMode m;
+ switch (drawStyle)
+ {
+ case kDrawFilled : m = kCGPathFill; break;
+ case kDrawFilledAndStroked : m = kCGPathFillStroke; break;
+ default : m = kCGPathStroke; break;
+ }
+
+ QuartzSetLineDash (context, lineStyle, frameWidth);
+
+ CGContextBeginPath (context);
+ CGContextMoveToPoint (context, pPoints[0].h + offset.h, pPoints[0].v + offset.v);
+ for (long i = 1; i < numberOfPoints; i++)
+ CGContextAddLineToPoint (context, pPoints[i].h + offset.h, pPoints[i].v + offset.v);
+ CGContextDrawPath (context, m);
+ releaseCGContext (context);
+ }
+#else
+ if (drawStyle == kDrawFilled || drawStyle == kDrawFilledAndStroked)
+ fillPolygon (pPoints, numberOfPoints);
+ if (drawStyle == kDrawStroked || drawStyle == kDrawFilledAndStroked)
+ polyLine (pPoints, numberOfPoints);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::polyLine (const CPoint *pPoints, long numberOfPoints)
+{
+#if WINDOWS
+ POINT points[30];
+ POINT *polyPoints;
+ bool allocated = false;
+
+ if (numberOfPoints > 30)
+ {
+ polyPoints = (POINT*)new char [numberOfPoints * sizeof (POINT)];
+ if (!polyPoints)
+ return;
+ allocated = true;
+ }
+ else
+ polyPoints = points;
+
+ for (long i = 0; i < numberOfPoints; i++)
+ {
+ polyPoints[i].x = pPoints[i].h + offset.h;
+ polyPoints[i].y = pPoints[i].v + offset.v;
+ }
+
+ Polyline ((HDC)pSystemContext, polyPoints, numberOfPoints);
+
+ if (allocated)
+ delete[] polyPoints;
+
+#elif MAC
+ #if QUARTZ
+ drawPolygon (pPoints, numberOfPoints);
+
+ #else
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ RGBColor col;
+ CColor2RGBColor (frameColor, col);
+ RGBForeColor (&col);
+ MoveTo (pPoints[0].h, pPoints[0].v);
+ for (long i = 1; i < numberOfPoints; i++)
+ LineTo (pPoints[i].h + offset.h, pPoints[i].v + offset.v);
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+
+#elif MOTIF
+ XPoint* pt = (XPoint*)malloc (numberOfPoints * sizeof (XPoint));
+ if (!pt)
+ return;
+ for (long i = 0; i < numberOfPoints; i++)
+ {
+ pt[i].x = (short)pPoints[i].h + offset.h;
+ pt[i].y = (short)pPoints[i].v + offset.v;
+ }
+
+ XDrawLines (XDRAWPARAM, pt, numberOfPoints, CoordModeOrigin);
+
+ free (pt);
+
+#elif BEOS
+ rgb_color c = { frameColor.red, frameColor.green, frameColor.blue, 255 };
+ pView->SetHighColor (c);
+ pView->SetDrawingMode (modeToPlatform [drawMode]);
+ pView->SetPenSize (frameWidth);
+
+ CPoint begin (pPoints[0]);
+ begin.offset (offset.h, offset.v);
+ CPoint end;
+ for (long i = 1; i < numberOfPoints; i++)
+ {
+ end = pPoints[i];
+ end.offset (offset.h, offset.v);
+ lineFromTo (begin, end);
+ begin = end;
+ }
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::fillPolygon (const CPoint *pPoints, long numberOfPoints)
+{
+ // Don't draw boundary
+#if WINDOWS
+ POINT points[30];
+ POINT *polyPoints;
+ bool allocated = false;
+
+ if (numberOfPoints > 30)
+ {
+ polyPoints = (POINT*)new char [numberOfPoints * sizeof (POINT)];
+ if (!polyPoints)
+ return;
+ allocated = true;
+ }
+ else
+ polyPoints = points;
+
+ for (long i = 0; i < numberOfPoints; i++)
+ {
+ polyPoints[i].x = pPoints[i].h + offset.h;
+ polyPoints[i].y = pPoints[i].v + offset.v;
+ }
+
+ HANDLE nullPen = GetStockObject (NULL_PEN);
+ HANDLE oldPen = SelectObject ((HDC)pSystemContext, nullPen);
+ Polygon ((HDC)pSystemContext, polyPoints, numberOfPoints);
+ SelectObject ((HDC)pSystemContext, oldPen);
+
+ if (allocated)
+ delete[] polyPoints;
+
+#elif MAC
+ #if QUARTZ
+ drawPolygon (pPoints, numberOfPoints, kDrawFilled);
+
+ #else
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ PolyHandle thePoly;
+ RGBColor col;
+
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ CColor2RGBColor (fillColor, col);
+ RGBForeColor (&col);
+ thePoly = OpenPoly (); // start recording
+ polyLine (pPoints, numberOfPoints); // draw polygon
+ LineTo (pPoints[0].h + offset.h, pPoints[0].v + offset.v); // close the boundary
+ ClosePoly (); // stop recording
+
+ PixPatHandle pixPatHandle = NewPixPat ();
+ CColor2RGBColor (fillColor, col);
+ MakeRGBPat (pixPatHandle, &col); // create pixel pattern with fill color
+
+ FillCPoly (thePoly, pixPatHandle); // fill inside
+ KillPoly (thePoly); // deallocate all memory used here
+ DisposePixPat (pixPatHandle);
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+
+#elif MOTIF
+ // convert the points
+ XPoint* pt = (XPoint*)malloc (numberOfPoints * sizeof (XPoint));
+ for (long i = 0; i < numberOfPoints; i++)
+ {
+ pt[i].x = (short)pPoints[i].h + offset.h;
+ pt[i].y = (short)pPoints[i].v + offset.v;
+ }
+
+ XFillPolygon (XDRAWPARAM, pt, numberOfPoints, Convex, CoordModeOrigin);
+
+ free (pt);
+
+#elif BEOS
+ BPoint bpoints[30];
+ BPoint* polyPoints;
+ bool allocated = false;
+
+ if (numberOfPoints > 30)
+ {
+ polyPoints = new BPoint [numberOfPoints];
+ if (!polyPoints)
+ return;
+ allocated = true;
+ }
+ else
+ polyPoints = bpoints;
+
+ for (long i = 0; i < numberOfPoints; i++)
+ polyPoints[i].Set (pPoints[i].h + offset.h, pPoints[i].v + offset.v);
+
+ rgb_color c = { fillColor.red, fillColor.green, fillColor.blue, 255 };
+ pView->SetHighColor (c);
+ pView->SetDrawingMode (modeToPlatform [drawMode]);
+ pView->FillPolygon (polyPoints, numberOfPoints);
+
+ if (allocated)
+ delete[] polyPoints;
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::drawRect (const CRect &_rect, const CDrawStyle drawStyle)
+{
+ CRect rect (_rect);
+ rect.offset (offset.h, offset.v);
+
+#if WINDOWS
+ if (drawStyle == kDrawFilled || drawStyle == kDrawFilledAndStroked)
+ {
+ RECT wr = {rect.left, rect.top, rect.right, rect.bottom};
+ HANDLE nullPen = GetStockObject (NULL_PEN);
+ HANDLE oldPen = SelectObject ((HDC)pSystemContext, nullPen);
+ FillRect ((HDC)pSystemContext, &wr, (HBRUSH)pBrush);
+ SelectObject ((HDC)pSystemContext, oldPen);
+ }
+ if (drawStyle == kDrawStroked || drawStyle == kDrawFilledAndStroked)
+ {
+ MoveToEx ((HDC)pSystemContext, rect.left, rect.top, NULL);
+ LineTo ((HDC)pSystemContext, rect.right-1, rect.top);
+ LineTo ((HDC)pSystemContext, rect.right-1, rect.bottom-1);
+ LineTo ((HDC)pSystemContext, rect.left, rect.bottom-1);
+ LineTo ((HDC)pSystemContext, rect.left, rect.top);
+ }
+
+#elif MAC
+ #if QUARTZ
+ CGContextRef context = beginCGContext (true);
+ {
+ CGPathDrawingMode m;
+ switch (drawStyle)
+ {
+ case kDrawFilled : m = kCGPathFill; break;
+ case kDrawFilledAndStroked : m = kCGPathFillStroke; break;
+ default : m = kCGPathStroke; break;
+ }
+
+ CGRect r = CGRectMake (rect.left, rect.top+1, rect.width () - 1, rect.height () - 1);
+
+ QuartzSetLineDash (context, lineStyle, frameWidth);
+
+ CGContextBeginPath (context);
+ CGContextMoveToPoint (context, r.origin.x, r.origin.y);
+ CGContextAddLineToPoint (context, r.origin.x + r.size.width, r.origin.y);
+ CGContextAddLineToPoint (context, r.origin.x + r.size.width, r.origin.y + r.size.height);
+ CGContextAddLineToPoint (context, r.origin.x, r.origin.y + r.size.height);
+ CGContextClosePath (context);
+
+ CGContextDrawPath (context, m);
+
+ releaseCGContext (context);
+ }
+ #else
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice); // get current GrafPort
+ SetGWorld (getPort (), NULL); // activate our GWorld
+
+ if (drawStyle == kDrawFilled || drawStyle == kDrawFilledAndStroked)
+ {
+ Rect rr;
+ RGBColor col;
+ CColor2RGBColor (fillColor, col);
+ RGBForeColor (&col);
+ CRect2Rect (rect, rr);
+ FillRect (&rr, &fillPattern);
+ }
+ if (drawStyle == kDrawStroked || drawStyle == kDrawFilledAndStroked)
+ {
+ RGBColor col;
+ CColor2RGBColor (frameColor, col);
+ RGBForeColor (&col);
+ MoveTo (rect.left, rect.top);
+ LineTo (rect.right-1, rect.top);
+ LineTo (rect.right-1, rect.bottom-1);
+ LineTo (rect.left, rect.bottom-1);
+ LineTo (rect.left, rect.top);
+ }
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+
+#elif MOTIF
+ XDrawRectangle (XDRAWPARAM, rect.left, rect.top, rect.width (), rect.height ());
+
+#elif BEOS
+ rgb_color c = { frameColor.red, frameColor.green, frameColor.blue, 255 };
+ pView->SetHighColor (c);
+ pView->SetDrawingMode (modeToPlatform [drawMode]);
+ BRect r (rect.left, rect.top, rect.right, rect.bottom);
+ pView->SetPenSize (frameWidth);
+ pView->StrokeRect (r);
+
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::fillRect (const CRect &_rect)
+{
+ CRect rect (_rect);
+ rect.offset (offset.h, offset.v);
+
+ // Don't draw boundary
+#if WINDOWS
+ RECT wr = {rect.left + 1, rect.top + 1, rect.right, rect.bottom};
+ HANDLE nullPen = GetStockObject (NULL_PEN);
+ HANDLE oldPen = SelectObject ((HDC)pSystemContext, nullPen);
+ FillRect ((HDC)pSystemContext, &wr, (HBRUSH)pBrush);
+ SelectObject ((HDC)pSystemContext, oldPen);
+
+#elif MAC
+ #if QUARTZ
+ CGContextRef context = beginCGContext (true);
+ {
+ CGRect r = CGRectMake (rect.left, rect.top, rect.width (), rect.height ());
+ CGContextFillRect (context, r);
+ releaseCGContext (context);
+ }
+ #else
+ Rect rr;
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ RGBColor col;
+ CColor2RGBColor (fillColor, col);
+ RGBForeColor (&col);
+ CRect2Rect (rect, rr);
+ rr.left++;
+ rr.top++;
+ FillRect (&rr, &fillPattern);
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+
+#elif MOTIF
+ XFillRectangle (XDRAWPARAM, rect.left + 1, rect.top + 1, rect.width () - 1, rect.height () - 1);
+
+#elif BEOS
+ rgb_color c = { fillColor.red, fillColor.green, fillColor.blue, 255 };
+ pView->SetHighColor (c);
+ pView->SetDrawingMode (modeToPlatform [drawMode]);
+ BRect r (rect.left + 1, rect.top + 1, rect.right - 1, rect.bottom - 1);
+ pView->FillRect (r);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::drawEllipse (const CRect &_rect, const CDrawStyle drawStyle)
+{
+ #if QUARTZ
+ CRect rect (_rect);
+ rect.offset (offset.h, offset.v);
+
+ CGContextRef context = beginCGContext (true);
+ {
+ CGPathDrawingMode m;
+ switch (drawStyle)
+ {
+ case kDrawFilled : m = kCGPathFill; break;
+ case kDrawFilledAndStroked : m = kCGPathFillStroke; break;
+ default : m = kCGPathStroke; break;
+ }
+ if (rect.width () != rect.height ())
+ {
+ CGContextSaveGState (context);
+
+ QuartzSetLineDash (context, lineStyle, frameWidth);
+
+ CGContextBeginPath (context);
+
+ CGRect cgRect = CGRectMake (rect.left, rect.top, rect.width (), rect.height ());
+ CGPoint center = CGPointMake (CGRectGetMidX (cgRect), CGRectGetMidY (cgRect));
+ float a = CGRectGetWidth (cgRect) / 2;
+ float b = CGRectGetHeight (cgRect) / 2;
+
+ CGContextTranslateCTM (context, center.x, center.y);
+ CGContextScaleCTM (context, a, b);
+ CGContextMoveToPoint (context, 1, 0);
+ CGContextAddArc (context, 0, 0, 1, radians (0), radians (360), 0);
+
+ CGContextClosePath (context);
+ CGContextRestoreGState (context);
+ CGContextDrawPath (context, m);
+ }
+ else
+ {
+ float radius = rect.width () * 0.5f;
+ CGContextBeginPath (context);
+ CGContextAddArc (context, rect.left + radius, rect.top + radius, radius, radians (0), radians (360), 0);
+ CGContextClosePath (context);
+ CGContextDrawPath (context, m);
+ }
+ releaseCGContext (context);
+ }
+
+ #else
+ CPoint point (_rect.left + (_rect.right - _rect.left) / 2, _rect.top);
+ drawArc (_rect, point, point);
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::fillEllipse (const CRect &_rect)
+{
+ CRect rect (_rect);
+ rect.offset (offset.h, offset.v);
+
+ // Don't draw boundary
+#if WINDOWS
+ HANDLE nullPen = GetStockObject (NULL_PEN);
+ HANDLE oldPen = SelectObject ((HDC)pSystemContext, nullPen);
+ Ellipse ((HDC)pSystemContext, rect.left + 1, rect.top + 1, rect.right + 1, rect.bottom + 1);
+ SelectObject ((HDC)pSystemContext, oldPen);
+
+#elif QUARTZ
+ CGContextRef context = beginCGContext (true);
+ {
+ CGContextSaveGState (context);
+ CGContextBeginPath (context);
+
+ CGRect cgRect = CGRectMake (rect.left, rect.top, rect.width (), rect.height ());
+ CGPoint center = CGPointMake (CGRectGetMidX (cgRect), CGRectGetMidY (cgRect));
+ float a = CGRectGetWidth (cgRect) / 2;
+ float b = CGRectGetHeight (cgRect) / 2;
+
+ CGContextTranslateCTM (context, center.x, center.y);
+ CGContextScaleCTM (context, a, b);
+ CGContextMoveToPoint (context, 1, 0);
+ CGContextAddArc (context, 0, 0, 1, radians (0), radians (360), 0);
+
+ CGContextClosePath (context);
+ CGContextRestoreGState (context);
+ CGContextDrawPath (context, kCGPathFill);
+ releaseCGContext (context);
+ }
+
+#else
+ CPoint point (_rect.left + ((_rect.right - _rect.left) / 2), _rect.top);
+ fillArc (_rect, point, point);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::drawPoint (const CPoint &_point, CColor color)
+{
+ CPoint point (_point);
+
+#if WINDOWS
+ point.offset (offset.h, offset.v);
+ SetPixel ((HDC)pSystemContext, point.h, point.v, RGB(color.red, color.green, color.blue));
+
+#elif MOTIF
+ CColor oldframecolor = frameColor;
+ setFrameColor (color);
+ XDrawPoint (XDRAWPARAM, point.h, point.v);
+ setFrameColor (oldframecolor);
+
+#elif MAC
+ CCoord oldframeWidth = frameWidth;
+ CColor oldframecolor = frameColor;
+ setLineWidth (1);
+ setFrameColor (color);
+ CPoint point2 (point);
+ point2.h++;
+ moveTo (point);
+ lineTo (point2);
+
+ setFrameColor (oldframecolor);
+ setLineWidth (oldframeWidth);
+
+#else
+ int oldframeWidth = frameWidth;
+ CColor oldframecolor = frameColor;
+ setLineWidth (1);
+ setFrameColor (color);
+ moveTo (point);
+ lineTo (point);
+
+ setFrameColor (oldframecolor);
+ setLineWidth (oldframeWidth);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+CColor CDrawContext::getPoint (const CPoint& _point)
+{
+ CPoint point (_point);
+ point.offset (offset.h, offset.v);
+ CColor color = kBlackCColor;
+
+ #if WINDOWS
+ COLORREF c = GetPixel ((HDC)pSystemContext, point.h, point.v);
+ color.red = GetRValue (c);
+ color.green = GetGValue (c);
+ color.blue = GetBValue (c);
+
+ #elif MAC
+ #if QUARTZ
+ // no quartz equivalent
+
+ #else
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ RGBColor cPix;
+ GetCPixel (point.h, point.v, &cPix);
+ RGBColor2CColor (cPix, color);
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+ #endif
+
+ return color;
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::floodFill (const CPoint& _start)
+{
+ CPoint start (_start);
+ start.offset (offset.h, offset.v);
+
+ #if WINDOWS
+ COLORREF c = GetPixel ((HDC)pSystemContext, start.h, start.v);
+ ExtFloodFill ((HDC)pSystemContext, start.h, start.v, c, FLOODFILLSURFACE);
+
+ #elif MAC
+ #if QUARTZ
+ // no quartz equivalent
+
+ #else
+ CGrafPtr oldPort;
+ GDHandle oldDevice;
+ GetGWorld (&oldPort, &oldDevice);
+ SetGWorld (getPort (), 0);
+
+ Rect r;
+ GetPortBounds (getPort (), &r);
+ GWorldPtr pMask;
+ OSErr err = NewGWorld ((GWorldPtr*)&pMask, 1, &r, 0, 0, 0); // create monochrome GWorld
+ if (!err)
+ {
+ // generate fill mask
+ PixMapHandle srcBits = GetGWorldPixMap (getPort ());
+ PixMapHandle dstBits = GetGWorldPixMap (pMask);
+ if (srcBits && dstBits)
+ {
+ LockPixels (srcBits);
+ LockPixels (dstBits);
+
+ SeedCFill ((BitMapPtr)*srcBits, (BitMapPtr)*dstBits, &r, &r, start.h, start.v, 0, 0);
+
+ // fill destination
+ RGBColor oldForeColor, oldBackColor;
+ GetForeColor (&oldForeColor);
+ GetBackColor (&oldBackColor);
+
+ ::BackColor (whiteColor);
+
+ RGBColor col;
+ CColor2RGBColor (fillColor, col);
+ RGBForeColor (&col);
+
+ CopyMask ((BitMapPtr)*dstBits, (BitMapPtr)*dstBits, (BitMapPtr)*srcBits, &r, &r, &r);
+
+ RGBForeColor (&oldForeColor);
+ RGBBackColor (&oldBackColor);
+
+ // cleanup
+ UnlockPixels (srcBits);
+ UnlockPixels (dstBits);
+ }
+
+ DisposeGWorld (pMask);
+ }
+
+ SetGWorld (oldPort, oldDevice);
+ #endif
+ #endif
+}
+
+#if QUARTZ
+void addOvalToPath(CGContextRef c, CPoint center, float a, float b, float start_angle, float end_angle)
+{
+ CGContextSaveGState (c);
+ CGContextTranslateCTM (c, center.x, center.y);
+ CGContextScaleCTM (c, a, b);
+
+ CGContextMoveToPoint (c, cos (radians (start_angle)), sin (radians (start_angle)));
+
+ CGContextAddArc(c, 0, 0, 1, radians (start_angle), radians (end_angle), 1);
+
+ CGContextRestoreGState(c);
+}
+#endif
+
+//-----------------------------------------------------------------------------
+void CDrawContext::drawArc (const CRect &_rect, const float _startAngle, const float _endAngle, const CDrawStyle drawStyle) // in degree
+{
+ CRect rect (_rect);
+ rect.offset (offset.h, offset.v);
+
+ #if WINDOWS
+ float startRad = (float)(k2PI * _startAngle / 360.f);
+ float endRad = (float)(k2PI * _endAngle / 360.f);
+
+ CPoint point1, point2;
+ long midX = _rect.width () / 2;
+ long midY = _rect.height () / 2;
+
+ point1.x = (long)(midX + midX * cosf (startRad));
+ point1.y = (long)(midY - midY * sinf (startRad));
+ point2.x = (long)(midX + midX * cosf (endRad));
+ point2.y = (long)(midY - midY * sinf (endRad));
+ point1.offset (offset.h, offset.v);
+ point2.offset (offset.h, offset.v);
+
+ if (drawStyle == kDrawFilled || drawStyle == kDrawFilledAndStroked)
+ {
+ HANDLE nullPen = GetStockObject (NULL_PEN);
+ HANDLE oldPen = SelectObject ((HDC)pSystemContext, nullPen);
+ Pie ((HDC)pSystemContext, rect.left, rect.top, rect.right + 1, rect.bottom + 1,
+ point1.h, point1.v, point2.h, point2.v);
+ SelectObject ((HDC)pSystemContext, oldPen);
+ }
+ if (drawStyle == kDrawStroked || drawStyle == kDrawFilledAndStroked)
+ {
+ Arc ((HDC)pSystemContext, rect.left, rect.top, rect.right + 1, rect.bottom + 1,
+ point1.h, point1.v, point2.h, point2.v);
+ }
+
+ #elif MOTIF
+
+ XDrawArc (XDRAWPARAM, rect.left, rect.top, rect.width (), rect.height (),
+ _startAngle * 64, _endAngle * 64);
+
+ #elif MAC
+
+ #if QUARTZ
+ CGContextRef context = beginCGContext (true);
+ {
+ CGPathDrawingMode m;
+ switch (drawStyle)
+ {
+ case kDrawFilled : m = kCGPathFill; break;
+ case kDrawFilledAndStroked : m = kCGPathFillStroke; break;
+ default : m = kCGPathStroke; break;
+ }
+ QuartzSetLineDash (context, lineStyle, frameWidth);
+
+ CGContextBeginPath (context);
+ addOvalToPath (context, CPoint (rect.left + rect.width () / 2, rect.top + rect.height () / 2), rect.width () / 2, rect.height () / 2, -_startAngle, -_endAngle);
+
+ CGContextDrawPath (context, m);
+ releaseCGContext (context);
+ }
+ #else
+ Rect rr;
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ RGBColor col;
+ CColor2RGBColor (frameColor, col);
+ RGBForeColor (&col);
+ CRect2Rect (rect, rr);
+ FrameArc (&rr, 90 - _startAngle, -_endAngle);
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+
+ #elif BEOS
+ rgb_color c = { frameColor.red, frameColor.green, frameColor.blue, 255 };
+ pView->SetHighColor (c);
+ pView->SetDrawingMode (modeToPlatform [drawMode]);
+ BRect r (rect.left, rect.top, rect.right, rect.bottom);
+ pView->SetPenSize (frameWidth);
+ pView->StrokeArc (r, _startAngle, _endAngle);
+
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::drawArc (const CRect &_rect, const CPoint &_point1, const CPoint &_point2)
+{
+ CRect rect (_rect);
+ rect.offset (offset.h, offset.v);
+ CPoint point1 (_point1);
+ point1.offset (offset.h, offset.v);
+ CPoint point2 (_point2);
+ point2.offset (offset.h, offset.v);
+
+ // draws from point1 to point2 counterclockwise
+#if WINDOWS
+ Arc ((HDC)pSystemContext, rect.left, rect.top, rect.right + 1, rect.bottom + 1,
+ point1.h, point1.v, point2.h, point2.v);
+
+#elif MAC || MOTIF || BEOS
+
+ int angle1, angle2;
+ if ((point1.v == point2.v) && (point1.h == point2.h))
+ {
+ angle1 = 0;
+ angle2 = 23040; // 360 * 64
+ }
+ else
+ {
+ CPoint pm ((rect.left + rect.right) / 2, (rect.top + rect.bottom) / 2);
+ angle1 = convertPoint2Angle (pm, point1);
+ angle2 = convertPoint2Angle (pm, point2) - angle1;
+ if (angle2 < 0)
+ angle2 += 23040; // 360 * 64
+ }
+
+#if MAC
+
+ #if QUARTZ
+ angle1 /= 64;
+ angle2 /= 64;
+ CGContextRef context = beginCGContext (true);
+ {
+ QuartzSetLineDash (context, lineStyle, frameWidth);
+
+ CGContextBeginPath (context);
+ addOvalToPath (context, CPoint (rect.left + rect.width () / 2, rect.top + rect.height () / 2), rect.width () / 2, rect.height () / 2, 90-angle1, (90-angle1)-angle2);
+ CGContextDrawPath (context, kCGPathStroke);
+ releaseCGContext (context);
+ }
+ #else
+ Rect rr;
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ RGBColor col;
+ CColor2RGBColor (frameColor, col);
+ RGBForeColor (&col);
+ CRect2Rect (rect, rr);
+ FrameArc (&rr, 90 - (angle1 / 64), -angle2 / 64);
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+
+#elif MOTIF
+ XDrawArc (XDRAWPARAM, rect.left, rect.top, rect.width (), rect.height (),
+ angle1, angle2);
+
+#elif BEOS
+ rgb_color c = { frameColor.red, frameColor.green, frameColor.blue, 255 };
+ pView->SetHighColor (c);
+ pView->SetDrawingMode (modeToPlatform [drawMode]);
+ BRect r (rect.left, rect.top, rect.right, rect.bottom);
+ pView->SetPenSize (frameWidth);
+ pView->StrokeArc (r, angle1 / 64, angle2 / 64);
+#endif
+
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::fillArc (const CRect &_rect, const CPoint &_point1, const CPoint &_point2)
+{
+ CRect rect (_rect);
+ rect.offset (offset.h, offset.v);
+ CPoint point1 (_point1);
+ point1.offset (offset.h, offset.v);
+ CPoint point2 (_point2);
+ point2.offset (offset.h, offset.v);
+
+ // Don't draw boundary
+#if WINDOWS
+ HANDLE nullPen = GetStockObject (NULL_PEN);
+ HANDLE oldPen = SelectObject ((HDC)pSystemContext, nullPen);
+ Pie ((HDC)pSystemContext, offset.h + rect.left + 1, offset.v + rect.top + 1, offset.h + rect.right, offset.v + rect.bottom,
+ point1.h, point1.v, point2.h, point2.v);
+ SelectObject ((HDC)pSystemContext, oldPen);
+
+#elif MAC || MOTIF || BEOS
+
+ int angle1, angle2;
+ if ((point1.v == point2.v) && (point1.h == point2.h))
+ {
+ angle1 = 0;
+ angle2 = 23040; // 360 * 64
+ }
+ else
+ {
+ CPoint pm ((rect.left + rect.right) / 2, (rect.top + rect.bottom) / 2);
+ angle1 = convertPoint2Angle (pm, point1);
+ angle2 = convertPoint2Angle (pm, point2);
+ }
+
+#if MAC
+ #if QUARTZ
+ angle1 /= 64;
+ angle2 /= 64;
+ CGContextRef context = beginCGContext (true);
+ {
+ CGContextBeginPath (context);
+ addOvalToPath (context, CPoint (rect.left + rect.width () / 2, rect.top + rect.height () / 2), rect.width () / 2, rect.height () / 2, -angle1, -angle2);
+ CGContextClosePath (context);
+ CGContextDrawPath (context, kCGPathFill);
+ releaseCGContext (context);
+ }
+
+ #else
+ Rect rr;
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ RGBColor col;
+ CColor2RGBColor (fillColor, col);
+ RGBForeColor (&col);
+ CRect2Rect (rect, rr);
+
+ angle2 = angle2 - angle1;
+ if (angle2 < 0)
+ angle2 = -angle2;
+ FillArc (&rr, 90 - (angle1 / 64), -angle2 / 64, &fillPattern);
+
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+
+#elif MOTIF
+ XFillArc (XDRAWPARAM, rect.left, rect.top, rect.width (), rect.height (),
+ angle1, angle2);
+
+#elif BEOS
+ rgb_color c = { fillColor.red, fillColor.green, fillColor.blue, 255 };
+ pView->SetHighColor (c);
+ pView->SetDrawingMode (modeToPlatform [drawMode]);
+ BRect r (rect.left + 1, rect.top + 1, rect.right - 1, rect.bottom - 1);
+ pView->FillArc (r, angle1 / 64, angle2 / 64);
+
+#endif
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::setFontColor (const CColor color)
+{
+ fontColor = color;
+
+#if WINDOWS
+ SetTextColor ((HDC)pSystemContext, RGB (fontColor.red, fontColor.green, fontColor.blue));
+
+#elif MAC
+ #if QUARTZ
+ // on quartz the fill color is the font color
+
+ #else
+ RGBColor col;
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ if (pWindow)
+ {
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ CColor2RGBColor (fontColor, col);
+ RGBForeColor (&col);
+ SetGWorld (OrigPort, OrigDevice);
+ }
+ #endif
+
+#elif MOTIF
+ setFrameColor (fontColor);
+
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::setFrameColor (const CColor color)
+{
+ if (frameColor == color)
+ return;
+
+ frameColor = color;
+
+#if WINDOWS
+ LOGPEN logPen = {iPenStyle, {frameWidth, frameWidth},
+ RGB (frameColor.red, frameColor.green, frameColor.blue)};
+
+ HANDLE newPen = CreatePenIndirect (&logPen);
+ SelectObject ((HDC)pSystemContext, newPen);
+ if (pPen)
+ DeleteObject (pPen);
+ pPen = newPen;
+
+#elif MAC
+ #if QUARTZ
+ if (gCGContext)
+ CGContextSetRGBStrokeColor (gCGContext, color.red/255.f, color.green/255.f, color.blue/255.f, color.alpha/255.f);
+ #else
+ RGBColor col;
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ if (pWindow)
+ {
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ CColor2RGBColor (frameColor, col);
+ RGBForeColor (&col);
+ SetGWorld (OrigPort, OrigDevice);
+ }
+ #endif
+
+#elif MOTIF
+ XSetForeground (XGCPARAM, getIndexColor (frameColor));
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::setFillColor (const CColor color)
+{
+ if (fillColor == color)
+ return;
+
+ fillColor = color;
+
+#if WINDOWS
+ SetBkColor ((HDC)pSystemContext, RGB (color.red, color.green, color.blue));
+ LOGBRUSH logBrush = {BS_SOLID, RGB (color.red, color.green, color.blue), 0 };
+ HANDLE newBrush = CreateBrushIndirect (&logBrush);
+ if (newBrush == 0)
+ {
+ DWORD err = GetLastError ();
+ return;
+ }
+ SelectObject ((HDC)pSystemContext, newBrush);
+ if (pBrush)
+ DeleteObject (pBrush);
+ pBrush = newBrush;
+
+#elif MAC
+ #if QUARTZ
+ if (gCGContext)
+ CGContextSetRGBFillColor (gCGContext, color.red/255.f, color.green/255.f, color.blue/255.f, color.alpha/255.f);
+ #else
+ RGBColor col;
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ if (pWindow)
+ {
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+ CColor2RGBColor (fillColor, col);
+ RGBForeColor (&col);
+ SetGWorld (OrigPort, OrigDevice);
+ }
+ #endif
+
+#elif MOTIF
+ // set the background for the text
+ XSetBackground (XGCPARAM, getIndexColor (fillColor));
+
+ // set the foreground for the fill
+ setFrameColor (fillColor);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::setFont (CFont fontID, const long size, long style)
+{
+ if (fontID < 0 || fontID >= kNumStandardFonts)
+ fontID = kSystemFont;
+
+ if (fontId == fontID && fontSize == (size != 0 ? size : gStandardFontSize[fontID]) && fontStyle == style)
+ return;
+
+ fontStyle = style;
+ fontId = fontID;
+ if (size != 0)
+ fontSize = size;
+ else
+ fontSize = gStandardFontSize[fontID];
+
+#if WINDOWS
+ LOGFONT logfont = {0};
+
+ if (style & kBoldFace)
+ logfont.lfWeight = FW_BOLD;
+ else
+ logfont.lfWeight = FW_NORMAL;
+ if (style & kItalicFace)
+ logfont.lfItalic = true;
+ if (style & kUnderlineFace)
+ logfont.lfUnderline = true;
+
+ logfont.lfHeight = -fontSize;
+ logfont.lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;
+ strcpy (logfont.lfFaceName, gStandardFontName[fontID]);
+
+ if (fontID == kSymbolFont)
+ logfont.lfPitchAndFamily = DEFAULT_PITCH | FF_DECORATIVE;
+ else if (fontID == kSystemFont)
+ logfont.lfWeight = FW_BOLD;
+
+ logfont.lfClipPrecision = CLIP_STROKE_PRECIS;
+ logfont.lfOutPrecision = OUT_STRING_PRECIS;
+ logfont.lfQuality = DEFAULT_QUALITY;
+ logfont.lfCharSet = ANSI_CHARSET;
+
+ HANDLE newFont = CreateFontIndirect (&logfont);
+ SelectObject ((HDC)pSystemContext, newFont);
+ if (pFont)
+ DeleteObject (pFont);
+ pFont = newFont;
+
+#elif MAC
+ #if QUARTZ
+ char myMacXFontName[255];
+ strcpy(myMacXFontName, gMacXfontNames[fontId]);
+ if (style & kBoldFace)
+ strcat(myMacXFontName, " Bold");
+ if (style & kItalicFace)
+ strcat(myMacXFontName, " Italic");
+ if (style & kUnderlineFace)
+ strcat(myMacXFontName, " Underline");
+
+ if (gCGContext)
+ CGContextSelectFont (gCGContext, (const char*)myMacXFontName, fontSize, kCGEncodingMacRoman);
+ #else
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ if (pWindow)
+ {
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+
+ TextFace (style); // normal, bold, italic, underline...
+ TextMode (0);
+ TextSize (fontSize);
+
+ #if MACX
+ short familyID;
+
+ GetFNum (gMacXfontNames[fontID], &familyID);
+
+ TextFont (familyID);
+
+ #else
+ if (fontID == kSymbolFont)
+ TextFont (kFontIDSymbol);
+ else if (fontID == kSystemFont)
+ TextFont (0); // system
+ else if (fontID == kNormalFontSmaller)
+ TextFont (kFontIDGeneva); // Geneva
+ else
+ TextFont (kFontIDHelvetica);
+ #endif
+
+ GetFontInfo (&fontInfoStruct);
+ SetGWorld (OrigPort, OrigDevice);
+ }
+ #endif
+
+#elif MOTIF
+ XSetFont (XGCPARAM, gFontStructs[fontID]->fid);
+
+ // keep trace of the current font
+ pFontInfoStruct = gFontStructs[fontID];
+
+#elif BEOS
+ font.SetFamilyAndStyle (gStandardFontName[fontID], gStandardFontStyle[fontID]);
+ font.SetSize (fontSize);
+ pView->SetFont (&font, B_FONT_FAMILY_AND_STYLE | B_FONT_SIZE);
+#endif
+}
+
+//------------------------------------------------------------------------------
+CCoord CDrawContext::getStringWidth (const char *pStr)
+{
+ CCoord result = 0;
+
+ #if MAC
+ #if QUARTZ
+ CGContextRef context = beginCGContext (true);
+ if (context)
+ {
+ CGContextSetTextDrawingMode (context, kCGTextInvisible);
+ CGContextSetTextPosition (context, 0.f, 0.f);
+ CGContextShowText (context, pStr, strlen (pStr));
+ CGPoint p = CGContextGetTextPosition (context);
+ result = (CCoord)p.x;
+ releaseCGContext (context);
+ }
+ #else
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+
+ result = (long)TextWidth (pStr, 0, strlen (pStr));
+
+ SetGWorld (OrigPort, OrigDevice);
+ #endif
+
+ #elif WINDOWS
+ SIZE size;
+ GetTextExtentPoint32 ((HDC)pSystemContext, pStr, (int)strlen (pStr), &size);
+ result = (long)size.cx;
+
+ #elif MOTIF
+ result = (long)XTextWidth (pFontInfoStruct, pStr, strlen (pStr));
+
+ #elif BEOS
+ result = (long)(ceil (pView->StringWidth (pStr)));
+ #endif
+
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::drawString (const char *string, const CRect &_rect,
+ const short opaque, const CHoriTxtAlign hAlign)
+{
+ if (!string)
+ return;
+
+ CRect rect (_rect);
+ rect.offset (offset.h, offset.v);
+
+#if WINDOWS
+ // set the visibility mask
+ SetBkMode ((HDC)pSystemContext, opaque ? OPAQUE : TRANSPARENT);
+
+ RECT Rect = {rect.left, rect.top, rect.right, rect.bottom};
+ UINT flag = DT_VCENTER + DT_SINGLELINE + DT_NOPREFIX;
+ switch (hAlign)
+ {
+ case kCenterText:
+ // without DT_SINGLELINE no vertical center alignment here
+ DrawText ((HDC)pSystemContext, string, (int)strlen (string), &Rect, flag + DT_CENTER);
+ break;
+
+ case kRightText:
+ DrawText ((HDC)pSystemContext, string, (int)strlen (string), &Rect, flag + DT_RIGHT);
+ break;
+
+ default : // left adjust
+ Rect.left++;
+ DrawText ((HDC)pSystemContext, string, (int)strlen (string), &Rect, flag + DT_LEFT);
+ }
+
+ SetBkMode ((HDC)pSystemContext, TRANSPARENT);
+
+#elif MAC
+ #if QUARTZ
+ CGContextRef context = beginCGContext (true);
+ if (context)
+ {
+ CCoord strWidth = getStringWidth (string);
+ rect.bottom -= rect.height ()/2 - fontSize / 2 + 1;
+ switch (hAlign)
+ {
+ case kCenterText:
+ {
+ rect.left += rect.width () / 2 - strWidth/2;
+ break;
+ }
+ case kRightText:
+ rect.left = rect.right - strWidth;
+ break;
+ default : // left adjust
+ rect.left++;
+ }
+
+ CGContextSetShouldAntialias (context, true);
+ CGContextSetTextDrawingMode (context, kCGTextFill);
+ CGContextSetRGBFillColor (context, fontColor.red/255.f, fontColor.green/255.f, fontColor.blue/255.f, fontColor.alpha/255.f);
+ CGContextSetTextPosition (context, rect.left, rect.bottom);
+ CGContextShowText (context, string, strlen (string));
+ releaseCGContext (context);
+ }
+
+ #else
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ int width;
+ int xPos, yPos;
+ int fontHeight;
+ int rectHeight;
+ int stringLength;
+
+ Rect stringsRect;
+ Rect contextsClip;
+ Rect compositeClip;
+
+ CRect2Rect (rect, stringsRect);
+ CRect2Rect (clipRect, contextsClip);
+
+ if (SectRect (&stringsRect, &contextsClip, &compositeClip))
+ {
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld (getPort (), NULL);
+
+ if (opaque)
+ TextMode (srcCopy);
+ else
+ TextMode (srcOr);
+
+ RGBColor col;
+ CColor2RGBColor (fontColor, col);
+ RGBForeColor (&col);
+
+ CColor2RGBColor (fillColor, col);
+ RGBBackColor (&col);
+
+ rectHeight = rect.height ();
+ fontHeight = fontInfoStruct.ascent + fontInfoStruct.descent;
+ yPos = rect.bottom - fontInfoStruct.descent;
+ if (rectHeight >= fontHeight)
+ yPos -= (rectHeight - fontHeight) / 2;
+
+ stringLength = strlen (string);
+ width = TextWidth ((Ptr)string, 0, stringLength);
+
+ switch (hAlign)
+ {
+ case kCenterText:
+ xPos = (rect.right + rect.left - width) / 2;
+ break;
+
+ case kRightText:
+ xPos = rect.right - width;
+ break;
+
+ default: // left adjust
+ xPos = rect.left;
+ }
+
+ RgnHandle saveRgn = NewRgn ();
+ GetClip (saveRgn);
+
+ ClipRect (&compositeClip);
+
+ #if TARGET_API_MAC_CARBON
+ CFStringRef str;
+
+ // Create a unicode string
+ str = CFStringCreateWithCString(NULL, string, kCFStringEncodingMacRoman);
+
+ // Initialize proper text box options
+ TXNTextBoxOptionsData myOptions;
+ myOptions.optionTags = kTXNSetJustificationMask;
+ myOptions.justification = kTXNFlushLeft;
+
+ // Determine the vertical alignment of the text box.
+ // It is centered vertically.
+ // Somehow, the yPos calculation above doesn't work here
+ // or I am too stupid to understand it. Therefore I calculate
+ // the text position in the surrounding control rect myself.
+ long myHeight = (rect.height () - fontHeight) / 2;
+ if (myHeight>0)
+ {
+ stringsRect.top += myHeight;
+ stringsRect.bottom += myHeight;
+ }
+ stringsRect.left = xPos;
+ stringsRect.right = xPos + width;//rect.width ();
+
+ // Draw the unicode string
+ TXNDrawCFStringTextBox (str, &stringsRect, NULL, &myOptions);
+
+ // Release the unicode string
+ CFRelease (str);
+ #else
+ MoveTo (xPos, yPos);
+ DrawText ((Ptr)string, 0, stringLength);
+ #endif
+
+ SetClip (saveRgn);
+ DisposeRgn (saveRgn);
+ TextMode (srcOr);
+ SetGWorld (OrigPort, OrigDevice);
+ }
+ #endif
+
+#elif MOTIF
+ int width;
+ int fontHeight = pFontInfoStruct->ascent + pFontInfoStruct->descent;
+ int xPos;
+ int yPos;
+ int rectHeight = rect.height ();
+
+ if (rectHeight >= fontHeight)
+ yPos = rect.bottom - (rectHeight - fontHeight) / 2;
+ else
+ yPos = rect.bottom;
+ yPos -= pFontInfoStruct->descent;
+
+ switch (hAlign)
+ {
+ case kCenterText:
+ width = XTextWidth (pFontInfoStruct, string, strlen (string));
+ xPos = (rect.right + rect.left - width) / 2;
+ break;
+
+ case kRightText:
+ width = XTextWidth (pFontInfoStruct, string, strlen (string));
+ xPos = rect.right - width;
+ break;
+
+ default: // left adjust
+ xPos = rect.left + 1;
+ }
+
+ if (opaque)
+ XDrawImageString (XDRAWPARAM, xPos, yPos, string, strlen (string));
+ else
+ XDrawString (XDRAWPARAM, xPos, yPos, string, strlen (string));
+
+#elif BEOS
+ BRect r (rect.left, rect.top, rect.right - 1, rect.bottom - 1);
+ BRegion LocalRegion (r);
+ pView->ConstrainClippingRegion (&LocalRegion);
+ pView->SetFontSize (fontSize);
+ float width = -1;
+ if (opaque)
+ {
+ width = ceil (pView->StringWidth (string));
+ CRect cr (rect.left, rect.top, rect.left + width, rect.bottom);
+ fillRect (cr);
+ }
+ rgb_color c = { fontColor.red, fontColor.green, fontColor.blue, 255 };
+ pView->SetHighColor (c);
+ if (drawMode == kXorMode)
+ pView->SetDrawingMode (B_OP_INVERT);
+ else
+ pView->SetDrawingMode (B_OP_OVER);
+ BPoint p;
+ font_height height;
+ pView->GetFontHeight (&height);
+ p.y = r.bottom - (rect.height () - height.ascent) / 2;
+ if (hAlign == kCenterText || hAlign == kRightText)
+ {
+ if (width < 0)
+ width = ceil (pView->StringWidth (string));
+ if (hAlign == kCenterText)
+ p.x = rect.left + (rect.right - rect.left - width) / 2;
+ else
+ p.x = rect.right - width - 1;
+ }
+ else
+ p.x = rect.left + 1;
+ pView->DrawString (string, p);
+ pView->ConstrainClippingRegion (NULL);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+long CDrawContext::getMouseButtons ()
+{
+ long buttons = 0;
+
+#if WINDOWS
+ if (GetAsyncKeyState (VK_LBUTTON) < 0)
+ buttons |= (bSwapped_mouse_buttons ? kRButton : kLButton);
+ if (GetAsyncKeyState (VK_MBUTTON) < 0)
+ buttons |= kMButton;
+ if (GetAsyncKeyState (VK_RBUTTON) < 0)
+ buttons |= (bSwapped_mouse_buttons ? kLButton : kRButton);
+
+ if (GetAsyncKeyState (VK_SHIFT) < 0)
+ buttons |= kShift;
+ if (GetAsyncKeyState (VK_CONTROL) < 0)
+ buttons |= kControl;
+ if (GetAsyncKeyState (VK_MENU) < 0)
+ buttons |= kAlt;
+
+#elif MAC
+ #if MACX // this works for MacOSX 10.2 and later
+ UInt32 state = GetCurrentButtonState ();
+ if (state & kEventMouseButtonPrimary)
+ buttons |= kLButton;
+ if (state & kEventMouseButtonSecondary)
+ buttons |= kRButton;
+ if (state & 4)//kEventMouseButtonTertiary) this define is false...Apple ?
+ buttons |= kMButton;
+
+ state = GetCurrentKeyModifiers ();
+ if (state & cmdKey)
+ buttons |= kControl;
+ if (state & shiftKey)
+ buttons |= kShift;
+ if (state & optionKey)
+ buttons |= kAlt;
+ if (state & controlKey)
+ buttons |= kApple;
+ // for the one buttons
+ if (buttons & kApple && buttons & kLButton)
+ {
+ buttons &= ~(kApple | kLButton);
+ buttons |= kRButton;
+ }
+ #else
+ if (Button ())
+ buttons |= kLButton;
+
+ KeyMap Keys;
+ unsigned char *BytePtr = (unsigned char*)Keys;
+ GetKeys (Keys);
+
+ if (BytePtr[7] & 1) // Shift 0x38 == 56 = (7 * 8) + 0
+ buttons |= kShift;
+ if (BytePtr[7] & 8) // Control (extra Mac) 0x3B == 59 = (7 * 8) + 3
+ buttons |= kApple;
+ if (BytePtr[7] & 4) // Alt 0x3A == 58 = (7 * 8) + 2
+ buttons |= kAlt;
+ if (BytePtr[6] & 128) // Apple => ctrl (PC) 0x37 == 55 = (6 * 8) + 7
+ buttons |= kControl;
+ #endif
+
+#elif MOTIF
+ Window root, child;
+ long rootX, rootY, childX, childY;
+ unsigned int mask;
+ int result = XQueryPointer (XWINPARAM, &root, &child, &rootX, &rootY,
+ &childX, &childY, &mask);
+ if (mask & Button1Mask)
+ buttons |= kLButton;
+ if (mask & Button2Mask)
+ buttons |= kMButton;
+ if (mask & Button3Mask)
+ buttons |= kRButton;
+
+ if (mask & ShiftMask)
+ buttons |= kShift;
+ if (mask & ControlMask)
+ buttons |= kControl;
+ if (mask & Mod1Mask)
+ buttons |= kAlt;
+
+#elif BEOS
+ BPoint where;
+ uint32 b;
+ pView->GetMouse (&where, &b);
+ if (b & B_PRIMARY_MOUSE_BUTTON)
+ buttons |= kLButton;
+ if (b & B_SECONDARY_MOUSE_BUTTON)
+ buttons |= kRButton;
+ if (b & B_TERTIARY_MOUSE_BUTTON)
+ buttons |= kMButton;
+ int32 m = modifiers ();
+ if (m & B_SHIFT_KEY)
+ buttons |= kShift;
+ if (m & B_COMMAND_KEY)
+ buttons |= kControl;
+ if (m & B_OPTION_KEY)
+ buttons |= kApple;
+ if (m & B_CONTROL_KEY)
+ buttons |= kAlt;
+#endif
+
+ return buttons;
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::getMouseLocation (CPoint &point)
+{
+#if WINDOWS
+ POINT where;
+ GetCursorPos (&where);
+ point (where.x, where.y);
+
+#elif MACX
+ #if 0 // QUARTZ // does not work sic!
+ Point where;
+ UInt32 mod;
+ MouseTrackingResult result;
+ if (TrackMouseLocationWithOptions ((CGrafPtr)-1, 0, kEventDurationNoWait, &where, &mod, &result) == noErr)
+ {
+ QDGlobalToLocalPoint (getPort (), &where);
+ point (where.h, where.v);
+ }
+ #else
+ Point where;
+ CGrafPtr savedPort;
+ Boolean portChanged = QDSwapPort (getPort (), &savedPort);
+ GetMouse (&where);
+ if (portChanged)
+ QDSwapPort (savedPort, NULL);
+ point (where.h, where.v);
+ #endif
+ #if QUARTZ
+ point.offset (pFrame->hiScrollOffset.x,pFrame->hiScrollOffset.y);
+ #endif
+#elif MAC
+ Point where;
+ GetMouse (&where);
+ point (where.h, where.v);
+
+#elif MOTIF
+ Window root, child;
+ int rootX, rootY, childX, childY;
+ unsigned int mask;
+ int result = XQueryPointer (XWINPARAM, &root, &child, &rootX, &rootY,
+ &childX, &childY, &mask);
+ point (childX, childY);
+
+#elif BEOS
+ BPoint where;
+ uint32 b;
+ pView->GetMouse (&where, &b);
+ point (where.x, where.y);
+#endif
+
+ point.offset (-offsetScreen.h, -offsetScreen.v);
+}
+
+//-----------------------------------------------------------------------------
+bool CDrawContext::waitDoubleClick ()
+{
+ bool doubleClick = false;
+
+#if WINDOWS
+ CPoint mouseLoc;
+ getMouseLocation (mouseLoc);
+ CRect observe (mouseLoc.h - 2, mouseLoc.v - 2, mouseLoc.h + 2, mouseLoc.v + 2);
+
+ DWORD currentTime = GetTickCount ();
+ DWORD clickTime = GetMessageTime () + (DWORD)GetDoubleClickTime ();
+
+ MSG message;
+ while (currentTime < clickTime)
+ {
+ getMouseLocation (mouseLoc);
+ if (!observe.pointInside (mouseLoc))
+ break;
+
+ if (PeekMessage (&message, 0, WM_LBUTTONDOWN, WM_LBUTTONDOWN, PM_REMOVE | PM_NOYIELD))
+ {
+ doubleClick = true;
+ break;
+ }
+
+ currentTime = GetTickCount ();
+ }
+
+#elif MAC
+ #if MACX
+ #if QUARTZ
+ EventTimeout timeout = GetDblTime () * kEventDurationSecond / 60;
+ const EventTypeSpec eventTypes[] = { { kEventClassMouse, kEventMouseDown }, { kEventClassMouse, kEventMouseDragged } };
+ EventRef event;
+ if (ReceiveNextEvent (GetEventTypeCount (eventTypes), eventTypes, timeout, true, &event) == noErr)
+ {
+ if (GetEventKind (event) == kEventMouseDown)
+ {
+ doubleClick = true;
+ }
+ ReleaseEvent (event);
+ }
+
+ #else
+ unsigned long clickTime, doubletime;
+ EventRecord downEvent;
+
+ doubletime = GetDblTime ();
+ clickTime = TickCount () + doubletime;
+ while (TickCount () < clickTime)
+ {
+ if (GetNextEvent (mDownMask, &downEvent))
+ {
+ doubleClick = true;
+ break;
+ }
+ }
+ #endif // !QUARTZ
+
+ #else
+ long clickTime, doubleTime;
+ EventRecord downEvent;
+
+ #define MOUSE_IS_DOWN ((* (char*)0x172) >= 0)
+
+ doubleTime = GetDblTime () / 2;
+ clickTime = TickCount () + doubleTime;
+
+ while (TickCount () < clickTime)
+ if (!MOUSE_IS_DOWN) break; /* look for mouse up! */
+
+ if (GetNextEvent (mUpMask, &downEvent))
+ {
+ clickTime += doubleTime;
+ while (TickCount () < clickTime)
+ if (MOUSE_IS_DOWN) break; /* look for mouse down! */
+ if (GetNextEvent (mDownMask, &downEvent))
+ doubleClick = true;
+ }
+ #endif
+#elif MOTIF
+ long currentTime = _getTicks ();
+ long clickTime = currentTime + XtGetMultiClickTime (pDisplay);
+
+ XEvent e;
+ while (currentTime < clickTime)
+ {
+ if (XCheckTypedEvent (pDisplay, ButtonPress, &e))
+ {
+ doubleClick = true;
+ break;
+ }
+
+ currentTime = _getTicks ();
+ }
+
+#elif BEOS
+ const bigtime_t snoozeTime = 5000;
+ bigtime_t latest = system_time ();
+ bigtime_t doubleclicktime;
+ get_click_speed (&doubleclicktime);
+ latest += doubleclicktime;
+ BPoint location;
+ uint32 buttons;
+ pView->GetMouse (&location, &buttons);
+ while (buttons) // user should release the mouse button
+ {
+ if (system_time () > latest)
+ return false;
+
+ snooze (snoozeTime);
+ pView->GetMouse (&location, &buttons);
+ }
+
+ while (!buttons)
+ {
+ if (system_time () > latest)
+ return false;
+
+ snooze (snoozeTime);
+ pView->GetMouse (&location, &buttons);
+ }
+
+ doubleClick = true;
+
+#endif
+
+ return doubleClick;
+}
+
+//-----------------------------------------------------------------------------
+bool CDrawContext::waitDrag ()
+{
+ #if MACX && QUARTZ
+ bool dragged = false;
+ if (GetCurrentEventButtonState () & kEventMouseButtonPrimary)
+ {
+ const EventTypeSpec eventTypes[] = { { kEventClassMouse, kEventMouseUp }, { kEventClassMouse, kEventMouseDown }, { kEventClassMouse, kEventMouseDragged } };
+ EventRef event;
+ if (ReceiveNextEvent (GetEventTypeCount (eventTypes), eventTypes, kEventDurationForever, true, &event) == noErr)
+ {
+ if (GetEventKind (event) == kEventMouseDragged)
+ {
+ dragged = true;
+ }
+ ReleaseEvent (event);
+ }
+ }
+ return dragged;
+
+ #else
+ if (!pFrame)
+ return false;
+
+ CPoint mouseLoc;
+ getMouseLocation (mouseLoc);
+ CRect observe (mouseLoc.h - 2, mouseLoc.v - 2, mouseLoc.h + 2, mouseLoc.v + 2);
+
+ long currentTime = pFrame->getTicks ();
+ bool wasOutside = false;
+
+ while (((getMouseButtons () & ~(kMButton|kRButton)) & kLButton) != 0)
+ {
+ pFrame->doIdleStuff ();
+ if (!wasOutside)
+ {
+ getMouseLocation (mouseLoc);
+ if (!observe.pointInside (mouseLoc))
+ {
+ if (kDragDelay <= 0)
+ return true;
+ wasOutside = true;
+ }
+ }
+
+ if (wasOutside && (pFrame->getTicks () - currentTime > kDragDelay))
+ return true;
+ }
+ return false;
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::forget ()
+{
+ #if QUARTZ
+ synchronizeCGContext ();
+ #endif
+ CReferenceCounter::forget ();
+}
+
+//-----------------------------------------------------------------------------
+#if MOTIF
+//-----------------------------------------------------------------------------
+long CDrawContext::getIndexColor (CColor color)
+{
+ // 24bit visual ?
+ if (pFrame->getDepth () == 24)
+ return (unsigned int)color.blue << 16 | (unsigned int)color.green << 8 | (unsigned int)color.red;
+
+ // 8bit stuff
+ return getIndexColor8Bit (color, pDisplay, pFrame->getColormap ());
+}
+
+//-----------------------------------------------------------------------------
+Colormap CDrawContext::getColormap ()
+{
+ if (pFrame)
+ return pFrame->getColormap ();
+ else
+ return NULL;
+}
+
+//-----------------------------------------------------------------------------
+Visual* CDrawContext::getVisual ()
+{
+ if (pFrame)
+ return pFrame->getVisual ();
+ else
+ return NULL;
+}
+
+//-----------------------------------------------------------------------------
+unsigned int CDrawContext::getDepth ()
+{
+ if (pFrame)
+ return pFrame->getDepth ();
+ else
+ return NULL;
+}
+
+//-----------------------------------------------------------------------------
+#elif BEOS
+//-----------------------------------------------------------------------------
+void CDrawContext::lineFromTo (CPoint& cstart, CPoint& cend)
+{
+ BPoint start (cstart.h, cstart.v);
+ BPoint end (cend.h, cend.v);
+ if (start.x == end.x)
+ {
+ if (start.y < end.y)
+ end.y--;
+ else if (end.y < start.y)
+ start.y--;
+ }
+ else if (start.y == end.y)
+ {
+ if (start.x < end.x)
+ end.x--;
+ else if (end.x < start.x)
+ start.x--;
+ }
+ else
+ {
+ if (start.x > end.x)
+ {
+ BPoint t = end;
+ end = start;
+ start = t;
+ }
+ end.x--;
+ if (end.y > start.y)
+ end.y--;
+ else
+ end.y++;
+ }
+
+ pView->MovePenTo (start);
+ if (lineStyle == kLineSolid)
+ pView->StrokeLine (end);
+ else
+ {
+ pattern stripes = { {0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3} };
+ pView->StrokeLine (end, stripes);
+ }
+}
+
+//-----------------------------------------------------------------------------
+#elif MAC
+#if QUARTZ
+//-----------------------------------------------------------------------------
+CGContextRef CDrawContext::beginCGContext (bool swapYAxis)
+{
+ if (gCGContext)
+ {
+ CGContextSaveGState (gCGContext);
+ CGContextScaleCTM (gCGContext, 1, -1);
+ QuartzSetupClip (gCGContext, clipRect);
+ if (!swapYAxis)
+ CGContextScaleCTM (gCGContext, 1, -1);
+ return gCGContext;
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::releaseCGContext (CGContextRef context)
+{
+ if (context)
+ {
+ CGContextRestoreGState (context);
+ needToSynchronizeCGContext = true;
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::synchronizeCGContext ()
+{
+ if (needToSynchronizeCGContext && gCGContext)
+ {
+ CGContextSynchronize (gCGContext);
+ needToSynchronizeCGContext = false;
+ }
+}
+
+//-----------------------------------------------------------------------------
+CGImageRef CDrawContext::getCGImage () const
+{
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+void QuartzSetupClip (CGContextRef context, const CRect clipRect)
+{
+ CGRect cgClipRect = CGRectMake (clipRect.left, clipRect.top, clipRect.width (), clipRect.height ());
+ CGContextClipToRect (context, cgClipRect);
+}
+
+//-----------------------------------------------------------------------------
+void QuartzSetLineDash (CGContextRef context, CLineStyle style, CCoord lineWidth)
+{
+ if (style == kLineOnOffDash)
+ {
+ float offset = 0;
+ float dotf[2] = { lineWidth, lineWidth };
+ CGContextSetLineDash (context, offset, dotf, 2);
+ }
+}
+#endif
+
+//-----------------------------------------------------------------------------
+BitMapPtr CDrawContext::getBitmap ()
+{
+ #if QUARTZ
+ return (BitMapPtr)GetPortBitMapForCopyBits (GetWindowPort ((WindowRef)pWindow));
+ #else
+ PixMapHandle pixMap = GetPortPixMap (GetWindowPort ((WindowRef)pWindow));
+ if (pixMap)
+ {
+ LockPixels (pixMap);
+ return (BitMapPtr)*pixMap;
+ }
+ #endif
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+void CDrawContext::releaseBitmap ()
+{
+ #if !QUARTZ
+ PixMapHandle pixMap = GetPortPixMap (GetWindowPort ((WindowRef)pWindow));
+ UnlockPixels (pixMap);
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+CGrafPtr CDrawContext::getPort ()
+{
+ #if QUARTZ
+ if (pWindow)
+ return (CGrafPtr)GetWindowPort ((WindowRef)pWindow);
+ return 0;
+ #else
+ if (!bInitialized)
+ {
+ CGrafPtr OrigPort;
+ GDHandle OrigDevice;
+ GetGWorld (&OrigPort, &OrigDevice);
+ SetGWorld ((CGrafPtr)GetWindowPort ((WindowRef)pWindow), NULL);
+
+ TextMode (srcOr);
+ PenMode (patCopy);
+ StuffHex (&fillPattern, "\pFFFFFFFFFFFFFFFF");
+
+ SetGWorld (OrigPort, OrigDevice);
+
+ bInitialized = true;
+ }
+ return (CGrafPtr)GetWindowPort ((WindowRef)pWindow);
+ #endif
+}
+
+#endif
+
+
+//-----------------------------------------------------------------------------
+// COffscreenContext Implementation
+//-----------------------------------------------------------------------------
+COffscreenContext::COffscreenContext (CDrawContext *pContext, CBitmap *pBitmapBg, bool drawInBitmap)
+: CDrawContext (pContext->pFrame, NULL, NULL)
+, pBitmap (0)
+, pBitmapBg (pBitmapBg)
+, height (20)
+, width (20)
+{
+ if (pBitmapBg)
+ {
+ height = pBitmapBg->getHeight ();
+ width = pBitmapBg->getWidth ();
+
+ clipRect (0, 0, width, height);
+ }
+
+ #if DEBUG
+ gNbCOffscreenContext++;
+ gBitmapAllocation += (long)height * (long)width;
+ #endif
+
+ bDestroyPixmap = false;
+
+#if WINDOWS
+ if (pOldBrush)
+ SelectObject ((HDC)getSystemContext (), pOldBrush);
+ if (pOldPen)
+ SelectObject ((HDC)getSystemContext (), pOldPen);
+ if (pOldFont)
+ SelectObject ((HDC)getSystemContext (), pOldFont);
+ pOldBrush = pOldPen = pOldFont = 0;
+
+ pSystemContext = CreateCompatibleDC ((HDC)pContext->getSystemContext ());
+
+ if (drawInBitmap)
+ pWindow = pBitmapBg->getHandle ();
+ else // create bitmap if no bitmap handle exists
+ {
+ bDestroyPixmap = true;
+ pWindow = CreateCompatibleBitmap ((HDC)pContext->getSystemContext (), width, height);
+ }
+ oldBitmap = SelectObject ((HDC)pSystemContext, pWindow);
+
+#elif MAC
+ #if QUARTZ
+ offscreenBitmap = 0;
+ if (drawInBitmap)
+ {
+ if (pBitmapBg->getHandle ())
+ {
+ PixMapHandle pixMap = GetGWorldPixMap ((GWorldPtr)pBitmapBg->getHandle ());
+ LockPixels (pixMap);
+ size_t pixDepth = GetPixDepth (pixMap) / 4;
+ size_t rowBytes = GetPixRowBytes (pixMap);
+ gCGContext = CGBitmapContextCreate (GetPixBaseAddr (pixMap), (size_t)width, (size_t)height, pixDepth, rowBytes, GetGenericRGBColorSpace (), kCGImageAlphaPremultipliedFirst);
+ if (gCGContext)
+ {
+ CGContextTranslateCTM (gCGContext, 0, (float)height);
+ CGContextSetFillColorSpace (gCGContext, GetGenericRGBColorSpace ());
+ CGContextSetStrokeColorSpace (gCGContext, GetGenericRGBColorSpace ());
+ CGAffineTransform cgCTM = CGAffineTransformMake (1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
+ CGContextSetTextMatrix (gCGContext, cgCTM);
+ CGContextSaveGState (gCGContext);
+ }
+ }
+ }
+ else
+ { // todo !!!
+ }
+
+ #else
+
+ if (drawInBitmap)
+ pWindow = pBitmapBg->getHandle ();
+ else
+ {
+ Rect GWRect;
+ GWRect.top = 0;
+ GWRect.left = 0;
+ GWRect.right = width;
+ GWRect.bottom = height;
+ NewGWorld ((GWorldPtr*)&pWindow, 0, &GWRect, NULL, NULL, 0);
+ bDestroyPixmap = true;
+ }
+
+ StuffHex (&fillPattern, "\pFFFFFFFFFFFFFFFF");
+ #endif
+
+#elif MOTIF
+ // if no bitmap handle => create one
+ if (!pWindow)
+ {
+ Drawable dWindow = pContext->pFrame->getWindow ();
+ pWindow = (void*)XCreatePixmap (pDisplay, dWindow, width, height, pFrame->getDepth ());
+ bDestroyPixmap = true;
+ }
+
+ // set the current font
+ if (pSystemContext)
+ setFont (kNormalFont);
+
+#elif BEOS
+ bDestroyPixmap = true;
+ offscreenBitmap = new BBitmap (BRect (0, 0, width - 1, height - 1), B_RGB16, true, false);
+ pView = new BView (BRect (0, 0, width - 1, height - 1), NULL, 0, 0);
+ offscreenBitmap->Lock ();
+ offscreenBitmap->AddChild (pView);
+
+#endif
+
+ if (!drawInBitmap)
+ {
+ // draw bitmap to Offscreen
+ CRect r (0, 0, width, height);
+ if (pBitmapBg)
+ pBitmapBg->draw (this, r);
+ else
+ {
+ setFillColor (kBlackCColor);
+ fillRect (r);
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+COffscreenContext::COffscreenContext (CFrame *pFrame, long width, long height, const CColor backgroundColor)
+: CDrawContext (pFrame, NULL, NULL)
+, pBitmap (0)
+, pBitmapBg (0)
+, height (height)
+, width (width)
+, backgroundColor (backgroundColor)
+{
+ clipRect (0, 0, width, height);
+
+ #if DEBUG
+ gNbCOffscreenContext++;
+ gBitmapAllocation += height * width;
+ #endif
+
+ bDestroyPixmap = true;
+
+#if WINDOWS
+ void *SystemWindow = pFrame->getSystemWindow ();
+ void *SystemContext = GetDC ((HWND)SystemWindow);
+
+ pSystemContext = CreateCompatibleDC ((HDC)SystemContext);
+ #if DEBUG
+ gNbDC++;
+ #endif
+ pWindow = CreateCompatibleBitmap ((HDC)SystemContext, width, height);
+
+ oldBitmap = SelectObject ((HDC)pSystemContext, pWindow);
+ ReleaseDC ((HWND)SystemWindow, (HDC)SystemContext);
+
+ CRect r (0, 0, width, height);
+ setFillColor (backgroundColor);
+ setFrameColor (backgroundColor);
+ fillRect (r);
+ drawRect (r);
+
+#elif MAC
+ #if QUARTZ
+ CGContextRef context = NULL;
+ int bitmapByteCount;
+ int bitmapBytesPerRow;
+
+ // each pixel is represented by four bytes
+ // (8 bits each of alpha, R, G, B)
+ bitmapBytesPerRow = width * 4;
+ bitmapByteCount = bitmapBytesPerRow * height;
+
+ // create the bitmap
+ offscreenBitmap = malloc (bitmapByteCount);
+ if (offscreenBitmap != NULL)
+ {
+ memset (offscreenBitmap, 0, bitmapByteCount);
+ // create the context
+ context = CGBitmapContextCreate (offscreenBitmap,
+ width,
+ height,
+ 8, // bits per component
+ bitmapBytesPerRow,
+ GetGenericRGBColorSpace (),
+ kCGImageAlphaPremultipliedFirst);
+
+ if (context == NULL)
+ {
+ // the context couldn't be created for some reason,
+ // and we have no use for the bitmap without the context
+ free (offscreenBitmap);
+ offscreenBitmap = 0;
+ }
+ else
+ {
+ CGContextTranslateCTM (context, 0, (float)height);
+ CGContextSetFillColorSpace (context, GetGenericRGBColorSpace ());
+ CGContextSetStrokeColorSpace (context, GetGenericRGBColorSpace ());
+ CGAffineTransform cgCTM = CGAffineTransformMake (1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
+ CGContextSetTextMatrix (context, cgCTM);
+ CGContextSaveGState (context);
+ CGRect r = CGRectMake (0, 0, width, height);
+ CGContextClearRect (context, r);
+ }
+ }
+ gCGContext = context;
+
+ CRect r (0, 0, width, height);
+ setFillColor (backgroundColor);
+ setFrameColor (backgroundColor);
+ fillRect (r);
+ drawRect (r);
+
+
+ #else
+ QDErr err;
+ Rect GWRect;
+
+ GWRect.top = GWRect.left = 0;
+ GWRect.right = width;
+ GWRect.bottom = height;
+ err = NewGWorld ((GWorldPtr*) &pWindow, 0, &GWRect, NULL, NULL, 0);
+ if (err)
+ pWindow = NULL;
+
+ StuffHex (&fillPattern, "\pFFFFFFFFFFFFFFFF");
+
+ CRect r (0, 0, width, height);
+ setFillColor (backgroundColor);
+ setFrameColor (backgroundColor);
+ fillRect (r);
+ drawRect (r);
+ #endif
+
+#elif MOTIF
+ Drawable dWindow = pFrame->getWindow ();
+
+ pWindow = (void*)XCreatePixmap (pDisplay, dWindow, width, height, pFrame->getDepth ());
+
+ // clear the pixmap
+ XGCValues values;
+ values.foreground = getIndexColor (backgroundColor);
+ GC gc = XCreateGC (pDisplay, (Drawable)pWindow, GCForeground, &values);
+ XFillRectangle (pDisplay, (Drawable)pWindow, gc, 0, 0, width, height);
+ XFreeGC (pDisplay, gc);
+
+ // set the current font
+ if (pSystemContext)
+ setFont (kNormalFont);
+
+#elif BEOS
+ BRect frame (0, 0, width - 1, height - 1);
+ offscreenBitmap = new BBitmap (frame, B_RGB16, true, false);
+ pView = new BView (BRect (0, 0, width - 1, height - 1), NULL, 0, 0);
+ offscreenBitmap->Lock ();
+ offscreenBitmap->AddChild (pView);
+ if (backgroundColor.red != 255 || backgroundColor.green != 255 || backgroundColor.blue != 255)
+ {
+ rgb_color c = { backgroundColor.red, backgroundColor.green, backgroundColor.blue, 255 };
+ pView->SetHighColor (c);
+ pView->FillRect (frame);
+ }
+#endif
+}
+
+//-----------------------------------------------------------------------------
+COffscreenContext::~COffscreenContext ()
+{
+ #if DEBUG
+ gNbCOffscreenContext--;
+ gBitmapAllocation -= (long)height * (long)width;
+ #endif
+
+ if (pBitmap)
+ pBitmap->forget ();
+
+#if WINDOWS
+ if (pSystemContext)
+ {
+ DeleteDC ((HDC)pSystemContext);
+ pSystemContext = 0;
+ #if DEBUG
+ gNbDC--;
+ #endif
+ }
+ if (bDestroyPixmap && pWindow)
+ DeleteObject (pWindow);
+
+#elif MAC
+ #if QUARTZ
+ if (gCGContext)
+ {
+ CGContextRestoreGState (gCGContext);
+ CGContextRelease (gCGContext);
+ }
+ gCGContext = 0;
+ if (offscreenBitmap)
+ free (offscreenBitmap);
+ else if (pBitmapBg && pBitmapBg->getHandle ())
+ {
+ PixMapHandle pixMap = GetGWorldPixMap ((GWorldPtr)pBitmapBg->getHandle ());
+ UnlockPixels (pixMap);
+ }
+ #else
+ if (bDestroyPixmap && pWindow)
+ DisposeGWorld ((GWorldPtr)pWindow);
+ #endif
+
+#elif MOTIF
+ if (bDestroyPixmap && pWindow)
+ XFreePixmap (pDisplay, (Pixmap)pWindow);
+
+#elif BEOS
+ delete offscreenBitmap;
+ pView = 0; // deleted because attached to the offscreen
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void COffscreenContext::copyTo (CDrawContext* pContext, CRect& srcRect, CPoint destOffset)
+{
+#if WINDOWS
+ BitBlt ((HDC)pSystemContext,
+ destOffset.h,
+ destOffset.v,
+ srcRect.width (),
+ srcRect.height (),
+ (HDC)pContext->getSystemContext (),
+ srcRect.left + pContext->offset.h,
+ srcRect.top + pContext->offset.v,
+ SRCCOPY);
+
+#elif MAC
+ #if QUARTZ
+ if (!pBitmapBg)
+ return;
+ #else
+ if (!pWindow)
+ return;
+ #endif
+
+ Rect source, dest;
+ RGBColor savedForeColor, savedBackColor;
+
+ source.left = (short)(srcRect.left + pContext->offset.h + pContext->offsetScreen.h);
+ source.top = (short)(srcRect.top + pContext->offset.v + pContext->offsetScreen.v);
+ source.right = (short)(source.left + srcRect.right - srcRect.left);
+ source.bottom = (short)(source.top + srcRect.bottom - srcRect.top);
+
+ dest.left = (short)destOffset.h;
+ dest.top = (short)destOffset.v;
+ dest.right = (short)(dest.left + srcRect.right - srcRect.left);
+ dest.bottom = (short)(dest.top + srcRect.bottom - srcRect.top);
+
+ GetForeColor (&savedForeColor);
+ GetBackColor (&savedBackColor);
+ ::BackColor (whiteColor);
+ ::ForeColor (blackColor);
+
+ CopyBits (pContext->getBitmap (), getBitmap (), &source, &dest, srcCopy, 0L);
+ releaseBitmap ();
+ pContext->releaseBitmap ();
+
+ RGBForeColor (&savedForeColor);
+ RGBBackColor (&savedBackColor);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void COffscreenContext::copyFrom (CDrawContext *pContext, CRect destRect, CPoint srcOffset)
+{
+#if WINDOWS
+ BitBlt ((HDC)pContext->getSystemContext (), // hdcDest
+ destRect.left + pContext->offset.h, // xDest
+ destRect.top + pContext->offset.v, // yDest
+ destRect.right - destRect.left, // xWidth,
+ destRect.bottom - destRect.top, // yHeight
+
+ (HDC)pSystemContext, // hdcSrc
+ srcOffset.h, // xSrc
+ srcOffset.v, // ySrc
+ SRCCOPY); // dwROP
+
+#elif MAC
+ #if QUARTZ
+ if (!gCGContext)
+ return;
+ CGContextRef context = pContext->beginCGContext ();
+ if (context)
+ {
+ size_t pixRowBytes = CGBitmapContextGetBytesPerRow (gCGContext);
+ short pixDepth = CGBitmapContextGetBitsPerPixel (gCGContext);
+ size_t size = pixRowBytes * CGBitmapContextGetHeight (gCGContext);
+
+ CGImageRef image = 0;
+ CGDataProviderRef provider = CGDataProviderCreateWithData (NULL, CGBitmapContextGetData (gCGContext), size, NULL);
+ CGImageAlphaInfo alphaInfo = CGBitmapContextGetAlphaInfo (gCGContext);
+ image = CGImageCreate (CGBitmapContextGetWidth (gCGContext), CGBitmapContextGetHeight (gCGContext), 8 , pixDepth, pixRowBytes, GetGenericRGBColorSpace (), alphaInfo, provider, NULL, 0, kCGRenderingIntentDefault);
+ if (image)
+ {
+ CGRect dest;
+ dest.origin.x = destRect.left - srcOffset.h + pContext->offset.h;
+ dest.origin.y = (destRect.top + pContext->offset.v) * -1 - (getHeight () - srcOffset.v);
+ dest.size.width = getWidth ();
+ dest.size.height = getHeight ();
+
+ CGRect clipRect;
+ clipRect.origin.x = destRect.left + pContext->offset.h;
+ clipRect.origin.y = (destRect.top + pContext->offset.v) * -1 - destRect.height ();
+ clipRect.size.width = destRect.width ();
+ clipRect.size.height = destRect.height ();
+
+ CGContextClipToRect (context, clipRect);
+
+ CGContextDrawImage (context, dest, image);
+
+ CGImageRelease (image);
+ }
+ CGDataProviderRelease (provider);
+
+ pContext->releaseCGContext (context);
+ }
+ #else
+ if (!pWindow)
+ return;
+
+ Rect source, dest;
+ RGBColor savedForeColor, savedBackColor;
+
+ source.left = srcOffset.h;
+ source.top = srcOffset.v;
+ source.right = source.left + destRect.right - destRect.left;
+ source.bottom = source.top + destRect.bottom - destRect.top;
+
+ dest.top = destRect.top + pContext->offset.v;
+ dest.left = destRect.left + pContext->offset.h;
+ dest.bottom = destRect.bottom + pContext->offset.v;
+ dest.right = destRect.right + pContext->offset.h;
+
+ GetForeColor (&savedForeColor);
+ GetBackColor (&savedBackColor);
+ ::BackColor (whiteColor);
+ ::ForeColor (blackColor);
+
+ CopyBits (getBitmap (), pContext->getBitmap (), &source, &dest, srcCopy, 0L);
+ #if MACX
+ QDAddRectToDirtyRegion (pContext->getPort (), &dest);
+ #endif
+ releaseBitmap ();
+ pContext->releaseBitmap ();
+
+ RGBForeColor (&savedForeColor);
+ RGBBackColor (&savedBackColor);
+ #endif
+
+#elif MOTIF
+ XCopyArea (pDisplay, (Drawable)pWindow, (Drawable)pContext->getWindow (),
+ (GC)pSystemContext, srcOffset.h, srcOffset.v,
+ destRect.width (), destRect.height (),
+ destRect.left, destRect.top);
+
+#elif BEOS
+ pContext->pView->SetDrawingMode (B_OP_COPY);
+ BRect destination (destRect.left, destRect.top, destRect.right - 1, destRect.bottom - 1);
+ BRect source = destination;
+ source.OffsetTo (srcOffset.h, srcOffset.v);
+ pView->Sync ();
+ pContext->pView->DrawBitmap (offscreenBitmap, source, destination);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+#if MAC
+#if QUARTZ
+//-----------------------------------------------------------------------------
+CGImageRef COffscreenContext::getCGImage () const
+{
+ #ifdef MAC_OS_X_VERSION_10_4
+ if (CGBitmapContextCreateImage && gCGContext)
+ {
+ return CGBitmapContextCreateImage (gCGContext);
+ }
+ #endif
+ return 0;
+}
+
+#endif
+
+//-----------------------------------------------------------------------------
+BitMapPtr COffscreenContext::getBitmap ()
+{
+ #if QUARTZ
+ return pBitmapBg ? (BitMapPtr)GetPortBitMapForCopyBits ((GWorldPtr)pBitmapBg->getHandle ()) : 0;
+ #else
+ PixMapHandle pixMap = GetGWorldPixMap ((GWorldPtr)pWindow);
+ if (pixMap)
+ {
+ LockPixels (pixMap);
+ return (BitMapPtr)*pixMap;
+ }
+ return 0;
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void COffscreenContext::releaseBitmap ()
+{
+ #if QUARTZ
+ #else
+ PixMapHandle pixMap = GetGWorldPixMap ((GWorldPtr)pWindow);
+ UnlockPixels (pixMap);
+ #endif
+}
+
+#if !QUARTZ
+//-----------------------------------------------------------------------------
+CGrafPtr COffscreenContext::getPort ()
+{
+ if (!bInitialized)
+ bInitialized = true;
+
+ return (CGrafPtr)pWindow;
+}
+#endif // QUARTZ
+#endif // MAC
+
+//-----------------------------------------------------------------------------
+class CAttributeListEntry
+{
+public:
+ CAttributeListEntry (long size, CViewAttributeID id)
+ : nextEntry (0)
+ , pointer (0)
+ , sizeOfPointer (size)
+ , id (id)
+ {
+ pointer = malloc (size);
+ }
+
+ ~CAttributeListEntry ()
+ {
+ if (pointer)
+ free (pointer);
+ }
+
+ const CViewAttributeID getID () const { return id; }
+ const long getSize () const { return sizeOfPointer; }
+ void* getPointer () const { return pointer; }
+ CAttributeListEntry* getNext () const { return nextEntry; }
+
+ void setNext (CAttributeListEntry* entry) { nextEntry = entry; }
+
+protected:
+ CAttributeListEntry () : nextEntry (0), pointer (0), sizeOfPointer (0), id (0) {}
+
+ CAttributeListEntry* nextEntry;
+ void* pointer;
+ long sizeOfPointer;
+ CViewAttributeID id;
+};
+
+//-----------------------------------------------------------------------------
+char* kMsgCheckIfViewContainer = "kMsgCheckIfViewContainer";
+
+//-----------------------------------------------------------------------------
+// CView
+//-----------------------------------------------------------------------------
+/*! @class CView
+base class of all view objects
+*/
+//-----------------------------------------------------------------------------
+CView::CView (const CRect& size)
+: size (size)
+, mouseableArea (size)
+, pParentFrame (0)
+, pParentView (0)
+, bDirty (false)
+, bMouseEnabled (true)
+, bTransparencyEnabled (false)
+, bWantsFocus (false)
+, pBackground (0)
+, pAttributeList (0)
+{
+ #if DEBUG
+ gNbCView++;
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+CView::~CView ()
+{
+ if (pBackground)
+ pBackground->forget ();
+
+ if (pAttributeList)
+ {
+ CAttributeListEntry* entry = pAttributeList;
+ while (entry)
+ {
+ CAttributeListEntry* nextEntry = entry->getNext ();
+ delete entry;
+ entry = nextEntry;
+ }
+ }
+ #if DEBUG
+ gNbCView--;
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void CView::getMouseLocation (CDrawContext* context, CPoint &point)
+{
+ if (context)
+ {
+ if (pParentView && pParentView->notify (this, kMsgCheckIfViewContainer) == kMessageNotified)
+ {
+ CCoord save[4];
+ ((CViewContainer*)pParentView)->modifyDrawContext (save, context);
+ pParentView->getMouseLocation (context, point);
+ ((CViewContainer*)pParentView)->restoreDrawContext (context, save);
+ }
+ else
+ context->getMouseLocation (point);
+ }
+}
+
+#if ENABLE_DEPRECATED_METHODS
+//-----------------------------------------------------------------------------
+void CView::getFrameTopLeftPos (CPoint& topLeft) const
+{
+ topLeft.h += size.left;
+ topLeft.v += size.top;
+ if (pParentView && pParentView->notify (0, kMsgCheckIfViewContainer) == kMessageNotified)
+ pParentView->getFrameTopLeftPos (topLeft);
+}
+#endif
+
+//-----------------------------------------------------------------------------
+CPoint& CView::frameToLocal (CPoint& point) const
+{
+ if (pParentView && pParentView->isTypeOf ("CViewContainer"))
+ return pParentView->frameToLocal (point);
+ return point;
+}
+
+//-----------------------------------------------------------------------------
+CPoint& CView::localToFrame (CPoint& point) const
+{
+ if (pParentView && pParentView->isTypeOf ("CViewContainer"))
+ return pParentView->localToFrame (point);
+ return point;
+}
+
+//-----------------------------------------------------------------------------
+void CView::redraw ()
+{
+ if (pParentFrame)
+ pParentFrame->draw (this);
+}
+
+//-----------------------------------------------------------------------------
+void CView::redrawRect (CDrawContext* context, const CRect& rect)
+{
+ // we always pass it on to the parent view as it knows what else must be drawn (needed for nested view containers)
+ if (pParentView)
+ pParentView->redrawRect (context, rect);
+ else if (pParentFrame)
+ pParentFrame->drawRect (context, rect);
+}
+
+//-----------------------------------------------------------------------------
+void CView::draw (CDrawContext *pContext)
+{
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, size);
+ else
+ pBackground->draw (pContext, size);
+ }
+ setDirty (false);
+}
+
+//-----------------------------------------------------------------------------
+void CView::mouse (CDrawContext *pContext, CPoint &where, long buttons)
+{}
+
+//-----------------------------------------------------------------------------
+bool CView::onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+{
+ return false;
+}
+
+//------------------------------------------------------------------------
+bool CView::onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)
+{
+ return onWheel (pContext, where, distance);
+}
+
+//------------------------------------------------------------------------
+void CView::update (CDrawContext *pContext)
+{
+ if (isDirty ())
+ {
+ #if NEW_UPDATE_MECHANISM
+ if (pContext)
+ redrawRect (pContext, size);
+ else
+ redraw ();
+ #else
+ #if USE_ALPHA_BLEND
+ if (pContext)
+ {
+ if (bTransparencyEnabled)
+ getFrame ()->drawRect (pContext, size);
+ else
+ draw (pContext);
+ }
+ #else
+ if (pContext)
+ draw (pContext);
+ #endif
+ else
+ redraw ();
+ #endif // !NEW_UPDATE_MECHANISM
+ setDirty (false);
+ }
+}
+
+//------------------------------------------------------------------------------
+long CView::onKeyDown (VstKeyCode& keyCode)
+{
+ return -1;
+}
+
+//------------------------------------------------------------------------------
+long CView::onKeyUp (VstKeyCode& keyCode)
+{
+ return -1;
+}
+
+//------------------------------------------------------------------------------
+long CView::notify (CView* sender, const char* message)
+{
+ return kMessageUnknown;
+}
+
+//------------------------------------------------------------------------------
+void CView::looseFocus (CDrawContext *pContext)
+{}
+
+//------------------------------------------------------------------------------
+void CView::takeFocus (CDrawContext *pContext)
+{}
+
+//------------------------------------------------------------------------------
+void CView::setViewSize (CRect &rect)
+{
+ size = rect;
+ setDirty ();
+}
+
+//-----------------------------------------------------------------------------
+void *CView::getEditor () const
+{
+ return pParentFrame ? pParentFrame->getEditor () : 0;
+}
+
+//-----------------------------------------------------------------------------
+void CView::setBackground (CBitmap *background)
+{
+ if (pBackground)
+ pBackground->forget ();
+ pBackground = background;
+ if (pBackground)
+ pBackground->remember ();
+ setDirty (true);
+}
+
+//-----------------------------------------------------------------------------
+const CViewAttributeID kCViewAttributeReferencePointer = 'cvrp';
+
+//-----------------------------------------------------------------------------
+/**
+ * @param id the ID of the Attribute
+ * @param outSize on return the size of the attribute
+ */
+bool CView::getAttributeSize (const CViewAttributeID id, long& outSize) const
+{
+ if (pAttributeList)
+ {
+ CAttributeListEntry* entry = pAttributeList;
+ while (entry)
+ {
+ if (entry->getID () == id)
+ break;
+ entry = entry->getNext ();
+ }
+ if (entry)
+ {
+ outSize = entry->getSize ();
+ return true;
+ }
+ }
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param id the ID of the Attribute
+ * @param inSize the size of the outData pointer
+ * @param outData a pointer where to copy the attribute data
+ * @param outSize the size in bytes which was copied into outData
+ */
+bool CView::getAttribute (const CViewAttributeID id, const long inSize, void* outData, long& outSize) const
+{
+ if (pAttributeList)
+ {
+ CAttributeListEntry* entry = pAttributeList;
+ while (entry)
+ {
+ if (entry->getID () == id)
+ break;
+ entry = entry->getNext ();
+ }
+ if (entry && inSize >= entry->getSize ())
+ {
+ outSize = entry->getSize ();
+ memcpy (outData, entry->getPointer (), outSize);
+ return true;
+ }
+ }
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * copies data into the attribute. If it does not exist, creates a new attribute.
+ * @param id the ID of the Attribute
+ * @param inSize the size of the outData pointer
+ * @param inData a pointer to the data
+ */
+bool CView::setAttribute (const CViewAttributeID id, const long inSize, void* inData)
+{
+ CAttributeListEntry* lastEntry = 0;
+ if (pAttributeList)
+ {
+ CAttributeListEntry* entry = pAttributeList;
+ while (entry)
+ {
+ if (entry->getID () == id)
+ break;
+ if (entry->getNext () == 0)
+ lastEntry = entry;
+ entry = entry->getNext ();
+ }
+ if (entry)
+ {
+ if (entry->getSize () >= inSize)
+ {
+ memcpy (entry->getPointer (), inData, inSize);
+ return true;
+ }
+ else
+ return false;
+ }
+ }
+
+ // create a new attribute
+ CAttributeListEntry* newEntry = new CAttributeListEntry (inSize, id);
+ memcpy (newEntry->getPointer (), inData, inSize);
+ if (lastEntry)
+ lastEntry->setNext (newEntry);
+ else if (!pAttributeList)
+ pAttributeList = newEntry;
+ else
+ {
+ delete newEntry;
+ return false;
+ }
+ return true;
+}
+
+#if DEBUG
+//-----------------------------------------------------------------------------
+void CView::dumpInfo ()
+{
+ CRect viewRect = getViewSize (viewRect);
+ DebugPrint ("left:%4d, top:%4d, width:%4d, height:%4d ", viewRect.left, viewRect.top, viewRect.getWidth (), viewRect.getHeight ());
+ if (getMouseEnabled ())
+ DebugPrint ("(Mouse Enabled) ");
+ if (getTransparency ())
+ DebugPrint ("(Transparent) ");
+ CRect mouseRect = getMouseableArea (mouseRect);
+ if (mouseRect != viewRect)
+ DebugPrint (" (Mouseable Area: left:%4d, top:%4d, width:%4d, height:%4d ", mouseRect.left, mouseRect.top, mouseRect.getWidth (), mouseRect.getHeight ());
+}
+#endif
+
+#define FOREACHSUBVIEW for (CCView *pSv = pFirstView; pSv; pSv = pSv->pNext) {CView *pV = pSv->pView;
+#define FOREACHSUBVIEW_REVERSE(reverse) for (CCView *pSv = reverse ? pLastView : pFirstView; pSv; pSv = reverse ? pSv->pPrevious : pSv->pNext) {CView *pV = pSv->pView;
+#define ENDFOR }
+
+//-----------------------------------------------------------------------------
+// CFrame Implementation
+//-----------------------------------------------------------------------------
+/*! @class CFrame
+It creates a platform dependend view object.
+On classic Mac OS it just draws into the provided window.
+On Mac OS X it is a ControlRef.
+On Windows it's a WS_CHILD Window.
+*/
+CFrame::CFrame (const CRect &inSize, void *inSystemWindow, void *inEditor)
+: CViewContainer (inSize, 0, 0)
+, pEditor (inEditor)
+, pSystemWindow (inSystemWindow)
+, pModalView (0)
+, pFocusView (0)
+, bFirstDraw (true)
+, bDropActive (false)
+, bUpdatesDisabled (false)
+, pFrameContext (0)
+, bAddedWindow (false)
+, pVstWindow (0)
+, defaultCursor (0)
+{
+ setOpenFlag (true);
+
+ pParentFrame = this;
+
+#if WINDOWS
+ pHwnd = 0;
+ dropTarget = 0;
+ backBuffer = 0;
+ OleInitialize (0);
+
+ #if DYNAMICALPHABLEND
+ pfnAlphaBlend = 0;
+ pfnTransparentBlt = 0;
+
+ hInstMsimg32dll = LoadLibrary ("msimg32.dll");
+ if (hInstMsimg32dll)
+ {
+ pfnAlphaBlend = (PFNALPHABLEND)GetProcAddress (hInstMsimg32dll, "AlphaBlend");
+
+ // get OS version
+ memset (&gSystemVersion, 0, sizeof (gSystemVersion));
+ gSystemVersion.dwOSVersionInfoSize = sizeof (gSystemVersion);
+
+ if (GetVersionEx ((OSVERSIONINFO *)&gSystemVersion))
+ {
+ // Is this win NT or better?
+ if (gSystemVersion.dwPlatformId >= VER_PLATFORM_WIN32_NT)
+ {
+ // Yes, then TransparentBlt doesn't have the memory-leak and can be safely used
+ pfnTransparentBlt = (PFNTRANSPARENTBLT)GetProcAddress (hInstMsimg32dll, "TransparentBlt");
+ }
+ }
+ }
+ #endif // DYNAMICALPHABLEND
+
+#elif MOTIF
+ gc = 0;
+ depth = 0;
+ pDisplay = 0;
+ pVisual = 0;
+ window = 0;
+
+#elif BEOS
+ pPlugView = NULL;
+#endif
+
+ initFrame (pSystemWindow);
+
+#if WINDOWS
+ #if USE_GLOBAL_CONTEXT
+ pFrameContext = new CDrawContext (this, 0, getSystemWindow ());
+ #endif
+
+#elif MAC
+ Gestalt (gestaltSystemVersion, &pSystemVersion);
+ #if QUARTZ
+ pFrameContext = 0;
+ #else
+ pFrameContext = new CDrawContext (this, getSystemWindow (), getSystemWindow ());
+ pFrameContext->offset.h = size.left;
+ pFrameContext->offset.v = size.top;
+ #endif
+
+#elif MOTIF
+ pFrameContext = new CDrawContext (this, gc, (void*)window);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+CFrame::CFrame (const CRect& inSize, const char* inTitle, void* inEditor, const long inStyle)
+: CViewContainer (inSize, 0, 0)
+, pEditor (inEditor)
+, pSystemWindow (0)
+, pModalView (0)
+, pFocusView (0)
+, bFirstDraw (true)
+, bDropActive (false)
+, bUpdatesDisabled (false)
+, pFrameContext (0)
+, pVstWindow (0)
+, defaultCursor (0)
+{
+ bAddedWindow = true;
+ setOpenFlag (false);
+ pParentFrame = this;
+
+#if WINDOWS
+ pHwnd = 0;
+ dropTarget = 0;
+ backBuffer = 0;
+ OleInitialize (0);
+
+ #if DYNAMICALPHABLEND
+ pfnAlphaBlend = 0;
+ pfnTransparentBlt = 0;
+
+ hInstMsimg32dll = LoadLibrary ("msimg32.dll");
+ if (hInstMsimg32dll)
+ {
+ pfnAlphaBlend = (PFNALPHABLEND)GetProcAddress (hInstMsimg32dll, "AlphaBlend");
+
+ // get OS version
+ OSVERSIONINFOEX osvi;
+
+ memset (&osvi, 0, sizeof (osvi));
+ osvi.dwOSVersionInfoSize = sizeof (osvi);
+
+ if (GetVersionEx ((OSVERSIONINFO *)&osvi))
+ {
+ // Is this win NT or better?
+ if (osvi.dwPlatformId >= VER_PLATFORM_WIN32_NT)
+ {
+ // Yes, then TransparentBlt doesn't have the memory-leak and can be safely used
+ pfnTransparentBlt = (PFNTRANSPARENTBLT)GetProcAddress (hInstMsimg32dll, "TransparentBlt");
+ }
+ }
+ }
+ #endif
+
+#elif MOTIF
+ gc = 0;
+ depth = 0;
+ pDisplay = 0;
+ pVisual = 0;
+ window = 0;
+
+#elif BEOS
+ pPlugView = NULL;
+
+#endif
+
+ #if USE_VST_WINDOW
+ pVstWindow = (VstWindow*)malloc (sizeof (VstWindow));
+ strcpy (((VstWindow*)pVstWindow)->title, inTitle);
+ ((VstWindow*)pVstWindow)->xPos = (short)size.left;
+ ((VstWindow*)pVstWindow)->yPos = (short)size.top;
+ ((VstWindow*)pVstWindow)->width = (short)size.width ();
+ ((VstWindow*)pVstWindow)->height = (short)size.height ();
+ ((VstWindow*)pVstWindow)->style = inStyle;
+ ((VstWindow*)pVstWindow)->parent = 0;
+ ((VstWindow*)pVstWindow)->userHandle = 0;
+ ((VstWindow*)pVstWindow)->winHandle = 0;
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+CFrame::~CFrame ()
+{
+ if (pModalView)
+ removeView (pModalView, false);
+
+ setCursor (kCursorDefault);
+
+ setDropActive (false);
+
+ if (pFrameContext)
+ pFrameContext->forget ();
+
+#if WINDOWS
+ OleUninitialize ();
+
+ if (backBuffer)
+ backBuffer->forget ();
+
+ #if DYNAMICALPHABLEND
+ if (hInstMsimg32dll)
+ FreeLibrary (hInstMsimg32dll);
+ #endif
+
+ if (pHwnd)
+ {
+ SetWindowLongPtr ((HWND)pHwnd, GWLP_USERDATA, (long)NULL);
+ DestroyWindow ((HWND)pHwnd);
+
+ ExitWindowClass ();
+ }
+
+#elif MOTIF
+ #if TEST_REGION
+ XDestroyRegion (region);
+ #endif
+
+ // remove callbacks to avoid undesirable update
+ if (pSystemWindow)
+ {
+ XtRemoveCallback ((Widget)pSystemWindow, XmNexposeCallback, _drawingAreaCallback, this);
+ XtRemoveCallback ((Widget)pSystemWindow, XmNinputCallback, _drawingAreaCallback, this);
+ XtRemoveCallback ((Widget)pSystemWindow, XmNdestroyCallback, _destroyCallback, this);
+
+ freeGc ();
+ }
+#endif
+
+ if (bAddedWindow)
+ close ();
+ if (pVstWindow)
+ free (pVstWindow);
+
+#if BEOS
+ CBitmap::closeResource (); // must be done only once at the end of the story.
+#endif
+
+#if MAC && QUARTZ
+ if (controlRef)
+ DisposeControl (controlRef);
+ if (controlSpec.u.classRef)
+ {
+ OSStatus status = UnregisterToolboxObjectClass ((ToolboxObjectClassRef)controlSpec.u.classRef);
+ if (status != noErr)
+ fprintf (stderr, "UnregisterToolboxObjectClass failed : %d\n", (int)status);
+ }
+#endif
+}
+
+//-----------------------------------------------------------------------------
+bool CFrame::open (CPoint *point)
+{
+#if PLUGGUI
+ return false;
+#else
+ if (!bAddedWindow)
+ return false;
+ if (getOpenFlag ())
+ {
+#if WINDOWS
+ BringWindowToTop (GetParent (GetParent ((HWND)getSystemWindow ())));
+
+#elif MOTIF
+ Widget widget = (Widget)getSystemWindow ();
+ while (widget && !XtIsTopLevelShell (widget))
+ widget = XtParent (widget);
+ if (widget)
+ XRaiseWindow (getDisplay (), XtWindow (widget));
+
+#elif BEOS
+ pPlugView->Window ()->Activate (true);
+#endif
+ return false;
+ }
+
+#if USE_VST_WINDOW
+ if (pVstWindow)
+ {
+ if (point)
+ {
+ ((VstWindow*)pVstWindow)->xPos = (short)point->h;
+ ((VstWindow*)pVstWindow)->yPos = (short)point->v;
+ }
+ AudioEffectX *pAudioEffectX = (AudioEffectX*)(((AEffGUIEditor*)pEditor)->getEffect ());
+ pSystemWindow = pAudioEffectX->openWindow ((VstWindow*)pVstWindow);
+ }
+#endif
+
+ if (pSystemWindow)
+ {
+ if (initFrame (pSystemWindow))
+ setOpenFlag (true);
+ }
+
+ return getOpenFlag ();
+#endif
+}
+
+//-----------------------------------------------------------------------------
+bool CFrame::close ()
+{
+#if PLUGGUI
+ return false;
+#else
+ if (!bAddedWindow || !getOpenFlag () || !pSystemWindow)
+ return false;
+
+#if USE_VST_WINDOW
+ AudioEffectX *pAudioEffectX = (AudioEffectX*)(((AEffGUIEditor*)pEditor)->getEffect ());
+ pAudioEffectX->closeWindow ((VstWindow*)pVstWindow);
+#endif
+
+ pSystemWindow = 0;
+
+ return true;
+#endif
+}
+
+//-----------------------------------------------------------------------------
+bool CFrame::initFrame (void *systemWin)
+{
+ if (!systemWin)
+ return false;
+
+#if WINDOWS
+
+ InitWindowClass ();
+ pHwnd = CreateWindowEx (0, gClassName, "Window",
+ WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
+ 0, 0, size.width (), size.height (),
+ (HWND)pSystemWindow, NULL, GetInstance (), NULL);
+
+ SetWindowLongPtr ((HWND)pHwnd, GWLP_USERDATA, (LONG_PTR)this);
+
+#elif MAC
+
+ #if QUARTZ
+ dragEventHandler = 0;
+ if (!registerWithToolbox ())
+ return false;
+
+ hasFocus = false;
+ Rect r = {(short)size.top, (short)size.left, (short)size.bottom, (short)size.right};
+ OSStatus status = CreateCustomControl (NULL, &r, &controlSpec, NULL, &controlRef);
+ if (status != noErr)
+ {
+ fprintf (stderr, "Could not create Control : %d\n", (int)status);
+ return false;
+ }
+ EventTypeSpec keyWorkaroundEvents[] = {
+ { kEventClassTextInput, kEventTextInputUnicodeForKeyEvent }
+ };
+ InstallWindowEventHandler ((WindowRef)systemWin, carbonEventHandler, GetEventTypeCount (keyWorkaroundEvents), keyWorkaroundEvents, this, NULL);
+
+ SetControlDragTrackingEnabled (controlRef, true);
+ SetAutomaticControlDragTrackingEnabledForWindow ((WindowRef)systemWin, true);
+ #if !AU // for AudioUnits define AU and embed the controlRef at your AUCarbonViewBase
+ WindowAttributes attributes;
+ GetWindowAttributes ((WindowRef)systemWin, &attributes);
+ if (attributes & kWindowCompositingAttribute)
+ {
+ HIViewRef contentView;
+ HIViewRef rootView = HIViewGetRoot ((WindowRef)systemWin);
+ if (HIViewFindByID (rootView, kHIViewWindowContentID, &contentView) != noErr)
+ contentView = rootView;
+ HIViewAddSubview (contentView, controlRef);
+ }
+ else
+ {
+ ControlRef rootControl;
+ GetRootControl ((WindowRef)systemWin, &rootControl);
+ if (rootControl == NULL)
+ CreateRootControl ((WindowRef)systemWin, &rootControl);
+ EmbedControl(controlRef, rootControl);
+ }
+ #endif
+ size.offset (-size.left, -size.top);
+ mouseableArea.offset (-size.left, -size.top);
+ #endif
+
+#elif MOTIF
+ // attach the callbacks
+ XtAddCallback ((Widget)systemWin, XmNexposeCallback, _drawingAreaCallback, this);
+ XtAddCallback ((Widget)systemWin, XmNinputCallback, _drawingAreaCallback, this);
+ XtAddCallback ((Widget)systemWin, XmNdestroyCallback, _destroyCallback, this);
+ XtAddEventHandler ((Widget)systemWin, LeaveWindowMask, true, _eventHandler, this);
+
+ // init a default gc
+ window = XtWindow ((Widget)systemWin);
+ pDisplay = XtDisplay ((Widget)systemWin);
+ XGCValues values;
+ values.foreground = 1;
+ gc = XCreateGC (pDisplay, (Drawable)window, GCForeground, &values);
+
+#if TEST_REGION
+ region = XCreateRegion ();
+#endif
+
+ // get the std colormap
+ XWindowAttributes attr;
+ XGetWindowAttributes (pDisplay, window, &attr);
+ colormap = attr.colormap;
+ pVisual = attr.visual;
+ depth = attr.depth;
+
+ // init and load the fonts
+ if (!gFontInit)
+ {
+ for (long i = 0; i < kNumStandardFonts; i++)
+ {
+ gFontStructs[i] = XLoadQueryFont (pDisplay, gFontTable[i].string);
+ assert (gFontStructs[i] != 0);
+ }
+ gFontInit = true;
+ }
+
+#elif BEOS
+ BView* parentView = (BView*) pSystemWindow;
+ BRect frame = parentView->Frame ();
+ frame.OffsetTo (B_ORIGIN);
+ pPlugView = new PlugView (frame, this);
+ parentView->AddChild (pPlugView);
+#endif
+
+ setDropActive (true);
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+bool CFrame::setDropActive (bool val)
+{
+ if (!bDropActive && !val)
+ return true;
+
+#if WINDOWS
+ if (!pHwnd)
+ return false;
+ if (dropTarget)
+ {
+ RevokeDragDrop ((HWND)pHwnd);
+ dropTarget = 0;
+ }
+ if (val)
+ {
+ dropTarget = createDropTarget (this);
+ RegisterDragDrop ((HWND)pHwnd, (IDropTarget*)dropTarget);
+ }
+
+#elif MAC
+#if MAC_OLD_DRAG
+ if (val)
+ install_drop (this);
+ else
+ remove_drop (this);
+#endif
+#endif
+
+ bDropActive = val;
+ return true;
+}
+
+#if MOTIF
+//-----------------------------------------------------------------------------
+void CFrame::freeGc ()
+{
+ if (gc)
+ XFreeGC (pDisplay, gc);
+ gc = 0;
+}
+#endif
+
+//-----------------------------------------------------------------------------
+CDrawContext* CFrame::createDrawContext ()
+{
+ if (pFrameContext)
+ {
+ pFrameContext->remember ();
+ return pFrameContext;
+ }
+
+ CDrawContext* pContext = 0;
+ #if WINDOWS || MAC
+ pContext = new CDrawContext (this, NULL, getSystemWindow ());
+
+ #elif MOTIF
+ pContext = new CDrawContext (this, gc, (void*)window);
+
+ #elif BEOS
+ pContext = new CDrawContext (this, pPlugView, 0);
+ #endif
+
+ return pContext;
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::draw (CDrawContext *pContext)
+{
+ if (bFirstDraw)
+ bFirstDraw = false;
+
+ if (!pContext)
+ pContext = pFrameContext;
+
+ // draw the background and the children
+ CViewContainer::draw (pContext);
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::drawRect (CDrawContext *pContext, const CRect& updateRect)
+{
+ if (bFirstDraw)
+ bFirstDraw = false;
+
+ bool localContext = false;
+ if (!pContext)
+ {
+ localContext = true;
+ pContext = createDrawContext ();
+ }
+
+ #if USE_CLIPPING_DRAWRECT
+ CRect oldClip;
+ pContext->getClipRect (oldClip);
+ CRect newClip (updateRect);
+ newClip.bound (oldClip);
+ pContext->setClipRect (newClip);
+ #endif
+
+ // draw the background and the children
+ if (updateRect.getWidth () > 0 && updateRect.getHeight () > 0)
+ CViewContainer::drawRect (pContext, updateRect);
+
+ #if USE_CLIPPING_DRAWRECT
+ pContext->setClipRect (oldClip);
+ #endif
+
+ if (localContext)
+ pContext->forget ();
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::draw (CView *pView)
+{
+ CView *pViewToDraw = 0;
+
+ // Search it in the view list
+ if (pView && isChild(pView))
+ pViewToDraw = pView;
+
+ CDrawContext *pContext = createDrawContext ();
+ if (pContext)
+ {
+ if (pViewToDraw)
+ pViewToDraw->draw (pContext);
+ else
+ draw (pContext);
+
+ pContext->forget ();
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::mouse (CDrawContext *pContext, CPoint &where, long buttons)
+{
+ if (!pContext)
+ pContext = pFrameContext;
+
+ if (pFocusView)
+ setFocusView (NULL);
+
+ if (buttons == -1 && pContext)
+ buttons = pContext->getMouseButtons ();
+
+ if (pModalView)
+ {
+ if (pModalView->hitTest (where, buttons))
+ pModalView->mouse (pContext, where, buttons);
+ }
+ else
+ {
+ CViewContainer::mouse (pContext, where, buttons);
+ }
+}
+
+//-----------------------------------------------------------------------------
+long CFrame::onKeyDown (VstKeyCode& keyCode)
+{
+ long result = -1;
+
+ if (pFocusView)
+ result = pFocusView->onKeyDown (keyCode);
+
+ if (result == -1 && pModalView)
+ result = pModalView->onKeyDown (keyCode);
+
+ if (result == -1 && keyCode.virt == VKEY_TAB)
+ result = advanceNextFocusView (pFocusView, (keyCode.modifier & MODIFIER_SHIFT) ? true : false) ? 1 : -1;
+
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+long CFrame::onKeyUp (VstKeyCode& keyCode)
+{
+ long result = -1;
+
+ if (pFocusView)
+ result = pFocusView->onKeyUp (keyCode);
+
+ if (result == -1 && pModalView)
+ result = pModalView->onKeyUp (keyCode);
+
+ return result;
+}
+
+//------------------------------------------------------------------------
+bool CFrame::onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)
+{
+ bool result = false;
+
+ CView *view = pModalView ? pModalView : getViewAt (where);
+ if (view)
+ {
+ bool localContext = false;
+ if (!pContext)
+ {
+ localContext = true;
+ pContext = createDrawContext ();
+ }
+
+ result = view->onWheel (pContext, where, axis, distance);
+
+ if (localContext)
+ pContext->forget ();
+
+ #if BEOS
+ pPlugView->UnlockLooper ();
+ #endif
+ }
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+bool CFrame::onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+{
+ return onWheel (pContext, where, kMouseWheelAxisY, distance);
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::update (CDrawContext *pContext)
+{
+ if (!getOpenFlag () || updatesDisabled ())
+ return;
+
+ #if WINDOWS && USE_ALPHA_BLEND
+ CDrawContext* oldFrameContext = pFrameContext;
+ CDrawContext* dc = pFrameContext = getBackBuffer ();
+ #else
+ CDrawContext* dc = pContext;
+ #endif
+
+ if (bDirty)
+ {
+ draw (dc);
+ setDirty (false);
+ }
+ else
+ {
+ #if USE_CLIPPING_DRAWRECT
+ CRect oldClipRect;
+ dc->getClipRect (oldClipRect);
+ #endif
+ #if NEW_UPDATE_MECHANISM
+ if (pModalView && pModalView->isDirty ())
+ pModalView->update (dc);
+ #endif
+ FOREACHSUBVIEW
+ #if USE_CLIPPING_DRAWRECT
+ CRect viewSize (pV->size);
+ viewSize.bound (oldClipRect);
+ dc->setClipRect (viewSize);
+ #endif
+ pV->update (dc);
+ ENDFOR
+ #if USE_CLIPPING_DRAWRECT
+ dc->setClipRect (oldClipRect);
+ #endif
+ }
+
+ #if MACX && !QUARTZ
+ if (QDIsPortBufferDirty (GetWindowPort ((WindowRef)pSystemWindow)))
+ {
+ QDFlushPortBuffer (GetWindowPort ((WindowRef)pSystemWindow), NULL);
+ }
+ #endif
+ #if WINDOWS && USE_ALPHA_BLEND
+ backBuffer->copyFrom (pContext, size);
+ pFrameContext = oldFrameContext;
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::idle ()
+{
+ if (!getOpenFlag ())
+ return;
+
+ #if MAC
+ // if the window is collapsed, we don't need to draw anything
+ if (pSystemWindow && IsWindowCollapsed ((WindowRef)pSystemWindow))
+ return;
+ #endif
+
+ // don't do an idle before a draw
+ if (bFirstDraw)
+ return;
+
+ if (!isDirty ())
+ return;
+
+ #if BEOS
+ if (pPlugView->LockLooperWithTimeout (0) != B_OK)
+ return;
+ #endif
+
+ CDrawContext *pContext = createDrawContext ();
+
+ update (pContext);
+
+ pContext->forget ();
+
+ #if BEOS
+ pPlugView->UnlockLooper ();
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::doIdleStuff ()
+{
+#if PLUGGUI
+ if (pEditor)
+ ((PluginGUIEditor*)pEditor)->doIdleStuff ();
+#else
+ if (pEditor)
+ ((AEffGUIEditor*)pEditor)->doIdleStuff ();
+#endif
+#if (MAC && QUARTZ)
+ if (pFrameContext)
+ pFrameContext->synchronizeCGContext ();
+#endif
+}
+
+//-----------------------------------------------------------------------------
+unsigned long CFrame::getTicks () const
+{
+#if PLUGGUI
+ if (pEditor)
+ return ((PluginGUIEditor*)pEditor)->getTicks ();
+#else
+ if (pEditor)
+ return ((AEffGUIEditor*)pEditor)->getTicks ();
+#endif
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+long CFrame::getKnobMode () const
+{
+#if PLUGGUI
+ return PluginGUIEditor::getKnobMode ();
+#else
+ return AEffGUIEditor::getKnobMode ();
+#endif
+}
+
+//-----------------------------------------------------------------------------
+#if WINDOWS
+COffscreenContext* CFrame::getBackBuffer ()
+{
+ #if WINDOWS && USE_ALPHA_BLEND
+ if (!backBuffer)
+ backBuffer = new COffscreenContext (this, size.width (), size.height ());
+ #endif
+
+ return backBuffer;
+}
+
+HWND CFrame::getOuterWindow () const
+{
+ int diffWidth, diffHeight;
+ RECT rctTempWnd, rctPluginWnd;
+ HWND hTempWnd = (HWND)pHwnd;
+ GetWindowRect (hTempWnd, &rctPluginWnd);
+
+ while (hTempWnd != NULL)
+ {
+ // Looking for caption bar
+ if (GetWindowLong (hTempWnd, GWL_STYLE) & WS_CAPTION)
+ return hTempWnd;
+
+ // Looking for last parent
+ if (!GetParent (hTempWnd))
+ return hTempWnd;
+
+ // get difference between plugin-window and current parent
+ GetWindowRect (GetParent (hTempWnd), &rctTempWnd);
+
+ diffWidth = (rctTempWnd.right - rctTempWnd.left) - (rctPluginWnd.right - rctPluginWnd.left);
+ diffHeight = (rctTempWnd.bottom - rctTempWnd.top) - (rctPluginWnd.bottom - rctPluginWnd.top);
+
+ // Looking for size mismatch
+ if ((abs (diffWidth) > 60) || (abs (diffHeight) > 60)) // parent belongs to host
+ return (hTempWnd);
+
+ if (diffWidth < 0)
+ diffWidth = 0;
+ if (diffHeight < 0)
+ diffHeight = 0;
+
+ // get the next parent window
+ hTempWnd = GetParent (hTempWnd);
+ }
+
+ return NULL;
+}
+#endif
+
+//-----------------------------------------------------------------------------
+bool CFrame::setPosition (CCoord x, CCoord y)
+{
+ if (!getOpenFlag ())
+ return false;
+#if MAC
+ #if QUARTZ
+ if (controlRef)
+ {
+ HIRect r;
+ if (HIViewGetFrame (controlRef, &r) != noErr)
+ return false;
+ if (HIViewMoveBy (controlRef, x - r.origin.x, y - r.origin.y) != noErr)
+ return false;
+ return true;
+ }
+ #else
+ return false;
+ #endif
+#elif WINDOWS
+ // not implemented yet
+
+#else
+ // not implemented yet
+
+#endif
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+bool CFrame::getPosition (CCoord &x, CCoord &y) const
+{
+ if (!getOpenFlag ())
+ return false;
+
+ // get the position of the Window including this frame in the main pWindow
+#if WINDOWS
+ HWND wnd = (HWND)getOuterWindow ();
+ HWND wndParent = GetParent (wnd);
+
+ RECT rctTempWnd;
+ GetWindowRect (wnd, &rctTempWnd);
+
+ POINT point;
+ point.x = rctTempWnd.left;
+ point.y = rctTempWnd.top;
+
+ MapWindowPoints (HWND_DESKTOP, wndParent, &point, 1);
+
+ x = point.x;
+ y = point.y;
+
+#elif MAC
+ Rect bounds;
+ GetWindowBounds ((WindowRef)pSystemWindow, kWindowContentRgn, &bounds);
+
+ x = bounds.left;
+ y = bounds.top;
+
+ #if QUARTZ
+ WindowAttributes attr;
+ GetWindowAttributes ((WindowRef)pSystemWindow, &attr);
+ if (attr & kWindowCompositingAttribute)
+ {
+/* HIPoint hip = { 0.f, 0.f };
+ HIViewRef contentView;
+ HIViewFindByID (HIViewGetRoot ((WindowRef)pSystemWindow), kHIViewWindowContentID, &contentView);
+ if (HIViewGetSuperview ((HIViewRef)controlRef) != contentView)
+ HIViewConvertPoint (&hip, controlRef, contentView);
+ x += hip.x;
+ y += hip.y;*/
+ }
+ else
+ {
+ HIRect hirect;
+ HIViewGetFrame ((HIViewRef)controlRef, &hirect);
+ x += (CCoord)hirect.origin.x;
+ y += (CCoord)hirect.origin.y;
+ }
+ x -= hiScrollOffset.x;
+ y -= hiScrollOffset.y;
+ #endif
+
+#elif MOTIF
+ Position xWin, yWin;
+
+ // get the topLevelShell of the pSystemWindow
+ Widget parent = (Widget)getSystemWindow ();
+ Widget parentOld = parent;
+ while (parent != 0 && !XtIsTopLevelShell (parent))
+ {
+ parentOld = parent;
+ parent = XtParent (parent);
+ }
+
+ if (parent == 0)
+ parent = parentOld;
+
+ if (parent)
+ {
+ XtVaGetValues (parent, XtNx, &xWin, XtNy, &yWin, NULL);
+ x = xWin - 8;
+ y = yWin - 30;
+ }
+
+#elif BEOS
+ BRect frame = pPlugView->Window ()->Frame ();
+ x = (long) frame.left;
+ y = (long) frame.top;
+#endif
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::setViewSize (CRect& inRect)
+{
+ setSize (inRect.width (), inRect.height ());
+}
+
+//-----------------------------------------------------------------------------
+bool CFrame::setSize (CCoord width, CCoord height)
+{
+ if (!getOpenFlag ())
+ return false;
+
+ if ((width == size.width ()) && (height == size.height ()))
+ return false;
+
+#if WINDOWS
+ if (backBuffer)
+ backBuffer->forget ();
+ backBuffer = 0;
+#endif
+#if !PLUGGUI
+ if (pEditor)
+ {
+ AudioEffectX* effect = (AudioEffectX*)((AEffGUIEditor*)pEditor)->getEffect ();
+ if (effect && effect->canHostDo ("sizeWindow"))
+ {
+ if (effect->sizeWindow ((long)width, (long)height))
+ {
+ size.right = size.left + width;
+ size.bottom = size.top + height;
+
+ #if WINDOWS
+ SetWindowPos ((HWND)pHwnd, HWND_TOP, 0, 0, width, height, SWP_NOMOVE);
+
+ #elif (MAC && QUARTZ)
+ Rect bounds;
+ CRect2Rect (size, bounds);
+ SetControlBounds (controlRef, &bounds);
+ #endif
+
+ return true;
+ }
+ }
+ }
+#endif
+
+ // keep old values
+ CCoord oldWidth = size.width ();
+ CCoord oldHeight = size.height ();
+
+ // set the new size
+ size.right = size.left + width;
+ size.bottom = size.top + height;
+
+#if WINDOWS
+ RECT rctTempWnd, rctParentWnd;
+ HWND hTempWnd;
+ long iFrame = (2 * GetSystemMetrics (SM_CYFIXEDFRAME));
+
+ long diffWidth = 0;
+ long diffHeight = 0;
+
+ hTempWnd = (HWND)pHwnd;
+
+ while ((diffWidth != iFrame) && (hTempWnd != NULL)) // look for FrameWindow
+ {
+ HWND hTempParentWnd = GetParent (hTempWnd);
+ char buffer[1024];
+ GetClassName (hTempParentWnd, buffer, 1024);
+ if (!hTempParentWnd || !strcmp (buffer, "MDIClient"))
+ break;
+ GetWindowRect (hTempWnd, &rctTempWnd);
+ GetWindowRect (hTempParentWnd, &rctParentWnd);
+
+ SetWindowPos (hTempWnd, HWND_TOP, 0, 0, width + diffWidth, height + diffHeight, SWP_NOMOVE);
+
+ diffWidth += (rctParentWnd.right - rctParentWnd.left) - (rctTempWnd.right - rctTempWnd.left);
+ diffHeight += (rctParentWnd.bottom - rctParentWnd.top) - (rctTempWnd.bottom - rctTempWnd.top);
+
+ if ((diffWidth > 80) || (diffHeight > 80)) // parent belongs to host
+ return true;
+
+ if (diffWidth < 0)
+ diffWidth = 0;
+ if (diffHeight < 0)
+ diffHeight = 0;
+
+ hTempWnd = hTempParentWnd;
+ }
+
+ if (hTempWnd)
+ SetWindowPos (hTempWnd, HWND_TOP, 0, 0, width + diffWidth, height + diffHeight, SWP_NOMOVE);
+
+#elif MAC
+ #if QUARTZ
+ if (getSystemWindow ())
+ {
+ WindowAttributes windowAttributes;
+ GetWindowAttributes ((WindowRef)getSystemWindow (), &windowAttributes);
+ if (!(windowAttributes & kWindowCompositingAttribute))
+ {
+ Rect bounds;
+ GetPortBounds (GetWindowPort ((WindowRef)getSystemWindow ()), &bounds);
+ SizeWindow ((WindowRef)getSystemWindow (), (short)((bounds.right - bounds.left) - oldWidth + width),
+ (short)((bounds.bottom - bounds.top) - oldHeight + height), true);
+ }
+ }
+ if (controlRef)
+ {
+ HIRect frameRect;
+ HIViewGetFrame (controlRef, &frameRect);
+ frameRect.size.width = width;
+ frameRect.size.height = height;
+ HIViewSetFrame (controlRef, &frameRect);
+ }
+
+ #else
+ if (getSystemWindow ())
+ {
+ Rect bounds;
+ GetPortBounds (GetWindowPort ((WindowRef)getSystemWindow ()), &bounds);
+ SizeWindow ((WindowRef)getSystemWindow (), (bounds.right - bounds.left) - oldWidth + width,
+ (bounds.bottom - bounds.top) - oldHeight + height, true);
+ #if MACX && !QUARTZ
+ SetPort (GetWindowPort ((WindowRef)getSystemWindow ()));
+ #endif
+ #if QUARTZ
+ CRect2Rect (size, bounds);
+ SetControlBounds (controlRef, &bounds);
+ #endif
+ }
+ #endif
+
+#elif MOTIF
+ Dimension heightWin, widthWin;
+
+ // get the topLevelShell of the pSystemWindow
+ Widget parent = (Widget)getSystemWindow ();
+ Widget parentOld = parent;
+ while (parent != 0 && !XtIsTopLevelShell (parent))
+ {
+ parentOld = parent;
+ parent = XtParent (parent);
+ }
+
+ if (parent == 0)
+ parent = parentOld;
+ if (parent)
+ {
+ XtVaGetValues (parent, XtNwidth, &widthWin, XtNheight, &heightWin, NULL);
+ long diffWidth = widthWin - oldWidth;
+ long diffHeight = heightWin - oldHeight;
+ XtVaSetValues (parent, XmNwidth, width + diffWidth,
+ XmNheight, height + diffHeight, NULL);
+ }
+
+#elif BEOS
+ BView* parent = pPlugView->Parent ();
+ parent->SetResizingMode (B_FOLLOW_ALL_SIDES);
+ BRect frame = pPlugView->Frame ();
+ pPlugView->Window ()->ResizeBy (width - frame.Width () - 1, height - frame.Height () - 1);
+ parent->SetResizingMode (B_FOLLOW_NONE);
+#endif
+
+ CRect myViewSize (0, 0, size.width (), size.height ());
+ CViewContainer::setViewSize (myViewSize);
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+bool CFrame::getSize (CRect *pRect) const
+{
+ if (!getOpenFlag ())
+ return false;
+
+#if WINDOWS
+ // return the size relative to the client rect of this window
+ // get the main window
+ HWND wnd = GetParent ((HWND)getSystemWindow ());
+ HWND wndParent = GetParent (wnd);
+ HWND wndParentParent = GetParent (wndParent);
+
+ RECT rctTempWnd;
+ GetWindowRect (wnd, &rctTempWnd);
+
+ POINT point;
+ point.x = rctTempWnd.left;
+ point.y = rctTempWnd.top;
+
+ MapWindowPoints (HWND_DESKTOP, wndParentParent, &point, 1);
+
+ pRect->left = point.x;
+ pRect->top = point.y;
+ pRect->right = pRect->left + rctTempWnd.right - rctTempWnd.left;
+ pRect->bottom = pRect->top + rctTempWnd.bottom - rctTempWnd.top;
+
+#elif MAC
+ #if QUARTZ
+ HIRect hiRect;
+ if (HIViewGetFrame (controlRef, &hiRect) == noErr)
+ {
+ pRect->left = (CCoord)hiRect.origin.x;
+ pRect->top = (CCoord)hiRect.origin.y;
+ pRect->setWidth ((CCoord)hiRect.size.width);
+ pRect->setHeight ((CCoord)hiRect.size.height);
+ return true;
+ }
+ #endif
+
+ Rect bounds;
+ GetPortBounds (GetWindowPort ((WindowRef)getSystemWindow ()), &bounds);
+
+ pRect->left = bounds.left;
+ pRect->top = bounds.top;
+ pRect->right = bounds.right;
+ pRect->bottom = bounds.bottom;
+
+#elif MOTIF
+ Dimension height, width;
+ XtVaGetValues ((Widget)getSystemWindow (),
+ XtNwidth, &width, XtNheight, &height, NULL);
+
+ Position x, y;
+ Position xTotal = 0, yTotal = 0;
+ Widget parent = (Widget)getSystemWindow ();
+ while (parent != 0 && !XtIsTopLevelShell (parent) && !XmIsDialogShell (parent))
+ {
+ XtVaGetValues (parent, XtNx, &x, XtNy, &y, NULL);
+ xTotal += x;
+ yTotal += y;
+ parent = XtParent (parent);
+ }
+
+ pRect->left = xTotal;
+ pRect->top = yTotal;
+ pRect->right = width + pRect->left;
+ pRect->bottom = height + pRect->top;
+
+#elif BEOS
+ BRect v = pPlugView->Frame ();
+ (*pRect) (v.left, v.top, v.right + 1, v.bottom + 1);
+#endif
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+bool CFrame::getSize (CRect& outSize) const
+{
+ return getSize (&outSize);
+}
+
+//-----------------------------------------------------------------------------
+long CFrame::setModalView (CView *pView)
+{
+ // There's already a modal view so we get out
+ if (pView && pModalView)
+ return 0;
+
+ if (pModalView)
+ removeView (pModalView, false);
+
+ pModalView = pView;
+ if (pModalView)
+ addView (pModalView);
+
+ return 1;
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::beginEdit (long index)
+{
+#if PLUGGUI
+ #if AU
+ if (pEditor)
+ ((PluginGUIEditor*)pEditor)->beginEdit (index);
+ #endif
+#else
+ if (pEditor)
+ ((AEffGUIEditor*)pEditor)->beginEdit (index);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::endEdit (long index)
+{
+#if PLUGGUI
+ #if AU
+ if (pEditor)
+ ((PluginGUIEditor*)pEditor)->endEdit (index);
+ #endif
+#else
+ if (pEditor)
+ ((AEffGUIEditor*)pEditor)->endEdit (index);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+CView *CFrame::getCurrentView () const
+{
+ if (pModalView)
+ return pModalView;
+
+ return CViewContainer::getCurrentView ();
+}
+
+//-----------------------------------------------------------------------------
+bool CFrame::getCurrentLocation (CPoint &where)
+{
+#if WINDOWS
+ HWND hwnd = (HWND)this->getSystemWindow ();
+ POINT _where;
+ GetCursorPos (&_where);
+ where (_where.x, _where.y);
+ if (hwnd)
+ {
+ RECT rctTempWnd;
+ GetWindowRect (hwnd, &rctTempWnd);
+ where.offset (-rctTempWnd.left, -rctTempWnd.top);
+ }
+ return true;
+#endif
+
+ // create a local context
+ CDrawContext *pContext = createDrawContext ();
+ if (pContext)
+ {
+ // get the current position
+ pContext->getMouseLocation (where);
+ pContext->forget ();
+ }
+ return true;
+}
+
+#if MACX
+#define kThemeResizeUpDownCursor 21
+#define kThemeNotAllowedCursor 18
+#endif
+
+//-----------------------------------------------------------------------------
+void CFrame::setCursor (CCursorType type)
+{
+ #if WINDOWS
+ if (!defaultCursor)
+ defaultCursor = GetCursor ();
+ switch (type)
+ {
+ case kCursorWait:
+ SetCursor (LoadCursor (0, IDC_WAIT));
+ break;
+ case kCursorHSize:
+ SetCursor (LoadCursor (0, IDC_SIZEWE));
+ break;
+ case kCursorVSize:
+ SetCursor (LoadCursor (0, IDC_SIZENS));
+ break;
+ case kCursorNESWSize:
+ SetCursor (LoadCursor (0, IDC_SIZENESW));
+ break;
+ case kCursorNWSESize:
+ SetCursor (LoadCursor (0, IDC_SIZENWSE));
+ break;
+ case kCursorSizeAll:
+ SetCursor (LoadCursor (0, IDC_SIZEALL));
+ break;
+ case kCursorNotAllowed:
+ SetCursor (LoadCursor (0, IDC_NO));
+ break;
+ case kCursorHand:
+ SetCursor (LoadCursor (0, IDC_HAND));
+ break;
+ default:
+ SetCursor ((HCURSOR)defaultCursor);
+ break;
+ }
+ #elif MAC
+ #if MACX
+ switch (type)
+ {
+ case kCursorWait:
+ SetThemeCursor (kThemeWatchCursor);
+ break;
+ case kCursorHSize:
+ SetThemeCursor (pSystemVersion < 0x1030 ? kThemeCrossCursor : kThemeResizeLeftRightCursor);
+ break;
+ case kCursorVSize:
+ SetThemeCursor (pSystemVersion < 0x1030 ? kThemeCrossCursor : kThemeResizeUpDownCursor);
+ break;
+ case kCursorNESWSize:
+ SetThemeCursor (kThemeCrossCursor);
+ break;
+ case kCursorNWSESize:
+ SetThemeCursor (kThemeCrossCursor);
+ break;
+ case kCursorSizeAll:
+ SetThemeCursor (kThemeCrossCursor);
+ break;
+ case kCursorCopy:
+ SetThemeCursor (kThemeCopyArrowCursor);
+ break;
+ case kCursorNotAllowed:
+ SetThemeCursor (pSystemVersion < 0x1020 ? kThemeArrowCursor : kThemeNotAllowedCursor);
+ break;
+ case kCursorHand:
+ SetThemeCursor (kThemeOpenHandCursor);
+ break;
+ default:
+ SetThemeCursor (kThemeArrowCursor);
+ break;
+ }
+ #else
+ //if (!defaultCursor)
+ // defaultCursor = GetCursor (0);
+ switch (type)
+ {
+ case kCursorWait:
+ SetCursor (*GetCursor (watchCursor));
+ break;
+ case kCursorHSize:
+ SetCursor (*GetCursor (crossCursor));
+ break;
+ case kCursorVSize:
+ SetCursor (*GetCursor (crossCursor));
+ break;
+ case kCursorNESWSize:
+ SetCursor (*GetCursor (crossCursor));
+ break;
+ case kCursorNWSESize:
+ SetCursor (*GetCursor (crossCursor));
+ break;
+ case kCursorSizeAll:
+ SetCursor (*GetCursor (plusCursor));
+ break;
+ default:
+ InitCursor ();
+ break;
+ }
+ #endif
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::setFocusView (CView *pView)
+{
+ CView *pOldFocusView = pFocusView;
+ pFocusView = pView;
+ if (pFocusView && pFocusView->wantsFocus ())
+ pFocusView->setDirty ();
+
+ if (pOldFocusView)
+ {
+ pOldFocusView->looseFocus ();
+ if (pOldFocusView->wantsFocus ())
+ pOldFocusView->setDirty ();
+ }
+}
+
+//-----------------------------------------------------------------------------
+bool CFrame::advanceNextFocusView (CView* oldFocus, bool reverse)
+{
+ if (pModalView)
+ return false; // currently not supported, but should be done sometime
+ if (oldFocus == 0)
+ {
+ if (pFocusView == 0)
+ return CViewContainer::advanceNextFocusView (0, reverse);
+ oldFocus = pFocusView;
+ }
+ if (isChild (oldFocus))
+ {
+ if (CViewContainer::advanceNextFocusView (oldFocus, reverse))
+ return true;
+ else
+ {
+ setFocusView (NULL);
+ return false;
+ }
+ }
+ CView* parentView = oldFocus->getParentView ();
+ if (parentView && parentView->isTypeOf ("CViewContainer"))
+ {
+ CView* tempOldFocus = oldFocus;
+ CViewContainer* vc = (CViewContainer*)parentView;
+ while (vc)
+ {
+ if (vc->advanceNextFocusView (tempOldFocus, reverse))
+ return true;
+ else
+ {
+ tempOldFocus = vc;
+ if (vc->getParentView () && vc->getParentView ()->isTypeOf ("CViewContainer"))
+ vc = (CViewContainer*)vc->getParentView ();
+ else
+ vc = 0;
+ }
+ }
+ }
+ return CViewContainer::advanceNextFocusView (oldFocus, reverse);
+}
+
+//-----------------------------------------------------------------------------
+void CFrame::invalidate (const CRect &rect)
+{
+ CRect rectView;
+ FOREACHSUBVIEW
+ if (pV)
+ {
+ pV->getViewSize (rectView);
+ if (rect.rectOverlap (rectView))
+ pV->setDirty (true);
+ }
+ ENDFOR
+}
+
+#if DEBUG
+//-----------------------------------------------------------------------------
+void CFrame::dumpHierarchy ()
+{
+ dumpInfo ();
+ DebugPrint ("\n");
+ CViewContainer::dumpHierarchy ();
+}
+#endif
+
+//-----------------------------------------------------------------------------
+// CCView Implementation
+//-----------------------------------------------------------------------------
+CCView::CCView (CView *pView)
+ : pView (pView), pNext (0), pPrevious (0)
+{
+ if (pView)
+ pView->remember ();
+}
+
+//-----------------------------------------------------------------------------
+CCView::~CCView ()
+{
+ if (pView)
+ pView->forget ();
+}
+
+//-----------------------------------------------------------------------------
+// CViewContainer Implementation
+//-----------------------------------------------------------------------------
+/**
+ * CViewContainer constructor.
+ * @param rect the size of the container
+ * @param pParent the parent CFrame
+ * @param pBackground the background bitmap, can be NULL
+ */
+CViewContainer::CViewContainer (const CRect &rect, CFrame *pParent, CBitmap *pBackground)
+: CView (rect), pFirstView (0), pLastView (0),
+ mode (kNormalUpdate), pOffscreenContext (0), bDrawInOffscreen (true), currentDragView (0)
+{
+ #if MACX || USE_ALPHA_BLEND
+ bDrawInOffscreen = false;
+ #endif
+ backgroundOffset (0, 0);
+ this->pParentFrame = pParent;
+ setBackground (pBackground);
+ backgroundColor = kBlackCColor;
+ #if NEW_UPDATE_MECHANISM
+ mode = kOnlyDirtyUpdate;
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+CViewContainer::~CViewContainer ()
+{
+ // remove all views
+ removeAll (true);
+
+ #if !BEOS
+ if (pOffscreenContext)
+ pOffscreenContext->forget ();
+ pOffscreenContext = 0;
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param rect the new size of the container
+ */
+void CViewContainer::setViewSize (CRect &rect)
+{
+ CView::setViewSize (rect);
+
+ #if !BEOS
+ if (pOffscreenContext && bDrawInOffscreen)
+ {
+ pOffscreenContext->forget ();
+ pOffscreenContext = new COffscreenContext (pParentFrame, (long)size.width (), (long)size.height (), kBlackCColor);
+ }
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param color the new background color of the container
+ */
+void CViewContainer::setBackgroundColor (CColor color)
+{
+ backgroundColor = color;
+ setDirty (true);
+}
+
+//------------------------------------------------------------------------------
+long CViewContainer::notify (CView* sender, const char* message)
+{
+ if (message == kMsgCheckIfViewContainer)
+ return kMessageNotified;
+ return kMessageUnknown;
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param pView the view object to add to this container
+ */
+void CViewContainer::addView (CView *pView)
+{
+ if (!pView)
+ return;
+
+ CCView *pSv = new CCView (pView);
+
+ pView->pParentFrame = pParentFrame;
+ pView->pParentView = this;
+
+ CCView *pV = pFirstView;
+ if (!pV)
+ {
+ pLastView = pFirstView = pSv;
+ }
+ else
+ {
+ while (pV->pNext)
+ pV = pV->pNext;
+ pV->pNext = pSv;
+ pSv->pPrevious = pV;
+ pLastView = pSv;
+ }
+ pView->attached (this);
+ pView->setDirty ();
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param pView the view object to add to this container
+ * @param mouseableArea the view area in where the view will get mouse events
+ * @param mouseEnabled bool to set if view will get mouse events
+ */
+void CViewContainer::addView (CView *pView, CRect &mouseableArea, bool mouseEnabled)
+{
+ if (!pView)
+ return;
+
+ pView->setMouseEnabled (mouseEnabled);
+ pView->setMouseableArea (mouseableArea);
+
+ addView (pView);
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param withForget bool to indicate if the view's reference counter should be decreased after removed from the container
+ */
+void CViewContainer::removeAll (const bool &withForget)
+{
+ CCView *pV = pFirstView;
+ while (pV)
+ {
+ CCView *pNext = pV->pNext;
+ if (pV->pView)
+ {
+ pV->pView->removed (this);
+ if (withForget)
+ pV->pView->forget ();
+ }
+
+ delete pV;
+
+ pV = pNext;
+ }
+ pFirstView = 0;
+ pLastView = 0;
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param pView the view which should be removed from the container
+ * @param withForget bool to indicate if the view's reference counter should be decreased after removed from the container
+ */
+void CViewContainer::removeView (CView *pView, const bool &withForget)
+{
+ if (pParentFrame && pParentFrame->getFocusView () == pView)
+ pParentFrame->setFocusView (0);
+ CCView *pV = pFirstView;
+ while (pV)
+ {
+ if (pView == pV->pView)
+ {
+ CCView *pNext = pV->pNext;
+ CCView *pPrevious = pV->pPrevious;
+ if (pV->pView)
+ {
+ pV->pView->removed (this);
+ if (withForget)
+ pV->pView->forget ();
+ }
+ delete pV;
+ if (pPrevious)
+ {
+ pPrevious->pNext = pNext;
+ if (pNext)
+ pNext->pPrevious = pPrevious;
+ else
+ pLastView = pPrevious;
+ }
+ else
+ {
+ pFirstView = pNext;
+ if (pNext)
+ pNext->pPrevious = 0;
+ else
+ pLastView = 0;
+ }
+ break;
+ }
+ else
+ pV = pV->pNext;
+ }
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param pView the view which should be checked if it is a child of this container
+ */
+bool CViewContainer::isChild (CView *pView) const
+{
+ bool found = false;
+
+ CCView *pV = pFirstView;
+ while (pV)
+ {
+ if (pView == pV->pView)
+ {
+ found = true;
+ break;
+ }
+ pV = pV->pNext;
+ }
+ return found;
+}
+
+//-----------------------------------------------------------------------------
+long CViewContainer::getNbViews () const
+{
+ long nb = 0;
+ CCView *pV = pFirstView;
+ while (pV)
+ {
+ pV = pV->pNext;
+ nb++;
+ }
+ return nb;
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param index the index of the view to return
+ */
+CView *CViewContainer::getView (long index) const
+{
+ long nb = 0;
+ CCView *pV = pFirstView;
+ while (pV)
+ {
+ if (nb == index)
+ return pV->pView;
+ pV = pV->pNext;
+ nb++;
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param pContext the context which to use to draw this container and its subviews
+ */
+void CViewContainer::draw (CDrawContext *pContext)
+{
+ CDrawContext *pC;
+ CCoord save[4];
+
+ #if BEOS
+ // create offscreen
+ if (pBackground)
+ pC = new COffscreenContext (pContext, pBackground);
+ else
+ pC = new COffscreenContext (pParentFrame, size.width (), size.height (), backgroundColor);
+
+ #else
+ if (!pOffscreenContext && bDrawInOffscreen)
+ pOffscreenContext = new COffscreenContext (pParentFrame, (long)size.width (), (long)size.height (), kBlackCColor);
+ #if USE_ALPHA_BLEND
+ if (pOffscreenContext && bTransparencyEnabled)
+ pOffscreenContext->copyTo (pContext, size);
+ #endif
+
+ if (bDrawInOffscreen)
+ pC = pOffscreenContext;
+ else
+ {
+ pC = pContext;
+ modifyDrawContext (save, pContext);
+ }
+
+ CRect r (0, 0, size.width (), size.height ());
+
+ #if USE_CLIPPING_DRAWRECT
+ CRect oldClip;
+ pContext->getClipRect (oldClip);
+ CRect oldClip2 (oldClip);
+ if (bDrawInOffscreen && getFrame () != this)
+ oldClip.offset (-oldClip.left, -oldClip.top);
+
+ CRect newClip (r);
+ newClip.bound (oldClip);
+ pC->setClipRect (newClip);
+ #endif
+
+ // draw the background
+ if (pBackground)
+ {
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pC, r, backgroundOffset);
+ else
+ pBackground->draw (pC, r, backgroundOffset);
+ }
+ else if (!bTransparencyEnabled)
+ {
+ pC->setFillColor (backgroundColor);
+ pC->fillRect (r);
+ }
+ #endif
+
+ // draw each view
+ FOREACHSUBVIEW
+ #if USE_CLIPPING_DRAWRECT
+ CRect vSize (pV->size);
+ vSize.bound (oldClip);
+ pC->setClipRect (vSize);
+ #endif
+ pV->draw (pC);
+ ENDFOR
+
+ #if USE_CLIPPING_DRAWRECT
+ pC->setClipRect (oldClip2);
+ #endif
+
+ // transfert offscreen
+ if (bDrawInOffscreen)
+ ((COffscreenContext*)pC)->copyFrom (pContext, size);
+ else
+ restoreDrawContext (pContext, save);
+
+ #if BEOS
+ delete pC;
+ #endif
+
+ setDirty (false);
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param pContext the context which to use to draw the background
+ * @param _updateRect the area which to draw
+ */
+void CViewContainer::drawBackgroundRect (CDrawContext *pContext, CRect& _updateRect)
+{
+ if (pBackground)
+ {
+ CRect oldClip;
+ pContext->getClipRect (oldClip);
+ CRect newClip (_updateRect);
+ newClip.bound (oldClip);
+ pContext->setClipRect (newClip);
+ CRect tr (0, 0, pBackground->getWidth (), pBackground->getHeight ());
+ if (bTransparencyEnabled)
+ pBackground->drawTransparent (pContext, tr, backgroundOffset);
+ else
+ pBackground->draw (pContext, tr, backgroundOffset);
+ pContext->setClipRect (oldClip);
+ }
+ else if (!bTransparencyEnabled)
+ {
+ pContext->setFillColor (backgroundColor);
+ pContext->fillRect (_updateRect);
+ }
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param pContext the context which to use to draw
+ * @param _updateRect the area which to draw
+ */
+void CViewContainer::drawRect (CDrawContext *pContext, const CRect& _updateRect)
+{
+ CDrawContext *pC;
+ CCoord save[4];
+
+ #if BEOS
+ // create offscreen
+ if (pBackground)
+ pC = new COffscreenContext (pContext, pBackground);
+ else
+ pC = new COffscreenContext (pParentFrame, size.width (), size.height (), backgroundColor);
+
+ #else
+ if (!pOffscreenContext && bDrawInOffscreen)
+ pOffscreenContext = new COffscreenContext (pParentFrame, (long)size.width (), (long)size.height (), kBlackCColor);
+ #if USE_ALPHA_BLEND
+ if (pOffscreenContext && bTransparencyEnabled)
+ pOffscreenContext->copyTo (pContext, size);
+ #endif
+
+ if (bDrawInOffscreen)
+ pC = pOffscreenContext;
+ else
+ {
+ pC = pContext;
+ modifyDrawContext (save, pContext);
+ }
+
+ CRect updateRect (_updateRect);
+ updateRect.bound (size);
+
+ CRect clientRect (updateRect);
+ clientRect.offset (-size.left, -size.top);
+
+ #if USE_CLIPPING_DRAWRECT
+ CRect oldClip;
+ pContext->getClipRect (oldClip);
+ CRect oldClip2 (oldClip);
+ if (bDrawInOffscreen && getFrame () != this)
+ oldClip.offset (-oldClip.left, -oldClip.top);
+
+ CRect newClip (clientRect);
+ newClip.bound (oldClip);
+ pC->setClipRect (newClip);
+ #endif
+
+ // draw the background
+ drawBackgroundRect (pC, clientRect);
+ #endif
+
+ // draw each view
+ FOREACHSUBVIEW
+ if (pV->checkUpdate (clientRect))
+ {
+ #if USE_CLIPPING_DRAWRECT
+ CRect viewSize (pV->size);
+ viewSize.bound (newClip);
+ if (viewSize.getWidth () == 0 || viewSize.getHeight () == 0)
+ continue;
+ pC->setClipRect (viewSize);
+ #endif
+
+ bool wasDirty = pV->isDirty ();
+ pV->drawRect (pC, clientRect);
+
+ #if DEBUG_FOCUS_DRAWING
+ if (getFrame ()->getFocusView() == pV && pV->wantsFocus ())
+ {
+ pC->setDrawMode (kCopyMode);
+ pC->setFrameColor (kRedCColor);
+ pC->drawRect (pV->size);
+ }
+ #endif
+ if (wasDirty && pV->size != viewSize && !isTypeOf ("CScrollContainer"))
+ {
+ pV->setDirty (true);
+ }
+ }
+ ENDFOR
+
+ #if USE_CLIPPING_DRAWRECT
+ pC->setClipRect (oldClip2);
+ #endif
+
+ // transfer offscreen
+ if (bDrawInOffscreen)
+ ((COffscreenContext*)pC)->copyFrom (pContext, updateRect, CPoint (clientRect.left, clientRect.top));
+ else
+ restoreDrawContext (pContext, save);
+
+ #if BEOS
+ delete pC;
+ #endif
+
+#if EVENT_DRAW_FIX
+ if (bDirty && newClip == size)
+#endif
+ setDirty (false);
+}
+
+//-----------------------------------------------------------------------------
+/**
+ * @param context the context which to use to redraw this container
+ * @param rect the area which to redraw
+ */
+void CViewContainer::redrawRect (CDrawContext* context, const CRect& rect)
+{
+ CRect _rect (rect);
+ _rect.offset (size.left, size.top);
+ if (bTransparencyEnabled)
+ {
+ // as this is transparent, we call the parentview to redraw this area.
+ if (pParentView)
+ pParentView->redrawRect (context, _rect);
+ else if (pParentFrame)
+ pParentFrame->drawRect (context, _rect);
+ }
+ else
+ {
+ CCoord save[4];
+ if (pParentView)
+ {
+ CPoint off;
+ pParentView->localToFrame (off);
+ // store
+ save[0] = context->offsetScreen.h;
+ save[1] = context->offsetScreen.v;
+ save[2] = context->offset.h;
+ save[3] = context->offset.v;
+
+ context->offsetScreen.h += off.x;
+ context->offsetScreen.v += off.y;
+ context->offset.h += off.x;
+ context->offset.v += off.y;
+ }
+
+ drawRect (context, _rect);
+
+ if (pParentView)
+ {
+ // restore
+ context->offsetScreen.h = save[0];
+ context->offsetScreen.v = save[1];
+ context->offset.h = save[2];
+ context->offset.v = save[3];
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+bool CViewContainer::hitTestSubViews (const CPoint& where, const long buttons)
+{
+ CPoint where2 (where);
+ where2.offset (-size.left, -size.top);
+
+ CCView *pSv = pLastView;
+ while (pSv)
+ {
+ CView *pV = pSv->pView;
+ if (pV && pV->getMouseEnabled () && pV->hitTest (where2, buttons))
+ return true;
+ pSv = pSv->pPrevious;
+ }
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+bool CViewContainer::hitTest (const CPoint& where, const long buttons)
+{
+ //return hitTestSubViews (where); would change default behavior
+ return CView::hitTest (where, buttons);
+}
+
+//-----------------------------------------------------------------------------
+void CViewContainer::mouse (CDrawContext *pContext, CPoint &where, long buttons)
+{
+ // convert to relativ pos
+ CPoint where2 (where);
+ where2.offset (-size.left, -size.top);
+
+ if (buttons == -1 && pContext)
+ buttons = pContext->getMouseButtons ();
+
+ CCView *pSv = pLastView;
+ while (pSv)
+ {
+ CView *pV = pSv->pView;
+ if (pV && pV->getMouseEnabled () && pV->hitTest (where2, buttons))
+ {
+ pV->mouse (pContext, where2, buttons);
+ break;
+ }
+ pSv = pSv->pPrevious;
+ }
+}
+
+//-----------------------------------------------------------------------------
+long CViewContainer::onKeyDown (VstKeyCode& keyCode)
+{
+ long result = -1;
+
+ CCView* pSv = pLastView;
+ while (pSv)
+ {
+ long result = pSv->pView->onKeyDown (keyCode);
+ if (result != -1)
+ break;
+
+ pSv = pSv->pPrevious;
+ }
+
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+long CViewContainer::onKeyUp (VstKeyCode& keyCode)
+{
+ long result = -1;
+
+ CCView* pSv = pLastView;
+ while (pSv)
+ {
+ long result = pSv->pView->onKeyUp (keyCode);
+ if (result != -1)
+ break;
+
+ pSv = pSv->pPrevious;
+ }
+
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+bool CViewContainer::onWheel (CDrawContext *pContext, const CPoint &where, const CMouseWheelAxis axis, float distance)
+{
+ bool result = false;
+ CView *view = getViewAt (where);
+ if (view)
+ {
+ // convert to relativ pos
+ CPoint where2 (where);
+ where2.offset (-size.left, -size.top);
+
+ CCoord save[4];
+ modifyDrawContext (save, pContext);
+
+ result = view->onWheel (pContext, where2, axis, distance);
+
+ restoreDrawContext (pContext, save);
+ }
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+bool CViewContainer::onWheel (CDrawContext *pContext, const CPoint &where, float distance)
+{
+ return onWheel (pContext, where, kMouseWheelAxisY, distance);
+}
+
+//-----------------------------------------------------------------------------
+bool CViewContainer::onDrop (CDrawContext* context, CDragContainer* drag, const CPoint& where)
+{
+ if (!pParentFrame)
+ return false;
+
+ bool result = false;
+
+ CCoord save[4];
+ modifyDrawContext (save, context);
+
+ // convert to relativ pos
+ CPoint where2 (where);
+ where2.offset (-size.left, -size.top);
+
+ CView* view = getViewAt (where);
+ if (view != currentDragView)
+ {
+ if (currentDragView)
+ currentDragView->onDragLeave (context, drag, where2);
+ currentDragView = view;
+ }
+ if (currentDragView)
+ {
+ result = currentDragView->onDrop (context, drag, where2);
+ currentDragView->onDragLeave (context, drag, where2);
+ }
+ currentDragView = 0;
+
+ restoreDrawContext (context, save);
+
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+void CViewContainer::onDragEnter (CDrawContext* context, CDragContainer* drag, const CPoint& where)
+{
+ if (!pParentFrame)
+ return;
+
+ CCoord save[4];
+ modifyDrawContext (save, context);
+
+ // convert to relativ pos
+ CPoint where2 (where);
+ where2.offset (-size.left, -size.top);
+
+ if (currentDragView)
+ currentDragView->onDragLeave (context, drag, where2);
+ CView* view = getViewAt (where);
+ currentDragView = view;
+ if (view)
+ view->onDragEnter (context, drag, where2);
+
+ restoreDrawContext (context, save);
+}
+
+//-----------------------------------------------------------------------------
+void CViewContainer::onDragLeave (CDrawContext* context, CDragContainer* drag, const CPoint& where)
+{
+ if (!pParentFrame)
+ return;
+
+ CCoord save[4];
+ modifyDrawContext (save, context);
+
+ // convert to relativ pos
+ CPoint where2 (where);
+ where2.offset (-size.left, -size.top);
+
+ if (currentDragView)
+ currentDragView->onDragLeave (context, drag, where2);
+ currentDragView = 0;
+
+ restoreDrawContext (context, save);
+}
+
+//-----------------------------------------------------------------------------
+void CViewContainer::onDragMove (CDrawContext* context, CDragContainer* drag, const CPoint& where)
+{
+ if (!pParentFrame)
+ return;
+
+ CCoord save[4];
+ modifyDrawContext (save, context);
+
+ // convert to relativ pos
+ CPoint where2 (where);
+ where2.offset (-size.left, -size.top);
+
+ CView* view = getViewAt (where);
+ if (view != currentDragView)
+ {
+ if (currentDragView)
+ currentDragView->onDragLeave (context, drag, where2);
+ if (view)
+ view->onDragEnter (context, drag, where2);
+ currentDragView = view;
+ }
+ else if (currentDragView)
+ currentDragView->onDragMove (context, drag, where2);
+
+ restoreDrawContext (context, save);
+}
+
+//-----------------------------------------------------------------------------
+void CViewContainer::update (CDrawContext *pContext)
+{
+ switch (mode)
+ {
+ //---Normal : redraw all...
+ case kNormalUpdate:
+ if (isDirty ())
+ {
+ #if NEW_UPDATE_MECHANISM
+ CRect ur (0, 0, size.width (), size.height ());
+ redrawRect (pContext, ur);
+ #else
+ #if USE_ALPHA_BLEND
+ if (bTransparencyEnabled)
+ {
+ CRect updateRect (size);
+ CPoint offset (0,0);
+ localToFrame (offset);
+ updateRect.offset (offset.x, offset.y);
+ getFrame ()->drawRect (pContext, updateRect);
+ }
+ else
+ #endif
+ draw (pContext);
+ #endif // !NEW_UPDATE_MECHANISM
+ setDirty (false);
+ }
+ break;
+
+ //---Redraw only dirty controls-----
+ case kOnlyDirtyUpdate:
+ {
+ #if NEW_UPDATE_MECHANISM
+ if (bDirty)
+ {
+ CRect ur (0, 0, size.width (), size.height ());
+ redrawRect (pContext, ur);
+ }
+ else
+ {
+ CRect updateRect (size);
+ updateRect.offset (-size.left, -size.top);
+ FOREACHSUBVIEW
+ if (pV->isDirty () && pV->checkUpdate (updateRect))
+ {
+ if (pV->notify (this, kMsgCheckIfViewContainer))
+ pV->update (pContext);
+ else
+ {
+ CRect drawSize (pV->size);
+ drawSize.bound (updateRect);
+ pV->redrawRect (pContext, drawSize);
+ }
+ }
+ ENDFOR
+ }
+ #else
+ #if USE_ALPHA_BLEND
+ if (bTransparencyEnabled)
+ {
+ if (bDirty)
+ {
+ CRect updateRect (size);
+ CPoint offset (0,0);
+ localToFrame (offset);
+ updateRect.offset (offset.x, offset.y);
+ getFrame ()->drawRect (pContext, updateRect);
+ }
+ else
+ {
+ CRect updateRect (size);
+ updateRect.offset (-size.left, -size.top);
+ FOREACHSUBVIEW
+ if (pV->isDirty () && pV->checkUpdate (updateRect))
+ {
+ if (pV->notify (this, kMsgCheckIfViewContainer))
+ {
+ pV->update (pContext);
+ }
+ else
+ {
+ CPoint offset;
+ CRect viewSize (pV->size);
+ pV->localToFrame (offset);
+ viewSize.offset (offset.x, offset.y);
+ getFrame ()->drawRect (pContext, viewSize);
+ }
+ }
+ ENDFOR
+ }
+ setDirty (false);
+ return;
+ }
+ #endif
+ if (bDirty)
+ draw (pContext);
+ else if (bDrawInOffscreen && pOffscreenContext)
+ {
+ bool doCopy = false;
+ if (isDirty ())
+ doCopy = true;
+
+ FOREACHSUBVIEW
+ pV->update (pOffscreenContext);
+ ENDFOR
+
+ // transfert offscreen
+ if (doCopy)
+ pOffscreenContext->copyFrom (pContext, size);
+ }
+ else
+ {
+ long save[4];
+ modifyDrawContext (save, pContext);
+
+ FOREACHSUBVIEW
+ if (pV->isDirty ())
+ {
+ long oldMode = 0;
+ CViewContainer* child = 0;
+ if (pV->notify (this, kMsgCheckIfViewContainer))
+ {
+ child = (CViewContainer*)pV;
+ oldMode = child->getMode ();
+ child->setMode (kNormalUpdate);
+ }
+ CRect viewSize (pV->size);
+ drawBackgroundRect (pContext, viewSize);
+ pV->update (pContext);
+ if (child)
+ child->setMode (oldMode);
+ }
+ ENDFOR
+
+ restoreDrawContext (pContext, save);
+ }
+ #endif // !NEW_UPDATE_MECHANISM
+ setDirty (false);
+ break;
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CViewContainer::looseFocus (CDrawContext *pContext)
+{
+ FOREACHSUBVIEW
+ pV->looseFocus (pContext);
+ ENDFOR
+}
+
+//-----------------------------------------------------------------------------
+void CViewContainer::takeFocus (CDrawContext *pContext)
+{
+ FOREACHSUBVIEW
+ pV->takeFocus (pContext);
+ ENDFOR
+}
+
+//-----------------------------------------------------------------------------
+bool CViewContainer::advanceNextFocusView (CView* oldFocus, bool reverse)
+{
+ bool foundOld = false;
+ FOREACHSUBVIEW_REVERSE(reverse)
+ if (oldFocus && !foundOld)
+ {
+ if (oldFocus == pV)
+ {
+ foundOld = true;
+ continue;
+ }
+ }
+ else
+ {
+ if (pV->wantsFocus ())
+ {
+ getFrame ()->setFocusView (pV);
+ return true;
+ }
+ else if (pV->isTypeOf ("CViewContainer"))
+ {
+ if (((CViewContainer*)pV)->advanceNextFocusView (0, reverse))
+ return true;
+ }
+ }
+ ENDFOR
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+bool CViewContainer::isDirty () const
+{
+ if (bDirty)
+ return true;
+
+ CRect viewSize (size);
+ viewSize.offset (-size.left, -size.top);
+
+ FOREACHSUBVIEW
+ if (pV->isDirty ())
+ {
+ CRect r (pV->size);
+ r.bound (viewSize);
+ if (r.getWidth () > 0 && r.getHeight () > 0)
+ return true;
+ }
+ ENDFOR
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+CView *CViewContainer::getCurrentView () const
+{
+ if (!pParentFrame)
+ return 0;
+
+ // get the current position
+ CPoint where;
+ pParentFrame->getCurrentLocation (where);
+
+ frameToLocal (where);
+
+ CCView *pSv = pLastView;
+ while (pSv)
+ {
+ CView *pV = pSv->pView;
+ if (pV && where.isInside (pV->mouseableArea))
+ return pV;
+ pSv = pSv->pPrevious;
+ }
+
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+CView *CViewContainer::getViewAt (const CPoint& p, bool deep) const
+{
+ if (!pParentFrame)
+ return 0;
+
+ CPoint where (p);
+
+ // convert to relativ pos
+ where.offset (-size.left, -size.top);
+
+ CCView *pSv = pLastView;
+ while (pSv)
+ {
+ CView *pV = pSv->pView;
+ if (pV && where.isInside (pV->mouseableArea))
+ {
+ if (deep)
+ {
+ if (pV->isTypeOf ("CViewContainer"))
+ return ((CViewContainer*)pV)->getViewAt (where, deep);
+ }
+ return pV;
+ }
+ pSv = pSv->pPrevious;
+ }
+
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+CPoint& CViewContainer::frameToLocal (CPoint& point) const
+{
+ point.offset (-size.left, -size.top);
+ if (pParentView && pParentView->isTypeOf ("CViewContainer"))
+ return pParentView->frameToLocal (point);
+ return point;
+}
+
+//-----------------------------------------------------------------------------
+CPoint& CViewContainer::localToFrame (CPoint& point) const
+{
+ point.offset (size.left, size.top);
+ if (pParentView && pParentView->isTypeOf ("CViewContainer"))
+ return pParentView->localToFrame (point);
+ return point;
+}
+
+//-----------------------------------------------------------------------------
+bool CViewContainer::removed (CView* parent)
+{
+ #if !BEOS
+ if (pOffscreenContext)
+ pOffscreenContext->forget ();
+ pOffscreenContext = 0;
+ #endif
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+bool CViewContainer::attached (CView* view)
+{
+ #if !BEOS
+ // create offscreen bitmap
+ if (!pOffscreenContext && bDrawInOffscreen)
+ pOffscreenContext = new COffscreenContext (pParentFrame, (long)size.width (), (long)size.height (), kBlackCColor);
+ #endif
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+void CViewContainer::useOffscreen (bool b)
+{
+ bDrawInOffscreen = b;
+
+ #if !BEOS
+ if (!bDrawInOffscreen && pOffscreenContext)
+ {
+ pOffscreenContext->forget ();
+ pOffscreenContext = 0;
+ }
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+void CViewContainer::modifyDrawContext (CCoord save[4], CDrawContext* pContext)
+{
+ // store
+ save[0] = pContext->offsetScreen.h;
+ save[1] = pContext->offsetScreen.v;
+ save[2] = pContext->offset.h;
+ save[3] = pContext->offset.v;
+
+ pContext->offsetScreen.h += size.left;
+ pContext->offsetScreen.v += size.top;
+ pContext->offset.h += size.left;
+ pContext->offset.v += size.top;
+}
+
+//-----------------------------------------------------------------------------
+void CViewContainer::restoreDrawContext (CDrawContext* pContext, CCoord save[4])
+{
+ // restore
+ pContext->offsetScreen.h = save[0];
+ pContext->offsetScreen.v = save[1];
+ pContext->offset.h = save[2];
+ pContext->offset.v = save[3];
+}
+
+#if DEBUG
+static long _debugDumpLevel = 0;
+//-----------------------------------------------------------------------------
+void CViewContainer::dumpInfo ()
+{
+ static const char* modeString[] = { "Normal Update Mode", "Only Dirty Update Mode"};
+ DebugPrint ("CViewContainer: Mode: %s, Offscreen:%s ", modeString[mode], bDrawInOffscreen ? "Yes" : "No");
+ CView::dumpInfo ();
+}
+
+//-----------------------------------------------------------------------------
+void CViewContainer::dumpHierarchy ()
+{
+ _debugDumpLevel++;
+ FOREACHSUBVIEW
+ for (long i = 0; i < _debugDumpLevel; i++)
+ DebugPrint ("\t");
+ pV->dumpInfo ();
+ DebugPrint ("\n");
+ if (pV->isTypeOf ("CViewContainer"))
+ ((CViewContainer*)pV)->dumpHierarchy ();
+ ENDFOR
+ _debugDumpLevel--;
+}
+
+#endif
+
+#if WINDOWS && USE_LIBPNG
+class PNGResourceStream
+{
+public:
+ PNGResourceStream ()
+ : streamPos (0)
+ , resData (0)
+ , resSize (0)
+ {
+ }
+
+ ~PNGResourceStream ()
+ {
+ }
+
+ bool open (long resourceID)
+ {
+ HRSRC rsrc = FindResource (GetInstance (), MAKEINTRESOURCE (resourceID), "PNG");
+ if (rsrc)
+ {
+ resSize = SizeofResource (GetInstance (), rsrc);
+ HGLOBAL resDataLoad = LoadResource (GetInstance (), rsrc);
+ if (resDataLoad)
+ {
+ resData = LockResource (resDataLoad);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void read (unsigned char* ptr, size_t size)
+ {
+ if (streamPos + size <= resSize)
+ {
+ memcpy (ptr, ((unsigned char*)resData+streamPos), size);
+ streamPos += (unsigned long)size;
+ }
+ }
+
+ static void readCallback (png_struct* pngPtr, unsigned char* ptr, size_t size)
+ {
+ void* obj = png_get_io_ptr (pngPtr);
+ if (obj)
+ ((PNGResourceStream*)obj)->read (ptr, size);
+ }
+protected:
+ HGLOBAL resData;
+ unsigned long streamPos;
+ unsigned long resSize;
+};
+#endif
+
+//-----------------------------------------------------------------------------
+// CBitmap Implementation
+//-----------------------------------------------------------------------------
+/*! @class CBitmap
+@section cbitmap_alphablend Alpha Blend and Transparency
+With Version 3.0 of VSTGUI it is possible to use alpha blended bitmaps. This comes free on Mac OS X and with Windows you need to include libpng.
+Per default PNG images will be rendered alpha blended. If you want to use a transparency color with PNG Bitmaps, you need to call setNoAlpha(true) on the bitmap and set the transparency color.
+@section cbitmap_macos Classic Apple Mac OS
+The Bitmaps are PICTs and stored inside the resource fork.
+@section cbitmap_macosx Apple Mac OS X
+The Bitmaps can be of type PNG, JPEG, PICT, BMP and are stored in the Resources folder of the plugin bundle.
+They must be named bmp00100.png (or bmp00100.jpg, etc). The number is the resource id.
+@section cbitmap_windows Microsoft Windows
+The Bitmaps are .bmp files and must be included in the plug (usually using a .rc file).
+It's also possible to use png as of version 3.0 if you define the macro USE_LIBPNG and include the libpng and zlib libraries/sources to your project.
+*/
+CBitmap::CBitmap (long resourceID)
+ : resourceID (resourceID), width (0), height (0), noAlpha (true)
+{
+ #if DEBUG
+ gNbCBitmap++;
+ #endif
+
+#if WINDOWS || MAC
+ pMask = 0;
+ pHandle = 0;
+ #if QUARTZ
+ cgImage = 0;
+ #endif
+
+ loadFromResource (resourceID);
+
+#elif MOTIF
+ bool found = false;
+ long i = 0;
+ long ncolors, cpp;
+
+ pHandle = 0;
+ pMask = 0;
+
+ // find the good pixmap resource
+ while (xpmResources[i].id != 0)
+ {
+ if (xpmResources[i].id == resourceID)
+ {
+ if (xpmResources[i].xpm != NULL)
+ {
+ found = true;
+ ppDataXpm = xpmResources[i].xpm;
+
+ xpmGetValues (ppDataXpm, &width, &height, &ncolors, &cpp);
+ break;
+ }
+ }
+ i++;
+ }
+
+ if (!found)
+ ppDataXpm = 0;
+
+#elif BEOS
+ bbitmap = 0;
+ transparencySet = false;
+ if (resourceFile == 0)
+ {
+ // this is a hack to find the plug-in on the disk to access resources.
+ const char* locate_me = "";
+ int32 cookie = 0;
+ image_info iinfo;
+ uint32 here = uint32 (locate_me);
+ while (get_next_image_info (0, &cookie, &iinfo) == B_OK)
+ {
+ uint32 begin = uint32 (iinfo.text);
+ if (begin <= here && here <= begin + iinfo.text_size)
+ break;
+ }
+ BFile resource (iinfo.name, B_READ_ONLY);
+ resourceFile = new BResources (&resource);
+ resourceFile->PreloadResourceType ();
+ }
+ size_t outSize;
+ const char* res = (const char*) resourceFile->LoadResource ('RAWT', resourceID, &outSize);
+ if (res)
+ {
+ BMemoryIO memoryIO (res, outSize);
+ bbitmap = BTranslationUtils::GetBitmap (&memoryIO);
+ if (bbitmap)
+ {
+ BRect rect = bbitmap->Bounds ();
+ width = (long) rect.Width () + 1;
+ height = (long) rect.Height () + 1;
+ }
+ }
+ if (!bbitmap)
+ fprintf (stderr, "********* Resource %d could NOT be loaded!\n", (int)resourceID);
+#endif
+
+ setTransparentColor (kTransparentCColor);
+
+ #if DEBUG
+ gBitmapAllocation += (long)height * (long)width;
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+CBitmap::CBitmap (CFrame &frame, CCoord width, CCoord height)
+ : width (width), height (height), noAlpha (true)
+{
+ #if DEBUG
+ gNbCBitmap++;
+ #endif
+
+#if WINDOWS
+ HDC hScreen = GetDC (0);
+ pHandle = CreateCompatibleBitmap (hScreen, width, height);
+ ReleaseDC (0, hScreen);
+ pMask = 0;
+
+#elif MAC
+ pHandle = 0;
+ pMask = 0;
+
+ Rect r;
+ r.left = r.top = 0;
+ r.right = (short)width;
+ r.bottom = (short)height;
+
+ #if QUARTZ
+ NewGWorld ((GWorldPtr*)&pHandle, 32, &r, 0, 0, 0);
+ cgImage = 0;
+ #else
+ NewGWorld ((GWorldPtr*)&pHandle, 0, &r, 0, 0, 0);
+
+ #endif
+
+#elif MOTIF
+ pXdisplay = frame.getDisplay ();
+ Drawable pWindow = frame.getWindow ();
+
+ pMask = 0;
+ pHandle = (void*)XCreatePixmap (pXdisplay, (Drawable)pWindow, width, height, frame.getDepth ());
+
+#elif BEOS
+ bbitmap = 0;
+ transparencySet = false;
+#endif
+
+ setTransparentColor (kTransparentCColor);
+}
+
+//-----------------------------------------------------------------------------
+CBitmap::CBitmap ()
+: resourceID (0)
+, width (0)
+, height (0)
+, noAlpha (true)
+{
+ #if WINDOWS
+ pHandle = 0;
+ pMask = 0;
+
+ #elif MAC
+ pHandle = 0;
+ pMask = 0;
+ #if QUARTZ
+ cgImage = 0;
+ #endif
+
+ #elif MOTIF
+ pMask = 0;
+ pHandle = 0;
+
+ #elif BEOS
+ bbitmap = 0;
+
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+CBitmap::~CBitmap ()
+{
+ dispose ();
+}
+
+//-----------------------------------------------------------------------------
+void CBitmap::dispose ()
+{
+ #if DEBUG
+ gNbCBitmap--;
+ gBitmapAllocation -= (long)height * (long)width;
+ #endif
+
+ #if WINDOWS
+ if (pHandle)
+ DeleteObject (pHandle);
+ if (pMask)
+ DeleteObject (pMask);
+
+ pHandle = 0;
+ pMask = 0;
+ noAlpha = false;
+
+ #elif MAC
+ #if QUARTZ
+ if (cgImage)
+ CGImageRelease ((CGImageRef)cgImage);
+ cgImage = 0;
+ #endif
+ if (pHandle)
+ DisposeGWorld ((GWorldPtr)pHandle);
+ if (pMask)
+ DisposeGWorld ((GWorldPtr)pMask);
+
+ pHandle = 0;
+ pMask = 0;
+
+ #elif MOTIF
+ if (pHandle)
+ XFreePixmap (pXdisplay, (Pixmap)pHandle);
+ if (pMask)
+ XFreePixmap (pXdisplay, (Pixmap)pMask);
+
+ pHandle = 0;
+ pMask = 0;
+
+ #elif BEOS
+ if (bbitmap)
+ delete bbitmap;
+
+ bbitmap = 0;
+
+ #endif
+
+ width = 0;
+ height = 0;
+
+}
+
+//-----------------------------------------------------------------------------
+void *CBitmap::getHandle () const
+ {
+ #if WINDOWS||MOTIF
+ return pHandle;
+
+ #elif MAC
+ return pHandle;
+
+ #elif BEOS
+ return bbitmap;
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+bool CBitmap::loadFromResource (long resourceID)
+{
+ bool result = false;
+
+ dispose ();
+
+ //---------------------------------------------------------------------------------------------
+ #if WINDOWS
+ //---------------------------------------------------------------------------------------------
+ #if USE_LIBPNG
+ PNGResourceStream resStream;
+ if (resStream.open (resourceID))
+ {
+ // setup libpng
+ png_structp png_ptr;
+ png_infop info_ptr;
+ png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+ if (png_ptr)
+ {
+ info_ptr = png_create_info_struct (png_ptr);
+ if (info_ptr)
+ {
+ if (setjmp (png_jmpbuf (png_ptr)) == 0)
+ {
+ int bit_depth, color_type;
+ png_set_read_fn (png_ptr, (void *)&resStream, PNGResourceStream::readCallback);
+ png_read_info (png_ptr, info_ptr);
+ png_get_IHDR (png_ptr, info_ptr, (png_uint_32*)&width, (png_uint_32*)&height, &bit_depth, &color_type, 0, 0, 0);
+ long bytesPerRow = width * (32 / 8);
+ while (bytesPerRow & 0x03)
+ bytesPerRow++;
+ // create BITMAP
+ BITMAPINFO* bmInfo = new BITMAPINFO;
+ BITMAPINFOHEADER* header = (BITMAPINFOHEADER*)bmInfo;
+ memset (header, 0, sizeof(BITMAPINFOHEADER));
+ header->biSize = sizeof(BITMAPINFOHEADER);
+ header->biWidth = width;
+ header->biHeight = height;
+ header->biPlanes = 1;
+ header->biBitCount = 32;
+ header->biCompression = BI_RGB;
+ header->biClrUsed = 0;
+ void* bits;
+ HDC dstDC = 0; //CreateCompatibleDC (0);
+ pHandle = CreateDIBSection (dstDC, bmInfo, DIB_RGB_COLORS, &bits, NULL, 0);
+ delete bmInfo;
+ if (pHandle)
+ {
+ if (color_type == PNG_COLOR_TYPE_PALETTE)
+ png_set_palette_to_rgb (png_ptr);
+ if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+ png_set_gray_to_rgb (png_ptr);
+ if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)
+ png_set_gray_1_2_4_to_8 (png_ptr);
+ if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS))
+ png_set_tRNS_to_alpha (png_ptr);
+ else
+ png_set_filler (png_ptr, 0xFF, PNG_FILLER_AFTER);
+ if (bit_depth == 16)
+ {
+ png_set_swap (png_ptr);
+ png_set_strip_16 (png_ptr);
+ }
+ if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA)
+ png_set_bgr (png_ptr);
+ png_read_update_info (png_ptr, info_ptr);
+
+ unsigned char** rows = new unsigned char*[1];
+ rows[0] = (unsigned char*)bits + (height-1) * bytesPerRow;
+ for (long i = 0; i < height; i++)
+ {
+ png_read_rows (png_ptr, rows, NULL, 1);
+ rows[0] -= bytesPerRow;
+ }
+ delete [] rows;
+ png_read_end (png_ptr, 0);
+ // premultiply alpha
+ unsigned long* pixelPtr = (unsigned long*)bits;
+ for (int y = 0; y > 8);
+ pixel[1] = ((pixel[1] * pixel[3]) >> 8);
+ pixel[2] = ((pixel[2] * pixel[3]) >> 8);
+ }
+ else
+ *pixelPtr = 0UL;
+ pixelPtr++;
+ }
+ }
+ if (dstDC)
+ DeleteDC (dstDC);
+#if 0
+ HDC srcDC = CreateCompatibleDC (0);
+ SelectObject (srcDC, pHandle);
+
+ HDC dstDC = CreateCompatibleDC (0);
+ this->pHandle = CreateCompatibleBitmap (dstDC, width, height);
+ SelectObject (dstDC, this->pHandle);
+
+ BLENDFUNCTION blendFunction;
+ blendFunction.BlendOp = AC_SRC_OVER;
+ blendFunction.BlendFlags = 0;
+ blendFunction.SourceConstantAlpha = 255;
+ #if USE_ALPHA_BLEND
+ if (noAlpha)
+ blendFunction.AlphaFormat = 0;//AC_SRC_NO_ALPHA;
+ else
+ blendFunction.AlphaFormat = AC_SRC_ALPHA;
+ #else
+ blendFunction.AlphaFormat = 0;//AC_SRC_NO_ALPHA;
+ #endif
+ #if DYNAMICALPHABLEND
+ (*pfnAlphaBlend) (dstDC,
+ 0, 0,
+ width, height,
+ srcDC,
+ 0, 0,
+ width, height,
+ blendFunction);
+ #else
+ #endif
+
+ DeleteDC (srcDC);
+ DeleteDC (dstDC);
+ DeleteObject (pHandle);
+#endif
+ }
+ }
+ }
+ png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
+ }
+ noAlpha = false;
+ return true;
+ }
+ #endif
+ pHandle = LoadBitmap (GetInstance (), MAKEINTRESOURCE (resourceID));
+ BITMAP bm;
+ if (pHandle && GetObject (pHandle, sizeof (bm), &bm))
+ {
+ width = bm.bmWidth;
+ height = bm.bmHeight;
+ noAlpha = true;
+ return true;
+ }
+
+ //---------------------------------------------------------------------------------------------
+ #elif MAC
+ //---------------------------------------------------------------------------------------------
+ pHandle = 0;
+ pMask = 0;
+ #if QUARTZ
+ cgImage = 0;
+ #endif
+ #if MACX
+ if (gBundleRef)
+ {
+ // find the bitmap in our Bundle. It must be in the form of bmp00123.png, where the resource id would be 123.
+ char filename [PATH_MAX];
+ sprintf (filename, "bmp%05d", (int)resourceID);
+ CFStringRef cfStr = CFStringCreateWithCString (NULL, filename, kCFStringEncodingASCII);
+ if (cfStr)
+ {
+ CFURLRef url = NULL;
+ int i = 0;
+ while (url == NULL)
+ {
+ static CFStringRef resTypes [] = { CFSTR("png"), CFSTR("bmp"), CFSTR("jpg"), CFSTR("pict"), NULL };
+ url = CFBundleCopyResourceURL ((CFBundleRef)gBundleRef, cfStr, resTypes[i], NULL);
+ if (resTypes[++i] == NULL)
+ break;
+ }
+ CFRelease (cfStr);
+ if (url)
+ {
+ result = loadFromPath (url);
+ CFRelease (url);
+ }
+ else
+ {
+ #if DEVELOPMENT
+ fprintf (stderr, "Bitmap Nr.:%d not found.\n", resourceID);
+ #endif
+ }
+ }
+ }
+ #endif
+
+ if (!result && pHandle == 0)
+ {
+ Handle picHandle = GetResource ('PICT', resourceID);
+ if (picHandle)
+ {
+ HLock (picHandle);
+
+ PictInfo info;
+ GetPictInfo ((PicHandle)picHandle, &info, recordComments, 0, systemMethod, 0);
+ width = info.sourceRect.right;
+ height = info.sourceRect.bottom;
+
+ OSErr err = NewGWorld ((GWorldPtr*)&pHandle, 32, &info.sourceRect, 0, 0, 0);
+ if (!err)
+ {
+ GWorldPtr oldPort;
+ GDHandle oldDevice;
+ GetGWorld (&oldPort, &oldDevice);
+ SetGWorld ((GWorldPtr)pHandle, 0);
+
+ DrawPicture ((PicHandle)picHandle, &info.sourceRect);
+
+ SetGWorld (oldPort, oldDevice);
+ result = true;
+ }
+
+ HUnlock (picHandle);
+ ReleaseResource (picHandle);
+ }
+ }
+
+ #else
+ // other platforms go here
+ #endif
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+bool CBitmap::loadFromPath (const void* platformPath)
+{
+ bool result = false;
+
+ dispose ();
+
+ #if QUARTZ
+ CFURLRef url = (CFURLRef)platformPath;
+
+ FSRef fsRef;
+ if (CFURLGetFSRef (url, &fsRef))
+ {
+ FSSpec fsSpec;
+ FSCatalogInfoBitmap infoBitmap = kFSCatInfoNone;
+ if (FSGetCatalogInfo (&fsRef, infoBitmap, NULL, NULL, &fsSpec, NULL) == noErr)
+ {
+ ComponentInstance* gi = 0;
+ CFStringRef ext = CFURLCopyPathExtension (url);
+ if (ext == 0)
+ return false;
+ if (CFStringCompare (ext, CFSTR("bmp"), 0) == kCFCompareEqualTo)
+ gi = &bmpGI;
+ else if (CFStringCompare (ext, CFSTR("png"), 0) == kCFCompareEqualTo)
+ {
+ gi = &pngGI;
+ noAlpha = false;
+ }
+ else if (CFStringCompare (ext, CFSTR("jpg"), 0) == kCFCompareEqualTo)
+ gi = &jpgGI;
+ else if (CFStringCompare (ext, CFSTR("pict"), 0) == kCFCompareEqualTo)
+ gi = &pictGI;
+ CFRelease (ext);
+
+ if (*gi == 0)
+ GetGraphicsImporterForFile (&fsSpec, gi);
+ else
+ if (GraphicsImportSetDataFile (*gi, &fsSpec) != noErr)
+ return false;
+ if (*gi)
+ {
+ #ifdef MAC_OS_X_VERSION_10_3
+ if (!noAlpha && GraphicsImportCreateCGImage)
+ {
+ if (GraphicsImportCreateCGImage (*gi, (CGImageRef*)&cgImage, 0) == noErr)
+ {
+ width = CGImageGetWidth ((CGImageRef)cgImage);
+ height = CGImageGetHeight ((CGImageRef)cgImage);
+ result = true;
+ }
+ }
+ else
+ #endif
+ {
+ Rect r;
+ GraphicsImportGetSourceRect (*gi, &r);
+ OSErr err = NewGWorld ((GWorldPtr*)&pHandle, 32, &r, 0, 0, 0);
+ if (!err)
+ {
+ width = r.right;
+ height = r.bottom;
+ GraphicsImportSetGWorld (*gi, (GWorldPtr)pHandle, 0);
+ GraphicsImportDraw (*gi);
+ result = true;
+ }
+ }
+ }
+ }
+ }
+ #elif WINDOWS
+ // todo
+
+ #endif
+
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+bool CBitmap::isLoaded () const
+{
+ #if MOTIF
+ if (ppDataXpm)
+ return true;
+
+ #elif QUARTZ
+ if (cgImage || getHandle ())
+ return true;
+ #else
+ if (getHandle ())
+ return true;
+ #endif
+
+ return false;
+}
+
+#if QUARTZ
+class CDataProvider
+{
+public:
+ CDataProvider (CBitmap* bitmap) : bmp (bitmap)
+ {
+ pos = 0;
+ PixMapHandle pixMap = GetGWorldPixMap ((GWorldPtr)bmp->getHandle ());
+ ptr = (unsigned char*)GetPixBaseAddr (pixMap);
+ color = bmp->getTransparentColor ();
+ }
+
+ static size_t getBytes (void *info, void *buffer, size_t count)
+ { // this could be optimized ;-)
+ CDataProvider* p = (CDataProvider*)info;
+ unsigned char* dst = (unsigned char*)buffer;
+ unsigned char* src = p->ptr + p->pos;
+ for (unsigned long i = 0; i < count / 4; i++)
+ {
+ if (src[1] == p->color.red && src[2] == p->color.green && src[3] == p->color.blue)
+ {
+ *dst++ = 0;
+ src++;
+ }
+ else
+ *dst++ = *src++;
+ *dst++ = *src++;
+ *dst++ = *src++;
+ *dst++ = *src++;
+ }
+ p->pos += count;
+ return count;
+ }
+
+ static void skipBytes (void *info, size_t count)
+ {
+ CDataProvider* p = (CDataProvider*)info;
+ p->pos += count;
+ }
+
+ static void rewind (void *info)
+ {
+ CDataProvider* p = (CDataProvider*)info;
+ p->pos = 0;
+ }
+
+ static void releaseProvider (void *info)
+ {
+ CDataProvider* p = (CDataProvider*)info;
+ delete p;
+ }
+
+ unsigned long pos;
+ CBitmap* bmp;
+ unsigned char* ptr;
+ CColor color;
+};
+
+//-----------------------------------------------------------------------------
+CGImageRef CBitmap::createCGImage (bool transparent)
+{
+ if (cgImage)
+ {
+ CGImageRetain ((CGImageRef)cgImage);
+ return (CGImageRef)cgImage;
+ }
+ if (!pHandle)
+ return NULL;
+
+ PixMapHandle pixMap = GetGWorldPixMap ((GWorldPtr)pHandle);
+
+ Rect bounds;
+ GetPixBounds (pixMap, &bounds);
+
+ size_t pixRowBytes = GetPixRowBytes (pixMap);
+ short pixDepth = GetPixDepth (pixMap);
+ size_t size = pixRowBytes * (bounds.bottom - bounds.top);
+
+ CGImageRef image = 0;
+ CGDataProviderRef provider = 0;
+ static CGDataProviderCallbacks callbacks = { CDataProvider::getBytes, CDataProvider::skipBytes, CDataProvider::rewind, CDataProvider::releaseProvider };
+ if (transparent)
+ provider = CGDataProviderCreate (new CDataProvider (this), &callbacks);
+ else
+ provider = CGDataProviderCreateWithData (NULL, GetPixBaseAddr (pixMap), size, NULL);
+ CGImageAlphaInfo alphaInfo = kCGImageAlphaFirst;
+ if (GetPixDepth (pixMap) != 32)
+ alphaInfo = kCGImageAlphaNone;
+ image = CGImageCreate (bounds.right - bounds.left, bounds.bottom - bounds.top, 8 , pixDepth, pixRowBytes, GetGenericRGBColorSpace (), alphaInfo, provider, NULL, false, kCGRenderingIntentDefault);
+ CGDataProviderRelease (provider);
+
+ cgImage = image;
+ CGImageRetain (image);
+ return image;
+}
+#endif
+
+//-----------------------------------------------------------------------------
+void CBitmap::draw (CDrawContext *pContext, CRect &rect, const CPoint &offset)
+{
+#if WINDOWS
+ #if USE_ALPHA_BLEND
+ if (!noAlpha)
+ {
+ drawAlphaBlend (pContext, rect, offset, 255);
+ return;
+ }
+ #endif
+
+ if (pHandle)
+ {
+ HGDIOBJ hOldObj;
+ HDC hdcMemory = CreateCompatibleDC ((HDC)pContext->pSystemContext);
+ hOldObj = SelectObject (hdcMemory, pHandle);
+ BitBlt ((HDC)pContext->pSystemContext,
+ rect.left + pContext->offset.h, rect.top + pContext->offset.v, rect.width (), rect.height (),
+ (HDC)hdcMemory, offset.h, offset.v, SRCCOPY);
+ SelectObject (hdcMemory, hOldObj);
+ DeleteDC (hdcMemory);
+ }
+
+#elif MAC
+
+ #if QUARTZ
+ drawAlphaBlend (pContext, rect, offset, 255);
+
+ #else
+ Rect source, dest;
+ dest.top = rect.top + pContext->offset.v;
+ dest.left = rect.left + pContext->offset.h;
+ dest.bottom = dest.top + rect.height ();
+ dest.right = dest.left + rect.width ();
+
+ source.top = offset.v;
+ source.left = offset.h;
+ source.bottom = source.top + rect.height ();
+ source.right = source.left + rect.width ();
+
+ pContext->getPort ();
+ BitMapPtr bitmapPtr = pContext->getBitmap ();
+
+ if (pHandle && bitmapPtr)
+ {
+ PixMapHandle pmHandle = GetGWorldPixMap ((GWorldPtr)pHandle);
+ if (pmHandle && LockPixels (pmHandle))
+ {
+ RGBColor oldForeColor, oldBackColor;
+ GetForeColor (&oldForeColor);
+ GetBackColor (&oldBackColor);
+ ::BackColor (whiteColor);
+ ::ForeColor (blackColor);
+
+ CopyBits ((BitMapPtr)*pmHandle, bitmapPtr, &source, &dest, srcCopy, 0L);
+ #if MACX
+ QDAddRectToDirtyRegion (pContext->getPort (), &dest);
+ #endif
+
+ RGBForeColor (&oldForeColor);
+ RGBBackColor (&oldBackColor);
+
+ UnlockPixels (pmHandle);
+ }
+ }
+
+ pContext->releaseBitmap ();
+ #endif
+
+#elif MOTIF
+ if (!pHandle)
+ {
+ // the first time try to decode the pixmap
+ pHandle = createPixmapFromXpm (pContext);
+ if (!pHandle)
+ return;
+
+ // keep a trace of the display for deletion
+ pXdisplay = pContext->pDisplay;
+ }
+
+#if DEVELOPMENT
+ if (!(offset.h >= 0 && offset.v >= 0 &&
+ rect.width () <= (getWidth () - offset.h) &&
+ rect.height () <= (getHeight () - offset.v)))
+ {
+ fprintf (stderr, "%s(%d) -> Assert failed: try to display outside from the bitmap\n", __FILE__, __LINE__);
+ return;
+ }
+#endif
+
+ XCopyArea (pContext->pDisplay, (Drawable)pHandle,
+ (Drawable)pContext->pWindow,
+ (GC)pContext->pSystemContext, offset.h, offset.v,
+ rect.width (), rect.height (), rect.left, rect.top);
+
+#elif BEOS
+ BRect brect (rect.left, rect.top, rect.right - 1, rect.bottom - 1);
+ BRect drect = brect;
+ brect.OffsetTo (offset.h, offset.v);
+ drect.OffsetBy (pContext->offset.h, pContext->offset.v);
+ pContext->pView->SetDrawingMode (B_OP_COPY);
+ pContext->pView->DrawBitmap (bbitmap, brect, drect);
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CBitmap::drawTransparent (CDrawContext *pContext, CRect &rect, const CPoint &offset)
+{
+#if WINDOWS
+ #if USE_ALPHA_BLEND
+ if (!noAlpha)
+ {
+ drawAlphaBlend (pContext, rect, offset, 255);
+ return;
+ }
+ #endif
+
+ BITMAP bm;
+ HDC hdcBitmap;
+ POINT ptSize;
+
+ hdcBitmap = CreateCompatibleDC ((HDC)pContext->pSystemContext);
+ SelectObject (hdcBitmap, pHandle); // Select the bitmap
+
+ GetObject (pHandle, sizeof (BITMAP), (LPSTR)&bm);
+ ptSize.x = bm.bmWidth; // Get width of bitmap
+ ptSize.y = bm.bmHeight; // Get height of bitmap
+ DPtoLP (hdcBitmap, &ptSize, 1); // Convert from device to logical points
+
+ DrawTransparent (pContext, rect, offset, hdcBitmap, ptSize, (HBITMAP)pMask, RGB(transparentCColor.red, transparentCColor.green, transparentCColor.blue));
+
+ DeleteDC (hdcBitmap);
+
+#elif MAC
+
+ #if QUARTZ
+ if (noAlpha)
+ {
+ CGImageRef image = createCGImage (true);
+ if (image)
+ {
+ drawAlphaBlend (pContext, rect, offset, 255);
+ CGImageRelease (image);
+ }
+ }
+ else
+ drawAlphaBlend (pContext, rect, offset, 255);
+
+ #else
+ Rect source, dest;
+ dest.top = rect.top + pContext->offset.v;
+ dest.left = rect.left + pContext->offset.h;
+ dest.bottom = dest.top + rect.height ();
+ dest.right = dest.left + rect.width ();
+
+ source.top = offset.v;
+ source.left = offset.h;
+ source.bottom = source.top + rect.height ();
+ source.right = source.left + rect.width ();
+
+ pContext->getPort ();
+ BitMapPtr bitmapPtr = pContext->getBitmap ();
+
+ if (pHandle && bitmapPtr)
+ {
+ PixMapHandle pmHandle = GetGWorldPixMap ((GWorldPtr)pHandle);
+ if (pmHandle && LockPixels (pmHandle))
+ {
+ RGBColor oldForeColor, oldBackColor;
+ GetForeColor (&oldForeColor);
+ GetBackColor (&oldBackColor);
+
+ RGBColor col;
+ CColor2RGBColor (transparentCColor, col);
+ RGBBackColor (&col);
+ ::ForeColor (blackColor);
+
+ if (pMask)
+ {
+ PixMapHandle pmHandleMask = GetGWorldPixMap ((GWorldPtr)pMask);
+ if (pmHandleMask && LockPixels (pmHandleMask))
+ {
+ CopyMask ((BitMapPtr)*pmHandle, (BitMapPtr)*pmHandleMask, bitmapPtr,
+ &source, &source, &dest);
+
+ UnlockPixels (pmHandleMask);
+ }
+ }
+ else
+ CopyBits ((BitMapPtr)*pmHandle, bitmapPtr, &source, &dest, transparent, 0L);
+
+ RGBForeColor (&oldForeColor);
+ RGBBackColor (&oldBackColor);
+
+ #if MACX
+ QDAddRectToDirtyRegion (pContext->getPort (), &dest);
+ #endif
+
+ UnlockPixels (pmHandle);
+ }
+ }
+
+ pContext->releaseBitmap ();
+ #endif
+
+#elif MOTIF
+ if (!pHandle)
+ {
+ // the first time try to decode the pixmap
+ pHandle = createPixmapFromXpm (pContext);
+ if (!pHandle)
+ return;
+
+ // keep a trace of the display for deletion
+ pXdisplay = pContext->pDisplay;
+ }
+
+ if (pMask == 0)
+ {
+ // get image from the pixmap
+ XImage* image = XGetImage (pContext->pDisplay, (Drawable)pHandle,
+ 0, 0, width, height, AllPlanes, ZPixmap);
+ assert (image);
+
+ // create the bitmap mask
+ pMask = (void*)XCreatePixmap (pContext->pDisplay, (Drawable)pContext->pWindow,
+ width, height, 1);
+ assert (pMask);
+
+ // create a associated GC
+ XGCValues values;
+ values.foreground = 1;
+ GC gc = XCreateGC (pContext->pDisplay, (Drawable)pMask, GCForeground, &values);
+
+ // clear the mask
+ XFillRectangle (pContext->pDisplay, (Drawable)pMask, gc, 0, 0, width, height);
+
+ // get the transparent color index
+ int color = pContext->getIndexColor (transparentCColor);
+
+ // inverse the color
+ values.foreground = 0;
+ XChangeGC (pContext->pDisplay, gc, GCForeground, &values);
+
+ // compute the mask
+ XPoint *points = new XPoint [height * width];
+ int x, y, nbPoints = 0;
+ switch (image->depth)
+ {
+ case 8:
+ for (y = 0; y < height; y++)
+ {
+ char* src = image->data + (y * image->bytes_per_line);
+
+ for (x = 0; x < width; x++)
+ {
+ if (src[x] == color)
+ {
+ points[nbPoints].x = x;
+ points[nbPoints].y = y;
+ nbPoints++;
+ }
+ }
+ }
+ break;
+
+ case 24: {
+ int bytesPerPixel = image->bits_per_pixel >> 3;
+ char *lp = image->data;
+ for (y = 0; y < height; y++)
+ {
+ char* cp = lp;
+ for (x = 0; x < width; x++)
+ {
+ if (*(int*)cp == color)
+ {
+ points[nbPoints].x = x;
+ points[nbPoints].y = y;
+ nbPoints++;
+ }
+ cp += bytesPerPixel;
+ }
+ lp += image->bytes_per_line;
+ }
+ } break;
+
+ default :
+ break;
+ }
+
+ XDrawPoints (pContext->pDisplay, (Drawable)pMask, gc,
+ points, nbPoints, CoordModeOrigin);
+
+ // free
+ XFreeGC (pContext->pDisplay, gc);
+ delete []points;
+
+ // delete
+ XDestroyImage (image);
+ }
+
+ // set the new clipmask
+ XGCValues value;
+ value.clip_mask = (Pixmap)pMask;
+ value.clip_x_origin = rect.left - offset.h;
+ value.clip_y_origin = rect.top - offset.v;
+ XChangeGC (pContext->pDisplay, (GC)pContext->pSystemContext,
+ GCClipMask|GCClipXOrigin|GCClipYOrigin, &value);
+
+ XCopyArea (pContext->pDisplay, (Drawable)pHandle, (Drawable)pContext->pWindow,
+ (GC)pContext->pSystemContext, offset.h, offset.v,
+ rect.width (), rect.height (), rect.left, rect.top);
+
+ // unset the clipmask
+ XSetClipMask (pContext->pDisplay, (GC)pContext->pSystemContext, None);
+
+
+#elif BEOS
+ if (!transparencySet)
+ {
+ uint32 c32 = transparentCColor.red | (transparentCColor.green << 8) | (transparentCColor.blue << 16);
+ uint32 *pix = (uint32*) bbitmap->Bits ();
+ uint32 ctr = B_TRANSPARENT_32_BIT.red | (B_TRANSPARENT_32_BIT.green << 8) | (B_TRANSPARENT_32_BIT.blue << 16) | (B_TRANSPARENT_32_BIT.alpha << 24);
+
+ for (int32 z = 0, count = bbitmap->BitsLength () / 4; z < count; z++)
+ {
+ if ((pix[z] & 0xffffff) == c32)
+ pix[z] = ctr;
+ }
+ transparencySet = true;
+ }
+ BRect brect (rect.left, rect.top, rect.right - 1, rect.bottom - 1);
+ BRect drect = brect;
+ brect.OffsetTo (offset.h, offset.v);
+ drect.OffsetBy (pContext->offset.h, pContext->offset.v);
+ pContext->pView->SetDrawingMode (B_OP_OVER);
+ pContext->pView->DrawBitmap (bbitmap, brect, drect);
+
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CBitmap::drawAlphaBlend (CDrawContext *pContext, CRect &rect, const CPoint &offset, unsigned char alpha)
+{
+#if WINDOWS
+ if (pHandle)
+ {
+ HGDIOBJ hOldObj;
+ HDC hdcMemory = CreateCompatibleDC ((HDC)pContext->pSystemContext);
+ hOldObj = SelectObject (hdcMemory, pHandle);
+
+ BLENDFUNCTION blendFunction;
+ blendFunction.BlendOp = AC_SRC_OVER;
+ blendFunction.BlendFlags = 0;
+ blendFunction.SourceConstantAlpha = alpha;
+ #if USE_ALPHA_BLEND
+ if (noAlpha)
+ blendFunction.AlphaFormat = 0;//AC_SRC_NO_ALPHA;
+ else
+ blendFunction.AlphaFormat = AC_SRC_ALPHA;
+ #else
+ blendFunction.AlphaFormat = 0;//AC_SRC_NO_ALPHA;
+ #endif
+ #if DYNAMICALPHABLEND
+ // check for Win98 as it has a bug in AlphaBlend
+ if (gSystemVersion.dwMajorVersion == 4 && gSystemVersion.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS && gSystemVersion.dwMinorVersion == 10)
+ {
+ HGDIOBJ hOldObj1;
+ HDC hdcMemory1 = CreateCompatibleDC ((HDC)pContext->pSystemContext);
+ HBITMAP hbmp = CreateCompatibleBitmap(hdcMemory, rect.width(), rect.height());
+ //this does NOT work:
+ //HBITMAP hbmp = CreateCompatibleBitmap(hdcMemory1, rect.width(), rect.height());
+ hOldObj1 = SelectObject (hdcMemory1, hbmp);
+
+ //copy contents of original picture in hdcMemory
+ //from the offset to hdcMemory1 (0,0)
+ long res = BitBlt((HDC)hdcMemory1,
+ 0, 0,
+ rect.width(), rect.height(),
+ (HDC)hdcMemory, offset.h, offset.v, SRCCOPY);
+
+ //Copy the resulting image with alpha blending:
+ (*pfnAlphaBlend) ((HDC)pContext->pSystemContext,
+ rect.left + pContext->offset.h, rect.top + pContext->offset.v,
+ rect.width (), rect.height (),
+ hdcMemory1,
+ 0, 0,//the offset is done in BitBlt
+ rect.width (), rect.height (),
+ blendFunction);
+ SelectObject (hdcMemory1, hOldObj1);
+ DeleteDC(hdcMemory1);
+ DeleteObject(hbmp);
+ }
+ else
+ {
+ (*pfnAlphaBlend) ((HDC)pContext->pSystemContext,
+ rect.left + pContext->offset.h, rect.top + pContext->offset.v,
+ rect.width (), rect.height (),
+ (HDC)hdcMemory,
+ offset.h, offset.v,
+ rect.width (), rect.height (),
+ blendFunction);
+ }
+ #else
+ AlphaBlend ((HDC)pContext->pSystemContext,
+ rect.left + pContext->offset.h, rect.top + pContext->offset.v,
+ rect.width (), rect.height (),
+ (HDC)hdcMemory,
+ offset.h, offset.v,
+ rect.width (), rect.height (),
+ blendFunction);
+ #endif
+ SelectObject (hdcMemory, hOldObj);
+ DeleteDC (hdcMemory);
+ }
+
+#elif MAC
+
+ #if QUARTZ
+ if (_CGImageCreateWithImageInRect) // this is much faster on Mac OS X 10.4 and above
+ {
+ if (pHandle || cgImage)
+ {
+ CGContextRef context = pContext->beginCGContext ();
+ if (context)
+ {
+ if (alpha != 255)
+ CGContextSetAlpha (context, (float)alpha / 255.f);
+
+ CGImageRef image = createCGImage ();
+
+ if (image)
+ {
+ CRect ccr;
+ pContext->getClipRect (ccr);
+ CGRect clipRect = CGRectMake (ccr.left - rect.left + offset.h, ccr.top - rect.top + offset.v, ccr.width (), ccr.height ());
+ CGRect subRect = CGRectMake (offset.h, offset.v, rect.getWidth (), rect.getHeight ());
+ subRect = CGRectIntersection (clipRect, subRect);
+ if (subRect.size.width && subRect.size.height)
+ {
+ CGImageRef subImage = _CGImageCreateWithImageInRect (image, subRect);
+ if (subImage)
+ {
+ CGRect dest;
+ dest.origin.x = subRect.origin.x + pContext->offset.h - offset.h + rect.left;
+ dest.origin.y = subRect.origin.y + pContext->offset.v - offset.v + rect.top;
+ dest.size.width = subRect.size.width;
+ dest.size.height = subRect.size.height;
+ CGContextScaleCTM (context, 1, -1);
+ HIViewDrawCGImage (context, &dest, subImage);
+ CGImageRelease (subImage);
+ }
+ }
+ CGImageRelease (image);
+ }
+ pContext->releaseCGContext (context);
+ }
+ }
+ return;
+ }
+ if (pHandle || cgImage)
+ {
+ CGContextRef context = pContext->beginCGContext ();
+ if (context)
+ {
+ if (alpha != 255)
+ CGContextSetAlpha (context, (float)alpha / 255.f);
+
+ CGImageRef image = createCGImage ();
+
+ if (image)
+ {
+ CGRect dest;
+ dest.origin.x = rect.left - offset.h + pContext->offset.h;
+ dest.origin.y = (rect.top + pContext->offset.v) * -1 - (getHeight () - offset.v);
+ dest.size.width = getWidth ();
+ dest.size.height = getHeight ();
+
+ CRect ccr;
+ pContext->getClipRect (ccr);
+ CGRect cgClipRect = CGRectMake (ccr.left + pContext->offset.h, (ccr.top + pContext->offset.v) * -1 - ccr.height (), ccr.width (), ccr.height ());
+ CGContextClipToRect (context, cgClipRect);
+
+ CGRect clipRect;
+ clipRect.origin.x = rect.left + pContext->offset.h;
+ clipRect.origin.y = (rect.top + pContext->offset.v) * -1 - rect.height ();
+ clipRect.size.width = rect.width ();
+ clipRect.size.height = rect.height ();
+
+ CGContextClipToRect (context, clipRect);
+
+ CGContextDrawImage (context, dest, image);
+ CGImageRelease (image);
+ }
+ pContext->releaseCGContext (context);
+ }
+ }
+
+ #else
+ Rect source, dest;
+ dest.top = rect.top + pContext->offset.v;
+ dest.left = rect.left + pContext->offset.h;
+ dest.bottom = dest.top + rect.height ();
+ dest.right = dest.left + rect.width ();
+
+ source.top = offset.v;
+ source.left = offset.h;
+ source.bottom = source.top + rect.height ();
+ source.right = source.left + rect.width ();
+
+ pContext->getPort ();
+ BitMapPtr bitmapPtr = pContext->getBitmap ();
+ if (bitmapPtr)
+ {
+ RGBColor col;
+ CColor color = {alpha, alpha, alpha, 0};
+ CColor2RGBColor (color, col);
+ OpColor (&col);
+
+ if (pHandle)
+ {
+ PixMapHandle pmHandle = GetGWorldPixMap ((GWorldPtr)pHandle);
+ if (pmHandle && LockPixels (pmHandle))
+ {
+ RGBColor oldForeColor, oldBackColor;
+ GetForeColor (&oldForeColor);
+ GetBackColor (&oldBackColor);
+ ::BackColor (whiteColor);
+ ::ForeColor (blackColor);
+
+ CopyBits ((BitMapPtr)*pmHandle, bitmapPtr, &source, &dest, blend, 0L);
+ #if MACX
+ QDAddRectToDirtyRegion (pContext->getPort (), &dest);
+ #endif
+
+ RGBForeColor (&oldForeColor);
+ RGBBackColor (&oldBackColor);
+
+ UnlockPixels (pmHandle);
+ }
+ }
+ }
+
+ pContext->releaseBitmap ();
+ #endif
+#endif
+}
+//-----------------------------------------------------------------------------
+void CBitmap::setTransparentColor (const CColor color)
+{
+ transparentCColor = color;
+#if QUARTZ
+ if (noAlpha)
+ {
+ if (cgImage)
+ CGImageRelease ((CGImageRef)cgImage);
+ cgImage = 0;
+ }
+#endif
+}
+
+//-----------------------------------------------------------------------------
+void CBitmap::setTransparencyMask (CDrawContext* pContext, const CPoint& offset)
+{
+#if WINDOWS
+ if (pMask)
+ DeleteObject (pMask);
+
+ CRect r (0, 0, width, height);
+ r.offset (offset.h, offset.v);
+ pMask = CreateMaskBitmap (pContext, r, transparentCColor);
+
+#elif MAC
+ #if QUARTZ
+ #else
+ if (pMask)
+ DisposeGWorld ((GWorldPtr)pMask);
+ pMask = 0;
+
+ Rect r;
+ r.left = r.top = 0;
+ r.right = width;
+ r.bottom = height;
+ OSErr err = NewGWorld ((GWorldPtr*)&pMask, 1, &r, 0, 0, 0); // create monochrome GWorld
+ if (!err)
+ {
+ GWorldPtr oldPort;
+ GDHandle oldDevice;
+ GetGWorld (&oldPort, &oldDevice);
+ SetGWorld ((GWorldPtr)pMask, 0);
+
+ PixMapHandle pmHandle = GetGWorldPixMap ((GWorldPtr)pMask);
+ BitMapPtr sourcePtr = pContext->getBitmap ();
+
+ if (sourcePtr && pmHandle && LockPixels (pmHandle))
+ {
+ RGBColor oldForeColor, oldBackColor;
+ GetForeColor (&oldForeColor);
+ GetBackColor (&oldBackColor);
+
+ RGBColor col;
+ CColor2RGBColor (transparentCColor, col);
+ RGBBackColor (&col);
+
+ ::ForeColor (blackColor);
+
+ Rect src = r;
+ src.left += offset.h;
+ src.right += offset.h;
+ src.top += offset.v;
+ src.bottom += offset.v;
+
+ CopyBits (sourcePtr, (BitMapPtr)*pmHandle, &src, &r, srcCopy, 0L);
+
+ RGBForeColor (&oldForeColor);
+ RGBBackColor (&oldBackColor);
+
+ UnlockPixels (pmHandle);
+ }
+
+ pContext->releaseBitmap ();
+
+ SetGWorld (oldPort, oldDevice);
+ }
+ #endif
+
+#else
+ // todo: implement me!
+#endif
+}
+
+//-----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+#if MOTIF
+//-----------------------------------------------------------------------------
+void* CBitmap::createPixmapFromXpm (CDrawContext *pContext)
+{
+ if (!ppDataXpm)
+ return NULL;
+
+ Pixmap pixmap = 0;
+ XpmAttributes attributes;
+
+ attributes.valuemask = XpmCloseness|XpmColormap|XpmVisual|XpmDepth;
+ attributes.closeness = 100000;
+ attributes.visual = pContext->getVisual ();
+ attributes.depth = pContext->getDepth ();
+
+ // use the pContext colormap instead of the DefaultColormapOfScreen
+ attributes.colormap = pContext->getColormap ();
+
+ int status;
+ if (attributes.depth == 8 || attributes.depth == 24)
+ {
+#if USE_XPM
+ status = XpmCreatePixmapFromData (pContext->pDisplay,
+ (Drawable)pContext->pWindow, ppDataXpm, &pixmap, NULL, &attributes);
+ if (status != XpmSuccess)
+ {
+ fprintf (stderr, "createPixmapFromXpm-> XpmError: %s\n", XpmGetErrorString(status));
+ return NULL;
+ }
+#else
+ status = createPixmapFromData (pContext->pDisplay,
+ (Drawable)pContext->pWindow, ppDataXpm, &pixmap, &attributes);
+ if (!status)
+ {
+ fprintf (stderr, "createPixmapFromXpm-> Error\n");
+ return NULL;
+ }
+#endif
+ }
+ else
+ {
+ fprintf (stderr, "createPixmapFromXpm-> Depth %d not supported\n", attributes.depth);
+ return NULL;
+ }
+
+#if DEVELOPMENT
+ fprintf (stderr, "createPixmapFromXpm-> There are %d requested colors\n", attributes.ncolors);
+#endif
+
+ return (void*)pixmap;
+}
+#endif
+
+//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+#if BEOS
+//----------------------------------------------------------------------------
+
+BResources* CBitmap::resourceFile = 0;
+
+//----------------------------------------------------------------------------
+
+void CBitmap::closeResource ()
+{
+ if (resourceFile)
+ {
+ delete resourceFile;
+ resourceFile = 0;
+ }
+}
+
+//----------------------------------------------------------------------------
+#endif
+
+
+//-----------------------------------------------------------------------------
+// CDragContainer Implementation
+//-----------------------------------------------------------------------------
+CDragContainer::CDragContainer (void* platformDrag)
+: platformDrag (platformDrag)
+, nbItems (0)
+, iterator (0)
+, lastItem (0)
+{
+ #if MAC
+ DragRef dragRef = (DragRef)platformDrag;
+ UInt16 numItems;
+ CountDragItems (dragRef, &numItems);
+ nbItems = numItems;
+
+ #elif WINDOWS
+
+ IDataObject* dataObject = (IDataObject*)platformDrag;
+ STGMEDIUM medium;
+ FORMATETC formatTEXTDrop = {CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
+ FORMATETC formatHDrop = {CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
+
+ long type = 0; // 0 = file, 1 = text
+
+ HRESULT hr = dataObject->GetData (&formatTEXTDrop, &medium);
+ if (hr != S_OK)
+ hr = dataObject->GetData (&formatHDrop, &medium);
+ else
+ type = 1;
+
+ if (type == 0)
+ nbItems = (long)DragQueryFile ((HDROP)medium.hGlobal, 0xFFFFFFFFL, 0, 0);
+ else
+ nbItems = 1;
+
+ #else
+ #endif
+}
+
+//-----------------------------------------------------------------------------
+CDragContainer::~CDragContainer ()
+{
+ if (lastItem)
+ {
+ free (lastItem);
+ lastItem = 0;
+ }
+}
+
+//-----------------------------------------------------------------------------
+long CDragContainer::getType (long idx) const
+{
+ #if MACX
+ DragItemRef itemRef;
+ if (GetDragItemReferenceNumber ((DragRef)platformDrag, idx+1, &itemRef) == noErr)
+ {
+ FlavorType type;
+ if (GetFlavorType ((DragRef)platformDrag, itemRef, 1, &type) == noErr)
+ {
+ if (type == flavorTypeHFS || type == typeFileURL)
+ return kFile;
+ else if (type == 'TEXT' || type == 'XML ')
+ return kText;
+ }
+ }
+ #elif WINDOWS
+ IDataObject* dataObject = (IDataObject*)platformDrag;
+ STGMEDIUM medium;
+ FORMATETC formatTEXTDrop = {CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
+ FORMATETC formatHDrop = {CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
+
+ long type = 0; // 0 = file, 1 = text
+
+ HRESULT hr = dataObject->GetData (&formatTEXTDrop, &medium);
+ if (hr != S_OK)
+ hr = dataObject->GetData (&formatHDrop, &medium);
+ else
+ type = 1;
+ if (type == 0)
+ return kFile;
+ else
+ return kText;
+
+ #else
+ // not implemented
+ #endif
+ return kUnknown;
+}
+
+//-----------------------------------------------------------------------------
+void* CDragContainer::first (long& size, long& type)
+{
+ iterator = 0;
+ return next (size, type);
+}
+
+//-----------------------------------------------------------------------------
+void* CDragContainer::next (long& size, long& type)
+{
+ if (lastItem)
+ {
+ free (lastItem);
+ lastItem = 0;
+ }
+ size = 0;
+ type = kUnknown;
+ #if MACX
+ long flavorSize;
+ DragItemRef itemRef;
+ if (GetDragItemReferenceNumber ((DragRef)platformDrag, ++iterator, &itemRef) == noErr)
+ {
+ FlavorType flavorType;
+ if (GetFlavorType ((DragRef)platformDrag, itemRef, 1, &flavorType) == noErr)
+ {
+ if (flavorType == flavorTypeHFS)
+ {
+ HFSFlavor hfs;
+ if (GetFlavorDataSize ((DragRef)platformDrag, itemRef, flavorTypeHFS, &flavorSize) == noErr)
+ {
+ GetFlavorData ((DragRef)platformDrag, itemRef, flavorTypeHFS, &hfs, &flavorSize, 0L);
+
+ FSRef fsRef;
+ if (FSpMakeFSRef (&hfs.fileSpec, &fsRef) == noErr)
+ {
+ lastItem = malloc (PATH_MAX);
+ if (FSRefMakePath (&fsRef, (unsigned char*)lastItem, PATH_MAX) == noErr)
+ {
+ size = strlen ((const char*)lastItem);
+ type = kFile;
+ return lastItem;
+ }
+ }
+ }
+ }
+ else if (flavorType == typeFileURL)
+ {
+ if (GetFlavorDataSize ((DragRef)platformDrag, itemRef, typeFileURL, &flavorSize) == noErr)
+ {
+ void* bytes = malloc (flavorSize);
+ if (GetFlavorData ((DragRef)platformDrag, itemRef, typeFileURL, bytes, &flavorSize, 0L) == noErr)
+ {
+ CFURLRef url = CFURLCreateWithBytes (NULL, (const unsigned char*)bytes, flavorSize, kCFStringEncodingUTF8, NULL);
+ lastItem = malloc (PATH_MAX);
+ CFURLGetFileSystemRepresentation (url, false, (unsigned char*)lastItem, PATH_MAX);
+ CFRelease (url);
+ type = kFile;
+ }
+ free (bytes);
+ return lastItem;
+ }
+ }
+ else
+ {
+ if (GetFlavorDataSize ((DragRef)platformDrag, itemRef, flavorType, &flavorSize) == noErr)
+ {
+ lastItem = malloc (flavorSize + 1);
+ ((char*)lastItem)[0] = 0;
+ if (GetFlavorData ((DragRef)platformDrag, itemRef, flavorType, lastItem, &flavorSize, 0) == noErr)
+ {
+ ((char*)lastItem)[flavorSize] = 0;
+ size = flavorSize;
+ if (flavorType == 'TEXT' || flavorType == 'XML ')
+ type = kText;
+ return lastItem;
+ }
+ }
+ else
+ {
+ if (GetFlavorDataSize ((DragRef)platformDrag, itemRef, 'TEXT', &flavorSize) == noErr)
+ {
+ lastItem = malloc (flavorSize + 1);
+ ((char*)lastItem)[0] = 0;
+ if (GetFlavorData ((DragRef)platformDrag, itemRef, 'TEXT', lastItem, &flavorSize, 0) == noErr)
+ {
+ ((char*)lastItem)[flavorSize] = 0;
+ size = flavorSize;
+ type = kText;
+ return lastItem;
+ }
+ }
+ }
+
+ }
+ }
+ }
+ #elif WINDOWS
+ IDataObject* dataObject = (IDataObject*)platformDrag;
+ void* hDrop = 0;
+ STGMEDIUM medium;
+ FORMATETC formatTEXTDrop = {CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
+ FORMATETC formatHDrop = {CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
+
+ long wintype = 0; // 0 = file, 1 = text
+
+ HRESULT hr = dataObject->GetData (&formatTEXTDrop, &medium);
+ if (hr != S_OK)
+ hr = dataObject->GetData (&formatHDrop, &medium);
+ else
+ wintype = 1;
+ if (hr == S_OK)
+ hDrop = medium.hGlobal;
+
+ if (hDrop)
+ {
+ if (wintype == 0)
+ {
+ char fileDropped[1024];
+
+ long nbRealItems = 0;
+ if (DragQueryFile ((HDROP)hDrop, iterator++, fileDropped, sizeof (fileDropped)))
+ {
+ // resolve link
+ checkResolveLink (fileDropped, fileDropped);
+ lastItem = malloc (strlen (fileDropped)+1);
+ strcpy ((char*)lastItem, fileDropped);
+ size = (long)strlen ((const char*)lastItem);
+ type = kFile;
+ return lastItem;
+ }
+ }
+ else if (iterator++ == 0)
+ //---TEXT----------------------------
+ {
+ void* data = GlobalLock (medium.hGlobal);
+ long dataSize = (long)GlobalSize (medium.hGlobal);
+ if (data && dataSize)
+ {
+ lastItem = malloc (dataSize+1);
+ memcpy (lastItem, data, dataSize);
+ size = dataSize;
+ type = kText;
+ }
+
+ GlobalUnlock (medium.hGlobal);
+ if (medium.pUnkForRelease)
+ medium.pUnkForRelease->Release ();
+ else
+ GlobalFree (medium.hGlobal);
+ return lastItem;
+ }
+ }
+ #else
+ // not implemented
+ #endif
+ return NULL;
+}
+
+END_NAMESPACE_VSTGUI
+
+
+#if WINDOWS
+
+#if USE_MOUSE_HOOK
+HHOOK MouseHook = 0L;
+
+LRESULT CALLBACK MouseProc (int nCode, WPARAM wParam, LPARAM lParam)
+{
+ if (nCode < 0)
+ return CallNextHookEx (MouseHook, nCode, wParam, lParam);
+
+ if (wParam == 522)
+ {
+ MOUSEHOOKSTRUCT* struct2 = (MOUSEHOOKSTRUCT*) lParam;
+ if (struct2->hwnd == ???)
+ {
+ return -1;
+ }
+ }
+ return CallNextHookEx (MouseHook, nCode, wParam, lParam);
+}
+#endif
+
+//-----------------------------------------------------------------------------
+bool InitWindowClass ()
+{
+ gUseCount++;
+ if (gUseCount == 1)
+ {
+ sprintf (gClassName, "Plugin%p", GetInstance ());
+
+ WNDCLASS windowClass;
+ windowClass.style = CS_GLOBALCLASS;//|CS_OWNDC; // add Private-DC constant
+
+ windowClass.lpfnWndProc = WindowProc;
+ windowClass.cbClsExtra = 0;
+ windowClass.cbWndExtra = 0;
+ windowClass.hInstance = GetInstance ();
+ windowClass.hIcon = 0;
+
+ windowClass.hCursor = LoadCursor (NULL, IDC_ARROW);
+ windowClass.hbrBackground = GetSysColorBrush (COLOR_BTNFACE);
+ windowClass.lpszMenuName = 0;
+ windowClass.lpszClassName = gClassName;
+ RegisterClass (&windowClass);
+
+ #if USE_MOUSE_HOOK
+ MouseHook = SetWindowsHookEx (WH_MOUSE, MouseProc, GetInstance (), 0);
+ #endif
+
+ bSwapped_mouse_buttons = GetSystemMetrics (SM_SWAPBUTTON) > 0;
+ }
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+void ExitWindowClass ()
+{
+ gUseCount--;
+ if (gUseCount == 0)
+ {
+ UnregisterClass (gClassName, GetInstance ());
+
+ #if USE_MOUSE_HOOK
+ if (MouseHook)
+ {
+ UnhookWindowsHookEx (MouseHook);
+ MouseHook = 0L;
+ }
+ #endif
+ }
+}
+
+//-----------------------------------------------------------------------------
+LONG_PTR WINAPI WindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ USING_NAMESPACE_VSTGUI
+ CFrame* pFrame = (CFrame*)GetWindowLongPtr (hwnd, GWLP_USERDATA);
+
+ switch (message)
+ {
+ case WM_MOUSEWHEEL:
+ {
+ if (pFrame)
+ {
+ VSTGUI_CDrawContext context (pFrame, 0, hwnd);
+ VSTGUI_CPoint where (LOWORD (lParam), HIWORD (lParam));
+ short zDelta = (short) HIWORD(wParam);
+ pFrame->onWheel (&context, where, (float)zDelta / WHEEL_DELTA);
+ }
+ break;
+ }
+ case WM_CTLCOLOREDIT:
+ {
+ if (pFrame)
+ {
+ VSTGUI_CTextEdit *textEdit = (VSTGUI_CTextEdit*)pFrame->getFocusView ();
+ if (textEdit)
+ {
+ VSTGUI_CColor fontColor = textEdit->getFontColor ();
+ SetTextColor ((HDC) wParam, RGB (fontColor.red, fontColor.green, fontColor.blue));
+
+ VSTGUI_CColor backColor = textEdit->getBackColor ();
+ SetBkColor ((HDC) wParam, RGB (backColor.red, backColor.green, backColor.blue));
+
+ if (textEdit->platformFontColor)
+ DeleteObject (textEdit->platformFontColor);
+ textEdit->platformFontColor = CreateSolidBrush (RGB (backColor.red, backColor.green, backColor.blue));
+ return (LRESULT)(textEdit->platformFontColor);
+ }
+ }
+ }
+ break;
+
+ case WM_PAINT:
+ {
+ RECT r;
+ if (pFrame && GetUpdateRect (hwnd, &r, false))
+ {
+ PAINTSTRUCT ps;
+ HDC hdc = BeginPaint (hwnd, &ps);
+
+ VSTGUI_CDrawContext* context = pFrame->getBackBuffer ();
+ if (!context)
+ context = new VSTGUI_CDrawContext (pFrame, hdc, hwnd);
+
+ CRect updateRect (ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom);
+ pFrame->drawRect (context, updateRect);
+
+ if (pFrame->getBackBuffer ())
+ {
+ VSTGUI_CDrawContext localContext (pFrame, hdc, hwnd);
+ pFrame->getBackBuffer ()->copyFrom (&localContext, updateRect, CPoint (ps.rcPaint.left, ps.rcPaint.top));
+ }
+ else
+ context->forget ();
+
+ EndPaint (hwnd, &ps);
+ return 0;
+ }
+ }
+ break;
+
+ case WM_MEASUREITEM :
+ {
+ MEASUREITEMSTRUCT* ms = (MEASUREITEMSTRUCT*)lParam;
+ if (pFrame && ms && ms->CtlType == ODT_MENU && ms->itemData)
+ {
+ VSTGUI_COptionMenu* optMenu = (VSTGUI_COptionMenu*)pFrame->getFocusView ();
+ if (optMenu && optMenu->getScheme ())
+ {
+ VSTGUI_CPoint size;
+
+ VSTGUI_CDrawContext context (pFrame, 0, hwnd);
+ optMenu->getScheme ()->getItemSize ((const char*)ms->itemData, &context, size);
+
+ ms->itemWidth = size.h;
+ ms->itemHeight = size.v;
+ return TRUE;
+ }
+ }
+ }
+ break;
+
+ case WM_DRAWITEM :
+ {
+ DRAWITEMSTRUCT* ds = (DRAWITEMSTRUCT*)lParam;
+ if (pFrame && ds && ds->CtlType == ODT_MENU && ds->itemData)
+ {
+ VSTGUI_COptionMenu* optMenu = (VSTGUI_COptionMenu*)pFrame->getFocusView ();
+ if (optMenu && optMenu->getScheme ())
+ {
+ long state = 0;
+ if (ds->itemState & ODS_CHECKED)
+ state |= VSTGUI_COptionMenuScheme::kChecked;
+ if (ds->itemState & ODS_DISABLED) // ODS_GRAYED?
+ state |= VSTGUI_COptionMenuScheme::kDisabled;
+ if (ds->itemState & ODS_SELECTED)
+ state |= VSTGUI_COptionMenuScheme::kSelected;
+
+ CRect r (ds->rcItem.left, ds->rcItem.top, ds->rcItem.right, ds->rcItem.bottom);
+ r.bottom++;
+
+ VSTGUI_CDrawContext* pContext = new VSTGUI_CDrawContext (pFrame, ds->hDC, 0);
+ optMenu->getScheme ()->drawItem ((const char*)ds->itemData, ds->itemID, state, pContext, r);
+ delete pContext;
+ return TRUE;
+ }
+ }
+ }
+ break;
+
+ case WM_RBUTTONDOWN:
+ case WM_MBUTTONDOWN:
+ case WM_LBUTTONDOWN:
+ if (pFrame)
+ {
+ #if 1
+ VSTGUI_CDrawContext context (pFrame, 0, hwnd);
+ VSTGUI_CPoint where (LOWORD (lParam), HIWORD (lParam));
+ pFrame->mouse (&context, where);
+ #else
+ VSTGUI_CPoint where (LOWORD (lParam), HIWORD (lParam));
+ pFrame->mouse ((VSTGUI_CDrawContext*)0, where);
+ #endif
+
+ return 0;
+ }
+ break;
+
+ case WM_DESTROY:
+ if (pFrame)
+ {
+ pFrame->setOpenFlag (false);
+ pFrame->setParentSystemWindow (0);
+ }
+ break;
+ }
+ return DefWindowProc (hwnd, message, wParam, lParam);
+}
+
+//-----------------------------------------------------------------------------
+HANDLE CreateMaskBitmap (CDrawContext* pContext, CRect& rect, CColor transparentColor)
+{
+ HBITMAP pMask = CreateBitmap (rect.width (), rect.height (), 1, 1, 0);
+
+ HDC hSrcDC = (HDC)pContext->getSystemContext ();
+ HDC hDstDC = CreateCompatibleDC (hSrcDC);
+ SelectObject (hDstDC, pMask);
+
+ COLORREF oldBkColor = SetBkColor (hSrcDC, RGB (transparentColor.red, transparentColor.green, transparentColor.blue));
+
+ BitBlt (hDstDC, 0, 0, rect.width (), rect.height (), hSrcDC, rect.left, rect.top, SRCCOPY);
+
+ SetBkColor (hSrcDC, oldBkColor);
+ DeleteDC (hDstDC);
+
+ return pMask;
+}
+
+//-----------------------------------------------------------------------------
+void DrawTransparent (CDrawContext* pContext, CRect& rect, const CPoint& offset,
+ HDC hdcBitmap, POINT ptSize, HBITMAP pMask, COLORREF color)
+{
+ if (pMask == NULL)
+ {
+ if (pfnTransparentBlt)
+ {
+ HDC hdcSystemContext = (HDC)pContext->getSystemContext ();
+ long x, y;
+ long width = rect.width ();
+ long height = rect.height ();
+
+ x = rect.x + pContext->offset.x;
+ y = rect.y + pContext->offset.y;
+
+ pfnTransparentBlt (hdcSystemContext, x, y, width, height, hdcBitmap, offset.x, offset.y, width, height, color);
+ }
+ else
+ {
+ // OPTIMIZATION: we only do four instead of EIGHT blits
+ HDC hdcSystemContext = (HDC)pContext->getSystemContext ();
+ HDC hdcMask = CreateCompatibleDC (hdcSystemContext);
+
+ COLORREF crOldBack = SetBkColor (hdcSystemContext, 0xFFFFFF);
+ COLORREF crOldText = SetTextColor (hdcSystemContext, 0x000000);
+ HBITMAP bmMaskOld, maskMap;
+
+ long x, y;
+ long width = rect.width ();
+ long height = rect.height ();
+
+ x = rect.x + pContext->offset.x;
+ y = rect.y + pContext->offset.y;
+
+ // Create mask-bitmap in memory
+ maskMap = CreateBitmap (width, height, 1, 1, NULL);
+ bmMaskOld = (HBITMAP)SelectObject (hdcMask, maskMap);
+
+ // Copy bitmap into mask-bitmap and converting it into a black'n'white mask
+ SetBkColor (hdcBitmap, color);
+ BitBlt (hdcMask, 0, 0, width, height, hdcBitmap, offset.x, offset.y, SRCCOPY);
+
+ // Copy image masked to screen
+ BitBlt (hdcSystemContext, x, y, width, height, hdcBitmap, offset.x, offset.y, SRCINVERT);
+ BitBlt (hdcSystemContext, x, y, width, height, hdcMask, 0, 0, SRCAND);
+ BitBlt (hdcSystemContext, x, y, width, height, hdcBitmap, offset.x, offset.y, SRCINVERT);
+
+ DeleteObject (SelectObject (hdcMask, bmMaskOld));
+ DeleteDC (hdcMask);
+
+ SetBkColor (hdcSystemContext, crOldBack);
+ SetTextColor (hdcSystemContext, crOldText);
+ }
+ }
+ else
+ {
+ // OPTIMIZATION: we only do five instead of EIGHT blits
+ HDC hdcSystemContext = (HDC)pContext->getSystemContext ();
+ HDC hdcMask = CreateCompatibleDC (hdcSystemContext);
+ HDC hdcMem = CreateCompatibleDC (hdcSystemContext);
+ HBITMAP bmAndMem;
+ HBITMAP bmMemOld, bmMaskOld;
+
+ long x, y;
+ long width = rect.width ();
+ long height = rect.height ();
+
+ x = rect.x + pContext->offset.x;
+ y = rect.y + pContext->offset.y;
+
+ bmAndMem = CreateCompatibleBitmap(hdcSystemContext, width, height);
+
+ bmMaskOld = (HBITMAP)SelectObject (hdcMask, pMask);
+ bmMemOld = (HBITMAP)SelectObject (hdcMem, bmAndMem);
+
+ BitBlt (hdcMem, 0, 0, width, height, hdcSystemContext, x, y, SRCCOPY);
+ BitBlt (hdcMem, 0, 0, width, height, hdcBitmap, offset.x, offset.y, SRCINVERT);
+ BitBlt (hdcMem, 0, 0, width, height, hdcMask, offset.x, offset.y, SRCAND);
+ BitBlt (hdcMem, 0, 0, width, height, hdcBitmap, offset.x, offset.y, SRCINVERT);
+ BitBlt (hdcSystemContext, x, y, width, height, hdcMem, 0, 0, SRCCOPY);
+
+ DeleteObject (SelectObject (hdcMem, bmMemOld));
+ SelectObject (hdcMask, bmMaskOld);
+
+ DeleteDC (hdcMem);
+ DeleteDC(hdcMask);
+ }
+}
+#endif
+
+//-----------------------------------------------------------------------------
+#if MAC || MOTIF || BEOS
+BEGIN_NAMESPACE_VSTGUI
+// return a degre value between [0, 360 * 64[
+long convertPoint2Angle (CPoint &pm, CPoint &pt)
+{
+ long angle;
+ if (pt.h == pm.h)
+ {
+ if (pt.v < pm.v)
+ angle = 5760; // 90 * 64
+ else
+ angle = 17280; // 270 * 64
+ }
+ else if (pt.v == pm.v)
+ {
+ if (pt.h < pm.h)
+ angle = 11520; // 180 * 64
+ else
+ angle = 0;
+ }
+ else
+ {
+ // 3666.9299 = 180 * 64 / pi
+ angle = (long)(3666.9298 * atan ((double)(pm.v - pt.v) / (double)(pt.h - pm.h)));
+
+ if (pt.v < pm.v)
+ {
+ if (pt.h < pm.h)
+ angle += 11520; // 180 * 64
+ }
+ else
+ {
+ if (pt.h < pm.h)
+ angle += 11520; // 180 * 64
+ else
+ angle += 23040; // 360 * 64
+ }
+ }
+ return angle;
+}
+END_NAMESPACE_VSTGUI
+#endif
+
+
+//-----------------------------------------------------------------------------
+#if MOTIF
+XRectangle rect;
+static bool first = true;
+
+//-----------------------------------------------------------------------------
+void _destroyCallback (Widget widget, XtPointer clientData, XtPointer callData)
+{
+ CFrame* pFrame = (CFrame*)clientData;
+ if (pFrame)
+ {
+ pFrame->freeGc ();
+ pFrame->setOpenFlag (false);
+ pFrame->pSystemWindow = 0;
+ }
+}
+
+//-----------------------------------------------------------------------------
+void _drawingAreaCallback (Widget widget, XtPointer clientData, XtPointer callData)
+{
+ CFrame* pFrame = (CFrame*)clientData;
+ XmDrawingAreaCallbackStruct *cbs = (XmDrawingAreaCallbackStruct *)callData;
+ XEvent *event = cbs->event;
+
+ //-------------------------------------
+ if (cbs->reason == XmCR_INPUT)
+ {
+ if (event->xbutton.type == ButtonRelease)
+ return;
+
+ if (event->xbutton.type != ButtonPress &&
+ event->xbutton.type != KeyPress)
+ return;
+
+ Window pWindow = pFrame->getWindow ();
+ CDrawContext context (pFrame, pFrame->getGC (), (void*)pWindow);
+
+ CPoint where (event->xbutton.x, event->xbutton.y);
+ pFrame->mouse (&context, where);
+ }
+ //------------------------------------
+ else if (cbs->reason == XmCR_EXPOSE)
+ {
+ XExposeEvent *expose = (XExposeEvent*)event;
+#if TEST_REGION
+ rect.x = expose->x;
+ rect.y = expose->y;
+ rect.width = expose->width;
+ rect.height = expose->height;
+ if (first)
+ {
+ pFrame->region = XCreateRegion ();
+ first = false;
+ }
+
+ XUnionRectWithRegion (&rect, pFrame->region, pFrame->region);
+#endif
+ if (expose->count == 0)
+ {
+#if TEST_REGION
+ XSetRegion (expose->pDisplay, pFrame->getGC (), pFrame->region);
+
+ // add processus of static first to set the region to max after a total draw and destroy it the first time...
+#endif
+ pFrame->draw ();
+
+#if TEST_REGION
+ rect.x = 0;
+ rect.y = 0;
+ rect.width = pFrame->getWidth ();
+ rect.height = pFrame->getHeight ();
+ XUnionRectWithRegion (&rect, pFrame->region, pFrame->region);
+ XSetRegion (expose->pDisplay, pFrame->getGC (), pFrame->region);
+ XDestroyRegion (pFrame->region);
+ first = true;
+#endif
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+void _eventHandler (Widget w, XtPointer clientData, XEvent *event, char *p)
+{
+ switch (event->type)
+ {
+ case EnterNotify:
+ break;
+
+ case LeaveNotify:
+ XCrossingEvent *xevent = (XCrossingEvent*)event;
+
+ CFrame* pFrame = (CFrame*)clientData;
+ if (pFrame && pFrame->getFocusView ())
+ {
+ if (xevent->x < 0 || xevent->x >= pFrame->getWidth () ||
+ xevent->y < 0 || xevent->y >= pFrame->getHeight ())
+ {
+ // if button pressed => don't defocus
+ if (xevent->state & (Button1Mask|Button2Mask|Button3Mask))
+ break;
+ pFrame->getFocusView ()->looseFocus ();
+ pFrame->setFocusView (0);
+ }
+ }
+ break;
+ }
+}
+
+//-----------------------------------------------------------------------------
+long getIndexColor8Bit (CColor color, Display *pDisplay, Colormap colormap)
+{
+ long i;
+
+ // search in pre-loaded color
+ for (i = 0; i < CDrawContext::nbNewColor; i++)
+ {
+ if ((paletteNewColor[i].red == color.red) &&
+ (paletteNewColor[i].green == color.green) &&
+ (paletteNewColor[i].blue == color.blue))
+ return paletteNewColor[i].alpha;
+ }
+
+ // Allocate new color cell
+ XColor xcolor;
+ int red = color.red << 8;
+ int green = color.green << 8;
+ int blue = color.blue << 8;
+ xcolor.red = red;
+ xcolor.green = green;
+ xcolor.blue = blue;
+ if (XAllocColor (pDisplay, colormap, &xcolor))
+ {
+ // store this new color
+ if (CDrawContext::nbNewColor < 255)
+ {
+ paletteNewColor[CDrawContext::nbNewColor].red = color.red;
+ paletteNewColor[CDrawContext::nbNewColor].green = color.green;
+ paletteNewColor[CDrawContext::nbNewColor].blue = color.blue;
+ paletteNewColor[CDrawContext::nbNewColor].alpha = xcolor.pixel;
+ CDrawContext::nbNewColor++;
+ }
+ return xcolor.pixel;
+ }
+
+ // take the nearest color
+ int diff;
+ int min = 3 * 65536;
+ int index = 0;
+
+ XColor xcolors[256];
+ for (i = 0; i < 256; i++)
+ xcolors[i].pixel = i;
+
+ XQueryColors (pDisplay, colormap, xcolors, 256);
+
+ for (i = 0; i < 256; i++)
+ {
+ diff = fabs (xcolors[i].red - red) + fabs (xcolors[i].green - green) + fabs (xcolors[i].blue - blue);
+ if (diff < min)
+ {
+ min = diff;
+ index = i;
+ }
+ }
+
+ // store this new color
+ if (CDrawContext::nbNewColor < 255)
+ {
+ paletteNewColor[CDrawContext::nbNewColor].red = color.red;
+ paletteNewColor[CDrawContext::nbNewColor].green = color.green;
+ paletteNewColor[CDrawContext::nbNewColor].blue = color.blue;
+ paletteNewColor[CDrawContext::nbNewColor].alpha = index;
+ CDrawContext::nbNewColor++;
+ }
+ return (index);
+}
+
+//-----------------------------------------------------------------------------
+bool xpmGetValues (char **ppDataXpm, long *pWidth, long *pHeight, long *pNcolor, long *pCpp)
+{
+ // get the size of the pixmap
+ sscanf (ppDataXpm[0], "%d %d %d %d", pWidth, pHeight, pNcolor, pCpp);
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+#elif BEOS
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+PlugView::PlugView (BRect frame, CFrame* cframe)
+ : BView (frame, NULL, B_FOLLOW_ALL, B_WILL_DRAW), cframe (cframe)
+{
+ SetViewColor (B_TRANSPARENT_COLOR);
+}
+
+//-----------------------------------------------------------------------------
+void PlugView::Draw (BRect updateRect)
+{
+ cframe->draw ();
+}
+
+//-----------------------------------------------------------------------------
+void PlugView::MouseDown (BPoint where)
+{
+ BMessage* m = Window ()->CurrentMessage ();
+ int32 buttons;
+ m->FindInt32 ("buttons", &buttons);
+
+ if (buttons & B_SECONDARY_MOUSE_BUTTON && !Window ()->IsFront () && !Window ()->IsFloating ())
+ {
+ Window ()->Activate (true);
+ return;
+ }
+
+ CDrawContext context (cframe, this, NULL);
+ CPoint here (where.x, where.y);
+ cframe->mouse (&context, here);
+}
+
+//-----------------------------------------------------------------------------
+void PlugView::MessageReceived (BMessage *msg)
+{
+ if (msg->what == B_SIMPLE_DATA)
+ {
+ int32 countMax = 0; // max number of references. Possibly not all valid...
+ type_code typeFound;
+ msg->GetInfo ("refs", &typeFound, &countMax);
+ if (countMax > 0)
+ {
+ entry_ref item;
+ int nbRealItems = 0;
+ char ** ptrItems = new char* [countMax];
+ for (int k = 0; k < countMax; k++)
+ if (msg->FindRef ("refs", k, &item) == B_OK)
+ {
+ BPath path (&item);
+ if (path.InitCheck () == B_OK)
+ ptrItems[nbRealItems++] = strdup (path.Path ());
+ }
+ BPoint bwhere = msg->DropPoint ();
+ ConvertFromScreen (&bwhere);
+ CPoint where (bwhere.x, bwhere.y);
+ cframe->onDrop ((void**)ptrItems, nbRealItems, kDropFiles, where);
+ for (long i = 0; i < nbRealItems; i++)
+ free (ptrItems[i]);
+ delete []ptrItems;
+ }
+ }
+ else BView::MessageReceived (msg);
+}
+
+#endif
+
+
+//-----------------------------------------------------------------------------
+#if WINDOWS
+//-----------------------------------------------------------------------------
+// Drop Implementation
+//-----------------------------------------------------------------------------
+class CDropTarget : public IDropTarget
+{
+public:
+ CDropTarget (VSTGUI_CFrame* pFrame);
+ virtual ~CDropTarget ();
+
+ // IUnknown
+ STDMETHOD (QueryInterface) (REFIID riid, void** object);
+ STDMETHOD_ (ULONG, AddRef) (void);
+ STDMETHOD_ (ULONG, Release) (void);
+
+ // IDropTarget
+ STDMETHOD (DragEnter) (IDataObject *dataObject, DWORD keyState, POINTL pt, DWORD *effect);
+ STDMETHOD (DragOver) (DWORD keyState, POINTL pt, DWORD *effect);
+ STDMETHOD (DragLeave) (void);
+ STDMETHOD (Drop) (IDataObject *dataObject, DWORD keyState, POINTL pt, DWORD *effect);
+private:
+ long refCount;
+ bool accept;
+ VSTGUI_CFrame* pFrame;
+};
+
+//-----------------------------------------------------------------------------
+// CDropTarget
+//-----------------------------------------------------------------------------
+void* createDropTarget (VSTGUI_CFrame* pFrame)
+{
+ return new CDropTarget (pFrame);
+}
+
+//-----------------------------------------------------------------------------
+CDropTarget::CDropTarget (VSTGUI_CFrame* pFrame)
+: refCount (0), pFrame (pFrame)
+{
+}
+
+//-----------------------------------------------------------------------------
+CDropTarget::~CDropTarget ()
+{
+}
+
+//-----------------------------------------------------------------------------
+STDMETHODIMP CDropTarget::QueryInterface (REFIID riid, void** object)
+{
+ if (riid == IID_IDropTarget || riid == IID_IUnknown)
+ {
+ *object = this;
+ AddRef ();
+ return NOERROR;
+ }
+ *object = 0;
+ return E_NOINTERFACE;
+}
+
+//-----------------------------------------------------------------------------
+STDMETHODIMP_(ULONG) CDropTarget::AddRef (void)
+{
+ return ++refCount;
+}
+
+//-----------------------------------------------------------------------------
+STDMETHODIMP_(ULONG) CDropTarget::Release (void)
+{
+ refCount--;
+ if (refCount <= 0)
+ {
+ delete this;
+ return 0;
+ }
+ return refCount;
+}
+
+//-----------------------------------------------------------------------------
+STDMETHODIMP CDropTarget::DragEnter (IDataObject *dataObject, DWORD keyState, POINTL pt, DWORD *effect)
+{
+ if (dataObject && pFrame)
+ {
+ gDragContainer = new CDragContainer (dataObject);
+ CDrawContext* context = pFrame->createDrawContext ();
+ VSTGUI_CPoint where;
+ pFrame->getMouseLocation (context, where);
+ pFrame->onDragEnter (context, gDragContainer, where);
+ context->forget ();
+ *effect = DROPEFFECT_MOVE;
+ }
+ else
+ *effect = DROPEFFECT_NONE;
+ return S_OK;
+}
+
+//-----------------------------------------------------------------------------
+STDMETHODIMP CDropTarget::DragOver (DWORD keyState, POINTL pt, DWORD *effect)
+{
+ if (gDragContainer && pFrame)
+ {
+ CDrawContext* context = pFrame->createDrawContext ();
+ VSTGUI_CPoint where;
+ pFrame->getMouseLocation (context, where);
+ pFrame->onDragMove (context, gDragContainer, where);
+ context->forget ();
+ *effect = DROPEFFECT_MOVE;
+ }
+ return S_OK;
+}
+
+//-----------------------------------------------------------------------------
+STDMETHODIMP CDropTarget::DragLeave (void)
+{
+ if (gDragContainer && pFrame)
+ {
+ CDrawContext* context = pFrame->createDrawContext ();
+ VSTGUI_CPoint where;
+ pFrame->getMouseLocation (context, where);
+ pFrame->onDragLeave (context, gDragContainer, where);
+ context->forget ();
+ gDragContainer->forget ();
+ gDragContainer = 0;
+ }
+ return S_OK;
+}
+
+//-----------------------------------------------------------------------------
+STDMETHODIMP CDropTarget::Drop (IDataObject *dataObject, DWORD keyState, POINTL pt, DWORD *effect)
+{
+ if (gDragContainer && pFrame)
+ {
+ CDrawContext* context = pFrame->createDrawContext ();
+ VSTGUI_CPoint where;
+ pFrame->getMouseLocation (context, where);
+ pFrame->onDrop (context, gDragContainer, where);
+ context->forget ();
+ gDragContainer->forget ();
+ gDragContainer = 0;
+ }
+ return S_OK;
+}
+
+//-----------------------------------------------------------------------------
+bool checkResolveLink (const char* nativePath, char* resolved)
+{
+ const char* ext = strrchr (nativePath, '.');
+ if (ext && _stricmp (ext, ".lnk") == NULL)
+ {
+ IShellLink* psl;
+ IPersistFile* ppf;
+ WIN32_FIND_DATA wfd;
+ HRESULT hres;
+ WORD wsz[2048];
+
+ // Get a pointer to the IShellLink interface.
+ hres = CoCreateInstance (CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
+ IID_IShellLink, (void**)&psl);
+ if (SUCCEEDED (hres))
+ {
+ // Get a pointer to the IPersistFile interface.
+ hres = psl->QueryInterface (IID_IPersistFile, (void**)&ppf);
+ if (SUCCEEDED (hres))
+ {
+ // Ensure string is Unicode.
+ MultiByteToWideChar (CP_ACP, 0, nativePath, -1, (LPWSTR)wsz, 2048);
+ // Load the shell link.
+ hres = ppf->Load ((LPWSTR)wsz, STGM_READ);
+ if (SUCCEEDED (hres))
+ {
+ hres = psl->Resolve (0, MAKELONG (SLR_ANY_MATCH | SLR_NO_UI, 500));
+ if (SUCCEEDED (hres))
+ {
+ // Get the path to the link target.
+ hres = psl->GetPath (resolved, 2048, &wfd, SLGP_SHORTPATH);
+ }
+ }
+ // Release pointer to IPersistFile interface.
+ ppf->Release ();
+ }
+ // Release pointer to IShellLink interface.
+ psl->Release ();
+ }
+ return SUCCEEDED(hres);
+ }
+ return false;
+}
+
+#elif MAC
+BEGIN_NAMESPACE_VSTGUI
+
+#if MAC_OLD_DRAG
+//-----------------------------------------------------------------------------
+// Drop Implementation
+//-----------------------------------------------------------------------------
+#if !MACX
+#include "Drag.h"
+#endif
+
+pascal static short drag_receiver (WindowPtr w, void* ref, DragReference drag);
+pascal static OSErr drag_tracker (DragTrackingMessage message, WindowRef theWindow, void *handlerRefCon, DragRef theDrag);
+
+static DragReceiveHandlerUPP drh;
+static DragTrackingHandlerUPP dth;
+
+static bool gEventDragWorks = false;
+
+//-------------------------------------------------------------------------------------------
+void install_drop (CFrame *frame)
+{
+ drh = NewDragReceiveHandlerUPP (drag_receiver);
+ dth = NewDragTrackingHandlerUPP (drag_tracker);
+#if TARGET_API_MAC_CARBON
+ InstallReceiveHandler (drh, (WindowRef)(frame->getSystemWindow ()), (void*)frame);
+ InstallTrackingHandler (dth, (WindowRef)(frame->getSystemWindow ()), (void*)frame);
+#else
+ InstallReceiveHandler (drh, (GrafPort*)(frame->getSystemWindow ()), (void*)frame);
+ InstallTrackingHandler (dth, (GrafPort*)(frame->getSystemWindow ()), (void*)frame);
+#endif
+}
+
+//-------------------------------------------------------------------------------------------
+void remove_drop (CFrame *frame)
+{
+#if TARGET_API_MAC_CARBON
+ RemoveReceiveHandler (drh, (WindowRef)(frame->getSystemWindow ()));
+ RemoveTrackingHandler (dth, (WindowRef)(frame->getSystemWindow ()));
+#else
+ RemoveReceiveHandler (drh, (GrafPort*)(frame->getSystemWindow ()));
+ RemoveTrackingHandler (dth, (GrafPort*)(frame->getSystemWindow ()));
+#endif
+ DisposeDragReceiveHandlerUPP (drh);
+ DisposeDragTrackingHandlerUPP (dth);
+}
+
+// drag tracking for visual feedback
+pascal OSErr drag_tracker (DragTrackingMessage message, WindowRef theWindow, void *handlerRefCon, DragRef dragRef)
+{
+ #if QUARTZ
+ if (gEventDragWorks)
+ return noErr;
+ #endif
+
+ CFrame* frame = (CFrame*)handlerRefCon;
+ switch (message)
+ {
+ case kDragTrackingEnterWindow:
+ {
+ if (gDragContainer)
+ gDragContainer->forget ();
+ gDragContainer = new CDragContainer (dragRef);
+
+ CDrawContext* context = frame->createDrawContext ();
+ VSTGUI_CPoint where;
+ frame->setCursor (kCursorNotAllowed);
+ frame->getMouseLocation (context, where);
+ frame->onDragEnter (context, gDragContainer, where);
+ context->forget ();
+ break;
+ }
+ case kDragTrackingLeaveWindow:
+ {
+ CDrawContext* context = frame->createDrawContext ();
+ VSTGUI_CPoint where;
+ frame->getMouseLocation (context, where);
+ frame->onDragLeave (context, gDragContainer, where);
+ frame->setCursor (kCursorDefault);
+ context->forget ();
+ gDragContainer->forget ();
+ gDragContainer = NULL;
+ break;
+ }
+ case kDragTrackingInWindow:
+ {
+ CDrawContext* context = frame->createDrawContext ();
+ VSTGUI_CPoint where;
+ frame->getMouseLocation (context, where);
+ frame->onDragMove (context, gDragContainer, where);
+ context->forget ();
+
+ break;
+ }
+ }
+ return noErr;
+}
+
+//-------------------------------------------------------------------------------------------
+// Drop has happened in one of our's windows.
+// The data is either of our own type (flavour type stCA), or comes from
+// another app. The only data from outside that is currently accepted are
+// HFS-files
+//-------------------------------------------------------------------------------------------
+pascal short drag_receiver (WindowPtr w, void* ref, DragReference drag)
+{
+ #if QUARTZ
+ if (gEventDragWorks)
+ return noErr;
+ #endif
+
+ if (!gDragContainer)
+ return noErr;
+
+ CFrame* frame = (CFrame*) ref;
+
+ CDrawContext* context = frame->createDrawContext ();
+ VSTGUI_CPoint where;
+ frame->getMouseLocation (context, where);
+ frame->onDrop (context, gDragContainer, where);
+ frame->setCursor (kCursorDefault);
+ context->forget ();
+
+ gDragContainer->forget ();
+ gDragContainer = NULL;
+ return noErr;
+}
+#endif // MAC_OLD_DRAG
+
+#if QUARTZ
+#define defControlStringMask CFSTR ("net.sourceforge.vstgui.%d")
+
+bool CFrame::registerWithToolbox ()
+{
+ CFStringRef defControlString = CFStringCreateWithFormat (NULL, NULL, defControlStringMask, this);
+
+ controlSpec.defType = kControlDefObjectClass;
+ controlSpec.u.classRef = NULL;
+
+ EventTypeSpec eventTypes[] = { {kEventClassControl, kEventControlDraw},
+ {kEventClassControl, kEventControlHitTest},
+ {kEventClassControl, kEventControlClick},
+ {kEventClassControl, kEventControlTrack},
+ {kEventClassControl, kEventControlContextualMenuClick},
+ {kEventClassKeyboard, kEventRawKeyDown},
+ {kEventClassKeyboard, kEventRawKeyRepeat},
+ {kEventClassMouse, kEventMouseWheelMoved},
+ {kEventClassControl, kEventControlDragEnter},
+ {kEventClassControl, kEventControlDragWithin},
+ {kEventClassControl, kEventControlDragLeave},
+ {kEventClassControl, kEventControlDragReceive},
+ {kEventClassControl, kEventControlInitialize},
+ {kEventClassControl, kEventControlGetClickActivation},
+ {kEventClassControl, kEventControlGetOptimalBounds},
+ {kEventClassScrollable, kEventScrollableGetInfo},
+ {kEventClassScrollable, kEventScrollableScrollTo},
+ {kEventClassControl, kEventControlSetFocusPart},
+ {kEventClassControl, kEventControlGetFocusPart},
+ };
+
+ ToolboxObjectClassRef controlClass = NULL;
+
+ OSStatus status = RegisterToolboxObjectClass ( defControlString,
+ NULL,
+ GetEventTypeCount (eventTypes),
+ eventTypes,
+ CFrame::carbonEventHandler,
+ this,
+ &controlClass);
+ if (status == noErr)
+ controlSpec.u.classRef = controlClass;
+
+ CFRelease (defControlString);
+
+ return (controlSpec.u.classRef != NULL);
+}
+//------------------------------------------------------------------------------
+static short keyTable[] = {
+ VKEY_BACK, 0x33,
+ VKEY_TAB, 0x30,
+ VKEY_RETURN, 0x24,
+ VKEY_PAUSE, 0x71,
+ VKEY_ESCAPE, 0x35,
+ VKEY_SPACE, 0x31,
+
+ VKEY_END, 0x77,
+ VKEY_HOME, 0x73,
+
+ VKEY_LEFT, 0x7B,
+ VKEY_UP, 0x7E,
+ VKEY_RIGHT, 0x7C,
+ VKEY_DOWN, 0x7D,
+ VKEY_PAGEUP, 0x74,
+ VKEY_PAGEDOWN, 0x79,
+
+ VKEY_PRINT, 0x69,
+ VKEY_ENTER, 0x4C,
+ VKEY_HELP, 0x72,
+ VKEY_DELETE, 0x75,
+ VKEY_NUMPAD0, 0x52,
+ VKEY_NUMPAD1, 0x53,
+ VKEY_NUMPAD2, 0x54,
+ VKEY_NUMPAD3, 0x55,
+ VKEY_NUMPAD4, 0x56,
+ VKEY_NUMPAD5, 0x57,
+ VKEY_NUMPAD6, 0x58,
+ VKEY_NUMPAD7, 0x59,
+ VKEY_NUMPAD8, 0x5B,
+ VKEY_NUMPAD9, 0x5C,
+ VKEY_MULTIPLY, 0x43,
+ VKEY_ADD, 0x45,
+ VKEY_SUBTRACT, 0x4E,
+ VKEY_DECIMAL, 0x41,
+ VKEY_DIVIDE, 0x4B,
+ VKEY_F1, 0x7A,
+ VKEY_F2, 0x78,
+ VKEY_F3, 0x63,
+ VKEY_F4, 0x76,
+ VKEY_F5, 0x60,
+ VKEY_F6, 0x61,
+ VKEY_F7, 0x62,
+ VKEY_F8, 0x64,
+ VKEY_F9, 0x65,
+ VKEY_F10, 0x6D,
+ VKEY_F11, 0x67,
+ VKEY_F12, 0x6F,
+ VKEY_NUMLOCK, 0x47,
+ VKEY_EQUALS, 0x51
+};
+
+#ifndef kHIViewFeatureGetsFocusOnClick
+#define kHIViewFeatureGetsFocusOnClick (1 << 8)
+#endif
+
+bool hiToolboxAllowFocusChange = false;
+
+//---------------------------------------------------------------------------------------
+pascal OSStatus CFrame::carbonEventHandler (EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void *inUserData)
+{
+ OSStatus result = eventNotHandledErr;
+ CFrame* frame = (CFrame*)inUserData;
+ UInt32 eventClass = GetEventClass (inEvent);
+ UInt32 eventKind = GetEventKind (inEvent);
+ WindowRef window = (WindowRef)frame->getSystemWindow ();
+
+ // WARNING :
+ // I've not implemented the old style resource file handling.
+ // Use the CFBundleCopyResourceURL... functions to get your resources.
+
+ switch (eventClass)
+ {
+ case kEventClassScrollable:
+ {
+ switch (eventKind)
+ {
+ case kEventScrollableGetInfo:
+ {
+ HISize cs = {frame->getWidth (), frame->getHeight ()};
+ SetEventParameter (inEvent, kEventParamImageSize, typeHISize, sizeof (HISize), &cs);
+ HIPoint origin = {frame->hiScrollOffset.x, frame->hiScrollOffset.y};
+ SetEventParameter (inEvent, kEventParamOrigin, typeHIPoint, sizeof (HIPoint), &origin);
+ HISize lineSize = {50.0, 20.0};
+ SetEventParameter(inEvent, kEventParamLineSize, typeHISize, sizeof(lineSize), &lineSize);
+ HIRect bounds;
+ HIViewGetBounds ((HIViewRef)frame->controlRef, &bounds);
+ SetEventParameter(inEvent, kEventParamViewSize, typeHISize, sizeof(bounds.size), &bounds.size);
+ result = noErr;
+ break;
+ }
+ case kEventScrollableScrollTo:
+ {
+ HIPoint where;
+ GetEventParameter(inEvent, kEventParamOrigin, typeHIPoint, NULL, sizeof(where), NULL, &where);
+ frame->hiScrollOffset.x = (CCoord)where.x;
+ frame->hiScrollOffset.y = (CCoord)where.y;
+ HIViewSetBoundsOrigin((HIViewRef)frame->controlRef, where.x, where.y);
+ HIViewSetNeedsDisplay((HIViewRef)frame->controlRef, true);
+ result = noErr;
+ break;
+ }
+ }
+ break;
+ }
+ case kEventClassControl:
+ {
+ switch (eventKind)
+ {
+ case kEventControlInitialize:
+ {
+ UInt32 controlFeatures = kControlSupportsDragAndDrop | kControlSupportsFocus | kControlHandlesTracking | kControlSupportsEmbedding | kHIViewFeatureGetsFocusOnClick;
+ SetEventParameter (inEvent, kEventParamControlFeatures, typeUInt32, sizeof (UInt32), &controlFeatures);
+ result = noErr;
+ break;
+ }
+ case kEventControlDraw:
+ {
+ CDrawContext* context = 0;
+ if (frame->pFrameContext)
+ {
+ context = frame->pFrameContext;
+ context->remember ();
+ }
+ else
+ {
+ CGContextRef cgcontext = 0;
+ OSStatus res = GetEventParameter (inEvent, kEventParamCGContextRef, typeCGContextRef, NULL, sizeof (cgcontext), NULL, &cgcontext);
+ context = new CDrawContext (frame, (res == noErr) ? cgcontext : NULL, window);
+ }
+ RgnHandle dirtyRegion;
+ if (GetEventParameter (inEvent, kEventParamRgnHandle, typeQDRgnHandle, NULL, sizeof (RgnHandle), NULL, &dirtyRegion) == noErr)
+ {
+ bool frameWasDirty = frame->bDirty;
+ Rect bounds;
+ GetRegionBounds (dirtyRegion, &bounds);
+ CRect updateRect;
+ Rect2CRect (bounds, updateRect);
+ WindowAttributes windowAttributes;
+ GetWindowAttributes (window, &windowAttributes);
+ if (!(windowAttributes & kWindowCompositingAttribute))
+ updateRect.offset (-context->offsetScreen.x, -context->offsetScreen.y);
+ frame->drawRect (context, updateRect);
+ if (frameWasDirty && updateRect != frame->size)
+ frame->setDirty (true);
+ }
+ else
+ frame->draw (context);
+ context->forget ();
+ result = noErr;
+ break;
+ }
+ case kEventControlGetClickActivation:
+ {
+ ClickActivationResult activation = kActivateAndHandleClick;
+ SetEventParameter (inEvent, kEventParamClickActivation, typeClickActivationResult, sizeof (ClickActivationResult), &activation);
+ result = noErr;
+ break;
+ }
+ case kEventControlHitTest:
+ {
+ ControlPartCode code = kControlContentMetaPart;
+ SetEventParameter (inEvent, kEventParamControlPart, typeControlPartCode, sizeof (ControlPartCode), &code);
+ result = noErr;
+ break;
+ }
+ case kEventControlClick:
+ {
+ EventMouseButton buttonState;
+ GetEventParameter (inEvent, kEventParamMouseButton, typeMouseButton, NULL, sizeof (EventMouseButton), NULL, &buttonState);
+ if (buttonState == kEventMouseButtonPrimary)
+ {
+ result = CallNextEventHandler (inHandlerCallRef, inEvent);
+ break;
+ }
+ }
+ case kEventControlTrack:
+ case kEventControlContextualMenuClick:
+ {
+ long buttons = 0;
+ EventMouseButton buttonState;
+ HIPoint hipoint;
+ UInt32 modifiers;
+ GetEventParameter (inEvent, kEventParamMouseLocation, typeHIPoint, NULL, sizeof (HIPoint), NULL, &hipoint);
+ if (eventKind == kEventControlContextualMenuClick)
+ buttons = kRButton;
+ else if (eventKind == kEventControlTrack)
+ {
+ buttons = kLButton;
+ GetEventParameter (inEvent, kEventParamKeyModifiers, typeUInt32, NULL, sizeof (UInt32), NULL, &modifiers);
+ if (modifiers & cmdKey)
+ buttons |= kControl;
+ if (modifiers & shiftKey)
+ buttons |= kShift;
+ if (modifiers & optionKey)
+ buttons |= kAlt;
+ if (modifiers & controlKey)
+ buttons |= kApple;
+ }
+ else
+ {
+ GetEventParameter (inEvent, kEventParamKeyModifiers, typeUInt32, NULL, sizeof (UInt32), NULL, &modifiers);
+ GetEventParameter (inEvent, kEventParamMouseButton, typeMouseButton, NULL, sizeof (EventMouseButton), NULL, &buttonState);
+ if (buttonState == kEventMouseButtonPrimary)
+ buttons |= kLButton;
+ if (buttonState == kEventMouseButtonSecondary)
+ buttons |= kRButton;
+ if (buttonState == kEventMouseButtonTertiary)
+ buttons |= kMButton;
+ if (modifiers & cmdKey)
+ buttons |= kControl;
+ if (modifiers & shiftKey)
+ buttons |= kShift;
+ if (modifiers & optionKey)
+ buttons |= kAlt;
+ if (modifiers & controlKey)
+ buttons |= kApple;
+ }
+ //SetUserFocusWindow (window);
+ //AdvanceKeyboardFocus (window);
+ //SetKeyboardFocus (window, frame->controlRef, kControlFocusNextPart);
+ WindowAttributes windowAttributes;
+ GetWindowAttributes (window, &windowAttributes);
+ Point point = {(short)hipoint.y, (short)hipoint.x};
+ if (eventKind == kEventControlClick && !(windowAttributes & kWindowCompositingAttribute))
+ QDGlobalToLocalPoint (GetWindowPort (window), &point);
+ CDrawContext* context = frame->createDrawContext ();
+ CPoint p (point.h, point.v);
+ if (!(windowAttributes & kWindowCompositingAttribute))
+ p.offset (-context->offsetScreen.x, -context->offsetScreen.y);
+ frame->mouse (context, p, buttons);
+ context->forget ();
+ result = noErr;
+ break;
+ }
+ case kEventControlGetOptimalBounds:
+ {
+ HIRect optimalBounds = { {0, 0}, { frame->getWidth (), frame->getHeight ()}};
+ SetEventParameter (inEvent, kEventParamControlOptimalBounds, typeHIRect, sizeof (HIRect), &optimalBounds);
+ result = noErr;
+ break;
+ }
+ case kEventControlGetFocusPart:
+ {
+ if (hiToolboxAllowFocusChange)
+ {
+ ControlPartCode code = frame->hasFocus ? 127 : kControlFocusNoPart;
+ SetEventParameter (inEvent, kEventParamControlPart, typeControlPartCode, sizeof (ControlPartCode), &code);
+ result = noErr;
+ }
+ break;
+ }
+ case kEventControlSetFocusPart:
+ {
+ if (hiToolboxAllowFocusChange)
+ {
+ ControlPartCode code;
+ GetEventParameter (inEvent, kEventParamControlPart, typeControlPartCode, NULL, sizeof (ControlPartCode), NULL, &code);
+ if (code == kControlFocusNoPart)
+ {
+ frame->hasFocus = false;
+ frame->setFocusView (NULL);
+ }
+ else
+ {
+ bool anfResult = false;
+ if (code == kControlFocusNextPart)
+ anfResult = frame->advanceNextFocusView (frame->pFocusView);
+ else if (code == kControlFocusPrevPart)
+ anfResult = frame->advanceNextFocusView (frame->pFocusView, true);
+ if (anfResult)
+ {
+ frame->hasFocus = true;
+ code = 127;
+ }
+ else
+ {
+ frame->hasFocus = false;
+ code = kControlFocusNoPart;
+ }
+ }
+ SetEventParameter (inEvent, kEventParamControlPart, typeControlPartCode, sizeof (code), &code);
+ result = noErr;
+ }
+ break;
+ }
+ case kEventControlDragEnter:
+ {
+ #if MAC_OLD_DRAG
+ gEventDragWorks = true;
+ #endif
+
+ DragRef dragRef;
+ if (GetEventParameter (inEvent, kEventParamDragRef, typeDragRef, NULL, sizeof (DragRef), NULL, &dragRef) == noErr)
+ {
+ gDragContainer = new CDragContainer (dragRef);
+
+ CDrawContext* context = frame->createDrawContext ();
+ VSTGUI_CPoint where;
+ frame->setCursor (kCursorNotAllowed);
+ frame->getMouseLocation (context, where);
+ frame->onDragEnter (context, gDragContainer, where);
+ context->forget ();
+
+ bool acceptDrop = true;
+ SetEventParameter (inEvent, kEventParamControlWouldAcceptDrop, typeBoolean, sizeof (bool), &acceptDrop);
+ }
+ result = noErr;
+ break;
+ }
+ case kEventControlDragWithin:
+ {
+ if (gDragContainer)
+ {
+ CDrawContext* context = frame->createDrawContext ();
+ VSTGUI_CPoint where;
+ frame->getMouseLocation (context, where);
+ frame->onDragMove (context, gDragContainer, where);
+ context->forget ();
+ }
+ result = noErr;
+ break;
+ }
+ case kEventControlDragLeave:
+ {
+ if (gDragContainer)
+ {
+ CDrawContext* context = frame->createDrawContext ();
+ VSTGUI_CPoint where;
+ frame->getMouseLocation (context, where);
+ frame->onDragLeave (context, gDragContainer, where);
+ frame->setCursor (kCursorDefault);
+ context->forget ();
+ }
+ result = noErr;
+ break;
+ }
+ case kEventControlDragReceive:
+ {
+ if (gDragContainer)
+ {
+ CDrawContext* context = frame->createDrawContext ();
+ VSTGUI_CPoint where;
+ frame->getMouseLocation (context, where);
+ frame->onDrop (context, gDragContainer, where);
+ frame->setCursor (kCursorDefault);
+ context->forget ();
+ gDragContainer->forget ();
+ gDragContainer = 0;
+ }
+ result = noErr;
+ break;
+ }
+ }
+ break;
+ }
+ case kEventClassMouse:
+ {
+ switch (eventKind)
+ {
+ case kEventMouseWheelMoved:
+ {
+ UInt32 modifiers;
+ HIPoint windowHIPoint;
+ SInt32 wheelDelta;
+ EventMouseWheelAxis wheelAxis;
+ WindowRef windowRef;
+ GetEventParameter (inEvent, kEventParamWindowRef, typeWindowRef, NULL, sizeof (WindowRef), NULL, &windowRef);
+ GetEventParameter (inEvent, kEventParamMouseWheelAxis, typeMouseWheelAxis, NULL, sizeof (EventMouseWheelAxis), NULL, &wheelAxis);
+ GetEventParameter (inEvent, kEventParamMouseWheelDelta, typeLongInteger, NULL, sizeof (SInt32), NULL, &wheelDelta);
+ GetEventParameter (inEvent, kEventParamWindowMouseLocation, typeHIPoint, NULL, sizeof (HIPoint), NULL, &windowHIPoint);
+ GetEventParameter (inEvent, kEventParamKeyModifiers, typeUInt32, NULL, sizeof (UInt32), NULL, &modifiers);
+ HIViewConvertPoint (&windowHIPoint, HIViewGetRoot (windowRef), frame->controlRef);
+ CPoint p ((CCoord)windowHIPoint.x, (CCoord)windowHIPoint.y);
+ CDrawContext* context = frame->createDrawContext ();
+ CMouseWheelAxis axis = kMouseWheelAxisX;
+ if (wheelAxis == kEventMouseWheelAxisY && !(modifiers & cmdKey))
+ axis = kMouseWheelAxisY;
+ frame->onWheel (context, p, axis, wheelDelta);
+ context->forget ();
+ result = noErr;
+ break;
+ }
+ }
+ break;
+ }
+ case kEventClassTextInput:
+ {
+ switch (eventKind)
+ {
+ case kEventTextInputUnicodeForKeyEvent:
+ {
+ // The "Standard Event Handler" of a window would return noErr even though no one has handled the key event.
+ // This prevents the "Standard Handler" to be called for this event, with the exception of the tab key as it is used for control focus changes.
+ EventRef rawKeyEvent;
+ GetEventParameter (inEvent, kEventParamTextInputSendKeyboardEvent, typeEventRef, NULL, sizeof (EventRef), NULL, &rawKeyEvent);
+ if (rawKeyEvent)
+ {
+ UInt32 keyCode = 0;
+ GetEventParameter (rawKeyEvent, kEventParamKeyCode, typeUInt32, NULL, sizeof (UInt32), NULL, &keyCode);
+ if (keyCode == keyTable[VKEY_TAB+1])
+ return result;
+ }
+ result = eventPassToNextTargetErr;
+ break;
+ }
+ }
+ break;
+ }
+ case kEventClassKeyboard:
+ {
+ if (frame->hasFocus)
+ {
+ switch (eventKind)
+ {
+ case kEventRawKeyDown:
+ case kEventRawKeyRepeat:
+ {
+ // todo: make this work
+
+ char character = 0;
+ UInt32 keyCode = 0;
+ UInt32 modifiers = 0;
+ GetEventParameter (inEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof (char), NULL, &character);
+ GetEventParameter (inEvent, kEventParamKeyCode, typeUInt32, NULL, sizeof (UInt32), NULL, &keyCode);
+ GetEventParameter (inEvent, kEventParamKeyModifiers, typeUInt32, NULL, sizeof (UInt32), NULL, &modifiers);
+ char scanCode = keyCode;
+ VstKeyCode vstKeyCode;
+ memset (&vstKeyCode, 0, sizeof (VstKeyCode));
+ KeyboardLayoutRef layout;
+ if (KLGetCurrentKeyboardLayout (&layout) == noErr)
+ {
+ const void* pKCHR = 0;
+ KLGetKeyboardLayoutProperty (layout, kKLKCHRData, &pKCHR);
+ if (pKCHR)
+ {
+ static UInt32 keyTranslateState = 0;
+ vstKeyCode.character = KeyTranslate (pKCHR, keyCode, &keyTranslateState);
+ if (modifiers & shiftKey)
+ {
+ vstKeyCode.character = toupper (vstKeyCode.character);
+ }
+ }
+ }
+ short entries = sizeof (keyTable) / (sizeof (short));
+ for (int i = 0; i < entries; i += 2)
+ {
+ if (keyTable[i + 1] == scanCode)
+ {
+ vstKeyCode.virt = keyTable[i];
+ vstKeyCode.character = 0;
+ break;
+ }
+ }
+ if (modifiers & cmdKey)
+ vstKeyCode.modifier |= MODIFIER_CONTROL;
+ if (modifiers & shiftKey)
+ vstKeyCode.modifier |= MODIFIER_SHIFT;
+ if (modifiers & optionKey)
+ vstKeyCode.modifier |= MODIFIER_ALTERNATE;
+ if (modifiers & controlKey)
+ vstKeyCode.modifier |= MODIFIER_COMMAND;
+ if (frame->onKeyDown (vstKeyCode) != -1)
+ result = noErr;
+
+ break;
+ }
+ }
+ }
+ break;
+ }
+ }
+ return result;
+}
+
+// code from CarbonSketch Example Code
+#define kGenericRGBProfilePathStr "/System/Library/ColorSync/Profiles/Generic RGB Profile.icc"
+
+class QuartzStatics
+{
+public:
+ //-----------------------------------------------------------------------------
+ QuartzStatics ()
+ : genericRGBColorSpace (0)
+ {
+ CreateGenericRGBColorSpace ();
+ CFBundleRef coregraphicsBundle = CFBundleGetBundleWithIdentifier (CFSTR("com.apple.CoreGraphics"));
+ if (coregraphicsBundle)
+ {
+ _CGImageCreateWithImageInRect = (CGImageCreateWithImageInRectProc)CFBundleGetFunctionPointerForName (coregraphicsBundle, CFSTR("CGImageCreateWithImageInRect"));
+ _CGContextStrokeLineSegments = (CGContextStrokeLineSegmentsProc)CFBundleGetFunctionPointerForName (coregraphicsBundle, CFSTR("CGContextStrokeLineSegments"));
+ }
+ }
+
+ //-----------------------------------------------------------------------------
+ ~QuartzStatics ()
+ {
+ // we don't want to leak ;-)
+ CGColorSpaceRelease (genericRGBColorSpace);
+
+ if (bmpGI)
+ CloseComponent (bmpGI);
+ if (pngGI)
+ CloseComponent (pngGI);
+ if (jpgGI)
+ CloseComponent (jpgGI);
+ if (pictGI)
+ CloseComponent (pictGI);
+ bmpGI = 0;
+ pngGI = 0;
+ jpgGI = 0;
+ pictGI = 0;
+ }
+
+ inline CGColorSpaceRef getGenericRGBColorSpace () { return genericRGBColorSpace; }
+
+protected:
+ //-----------------------------------------------------------------------------
+ CMProfileRef OpenGenericProfile(void)
+ {
+ CMProfileLocation loc;
+ CMProfileRef cmProfile;
+
+ loc.locType = cmPathBasedProfile;
+ strcpy(loc.u.pathLoc.path, kGenericRGBProfilePathStr);
+
+ if (CMOpenProfile(&cmProfile, &loc) != noErr)
+ cmProfile = NULL;
+
+ return cmProfile;
+ }
+
+ //-----------------------------------------------------------------------------
+ void CreateGenericRGBColorSpace(void)
+ {
+ CMProfileRef genericRGBProfile = OpenGenericProfile();
+
+ if (genericRGBProfile)
+ {
+ genericRGBColorSpace = CGColorSpaceCreateWithPlatformColorSpace(genericRGBProfile);
+
+ // we opened the profile so it is up to us to close it
+ CMCloseProfile(genericRGBProfile);
+ }
+ if (genericRGBColorSpace == NULL)
+ genericRGBColorSpace = CGColorSpaceCreateDeviceRGB ();
+ }
+
+ CGColorSpaceRef genericRGBColorSpace;
+};
+
+static QuartzStatics _gQuartzStatics;
+
+inline CGColorSpaceRef GetGenericRGBColorSpace ()
+{
+ return _gQuartzStatics.getGenericRGBColorSpace ();
+}
+
+END_NAMESPACE_VSTGUI
+#endif
+
+#endif
+
diff --git a/vstgui.sf/vstgui/vstgui.h b/vstgui.sf/vstgui/vstgui.h
new file mode 100644
index 0000000..c15b2ea
--- /dev/null
+++ b/vstgui.sf/vstgui/vstgui.h
@@ -0,0 +1,1227 @@
+//-----------------------------------------------------------------------------
+// VST Plug-Ins SDK
+// VSTGUI: Graphical User Interface Framework for VST plugins :
+//
+// Version 3.0 $Date: 2005/11/15 14:56:42 $
+//
+//-----------------------------------------------------------------------------
+// VSTGUI LICENSE
+// © 2004, 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.
+//-----------------------------------------------------------------------------
+
+#ifndef __vstgui__
+#define __vstgui__
+
+// define global defines
+#if WIN32
+ #define WINDOWS 1
+#elif SGI | SUN
+ #define MOTIF 1
+#elif __MWERKS__ || __APPLE_CC__
+ #define MAC 1
+ #if __MACH__
+ #define MACX 1
+ #define QUARTZ 1
+ #ifndef TARGET_API_MAC_CARBON
+ #define TARGET_API_MAC_CARBON 1
+ #endif
+ #ifndef __CF_USE_FRAMEWORK_INCLUDES__
+ #define __CF_USE_FRAMEWORK_INCLUDES__ 1
+ #endif
+ #endif
+#elif __BEOS__
+ #define BEOS 1
+#endif
+
+#if WINDOWS
+ #define USE_NAMESPACE 1
+#endif
+
+#if USE_NAMESPACE
+ #define BEGIN_NAMESPACE_VSTGUI namespace VSTGUI {
+ #define END_NAMESPACE_VSTGUI }
+ #define USING_NAMESPACE_VSTGUI using namespace VSTGUI;
+#else
+ #define BEGIN_NAMESPACE_VSTGUI
+ #define END_NAMESPACE_VSTGUI
+ #define USING_NAMESPACE_VSTGUI
+#endif
+
+// VSTGUI Version
+#define VSTGUI_VERSION_MAJOR 3
+#define VSTGUI_VERSION_MINOR 0
+
+//----------------------------------------------------
+//----------------------------------------------------
+BEGIN_NAMESPACE_VSTGUI
+
+class CFrame;
+class CDrawContext;
+class COffscreenContext;
+class CControl;
+class CBitmap;
+
+END_NAMESPACE_VSTGUI
+
+#if PLUGGUI
+ #ifndef __plugguieditor__
+ #include "plugguieditor.h"
+ #endif
+#else
+ #ifndef __aeffguieditor__
+ #include "aeffguieditor.h"
+ #endif
+#endif
+
+//----------------------------------------------------
+#if WINDOWS
+ #include
+
+//----------------------------------------------------
+#elif MOTIF
+ #include
+ #include
+ #ifdef NOBOOL
+ #ifndef bool
+ typedef short bool;
+ #endif
+ #ifndef false
+ static const bool false = 0;
+ #endif
+ #ifndef true
+ static const bool true = 1;
+ #endif
+ #endif
+
+ // definition of struct for XPixmap resources
+ struct CResTableEntry {
+ int id;
+ char **xpm;
+ };
+
+ typedef CResTableEntry CResTable[];
+ extern CResTable xpmResources;
+
+//----------------------------------------------------
+#elif MAC
+ #if MACX
+ #include
+ //macho VST's set gBundleRef which is a CFBundleRef
+ BEGIN_NAMESPACE_VSTGUI
+ extern void* gBundleRef;
+ END_NAMESPACE_VSTGUI
+ #else
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include