summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-12-12 14:43:24 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-12-12 14:43:24 +0000
commitbc89fe0147c04b67141936d109c00dfd4d69cc4b (patch)
tree544ff450c40fe1f43853a8420228a26f27f1eafb
parent30daaebaa2d90d6b0e8673143ccc3cacd7bd1753 (diff)
most of the 2.X->3.0 commit (up to rev 4299) except for gtk2_ardour/editor_canvas.cc; builds and runs and does a few specific things but expect it to be buggy for a while yet
git-svn-id: svn://localhost/ardour2/branches/3.0@4313 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--DOCUMENTATION/.cvsignore2
-rw-r--r--DOCUMENTATION/AUTHORS78
-rw-r--r--DOCUMENTATION/AUTHORS.es78
-rw-r--r--DOCUMENTATION/BUILD7
-rw-r--r--DOCUMENTATION/BUILD.ru215
-rw-r--r--DOCUMENTATION/CONTRIBUTORS62
-rw-r--r--DOCUMENTATION/CONTRIBUTORS.es82
-rw-r--r--DOCUMENTATION/FAQ613
-rw-r--r--DOCUMENTATION/README.es139
-rw-r--r--DOCUMENTATION/README.fr113
-rw-r--r--DOCUMENTATION/README.it276
-rw-r--r--DOCUMENTATION/README.ru108
-rw-r--r--DOCUMENTATION/TODO232
-rw-r--r--DOCUMENTATION/TRANSLATORS27
-rw-r--r--README4
-rw-r--r--SConstruct121
-rw-r--r--ardour.1 (renamed from DOCUMENTATION/ardour.1)0
-rw-r--r--ardour.1.es (renamed from DOCUMENTATION/ardour.1.es)0
-rw-r--r--ardour.1.fr (renamed from DOCUMENTATION/ardour.1.fr)0
-rw-r--r--ardour.1.ru (renamed from DOCUMENTATION/ardour.1.ru)0
-rw-r--r--ardour_system_sae.rc24
-rw-r--r--gtk2_ardour/SAE-de-keypad.bindings.in214
-rw-r--r--gtk2_ardour/SAE-de-nokeypad.bindings.in214
-rw-r--r--gtk2_ardour/SAE-us-keypad.bindings.in (renamed from gtk2_ardour/SAE-de.bindings.in)144
-rw-r--r--gtk2_ardour/SAE-us-nokeypad.bindings.in213
-rw-r--r--gtk2_ardour/SAE-us.bindings.in346
-rw-r--r--gtk2_ardour/SConscript53
-rw-r--r--gtk2_ardour/about.cc70
-rw-r--r--gtk2_ardour/ardev_common.sh.in10
-rw-r--r--gtk2_ardour/ardour-sae.menus36
-rw-r--r--gtk2_ardour/ardour.menus.in (renamed from gtk2_ardour/ardour.menus)36
-rw-r--r--gtk2_ardour/ardour.sh.in19
-rw-r--r--gtk2_ardour/ardour2_ui_dark_sae.rc.in1587
-rw-r--r--gtk2_ardour/ardour2_ui_light_sae.rc.in1584
-rw-r--r--gtk2_ardour/ardour2_ui_sae.conf20
-rw-r--r--gtk2_ardour/ardour3_ui_dark_sae.rc.in1587
-rw-r--r--gtk2_ardour/ardour3_ui_light_sae.rc.in1584
-rw-r--r--gtk2_ardour/ardour_dialog.cc19
-rw-r--r--gtk2_ardour/ardour_dialog.h7
-rw-r--r--gtk2_ardour/ardour_ui.cc69
-rw-r--r--gtk2_ardour/ardour_ui.h13
-rw-r--r--gtk2_ardour/ardour_ui2.cc4
-rw-r--r--gtk2_ardour/ardour_ui_dependents.cc19
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc8
-rw-r--r--gtk2_ardour/ardour_ui_options.cc16
-rw-r--r--gtk2_ardour/au_pluginui.mm38
-rw-r--r--gtk2_ardour/audio_clock.cc24
-rw-r--r--gtk2_ardour/audio_region_editor.cc67
-rw-r--r--gtk2_ardour/audio_region_editor.h13
-rw-r--r--gtk2_ardour/audio_streamview.cc10
-rw-r--r--gtk2_ardour/audio_time_axis.cc59
-rw-r--r--gtk2_ardour/automation_time_axis.cc29
-rw-r--r--gtk2_ardour/automation_time_axis.h2
-rw-r--r--gtk2_ardour/canvas-waveview.c11
-rw-r--r--gtk2_ardour/canvas_vars.h1
-rw-r--r--gtk2_ardour/cocoacarbon.mm13
-rw-r--r--gtk2_ardour/crossfade_edit.cc273
-rw-r--r--gtk2_ardour/crossfade_edit.h9
-rw-r--r--gtk2_ardour/crossfade_view.cc3
-rw-r--r--gtk2_ardour/editor.cc259
-rw-r--r--gtk2_ardour/editor.h52
-rw-r--r--gtk2_ardour/editor_actions.cc31
-rw-r--r--gtk2_ardour/editor_audio_import.cc185
-rw-r--r--gtk2_ardour/editor_canvas.cc324
-rw-r--r--gtk2_ardour/editor_cursors.cc5
-rw-r--r--gtk2_ardour/editor_edit_groups.cc9
-rw-r--r--gtk2_ardour/editor_mixer.cc21
-rw-r--r--gtk2_ardour/editor_mouse.cc240
-rw-r--r--gtk2_ardour/editor_ops.cc215
-rw-r--r--gtk2_ardour/editor_region_list.cc14
-rw-r--r--gtk2_ardour/editor_route_list.cc118
-rw-r--r--gtk2_ardour/editor_rulers.cc79
-rw-r--r--gtk2_ardour/editor_tempodisplay.cc16
-rw-r--r--gtk2_ardour/editor_timefx.cc14
-rw-r--r--gtk2_ardour/export_range_markers_dialog.cc10
-rw-r--r--gtk2_ardour/gain_meter.cc4
-rw-r--r--gtk2_ardour/generic_pluginui.cc23
-rw-r--r--gtk2_ardour/icons/computer_keyboard.pngbin0 -> 1320 bytes
-rw-r--r--gtk2_ardour/icons/computer_keyboard_active.pngbin0 -> 1495 bytes
-rw-r--r--gtk2_ardour/keyboard.cc74
-rw-r--r--gtk2_ardour/keyboard.h2
-rw-r--r--gtk2_ardour/main.cc8
-rw-r--r--gtk2_ardour/matrix.cc1
-rw-r--r--gtk2_ardour/mixer_strip.cc40
-rw-r--r--gtk2_ardour/mixer_strip.h4
-rw-r--r--gtk2_ardour/mixer_ui.cc108
-rw-r--r--gtk2_ardour/mixer_ui.h3
-rw-r--r--gtk2_ardour/mnemonic-us.bindings.in17
-rw-r--r--gtk2_ardour/nag.cc206
-rw-r--r--gtk2_ardour/nag.h39
-rw-r--r--gtk2_ardour/new_session_dialog.cc26
-rw-r--r--gtk2_ardour/new_session_dialog.h2
-rw-r--r--gtk2_ardour/option_editor.cc9
-rw-r--r--gtk2_ardour/panner_ui.cc9
-rw-r--r--gtk2_ardour/plugin_eq_gui.cc8
-rw-r--r--gtk2_ardour/plugin_selector.h2
-rw-r--r--gtk2_ardour/plugin_ui.cc60
-rw-r--r--gtk2_ardour/plugin_ui.h9
-rw-r--r--gtk2_ardour/po/de_DE.po9855
-rw-r--r--gtk2_ardour/processor_box.cc48
-rw-r--r--gtk2_ardour/processor_box.h4
-rw-r--r--gtk2_ardour/public_editor.h3
-rw-r--r--gtk2_ardour/route_time_axis.cc36
-rw-r--r--gtk2_ardour/route_ui.cc108
-rw-r--r--gtk2_ardour/route_ui.h2
-rw-r--r--gtk2_ardour/send_ui.cc8
-rw-r--r--gtk2_ardour/send_ui.h4
-rw-r--r--gtk2_ardour/sfdb_ui.cc2
-rw-r--r--gtk2_ardour/streamview.cc9
-rw-r--r--gtk2_ardour/streamview.h2
-rw-r--r--gtk2_ardour/theme_manager.cc31
-rw-r--r--gtk2_ardour/time_axis_view.cc1843
-rw-r--r--gtk2_ardour/time_axis_view.h1
-rw-r--r--gtk2_ardour/time_axis_view_item.cc3
-rw-r--r--gtk2_ardour/ui_config.cc13
-rw-r--r--gtk2_ardour/utils.cc78
-rw-r--r--instant.xml7
-rw-r--r--instant.xml.sae7
-rw-r--r--libs/appleutility/CAAudioFile.h8
-rw-r--r--libs/appleutility/SConscript2
-rw-r--r--libs/ardour/analyser.cc2
-rw-r--r--libs/ardour/ardour/audio_buffer.h13
-rw-r--r--libs/ardour/ardour/audioregion.h19
-rw-r--r--libs/ardour/ardour/automation_control.h4
-rw-r--r--libs/ardour/ardour/automation_list.h4
-rw-r--r--libs/ardour/ardour/configuration_vars.h2
-rw-r--r--libs/ardour/ardour/osc.h23
-rw-r--r--libs/ardour/ardour/region.h6
-rw-r--r--libs/ardour/ardour/region_factory.h5
-rw-r--r--libs/ardour/ardour/route.h5
-rw-r--r--libs/ardour/ardour/session.h23
-rw-r--r--libs/ardour/ardour/slave.h1
-rw-r--r--libs/ardour/ardour/svn_revision.h4
-rw-r--r--libs/ardour/ardour/track.h3
-rw-r--r--libs/ardour/audio_track.cc89
-rw-r--r--libs/ardour/audio_unit.cc11
-rw-r--r--libs/ardour/audioengine.cc6
-rw-r--r--libs/ardour/audioregion.cc143
-rw-r--r--libs/ardour/coreaudiosource.cc100
-rw-r--r--libs/ardour/crossfade.cc59
-rw-r--r--libs/ardour/export_channel_configuration.cc3
-rw-r--r--libs/ardour/globals.cc6
-rw-r--r--libs/ardour/import.cc17
-rw-r--r--libs/ardour/io.cc6
-rw-r--r--libs/ardour/mtc_slave.cc13
-rw-r--r--libs/ardour/osc.cc91
-rw-r--r--libs/ardour/panner.cc15
-rw-r--r--libs/ardour/plugin_manager.cc4
-rw-r--r--libs/ardour/rb_effect.cc4
-rw-r--r--libs/ardour/region.cc152
-rw-r--r--libs/ardour/region_factory.cc31
-rw-r--r--libs/ardour/reverse.cc5
-rw-r--r--libs/ardour/route.cc81
-rw-r--r--libs/ardour/send.cc37
-rw-r--r--libs/ardour/session.cc140
-rw-r--r--libs/ardour/session_butler.cc2
-rw-r--r--libs/ardour/session_export.cc1
-rw-r--r--libs/ardour/session_midi.cc5
-rw-r--r--libs/ardour/session_process.cc13
-rw-r--r--libs/ardour/session_state.cc20
-rw-r--r--libs/ardour/session_transport.cc13
-rw-r--r--libs/ardour/sndfileimportable.cc1
-rw-r--r--libs/ardour/sndfilesource.cc9
-rw-r--r--libs/ardour/source_factory.cc2
-rw-r--r--libs/ardour/utils.cc2
-rw-r--r--libs/clearlooks-newer/SConscript (renamed from libs/clearlooks/SConscript)21
-rw-r--r--libs/clearlooks-newer/animation.c (renamed from libs/clearlooks/animation.c)0
-rw-r--r--libs/clearlooks-newer/animation.h (renamed from libs/clearlooks/animation.h)2
-rw-r--r--libs/clearlooks-newer/bits.c121
-rw-r--r--libs/clearlooks-newer/cairo-support.c (renamed from libs/clearlooks/cairo-support.c)228
-rw-r--r--libs/clearlooks-newer/cairo-support.h (renamed from libs/clearlooks/cairo-support.h)2
-rw-r--r--libs/clearlooks-newer/clearlooks_draw.c (renamed from libs/clearlooks/clearlooks_draw.c)1336
-rw-r--r--libs/clearlooks-newer/clearlooks_draw.h17
-rw-r--r--libs/clearlooks-newer/clearlooks_draw_glossy.c (renamed from libs/clearlooks/clearlooks_draw_glossy.c)310
-rw-r--r--libs/clearlooks-newer/clearlooks_draw_gummy.c (renamed from libs/clearlooks/clearlooks_draw_gummy.c)730
-rw-r--r--libs/clearlooks-newer/clearlooks_draw_inverted.c (renamed from libs/clearlooks/clearlooks_draw_inverted.c)169
-rw-r--r--libs/clearlooks-newer/clearlooks_rc_style.c (renamed from libs/clearlooks/clearlooks_rc_style.c)181
-rw-r--r--libs/clearlooks-newer/clearlooks_rc_style.h (renamed from libs/clearlooks/clearlooks_rc_style.h)41
-rw-r--r--libs/clearlooks-newer/clearlooks_style.c (renamed from libs/clearlooks/clearlooks_style.c)1151
-rw-r--r--libs/clearlooks-newer/clearlooks_style.h (renamed from libs/clearlooks/clearlooks_style.h)19
-rw-r--r--libs/clearlooks-newer/clearlooks_theme_main.c (renamed from libs/clearlooks/clearlooks_theme_main.c)4
-rw-r--r--libs/clearlooks-newer/clearlooks_types.h455
-rw-r--r--libs/clearlooks-newer/config.h (renamed from libs/clearlooks/config.h)17
-rwxr-xr-xlibs/clearlooks-newer/cpdll.sh (renamed from libs/clearlooks/cpdll.sh)0
-rw-r--r--libs/clearlooks-newer/ge-support.h (renamed from libs/clearlooks/ge-support.h)1
-rw-r--r--libs/clearlooks-newer/general-support.h (renamed from libs/clearlooks/general-support.h)4
-rw-r--r--libs/clearlooks-newer/support.c (renamed from libs/clearlooks/support.c)43
-rw-r--r--libs/clearlooks-newer/support.h (renamed from libs/clearlooks/support.h)0
-rw-r--r--libs/clearlooks-newer/support.h.orig110
-rw-r--r--libs/clearlooks-newer/widget-information.c (renamed from libs/clearlooks/widget-information.c)199
-rw-r--r--libs/clearlooks-newer/widget-information.h (renamed from libs/clearlooks/widget-information.h)47
-rw-r--r--libs/clearlooks-older/SConscript36
-rw-r--r--libs/clearlooks-older/bits.c121
-rw-r--r--libs/clearlooks-older/clearlooks_draw.c1293
-rw-r--r--libs/clearlooks-older/clearlooks_draw.h159
-rw-r--r--libs/clearlooks-older/clearlooks_rc_style.c392
-rw-r--r--libs/clearlooks-older/clearlooks_rc_style.h57
-rw-r--r--libs/clearlooks-older/clearlooks_style.c2661
-rw-r--r--libs/clearlooks-older/clearlooks_style.h108
-rw-r--r--libs/clearlooks-older/clearlooks_theme_main.c37
-rwxr-xr-xlibs/clearlooks-older/cpdll.sh2
-rw-r--r--libs/clearlooks-older/support.c981
-rw-r--r--libs/clearlooks-older/support.h110
-rw-r--r--libs/clearlooks/clearlooks_draw.h24
-rw-r--r--libs/clearlooks/clearlooks_types.h510
-rw-r--r--libs/gtkmm2ext/dndtreeview.cc4
-rw-r--r--libs/gtkmm2ext/gtk_ui.cc15
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/dndtreeview.h107
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/gtk_ui.h6
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/tearoff.h3
-rw-r--r--libs/gtkmm2ext/popup.cc9
-rw-r--r--libs/gtkmm2ext/tearoff.cc33
-rw-r--r--libs/midi++2/alsa_sequencer_midiport.cc16
-rw-r--r--libs/midi++2/coremidi_midiport.cc2
-rw-r--r--libs/midi++2/midi.cc2
-rw-r--r--libs/midi++2/midimanager.cc41
-rw-r--r--libs/midi++2/midiparser.cc2
-rw-r--r--libs/midi++2/mtc.cc5
-rw-r--r--libs/pbd/command.cc1
-rw-r--r--libs/pbd/pbd/abstract_ui.cc1
-rw-r--r--libs/pbd/pbd/command.h2
-rw-r--r--libs/pbd/pbd/memento_command.h2
-rw-r--r--libs/pbd/pbd/pthread_utils.h7
-rw-r--r--libs/pbd/pbd/shiva.h21
-rw-r--r--libs/pbd/pbd/undo.h22
-rw-r--r--libs/pbd/pthread_utils.cc19
-rw-r--r--libs/pbd/undo.cc67
-rw-r--r--libs/surfaces/control_protocol/basic_ui.cc3
-rw-r--r--libs/surfaces/control_protocol/control_protocol.cc10
-rw-r--r--libs/surfaces/frontier/tranzport/tranzport_control_protocol.cc2
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.cc91
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.h11
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol_poll.cc5
-rw-r--r--libs/surfaces/tranzport/init.cc2
-rw-r--r--libs/surfaces/wiimote/SConscript60
-rw-r--r--libs/surfaces/wiimote/interface.cc73
-rw-r--r--libs/surfaces/wiimote/wiimote.cc289
-rw-r--r--libs/surfaces/wiimote/wiimote.h69
-rw-r--r--libs/vamp-sdk/vamp-sdk/PluginAdapter.cpp3
-rw-r--r--libs/vamp-sdk/vamp-sdk/PluginHostAdapter.cpp2
-rw-r--r--patches/gtk-osx.patch542
-rw-r--r--tools/osx_packaging/Ardour2-SAE.icnsbin0 -> 57885 bytes
-rw-r--r--tools/osx_packaging/InfoPlist.strings.in4
-rwxr-xr-xtools/osx_packaging/sae_ladspa/caps.sobin0 -> 804424 bytes
-rwxr-xr-xtools/osx_packaging/sae_ladspa/cmt.sobin0 -> 313840 bytes
-rwxr-xr-xtools/osx_packaging/sae_ladspa/fast_lookahead_limiter_1913.sobin0 -> 49912 bytes
-rwxr-xr-xtools/osx_packaging/sae_ladspa/gverb_1216.sobin0 -> 78876 bytes
-rwxr-xr-xtools/osx_packaging/sae_ladspa/single_para_1203.sobin0 -> 49876 bytes
-rwxr-xr-xtools/osx_packaging/sae_ladspa/tap_pitch.sobin0 -> 46500 bytes
-rw-r--r--tools/osx_packaging/startup_script24
-rwxr-xr-xtools/resample_session.pl2
-rwxr-xr-xtools/synthesize_sources.pl2
252 files changed, 26596 insertions, 12804 deletions
diff --git a/DOCUMENTATION/.cvsignore b/DOCUMENTATION/.cvsignore
deleted file mode 100644
index 3dda72986f..0000000000
--- a/DOCUMENTATION/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-Makefile.in
-Makefile
diff --git a/DOCUMENTATION/AUTHORS b/DOCUMENTATION/AUTHORS
deleted file mode 100644
index 027521670b..0000000000
--- a/DOCUMENTATION/AUTHORS
+++ /dev/null
@@ -1,78 +0,0 @@
-Paul Davis (Philadelphia, PA) was and is the primary author of Ardour.
-
-Taybin Rutkin (New York, NY) has contributed lots of code, and was
-particularly responsible for the use of XML in the state persistence
-aspect of the program. He also (re)wrote the soundfile library code to
-use LRDF. In addition he was responsible for the integration of the
-gettext system and the compose() templates that make Ardour's
-internationalization possible. He has consistently made suggestions
-that resulted in significantly more elegant code and design. Taybin
-also set up and oversees the Mantis bug reporting system used by all
-of us, and tends to take on "infrastructure" issues such as the switch
-to SCons as the build system.
-
-Jesse Chappell (Washington, DC) keeps on making major contributions to
-Ardour. It almost seems pointless to list the things he has worked on
-because there is so much of it. They include being able to handle
-multichannel tracks, a major change in the program's design and
-capabilities, and many additions/improvements to the GTK GUI,
-including mouse zoom mode and the route params editor. Jesse was the
-first person to just "walk in" and understand the Ardour codebase.
-
-Marcus Andersson (Karlstad, Sweden) contributed a number of useful
-patches and worked on the dB-related issues in the gain stages and
-metering, other numeric computations, and much useful debugging, bug
-reporting and analysis.
-
-Jeremy Hall (Sterling, VA) contributed several patches and worked
-intensively on ksi_ardour, the keystroke-based-interface to libardour
-designed for sight-impaired and GUI-averse users.
-
-Steve Harris (Southampton, UK) contributed code to handle speed-based
-interpolation, an area I did not want to get my head around, as well
-as dithering, panning, metering and other DSP-centric issues. He also
-wrote the LRDF library used by Ardour's soundfile library code, not to
-mention dozens of LADSPA plugins that make Ardour a genuinely useful
-tool.
-
-Tim Mayberry (Brisbane, Australia) did lots and lots and lots of work
-on mouse-driven editing.
-
-Nick Mainsbridge <beatroot@optushome.com.au> is responsible for many
-improvements to the rulers, and several other tweaks.
-
-Colin Law wrote the code that supports Ardour's integration with
-the CMT Animatics engine. He was also very involved in refactoring the
-GUI code design to support different kinds of tracks, thus laying the
-groundwork for extending ardour's domain to include MIDI and video.
-
-Gerard van Dongen (Rotterdam, Netherlands) has done a set of scattered
-but critical work with a vague focus on the mouse. He has made some
-particularly important fixes to the incredibly hairy code that draws
-automation curves. Gerard also helped out with a workshop on Ardour
-held at the Dutch Electronic Arts Festival, Rotterdam, in November
-2004.
-
-Sampo Savolainen became a major contributor of minor patches as Paul
-began working full time for a while. He fixed numerous bugs, some on
-mantis and some not, fairly continuously for several months. He then
-moved on to write SSE assembler routines to handle the CPU-hungry
-metering and mixing routines.
-
-Brian Ahr contributed many small fixes for ardour 2.0.
-
-Smaller (but not necessarily minor) patches were received from the
-following people:
-
- Mark Stewart
- Sam Chessman (Reston, VA)
- Jack O'Quin (Austin, TX)
- Matt Krai
- Ben Bell
- Thomas Charbonnel (Lyon, France)
- Robert Jordens
- Christopher George
- Rob Holland
- Joshua Leachman
- Per Sigmond
- Nimal Ratnayake \ No newline at end of file
diff --git a/DOCUMENTATION/AUTHORS.es b/DOCUMENTATION/AUTHORS.es
deleted file mode 100644
index 93f16773c1..0000000000
--- a/DOCUMENTATION/AUTHORS.es
+++ /dev/null
@@ -1,78 +0,0 @@
-Paul Davis (de Philadelphia, PA) fue y es el principal autor de Ardour.
-
-Taybin Rutkin (de New York, NY) ha contribuido grandes cantidades de
-codigo y fue particularmente responsable por el uso de XML en el
-aspecto de persistencia de estado del programa. Tambien escribio y
-reescribio el codigo relativo a la libreria soundfile (archivo de
-sonido) para que use LRDF. Ademas fue responsable por la integracion
-del sistema gettext y los esquemas compose() que hacen posible la
-internacionalizacion de Ardour. Ha hecho constantes sugerencias las
-cuales resultaron en codigo y disenio significativamente mas elegantes.
-Taybin tambien configuro y administra el sistema Mantis de reporte de
-bugs (errores de codigo) usado por todos nosotros.
-
-Jesse Chappell (de Washington, DC) continua haciendo grandes
-contribuciones a Ardour, particularmente en el hecho de que Ardour sea
-capaz de manejar pistas multicanal, un cambio mayor en el disenio del
-programa y capacidades. Tambien hizo muchos agregados y mejoras a la
-interfaz visual de GTK, incluyendo el modo de zoom mediante mouse y el
-editor de parametros de ruteo. Jessie fue la primera persona en "pasar"
-y entender las bases del codigo de Ardour.
-
-Marcus Andersson (de Karlstad, Sweden) contribuyo un numero de patches
-(actualizaciones) utiles y trabajo con los problemas relacionados a "dB"
-en las etapas de gain (volumen) y vumetros, otras computaciones numericas
-y muy util debugging, reporte de bugs y analisis.
-
-Jeremy Hall (de Sterling, VA) contribuyo varios patches y trabajo
-intensamente con ksi_ardour, que es la interfase basada en teclas de la
-libreria libardour diseniada para no videntes y amantes de lineas de
-comando (consolas).
-
-Steve Harris (de Southampton, UK) contribuyo codigo para manejar
-interpolacion basada en velocidad, un area en la cual no me queria meter,
-asi como dithering, balance, vumetros y otros temas relacionados con
-procesamiento de senial. Tambien escribio la libreria LRDF usada por
-el codigo de Ardour de la libreria soundfile, sin mencionar docenas
-de plugins LADSPA que hacen a Ardour una herramienta genuinamente util.
-
-Tim Mayberry (de Brisbane, Australia) hizo mucho, mucho, mucho trabajo
-en cuanto a edicion basada en mouse.
-
-Nick Mainsbridge <beatroot@optushome.com.au> es responsable de muchas
-mejoras a los medidores/lineas/referencias de tiempo.
-
-Colin Law <> escribio el codigo que soporta la integracion de Ardour
-al sistema de Animatics CMT. Tambien se ocupo en el redisenio del codigo
-de la interfase visual para soportar diferentes tipos de pistas.
-
-Mas pequenios (preo no necesariamente menores) patches fueron recividos
-de las siguientes personas:
-
- Mark Stewart
- Sam Chessman (Reston, VA)
- Jack O'Quin (Austin, TX)
- Matt Krai
- Ben Bell
- Gerard vanDongen (Rotterdam, Netherlands)
- Thomas Charbonnel (Lyon, France)
- Robert Jordens
-
-
-
-
-
-
-
-
-Nota de Traduccion (Spanish Translation Note)
----------------------------------------------
-#Nota del tipeo:la letra pronunciada ENIE aparece en este archivo
-#como ni (letra "n" y letra "i") para mayor compatibilidad con todos
-#los visores de texto.
-#Asi mismo no se han aplicado las tildes(acentos).
-#Estos no son errores de tipeo. Si llegara a encontrar algun otro error
-#en cualquiera de los archivos con extension ".es" por favor
-#hagamelo saber a alexkrohn@fastmail.fm
-# Muchas gracias
-# Alex \ No newline at end of file
diff --git a/DOCUMENTATION/BUILD b/DOCUMENTATION/BUILD
deleted file mode 100644
index b47d3f6794..0000000000
--- a/DOCUMENTATION/BUILD
+++ /dev/null
@@ -1,7 +0,0 @@
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
-
- Full information on building Ardour can be found at:
-
- http://ardour.org/building
-
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
diff --git a/DOCUMENTATION/BUILD.ru b/DOCUMENTATION/BUILD.ru
deleted file mode 100644
index a620209735..0000000000
--- a/DOCUMENTATION/BUILD.ru
+++ /dev/null
@@ -1,215 +0,0 @@
- ëáë óïâòáôø ARDOUR éú éóèïäîùè ôåëóôï÷
- --------------------------------------
-
-ðÏÖÁÌÕÊÓÔÁ ×ÎÉÍÁÎÉÅ: ÐÒÅÖÄÅ ÞÅÍ ÐÒÉÓÔÕÐÉÔØ Ë ÒÁÂÏÔÅ Ó Ardour, ÎÁÊÄÉÔÅ
-×ÒÅÍÑ ÞÔÏÂÙ ÐÏÄÐÉÓÁÔØÓÑ ÎÁ ÓÐÉÓÏË ÒÁÓÓÙÌËÉ ÒÁÚÒÁÂÏÔÞÉËÏ×. üÔÏ ÏÞÅÎØ
-×ÁÖÎÏ, ÐÏÔÏÍÕ ÞÔÏ ÓÏÏÂÝÅÓÔ×Ï ÌÀÄÅÊ, ÉÓÐÏÌØÚÕÀÝÉÈ, ÔÅÓÔÉÒÕÀÝÉÈ É
-ÒÁÚÒÁÂÁÔÙ×ÁÀÝÉÈ Ardour, ÏÂÝÁÀÔÓÑ × ÜÔÏÍ ÓÐÉÓËÅ ÒÁÓÓÙÌËÉ, É Ñ îå âõäõ
-ÏÔ×ÅÞÁÔØ ÎÁ ×ÏÐÒÏÓÙ ÏÔÎÏÓÉÔÅÌØÎÏ ÓÂÏÒËÉ ÉÌÉ ÏÛÉÂÏË × ÒÁÂÏÔÅ Ardour,
-ÅÓÌÉ ÏÎÉ ÎÅ ÂÕÄÕÔ ÚÁÄÁÎÙ × ÜÔÏÍ ÓÐÉÓËÅ. ðÏÄÒÏÂÎÅÅ Ï ÜÔÏÍ ÞÉÔÁÊÔÅ ÎÁ
-ÓÔÒÁÎÉÃÅ http://ardour.sf.net/ ÉÌÉ http://ardour.org/, ÇÄÅ ÕËÁÚÁÎÏ
-ËÁË ÐÏÄÐÉÓÁÔØÓÑ ÎÁ ÓÐÉÓÏË ÒÁÓÓÙÌËÉ.
-
-üÔÏÔ ÄÏËÕÍÅÎÔ ÎÁÐÉÓÁÎ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÅÊ, ÈÏÒÏÛÏ ÚÎÁÀÝÉÈ ÐÒÏÃÅÓÓ ÓÂÏÒËÉ
-ÐÒÏÇÒÁÍÍÎÏÇÏ ÏÂÅÓÐÅÞÅÎÉÑ ÉÚ ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ× Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ÐÁËÅÔÏ×
-GNU automake É autoconf. åÓÌÉ ÷Ù ÎÅ ÚÎÁËÏÍÙ Ó ÜÔÉÍ, ÔÏÇÄÁ ×ÏÚÍÏÖÎÏ ×ÁÍ
-ÐÒÉÄ£ÔÓÑ ÐÏÄÏÖÄÁÔØ ÄÏ ÔÅÈ ÐÏÒ, ÐÏËÁ ÎÅ ÐÏÑ×ÑÔÓÑ ÒÅÌÉÚÙ Ardour, ÎÅ ÔÒÅÂÕÀÝÉÅ
-ÓÂÏÒËÉ ÉÚ ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ× (binary releases).
-
-1) ðòá÷éìøîïå éóðïìøúï÷áîéå GNU AUTOCONF
-----------------------------------------
-
-GNU autoconf ×ÅÓØÍÁ ÍÏÝÎÁÑ ÓÉÓÔÅÍÁ, ÏÄÎÁËÏ Õ ÎÅ£ ÉÍÅÅÔÓÑ ËÁË ÍÉÎÉÍÕÍ
-ÏÄÉÎ ÓÕÝÅÓÔ×ÅÎÎÙÊ ÎÅÄÏÓÔÁÔÏË. ðÏ ÕÍÏÌÞÁÎÉÀ autoconf (aclocal) ×ÅÄ£Ô
-ÐÏÉÓË ÔÒÅÂÕÅÍÙÈ ÆÁÊÌÏ× ÔÏÌØËÏ × ïäîïí ËÁÔÁÌÏÇÅ. üÔÏ ÎÏÒÍÁÌØÎÏ ÒÁÂÏÔÁÅÔ,
-ËÒÏÍÅ ÓÌÕÞÁÅ×, ËÏÇÄÁ × ÓÉÓÔÅÍÅ ÕÓÔÁÎÏ×ÌÅÎÙ ÄÒÕÇÉÅ ÐÁËÅÔÙ, ÒÁÚÍÅÝÁÀÝÉÅ
-Ó×ÏÉ ÆÁÊÌÙ autoconf ÉÌÉ × ËÁÔÁÌÏÇÅ /usr/local/lib/share/aclocal,
-ÉÌÉ /usr/lib/share/aclocal.
-
-÷ ÒÅÚÕÌØÔÁÔÅ, autoconf ÞÁÓÔÏ ÎÅ ÍÏÖÅÔ ÎÁÊÔÉ ÆÁÊÌÙ, ÔÒÅÂÕÅÍÙÅ ÄÌÑ ÓÂÏÒËÉ
-Ardour, Ë ÔÏÍÕ ÖÅ Õ ÍÎÏÇÉÈ ÐÏÌØÚÏ×ÁÔÅÌÅÊ ÏÄÎÏ×ÒÅÍÅÎÎÏ ÉÍÅÀÔÓÑ ËÏÐÉÉ
-ÂÉÂÌÉÏÔÅË, ÕÓÔÁÎÏ×ÌÅÎÎÙÈ ÒÁÚÎÙÍÉ ÓÐÏÓÏÂÁÍÉ: ÉÚ ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ× (ÆÁÊÌÙ
-autoconf ÏÂÙÞÎÏ ÎÁÈÏÄÑÔÓÑ × ËÁÔÁÌÏÇÅ /usr/local/lib...) É ÉÚ ÓÏÂÒÁÎÎÙÈ
-ÐÁËÅÔÏ× (× ÜÔÏÍ ÓÌÕÞÁÅ ÆÁÊÌÙ ÒÁÓÐÏÌÁÇÁÀÔÓÑ × ËÁÔÁÌÏÇÅ /usr/lib...).
-
-òÅËÏÍÅÎÄÕÅÔÓÑ ÕËÁÚÁÔØ ÒÁÓÐÏÌÏÖÅÎÉÅ ËÁÔÁÌÏÇÏ× autoconf ÐÕÔÅÍ ÏÐÒÅÄÅÌÅÎÉÑ
-× ÐÅÒÅÍÅÎÎÏÊ ACLOCAL_FLAGS ×ÓÅÈ ÐÕÔÅÊ ÐÏÉÓËÁ.
-óÎÁÞÁÌÁ ÎÁÊÄÉÔÅ ×ÓÅ aclocal ÄÉÒÅËÔÏÒÉÉ:
- $ locate /aclocal/
-É ÐÒÏ×ÅÒØÔÅ (ÎÁÊÄÉÔÅ) ×ÓÅ ËÁÔÁÌÏÇÉ, ÓÏÄÅÒÖÁÝÉÅ ÆÁÊÌÙ Ó ÒÁÓÛÉÒÅÎÉÅÍ ".m4" .
-úÁÔÅÍ ÚÁÄÁÊÔÅ ÐÅÒÅÍÅÎÎÕÀ ÏËÒÕÖÅÎÉÑ ACLOCAL_FLAGS, ËÁË ÕËÁÚÁÎÏ ÎÉÖÅ
-(× ËÁÞÅÓÔ×Å ÐÒÉÍÅÒÁ):
-
- export ACLOCAL_FLAGS="-I /usr/share/aclocal -I /usr/local/share/aclocal -I /opt/gnome/share/aclocal"
-
-÷Ù ÍÏÖÅÔÅ ÄÏÂÁ×ÉÔØ ÜÔÕ ÓÔÒÏËÕ × ÆÁÊÌÙ .bashrc ÉÌÉ .profile × ×ÁÛÅÍ ÄÏÍÁÛÎÅÍ
-ËÁÔÁÌÏÇÅ, ÏÎÁ ÂÕÄÅÔ ÉÓÐÏÌÎÑÔØÓÑ ËÁÖÄÙÊ ÒÁÚ ÐÒÉ ×ÈÏÄÅ × ÓÉÓÔÅÍÕ.
-
------
-çÒÕÂÏÅ É ÍÅÎÅÅ ÄÅÌÉËÁÔÎÏÅ ÒÅÛÅÎÉÅ, ÏÐÉÓÁÎÎÏÅ ÎÉÖÅ, ÐÏÄÒÁÚÕÍÅ×ÁÅÔ ÓÌÉÑÎÉÅ
-×ÓÅÈ ÄÉÒÅËÔÏÒÉÊ aclocal. üÔÏ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÒÅËÏÍÅÎÄÏ×ÁÎÏ, ÈÏÔÑ ÜÔÏÔ
-×ÁÒÉÁÎÔ ÔÁËÖÅ ÒÁÂÏÔÁÅÔ.
-
-ðÏÖÁÌÕÊÓÔÁ, ÐÒÏ×ÅÒØÔÅ ÓÏÄÅÒÖÉÍÏÅ ÏÂÅÉÈ ÄÉÒÅËÔÏÒÉÊ ÐÅÒÅÄ ÔÅÍ ËÁË ÄÅÌÁÔØ
-"ÓÌÉÑÎÉÅ", ÞÔÏÂÙ ÓÌÕÞÁÊÎÏ ÎÅ ÓÔÅÒÅÔØ ËÏÒÒÅËÔÎÕÀ ×ÅÒÓÉÀ ËÏÐÉÊ ÆÁÊÌÏ×
-autoconf:
-
- * åÓÌÉ Õ ×ÁÓ ÅÓÔØ ÏÂÁ ËÁÔÁÌÏÇÁ:
-
- cd /usr/lib/share/aclocal
- cp *.m4 /usr/local/lib/share/aclocal
- cd ..
- rm -rf aclocal
- ln -s /usr/local/lib/share/aclocal .
-
- * åÓÌÉ ÉÍÅÅÔÓÑ ÔÏÌØËÏ /usr/lib/share/aclocal
-
- cd /usr/local/lib
- ln -s /usr/lib/share/aclocal .
-
-÷ ÎÅËÏÔÏÒÙÅ ÄÉÓÔÒÉÂÕÔÉ×ÁÈ linux aclocal ÎÁÈÏÄÉÔÓÑ × ÒÁÚÌÉÞÎÙÈ ÍÅÓÔÁÈ.
-
-
-2. ëïíðéìñãéñ
--------------
-
-ðÅÒÅÄ ÔÅÍ ËÁË ËÏÍÐÉÌÉÒÏ×ÁÔØ Ardour ÕÂÅÄÉÔÅÓØ, ÞÔÏ Õ ×ÁÓ ÕÓÔÁÎÏ×ÌÅÎÙ
-ÓÌÅÄÕÀÝÉÅ ËÏÍÐÏÎÅÎÔÙ:
-
-* ðÒÏÇÒÁÍÍÙ É ÕÔÉÌÉÔÙ:
-
- gcc/g++ ×ÅÒÓÉÉ 2.95.3 ÉÌÉ ×ÙÛÅ (gcc/g++ 3.x works also)
- autoconf 2.52 ÉÌÉ ×ÙÛÅ
- automake 1.5 ÉÌÉ ×ÙÛÅ
- libtool 1.4.2 ÉÌÉ ×ÙÛÅ
- gettext 0.11.5 ÉÌÉ ×ÙÛÅ
- pkgconfig 0.8.0 ÉÌÉ ×ÙÛÅ
- http://www.freedesktop.org/software/pkgconfig/
- ÔÒÅÂÕÀÔÓÑ ÔÁËÖÅ lex É yacc.
- ÌÀÂÁÑ ×ÅÒÓÉÑ bison >= 1.35 ÄÏÌÖÎÁ ÒÁÂÏÔÁÔØ.
-
-* âÉÂÌÉÏÔÅËÉ:
-
-òÅËÏÍÅÎÄÕÅÍÙÅ ×ÅÒÓÉÉ, ËÏÔÏÒÙÅ ÄÏÌÖÎÙ ÒÁÂÏÔÁÔØ, ÐÏËÁÚÁÎÙ ÎÉÖÅ.
-
- ALSA 0.9.X (CVS ÉÌÉ ÔÅËÕÝÉÊ ÒÅÌÉÚ) (http://www.alsa-project.org)
-
- JACK (http://jackit.sourceforge.net)
-
- libxml2 2.5.X (http://xmlsoft.org/)
-
- libart_lgpl 2.3.X
-
- - ÏÂÙÞÎÏ Ñ×ÌÑÅÔÓÑ ÞÁÓÔØÀ gnome-libs, ËÏÔÏÒÙÅ ËÁË ÐÒÁ×ÉÌÏ
- ÕÖÅ ÕÓÔÁÎÏ×ÌÅÎÙ
-
- - × ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ ×Ù ÍÏÖÅÔÅ ÚÁÇÒÕÚÉÔØ ÂÉÂÌÉÏÔÅËÕ Ó FTP-ÓÁÊÔÁ
- ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ× GNOME.
- - ÓÍ. ftp://ftp.gnome.org/pub/GNOME/MIRRORS.html
- É ÉÝÉÔÅ × sources/libart_lgpl
-
- glib 1.2 (http://www.gtk.org)
- glib-1.2.8 (×ËÌÀÞÅÎÏ × ÂÏÌØÛÉÎÓÔ×Ï ÄÉÓÔÒÉÂÕÔÉ×Ï×)
-
- GTK+ 1.2 (http://www.gtk.org)
- gtk+-1.2.8 (×ËÌÀÞÅÎÏ × ÂÏÌØÛÉÎÓÔ×Ï ÄÉÓÔÒÉÂÕÔÉ×Ï×)
-
- libsndfile (http://www.zip.com.au/~erikd/libsndfile)
- libsndfile-1.0 ÉÌÉ ×ÙÛÅ
-
- libsamplerate (http://www.mega-nerd.com/SRC/)
- libsamplerate 0.0.13 ÉÌÉ ×ÙÛÅ
-
- the LADSPA SDK (http://www.ladspa.org/)
- (ÓÍ. ÎÉÖÅ)
-
- raptor (http://www.redland.opensource.ac.uk/raptor/)
-
- lrdf (needs raptor) (http://plugin.org.uk/lrdf/)
- liblrdf 0.4.0 ÉÌÉ ×ÙÛÅ
-
-õÓÔÁÎÏ×ËÁ LADSPA
-----------------
-
-óÅÇÏÄÎÑ ÏÐÉÓÁÎÉÅ ÉÎÔÅÒÆÅÊÓÁ Linux Audio Developers Simple Plugin API
-(LADSPA) ÓÏÄÅÒÖÉÔ ÔÏÌØËÏ ÚÁÇÏÌÏ×ÏÞÎÙÊ ÆÁÊÌ (header file), ËÏÔÏÒÙÊ
-ÕÖÅ ×ËÌÀÞ£Î × ÄÅÒÅ×Ï ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ× Ardour.
-
-ôÅÍ ÎÅ ÍÅÎÅÅ, ×Ù ÍÏÖÅÔÅ ÚÁÈÏÔÅÔØ ÕÓÔÁÎÏ×ÉÔØ É ÍÏÄÕÌÉ LADSPA plugins,
-ËÏÔÏÒÙÅ ×ÈÏÄÑÔ × ÓÏÓÔÁ× ÐÏÌÎÏÇÏ ÐÁËÅÔÁ LADSPA SDK. åÇÏ ÍÏÖÎÏ ÎÁÊÔÉ É
-ÚÁÇÒÕÚÉÔØ (ÒÁÚÍÅÒ ÐÁËÅÔÁ ÎÅÂÏÌØÛÏÊ) ÐÏ ÁÄÒÅÓÕ www.ladspa.org.
-
-ôÁËÖÅ, Ñ ÒÅËÏÍÅÎÄÕÀ ÚÁÇÒÕÚÉÔØ ÐÒÅËÒÁÓÎÙÊ ÎÁÂÏÒ ÍÏÄÕÌÅÊ (plugins) LADSPA
-ÏÔ Steve Harris Ó ÓÁÊÔÁ http://plugin.org.uk/. üÔÏ ÎÁÍÎÏÇÏ ÐÏ×ÙÓÉÔ
-ÐÏÌÅÚÎÙÅ ×ÏÚÍÏÖÎÏÓÔÉ Ardour. óÏ ×ÒÅÍÅÎÅÍ ÐÏÑ×ÑÔÓÑ É ÄÒÕÇÉÅ ÍÏÄÕÌÉ LADSPA,
-ÞÔÏÂÙ ÂÙÔØ × ËÕÒÓÅ - ÓÌÅÄÉÔÅ ÚÁ ÁÎÏÎÓÁÍÉ × ÓÐÉÓËÅ ÒÁÓÓÙÌËÉ Linux Audio
-Development.
-
-2A) ëÏÍÐÉÌÉÒÏ×ÁÎÉÅ ÉÚ CVS
--------------------------
-
-úÁÇÒÕÚÉÔÅ ÉÌÉ ÏÂÎÏ×ÉÔÅ ÄÅÒÅ×Ï ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ× Ardour ÉÚ CVS. (÷ ÐÒÉ×ÅÄ£ÎÎÏÍ
-ÎÉÖÅ ÐÒÉÍÅÒÅ ÓÉÍ×ÏÌ '%' ÏÚÎÁÞÁÅÔ ÐÒÉÇÌÁÛÅÎÉÅ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ):
-
-% cd /usr/local/src # × ËÁÞÅÓÔ×Å ÐÒÉÍÅÒÁ, ×Ù ÍÏÖÅÔÅ ÓÄÅÌÁÔØ ÜÔÏ ÇÄÅ
- ÐÏÖÅÌÁÅÔÅ
-% cvs -d:pserver:anoncvs@ardour.org:/cvsroot/ardour login
- # (ÎÁÖÍÉÔÅ Enter/Return ËÏÇÄÁ ÐÏÑ×ÉÔÓÑ ÐÒÉÇÌÁÛÅÎÉÅ
- Ë ××ÏÄÕ ÐÁÒÏÌÑ)
-% cvs -d:pserver:anoncvs@ardour.org:/cvsroot/ardour -z3 co ardour
-
-2A.1) þåí òáúìéþáàôóñ óðïóïâù óâïòëé éú CVS ?
----------------------------------------------
-éÔÁË, ×ÁÍ ÎÕÖÎÏ ÒÅÛÉÔØ, Ñ×ÌÑÅÔÅÓØ ÌÉ ×Ù ÒÁÚÒÁÂÏÔÞÉËÏÍ ardour ÉÌÉ
-ÐÏÌØÚÏ×ÁÔÅÌÅÍ. åÓÌÉ ×Ù ÏÔÎÏÓÉÔÅ ÓÅÂÑ Ë ÐÅÒ×ÙÍ ÉÚ ÐÅÒÅÞÉÓÌÅÎÎÙÈ, ÔÏ ×ÏÚÍÏÖÎÏ
-ÕÓËÏÒÉÔØ ÒÁÂÏÔÕ, ÓÏÂÒÁ× ÂÉÂÌÉÏÔÅËÕ libardour ËÁË ÒÁÚÄÅÌÑÅÍÕÀ. üÔÏ ÐÏÚ×ÏÌÉÔ
-ÉÚÂÁ×ÉÔØÓÑ ÏÔ ÐÅÒÅÌÉÎËÏ×ËÉ ÐÏÓÌÅ ËÁÖÄÏÇÏ ×ÎÅÓÅÎÉÑ ÉÚÍÅÎÅÎÉÊ × ÜÔÕ ÂÉÂÌÉÏÔÅËÕ.
-åÓÌÉ ×Ù ÐÒÏÓÔÏ ÐÏÌØÚÏ×ÁÔÅÌØ, ÜÔÏÔ ÛÁÇ ÌÉÛØ ÏÓÌÏÖÎÉÔ ×ÁÍ ÖÉÚÎØ. éÔÁË,
-ÅÓÌÉ ×Ù ÒÁÚÒÁÂÏÔÞÉË, ÔÏÇÄÁ ×ÙÐÏÌÎÉÔÅ ÓÌÅÄÕÀÝÕÀ ËÏÍÁÎÄÕ:
-
- touch ardour/libs/ardour/BUILD_FOR_DEVELOPMENT
-
-ôÅÐÅÒØ ÂÉÂÌÉÏÔÅËÁ libardour ÂÕÄÅÔ ÓËÏÍÐÉÌÉÒÏ×ÁÎÁ ËÁË ÒÁÚÄÅÌÑÅÍÁÑ (shared).
-ôÁËÖÅ ×Ù ÄÏÌÖÎÙ ÉÓÐÏÌØÚÏ×ÁÔØ ËÌÀÞ --enable-development-build × ËÏÍÁÎÄÅ
-configure.
-
-2A.2) ðïäçïôï÷ëá ë óâïòëå éú éóèïäîùè ôåëóôï÷
----------------------------------------------
-
-óÏÚÄÁÊÔÅ autoconf/automake ÆÁÊÌÙ:
-
-% cd ardour
-% sh autogen.sh
-
-ôÅÐÅÒØ ÐÅÒÅÈÏÄÉÍ Ë ÐÕÎËÔÕ 3.
-
-2B) óâïòëá éú áòèé÷á éóèïäîùè ôåëóôï÷ (tar.gz)
-----------------------------------------------
-
-÷Ó£ ËÁË ÏÂÙÞÎÏ, ÚÁÇÒÕÚÉÔÅ É ÒÁÓÐÁËÕÊÔÅ ÁÒÈÉ×. æÁÊÌÙ ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ×
-ÂÕÄÕÔ ÎÁÈÏÄÉÔØÓÑ × ËÁÔÁÌÏÇÅ Ó ÉÍÅÎÅÍ ardour-<ÎÏÍÅÒ ×ÅÒÓÉÉ>.
-
-3) ëáë óëïíðéìéòï÷áôø
----------------------
-
- ./configure (Ó ÌÀÂÙÍÉ ÏÐÃÉÑÍÉ ËÏÔÏÒÙÅ ÐÏÖÅÌÁÅÔÅ)
- make
- make install
-
-åÓÌÉ ×Ù Ñ×ÌÑÅÔÅÓØ ÒÁÚÒÁÂÏÔÞÉËÏÍ É ÎÁÍÅÒÅ×ÁÅÔÅÓØ ÐÏÒÁÂÏÔÁÔØ ÎÁÄ libardour,
-ÉÓÐÏÌØÚÕÊÔÅ ÏÐÃÉÀ --enable-development-build, ËÏÔÏÒÁÑ ×ËÌÀÞÁÅÔ ÄÉÎÁÍÉÞÅÓËÕÀ
-ÌÉÎËÏ×ËÕ ardour É ÅÇÏ ÂÉÂÌÉÏÔÅË. üÔÏ ÐÏÚ×ÏÌÉÔ ÓÜËÏÎÏÍÉÔØ ×ÒÅÍÑ, ÔÁË ËÁË
-ÐÏÚ×ÏÌÉÔ ÉÚÂÅÖÁÔØ ÍÅÄÌÅÎÎÏÊ ÐÒÏÃÅÄÕÒÙ ÓÔÁÔÉÞÅÓËÏÊ ÌÉÎËÏ×ËÉ ËÁÖÄÙÊ ÒÁÚ, ËÁË
-×Ù ÐÏÍÅÎÑÅÔÅ ÞÔÏ-ÌÉÂÏ × libardour.
-
-åÓÌÉ ×Ù ÈÏÔÉÔÅ ÓËÏÍÐÉÌÉÒÏ×ÁÔØ Ardour ÔÁË, ÞÔÏÂÙ × ÄÁÌØÎÅÊÛÅÍ ÅÇÏ ÍÏÖÎÏ
-ÂÙÌÏ ÚÁÐÕÓÔÉÔØ × ÏÔÌÁÄÞÉËÅ, ÉÓÐÏÌØÚÕÊÔÅ ÏÐÃÉÀ --disable-optimize.
-÷ ÐÒÏÔÉ×ÎÏÍ ÓÌÕÞÁÅ Ardour ÂÕÄÅÔ ÓÏÂÒÁÎ Ó ÍÁËÓÉÍÁÌØÎÏÊ ÏÐÔÉÍÉÚÁÃÉÅÊ,
-ÞÔÏ ÐÏÍÅÛÁÅÔ ÜÆÆÅËÔÉ×ÎÏÊ ÏÔÌÁÄËÅ.
-
-ëÁË ÏÂÙÞÎÏ × ËÏÍÁÎÄÅ ./configure ×Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÏÐÃÉÉ --prefix
-É --sysconfdir, ÞÔÏÂÙ ÉÚÍÅÎÉÔØ ÒÁÓÐÏÌÏÖÅÎÉÅ ÆÁÊÌÏ× ÐÒÏÇÒÁÍÍÙ. ïÎÉ ÂÕÄÕÔ
-ÐÏÍÅÝÅÎÙ ÐÏ ÕËÁÚÁÎÎÙÍ ÐÕÔÑÍ ËÏÍÁÎÄÏÊ "make install".
-
-ëÏÍÐÉÌÉÒÏ×ÁÎÉÅ ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ× ÍÏÖÅÔ ÚÁÎÑÔØ ÎÅËÏÔÏÒÏÅ ×ÒÅÍÑ. ë ÐÒÉÍÅÒÕ,
-Ó ËÌÀÞÏÍ - j3 ÎÁ ÓÉÓÔÅÍÅ dual PII-450 ÚÁÎÉÍÁÅÔ ÏËÏÌÏ 20 ÍÉÎÕÔ.
diff --git a/DOCUMENTATION/CONTRIBUTORS b/DOCUMENTATION/CONTRIBUTORS
deleted file mode 100644
index d4b3f441c0..0000000000
--- a/DOCUMENTATION/CONTRIBUTORS
+++ /dev/null
@@ -1,62 +0,0 @@
-In addition to those listed in the AUTHORS file, the following people
-are among those who offered financial support, design insights and
-ideas, encouragement, feedback, bug reports and much more during
-Ardour's pre-release development. They generally suffered from days of
-frustration, and withstood hundreds of CVS revisions without
-complaint.
-
-No thanks or praise is sufficient for their contributions to Ardour.
-
-(in no particular order)
-
-Joe Hartley
-Marek Peteraj
-Ryan Gallagher
-Rob Holland
-Jan Depner
-Bryan Koschmann
-Patrick Shirkey
-Rob Fell
-Ant <avan@uwm.edu>
-Chris Ross
-Joshua Pritikin
-Rohan Drape
-Johan De Groote
-Bob Ham
-Petter Sundlöf
-
-I would particularly like to recognize:
-
-Frank Carmickle
- - first financial supporter of Ardour,
- instigator of ardour/ksi.
-
-Ron Parker (Minneapolis, MN)
- - first user of Ardour in a commercial studio,
- financial contributor, major initiator of
- MTC and MMC functionality.
-
-DuWayne Holsbeck
- - an early financial and infrastructure sponsor
-
-Havoc Pennington & Owen Taylor
- - provided much assistance in understanding, diagnosing and
- cajoling GTK+.
-
-Tom Pincince (Shasta, CA)
- - provided continuous, excellent design insights and
- rationalizations, as well as info on the operation of some
- existing DAW's.
-
-I would also like to thank Jim Hamilton of Rittenhouse Recording,
-Philadelphia, for the partnership, friendship and foresight he showed
-in allowing me to use the studio as the development basis for
-Ardour. I met Jim playing a jazz drumkit at a fundraiser to celebrate
-the 30th anniversary of our children's nursery school. Since then, he
-has continued to open my eyes to both music itself, the process of
-making music, and the life of a working musician. Jim's the best and
-most inventive percussionist I have ever seen, and one of the best
-I've ever heard. He has always believed in the social and philosphical
-implications of Ardour, and his support and interest have been vital
-in Ardour's development. Although as of this writing, Rittenhouse
-Recording is not running Ardour, its only a matter of time!
diff --git a/DOCUMENTATION/CONTRIBUTORS.es b/DOCUMENTATION/CONTRIBUTORS.es
deleted file mode 100644
index 73c49c8469..0000000000
--- a/DOCUMENTATION/CONTRIBUTORS.es
+++ /dev/null
@@ -1,82 +0,0 @@
-Ademas de aquellos que aparecen mencionados en el archivo AUTHORS.es,
-las siguientes personas estan entre aquellas que ofrecieron soporte
-financiero, observaciones de disenio e ideas, animo, aportes, reportes
-de bugs (errores en codigo) y mucho mas durante el desarrollo del
-pre lanzamiento de Ardour. Generalmente, ellos sufrieron de dias de
-frustracion y soportaron cientas de revisiones de CVS sin quejas.
-
-Ninguna plegaria o agradecimiento posible es suficiente por sus
-contribuciones a Ardour.
-
-(en ningun orden en particular)
-
-Joe Hartley
-Marek Peteraj
-Ryan Gallagher
-Rob Holland
-Jan Depner
-Bryan Koschmann
-Patrick Shirkey
-Rob Fell
-Ant <avan@uwm.edu>
-Chris Ross
-Joshua Pritikin
-Rohan Drape
-Johan De Groote
-Bob Ham
-
-Quisiera destacar particularmente a:
-
-Frank Carmickle
- - primer brinadador de soporte financiero a Ardour,
- instigador de ardour/ksi.
-
-Ron Parker (de Minneapolis, MN)
- - primer usuario de Ardour en un estudio comercial,
- contribuidor financiero, iniciador mayor de
- funcionalidad MTC and MMC.
-
-DuWayne Holsbeck
- - dominio de disenio de sponsors linuxaudiosystems.com ,
- configuro la base de datos bugzilla y mas.
-
-Havoc Pennington & Owen Taylor
- - brindaron mucha asistencia en cuanto a comprension,
- diagnostico y simplificacion de GTK+.
-
-Tom Pincince (de Shasta, CA)
- - contribuyo continuas y exceles observaciones de disenio y
- racionalizaciones, asi como informacion acerca de
- estaciones de trabajo de audio digital existentes.
-
-Tambien quisiera agradecer a Jim Hamilton de Rittenhouse Recording,
-Philadelphia, for el companierismo, amistad y vision que demostro
-al permitirme usar el estudio como base de desarrollo para Ardour.
-Conoci a Jim tocando percusion jazz en un evento de recaudacion de
-fondos para celebrar el 30imo aniversario de la guarderia escolar de
-nuestros hijos. Desde entonces me ha abierto los ojos a ambos, la musica
-misma, el proceso de hacer musica y la vida de un musico trabajando.
-Jim es el mejor y mas inventivo percusionista que haya visto, y uno
-de los mejores que he oido. El siempre ha creido en las implicaciones
-filosoficas y sociales de Ardoury su soporte e interes han sido vitales
-en el desarrollo de Ardour. Es solo cuestion de tiempo hasta que
-Rittenhouse Recording use Ardour.
-
-
-
-
-
-
-
-
-Nota de Traduccion (Spanish Translation Note)
----------------------------------------------
-#Nota del tipeo:la letra pronunciada ENIE aparece en este archivo
-#como ni (letra "n" y letra "i") para mayor compatibilidad con todos
-#los visores de texto.
-#Asi mismo no se han aplicado las tildes(acentos).
-#Estos no son errores de tipeo. Si llegara a encontrar algun otro error
-#en cualquiera de los archivos con extension ".es" por favor
-#hagamelo saber a alexkrohn@fastmail.fm
-# Muchas gracias
-# Alex \ No newline at end of file
diff --git a/DOCUMENTATION/FAQ b/DOCUMENTATION/FAQ
deleted file mode 100644
index 6ac38e8f2f..0000000000
--- a/DOCUMENTATION/FAQ
+++ /dev/null
@@ -1,613 +0,0 @@
-The Ardour FAQ
-January 23, 2004
-
---Problems--
-1.1. Why can't I get configure to run when ...
-1.2. I'm getting syntax errors during build.
-1.3. I get the warning: "Gtk-WARNING **: Unable to locate image file in
-1.4. What's an xrun?
-1.5. The region area overlaps the buttons in the editor.
-1.6. Ardour keeps freezing. Here's the strace...
-1.7. What is "ardev" and why is it a shell script?
-1.8. How do I debug this thing?
-1.9. I want Ardour to run faster.
-
---Features--
-2.1. Are plugins supported?
-2.2. Are VST plugins supported?
-2.3. Does Ardour run on non-Linux systems?
-2.4. Ardour needs to have this feature now.
-2.5. Why doesn't Ardour support MP3s?
-2.6. Does Ardour support MIDI?
-2.7. What soundfile formats are supported?
-2.8. Can I use multiple cards?
-2.9. How do I save captures across partitions?
-
---Usability--
-3.1. How do I pan stereo outputs?
-3.2. Where's the patch bay?
-3.3. How do I do stuff?
-
---Misc--
-4.1. What's the deal with JACK, LAAGA, and Audioengine?
-4.2. Is Ardour internationalized?
-4.3. How do I get support?
-4.4. Well, where's the manual?
-4.5. Why are all these libraries included? I already have ...
-4.6. Why not another frontend to libardour? Why not QT?
-
---------------------------------------------------------------------------------
-
---Problems--
-1.1. Why can't I get configure to run when ...
-
-You can only run configure at the top level of the Ardour source
-tree. You don't want to know why this is true. Don't try to work
-around it.
-
-1.2. I'm getting syntax errors during build.
-
-This probably means that you are using an out of date library. Or you
-might be using a very new library that has changed its API. Check the
-version number. If it is lower than what is listed in the BUILD file,
-update your library. If it is higher than what is listed in the BUILD file,
-email the mailing list. Note that you have to be a member of the mailing
-list to send mail to it, which is done to prevent the list from receiving
-much spam.
-
-1.3. I get the warning: "Gtk-WARNING **: Unable to locate image file in
- pixmap_path: "set-next-button.xpm"
-
-The most common cause of this error is simply that you have not set
-the pixmap pathname correctly. It can be specified in the Ardour
-config file. See the BUILD file.
-
-1.4. What's an xrun?
-
-It's a generic term used to describe a situation where the software
-did not keep up with the hardware, either by feeding it data, or by
-collecting data from it. It generally means that you're having
-trouble with latency. This can be caused by several factors. You
-could have a misconfigured system, you might be trying to do to much,
-or both.
-
-If you're haven't read http://www.linuxdj.com/audio/lad/resourceslatency.php3,
-then your system is probably misconfigured.
-
-If you are running many many tracks, with multiple LADSPA plugins, then it
-is possible that your system just can't keep up with what you want to do.
-Either simplify your music, or upgrade your machine. A dual processor does
-wonders.
-
-You can test your setup with the latencytest tool, available at
-http://www.linuxdj.com .
-
-Jan Depner's HOWTO is loaded with latency tuning tips for Ardour:
-http://myweb.cableone.net/eviltwin69/ALSA_JACK_ARDOUR.html
-
-1.5. The region area overlaps the buttons in the editor.
-
-Make sure that you are using the appropriate font size for your monitor's
-resolution. If you are running at 1024x768 or below, you should use the
-75dpi package, not the 100dpi. This is usually set in /etc/X11/XF86Config.
-
-1.6. Ardour keeps freezing. Here's the strace...
-
-The results from strace aren't very useful. To provide helpful information
-to the developers, run Ardour under gdb. If you don't know how to use
-gdb, this isn't the time to learn. If you do know how to use gdb, read
-section 1.8.
-
-1.7. What is "ardev" and why is it a shell script?
-
-This is only applicable if configure was run with --enable-development-build.
-
-To speed up the process of developing Ardour, we do not statically
-link Ardour and its library, libardour. Instead, we use dynamic
-linking, which allows the developers to avoid the (very) long
-relinking step when they make certain kinds of changes to libardour.
-
-This means that the executable image for Ardour relies on the system
-being able to find libardour whenever you start it. Rather than leave
-this to chance and/or the whims of your system adminstrator (probably
-yourself), we instead use a short shell script to make sure that the
-connection between the two of them can be established.
-
-This has almost zero impact on any aspect of Ardour's operation. The
-only noticeable effect is that it makes debugging slightly more
-difficult. See 1.8 for more on this.
-
-1.8. How do I debug this thing?
-
-+-------------------------------------------------------------------------+
-| NOTE: Newer versions of gdb and/or glibc and/or the kernel have broken
-| gdb in a critical way that make it impossible to run ardour. The gdb
-| development group claim to have fixed this, but on many
-| distributions, the version that is provided is still broken.
-|
-| Under such circumstances, you will have to get a core dump from
-| ardour, and then use gdb to analyse the core dump, rather than
-| using gdb as a "live tool".
-|
-| Many distributions set the default core dump size to 0, to prevent
-| core dumps completely. So the first step is to do enter this
-| at your shell prompt (in a terminal window):
-|
-| ulimit -c 9999999999
-|
-| Then run ardour in whatever way causes a crash. after the crash
-| you should find a file called "core" in your working directory.
-| then run:
-|
-| gdb ardour core
-|
-| When the gdb> prompt appears, type
-|
-| backtrace
-|
-| Collect the output, and file it as an attachment to a Mantis
-| bug report at http://ardour.org/mantis
-|
-| Thanks for helping to improve Ardour.
-+------------------------------------------------------------------------+
-
-A) How to start gdb ....
-
-A1) IF YOU DID NOT USE --enable-development-build
-
-You can use gdb the usual way:
-
- % cd /where/you/built/ardour
- % gdb ardour
-
-
-A2) IF YOU USE --enable-development-build
-
-The first and most basic thing you need to know is how to invoke
-gdb. Because of the dynamic linking between Ardour and its library you
-can't just invoke Ardour and get it to work. Besides, "ardour" itself
-is a shell script (see 1.10 for more on this). So, what you need to do
-is to invoke gdb with LD_LIBRARY_PATH set to point to the place where
-libardour is installed, and use the name of actual executable image.
-
-If you installed in the default location, this command will invoke gdb
-correctly:
-
- env LD_LIBRARY_PATH=/usr/local/lib/ardour gdb /usr/local/lib/ardour/ardourx
-
-If you used a --prefix argument during the build process so that
-Ardour would be installed somewhere other than under /usr/local, then
-replace /usr/local in the command above with whatever "prefix" you
-used.
-
-You could easily make the above a shell alias or a 1 line shell script
-if you think you'll be debugging Ardour with gdb a lot.
-
-A3) ABOUT LADSPA PLUGINS AND GDB
-
-Moving all your LADSPA plugins out of the way will make gdb very much
-quicker to start. For example, if you normally keep them in
-/usr/local/lib/ladspa, you could do something like:
-
- mkdir /usr/local/lib/LADSPA
- mv /usr/local/lib/ladpsa/* /usr/local/lib/LADSPA
-
-gdb doesn't do very well when forced to handle dozens of dynamically
-loaded objects, as typically happens with LADSPA plugins.
-
-It might be easier to redefine LADSPA_PATH to a dummy path.
-
-B) What to do with gdb
-
-When Ardour has crashed or is "stuck", issue the following command
-to gdb (you will need to use Ctrl-C if its "stuck" to get back to the
-gdb command prompt):
-
- thread apply all bt
-
-collect the output from this, and then go to
-
- http://ardour.org/mantis
-
-and file a new bug report with the output attached. This will allow
-us to get the most out of your misfortune.
-
-If you compiled ardour from source and want to be even more helpful,
-recompile it after running
-
- ./configure --disable-optimize
-
-at the top level. This will make the debugging output more useful.
-
-1.9. I want Ardour to run faster.
-
-The --enable-optimize flag is enabled by default which turns
-on compiler features that can make Ardour run up to 50% faster.
-If you downloaded Ardour as a binary package, it should have been
-compiled with that flag already.
-
---Features--
-2.1. Are plugins supported?
-
-LADSPA plugins are supported. To use them, click the middle mouse
-button in the top box at the top of the mixerstrip you wish to have a
-plugin for. This opens up a window which lists all the plugins. Double
-click on the one you wish to use. In the mixer window, click on the
-plugin to toggle it on and off, option-click to edit its values, or
-shift-click to remove it.
-
-2.2. Are VST plugins supported?
-
-There are several issues here:
-
-1) Generic VST support
-
- Many people have asked about VST support within Ardour. Work has been
- done on this, but there are both license issues and technical
- ones. The licensing issues seem relatively easy to resolve.
-
- On the technical front, given that the goal is to not require VST
- developers to build new native Linux versions of their plugins, the
- most promising approach involves using Wine to support native
- Windows VST plugins. It is already possible to run most VST plugins as
- JACK clients and thus use them as inserts with Ardour, but the process
- of doing so is not what most users would term "convenient".
-
- However, Wine cannot currently be used within a complex
- multithreaded application. The Wine development team are working on
- this, and as a rough guess, I'd expect progress within about 6 months
- (i.e end of 2003). At that time, it will be possible to use most VST
- plugins that have their own GUI ("editor") from within Ardour.
-
- However, initially, this functionality will be available only as
- part of a for-cost distribution of Ardour.
-
-2) Specific plugins
-
- a) executable format issues
-
- Plugins are pieces of executable code. The format used for
- the files that store this code is different under windows
- and macos than it is for linux. Some people have managed
- to find workarounds for this --- there are reports of people
- running windows-derived buzz plugins under linux, but nobody
- has looked into trying it with vst plugins.
-
- Linux also runs on a lot more hardware than windows or MacOS.
- We assume that when you say linux, you mean "linux on an intel
- compatible processor", but keep in mind that to most of us,
- linux means more than that --- it includes the PPC, Sparc, Alpha,
- ARM, MIPS and many other chip architectures. Of that list,
- only PPC has any VST plugin support at all.
-
- This problem would go away if a VST plugin was available as source
- code, but to my knowledge, only 1 is (freeverb).
-
- b) OS dependency issues
-
- Most VST plugin writers do not follow Steinberg's design advice,
- and write plugins that have operating system dependencies. As
- a result, even if you could find a way to actually use, say,
- a windows-format VST plugin on Linux on an Intel machine, the
- plugin would contain calls to operating system services that
- don't exist (in the same way) under Linux.
-
-So, the basic answer is "no". I am an active member of the VST-plugins
-mailing list, and I try to encourage people who write free plugins to
-make their source code available so that we can use it under Linux, as
-well as reminding people to try to avoid operating system dependencies
-in their plugins. I think this mostly falls on deaf ears.
-
-2.3. Does Ardour run on non-Linux systems?
-
-Ardour depends on the JACK system to access the sound hardware. Jack
-has (as of this writing) support for Linux, Solaris, and MacOSX. There
-have not been any reports of running Ardour on any platforms besides Linux
-though.
-
-In addition, Ardour has abstracted the JACK dependency, so it can be ported
-to use another sound library. But at the time, it only uses the JACK
-library. The JACK website is http://jackit.sf.net/.
-
-2.4. Ardour needs to have this feature now.
-
-Paul accepts donations through his paypal account. The feature will
-(probably) be added more quickly if you pay him. Contact him first.
-
-2.5. Why doesn't Ardour support MP3s?
-
-Ardour is meant for serious audio work. MP3 is a lossy format
-unsuitable for this. Ardour does export sessions to wav format, which
-is trivial to convert to MP3.
-
-2.6. Does Ardour support MIDI?
-
-Ardour currently supports MIDI in the sense of:
-
- * functioning as a MIDI Timecode master (it generates MTC)
- * functioning as a MIDI Timecode slave (experimental; send reports!)
- * understanding MIDI Machine Control
- * allowing the user to bind GUI controls (sliders, etc.) to
- MIDI Continuous Controller and NoteOn/NoteOff messages
-
-It does not offer any facilities for editing or arranging or recording
-or playing MIDI data. There has been talk of integrating Midi
-Mountain, an excellent midi editor. There hasn't been any progress in
-this direction lately, mostly due to other areas that need to be fixed
-up. It's not a trivial affair if the integration is going to proceed
-in a way leaves the result feeling "natural".
-
-2.7. What soundfile formats are supported?
-
-It depends on what version of libsndfile is installed. This link lists the
-latest formats: http://www.mega-nerd.com/libsndfile/#Features
-
-Please note that Ardour requires the 1.x series of libsndfile.
-
-2.8. Can I use multiple cards?
-
-In a word: maybe.
-
-The sync issues that arise even between the same make and model of a card
-aren't worth the effort of fixing. If you want to have more than two
-channels, buy a professional card.
-
-On the other hand, if you already have two professional cards with word-sync,
-you might be able to get them to work. This is several layers removed from
-Ardour; the proper place to ask for help is at http://www.alsa-project.org .
-
-There is more information at http://www.linuxdj.com/audio/quality/#multi
-
-2.9. How do I save captures across partitions?
-
-Ardour lets you specify multiple directories to save captured audio
-in. In the options editor, in the session path box, specify the full
-paths of the directories you wish to use, seperated by colons (:).
-These can be on different partitions or even different disks. Using
-this "software RAID"-like setup can greatly increase your disk
-bandwidth.
-
---Usability--
-3.1. How do I pan stereo outputs?
-
-Panning works over JACK ports. So even if you have two outputs
-connected to one port, Ardour doesn't consider this to be stereo. You
-need to make sure that you have two ports, and then add one (or more)
-destination to each port.
-
-You need to think of the ports as if they were physical sockets to
-which you can connect as many plugs as you want. A single port means
-mono, even though you can send the signal to many different
-places. Two ports means stereo, even though the right and left signals
-can each go to any number of different places.
-
-3.2. Where's the patch bay?
-
-There is no separate dedicated patch bay. Patch bay functionality
-is integral to the mixer. The mixer can have any number of inputs,
-any number of busses, etc. In other words, it *is* the patchbay.
-
-3.3. How do I do stuff?
-
-Region Dragging (object mode)
------------------------------
-
- click-drag => moves region
- shift-click-drag => moves region with time position held constant
- (i.e. across tracks)
- ctl-click-drag => moves a copy of the region
- ctl-shift-click-drag => time-constrained movement of a copy of the
- region
- snapmod-click-drag => ignores current snap setting
-
-Region Alignment (clicks without motion)
-----------------
-
- [ all alignment uses:
-
- 1) current region selection, if it exists
- 2) else the edit cursor
- ]
-
- ctl-click => aligns start of region
- ctl-shift-click => aligns end of region
- ctl-alt-click => aligns sync point of region
-
-Marks
------
-
- click in tempo track to create a new tempo mark
- click in meter track to create a new meter mark
- click in marker track to create a new marker
- regular edit op for tempo/meter allows editing
- regular delete op for all markers (except initial
- tempo/meter markers)
- snapmod-click-drag to move a marker while ignoring
- current snap mode
-
-Editing
--------
-
- default is ctl-button3 click
-
-
-Deletion
---------
-
- default is shift-button3 click
-
-Context Menu
-------------
-
- button3 click
-
-Snap Modifier
--------------
-
- default is mod3 (typically meta/windows/start key). using
- ctl or shift or alt will cause problems. you can also
- use combinations, but again, combinations using ctl and shift
- will cause problems. mod3 or mod4 are probably your best
- choices.
-
-Selection (RANGE MODE required)
----------
-
- click on a region => make a region selection
- shift-click on a region => add region to region selection
- click-drag => make a range selection
- shift-click-drag => add to range selection
- ctrl-click-drag => move selection
-
-Separation
-----------
-
- in range mode:
-
- a) make a single range selection
-
- then, to split existing region apart
-
- b) right click => Selection => Separate region
-
- OR, to creates a new region without splitting original
-
- b) switch to object mode
- c) click on selection and drag
-
-
-solo/mute/rec-enable
---------------------
-
- to toggle solo/mute/RE for EVERYTHING:
-
- ctl-shift-click on a solo/mute/RE button
-
- to solo/mute/RE mix group (when group is not active)
-
- ctl-click on solo/mute button
-
- to toggle solo-safe status (which appears to not work
- correctly right now)
-
- shift-click on solo button
-
- to momentarily engage solo while pressing a mouse button
-
- use button2 instead of button1
-
-
-gain sliders
-------------
-
- shift-click to reset to 0dB
- ctl-click-drag for finer scale
- ctl-alt-click-drag for even finer scale
-
-panners
--------
-
- (stereo): shift-click to reset to center
-
---Misc--
-4.1. What's the deal with JACK?
-
-JACK is the Jack Audio Connection Kit. There is a basic problem with
-audio+MIDI apps on Linux at this time: they are not able to exchange
-data with each other in situations where low latency is a system goal.
-There are systems (aRts, MidiShare, parts of alsa-lib) that allow data
-sharing, but not when the latencies get down below 20ms.
-
-JACK is an API that solves this problem. Also, and quite importantly,
-JACK drastically simplifies the programming of audio applications.
-Applications that use JACK do not need to know anything about audio
-hardware. They do not interact with it directly in any way
-whatsoever. All they do is provide a few callbacks to the server they
-connect with; the primary callback is responsible for producing and/or
-consuming a specified amount of data whenever it is called. This is a
-'callback' model, and is extremely different from ALSA, OSS, and
-several other audio APIs. It is, however, very similar to Apple's
-CoreAudio, Steinberg's ASIO, the PortAudio library, and most plugin
-APIs. See http://jackit.sf.net/
-
-4.2. Is Ardour internationalized?
-Parts of Ardour are. Work is ongoing to fully internationlize Ardour. If
-you speak a language besides English, feel free to volunteer to help
-translate.
-
-These languages have translations:
-
-gtk-ardour:
-French, German, Italian, Portuguese, Brazilian Portuguese, and Russian
-
-libardour:
-Italian
-
-4.3. How do I get support?
-
-Ardour is a volunteer project. There is no one devoted to providing
-support. However, there is a members only mailing list where someone
-might answer your question. You can join at Ardour's website:
-
- http://ardour.org/
-
-There is also the IRC #ardour channel on the FreeNode network.
-
-Alternatively, you can pay Paul for specific support. Check with him
-for hourly rates.
-
-4.4. Well, where's the manual?
-
-Currently, the existing documentation is sparse. You might want to check out
-the Protools reference; Ardour is rather similar to it. Also, Paul wants
-users to be able to complete the Mackie HDR tutorial using Ardour; so that
-is another manual to check out. Both are available online from
-<a href=http://digidesign.com/support/documents.html>DigiDesign</a> and <a
-href=http://mackie.com>Mackie</a>.
-
-There is the begining of a manual in Ardour's manual directory. Feel
-free to create your own HOWTOs, tips and tricks sheets, tutorials, or
-whatever you feel like adding.
-
-A couple people have written some documentation to get people started with
-Ardour. It is available at http://www.djcj.org/LAU/ardour/
-
-4.5. Why are all these libraries included? I already have ...
-
-Yes, we know that it's quite likely that you already have gtkmm or
-sigc++ installed on your machine, let alone others. There
-are 2 problems.
-
-Ardour requires either the latest version of these libraries or even a
-version with a patch that has not yet been incorporated into a release
-of the library. Rather than require you to get the library source,
-patch it, recompile and install it, Ardour keeps its own copy, builds
-a static, private version of the library and links against it. That
-way, we don't have to worry about crashes caused by you having the
-wrong version of the library.
-
-The second problem is more general. C++ does not yet have a unified
-"Application Binary Interface", even on a single process
-architecture+OS combination. This is unlikely to ever change (it was
-encouraged by the inventor of C++). This means that libraries compiled
-with one compiler are not always compatible with applications compiled
-with another compiler. By "another compiler", we can mean something as
-subtle as a different version of g++. Worse, because many C++
-libraries feature inlined code, we even need to be sure you compile
-against exactly the same version of the library as other parts of
-Ardour will use. Even worse, there are compile time flags you or
-someone else could give to a C++ compiler that would make the library
-incompatible in subtle ways with code compiled with different flags.
-
-After a year of trying to address these problems "the normal way", the
-Ardour team gave up and decided to include every necessary library
-that is written in C++ and/or has patches required. You may not like
-this very much, but trust us, you would like the alternative even
-less.
-
-4.6. Why not another frontend to libardour? Why not QT?
-
-The GTK+ frontend to libardour is almost 7 times the size of libardour. GUIs
-for these sort of programs are very large and detail orientated. It would be
-a waste of time to try to reimplement Ardour with another widget set. This is
-also why there won't be a native port of Ardour to MacOS X.
diff --git a/DOCUMENTATION/README.es b/DOCUMENTATION/README.es
deleted file mode 100644
index bc29f64608..0000000000
--- a/DOCUMENTATION/README.es
+++ /dev/null
@@ -1,139 +0,0 @@
- ARDOUR README.es
-
- Paul Davis <paul@linuxaudiosystems.com> June 2003
-
-Bienvenido a Ardour. Este programa aun esta bajo desarrollo,
-pero ha llegado a un estado en el cual es productivo y util tener
-a otras personas probandolo y tal vez (con suerte!) arreglando errores
-y agregando nuevas caracteristicas.
-
-**** SEGURIDAD *******************************************************
-
-Para ejecutar Ardour con la mas baja latencia posible, es necesario usar
-POSIX Real-Time Scheduling (tiempo Real) como tambien bloquear toda la
-memoria que usa en la memoria fisica de la RAM. Estos requerimientos solo
-se pueden cumplir si Ardour es ejecutado con privilegios de usuario root.
-
-Por otro lado, esto no es tan malo. Si no planea instalar a Ardour
-usando el comando "setuid root"(lo cual no funcionaria de todas formas),
-entonces alguna persona que use su estacion de trabajo debera tener
-que haber "ganado" privilegios de acceso root para hacerlo funcionar
-de esa forma.Si esa otra persona ya tiene acceso de tipo root, Ardour
-es la menor de sus preocupaciones. Asi que, relajese. Usaremos
-capabilities (privilegios root) una vez que los Kernels de Linux empiecen
-a aparecer con estas ya activadas, aunque esto no ayudara mucho a la
-seguridad, ya que las mencionadas "capabilities" habilitarian a cualquier
-hacker astatuto a hacer lo que quiciera.
-
-Alternativamente, usted puede elegir ejecutar a Ardour sin Scheduling
-de Tiempo Real, lo cual no es tan terrible. Simplemente no va a ser util
-en situaciones que demandan baja latencia, las cuales son deseables en
-la mayoria de los ambientes de estudios.
-Note que esto pierde importancia en el caso que usted disponga de
-hardware de audio capaz de hacer "monitorizacion por hardware". Esto
-hace recaer gran parte del peso de procesamiento sobre el dispositivo
-de audio y no sobre el CPU como es el caso de la "monitorizacion por
-software". En el caso de monitorizacion por hardware, la falta de baja
-latencia hara que los controles de la interfaz visual de Ardour
-reaccionen con menos fluidez, sin embargo la monitorizacion durante la
-captura sera excelente.
-
-**** COMPATIBILIDAD DE HARDWARE *************************************
-
-Ardour usa JACK para todo el manejo de entradas y salidas de audio,
-lo cual provee conecciones directas al hardware de audio y a otras
-aplicaciones compatibles con JACK. Este no es el lugar mas apropiado
-para discutir acerca de JACK, pero en caso de que se estubiera
-preguntando:
-
-Aunque JACK usa la libreria ALSA 0.9.0, JACK la aprovecha de una forma
-que ninguna otra aplicacion lo ha hecho hasta ahora y, tambien intenta
-usar ciertas caracteristicas de hardware que nuevamente, ninguna de las
-actuales aplicaciones usa. Como resultado, aunque una completa
-portabilidad a todo el hardware soportado por ALSA es un objetivo
-eventualmente realizable, puede ser que nazcan problemas relacionados
-con la compatibildad de hardware. Por favor recuerde que mi objetivo
-principal con JCK es el de crear un sistema profesional de audio y, con
-Ardour, una estacion de trabajo de audio digital profesional. Si estos
-terminan siendo utiles para personas con placas de 2/4 canales, muy bien,
-pero ese no es mi foco de interes principal.
-
-Otro punto importante es que su dispositivo de sonido debe soportar
-full duplex de entrada/salida (reproduccion y grabacion simultaneas)
-con el mismo formato para la captura y la reproduccion (no se puede
-usar una frecuencia de muestreo de 44.1 khz para reproducir y una
-de 48khz para grabar, ambas deben ser iguales, lo mismo sucede para
-la resolucion en bits. Esto significa, por ejemplo, que la placa
-SoundBlaster AWE no puede ser usada con JACK en modo full duplex.
--Esta placa solo soporta fullduplex si una de las dos (grabacion o
-reproduccion) usa 8 bits y la otra 16 bits.
-Este tipo de limitacion existe solo en algunas placas y, de ser asi
-no son adecuadas para el uso en aplicaciones como JACK y ARDOUR por
-otras razones.
-
-Hasta la fecha, JACK fue probado con las siguientes interfaces de audio:
-
- RME Hammerfall (Digi9652) (26 channels in, 26 channels out)
- RME Hammerfall DSP (hdsp) (26 channels in, 26 channels out)
- RME Hammerfall Light (Digi9636) (18 channels in, 18 channels out)
- Midiman Delta series (ice1712 chipset) (12 channels in, 10 channels out)
-
- Varios chips de sonido de nivel de consumidor (relativamente baratas),
- tipicamente con 2 canales de entrada y 2/4 de salida,incluyendo:
-
- Hoontech 4Dwave-NX (chipset Trident)
- Ensoniq 5880
- Soundblaster 32
- Soundblaster 64
- Creative SBLive64
-
-y muchas mas.
-
-Asi que, basicamente, parece funcionar con practicamente todas aquellas
-placas que son soportadas por ALSA, lo cual es el objetivo.
-
-**********************************************************************
-
-REPORTES DE ERRORES EN CODIGO (BUGS)
--------------------------------------
-
-Los bugs deben ser reportados a http://ardour.org/mantis/ . Es mas probable
-que estos sean recordados y analizados alli. Por favor, chequee alli la lista
-de bugs ya reportados para asegurarse que el que usted encontro no haya sido
-reportado aun o haya sido resuelto en CVS.
-
-PARA COMPILAR ARDOUR
---------------------
-Vea el archivo "BUILD" (por ahora en ingles, espaniol mas adelante).
-
-EJECUTANDO ARDOUR
------------------
-
-NOTA: Debe haber ya un server JACK corriendo antes de ejecutar Ardour
- ---------------------------------------------------------------
-
-* Escribiendo ardour en una consola y presionando ENTER o INTRO deberia iniciar
- el programa.
-
-* "ardour --help" muestra las opciones disponibles desde la linea de comando
-
-
-
-
-
-
-
-
-
-Nota de Traduccion (Spanish Translation Note)
----------------------------------------------
-#Nota del tipeo:la letra pronunciada ENIE aparece en este archivo
-#como ni (letra "n" y letra "i") para mayor compatibilidad con todos
-#los visores de texto.
-#Asi mismo no se han aplicado las tildes(acentos).
-#Estos no son errores de tipeo. Si llegara a encontrar algun otro error
-#en cualquiera de los archivos con extension ".es" por favor
-#hagamelo saber a alexkrohn@fastmail.fm
-# Muchas gracias
-# Alex
-
diff --git a/DOCUMENTATION/README.fr b/DOCUMENTATION/README.fr
deleted file mode 100644
index eba5aafd54..0000000000
--- a/DOCUMENTATION/README.fr
+++ /dev/null
@@ -1,113 +0,0 @@
- ARDOUR -- LISEZ-MOI
-
- Paul Davis <paul@linuxaudiosystems.com> Juin 2003
-
-Bienvenue sur Ardour. Ce programme est encore en cours de développement,
-mais a atteint un état où il peut être utile et productif afin que
-d'autres personnes puissent le tester et peut-être (je l'espère !) corriger
-les bogues et ajouter des fonctionnalités.
-
-**** SÉCURITÉ *******************************************************
-
-Afin d'utiliser Ardour avec un temps de latence le plus bas possible,
-il est nécessaire d'utiliser l'ordonnancement temps réel POSIX ainsi
-que de verrouiller toute la mémoire qu'il utilise en mémoire vive physique.
-Ces pré requis ne peuvent être atteint que lorsque Ardour est lancé
-avec les privilèges du super-utilisateur (root).
-
-D'un autre côté, ce n'est pas si grave que ça. Si vous n'essayez pas
-de l'installer en setuid root (ce qui ne marchera pas de toute façon),
-alors les utilisateurs devront avoir obtenu l'accès root pour pouvoir le
-lancer comme cela. S'ils ont déjà l'accès root, Ardour est bien le dernier
-de vos problèmes. Donc tranquillisez-vous. Nous utiliserons les "capacités"
-(capabilities en anglais, NdT) quand les noyaux Linux arriverons avec
-leur support activé, bien que les capacités en question autoriserons
-toujours un cracker mal intentionné à faire à peu près n'importe quoi.
-
-L'alternative est de lancer Ardour sans ordonnancement temps-réel, dans
-ce cas, il n'y a plus de souci. Ardour ne sera juste plus très utile
-dans des conditions de faible latence, ce qui est désirable dans la
-plupart des environnements de studio. Notez que cela n'est pas si important
-lorsque vous avez du matériel audio qui est capable de faire du
-"monitoring matériel" -- dans ce cas, un temps de latence trop important
-provoquera juste des temps de réponse un peu longs pour l'interface
-utilisateur d'Ardour, mais le monitoring pendant l'enregistrement
-sera excellent.
-
-
-**** COMPATIBILITÉ MATÉRIELLE *****************************************
-
-Ardour utilise JACK pour toutes ses entrés/sorties audio, fournissant
-ainsi des connexions transparentes au matériel audio ainsi qu'à d'autres
-applications. Cela n'est pas du tout l'endroit pour parler de JACK,
-mais dans le cas où vous vous poseriez la question :
-
-Bien que JACK utilise l'API (Application Programming Interface, NdT) ALSA
-0.9.0, il utilise cette API d'une manière que nulle autre application
-ne l'a jamais fait jusqu'à présent, et essaie aussi d'utiliser certaines
-possibilités matérielles qui également n'ont jamais été employées par
-d'autres applications. En conséquence, bien que la portabilité complète de
-tout matériel supporté par ALSA est un objectif très atteignable, il peut
-y avoir des problèmes concernant la compatibilité matérielle. Veuillez
-garder en mémoire que le but principal avec JACK est d'obtenir
-un système audio professionnel, et avec Ardour, d'obtenir une station
-de travail audio-numérique professionnelle. S'ils parviennent à être
-utilisés par des gens avec des cartes audio ayant 2/4 canaux, génial,
-mais ce n'est pas ma priorité.
-
-Un autre problème important est que votre interface audio doit supporter
-l'entrée/sortie en mode full duplex avec le même format d'échantillonage
-pour l'enregistrement que pour la restitution. Cela veut dire, par exemple,
-que la SoundBlaster AWE ne peut être utilisée par JACK en mode full duplex
--- elle supporte seulement l'entrée/sortie en full duplex si l'une des
-deux directions (enregistrement ou restitution) est en 8 bits et
- que l'autre est en 16 bits. Très peu de cartes ont cette limitation,
- et si c'est le cas, elles ne sont de toute façon pas adéquates pour des
-utilisations avec des applications telles que JACK ou Ardour pour d'autres
-raisons.
-
-À ce jour, JACK a été utilisé avec :
-
- RME Hammerfall (Digi9652) (26 canaux en entrée, 26 canaux en sortie)
- RME Hammerfall DSP (hdsp) (26 canaux en entrée, 26 canaux en sortie)
- RME Hammerfall Light (Digi9636) (18 canaux en entrée, 18 canaux en sortie)
- Midiman Delta series (ice1712 chipset) (12 canaux en entrée, 10 canaux en sortie)
-
-Diverses interface audio grand public, généralement avec deux canaux d'entrée, deux
-canaux de sortie, incluant :
-
- Hoontech 4Dwave-NX (Trident chipset)
- Ensoniq 5880
- Soundblaster 32
- Soundblaster 64
- Creative SBLive64
-
-et bien d'autres.
-
-Donc, pour résumer, il semble fonctionner pour toute carte supporté par ALSA, ce qui
-est le but.
-
-**********************************************************************
-
-RAPPORT DE BOGUES
------------------
-
-Les bogues doivent être rapportés sur http://ardour.org/mantis/. Ils seront
-certainement plus à même d'être conservés et traités à cet endroit. Veuillez
-consulter les bogues existant afin d'être sûr que le votre n'a pas déjà été
-rapporté et/ou corrigé dans le CVS.
-
-
-COMPILER ARDOUR
----------------
-Veuillez consulter le fichier "BUILD".
-
-
-LANCER ARDOUR
--------------
-
-NOTE : Vous devez avoir un serveur JACK lancé avant de lancer Ardour.
- --------------------------------------------------------------
-
-Taper "ardour" devrait sans doute avoir quelque effet. "ardour --help" liste
-les options disponibles.
diff --git a/DOCUMENTATION/README.it b/DOCUMENTATION/README.it
deleted file mode 100644
index 8a2111fb9c..0000000000
--- a/DOCUMENTATION/README.it
+++ /dev/null
@@ -1,276 +0,0 @@
- ARDOUR README.it
-
- Paul Davis <paul@linuxaudiosystems.com> June 2003
- Italian Traslation by Vieri Verze <poe@softhome.net> August 2002
- Update by Filippo Pappalardo <filippo@email.it> December 2003
-
-Benvenuti in Ardour. Sebbene questo programma sia ancora in via di
-sviluppo, e` pronto a rendervi produttivi, permettervi di testarlo
-e (si spera!) risolvere i bug e aggiungere nuove caratteristiche.
-
-**** SICUREZZA *******************************************************
-
-Per eseguire Ardour con la latenza piu` bassa e` necessario usare il
-POSIX Real-Time Scheduling e disporre di tutta la memoria di cui ha
-bisogno sotto forma di RAM fisica. Queste richieste possono essere
-soddisfatte soltanto se Ardour viene eseguito con i privilegi di root.
-
-D'altra parte non tutto il male viene per nuocere. Se non installate
-Ardour con setuid root (che comunque non funziona), gli altri avranno
-bisogno dei privilegi di root per eseguirlo. Se li hanno Ardour e` il
-vostro ultimo problema. Quindi rilassatevi. Implementeremo le
-capabilities non appena il kernel le supportera`, benche` questo non
-aiuti molto la sicurezza, dal momento che un cracker intelligente
-potra` comunque fare di tutto.
-
-In alternativa, potete scegliere di esguire Ardour senza il RT
-scheduling e non avrete nessun problema. Non sara` molto utile nelle
-situazioni in cui e` necessaria una bassa latenza. Praticamente nella
-maggior parte dei casi. Ricordatevi che tutto questo e` irrilevante se
-possedete una scheda audio capace di fare "hardware monitoring".
-In questo caso una latenza piu` alta rendera` un po` lenti i controlli
-della UI di Ardour, mentre il monitoring durante la capture saranno
-eccellenti.
-
-**** COMPATIBILITA` HARDWARE *****************************************
-
-Ardour usa il server audio JACK per tutte le operazioni di I/O. In
-questo modo fornisce un impareggiabile sistema di comunicazione con il
-substrato hardware audio e le altre applicazioni. Non è certamente
-questo il luogo per discutere di JACK, ma se vi state chiedendo:
-
-JACK usa le ALSA 0.9.0 API. La particolarita` e` che le sfrutta in
-un modo completamente nuovo soprattutto per quanto riguarda l' uso
-dell' hardware. Come risultato, benche` il totale supporto delle
-periferiche h/w da parte di ALSA sia un successo facilmente ottenibile,
-potrebbero esserci problemi concernenti la compatiblita` h/w. Bisogna
-tenere presente che il mio scopo principale e` di creare con JACK un
-sistem audio professionale, e con Ardour un sistema professionale di
-HDR. Se puo` essere utile a utenti con schede a 2/4 canali, ben venga,
-ma ricordate che questo non e` l' interesse primo.
-
-Un altro aspetto importante e` che la vostra interfaccia audio deve
-supportare l' I/O in full duplex nello stesso formato sia in registrazione
-che suonando. Significa, per esempio, che una Soundblaster AWE non
-potra` essere usata con JACK in modalita` full duplex, a meno che una
-delle due direzioni (registrazione o playback) e` a 8 bit e l' altra a 16.
-Sono poche le schede che hanno questo tipo di limitazione, e non sono
-generalmente adatte ad essere usate con JACK e Ardour per altri motivi.
-
-Ad oggi, Ardour ha girato con:
-
- RME Hammerfall (Digi9652) (26 canali in, 26 canali out)
- RME Hammerfall Light (Digi9636) (18 canali in, 18 canali out)
- Midiman Delta series (ice1712 chipset) (12 canali in, 10 canali out)
-
- Diverse interfacce di fascia consumer, solitamente a 2 canali in,
- 2/4 canali out, incluse:
-
- Hoontech 4Dwave-NX (Trident chipset)
- Ensoniq 5880
- Soundblaster 32
- Soundblaster 64
- Creative SBLive64
-
-Al momento sembra funzionare con tutte le schede supportate da ALSA,
-che e` l'obiettivo proposto.
-
-**** SEGNALARE UN BUG ************************************************
-
-I bug vanno segnalati ad http://ardour.org/mantis/ . Dove è
-probabile che vengano presi in considerazione e trattati. Prima di
-segnalare un bug è opportuno accertarsi che non sia gia` stato
-segnalato e/o eliminato in cvs.
-
-**** COMPILAZIONE E INSTALLAZIONE ************************************
-
-1) GNU AUTOCONF RATIONALIZATION
--------------------------------
-
-GNU autoconf e` un sistema intelligente, ma ha una grande lacuna.
-Di default, autoconf (adesso aclocal) controlla UNA sola directory
-alla ricerca dei file di cui ha bisogno. Sarebbe OK se non venissero
-installati altri pacchetti che qualche volta mettono i loro file di
-autoconf in /usr/local/lib/share/aclocal e altre volte in
-/usr/lib/share/aclocal.
-
-Succede che autoconf non riesce a trovare i file di cui ha bisogno per
-costruire Ardour, dal momento che molta gente ha una moltitudine di
-librerie installate dalla distribuzione (i file di autoconf finiscono
-in /usr/local/lib...) e dai pacchetti pre-costruiti (in questo caso i
-pacchetti finiscono solitamente in /usr/lib...).
-
-Per la vostra tranquillita`, vi raccomando di eseguire i seguenti passi
-da root. Controllate i contenuti di entrambe le direcroty prima di
-eseguire questi comandi in modo da non cancellare accidentalmente la
-corretta versione di un file autoconf:
-
- * Se avete esntrambe le directory:
-
- cd /usr/lib/share/aclocal
- cp *.m4 /usr/local/lib/share/aclocal
- cd ..
- rm -rf aclocal
- ln -s /usr/local/lib/share/aclocal .
-
- * Se avete solo /usr/lib/share/aclocal
-
- cd /usr/local/lib
- ln -s /usr/lib/share/aclocal .
-
-Alcune distribuzioni hanno aclocal in altre directory. YMMV.
-
-2. COMPILARE
-------------
-
-Prima di compilare Ardour, accertatevi di avere installato:
-
-* Strumenti:
-
- gcc/g++ 2.95.3 o superiore (funziona anche gcc/g++ 3.x)
- autoconf 2.52 o superiore
- automake 1.5 o superiore
- libtool 1.4.2 o superiore
- gettext 0.11.5 o superiore
- pkgconfig 0.8.0 o superiore
- http://www.freedesktop.org/software/pkgconfig/
-
- sono necessari anche lex e yacc
- andra` bene qualsiasi versione di bison >= 1.35
-
-* Librerie:
-
-Le versioni raccomandate, quando necessario, sono presenti sotto le
-versioni generiche.
-
- ALSA 0.9.X (CVS o snapshot release) (http://www.alsa-project.org)
-
- JACK (http://jackit.sourceforge.net)
-
- libxml2 2.5.X (http://xmlsoft.org/)
-
- libart_lgpl 2.3.X
-
- - available as part of gnome-libs, which you may already
- have on your system.
-
- - also available via download from GNOME source FTP sites.
- - see ftp://ftp.gnome.org/pub/GNOME/MIRRORS.htmland then
- follow to sources/libart_lgpl
-
- glib 1.2 (http://www.gtk.org)
- glib-1.2.8 (inclusa nella maggior parte delle distribuzioni)
-
- GTK+ 1.2 (http://www.gtk.org)
- gtk+-1.2.8 (inclusa nella maggior parte delle distribuzioni)
-
- libsndfile (http://www.zip.com.au/~erikd/libsndfile)
- libsndfile-0.0-28
-
- libsamplerate (http://www.mega-nerd.com/SRC/)
- libsamplerate 0.0.13 o superiore
-
- the LADSPA SDK (http://www.ladspa.org/)
- (Guardate sotto)
-
- raptor (http://www.redland.opensource.ac.uk/raptor/)
-
- lrdf (richiede raptor) (http://plugin.org.uk/lrdf/)
- liblrdf 0.3.1 or higher
-
-Ottenere LADSPA
-
-Nota: La Linux Audio Developers Simple Plugin API (LADSPA) consiste
-in realta` di un semplice file header, già incluso nei sorgenti di
-Ardour
-
-Vorrete usare anche i suoi plugins, percui andate oltre e scaricate
-l' intero pacchetto (non e` grande), da www.ladspa.org.
-
-Vi raccomando di scaricare un eccelente set di plugins per LADSPA,
-programmati da Steve Harris. Il link e` http://plugin.org.uk/.
-Trasformeranno Ardour in una appicazione vermante utile. Altri plugins
-di LADSPA sono in programmazione percui tenete d' occhio la Linux
-Audio Development mailing list.
-
-2A) COMPILARE DA CVS
----------------------
-
-Posizionatevi nel path in cui volete copiare i CVS di Ardour (la '%'
-e` il vostro shell prompt):
-
-% cd /usr/local/src # e` un esempio, potete scegliere un path qualsiasi
-% cvs -d:pserver:anoncvs@ardour.org:/cvsroot/ardour login
- # (premete enter/return quando vi sara` chiesta
- la password)
-% cvs -d:pserver:anoncvs@ardour.org:/cvsroot/ardour -z3 co ardour
-
-2A.1) CHE TIPO DI COMPILAZIONE?
---------------------------------
-
-Il prossimo passo è quello di decidere se si vuole una installazione per
-sviluppatori o per semplici utenti. Se siete sviluppatori, potrebbe essere
-una buona idea compilare libardour come libreria condivisa, cosi` da evitare
-di collegare l'eseguibile ogni volta che cambiate versione di libreria.
-Se siete semplici utenti, questo renderebbe solo la vita più difficile.
-In caso siate sviluppatori dunque eseguite:
-
- touch ardour/libs/ardour/BUILD_FOR_DEVELOPMENT
-
-Questo fara` si` che libardour sia compilata come libreria condivisa. Dovreste
-conseguentemente passare il parametro --enable-development-build a configure.
-
-2A.2) PREPARARE IL SISTEMA PER LA COMPILAZIONE
-----------------------------------------------
-
-Ora costruite i file autoconf/automake:
-
-% cd ardour
-% sh autogen.sh
-
-Andate al passo 3.
-
-2B) COMPILARE DA UN TARBALL
----------------------------
-
-Come al solito: prelevate e scompattate il tarball. La directory creata,
-ardour-<versione>, e` chiamata piu` sotto "$AD".
-
-3) COME COMPILARE
------------------
-
- ./configure (con tutte i parametri che vorrete passare)
- make
- make install
-
-Se siete uno sviluppatore che intende lavorare su libardour, potreste
-voler usare il parametro --enable-development-build, che colleghera`
-dinamicamente l'eseguibile a libardour, risparmiando molto tempo
-nell'evitare un collegamento statico da effettuare ogni volta che si
-operano cambiamenti su libardour.
-
-Se volete compilare ardour in modo che possiate farne il `debugging`,
-dovreste usare anche il parametro --disable-optimize. Senza questo
-Ardour viene compilato con ottimizzazioni estreme ed il risultato non
-può essere oggetto di `debugging` in modo efficace.
-
-Come tutti gli script di configurazione, se non volete che
-l' installazione avvenga ne "solito posto", aggiungete un --prefix al
-comando ./configure. Potreste anche considerare di aggiungere un
-parametro --sysconfdir, dal momento che `make install` tenterà di
-installare tutti i file di configurazione in un percorso che tiene
-conti di questo parametro.
-
-La compilazione ci mette un po`. Eseguendo make -j3 su un dual PII-450
-l'intero processo impiega circa 10-15 minuti.
-
-4. ESEGUIRE ARDOUR
-------------------
-
-NOTA: Dovete prima di tutto eseguire il server JACK.
- ----------------------------------------------
-
-
-Se avete eseguito "make install", allora potete digitare "ardour" e
-qualcosa succedera`. Col comando "ardour --help" otterrete una
-lista delle possibili opzioni.
diff --git a/DOCUMENTATION/README.ru b/DOCUMENTATION/README.ru
deleted file mode 100644
index fe5697535e..0000000000
--- a/DOCUMENTATION/README.ru
+++ /dev/null
@@ -1,108 +0,0 @@
- ARDOUR README.ru
-
- Paul Davis <paul@linuxaudiosystems.com> June 2003
- Russian translation by Igor Blinov <pitstop@nm.ru> November 2003
-
-÷ÁÓ ÐÒÉ×ÅÔÓÔ×ÕÅÔ Ardour. üÔÁ ÐÒÏÇÒÁÍÍÁ ÎÁÈÏÄÉÔÓÑ × ÓÔÁÄÉÉ ÒÁÚÒÁÂÏÔËÉ,
-ÎÏ ÕÖÅ ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÎÁ ÐÒÁËÔÉËÅ, Ë ÔÏÍÕ ÖÅ ÐÏÌÅÚÎÏ ËÏÇÄÁ
-ÄÒÕÇÉÅ ÌÀÄÉ ÔÅÓÔÉÒÕÀÔ Å£, ÅÓÌÉ ÓÌÕÞÁÅÔÓÑ (ÐÏÞÔÉ Õ×ÅÒÅÎ!) ÉÓÐÒÁ×ÌÑÀÔ
-ÏÛÉÂËÉ É ÒÁÓÛÉÒÑÀÔ ÆÕÎËÃÉÏÎÁÌØÎÙÅ ×ÏÚÍÏÖÎÏÓÔÉ.
-
-**** âåúïðáóîïóôø ***************************************************
-
-òÁÂÏÔÁ Ardour ÔÒÅÂÕÅÔ ÍÉÎÉÍÁÌØÎÏÅ ×ÒÅÍÑ ÒÅÁËÃÉÉ ÎÁ ÓÏÂÙÔÉÑ (low latency),
-ÞÔÏ ÔÒÅÂÕÅÔ ÉÓÐÏÌØÚÏ×ÁÎÉÑ POSIX-ÐÏÄÓÉÓÔÅÍÙ ÒÅÁÌØÎÏÇÏ ×ÒÅÍÅÎÉ (POSIX
-Real-Time Scheduling) É ×ÄÏÂÁ×ÏË ÂÌÏËÉÒÕÅÔ ×ÓÀ ÉÓÐÏÌØÚÕÅÍÕÀ ÐÁÍÑÔØ
-× ïúõ (RAM). üÔÉ ÔÒÅÂÏ×ÁÎÉÑ ×ÙÐÏÌÎÉÍÙ, ÔÏÌØËÏ ÅÓÌÉ Ardour ÚÁÐÕÝÅÎ Ó
-ÐÒÉ×ÉÌÅÇÉÑÍÉ ÐÏÌØÚÏ×ÁÔÅÌÑ root.
-
-ó ÄÒÕÇÏÊ ÓÔÏÒÏÎÙ ×Ó£ ÎÅ ÔÁË ÕÖ É ÐÌÏÈÏ. åÓÌÉ ×Ù ÎÅ ÍÏÖÅÔÅ ÕÓÔÁÎÏ×ÉÔØ
-ÆÌÁÇ setuid root (ËÏÔÏÒÙÊ ÐÏÍÏÇÁÅÔ ÎÅ ×Ï ×ÓÅÈ ÓÌÕÞÁÑÈ), ÔÏÇÄÁ
-ÎÅÏÂÈÏÄÉÍÏ ÐÏ×ÙÓÉÔØ Ó×ÏÉ ÐÒÉ×ÉÌÅÇÉÉ ÄÏ root ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ Ó ÜÔÉÍÉ
-ÐÒÁ×ÁÍÉ ÚÁÐÕÓÔÉÔØ Ardour. åÓÌÉ ×Ù ÕÖÅ ÉÍÅÅÔÅ ÄÏÓÔÕÐ ËÁË ÐÏÌØÚÏ×ÁÔÅÌØ
-root, × ÔÁËÏÍ ÓÌÕÞÁÅ ÚÁÐÕÓË Ardour ÂÕÄÅÔ ÎÁÉÍÅÎØÛÅÊ ÐÒÏÂÌÅÍÏÊ. éÔÁË.
-÷ ÒÁÂÏÔÅ ÉÓÐÏÌØÚÕÀÔÓÑ ÎÅËÏÔÏÒÙÅ ×ÏÚÍÏÖÎÏÓÔÉ ÑÄÒÁ linux, ËÏÔÏÒÙÅ ÎÅ
-ÓÐÏÓÏÂÓÔ×ÕÅÔ ÂÅÚÏÐÁÓÎÏÓÔÉ, ÔÁË ËÁË ÏÎÉ ÍÏÇÕÔ ÐÏÍÏÞØ ÚÌÏÕÍÙÛÌÅÎÎÉËÕ
-× ÅÇÏ ÐÌÁÎÁÈ.
-
-÷ ÄÒÕÇÏÍ ×ÁÒÉÁÎÔÅ ×Ù ÍÏÖÅÔÅ ÚÁÐÕÓÔÉÔØ Ardour ÂÅÚ ÐÒÉÏÒÉÔÅÔÁ ÒÅÁÌØÎÏÇÏ
-×ÒÅÍÅÎÉ É ÚÁÂÙÔØ ÐÒÏ ÓËÁÚÁÎÎÏÅ ×ÙÛÅ. ïÄÎÁËÏ, ÜÔÏ ÎÅÕÄÏÂÎÏ ÄÌÑ ÓÉÔÕÁÃÉÊ,
-× ËÏÔÏÒÙÈ ÔÒÅÂÕÅÔÓÑ ÍÁÌÏÅ ×ÒÅÍÑ ÚÁÄÅÒÖËÉ ÓÉÇÎÁÌÁ, ÞÔÏ ÖÅÌÁÔÅÌØÎÏ × ÏÂÙÞÎÏÊ
-ÓÔÕÄÉÊÎÏÊ ÒÁÂÏÔÅ. úÁÍÅÞÕ, ÞÔÏ ÜÔÏ ÎÅ ÔÁË ×ÁÖÎÏ, ÅÓÌÉ ×ÁÛÅ ÁÐÐÁÒÁÔÎÏÅ
-ÏÂÅÓÐÅÞÅÎÉÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ ÆÕÎËÃÉÀ "hardware monitoring" - × ÜÔÏÍ ÓÌÕÞÁÅ
-×ÏÚÒÏÓÛÁÑ ÚÁÄÅÒÖËÁ ÓÉÇÎÁÌÁ Õ×ÅÌÉÞÉ×ÁÅÔ ×ÒÅÍÑ ÒÅÁËÃÉÉ ÐÒÉ ×ÏÚÄÅÊÓÔ×ÉÉ
-ÎÁ ÕÐÒÁ×ÌÑÀÝÉÅ ÜÌÅÍÅÎÔÙ ÇÒÁÆÉÞÅÓËÏÇÏ ÉÎÔÅÒÆÅÊÓÁ Ardour, ÚÁÔÏ ËÏÎÔÒÏÌØ
-(ÍÏÎÉÔÏÒÉÎÇ) ÓÉÇÎÁÌÁ × ÐÒÏÃÅÓÓÅ ÚÁÐÉÓÉ ÂÕÄÅÔ ÚÁÍÅÞÁÔÅÌØÎÙÍ.
-
-**** ôòåâï÷áîéñ ë áððáòáôõòå ****************************************
-
-Ardour × Ó×ÏÅÊ ÒÁÂÏÔÅ ÄÌÑ ××ÏÄÁ/×Ù×ÏÄÁ ÁÕÄÉÏÄÁÎÎÙÈ ÉÓÐÏÌØÚÕÅÔ JACK,
-ËÏÔÏÒÙÊ ÏÂÅÓÐÅÞÉ×ÁÅÔ ÉÄÅÁÌØÎÏÅ ÐÏÄËÌÀÞÅÎÉÅ ÐÒÉÌÏÖÅÎÉÊ Ë ÒÅÓÕÒÓÁÍ
-ÁÐÐÁÒÁÔÕÒÙ ÄÌÑ ÒÁÂÏÔÙ ÓÏ Ú×ÕËÏÍ. íÙ ÎÅ ÂÕÄÅÍ ÚÄÅÓØ ÏÂÓÕÖÄÁÔØ JACK,
-ÎÏ ÓËÁÚÁÎÎÏÅ ÎÉÖÅ ÐÏÚ×ÏÌÉÔ ÉÚÂÅÖÁÔØ ÎÅÄÏÒÁÚÕÍÅÎÉÊ:
-
-îÅÓÍÏÔÒÑ ÎÁ ÔÏ, ÞÔÏ JACK ÒÁÂÏÔÁÅÔ ÞÅÒÅÚ ALSA 0.9.0 API, ÏÎ ÉÓÐÏÌØÚÕÅÔ
-ÅÇÏ ÔÁËÉÍ ÏÂÒÁÚÏÍ, ÞÔÏ ÄÒÕÇÉÅ ÐÒÉÌÏÖÅÎÉÑ × ÜÔÏÔ ÍÏÍÅÎÔ ÎÅ ÍÏÇÕÔ
-ÒÁÂÏÔÁÔØ Ó ÎÉÍ, Ë ÔÏÍÕ ÖÅ ÚÁÄÅÊÓÔ×ÕÀÔÓÑ ÎÅËÏÔÏÒÙÅ ÏÓÏÂÅÎÎÏÓÔÉ
-ÁÐÐÁÒÁÔÕÒÙ, ÎÅÉÓÐÏÌØÚÕÅÍÙÅ ÄÒÕÇÉÍÉ ÐÒÉÌÏÖÅÎÉÑÍÉ. ðÏÌÎÁÑ ÓÏ×ÍÅÓÔÉÍÏÓÔØ
-ÓÏ ×ÓÅÍÉ Ú×ÕËÏ×ÙÍÉ ËÁÒÔÁÍÉ, ÐÏÄÄÅÒÖÉ×ÁÅÍÙÍÉ ALSA, Ñ×ÌÑÅÔÓÑ ÄÏÓÔÉÖÉÍÏÊ
-É ÏÞÅÎØ ÖÅÌÁÔÅÌØÎÏÊ ÃÅÌØÀ. óÌÅÄÓÔ×ÉÅÍ ÜÔÏÇÏ ÍÏÖÅÔ Ñ×ÉÔØÓÑ ÐÏÄÄÅÒÖËÁ
-ÏÂÏÒÕÄÏ×ÁÎÉÑ Ó ×ÏÚÍÏÖÎÏÓÔÑÍÉ ÏËÒÕÖÁÀÝÅÇÏ Ú×ÕËÁ (surround sound).
-ïÄÎÁËÏ, ÍÏÑ ÏÓÎÏ×ÎÁÑ ÃÅÌØ - ÜÔÏ ÐÏÓÔÒÏÅÎÉÅ ÎÁ ÏÓÎÏ×Å JACK
-ÐÒÏÆÅÓÓÉÏÎÁÌØÎÏÇÏ Ú×ÕËÏ×ÏÇÏ ÓÅÒ×ÅÒÁ Ó Ardour × ËÁÞÅÓÔ×Å ÎÅ ÍÅÎÅÅ
-ÐÒÏÆÅÓÓÉÏÎÁÌØÎÏÊ Ú×ÕËÏÚÁÐÉÓÙ×ÁÀÝÅÊ ÓÉÓÔÅÍÙ (HDR). åÓÌÉ ÜÔÏ ÏËÁÖÅÔÓÑ
-ÐÏÌÅÚÎÙÍ ÄÌÑ ×ÌÁÄÅÌØÃÅ× ÏÂÙÞÎÙÈ 2/4 ËÁÎÁÌØÎÙÈ Ú×ÕËÏ×ÙÈ ËÁÒÔ, ÔÏ ÜÔÏ
-×ÅÌÉËÏÌÅÐÎÏ, ÎÏ Ñ ÎÅ ÚÁÏÓÔÒÑÀ ×ÎÉÍÁÎÉÅ ÎÁ ÜÔÏÍ.
-
-óÌÅÄÕÀÝÉÍ ×ÁÖÎÙÍ ÍÏÍÅÎÔÏÍ Ñ×ÌÑÅÔÓÑ ÔÏ, ÞÔÏ ×ÁÛÁ Ú×ÕËÏ×ÁÑ ËÁÒÔÁ ÄÏÌÖÎÁ
-ÐÏÄÄÅÒÖÉ×ÁÔØ ÐÏÌÎÏÄÕÐÌÅËÓÎÙÊ ÒÅÖÉÍ ÒÁÂÏÔÙ, ÐÒÉÞ£Í ÏÄÎÏ×ÒÅÍÅÎÎÏ × ÏÄÎÏÍ
-ÆÏÒÍÁÔÅ ÁÕÄÉÏÄÁÎÎÙÈ, ËÁË ÎÁ ××ÏÄ, ÔÁË É ÎÁ ×Ù×ÏÄ. ôÁË, Ë ÐÒÉÍÅÒÕ, ËÁÒÔÁ
-SoundBlaster AWE ÎÅ ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ Ó JACK × ÐÏÌÎÏÄÕÐÌÅËÓÎÏÍ
-ÒÅÖÉÍÅ - ÅÀ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÔÏÌØËÏ ÔÁËÏÊ ÐÏÌÎÏÄÕÐÌÅËÓÎÙÊ ÒÅÖÉÍ, × ËÏÔÏÒÏÍ
-ÏÄÎÏ ÉÚ Ä×ÕÈ ÎÁÐÒÁ×ÌÅÎÉÊ (ÚÁÐÉÓØ ÉÌÉ ×ÏÓÐÒÏÉÚ×ÅÄÅÎÉÅ ÓÉÇÎÁÌÁ) ÒÁÂÏÔÁÅÔ
-× ÆÏÒÍÁÔÅ 8 ÂÉÔ ÄÁÎÎÙÈ, Á ÄÒÕÇÏÅ × ÆÏÒÍÁÔÅ 16 ÂÉÔ. ïÞÅÎØ ÎÅÍÎÏÇÉÅ ËÁÒÔÙ
-ÉÍÅÀÔ ÜÔÏ ÏÇÒÁÎÉÞÅÎÉÅ, É × ÜÔÏÍ ÓÌÕÞÁÅ ÏÎÉ ÏÂÙÞÎÏ ÎÅ ÐÏÄÈÏÄÑÔ ÄÌÑ ÒÁÂÏÔÙ
-Ó ÔÁËÉÍÉ ÐÒÉÌÏÖÅÎÉÑÍÉ ËÁË JACK ÉÌÉ Ardour.
-
-îÁ ÓÅÇÏÄÎÑÛÎÉÊ ÄÅÎØ, JACK ÒÁÂÏÔÁÅÔ ÓÏ ÓÌÅÄÕÀÝÉÍÉ Ú×ÕËÏ×ÙÍÉ ËÁÒÔÁÍÉ:
-
- RME Hammerfall (Digi9652) (26 ×ÈÏÄÏ×, 26 ×ÙÈÏÄÏ×)
- RME Hammerfall Light (Digi9636) (18 ×ÈÏÄÏ×, 18 ×ÙÈÏÄÏ×)
- Midiman Delta series (ice1712 chipset) (12 ×ÈÏÄÏ×, 10 ×ÙÈÏÄÏ×)
-
- ÛÉÒÏËÏ ÒÁÓÐÒÏÓÔÒÁΣÎÎÙÅ Ú×ÕËÏ×ÙÅ ËÁÒÔÙ, ÏÂÙÞÎÏ 2 ×ÈÏÄÎÙÈ ËÁÎÁÌÁ,
- 2/4 ×ÙÈÏÄÎÙÈ ËÁÎÁÌÁ, ×ËÌÀÞÁÑ:
-
- Hoontech 4Dwave-NX (Trident chipset)
- Ensoniq 5880
- Soundblaster 32
- Soundblaster 64
- Creative SBLive64
-
-É ÍÎÏÇÉÅ ÄÒÕÇÉÅ.
-
-÷ÐÏÓÌÅÄÓÔ×ÉÉ ÏÎ ÂÕÄÅÔ ÒÁÂÏÔÁÔØ ÓÏ ×ÓÅÍÉ Ú×ÕËÏ×ÙÍÉ ËÁÒÔÁÍÉ, ÐÏÄÄÅÒÖÉ×ÁÅÍÙÍÉ
-ALSA. üÔÏ ÏÄÎÏ ÉÚ ÎÁÐÒÁ×ÌÅÎÉÊ ÒÁÚÒÁÂÏÔËÉ.
-
-**********************************************************************
-
-óïïâýåîéñ ïâ ïûéâëáè
---------------------
-
-þÔÏÂÙ ÓÏÏÂÝÉÔØ Ï ÏÂÎÁÒÕÖÅÎÙÈ ×ÁÍÉ ÏÛÉÂËÁÈ × ÒÁÂÏÔÅ ÐÒÏÇÒÁÍÍÙ ×ÏÓÐÏÌØÚÕÊÔÅÓØ
-ÓÓÙÌËÏÊ http://ardour.org/mantis/ . ÷ÏÚÍÏÖÎÏ Ï ÎÉÈ ÂÙÌÏ ÓÏÏÂÝÅÎÏ ÒÁÎÅÅ.
-ðÏÖÁÌÕÊÓÔÁ, ÐÒÏ×ÅÒØÔÅ ÓÕÝÅÓÔ×ÕÀÝÉÅ ÓÏÏÂÝÅÎÉÑ, ÞÔÏÂÙ ÕÂÅÄÉÔØÓÑ × ÔÏÍ, ÞÔÏ
-Ï ÏÂÎÁÒÕÖÅÎÎÏÊ ×ÁÍÉ ÏÛÉÂËÅ ÕÖÅ ÎÅ ÓÏÏÂÝÁÌÏÓØ É/ÉÌÉ ÏÎÁ ÎÅ ÉÓÐÒÁ×ÌÅÎÁ × CVS.
-
-óâïòëá ARDOUR
--------------
-ðÏÄÒÏÂÎÏÅ ÏÐÉÓÁÎÉÅ × ÆÁÊÌÅ "BUILD".
-
-úáðõóë ARDOUR
--------------
-
-úáíåþáîéå: ÷Ù ÄÏÌÖÎÙ ÚÁÐÕÓÔÉÔØ JACK ÓÅÒ×ÅÒ ÐÒÅÖÄÅ, ÞÅÍ ÏÔËÒÏÅÔÅ Ardour.
- ------------------------------------------------------------
-åÓÌÉ ×Ù ×ÙÐÏÌÎÉÌÉ ËÏÍÁÎÄÕ "make install", ÔÏÇÄÁ ÎÁÂÒÁ× ÎÁ ËÌÁ×ÉÁÔÕÒÅ
-"ardour" ÐÏÌÕÞÉÔÅ ÖÅÌÁÅÍÙÊ ÒÅÚÕÌØÔÁÔ. "ardour --help" ×Ù×ÏÄÉÔ ÓÐÉÓÏË
-ÄÏÓÔÕÐÎÙÈ ËÌÀÞÅÊ ÐÒÏÇÒÁÍÍÙ.
diff --git a/DOCUMENTATION/TODO b/DOCUMENTATION/TODO
deleted file mode 100644
index 6fbbdb9d98..0000000000
--- a/DOCUMENTATION/TODO
+++ /dev/null
@@ -1,232 +0,0 @@
-ARDOUR TO-DO: $Id$
-----------------------------------------------------------------------
-
-ITEMS REQUIRED FOR 1.0
-----------------------
-
-* Automation
- - must be able to apply a fade to a selected range
-* Drag handles for region/xfade curves
-
-* ensure I/O port is selected in connection dialog
-* add a small buffer near the left edge of the editor canvas to
- make mouse operations near that edge easier to get right
-* context menus everywhere
- - edit groups
- - mix groups
- - track lists
- - region list
- - click button
-
- (miscellany)
-
-* propagate name changes to equivalent regions in region list
-* destroy region removes equivalent regions from region list
-* fix edit group visibility toggle
-
-META ITEMS
-----------
-
-* there must be a manual
-
-POST 1.0 WORK
--------------
-* make region state of a playlist be position,length,layer, and save
- that for BoundsChange or Layer change.
-* automation modes (from protools):
- - relative trim
- - etc.
-* 2-step file expunge
-* allow sends/inserts and perhaps plugins to be named
-* popup a big panner
-* mix groups (adding new kinds of relationships to the groups, as per
- old ideas from tom pincince)
-* add meter range control
-* change meter tap point
-* cassowary-based constraints for edit groups
-* serializing the edit history (i have a plan for this now)
-* gtk2 port
-* like, totally rock, dude.
-* make rulers reorderable
-* set of useful click sounds
-* use snapshot mechanism to provide persistent undo/redo
- - needs better integration of automation state
- into session state.
-* duplicate-with-gap
-* panner multichannel backend code
-* select new port display when its created
-* copy/paste io configurations
-* Better temporal navigation
-* new region via plugin.
-* digital input trim.
-* possibly allow metering max-level adjustment at run-time
-* use multi-loop-take ala Samplitude/PT
-* song mode autonames for locate points
- intro, verse1, verse N, chorus, bridge, outro/tag
-* different clock display modes:
- elapsed
- remaining
- time since location start
- time till location end
-* handle missing audio sources when loading
-* option/action to snap selection to zero crossings
-* pitch shift?
-
-- Some global solo routing buttons and a sine/noise generator to
- test all the connections. Possibly a talkback input and
- control. Pretty much like the equivalent strip on a analog
- console.
-
-WAITING FOR GTK+/gtkmm 2.0:
----------------------------
-general gtkmmext::ui solution to delete_event in recursive Gtk::Main::run()
-float<->ulong conversion in a GtkAdjustment (GTK2 uses doubles)
- * fix the problems caused by range (float) limits on Locations.
-figure out how to get frames/timebars to extend to max_frames.
-
-UNDO ITEMS
-----------
-track height?
-capture?
-I/O connection state, etc.
-
-BUGS
-----
-
-initial Tempo marker can be dragged
-duplicate region names can be created automatically
-
-THREAD QUESTIONS
-----------------
- - which thread should:
- - change playlists on a diskstream?
- - change diskstreams on a track? (we don't support that in the UI)
-
- - can we reliably construct a copy of the RT state, instead of
- using locks everywhere?
-
-NOTES FROM THE MAILING LISTS
-----------------------------
-
--- gerard --
-
-Region gain has some bugs. They dissappear when trimming. Don't always
-playback correctly.
-
-I had some strange things with a chunk where the last region seemed to use
-the audio file as a peakfile. It played back correctly, but it showed up
-frames_per_peak too large.
-
--- gerard2 ---
-
-Automation.
-I see that automation editing is in the TODO. How about the whole deal:
-Changing it during aplay. relative or absolute, latch (is that the word) or
-momentary override etc
-Is this for >1.0 ? It is not that important for me but maybe for some
-folks...
-
-Better metering configurability. Post/pre etc.
-
-Gui interface consistency.
-
-more keyboard shortcuts for f.i. (are they hard to add?):
- -arrow keys to move selection from region to region
- -seperate region. This one can be the same for split region, if there is
- a range selected seperate, if not split.
-
-
-Should playhead also snap to grid?
-
-Adding/removing snapshots through snapshot pane.
-
-I would prefer to move the pre and post roll adjustments to the options
-menu, and have a start/end/duration of selection clocks.
-
-A way to deal with misbehaving plugins. They shouldn't be able to freeze
-ardour.
-
-What is the current (and planned) edit-group functionality? It doesn't seem
-to much.
-
------
-
-make use of transients a run-time option
-panning for export
-
-mute automation event
-
-region length/end editor clocks don't modify position
-
-should we allow N-channels regions to be inserted into non-N-channel routes?
-
-auto-crossfades are unreliable/hard to predict/confusing
-reset declick curves when doing a region copy (only if auto-crossfading?)
-
-audio clock editing
- - make drag work again
- - use tick field
-
-post fader plug/inserts get into a very inconsistent state wrt active/not active
-mixer strip widths are not persistent across state save/restore
-automation-read updates in mixer-strip in editor
-don't initiate MIDI binding if there is no MMC control
-export to audiofile
- - exports tracks not marked for export (?)
- - contains clicks/pops even with no SRC/dither (FIXED?)
-
-timefx region length error (check back with audacity crew)
-send gain control is clicky.
-some regionview names don't seem sensitive to canvas events
-splice mode needs to work correctly all the time, at the right times
-removing a port then adding a new one can cause duplicate names
-plugin automation buttons don't update from a plugin signal
-how to handle multichannel selections
-apparently selected location on startup of locations window, or
- when creating new location from selection is *not* selected
-source/region naming/region list display
-
-LONG TERM CHECKING
-------------------
-RT-ness of all RT-thread STL usage
-
-GUI DETAILS
------------
-Use mouse wheel events (button4/5)
-Remove regions from region list
-Some location window ops need dbl click, some don't
-
-
-CHROME
-------
-make prompters look nicer still.
-make ladspa plugin selector look nicer
-don't popup "no group" when there are no groups (mixer strip).
-fix bug in Gtkmmext with wrapping on Gtkmmext::ClickBox
-make region editors look nicer
-region editor audition button doesn't pop up after audition is finished
-allow same color for all streamviews
-
-AUDIO STREAM
-------------
-
-[ These are JACK TODO's ]
-
-* need to ensure that cards like the Hammerfall are really set
- to the correct sample rate when connected to an external
- clock source.
-* ::connect_to_session() should indicate a problem if the
- sample rate is wrong ....
-
-MIDI Machine Control
------------------------
-
-* handle stupid Mackie TC buttons
-* send MMC rec-enable messages
-* allow control (MMC/Local) selection to work
-* make sure that MMC ID works
-
-EDITOR, etc.
-------------
-
-* "use location to define selection"
diff --git a/DOCUMENTATION/TRANSLATORS b/DOCUMENTATION/TRANSLATORS
deleted file mode 100644
index 55b3723d16..0000000000
--- a/DOCUMENTATION/TRANSLATORS
+++ /dev/null
@@ -1,27 +0,0 @@
-If you would like to see Ardour in your native langauge, please contact
-the Ardour development mailing list. It's members only, but can be joined
-at http://ardour.org.
-
-Many thanks to these translators for making Ardour available in other
-languages:
-
-French: Alain Fréhel <alain.frehel@free.fr>
- Christophe Combelles <ccomb@free.fr>
-
-German: Karsten Petersen <kapet@kapet.de>
-
-Italian: Filippo Pappalardo <filippo@email.it>
-
-Portuguese: Rui Nuno Capela <rncbc@rncbc.org>
-
-Brazilian Portuguese: Alexander da Franca Fernandes <alexander@nautae.eti.br>
- Chris Ross <chris@tebibyte.org>
-
-Russian: Igor Blinov <pitstop@nm.ru>
-
-Spanish: Alex Krohn <alexkrohn@fastmail.fm>
-
-Swedish: Petter Sundlöf <petter.sundlof@gmail.com>
-
-Polish: Piotr Zaryk <pzaryk@gmail.com>
-
diff --git a/README b/README
index 62de1c1ae3..caef8bda5a 100644
--- a/README
+++ b/README
@@ -1,5 +1,3 @@
-Please see the DOCUMENTATION directory.
-
-If you plan to compile ardour from scratch, BUILD is required reading.
+Please see the Ardour web site at http://ardour.org/ for all documentation.
diff --git a/SConstruct b/SConstruct
index a56c690fde..7cdd1449e7 100644
--- a/SConstruct
+++ b/SConstruct
@@ -49,6 +49,7 @@ opts.AddOptions(
BoolOption('NLS', 'Set to turn on i18n support', 1),
PathOption('PREFIX', 'Set the install "prefix"', '/usr/local'),
BoolOption('SURFACES', 'Build support for control surfaces', 1),
+ BoolOption('WIIMOTE', 'Build the wiimote control surface', 0),
BoolOption('SYSLIBS', 'USE AT YOUR OWN RISK: CANCELS ALL SUPPORT FROM ARDOUR AUTHORS: Use existing system versions of various libraries instead of internal ones', 0),
BoolOption('UNIVERSAL', 'Compile as universal binary. Requires that external libraries are already universal.', 0),
BoolOption('VERSIONED', 'Add revision information to ardour/gtk executable name inside the build directory', 0),
@@ -285,9 +286,9 @@ def create_stored_revision (target = None, source = None, env = None):
print "Using packaged svn revision"
return
else:
- print "Your source does not include revision information."
- print "Please check out the code from a repository or use a properly packaged version!"
- sys.exit (-1)
+ if not os.path.exists('libs/ardour/ardour/svn_revision.h'):
+ print "This release of ardour is missing libs/ardour/ardour/svn_revision.h. Blame the packager."
+ sys.exit (-1)
try:
text = "#include <ardour/svn_revision.h>\n"
@@ -605,6 +606,9 @@ if env['LV2']:
else:
print 'LV2 support is not enabled. Build with \'scons LV2=1\' to enable.'
+if not env['WIIMOTE']:
+ print 'WIIMOTE not enabled. Build with \'scons WIIMOTE=1\' to enable support.'
+
libraries['jack'] = LibraryInfo()
libraries['jack'].ParseConfig('pkg-config --cflags --libs jack')
@@ -736,8 +740,14 @@ elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_6
build_host_supports_sse = 0
- debug_flags.append ("-DARCH_X86")
- opt_flags.append ("-DARCH_X86")
+ #
+ # ARCH_X86 means anything in the x86 family from i386 to x86_64
+ # USE_X86_64_ASM is used to distingush 32 and 64 bit assembler
+ #
+
+ if (re.search ("(i[0-9]86|x86_64)", config[config_cpu]) != None):
+ debug_flags.append ("-DARCH_X86")
+ opt_flags.append ("-DARCH_X86")
if config[config_kernel] == 'linux' :
@@ -869,15 +879,15 @@ if env['LIBLO']:
def prep_libcheck(topenv, libinfo):
if topenv['IS_OSX']:
#
- # rationale: GTK-Quartz uses jhbuild and installs to $HOME/gtk/inst by default.
- # All libraries needed should be built against this location
+ # rationale: GTK-Quartz uses jhbuild and installs to ~/gtk/inst by default.
+ # All libraries needed should be built against this location
if topenv['GTKOSX']:
- GTKROOT = os.path.expanduser ('~/gtk/inst')
- libinfo.Append(CPPPATH= GTKROOT + "/include", LIBPATH= GTKROOT + "/lib")
- libinfo.Append(CXXFLAGS="-I" + GTKROOT + "/include", LINKFLAGS="-L" + GTKROOT + "/lib")
- #libinfo.Append(CPPPATH="/opt/local/include", LIBPATH="/opt/local/lib")
- #libinfo.Append(CXXFLAGS="-I/opt/local/include", LINKFLAGS="-L/opt/local/lib")
+ GTKROOT = os.path.expanduser ('~/gtk/inst')
+ libinfo.Append(CPPPATH= GTKROOT + "/include", LIBPATH= GTKROOT + "/lib")
+ libinfo.Append(CXXFLAGS="-I" + GTKROOT + "/include", LINKFLAGS="-L" + GTKROOT + "/lib")
+
+
prep_libcheck(env, env)
@@ -934,6 +944,45 @@ else:
libraries['usb'] = conf.Finish ()
+#
+# Check for wiimote dependencies
+
+if env['WIIMOTE']:
+ wiimoteConf = env.Configure ( )
+ if not wiimoteConf.CheckHeader('cwiid.h'):
+ print 'WIIMOTE configured but you are missing libcwiid!'
+ sys.exit(1)
+ if not wiimoteConf.CheckHeader('bluetooth/bluetooth.h'):
+ print 'WIIMOTE configured but you are missing the libbluetooth headers which you need to compile wiimote support!'
+ sys.exit(1)
+ wiimoteConf.Finish()
+
+
+#
+# Check for FLAC
+
+libraries['flac'] = LibraryInfo ()
+prep_libcheck(env, libraries['flac'])
+libraries['flac'].Append(CPPPATH="/usr/local/include", LIBPATH="/usr/local/lib")
+
+#
+# june 1st 2007: look for a function that is in FLAC 1.1.2 and not in later versions
+# since the version of libsndfile we have internally does not support
+# the new API that libFLAC has adopted
+#
+
+conf = Configure (libraries['flac'])
+if conf.CheckLib ('FLAC', 'FLAC__seekable_stream_decoder_init', language='CXX'):
+ conf.env.Append(CCFLAGS='-DHAVE_FLAC')
+ use_flac = True
+else:
+ use_flac = False
+
+libraries['flac'] = conf.Finish ()
+
+# or if that fails...
+#libraries['flac'] = LibraryInfo (LIBS='FLAC')
+
# boost (we don't link against boost, just use some header files)
libraries['boost'] = LibraryInfo ()
@@ -1040,6 +1089,11 @@ else:
env = conf.Finish()
+if env['GTKOSX']:
+ clearlooks_version = 'libs/clearlooks-newer'
+else:
+ clearlooks_version = 'libs/clearlooks-older'
+
if env['SYSLIBS']:
syslibdeps = \
@@ -1124,7 +1178,7 @@ if env['SYSLIBS']:
# 'libs/flowcanvas',
'libs/gtkmm2ext',
'gtk2_ardour',
- 'libs/clearlooks'
+ clearlooks_version
]
else:
@@ -1143,6 +1197,9 @@ else:
libraries['pangomm'] = LibraryInfo(LIBS='pangomm',
LIBPATH='#libs/gtkmm2/pango',
CPPPATH='#libs/gtkmm2/pango')
+ libraries['cairomm'] = LibraryInfo(LIBS='cairomm',
+ LIBPATH='#libs/cairomm',
+ CPPPATH='#libs/cairomm')
libraries['atkmm'] = LibraryInfo(LIBS='atkmm',
LIBPATH='#libs/gtkmm2/atk',
CPPPATH='#libs/gtkmm2/atk')
@@ -1206,22 +1263,23 @@ else:
'libs/libgnomecanvasmm',
'libs/gtkmm2ext',
'gtk2_ardour',
- 'libs/clearlooks',
- 'libs/cairomm'
+ 'libs/cairomm',
+ clearlooks_version
]
#
# * always build the LGPL control protocol lib, since we link against it from libardour
# * ditto for generic MIDI
-# * tranzport checks whether it should build internally, but we need here so that
-# its included in the tarball
+# * tranzport & wiimote check whether they should build internally, but we need them here
+# so that they are included in the tarball
#
surface_subdirs = [ 'libs/surfaces/control_protocol',
'libs/surfaces/generic_midi',
'libs/surfaces/tranzport',
'libs/surfaces/mackie',
- 'libs/surfaces/powermate'
+ 'libs/surfaces/powermate',
+ 'libs/surfaces/wiimote'
]
if env['SURFACES']:
@@ -1337,6 +1395,21 @@ if not conf.CheckFunc('posix_memalign'):
env = conf.Finish()
+# Which GTK tooltips API
+
+gtktestenv = env.Clone ()
+gtktestenv.Merge ([
+ libraries['gtk2']
+ ])
+
+conf = gtktestenv.Configure ()
+
+if conf.CheckFunc('gtk_widget_set_tooltip_text'):
+ env.Append (CXXFLAGS='-DGTK_NEW_TOOLTIP_API')
+
+conf.Finish ()
+
+
# generate the per-user and system rc files from the same source
sysrcbuild = env.SubstInFile ('ardour_system.rc','ardour.rc.in', SUBST_DICT = subst_dict)
@@ -1369,7 +1442,7 @@ Default (sysrcbuild)
Precious (env['DISTTREE'])
env.Distribute (env['DISTTREE'],
- [ 'SConstruct',
+ [ 'SConstruct',
'COPYING', 'PACKAGER_README', 'README',
'ardour.rc.in',
'tools/config.guess',
@@ -1384,12 +1457,10 @@ env.Distribute (env['DISTTREE'],
'icons/icon/ardour_icon_tango_48px_blue.png',
'icons/icon/ardour_icon_tango_48px_red.png'
] +
- glob.glob ('DOCUMENTATION/AUTHORS*') +
- glob.glob ('DOCUMENTATION/CONTRIBUTORS*') +
- glob.glob ('DOCUMENTATION/TRANSLATORS*') +
- glob.glob ('DOCUMENTATION/BUILD*') +
- glob.glob ('DOCUMENTATION/FAQ*') +
- glob.glob ('DOCUMENTATION/README*')
+ glob.glob ('ardour.1*') +
+ glob.glob ('libs/clearlooks-newer/*.c') +
+ glob.glob ('libs/clearlooks-newer/*.h') +
+ glob.glob ('libs/clearlooks-newer/SConscript')
)
srcdist = env.Tarball(env['TARBALL'], [ env['DISTTREE'], the_revision ])
diff --git a/DOCUMENTATION/ardour.1 b/ardour.1
index cca40787b9..cca40787b9 100644
--- a/DOCUMENTATION/ardour.1
+++ b/ardour.1
diff --git a/DOCUMENTATION/ardour.1.es b/ardour.1.es
index d58a037df4..d58a037df4 100644
--- a/DOCUMENTATION/ardour.1.es
+++ b/ardour.1.es
diff --git a/DOCUMENTATION/ardour.1.fr b/ardour.1.fr
index 368cb81919..368cb81919 100644
--- a/DOCUMENTATION/ardour.1.fr
+++ b/ardour.1.fr
diff --git a/DOCUMENTATION/ardour.1.ru b/ardour.1.ru
index 06ab1146f5..06ab1146f5 100644
--- a/DOCUMENTATION/ardour.1.ru
+++ b/ardour.1.ru
diff --git a/ardour_system_sae.rc b/ardour_system_sae.rc
index 551ee61fca..c11a01c9a3 100644
--- a/ardour_system_sae.rc
+++ b/ardour_system_sae.rc
@@ -39,13 +39,33 @@
<Option name="periodic-safety-backups" value="1"/>
<Option name="periodic-safety-backup-interval" value="120"/>
<Option name="show-track-meters" value="1"/>
- <Option name="default-narrow_ms" value="0"/>
+ <Option name="default-narrow_ms" value="0"/>
<Option name="smpte-format" value="6"/>
- <Option name="font-scale" value="102400"/>
+ <Option name="font-scale" value="102400"/>
+ <Option name="auto-return" value="1"/>
+ <Option name="solo-latched" value="0"/>
+ <Option name="link-region-and-track-selection" value="1"/>
+ <Option name="send-mtc" value="1"/>
+ <Option name="tape-machine-mode" value="1"/>
+ <Option name="monitoring-model" value="1"/>
</Config>
+
<extra>
<RulerVisibility smpte="yes" bbt="yes" frames="no" minsec="no" tempo="yes" meter="yes" marker="yes" rangemarker="no" transportmarker="yes" cdmarker="no"/>
<Keyboard edit-button="3" edit-modifier="4" delete-button="3" delete-modifier="1" snap-modifier="32"/>
+ <AudioSetup>
+ <periods val="2"/>
+ <priority val="60"/>
+ <ports val="256"/>
+ <realtime val="1"/>
+ <samplerate val="44100Hz"/>
+ <periodsize val="256"/>
+ <driver val="CoreAudio"/>
+ <interface val="Aggregate Device"/>
+ <inputdevice val="Aggregate Device"/>
+ <outputdevice val="Aggregate Device"/>
+ </AudioSetup>
+
</extra>
</Ardour>
diff --git a/gtk2_ardour/SAE-de-keypad.bindings.in b/gtk2_ardour/SAE-de-keypad.bindings.in
new file mode 100644
index 0000000000..e8e3e1b338
--- /dev/null
+++ b/gtk2_ardour/SAE-de-keypad.bindings.in
@@ -0,0 +1,214 @@
+; ardour-2.2 GtkAccelMap rc-file -*- scheme -*-
+; this file is a hand-edited map that is processed by scons
+; to produce a real accelmap.
+;
+
+;; punctuation
+(gtk_accel_path "<Actions>/Editor/center-playhead" "Escape")
+(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
+(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>period")
+(gtk_accel_path "<Actions>/Transport/record-roll" "<%PRIMARY%>space")
+
+(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%PRIMARY%>,")
+
+(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-end-relative" "<%PRIMARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-start" "<%LEVEL4%><%SECONDARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%LEVEL4%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%SECONDARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "less")
+
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
+(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "asciicircum")
+(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>asciicircum")
+
+(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
+(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
+
+(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
+(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
+
+(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
+(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
+
+;; letters
+
+;; OBERE ZEILE
+
+(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
+(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
+(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
+(gtk_accel_path "<Actions>/Editor/set-playhead" "w")
+;; note that ctrl-w is special and consumed by the keyboard snooper
+
+
+(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
+(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
+(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
+(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
+(gtk_accel_path "<Actions>/Editor/export-region" "<%PRIMARY%><%TERTIARY%>e")
+(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
+; (gtk_accel_path "<Actions>/Common/goto-editor" "<%SECONDARY%>e")
+(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%><%TERTIARY%>z")
+(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
+(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
+(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
+(gtk_accel_path "<Actions>/Editor/reverse-region" "<%LEVEL4%>r")
+(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
+(gtk_accel_path "<Actions>/Common/ToggleThemeManager" "<%WINDOW%>t")
+(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "<%LEVEL4%>t")
+(gtk_accel_path "<Actions>/Editor/split-region" "y")
+(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
+(gtk_accel_path "<Actions>/Editor/insert-region" "i")
+(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
+(gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i")
+(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
+(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
+(gtk_accel_path "<Actions>/Editor/naturalize-region" "<%LEVEL4%>o")
+(gtk_accel_path "<Actions>/Transport/TogglePunch" "p")
+(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
+
+;; MITTELZEILE
+
+(gtk_accel_path "<Actions>/Editor/trim-front" "a")
+(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
+(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%>a")
+(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%><%SECONDARY%>a")
+(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
+(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
+(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
+(gtk_accel_path "<Actions>/Editor/trim-back" "d")
+(gtk_accel_path "<Actions>/Editor/duplicate-region" "<%PRIMARY%>d")
+(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%PRIMARY%><%TERTIARY%>d")
+(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
+(gtk_accel_path "<Actions>/Common/toggle-rhythm-ferret" "<%WINDOW%>f")
+; (gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
+; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
+(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
+(gtk_accel_path "<Actions>/Editor/nudge-forward" "h")
+(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%SECONDARY%>k")
+(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%SECONDARY%>l")
+(gtk_accel_path "<Actions>/Transport/Loop" "l")
+(gtk_accel_path "<Actions>/Editor/lock-region" "<%LEVEL4%>l")
+(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
+
+;; UNTERE ZEILE
+
+(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
+(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
+(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>z")
+(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z")
+(gtk_accel_path "<Actions>/Editor/editor-separate" "x")
+(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
+(gtk_accel_path "<Actions>/Editor/crop" "c")
+(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
+(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%SECONDARY%>c")
+(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
+(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "b")
+(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%SECONDARY%>b")
+(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
+(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
+(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
+(gtk_accel_path "<Actions>/Common/toggle-editor-mixer-on-top" "<%SECONDARY%>m")
+(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
+(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
+
+;; arrow keys, navigation etc.
+
+(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
+(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
+(gtk_accel_path "<Actions>/Editor/editor-delete" "BackSpace")
+(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>Delete")
+
+(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
+(gtk_accel_path "<Actions>/Editor/playhead-backward-to-grid" "<%TERTIARY%><%LEVEL4%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
+(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%SECONDARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%TERTIARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%><%SECONDARY%>leftarrow")
+
+(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
+
+(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
+(gtk_accel_path "<Actions>/Editor/playhead-forward-to-grid" "<%TERTIARY%><%LEVEL4%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
+(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%SECONDARY%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%TERTIARY%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%><%SECONDARY%>rightarrow")
+
+(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
+
+
+(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
+(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
+
+(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
+(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%PRIMARY%><%TERTIARY%>End")
+(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%>End")
+
+(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
+(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%><%TERTIARY%>Home")
+(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%TERTIARY%>Home")
+
+(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
+(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
+(gtk_accel_path "<Actions>/Editor/move-selected-tracks-up" "<%TERTIARY%>uparrow")
+(gtk_accel_path "<Actions>/Editor/select-next-route" "downarrow")
+(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
+(gtk_accel_path "<Actions>/Editor/move-selected-tracks-down" "<%TERTIARY%>downarrow")
+
+;; keypad
+
+(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
+(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
+(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
+(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
+(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
+(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
+(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
+(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
+(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
+(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
+(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
+(gtk_accel_path "<Actions>/Editor/cut-region-gain" "KP_Subtract")
+
+(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
+(gtk_accel_path "<Actions>/Editor/boost-region-gain" "KP_Add")
+
+(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
+
+;; F-N keys
+
+; (gtk_accel_path "<Actions>/Editor/start-range" "F1")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
+; (gtk_accel_path "<Actions>/Editor/finish-range" "F2")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
+; (gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
+(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "F1")
+(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F2")
+
+
+
+
+;; numbers
+
+(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
+(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
+(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "4")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "5")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "6")
+(gtk_accel_path "<Actions>/Transport/ToggleClick" "7")
+
+(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "8")
+(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%LEVEL4%>8")
+; (gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>8")
+
+(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "9")
+(gtk_accel_path "<Actions>/Editor/set-punch-from-region" "<%LEVEL4%>9")
+
+(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "<%LEVEL4%>0")
+(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
diff --git a/gtk2_ardour/SAE-de-nokeypad.bindings.in b/gtk2_ardour/SAE-de-nokeypad.bindings.in
new file mode 100644
index 0000000000..27c824e5dd
--- /dev/null
+++ b/gtk2_ardour/SAE-de-nokeypad.bindings.in
@@ -0,0 +1,214 @@
+; ardour-2.2 GtkAccelMap rc-file -*- scheme -*-
+; this file is a hand-edited map that is processed by scons
+; to produce a real accelmap.
+;
+
+;; punctuation
+(gtk_accel_path "<Actions>/Editor/center-playhead" "Escape")
+(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
+(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>period")
+(gtk_accel_path "<Actions>/Transport/record-roll" "<%PRIMARY%>space")
+
+(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%PRIMARY%>,")
+
+(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-end-relative" "<%PRIMARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-start" "<%LEVEL4%><%SECONDARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%LEVEL4%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%SECONDARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "less")
+
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
+(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "asciicircum")
+(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>asciicircum")
+
+(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
+(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
+
+(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
+(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
+
+(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
+(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
+
+;; letters
+
+;; OBERE ZEILE
+
+(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
+(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
+(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
+(gtk_accel_path "<Actions>/Editor/set-playhead" "w")
+;; note that ctrl-w is special and consumed by the keyboard snooper
+
+
+(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
+(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
+(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
+(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
+(gtk_accel_path "<Actions>/Editor/export-region" "<%PRIMARY%><%TERTIARY%>e")
+(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
+; (gtk_accel_path "<Actions>/Common/goto-editor" "<%SECONDARY%>e")
+(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%><%TERTIARY%>z")
+(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
+(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
+(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
+(gtk_accel_path "<Actions>/Editor/reverse-region" "<%LEVEL4%>r")
+(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
+(gtk_accel_path "<Actions>/Common/ToggleThemeManager" "<%SECONDARY%>t")
+(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "<%LEVEL4%>t")
+(gtk_accel_path "<Actions>/Editor/split-region" "y")
+(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
+(gtk_accel_path "<Actions>/Editor/insert-region" "i")
+(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
+(gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i")
+(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
+(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
+(gtk_accel_path "<Actions>/Editor/naturalize-region" "<%LEVEL4%>o")
+(gtk_accel_path "<Actions>/Transport/TogglePunch" "p")
+(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
+
+;; MITTELZEILE
+
+(gtk_accel_path "<Actions>/Editor/trim-front" "a")
+(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
+(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%>a")
+(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%><%SECONDARY%>a")
+(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
+(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
+(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
+(gtk_accel_path "<Actions>/Editor/trim-back" "d")
+(gtk_accel_path "<Actions>/Editor/duplicate-region" "<%PRIMARY%>d")
+(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%PRIMARY%><%TERTIARY%>d")
+(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
+(gtk_accel_path "<Actions>/Common/toggle-rhythm-ferret" "<%SECONDARY%>f")
+; (gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
+; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
+(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
+(gtk_accel_path "<Actions>/Editor/nudge-forward" "h")
+(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%SECONDARY%>k")
+(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%SECONDARY%>l")
+(gtk_accel_path "<Actions>/Transport/Loop" "l")
+(gtk_accel_path "<Actions>/Editor/lock-region" "<%LEVEL4%>l")
+(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
+
+;; UNTERE ZEILE
+
+(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
+(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
+(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>z")
+(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z")
+(gtk_accel_path "<Actions>/Editor/editor-separate" "x")
+(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
+(gtk_accel_path "<Actions>/Editor/crop" "c")
+(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
+(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%SECONDARY%>c")
+(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
+(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "b")
+(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%SECONDARY%>b")
+(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
+(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
+(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
+(gtk_accel_path "<Actions>/Common/toggle-editor-mixer-on-top" "<%SECONDARY%>m")
+(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
+
+;; arrow keys, navigation etc.
+
+(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
+(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
+(gtk_accel_path "<Actions>/Editor/editor-delete" "BackSpace")
+(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>BackSpace")
+
+(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
+(gtk_accel_path "<Actions>/Editor/playhead-backward-to-grid" "<%TERTIARY%><%LEVEL4%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
+(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%SECONDARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%TERTIARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%><%SECONDARY%>leftarrow")
+
+(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
+
+(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
+(gtk_accel_path "<Actions>/Editor/playhead-forward-to-grid" "<%TERTIARY%><%LEVEL4%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
+(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%SECONDARY%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%TERTIARY%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%><%SECONDARY%>rightarrow")
+
+(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
+
+
+(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
+(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
+
+(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
+(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%PRIMARY%><%TERTIARY%>End")
+(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%>End")
+
+(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
+(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%><%TERTIARY%>Home")
+(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%TERTIARY%>Home")
+
+(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
+(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
+(gtk_accel_path "<Actions>/Editor/move-selected-tracks-up" "<%TERTIARY%>uparrow")
+(gtk_accel_path "<Actions>/Editor/select-next-route" "downarrow")
+(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
+(gtk_accel_path "<Actions>/Editor/move-selected-tracks-down" "<%TERTIARY%>downarrow")
+
+;; keypad
+
+(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
+(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
+(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
+(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
+(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
+(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
+(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
+(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
+(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
+(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
+; (gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
+(gtk_accel_path "<Actions>/Editor/cut-region-gain" "j")
+
+; (gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
+(gtk_accel_path "<Actions>/Editor/boost-region-gain" "k")
+
+(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
+
+;; F-N keys
+
+; (gtk_accel_path "<Actions>/Editor/start-range" "F1")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
+; (gtk_accel_path "<Actions>/Editor/finish-range" "F2")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
+; (gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
+(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "F1")
+(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F2")
+
+
+
+
+;; numbers
+
+(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
+(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
+(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "4")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "5")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "6")
+(gtk_accel_path "<Actions>/Transport/ToggleClick" "7")
+
+(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "8")
+(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%LEVEL4%>8")
+; (gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>8")
+
+(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "9")
+(gtk_accel_path "<Actions>/Editor/set-punch-from-region" "<%LEVEL4%>9")
+
+(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "<%LEVEL4%>0")
+(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
+
diff --git a/gtk2_ardour/SAE-de.bindings.in b/gtk2_ardour/SAE-us-keypad.bindings.in
index fa4f3bcc37..e4d98140fd 100644
--- a/gtk2_ardour/SAE-de.bindings.in
+++ b/gtk2_ardour/SAE-us-keypad.bindings.in
@@ -4,9 +4,9 @@
;
;; punctuation
-
+(gtk_accel_path "<Actions>/Editor/center-playhead" "Escape")
(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
-(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
+(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>period")
(gtk_accel_path "<Actions>/Transport/record-roll" "<%PRIMARY%>space")
(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less")
@@ -16,23 +16,20 @@
(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%SECONDARY%>less")
(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "less")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "asciicircum")
(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>asciicircum")
(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
-(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "bracketright")
-(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%PRIMARY%><%SECONDARY%>bracketright")
-(gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>bracketright")
-
-(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "bracketleft")
-
(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
+(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
+(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
+
;; letters
;; OBERE ZEILE
@@ -40,25 +37,26 @@
(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
-
+(gtk_accel_path "<Actions>/Editor/set-playhead" "w")
;; note that ctrl-w is special and consumed by the keyboard snooper
-(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
-(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
-(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
+
(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
-(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e")
(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
+(gtk_accel_path "<Actions>/Editor/export-region" "<%PRIMARY%><%TERTIARY%>e")
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
; (gtk_accel_path "<Actions>/Common/goto-editor" "<%SECONDARY%>e")
-(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e")
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%><%TERTIARY%>z")
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
+(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
+(gtk_accel_path "<Actions>/Editor/reverse-region" "<%LEVEL4%>r")
(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
-(gtk_accel_path "<Actions>/Editor/split-region" "y")
+(gtk_accel_path "<Actions>/Common/ToggleThemeManager" "<%WINDOW%>t")
+(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "<%LEVEL4%>t")
+(gtk_accel_path "<Actions>/Editor/split-region" "z")
(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
(gtk_accel_path "<Actions>/Editor/insert-region" "i")
(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
@@ -66,19 +64,24 @@
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%SECONDARY%>o")
(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
-(gtk_accel_path "<Actions>/Editor/set-playhead" "w")
+(gtk_accel_path "<Actions>/Editor/naturalize-region" "<%LEVEL4%>o")
+(gtk_accel_path "<Actions>/Transport/TogglePunch" "p")
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
;; MITTELZEILE
(gtk_accel_path "<Actions>/Editor/trim-front" "a")
(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
-(gtk_accel_path "<Actions>/Editor/trim-back" "d")
+(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%>a")
+(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%><%SECONDARY%>a")
+(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
+(gtk_accel_path "<Actions>/Editor/trim-back" "d")
(gtk_accel_path "<Actions>/Editor/duplicate-region" "<%PRIMARY%>d")
(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%PRIMARY%><%TERTIARY%>d")
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
+(gtk_accel_path "<Actions>/Common/toggle-rhythm-ferret" "<%WINDOW%>f")
; (gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
@@ -86,25 +89,27 @@
(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%SECONDARY%>k")
(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%SECONDARY%>l")
(gtk_accel_path "<Actions>/Transport/Loop" "l")
+(gtk_accel_path "<Actions>/Editor/lock-region" "<%LEVEL4%>l")
(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
;; UNTERE ZEILE
-(gtk_accel_path "<Actions>/Editor/zoom-to-region" "z")
+(gtk_accel_path "<Actions>/Editor/zoom-to-region" "y")
(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
-(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>z")
-(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>z")
+(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>y")
+(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>y")
(gtk_accel_path "<Actions>/Editor/editor-separate" "x")
(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
(gtk_accel_path "<Actions>/Editor/crop" "c")
(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%SECONDARY%>c")
(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
+(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "b")
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%SECONDARY%>b")
(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
-(gtk_accel_path "<Actions>/Common/goto-mixer" "<%SECONDARY%>m")
+(gtk_accel_path "<Actions>/Common/toggle-editor-mixer-on-top" "<%SECONDARY%>m")
(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
@@ -116,26 +121,35 @@
(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>Delete")
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
+(gtk_accel_path "<Actions>/Editor/playhead-backward-to-grid" "<%TERTIARY%><%LEVEL4%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%SECONDARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%TERTIARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%><%SECONDARY%>leftarrow")
+
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
+(gtk_accel_path "<Actions>/Editor/playhead-forward-to-grid" "<%TERTIARY%><%LEVEL4%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%SECONDARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%TERTIARY%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%><%SECONDARY%>rightarrow")
+
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
+
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
-(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%>End")
-(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%><%PRIMARY%>End")
+(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%PRIMARY%><%TERTIARY%>End")
+(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%>End")
(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
-(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%TERTIARY%>Home")
+(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%><%TERTIARY%>Home")
(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%TERTIARY%>Home")
(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
@@ -152,37 +166,50 @@
(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
-(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%>KP_4")
(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
-(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%>KP_6")
(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
+(gtk_accel_path "<Actions>/Editor/cut-region-gain" "KP_Subtract")
+
(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
+(gtk_accel_path "<Actions>/Editor/boost-region-gain" "KP_Add")
+
(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
;; F-N keys
-(gtk_accel_path "<Actions>/Editor/start-range" "F1")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
-(gtk_accel_path "<Actions>/Editor/finish-range" "F2")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
-(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
-(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F11")
-(gtk_accel_path "<Actions>/Editor/select-all" "F14")
-(gtk_accel_path "<Actions>/Editor/invert-selection" "F15")
-(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "F16")
+; (gtk_accel_path "<Actions>/Editor/start-range" "F1")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
+; (gtk_accel_path "<Actions>/Editor/finish-range" "F2")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
+; (gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
+(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "F1")
+(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F2")
+
+
+
;; numbers
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
-(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "4")
-(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
-(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "9")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "4")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "5")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "6")
+(gtk_accel_path "<Actions>/Transport/ToggleClick" "7")
+
+(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "8")
+(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%LEVEL4%>8")
+; (gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>8")
+
+(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "9")
+(gtk_accel_path "<Actions>/Editor/set-punch-from-region" "<%LEVEL4%>9")
+
+(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "<%LEVEL4%>0")
(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
;;
@@ -246,7 +273,6 @@
; (gtk_accel_path "<Actions>/Editor/View" "")
; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
-; (gtk_accel_path "<Actions>/Editor/center-playhead" "")
; (gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "")
; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
@@ -330,9 +356,9 @@
; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-thirds" "")
; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
-; (gtk_accel_path "<Actions>/Transport/PlaySelection" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "")
+; (gtk_accel_path "<Actions>/Transport/Playwion" "")
+
+
; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
@@ -384,19 +410,19 @@
; (gtk_accel_path "<Actions>/options/UseMMC" "")
; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
-; (gtk_accel_path "<Actions>/processormenu/activate" "")
-; (gtk_accel_path "<Actions>/processormenu/activate_all" "")
-; (gtk_accel_path "<Actions>/processormenu/clear" "")
-; (gtk_accel_path "<Actions>/processormenu/copy" "")
-; (gtk_accel_path "<Actions>/processormenu/cut" "")
-; (gtk_accel_path "<Actions>/processormenu/deactivate" "")
-; (gtk_accel_path "<Actions>/processormenu/deactivate_all" "")
-; (gtk_accel_path "<Actions>/processormenu/deselectall" "<%PRIMARY%><%TERTIARY%>a")
-; (gtk_accel_path "<Actions>/processormenu/edit" "")
-; (gtk_accel_path "<Actions>/processormenu/newinsert" "")
-; (gtk_accel_path "<Actions>/processormenu/newplugin" "")
-; (gtk_accel_path "<Actions>/processormenu/newsend" "")
-; (gtk_accel_path "<Actions>/processormenu/paste" "")
-; (gtk_accel_path "<Actions>/processormenu/rename" "")
-; (gtk_accel_path "<Actions>/processormenu/selectall" "")
+; (gtk_accel_path "<Actions>/redirectmenu/activate" "")
+; (gtk_accel_path "<Actions>/redirectmenu/activate_all" "")
+; (gtk_accel_path "<Actions>/redirectmenu/clear" "")
+; (gtk_accel_path "<Actions>/redirectmenu/copy" "")
+; (gtk_accel_path "<Actions>/redirectmenu/cut" "")
+; (gtk_accel_path "<Actions>/redirectmenu/deactivate" "")
+; (gtk_accel_path "<Actions>/redirectmenu/deactivate_all" "")
+; (gtk_accel_path "<Actions>/redirectmenu/deselectall" "<%PRIMARY%><%TERTIARY%>a")
+; (gtk_accel_path "<Actions>/redirectmenu/edit" "")
+; (gtk_accel_path "<Actions>/redirectmenu/newinsert" "")
+; (gtk_accel_path "<Actions>/redirectmenu/newplugin" "")
+; (gtk_accel_path "<Actions>/redirectmenu/newsend" "")
+; (gtk_accel_path "<Actions>/redirectmenu/paste" "")
+; (gtk_accel_path "<Actions>/redirectmenu/rename" "")
+; (gtk_accel_path "<Actions>/redirectmenu/selectall" "")
;(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")
diff --git a/gtk2_ardour/SAE-us-nokeypad.bindings.in b/gtk2_ardour/SAE-us-nokeypad.bindings.in
new file mode 100644
index 0000000000..a84ee2bf20
--- /dev/null
+++ b/gtk2_ardour/SAE-us-nokeypad.bindings.in
@@ -0,0 +1,213 @@
+; ardour-2.2 GtkAccelMap rc-file -*- scheme -*-
+; this file is a hand-edited map that is processed by scons
+; to produce a real accelmap.
+;
+
+;; punctuation
+(gtk_accel_path "<Actions>/Editor/center-playhead" "Escape")
+(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
+(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>period")
+(gtk_accel_path "<Actions>/Transport/record-roll" "<%PRIMARY%>space")
+
+(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%PRIMARY%><%SECONDARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-end-relative" "<%PRIMARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-start" "<%LEVEL4%><%SECONDARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%LEVEL4%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%SECONDARY%>less")
+(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "less")
+
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
+(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "asciicircum")
+(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>asciicircum")
+
+(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
+(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
+
+(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
+(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
+
+(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
+(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>space")
+
+;; letters
+
+;; OBERE ZEILE
+
+(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
+(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
+(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
+(gtk_accel_path "<Actions>/Editor/set-playhead" "w")
+;; note that ctrl-w is special and consumed by the keyboard snooper
+
+
+(gtk_accel_path "<Actions>/Main/Close" "<%PRIMARY%>w")
+(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
+(gtk_accel_path "<Actions>/Main/ExportSession" "<%PRIMARY%>e")
+(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
+(gtk_accel_path "<Actions>/Editor/export-region" "<%PRIMARY%><%TERTIARY%>e")
+(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
+; (gtk_accel_path "<Actions>/Common/goto-editor" "<%SECONDARY%>e")
+(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%><%TERTIARY%>z")
+(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
+(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
+(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
+(gtk_accel_path "<Actions>/Editor/reverse-region" "<%LEVEL4%>r")
+(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
+(gtk_accel_path "<Actions>/Common/ToggleThemeManager" "<%SECONDARY%>t")
+(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "<%LEVEL4%>t")
+(gtk_accel_path "<Actions>/Editor/split-region" "z")
+(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
+(gtk_accel_path "<Actions>/Editor/insert-region" "i")
+(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%PRIMARY%>i")
+(gtk_accel_path "<Actions>/Editor/invert-selection" "<%TERTIARY%>i")
+(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%SECONDARY%>o")
+(gtk_accel_path "<Actions>/Main/Open" "<%PRIMARY%>o")
+(gtk_accel_path "<Actions>/Main/Recent" "<%PRIMARY%><%TERTIARY%>o")
+(gtk_accel_path "<Actions>/Editor/naturalize-region" "<%LEVEL4%>o")
+(gtk_accel_path "<Actions>/Transport/TogglePunch" "p")
+(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%TERTIARY%>p")
+
+;; MITTELZEILE
+
+(gtk_accel_path "<Actions>/Editor/trim-front" "a")
+(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
+(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%>a")
+(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "<%TERTIARY%><%SECONDARY%>a")
+(gtk_accel_path "<Actions>/Editor/play-selected-regions" "s")
+(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
+(gtk_accel_path "<Actions>/Main/Snapshot" "<%PRIMARY%><%TERTIARY%>s")
+(gtk_accel_path "<Actions>/Editor/trim-back" "d")
+(gtk_accel_path "<Actions>/Editor/duplicate-region" "<%PRIMARY%>d")
+(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%PRIMARY%><%TERTIARY%>d")
+(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
+(gtk_accel_path "<Actions>/Common/toggle-rhythm-ferret" "<%SECONDARY%>f")
+; (gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
+; (gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
+(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
+(gtk_accel_path "<Actions>/Editor/nudge-forward" "h")
+(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%SECONDARY%>k")
+(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%SECONDARY%>l")
+(gtk_accel_path "<Actions>/Transport/Loop" "l")
+(gtk_accel_path "<Actions>/Editor/lock-region" "<%LEVEL4%>l")
+(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%TERTIARY%>l")
+
+;; UNTERE ZEILE
+
+(gtk_accel_path "<Actions>/Editor/zoom-to-region" "y")
+(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
+(gtk_accel_path "<Actions>/Editor/zoom-to-session" "<%SECONDARY%>y")
+(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<%TERTIARY%>y")
+(gtk_accel_path "<Actions>/Editor/editor-separate" "x")
+(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
+(gtk_accel_path "<Actions>/Editor/crop" "c")
+(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
+(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%SECONDARY%>c")
+(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
+(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "b")
+(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%SECONDARY%>b")
+(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
+(gtk_accel_path "<Actions>/Main/New" "<%PRIMARY%>n")
+(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%TERTIARY%>n")
+(gtk_accel_path "<Actions>/Common/toggle-editor-mixer-on-top" "<%SECONDARY%>m")
+(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
+
+;; arrow keys, navigation etc.
+
+(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
+(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
+(gtk_accel_path "<Actions>/Editor/editor-delete" "BackSpace")
+(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>BackSpace")
+
+(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
+(gtk_accel_path "<Actions>/Editor/playhead-backward-to-grid" "<%TERTIARY%><%LEVEL4%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
+(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%SECONDARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%TERTIARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%><%SECONDARY%>leftarrow")
+
+(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
+
+(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
+(gtk_accel_path "<Actions>/Editor/playhead-forward-to-grid" "<%TERTIARY%><%LEVEL4%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "<%TERTIARY%><%SECONDARY%>leftarrow")
+(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%SECONDARY%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%TERTIARY%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%><%SECONDARY%>rightarrow")
+
+(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
+
+
+(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
+(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
+
+(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
+(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%PRIMARY%><%TERTIARY%>End")
+(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%>End")
+
+(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
+(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%><%TERTIARY%>Home")
+(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%TERTIARY%>Home")
+
+(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
+(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
+(gtk_accel_path "<Actions>/Editor/move-selected-tracks-up" "<%TERTIARY%>uparrow")
+(gtk_accel_path "<Actions>/Editor/select-next-route" "downarrow")
+(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
+(gtk_accel_path "<Actions>/Editor/move-selected-tracks-down" "<%TERTIARY%>downarrow")
+
+;; keypad
+
+(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
+(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
+(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
+(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
+(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
+(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
+(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
+(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
+(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
+(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
+; (gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
+(gtk_accel_path "<Actions>/Editor/cut-region-gain" "j")
+
+; (gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
+(gtk_accel_path "<Actions>/Editor/boost-region-gain" "k")
+
+(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_Insert")
+
+;; F-N keys
+
+; (gtk_accel_path "<Actions>/Editor/start-range" "F1")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
+; (gtk_accel_path "<Actions>/Editor/finish-range" "F2")
+; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
+; (gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
+(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "F1")
+(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F2")
+
+
+
+
+;; numbers
+
+(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
+(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
+(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "4")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "5")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "6")
+(gtk_accel_path "<Actions>/Transport/ToggleClick" "7")
+
+(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "8")
+(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%LEVEL4%>8")
+; (gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>8")
+
+(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "9")
+(gtk_accel_path "<Actions>/Editor/set-punch-from-region" "<%LEVEL4%>9")
+
+(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "<%LEVEL4%>0")
+(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
+
diff --git a/gtk2_ardour/SAE-us.bindings.in b/gtk2_ardour/SAE-us.bindings.in
deleted file mode 100644
index a8c3f1fe0e..0000000000
--- a/gtk2_ardour/SAE-us.bindings.in
+++ /dev/null
@@ -1,346 +0,0 @@
-; ardour GtkAccelMap rc-file -*- scheme -*-
-; this file is an automated accelerator map dump
-;
-; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
-(gtk_accel_path "<Actions>/Common/Quit" "<%PRIMARY%>q")
-(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
-; (gtk_accel_path "<Actions>/Editor/Pullup" "")
-; (gtk_accel_path "<Actions>/Editor/zoom-to-session" "")
-; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "")
-; (gtk_accel_path "<Actions>/Editor/Autoconnect" "")
-; (gtk_accel_path "<Actions>/Editor/Edit" "")
-(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "grave")
-(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<%SECONDARY%>grave")
-(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
-(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
-(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
-; (gtk_accel_path "<Actions>/processormenu/copy" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
-(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<%PRIMARY%>space")
-(gtk_accel_path "<Actions>/Transport/record-roll" "<%TERTIARY%>space")
-(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionLength" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffSlowest" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
-; (gtk_accel_path "<Actions>/processormenu/deactivate_all" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionPosition" "")
-; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
-(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<%SECONDARY%>i")
-; (gtk_accel_path "<Actions>/options/MeterFalloffSlow" "")
-; (gtk_accel_path "<Actions>/RegionList/rlHide" "")
-; (gtk_accel_path "<Actions>/Main/Metering" "")
-(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
-(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-playhead" "")
-; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
-; (gtk_accel_path "<Actions>/Editor/Monitoring" "")
-; (gtk_accel_path "<Actions>/processormenu/deactivate" "")
-; (gtk_accel_path "<Actions>/options/LatchedRecordEnable" "")
-; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
-; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsPercentage" "")
-; (gtk_accel_path "<Actions>/Main/Close" "")
-; (gtk_accel_path "<Actions>/Main/New" "")
-(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<%PRIMARY%>KP_Subtract")
-; (gtk_accel_path "<Actions>/Editor/EditSelectRangeOptions" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleTimeMaster" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-thirds" "")
-(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%TERTIARY%>a")
-; (gtk_accel_path "<Actions>/Main/Export" "")
-(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<%PRIMARY%>KP_Right")
-; (gtk_accel_path "<Actions>/Editor/Smpte30" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-range-start" "")
-; (gtk_accel_path "<Actions>/Editor/Subframes" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte2997drop" "")
-(gtk_accel_path "<Actions>/Main/AddTrackBus" "<%PRIMARY%><%SECONDARY%>n")
-(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%LEVEL4%>a")
-; (gtk_accel_path "<Actions>/JACK/JACKDisconnect" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFast" "")
-; (gtk_accel_path "<Actions>/options/FileDataFormatFloat" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-end" "")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
-; (gtk_accel_path "<Actions>/options/StopRecordingOnXrun" "")
-; (gtk_accel_path "<Actions>/RegionList/SortDescending" "")
-; (gtk_accel_path "<Actions>/options/DoNotRunPluginsWhileRecording" "")
-; (gtk_accel_path "<Actions>/Editor/PullupNone" "")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-range" "r")
-(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<%PRIMARY%>KP_Left")
-; (gtk_accel_path "<Actions>/Main/AudioFileFormatData" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFastest" "")
-(gtk_accel_path "<Actions>/Editor/play-selected-regions" "w")
-(gtk_accel_path "<Actions>/Editor/play-edit-range" "<%SECONDARY%>w")
-(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
-; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-frame" "")
-; (gtk_accel_path "<Actions>/Main/ExportSelection" "")
-; (gtk_accel_path "<Actions>/options/StopPluginsWithTransport" "")
-(gtk_accel_path "<Actions>/Editor/editor-paste" "<%PRIMARY%>v")
-(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
-(gtk_accel_path "<Actions>/Editor/select-next-route" "downarrow")
-(gtk_accel_path "<Actions>/Editor/select-prev-route" "uparrow")
-; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-minutes" "")
-; (gtk_accel_path "<Actions>/Main/FlushWastebasket" "")
-(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
-(gtk_accel_path "<Actions>/Editor/nudge-forward" "h")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionEndinFile" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleMeasureVisibility" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-center" "")
-(gtk_accel_path "<Actions>/Editor/nudge-backward" "g")
-; (gtk_accel_path "<Actions>/options/LatchedSolo" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldOff" "")
-; (gtk_accel_path "<Actions>/options/OutputAutoConnectMaster" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency64" "")
-(gtk_accel_path "<Actions>/Editor/undo" "<%PRIMARY%>z")
-(gtk_accel_path "<Actions>/Editor/insert-region" "i")
-; (gtk_accel_path "<Actions>/Editor/center-playhead" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-start" "")
-; (gtk_accel_path "<Actions>/Editor/View" "")
-; (gtk_accel_path "<Actions>/Editor/Layering" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency4096" "")
-(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
-(gtk_accel_path "<Actions>/Editor/set-edit-point" "g")
-; (gtk_accel_path "<Actions>/Editor/Smpte30drop" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-edit" "")
-(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
-(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
-; (gtk_accel_path "<Actions>/Editor/EditCursorMovementOptions" "")
-; (gtk_accel_path "<Actions>/processormenu/activate_all" "")
-; (gtk_accel_path "<Actions>/processormenu/paste" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte25" "")
-; (gtk_accel_path "<Actions>/options/RegionEquivalentsOverlap" "")
-; (gtk_accel_path "<Actions>/Main/MeteringFallOffRate" "")
-; (gtk_accel_path "<Actions>/options/UseHardwareMonitoring" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte24" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-mark" "")
-; (gtk_accel_path "<Actions>/Editor/CrossfadesShort" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte5994" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency8192" "")
-; (gtk_accel_path "<Actions>/Editor/toggle-xfades-visible" "")
-(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
-(gtk_accel_path "<Actions>/Editor/start-range" "F1")
-; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency128" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-beat" "")
-; (gtk_accel_path "<Actions>/Editor/RegionEditOps" "")
-; (gtk_accel_path "<Actions>/Editor/snap-magnetic" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
-(gtk_accel_path "<Actions>/Editor/scroll-playhead-forward" "<%TERTIARY%>rightarrow")
-(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "<%SECONDARY%>less")
-(gtk_accel_path "<Actions>/Editor/align-regions-sync" "less")
-; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
-(gtk_accel_path "<Actions>/Editor/crop" "c")
-; (gtk_accel_path "<Actions>/processormenu/newsend" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceSubMenu" "")
-; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
-; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
-(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
-(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%TERTIARY%>Home")
-(gtk_accel_path "<Actions>/Editor/scroll-playhead-backward" "<%TERTIARY%>leftarrow")
-(gtk_accel_path "<Actions>/Editor/split-region" "z")
-; (gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-minutes" "")
-; (gtk_accel_path "<Actions>/Main/Windows" "")
-; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
-; (gtk_accel_path "<Actions>/processormenu/deselectall" "")
-; (gtk_accel_path "<Actions>/options/SoloViaBus" "")
-; (gtk_accel_path "<Actions>/RegionList/rlAudition" "")
-(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "u")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus4Plus1" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-boundary" "")
-; (gtk_accel_path "<Actions>/JACK/JACK" "")
-(gtk_accel_path "<Actions>/Editor/editor-cut" "<%PRIMARY%>x")
-(gtk_accel_path "<Actions>/Editor/editor-separate" "F4")
-; (gtk_accel_path "<Actions>/RegionList/SortAscending" "")
-; (gtk_accel_path "<Actions>/Main/Help" "")
-; (gtk_accel_path "<Actions>/options/UseExternalMonitoring" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte23976" "")
-(gtk_accel_path "<Actions>/Common/goto-editor" "<%WINDOW%>e")
-(gtk_accel_path "<Actions>/Editor/select-all" "F14")
-(gtk_accel_path "<Actions>/Editor/invert-selection" "F15")
-(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<%PRIMARY%>KP_Add")
-; (gtk_accel_path "<Actions>/options/ShowSoloMutes" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-eighths" "")
-(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%><%PRIMARY%>p")
-(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F11")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileLength" "")
-; (gtk_accel_path "<Actions>/Editor/Timecode" "")
-; (gtk_accel_path "<Actions>/Transport/PlaySelection" "")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus4Minus1" "")
-(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileName" "")
-(gtk_accel_path "<Actions>/Editor/finish-range" "F2")
-(gtk_accel_path "<Actions>/Editor/select-range-between-cursors" "F16")
-(gtk_accel_path "<Actions>/Transport/Loop" "l")
-; (gtk_accel_path "<Actions>/Editor/CrossfadesFull" "")
-(gtk_accel_path "<Actions>/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up")
-; (gtk_accel_path "<Actions>/options/SendMTC" "")
-; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
-(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<%PRIMARY%>l")
-(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
-; (gtk_accel_path "<Actions>/options/SoloInPlace" "")
-; (gtk_accel_path "<Actions>/Main/Options" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffMedium" "")
-(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
-; (gtk_accel_path "<Actions>/Main/SaveTemplate" "")
-(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionStartinFile" "")
-; (gtk_accel_path "<Actions>/options/GainReduceFastTransport" "")
-; (gtk_accel_path "<Actions>/Common/ToggleInspector" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "")
-(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<%SECONDARY%>Return")
-; (gtk_accel_path "<Actions>/Editor/LayerMoveAddHigher" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte60" "")
-; (gtk_accel_path "<Actions>/Main/Open" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-left" "")
-; (gtk_accel_path "<Actions>/Main/TransportOptions" "")
-; (gtk_accel_path "<Actions>/Main/ControlSurfaces" "")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatBWF" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte2997" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleWaveformVisibility" "")
-(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%>r")
-; (gtk_accel_path "<Actions>/Main/ExportSession" "")
-; (gtk_accel_path "<Actions>/options/InputAutoConnectPhysical" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-edit-cursor" "")
-(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "t")
-; (gtk_accel_path "<Actions>/JACK/Latency" "")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "<%TERTIARY%>F2")
-; (gtk_accel_path "<Actions>/processormenu/rename" "")
-; (gtk_accel_path "<Actions>/RegionList/rlShowAuto" "")
-(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%PRIMARY%>p")
-; (gtk_accel_path "<Actions>/Main/Session" "")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "<%TERTIARY%>F1")
-; (gtk_accel_path "<Actions>/Main/AudioFileFormat" "")
-; (gtk_accel_path "<Actions>/Transport/Transport" "")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionName" "")
-; (gtk_accel_path "<Actions>/Main/KeyMouse Actions" "")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
-; (gtk_accel_path "<Actions>/Snap/snap-to-frame" "")
-; (gtk_accel_path "<Actions>/Editor/SnapTo" "")
-(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
-; (gtk_accel_path "<Actions>/Editor/Crossfades" "")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus4" "")
-; (gtk_accel_path "<Actions>/Main/MeteringHoldTime" "")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus1" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte24976" "")
-; (gtk_accel_path "<Actions>/options/FileDataFormat24bit" "")
-; (gtk_accel_path "<Actions>/Editor/SnapMode" "")
-(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%WINDOW%>o")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus4" "")
-(gtk_accel_path "<Actions>/Common/goto-mixer" "<%WINDOW%>m")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileCreationDate" "")
-; (gtk_accel_path "<Actions>/processormenu/activate" "")
-(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus1" "")
-; (gtk_accel_path "<Actions>/Editor/snap-normal" "")
-(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%WINDOW%>b")
-(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<%WINDOW%>k")
-; (gtk_accel_path "<Actions>/Snap/snap-to-asixteenthbeat" "")
-(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%PRIMARY%>d")
-; (gtk_accel_path "<Actions>/processormenu/edit" "")
-(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
-(gtk_accel_path "<Actions>/Editor/multi-duplicate-region" "<%SECONDARY%>d")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency2048" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleWaveformsWhileRecording" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-right" "")
-(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<%PRIMARY%>Delete")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE" "")
-(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_0")
-(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%>End")
-; (gtk_accel_path "<Actions>/processormenu/cut" "")
-; (gtk_accel_path "<Actions>/processormenu/newinsert" "")
-; (gtk_accel_path "<Actions>/options/UseMMC" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffOff" "")
-;(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus4Plus1" "")
-; (gtk_accel_path "<Actions>/Editor/MeterHold" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-cd-frame" "")
-; (gtk_accel_path "<Actions>/options/StopTransportAtEndOfSession" "")
-; (gtk_accel_path "<Actions>/Main/Cleanup" "")
-; (gtk_accel_path "<Actions>/Main/Snapshot" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleVideoSync" "")
-(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFilesystem" "")
-(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<%WINDOW%>c")
-; (gtk_accel_path "<Actions>/Common/About" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency32" "")
-(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE64" "")
-(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "F3")
-; (gtk_accel_path "<Actions>/RegionList/rlShowAll" "")
-(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionTimestamp" "")
-; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
-; (gtk_accel_path "<Actions>/options/OutputAutoConnectPhysical" "")
-; (gtk_accel_path "<Actions>/options/SendMMC" "")
-; (gtk_accel_path "<Actions>/Editor/toggle-auto-xfades" "")
-; (gtk_accel_path "<Actions>/Main/AudioFileFormatHeader" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldShort" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldMedium" "")
-(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e")
-; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
-(gtk_accel_path "<Actions>/Common/ToggleLocations" "<%WINDOW%>l")
-; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
-(gtk_accel_path "<Actions>/Editor/editor-delete" "BackSpace")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
-(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "F16")
-; (gtk_accel_path "<Actions>/Editor/LayerAddHigher" "")
-; (gtk_accel_path "<Actions>/Editor/Solo" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency1024" "")
-; (gtk_accel_path "<Actions>/Main/ExportRangeMarkers" "")
-(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
-; (gtk_accel_path "<Actions>/Editor/toggle-xfades-active" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-bar" "")
-; (gtk_accel_path "<Actions>/Editor/LayerLaterHigher" "")
-; (gtk_accel_path "<Actions>/processormenu/selectall" "")
-(gtk_accel_path "<Actions>/Editor/editor-copy" "<%PRIMARY%>c")
-; (gtk_accel_path "<Actions>/Snap/snap-to-quarters" "")
-(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "r")
-; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
-; (gtk_accel_path "<Actions>/Editor/Subframes100" "")
-(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "<%SECONDARY%>m")
-(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "m")
-; (gtk_accel_path "<Actions>/options/OutputAutoConnectManual" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
-; (gtk_accel_path "<Actions>/processormenu/clear" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceFeedback" "")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus4Minus1" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency512" "")
-; (gtk_accel_path "<Actions>/Main/Recent" "")
-; (gtk_accel_path "<Actions>/processormenu/newplugin" "")
-; (gtk_accel_path "<Actions>/options/InputAutoConnectManual" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldLong" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-seconds" "")
-(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "q")
-(gtk_accel_path "<Actions>/Editor/toggle-fade-in-active" "<%SECONDARY%>q")
-(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "e")
-(gtk_accel_path "<Actions>/Editor/toggle-fade-out-active" "<%SECONDARY%>e")
-(gtk_accel_path "<Actions>/Editor/trim-from-start" "<%TERTIARY%>braceleft")
-(gtk_accel_path "<Actions>/Editor/trim-to-end" "<%TERTIARY%>braceright")
-(gtk_accel_path "<Actions>/Editor/trim-front" "a")
-(gtk_accel_path "<Actions>/Editor/trim-back" "s")
-(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
-(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
-(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
-(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
-(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
-(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
-(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
-(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
-(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
-(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
-(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "4")
-(gtk_accel_path "<Actions>/Transport/focus-on-clock" "KP_Divide")
-(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "bracketright")
-(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "bracketleft")
-(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<%PRIMARY%><%SECONDARY%>bracketright")
-(gtk_accel_path "<Actions>/Editor/loop-region" "<%PRIMARY%>bracketright")
-(gtk_accel_path "<Actions>/Editor/toggle-zoom" "o")
-(gtk_accel_path "<Actions>/Editor/zoom-to-region" "y")
-(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "F5")
-(gtk_accel_path "<Actions>/Editor/play-from-edit-point-and-return" "<%LEVEL4%>space")
-
diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript
index f8089d099e..ea649dea6a 100644
--- a/gtk2_ardour/SConscript
+++ b/gtk2_ardour/SConscript
@@ -204,6 +204,7 @@ midi_streamview.cc
midi_time_axis.cc
mixer_strip.cc
mixer_ui.cc
+nag.cc
new_session_dialog.cc
option_editor.cc
opts.cc
@@ -402,8 +403,28 @@ for style in ['', 'BOLD', 'ITALIC']:
key = '%' + key + '%'
my_font_dict[key] = fontstyle
-ardour_dark_theme = env.SubstInFile ('ardour3_ui_dark.rc', 'ardour3_ui_dark.rc.in', SUBST_DICT = my_font_dict)
-ardour_light_theme = env.SubstInFile ('ardour3_ui_light.rc', 'ardour3_ui_light.rc.in', SUBST_DICT = my_font_dict)
+#
+# create menus based on build platform
+#
+
+if env['GTKOSX']:
+ ardour_menus = env.Command ('ardour.menus', 'ardour.menus.in', "cpp -E -P -DGTKOSX -DTOP_MENUBAR ardour.menus.in ardour.menus", chdir=1)
+else:
+ ardour_menus = env.Command ('ardour.menus', 'ardour.menus.in', "cpp -E -P ardour.menus.in ardour.menus", chdir=1)
+
+ardour_dark_theme = env.SubstInFile ('ardour3_ui_dark.rc',
+ 'ardour3_ui_dark.rc.in',
+ SUBST_DICT = my_font_dict)
+ardour_light_theme = env.SubstInFile ('ardour3_ui_light.rc',
+ 'ardour3_ui_light.rc.in',
+ SUBST_DICT = my_font_dict)
+
+ardour_dark_sae_theme = env.SubstInFile ('ardour3_ui_dark_sae.rc',
+ 'ardour3_ui_dark_sae.rc.in',
+ SUBST_DICT = my_font_dict)
+ardour_light_sae_theme = env.SubstInFile ('ardour3_ui_light_sae.rc',
+ 'ardour3_ui_light_sae.rc.in',
+ SUBST_DICT = my_font_dict)
my_subst_dict = { }
@@ -436,7 +457,7 @@ else:
keybindings_dict['%LEVEL4%'] = env['WINDOWS_KEY']
keybindings_dict['%WINDOW%'] = 'Alt'
-for b in [ 'SAE-de', 'SAE-us', 'mnemonic-us', 'ergonomic-us' ]:
+for b in [ 'SAE-de-keypad', 'SAE-de-nokeypad', 'SAE-us-keypad', 'SAE-us-nokeypad', 'mnemonic-us', 'ergonomic-us' ]:
target_file = b + '.bindings'
src_file = target_file + '.in'
Default (env.SubstInFile (target_file, src_file, SUBST_DICT = keybindings_dict))
@@ -455,6 +476,9 @@ Default(ardourdev)
Default(ardoursh)
Default(ardour_dark_theme)
Default(ardour_light_theme)
+Default(ardour_dark_sae_theme)
+Default(ardour_light_sae_theme)
+Default(ardour_menus)
if env['VST']:
Default(ardourlib)
@@ -480,12 +504,17 @@ if env['NLS']:
# configuration files
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_dark_theme))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_light_theme))
+env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_dark_sae_theme))
+env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), ardour_light_sae_theme))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour3_ui_default.conf'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour.menus'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ardour-sae.menus'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'ergonomic-us.bindings'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'mnemonic-us.bindings'))
-env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'SAE-de.bindings'))
+env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'SAE-de-keypad.bindings'))
+env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'SAE-us-keypad.bindings'))
+env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'SAE-de-nokeypad.bindings'))
+env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour3'), 'SAE-us-nokeypad.bindings'))
# data files
env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour3'), 'splash.png'))
env.Alias('install', env.Install(os.path.join(install_prefix, 'share', 'ardour3', 'pixmaps'), pixmap_files))
@@ -539,12 +568,19 @@ env.Alias ('tarball', env.Distribute (env['DISTTREE'],
'ardour.sh.in',
'ardev_common.sh.in',
'ardev', 'ardbg',
- 'ardour3_ui_dark.rc.in', 'ardour3_ui_light.rc.in', 'splash.png',
- 'ardour.menus', 'ardour-sae.menus',
+ 'ardour3_ui_dark.rc.in',
+ 'ardour3_ui_light.rc.in',
+ 'ardour3_ui_dark_sae.rc.in',
+ 'ardour3_ui_light_sae.rc.in',
+ 'splash.png',
+ 'ardour.menus.in',
+ 'ardour-sae.menus',
'mnemonic-us.bindings.in',
'ergonomic-us.bindings.in',
- 'SAE-us.bindings.in',
- 'SAE-de.bindings.in',
+ 'SAE-us-keypad.bindings.in',
+ 'SAE-us-nokeypad.bindings.in',
+ 'SAE-de-keypad.bindings.in',
+ 'SAE-de-nokeypad.bindings.in',
'ardour3_ui_default.conf',
'editor_xpms',
'ardour2.xml',
@@ -556,6 +592,7 @@ env.Alias ('tarball', env.Distribute (env['DISTTREE'],
icon_files +
skipped_files +
audiounit_files +
+ lv2_files +
gtkosx_files +
x11_files +
freesound_files +
diff --git a/gtk2_ardour/about.cc b/gtk2_ardour/about.cc
index 7d41847e14..4f08036bd7 100644
--- a/gtk2_ardour/about.cc
+++ b/gtk2_ardour/about.cc
@@ -120,52 +120,56 @@ static const gchar * paypal_xpm[] = {
#endif
static const char* authors[] = {
- N_("Paul Davis"),
- N_("Jesse Chappell"),
- N_("Taybin Rutkin"),
+ N_("Brian Ahr"),
+ N_("John Anderson"),
N_("Marcus Andersson"),
+ N_("Nedko Arnaudov"),
+ N_("Hans Baier"),
+ N_("Ben Bell"),
+ N_("Sakari Bergen"),
+ N_("Chris Cannam"),
+ N_("Jesse Chappell"),
+ N_("Thomas Charbonnel"),
+ N_("Sam Chessman"),
+ N_("Paul Davis"),
+ N_("Gerard van Dongen"),
+ N_("Colin Fletcher"),
+ N_("Hans Fugal"),
+ N_("Christopher George"),
N_("Jeremy Hall"),
+ N_("Audun Halland"),
N_("Steve Harris"),
- N_("Tim Mayberry"),
- N_("Mark Stewart"),
- N_("Sam Chessman"),
- N_("Jack O'Quin"),
+ N_("Carl Hetherington"),
+ N_("Rob Holland"),
+ N_("Robert Jordens"),
+ N_("Stefan Kersten"),
+ N_("Armand Klenk"),
N_("Matt Krai"),
- N_("Ben Bell"),
- N_("Gerard van Dongen"),
- N_("Thomas Charbonnel"),
- N_("Nick Mainsbridge"),
N_("Colin Law"),
- N_("Sampo Savolainen"),
N_("Joshua Leach"),
- N_("Rob Holland"),
- N_("Per Sigmond"),
- N_("Doug Mclain"),
- N_("Petter Sundlöf"),
- N_("Thorsten Wilms"),
N_("Ben Loftis"),
- N_("Stefan Kersten"),
- N_("Christopher George"),
- N_("Robert Jordens"),
- N_("Dave Robillard"),
- N_("Hans Baier"),
- N_("Hans Fugal"),
- N_("Brian Ahr"),
+ N_("Nick Mainsbridge"),
+ N_("Tim Mayberry"),
+ N_("Doug Mclain"),
+ N_("Jack O'Quin"),
N_("Nimal Ratnayake"),
- N_("Mike Täht"),
- N_("John Anderson"),
- N_("Nedko Arnaudov"),
- N_("Carl Hetherington"),
- N_("Colin Fletcher"),
+ N_("Dave Robillard"),
+ N_("Taybin Rutkin"),
+ N_("Sampo Savolainen"),
+ N_("Per Sigmond"),
+ N_("Lincoln Spiteri"),
+ N_("Mark Stewart"),
N_("Roland Stigge"),
- N_("Audun Halland"),
- N_("Armand Klenk"),
- 0
+ N_("Petter Sundlöf"),
+ N_("Mike Täht"),
+ N_("Thorsten Wilms"),
};
static const char* translators[] = {
N_("French:\n\tAlain Fréhel <alain.frehel@free.fr>\n\tChristophe Combelles <ccomb@free.fr>\n"),
- N_("German:\n\tKarsten Petersen <kapet@kapet.de>\n\tSebastian Arnold <mail@sebastian-arnold.net>\n"),
+ N_("German:\n\tKarsten Petersen <kapet@kapet.de>\
+\n\tSebastian Arnold <mail@sebastian-arnold.net>\
+\n\tRobert Schwede<schwede@ironshark.com>\n"),
N_("Italian:\n\tFilippo Pappalardo <filippo@email.it>\n"),
N_("Portuguese:\n\tRui Nuno Capela <rncbc@rncbc.org>\n"),
N_("Brazilian Portuguese:\n\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\
diff --git a/gtk2_ardour/ardev_common.sh.in b/gtk2_ardour/ardev_common.sh.in
index 3e223fe8cc..28eaad39c7 100644
--- a/gtk2_ardour/ardev_common.sh.in
+++ b/gtk2_ardour/ardev_common.sh.in
@@ -4,14 +4,18 @@ cd `dirname "$0"`/..
export ARDOUR_PATH=gtk2_ardour/icons:gtk2_ardour/pixmaps:gtk2_ardour:.
export ARDOUR_DATA_PATH=gtk2_ardour:.
-export GTK_PATH=libs/clearlooks
+if test -d $HOME/gtk/inst ; then
+ echo USING NEW CLEARLOOKS
+ export GTK_PATH=~/.ardour2:libs/clearlooks-newer
+else
+ echo USING OLD CLEARLOOKS
+ export GTK_PATH=~/.ardour2:libs/clearlooks-older
+fi
export VAMP_PATH=libs/vamp-plugins:$VAMP_PATH
export LD_LIBRARY_PATH=libs/vamp-sdk:libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/rubberband:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/libsndfile:libs/appleutility:libs/cairomm:libs/taglib:libs/evoral:$LD_LIBRARY_PATH
# DYLD_LIBRARY_PATH is for darwin.
export DYLD_FALLBACK_LIBRARY_PATH=$LD_LIBRARY_PATH
-# For the internal clearlooks engine
-export GTK_PATH=$PWD/libs/clearlooks:~/.ardour3
EXECUTABLE=gtk2_ardour/ardour-%VERSION%
diff --git a/gtk2_ardour/ardour-sae.menus b/gtk2_ardour/ardour-sae.menus
index 021d8c3b0e..2a73c4c16a 100644
--- a/gtk2_ardour/ardour-sae.menus
+++ b/gtk2_ardour/ardour-sae.menus
@@ -161,6 +161,9 @@
<menuitem action='toggle-fade-in-active'/>
<menuitem action='set-fade-out-length'/>
<menuitem action='toggle-fade-out-active'/>
+ <separator/>
+ <menuitem action='toggle-selected-region-fades'/>
+ <menuitem action='toggle-region-fades'/>
</menu>
<menu action="SelectMenu">
<menuitem action='select-all'/>
@@ -172,10 +175,14 @@
<menuitem action='select-all-within-cursors'/>
<menuitem action='select-all-in-punch-range'/>
<menuitem action='select-all-in-loop-range'/>
+ <separator/>
+ <menuitem action='select-next-route'/>
+ <menuitem action='select-prev-route'/>
</menu>
</menu>
<menu action='TrackMenu'>
+ <menuitem action='remove-track'/>
<menuitem action='AddTrackBus'/>
<menuitem action="move-selected-tracks-up"/>
<menuitem action="move-selected-tracks-down"/>
@@ -193,7 +200,6 @@
<menuitem action='logarithmic-waveforms'/>
</menu>
<menuitem action='toggle-track-active'/>
- <menuitem action='remove-track'/>
</menu>
<menu action='RegionMenu'>
@@ -266,8 +272,8 @@
</menu>
<menu action="WindowMenu">
- <menuitem action='goto-editor'/>
- <menuitem action='goto-mixer'/>
+
+ <menuitem action='toggle-editor-mixer-on-top'/>
<menuitem action='ToggleLocations'/>
<menuitem action='ToggleKeyEditor'/>
<menuitem action='ToggleThemeManager'/>
@@ -306,17 +312,16 @@
<menuitem action='edit-at-selected-marker'/>
</menu>
<menu action='KeyMouseActions'>
- <menuitem action='select-next-route'/>
- <menuitem action='select-prev-route'/>
<menuitem action='focus-on-clock'/>
<menuitem action='GotoZero'/>
<menuitem action='GotoStart'/>
<menuitem action='GotoEnd'/>
+ <separator/>
+ <menuitem action='step-mouse-mode'/>
<menuitem action='set-mouse-mode-object'/>
- <menuitem action='set-mouse-mode-range'/>
- <menuitem action='set-mouse-mode-gain'/>
<menuitem action='set-mouse-mode-zoom'/>
<menuitem action='set-mouse-mode-timefx'/>
+ <separator/>
<menuitem action='cycle-edit-point'/>
<menuitem action='cycle-edit-point-with-marker'/>
<menuitem action='toggle-edit-mode'/>
@@ -331,7 +336,6 @@
</menubar>
-<<<<<<< .working
<popup action="RulerMenuPopup">
<menuitem action="toggle-minsec-ruler"/>
<menuitem action="toggle-samples-ruler"/>
@@ -345,21 +349,8 @@
</popup>
<popup name='processormenu'>
-=======
- <popup action="RulerMenuPopup">
- <menuitem action="toggle-minsec-ruler"/>
- <menuitem action="toggle-samples-ruler"/>
- <menuitem action="toggle-bbt-ruler"/>
+ <menuitem action='delete'/>
<separator/>
- <menuitem action="toggle-meter-ruler"/>
- <menuitem action="toggle-tempo-ruler"/>
- <menuitem action="toggle-loop-punch-ruler"/>
- <menuitem action="toggle-cd-marker-ruler"/>
- <menuitem action="toggle-marker-ruler"/>
- </popup>
-
- <popup name='redirectmenu'>
->>>>>>> .merge-right.r3622
<menuitem action='newplugin'/>
<menuitem action='newinsert'/>
<menuitem action='newsend'/>
@@ -369,7 +360,6 @@
<menuitem action='cut'/>
<menuitem action='copy'/>
<menuitem action='paste'/>
- <menuitem action='delete'/>
<separator/>
<menuitem action='rename'/>
<separator/>
diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus.in
index e1209296d6..3f00dbcb2f 100644
--- a/gtk2_ardour/ardour.menus
+++ b/gtk2_ardour/ardour.menus.in
@@ -10,18 +10,15 @@
<menuitem action='Save'/>
<menuitem action='Snapshot'/>
<menuitem action='SaveTemplate'/>
- <menu name='Metadata' action='Metadata'>
- <menuitem action='EditMetadata'/>
- <menuitem action='ImportMetadata'/>
- </menu>
<separator/>
<menuitem action='AddTrackBus'/>
<separator/>
<menuitem action='addExistingAudioFiles'/>
- <menuitem action='importFromSession'/>
<separator/>
<menu name='Export' action='Export'>
- <menuitem action='ExportAudio'/>
+ <menuitem action='ExportSession'/>
+ <menuitem action='ExportSelection'/>
+ <menuitem action='ExportRangeMarkers'/>
</menu>
<separator/>
<menu name='Cleanup' action='Cleanup'>
@@ -29,6 +26,10 @@
<menuitem action='FlushWastebasket'/>
</menu>
<separator/>
+#ifdef GTKOSX
+ <menuitem action='ToggleOptionsEditor'/>
+ <menuitem action='About'/>
+#endif
<menuitem action='Quit'/>
</menu>
@@ -59,6 +60,7 @@
<menuitem action='TransitionToReverse'/>
<separator/>
+
<menu action="MovePlayHeadMenu">
<menuitem action='set-playhead'/>
<menuitem action='playhead-to-edit'/>
@@ -85,7 +87,6 @@
<menuitem action='GotoStart'/>
<menuitem action='GotoEnd'/>
<menuitem action='GotoWallClock'/>
-
</menu>
<menu action="MoveActiveMarkMenu">
@@ -194,6 +195,7 @@
<menuitem action='select-prev-route'/>
<menuitem action='brush-at-mouse'/>
<separator/>
+ <menuitem action='step-mouse-mode'/>
<menuitem action='set-mouse-mode-object'/>
<menuitem action='set-mouse-mode-range'/>
<menuitem action='set-mouse-mode-gain'/>
@@ -209,6 +211,10 @@
<separator/>
<menuitem action='break-drag'/>
</menu>
+#ifndef GTKOSX
+ <separator/>
+ <menuitem action='ToggleOptionsEditor'/>
+#endif
</menu>
<menu action='RegionMenu'>
@@ -236,6 +242,11 @@
<menuitem action='duplicate-region'/>
<menuitem action='multi-duplicate-region'/>
<menuitem action='region-fill-track'/>
+ <separator/>
+ <menuitem action='loop-region'/>
+ <menuitem action='set-punch-from-region'/>
+ <menuitem action='add-range-marker-from-region'/>
+ <menuitem action='add-range-markers-from-region'/>
</menu>
<menu action='TrackMenu'>
@@ -379,7 +390,6 @@
<menuitem action='ToggleMaximalEditor'/>
<menuitem action='show-editor-mixer'/>
- <menuitem action='show-editor-list'/>
<menuitem action='ToggleMeasureVisibility'/>
<menuitem action='toggle-waveform-visible'/>
<menuitem action='ToggleWaveformsWhileRecording'/>
@@ -406,11 +416,10 @@
<separator/>
<menuitem action='goto-editor'/>
<menuitem action='goto-mixer'/>
- <menuitem action='ToggleOptionsEditor'/>
+ <menuitem action='toggle-editor-mixer-on-top'/>
<menuitem action='ToggleInspector'/>
<menuitem action='ToggleLocations'/>
<menuitem action='ToggleKeyEditor'/>
- <menuitem action='ToggleBundleManager'/>
<menuitem action='ToggleThemeManager'/>
<menuitem action='ToggleBigClock'/>
<menuitem action='toggle-rhythm-ferret'/>
@@ -432,7 +441,6 @@
</menu>
<menu action='SyncMenu'>
<menuitem action='SendMTC'/>
- <menuitem action='SendMidiClock'/>
<menuitem action='SendMMC'/>
<menuitem action='UseMMC'/>
</menu>
@@ -513,6 +521,7 @@
<menuitem action='SoloInPlace'/>
<menuitem action='SoloViaBus'/>
<menuitem action='ShowSoloMutes'/>
+ <menuitem action='SoloMuteOverride'/>
</menu>
<menu action='Crossfades'>
<menuitem action='toggle-xfades-active'/>
@@ -539,6 +548,7 @@
<menu action='MiscOptions'>
<menuitem action='UseOSC'/>
<menuitem action='StopPluginsWithTransport'/>
+ <menuitem action='NewPluginsActive'/>
<menuitem action='DoNotRunPluginsWhileRecording'/>
<menuitem action='LatchedRecordEnable'/>
<menuitem action='RegionEquivalentsOverlap'/>
@@ -551,9 +561,9 @@
<menuitem action='PrimaryClockDeltaEditCursor'/>
<menuitem action='SecondaryClockDeltaEditCursor'/>
<menuitem action='OnlyCopyImportedFiles'/>
- <menuitem action='ShowTrackMeters'/>
<menuitem action='DefaultNarrowMS'/>
<menuitem action='link-region-and-track-selection'/>
+ <menuitem action='NameNewMarkers'/>
<menuitem action='RubberbandingSnapsToGrid'/>
<menuitem action='AutoAnalyseAudio'/>
<menuitem action='toggle-region-fades'/>
@@ -579,7 +589,7 @@
<menuitem action="toggle-loop-punch-ruler"/>
</popup>
- <popup name='processormenu'>
+ <popup name='redirectmenu'>
<menuitem action='newplugin'/>
<menuitem action='newinsert'/>
<menuitem action='newsend'/>
diff --git a/gtk2_ardour/ardour.sh.in b/gtk2_ardour/ardour.sh.in
index 4a7219823c..077073bdf6 100644
--- a/gtk2_ardour/ardour.sh.in
+++ b/gtk2_ardour/ardour.sh.in
@@ -18,6 +18,25 @@ if [ "$MLOCK_LIMIT" != "unlimited" ]; then
fi
+## Glib atomic test
+
+GLIB=$(ldd %INSTALL_PREFIX%/%LIBDIR%/ardour2/ardour-%VERSION% 2> /dev/null | grep glib-2.0 | sed 's/.*=> \([^ ]*\) .*/\1/')
+
+if [ "$GLIB" = "" ]; then
+ echo "WARNING: Could not check your glib-2.0 for mutex locking atomic operations."
+ echo ""
+elif [ $(nm -D --radix=dec --defined-only -S $GLIB | grep -w g_atomic_int_add | cut -d ' ' -f 2) -gt 32 ]; then
+ echo "WARNING: Your system contains a suspect libglib-2.0. Your version might be built"
+ echo " to use mutex locking atomic operations. This is a fallback solution to"
+ echo " a more robust hardware supported atomicity. It might cause reduced "
+ echo " performance and/or deadlocks. Please contact your distribution support"
+ echo " about this issue."
+ echo " Unfortunately this check is not 100% accurate, so this might not be"
+ echo " the case with your system."
+ echo ""
+fi
+
+exec %INSTALL_PREFIX%/%LIBDIR%/ardour2/ardour-%VERSION% "$@"
## Glib atomic test
diff --git a/gtk2_ardour/ardour2_ui_dark_sae.rc.in b/gtk2_ardour/ardour2_ui_dark_sae.rc.in
new file mode 100644
index 0000000000..1b0635a1b9
--- /dev/null
+++ b/gtk2_ardour/ardour2_ui_dark_sae.rc.in
@@ -0,0 +1,1587 @@
+#
+# This is the GTK style file for Ardour
+#
+
+style "very_small_text"
+{
+ font_name = "%FONT_SMALLER%"
+}
+
+style "small_text"
+{
+ font_name = "%FONT_SMALL%"
+}
+
+style "small_bold_text"
+{
+ font_name = "%FONT_BOLD_SMALL%"
+}
+
+style "medium_bold_text"
+{
+ font_name = "%FONT_BOLD_NORMAL%"
+}
+
+style "medium_text"
+{
+ font_name = "%FONT_NORMAL%"
+}
+
+style "red_medium_text" = "medium_text"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+}
+
+style "large_text"
+{
+ font_name = "%FONT_LARGE%"
+}
+
+style "larger_bold_text"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+}
+
+style "plugin_name_text"
+{
+ font_name = "%FONT_BOLD_LARGER%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+}
+
+style "plugin_maker_text"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+}
+
+style "automation_track_name"
+{
+ font_name = "%FONT_ITALIC_NORMAL%"
+}
+
+style "first_action_message"
+{
+ font_name = "%FONT_HUGER%"
+}
+
+style "verbose_canvas_cursor"
+{
+ font_name = "%FONT_BOLD_LARGER%"
+}
+
+style "marker_text"
+{
+ font_name = "%FONT_SMALLER%"
+}
+
+style "time_axis_view_item_name"
+{
+ font_name = "%FONT_SMALLER%"
+}
+
+style "default_base" = "medium_text"
+{
+
+ GtkWidget::cursor_color = {1.0, 1.0, 1.0 }
+ GtkButton::default_border = { 0, 0, 0, 0 }
+ GtkButton::default_outside_border = { 0, 0, 0, 0 }
+ GtkButton::button_relief = GTK_RELIEF_NONE
+ GtkTreeView::vertical-padding = 0
+ GtkTreeView::horizontal-padding = 0
+ GtkTreeView::even-row-color = { 0, 0, 0 }
+ GtkTreeView::odd-row-color = { 0.06, 0.06, 0.10 }
+
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ fg[PRELIGHT] = { 1.0, 1.0, 1.0 }
+ fg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ fg[SELECTED] = { 0.80, 0.80, 0.80 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+ bg[ACTIVE] = { 0.35, 0.35, 0.40 }
+ bg[PRELIGHT] = "#565690"
+ bg[INSENSITIVE] = { 0.10, 0.10, 0.10 }
+ bg[SELECTED] = { 0, 0.40, 0.60 }
+
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.80, 0.80, 0.80 }
+ text[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ text[INSENSITIVE] = { 0.80, 0.80, 0.80}
+ text[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ base[ACTIVE] = "#272a2f"
+ base[NORMAL] = "#1a1e20"
+ base[PRELIGHT] = { 0.20, 0.20, 0.20 }
+ base[INSENSITIVE] = "#4c5159"
+ base[SELECTED] = { 0.25, 0.25, 0.25 }
+
+ engine "clearlooks"
+ {
+ menubarstyle = 0 # 0 = flat, 1 = sunken, 2 = flat gradient
+ }
+}
+
+style "base_frame"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+}
+
+style "transport_base" = "medium_bold_text"
+{
+ bg[NORMAL] = { 0.10, 0.10, 0.10 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+ bg[INSENSITIVE] = { 0, 0, 0 }
+ bg[SELECTED] = { 0, 0, 0 }
+}
+/*
+style "black_mackie_menu_bar"
+{
+ font_name = "%FONT_BOLD_NORMAL%"
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ bg[NORMAL] = { 0, 0, 0 }
+}
+*/
+
+style "default_button"
+{
+ font_name = "%FONT_SMALL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.15, 0.15, 0.20 }
+ bg[INSENSITIVE] = { 0.15, 0.15, 0.20 }
+ bg[SELECTED] = { 0.15, 0.15, 0.20 }
+}
+
+style "default_menu"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.15, 0.15, 0.20 }
+ bg[INSENSITIVE] = { 0.15, 0.15, 0.20 }
+ bg[SELECTED] = { 0.15, 0.15, 0.20 }
+}
+
+style "default_generic"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.15, 0.15, 0.20 }
+ bg[INSENSITIVE] = { 0.15, 0.15, 0.20 }
+ bg[SELECTED] = { 0.15, 0.15, 0.20 }
+}
+
+style "very_small_button" = "default_button"
+{
+ font_name = "%FONT_SMALLER%"
+ ythickness = 0
+ xthickness = 0
+}
+
+style "small_button" = "default_button"
+{
+}
+
+style "very_small_red_active_and_selected_button" = "very_small_button"
+{
+ bg[ACTIVE] = { 1.0, 0, 0}
+ bg[SELECTED] = { 1.0, 0, 0}
+}
+
+style "small_red_active_and_selected_button" = "small_button"
+{
+ fg[ACTIVE] = { 0, 0, 0 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+ bg[SELECTED] = { 1.0, 0, 0}
+}
+
+style "gain_fader"
+{
+ bg[NORMAL] = { 0.269, 0.269, 0.300}
+ bg[ACTIVE] = { 0.152, 0.152, 0.168 }
+}
+
+
+style "track_rec_enable_button" = "small_button"
+{
+}
+
+style "track_rec_enable_button_active" = "small_button"
+{
+ fg[SELECTED] = { 0.0, 0.0, 0.0 }
+ fg[ACTIVE] = { 0.0, 0.0, 0.0 }
+ fg[PRELIGHT] = { 0.0, 0.0, 0.0 }
+ fg[NORMAL] = { 0.0, 0.0, 0.0 }
+
+ bg[NORMAL] = { 1.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ bg[SELECTED] = { 1.0, 0.0, 0.0 }
+ bg[PRELIGHT] = { 1.0, 0.0, 0.0 }
+}
+
+style "track_rec_enable_button_alternate" = "small_button"
+{
+ fg[SELECTED] = { 0.0, 0.0, 0.0 }
+ fg[ACTIVE] = { 0.0, 0.0, 0.0 }
+ fg[PRELIGHT] = { 0.0, 0.0, 0.0 }
+ fg[NORMAL] = { 0.0, 0.0, 0.0 }
+
+ bg[NORMAL] = { 0.91, 0.68, 0.68}
+ bg[ACTIVE] = { 0.91, 0.68, 0.68}
+ bg[SELECTED] = { 0.91, 0.68, 0.68}
+ bg[PRELIGHT] = { 0.91, 0.68, 0.68}
+}
+
+style "mixer_track_rec_enable_button" = "track_rec_enable_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_track_rec_enable_button_alternate" = "track_rec_enable_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_track_rec_enable_button_active" = "track_rec_enable_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "solo_button" = "small_button"
+{
+}
+
+style "solo_button_alternate" = "small_button"
+{
+ bg[NORMAL] = { 0.69, 0.69, 0.69 } # solo-safe
+ bg[ACTIVE] = { 0.69, 0.69, 0.69 } # solo-safe
+ bg[SELECTED] = { 0.69, 0.69, 0.69 } # solo-safe
+ bg[PRELIGHT] = { 0.69, 0.69, 0.69 } # solo-safe
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+
+style "solo_button_active" = "small_button"
+{
+ bg[NORMAL] = { 0.66, 0.97, 0.19 } # solo
+ bg[ACTIVE] = { 0.66, 0.97, 0.19 } # solo
+ bg[SELECTED] = { 0.66, 0.97, 0.19 } # solo
+ bg[PRELIGHT] = { 0.66, 0.97, 0.19 } # solo
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mixer_solo_button" = "solo_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_solo_button_alternate" = "solo_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+style "mixer_solo_button_active" = "solo_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mute_button" = "small_button"
+{
+}
+
+style "mute_button_alternate" = "small_button"
+{
+ bg[ACTIVE] = { 1.0, 0.98, 0.53 }
+ bg[NORMAL] = { 1.0, 0.98, 0.53 }
+ bg[SELECTED] = { 1.0, 0.98, 0.53 }
+ bg[PRELIGHT] = { 1.0, 0.98, 0.53 }
+
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mute_button_active" = "small_button"
+{
+ bg[NORMAL] = { 0.90, 0.89, 0.73 }
+ bg[ACTIVE] = { 0.90, 0.89, 0.73 }
+ bg[PRELIGHT] = { 0.90, 0.89, 0.73 }
+ bg[SELECTED] = { 0.90, 0.89, 0.73 }
+
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mixer_mute_button_alternate" = "mute_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_mute_button_active" = "mute_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "multiline_combo" = "small_button"
+{
+ font_name = "%FONT_NORMAL%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_mute_button" = "mute_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "track_loop_button" = "small_button"
+{
+ bg[ACTIVE] = { 1.0, 0.98, 0.53 }
+ bg[PRELIGHT] = { 1.0, 0.98, 0.53 }
+
+}
+
+style "mixer_red_active_button" = "very_small_button"
+{
+ fg[ACTIVE] = { 0, 1.0, 1.0 }
+ bg[ACTIVE] = { 0.7, 0, 0 }
+
+ base[INSENSITIVE] = { 0.16, 0.16, 0.21 }
+ bg[INSENSITIVE] = { 0.16, 0.16, 0.21 }
+}
+
+style "time_button" = "default_button"
+{
+ font_name = "%FONT_SMALL%"
+}
+
+style "transport_button"
+{
+}
+
+style "transport_button_active"
+{
+ bg[NORMAL] = { 0.50, 1.0, 0.50 }
+ bg[ACTIVE] = { 0.50, 1.0, 0.50 }
+ bg[SELECTED] = { 0.50, 1.0, 0.50 }
+ bg[PRELIGHT] = { 0.50, 1.0, 0.50 }
+
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "transport_rec_button"
+{
+}
+
+style "transport_rec_button_active"
+{
+ bg[ACTIVE] = { 1.0, 0, 0 }
+ bg[NORMAL] = { 1.0, 0, 0 }
+ bg[SELECTED] = { 1.0, 0, 0 }
+ bg[PRELIGHT] = { 1.0, 0, 0 }
+}
+
+style "transport_rec_button_alternate"
+{
+ bg[PRELIGHT] = { 0.91, 0.68, 0.68 }
+ bg[NORMAL] = { 0.91, 0.68, 0.68 }
+ bg[SELECTED] = { 0.91, 0.68, 0.68 }
+ bg[ACTIVE] = { 0.91, 0.68, 0.68 }
+}
+
+style "shuttle_control" = "very_small_text"
+{
+ fg[NORMAL] = { 0.85, 0.92, 0.98 }
+ fg[ACTIVE] = { 0.85, 0.92, 0.98 }
+ fg[PRELIGHT] = { 0.85, 0.92, 0.98 }
+ fg[SELECTED] = { 0.85, 0.92, 0.98 }
+ fg[INSENSITIVE] = { 0.85, 0.92, 0.98 }
+
+ bg[NORMAL] = { 0.26, 0.26, 0.31 }
+ bg[PRELIGHT] = { 0.26, 0.26, 0.31 }
+ bg[INSENSITIVE] = { 0.26, 0.26, 0.31 }
+ bg[ACTIVE] = { 0.70, 0.70, 0.70 }
+ bg[SELECTED] = { 1.0, 0.04, 0.04 }
+}
+
+style "ardour_adjusters" = "default_generic"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.60 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.06, 0.06, 0.06 }
+}
+
+style "editor_hscrollbar" = "ardour_adjusters"
+{
+ #
+ # special case: we want this scrollbar to be as tall as the
+ # zoom focus selector combobox. scrollbars don't expand to
+ # fill the space available to them, so we have to explicitly
+ # make it bigger.
+ #
+ GtkRange::slider_width = 27
+ GtkScrollbar::slider_width = 27
+}
+
+style "resizer_handle"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = "#818181"
+}
+
+style "ardour_progressbars" = "default_generic"
+{
+ bg[NORMAL] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0.00, 0.36, 0.40 }
+}
+
+style "preferences" = "default_base"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+}
+
+style "option_entry" = "default_base"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ fg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+
+ base[INSENSITIVE] = { 0.07, 0.07, 0.12 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+ bg[ACTIVE] = { 0.35, 0.35, 0.40 }
+}
+
+style "red_when_active" = "medium_text"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.26, 0.26, 0.31 }
+
+ fg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+}
+
+style "xrun_warn"
+{
+ font_name = "%FONT_BOLD_LARGE%"
+
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ text[NORMAL] = { 1.0, 1.0, 1.0 }
+ text[ACTIVE] = { 1.0, 1.0, 1.0 }
+ base[NORMAL] = { 0.09, 0.48, 0.46 }
+ base[ACTIVE] = { 0.09, 0.48, 0.46 }
+ bg[NORMAL] = { 1.0, 0.48, 0.46 }
+ bg[ACTIVE] = { 0.09, 1.0, 0.46 }
+}
+/*
+style "menu_bar_base" = "default_base"
+{
+ bg[NORMAL] = { 0.2, 0.2, 0.3 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+ bg[INSENSITIVE] = { 0, 0, 0 }
+ bg[SELECTED] = { 0, 0, 0 }
+}
+*/
+style "fatal_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 1.0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "error_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "info_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "warning_message" = "medium_text"
+{
+ fg[ACTIVE] = { 0.30,0.30, 1.0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[NORMAL] = { 0, 0, 0 }
+}
+
+style "medium_entry" = "medium_text"
+{
+ fg[NORMAL] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0.70, 0.70, 0.70 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "medium_entry_noselection_fg" = "medium_entry"
+{
+ fg[SELECTED] = { 0.50, 1.0, 0.50 }
+}
+
+style "medium_entry_noselection_bg" = "medium_entry"
+{
+ bg[SELECTED] = { 1.0, 1.0, 1.0 }
+}
+
+style "medium_bold_entry" = "medium_bold_text"
+{
+ fg[NORMAL] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0.70, 0.70, 0.70 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0, 0, 0 }
+}
+
+style "small_entry" = "small_text"
+{
+ fg[NORMAL] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0, 1.0, 0 }
+ fg[SELECTED] = { 0, 1.0, 0 }
+ text[NORMAL] = { 0.70, 0.70, 0.70 }
+ text[ACTIVE] = { 0, 1.0, 0 }
+ text[SELECTED] = { 0, 1.0, 0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[SELECTED] = { 0.0, 0.0, 0.0 }
+ bg[SELECTED] = { 0.0, 0.0, 0.0 }
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0, 0, 0 }
+}
+
+style "red_active_small_entry" = "small_entry"
+{
+ fg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+}
+
+style "small_bold_entry" = "small_bold_text"
+{
+ fg[NORMAL] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0.70, 0.70, 0.70 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0, 0, 0 }
+}
+
+style "small_red_on_black_entry" = "small_bold_text"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.0, 0.0, 0.0 }
+}
+
+style "non_recording_big_clock_display" = "medium_entry"
+{
+ font_name = "%FONT_MASSIVE%"
+
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ fg[PRELIGHT] = { 1.0, 0, 0.0 }
+ fg[INSENSITIVE] = { 1.0, 0, 0.0 }
+
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.7, 0.0, 0.0 }
+}
+
+style "recording_big_clock_display" = "non_recording_big_clock_display"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+}
+
+style "transport_clock_display"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ fg[PRELIGHT] = { 1.0, 0, 0.0 }
+ fg[INSENSITIVE] = { 1.0, 0, 0.0 }
+
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.0, 0.0, 0.0 }
+}
+
+style "transport_clock_display_delta" = "transport_clock_display"
+{
+ fg[NORMAL] = { 0.30, 0.30, 1.0 }
+}
+
+style "tempo_meter_clock_display"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0.0, 0.48, 1.0 }
+ base[ACTIVE] = { 0.09, 0.98, 0.46 }
+ bg[NORMAL] = { 0.0, 0.48, 1.0 }
+ bg[ACTIVE] = { 0.09, 0.98, 0.46 }
+}
+
+style "default_clock_display" = "medium text"
+{
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ bg[NORMAL] = { 0, 0, 0 }
+ bg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "editor_time_ruler" = "small_text"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.09, 0.09, 0.09 }
+}
+
+style "audio_bus_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+ bg[NORMAL] = { 0.20, 0.20, 0.26 }
+}
+
+style "audio_track_base" = "default_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ bg[NORMAL] = { 0.18, 0.19, 0.22 }
+ bg[ACTIVE] = { 0.20, 0.20, 0.20 }
+ bg[PRELIGHT] = { 0.20, 0.20, 0.20 }
+ bg[INSENSITIVE] = { 0.20, 0.20, 0.20 }
+ bg[SELECTED] = { 0.20, 0.20, 0.20 }
+}
+
+style "midi_bus_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+ #bg[NORMAL] = {0, 0.36, 0.40 }
+ bg[NORMAL] = "#444466"
+}
+
+style "midi_track_base" = "default_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ bg[NORMAL] = { 0.48, 0.30, 0.32 }
+ bg[ACTIVE] = { 0.20, 0.20, 0.20 }
+ bg[PRELIGHT] = { 0.20, 0.20, 0.20 }
+ bg[INSENSITIVE] = { 0.20, 0.20, 0.20 }
+ bg[SELECTED] = { 0.20, 0.20, 0.20 }
+}
+
+style "track_controls_inactive"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.66 }
+ bg[ACTIVE] = { 0.60, 0.60, 0.66 }
+ bg[INSENSITIVE] = { 0.60, 0.60, 0.66 }
+ bg[SELECTED] = { 0.60, 0.60, 0.66 }
+ bg[PRELIGHT] = { 0.60, 0.60, 0.66 }
+
+ #font_name = "sans 18"
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+}
+
+style "audio_track_metrics" = "audio_track_base"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_bus_metrics" = "audio_bus_base"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_track_metrics_inactive" = "track_controls_inactive"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_bus_metrics_inactive" = "track_controls_inactive"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "track_name_display"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[ACTIVE] = { 0.80, 0.80, 0.80 }
+
+ base[NORMAL] = { 0.06, 0.06, 0.06 }
+ base[ACTIVE] = { 0.26, 0.26, 0.26 }
+ bg[NORMAL] = { 0.26, 0.26, 0.26 }
+ bg[ACTIVE] = { 0.26, 0.26, 0.26 }
+}
+
+style "active_track_name_display"
+{
+ font_name = "%FONT_NORMAL%"
+ GtkWidget::cursor_color = {0, 0, 0 }
+ text[NORMAL] = { 0.26, 0.26, 0.26 }
+ base[NORMAL] = { 0.89, 0.89, 0.89 }
+}
+
+style "track_separator"
+{
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+}
+
+#
+# Track edit groups. These styles define
+# the colors that the "edit" button will
+# use as a track is moved from
+# track edit group to track edit group.
+# There are 8 edit groups. Edit group 0
+# is used for tracks that are not editable,
+# so we leave its style to the default.
+#
+
+style "edit_group_0"
+
+{
+ bg[ACTIVE] = { 1.0, 0.65, 0.13 }
+ bg[NORMAL] = { 0.31, 0.31, 0.31 }
+ fg[NORMAL] = { 0.82, 0.91, 0.99 }
+ fg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "edit_group_1"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "edit_group_2"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "edit_group_3"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "treeview_parent_node"
+{
+ # specifies *just* the color used for whole file rows when not selected
+ fg[NORMAL] = { 0.0, 0.6, 0.85 }
+}
+
+style "treeview_display" = "small_bold_text"
+{
+ # expander arrow border and DnD "icon" text
+ fg[NORMAL] = { 0.8, 0.8, 0.8 }
+
+ # background with no rows or no selection, plus
+ # expander arrow core and DnD "icon" background
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+
+ # selected row bg when window does not have focus (including during DnD)
+ base[ACTIVE] = { 0.0, 0.60, 0.60 }
+
+ # selected row bg when window has focus
+ base[SELECTED] = { 0, 0.75, 0.75 }
+
+ # row text when in normal state and not a parent
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+
+ # selected row text with window focus
+ text[SELECTED] = { 0, 1.0, 1.0 }
+
+ # selected row text without window focus (including during DnD)
+ text[ACTIVE] = { 0, 1.0, 1.0 }
+}
+
+style "main_canvas_area"
+{
+ bg[NORMAL] = { 0.30, 0.30, 0.34 }
+ bg[ACTIVE] = { 0.30, 0.30, 0.34 }
+ bg[INSENSITIVE] = { 0.30, 0.30, 0.34 }
+ bg[SELECTED] = { 0.30, 0.30, 0.34 }
+ bg[PRELIGHT] = { 0.30, 0.30, 0.34 }
+}
+
+style "track_controls_inactive"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.66 }
+ bg[ACTIVE] = { 0.60, 0.60, 0.66 }
+ bg[INSENSITIVE] = { 0.60, 0.60, 0.66 }
+ bg[SELECTED] = { 0.60, 0.60, 0.66 }
+ bg[PRELIGHT] = { 0.60, 0.60, 0.66 }
+
+ font_name = "%FONT_LARGE%"
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+}
+
+style "edit_controls_base_selected"
+{
+ bg[NORMAL] = { 0.32, 0.32, 0.54 }
+ bg[ACTIVE] = { 0.32, 0.32, 0.54 }
+ bg[INSENSITIVE] = { 0.32, 0.32, 0.54 }
+ bg[SELECTED] = { 0.32, 0.32, 0.54 }
+ bg[PRELIGHT] = { 0.32, 0.32, 0.54 }
+}
+
+style "automation_track_controls_base"
+{
+ bg[NORMAL] = { 0.22, 0.22, 0.29 }
+ bg[ACTIVE] = { 0.22, 0.22, 0.29 }
+ bg[INSENSITIVE] = { 0.22, 0.22, 0.29 }
+ bg[SELECTED] = { 0.22, 0.22, 0.29 }
+ bg[PRELIGHT] = { 0.22, 0.22, 0.29 }
+}
+
+# Plugin Editors
+style "plugin_slider"
+{
+ font_name ="%FONT_BOLD_BIG%"
+
+ # the slider itself. the inactive part is INSENSITIVE,
+ # the active part is something else.
+
+ fg[NORMAL] = { 0.37, 0.43, 0.52 }
+ fg[ACTIVE] = { 0.37, 0.43, 0.52 }
+ fg[INSENSITIVE] = {0.35, 0.35, 0.40 } # matches default_base
+ fg[SELECTED] = { 0.37, 0.43, 0.52 }
+ fg[PRELIGHT] = { 0.37, 0.43, 0.52 }
+
+ # draws the outer rectangle around the slider
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = {0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+
+ # the numeric display
+
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.80, 0.80, 0.80 }
+ text[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ text[SELECTED] = { 0.80, 0.80, 0.80 }
+ text[PRELIGHT] = { 0.80, 0.80, 0.80 }
+}
+
+style "track_list_display" = "small_bold_text"
+{
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.3, 0.3, 0.3 }
+ text[INSENSITIVE] = { 0, 0, 0 }
+ text[SELECTED] = { 0.8, 0.8, 0.8 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[INSENSITIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0, 0, 0 }
+}
+
+style "inspector_track_list_display" = "track_list_display"
+{
+ text[ACTIVE] = { 0.8, 0.8, 0.8 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0.2, 0.2, 0.2 }
+ base[INSENSITIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0.3, 0.3, 0.4 }
+}
+
+style "redirect_list_display"
+{
+ GtkTreeView::horizontal-separator = 0
+ GtkTreeView::vertical-separator = 0
+
+ font_name = "%FONT_SMALL%"
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.70, 0.70, 0.70 }
+ text[INSENSITIVE] = { 0, 0, 0 }
+ text[SELECTED] = { 0.9, 0.3, 0.3 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[INSENSITIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0, 0, 0 }
+
+ # these two are explicitly used by the cell renderer for the
+ # text
+
+ fg[NORMAL] = { 0.5, 0.5, 0.5 } # used for inactive
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 } # used for active
+}
+
+style "inspector_redirect_list_display" = "redirect_list_display"
+{
+ base[SELECTED] = { 0.3, 0.3, 0.3 }
+}
+
+# MixerPanZone:
+#
+# the NORMAL fg color is used for the pan puck
+# the ACTIVE fg color is used for the speaker boxes
+
+style "pan_zone" = "default_base"
+{
+ fg[NORMAL] = { 0.34, 0.95, 0.92 }
+ fg[ACTIVE] = { 0.95, 0.48, 0.11 }
+}
+
+style "paler_red_when_active" = "medium_text"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.31, 0.31, 0.31 }
+ bg[PRELIGHT] = { 0.31, 0.31, 0.31 }
+
+ fg[ACTIVE] = { 0.36, 0.46, 0.28 }
+ bg[ACTIVE] = { 1.00, 0.59, 0.59}
+}
+
+style "peak_display_peaked_entry" = "small_text"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = {0.9, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.9, 0.0, 0.0 }
+ bg[PRELIGHT] = { 0.9, 0.0, 0.0 }
+ bg[INSENSITIVE] = { 0.9, 0.0, 0.0 }
+ bg[SELECTED] = { 0.9, 0.0, 0.0 }
+ base[NORMAL] = { 0.9, 0.0, 0.0 }
+ base[ACTIVE] = { 0.9, 0.0, 0.0 }
+ base[PRELIGHT] = { 0.9, 0.0, 0.0 }
+ base[INSENSITIVE] = { 0.9, 0.0, 0.0 }
+ base[SELECTED] = { 0.9, 0.0, 0.0 }
+}
+
+style "selected_strip_frame"
+{
+ fg[NORMAL] = { 0.74, 0.42, 0.47 }
+ bg[NORMAL] = { 0.79, 0.28, 0.18 }
+}
+
+style "flashing_alert" = "very_small_text"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.26, 0.26, 0.31 }
+
+ fg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+}
+
+style "selected_io_selector_port_list" = "medium_bold_text"
+{
+
+ GtkTreeView::even-row-color = { 0, 0, 0 }
+ GtkTreeView::odd-row-color = { 0, 0, 0 }
+
+# fg is used to color the fg (text) of the column header button
+
+ fg[NORMAL] = { 0.85, 0.85, 0.85 }
+ fg[SELECTED] = { 0.85, 0.85, 0.85 }
+ fg[ACTIVE] = { 0.85, 0.85, 0.85 }
+ fg[PRELIGHT] = { 0.85, 0.85, 0.85 }
+ fg[INSENSITIVE] = { 0.85, 0.85, 0.85 }
+
+# bg is used used to color the background of the column header button
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = { 0.30, 0.30, 0.35 }
+ bg[PRELIGHT] = { 0.30, 0.30, 0.35 }
+ bg[INSENSITIVE] = { 0.30, 0.30, 0.35 }
+ bg[SELECTED] = { 0.30, 0.30, 0.35 }
+
+# text is used to color the treeview row text
+
+ text[NORMAL] = { 0.85, 0.85, 0.85 }
+ text[SELECTED] = { 0.85, 0.85, 0.85 }
+
+# base is used to color a treeview with no rows
+
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+ base[ACTIVE] = { 0.20, 0.20, 0.25 }
+ base[PRELIGHT] = { 0.20, 0.20, 0.25 }
+ base[INSENSITIVE] = { 0.20, 0.20, 0.25 }
+ base[SELECTED] = { 0.20, 0.20, 0.25 }
+
+}
+
+style "io_selector_port_list" = "medium_text"
+{
+ GtkTreeView::even-row-color = { 0.20, 0.20, 0.25 }
+ GtkTreeView::odd-row-color = { 0.20, 0.20, 0.25 }
+# fg is used to color the fg (text) of the column header button
+
+ fg[NORMAL] = { 0.70, 0.70, 0.70 }
+ fg[SELECTED] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0.70, 0.70, 0.70 }
+ fg[PRELIGHT] = { 0.70, 0.70, 0.70 }
+ fg[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+
+# bg is used used to color the background of the column header button
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = { 0.30, 0.30, 0.35 }
+ bg[PRELIGHT] = { 0.30, 0.30, 0.35 }
+ bg[INSENSITIVE] = { 0.30, 0.30, 0.35 }
+ bg[SELECTED] = { 0.30, 0.30, 0.35 }
+
+# text is used to color the treeview row text
+
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[SELECTED] = { 0.80, 0.80, 0.80 }
+
+# base is used to color a treeview with no rows
+
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+ base[ACTIVE] = { 0.20, 0.20, 0.25 }
+ base[PRELIGHT] = { 0.20, 0.20, 0.25 }
+ base[INSENSITIVE] = { 0.20, 0.20, 0.25 }
+ base[SELECTED] = { 0.20, 0.20, 0.25 }
+}
+
+style "io_selector_notebook" = "default_base"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ font_name ="%FONT_BOLD_NORMAL%"
+}
+
+style "tearoff_arrow" = "medium_bold_entry"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+}
+
+style "location_row_button" = "default_button"
+{
+ font_name = "%FONT_NORMAL%"
+}
+
+style "location_rows_clock" = "default_clock_display"
+{
+ font_name = "%FONT_BIG%"
+}
+
+style "pan_slider"
+{
+ font_name = "%FONT_NORMAL%"
+
+ fg[NORMAL] = { 0.22, 0.73, 0.22 }
+ fg[ACTIVE] = { 0.22, 0.73, 0.22 }
+ fg[INSENSITIVE] = {0.22, 0.53, 0.22 }
+ fg[SELECTED] = { 0.67, 0.23, 0.22 }
+ fg[PRELIGHT] = { 0.67, 0.23, 0.22 }
+
+ bg[NORMAL] = { 0.05, 0.05, 0.05 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[INSENSITIVE] = {0.12, 0.19, 0.25 }
+ bg[SELECTED] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+
+ text[NORMAL] = { 0.70, 0.70, 0.70 }
+ text[ACTIVE] = { 0.70, 0.70, 0.70 }
+ text[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ text[SELECTED] = { 0.70, 0.70, 0.70 }
+ text[PRELIGHT] = { 0.70, 0.70, 0.70 }
+
+ # used to draw the triangular indicators
+
+ base[NORMAL] = { 0.80, 0.80, 0.80 }
+ base[ACTIVE] = { 0.80, 0.80, 0.80 }
+ base[INSENSITIVE] = {0.6, 0.6, 0.6 }
+ base[SELECTED] = { 0.80, 0.80, 0.80 }
+ base[PRELIGHT] = { 0.80, 0.80, 0.80 }
+
+}
+
+style "ardour_button" ="default_button"
+{
+ xthickness = 1
+ ythickness = 1
+}
+
+#---------------------------------------------------------------
+
+class "GtkWidget" style:highest "default_base"
+class "GtkScrollbar" style:highest "ardour_adjusters"
+class "GtkLabel" style:highest "default_generic"
+class "GtkButton" style:highest "ardour_button"
+class "GtkArrow" style:highest "tearoff_arrow"
+class "GtkProgressBar" style:highest "ardour_progressbars"
+
+widget "*FirstActionMessage" style:highest "first_action_message"
+widget "*VerboseCanvasCursor" style:highest "verbose_canvas_cursor"
+widget "*MarkerText" style:highest "marker_text"
+widget "*TimeAxisViewItemName*" style:highest "time_axis_view_item_name"
+#widget "*ExportProgress" style:highest "default_generic"
+widget "*ExportFileLabel" style:highest "small_bold_text"
+widget "*ExportFormatLabel" style:highest "medium_bold_text"
+widget "*ExportHeader" style:highest "small_bold_text"
+widget "*ExportFileDisplay" style:highest "medium_entry"
+widget "*ExportFormatDisplay" style:highest "medium_entry"
+widget "*ExportCheckbox" style:highest "small_entry"
+widget "*ExportTrackSelector*" style:highest "medium_entry_noselection_bg"
+widget "*EditModeSelector" style:highest "medium_bold_entry"
+widget "*SnapTypeSelector" style:highest "medium_bold_entry"
+widget "*SnapModeSelector" style:highest "medium_bold_entry"
+widget "*ZoomFocusSelector" style:highest "medium_bold_entry"
+widget "*ArdourContextMenu*" style:highest "default_menu"
+widget "*EditGroupTitleButton*" style:highest "default_button"
+widget "*MixerGroupTitleButton*" style:highest "default_button"
+widget "*ErrorLogCloseButton" style:highest "default_button"
+widget "*EditorGTKButton*" style:highest "default_button"
+widget "*ToolbarButton" style:highest "default_button"
+widget "*ToolbarButton*" style:highest "default_button"
+widget "*CrossfadeEditButton" style:highest "default_button"
+widget "*CrossfadeEditButton*" style:highest "default_button"
+widget "*TrackHistoryButton*" style:highest "default_button"
+widget "*TrackSizeButton*" style:highest "default_button"
+widget "*TrackPlaylistButton*" style:highest "default_button"
+widget "*TrackAutomationButton*" style:highest "default_button"
+widget "*TrackGroupButton*" style:highest "default_button"
+widget "*TrackMixButton*" style:highest "default_button"
+widget "*TrackVisualButton*" style:highest "default_button"
+widget "*TrackRemoveButton*" style:highest "default_button"
+widget "*BaseButton" style:highest "default_button"
+widget "*TakeButtonLabel" style:highest "default_button"
+widget "*MixerWidthButton" style:highest "default_button"
+widget "*MixerHideButton" style:highest "default_button"
+widget "*MixerSendButton" style:highest "default_button"
+widget "*MixerSendButtonLabel" style:highest "default_button"
+widget "*MixerSendSwitch" style:highest "default_button"
+widget "*MixerInsertButton" style:highest "default_button"
+widget "*MixerInsertButtonLabel" style:highest "default_button"
+widget "*MixerInsertSwitch" style:highest "default_button"
+widget "*MixerMonitorInputButton*" style:highest "very_small_button"
+widget "*MixerMonitorInputButton.*" style:highest "very_small_button"
+widget "*MixerIOButton" style:highest "very_small_button"
+widget "*MixerIOButtonLabel" style:highest "very_small_button"
+widget "*AddRouteDialogSpinner" style:highest "ardour_adjusters"
+widget "*AddRouteDialogRadioButton*" style:highest "preferences"
+widget "*OptionsNotebook" style:highest "preferences"
+widget "*OptionEditorToggleButton*" style:highest "preferences"
+widget "*OptionsLabel" style:highest "preferences"
+widget "*OptionEditorAuditionerLabel" style:highest "preferences"
+widget "*OptionsEntry" style:highest "option_entry"
+widget "*InspectorNotebook" style:highest "preferences"
+widget "*NewSessionDialog" style:highest "preferences"
+widget "*NewSessionDialogButton*" style:highest "preferences"
+widget "*MixerSendSwitch*" style:highest "very_small_red_active_and_selected_button"
+widget "*OptionEditorToggleButton" style:highest "small_red_active_and_selected_button"
+widget "*NewSessionDialogButton" style:highest "small_red_active_and_selected_button"
+widget "*RecordEnableButton" style:highest "track_rec_enable_button"
+widget "*RecordEnableButton-active" style:highest "track_rec_enable_button_active"
+widget "*RecordEnableButton-alternate" style:highest "track_rec_enable_button_alternate"
+widget "*MixerRecordEnableButton" style:highest "mixer_track_rec_enable_button"
+widget "*MixerRecordEnableButton-active" style:highest "mixer_track_rec_enable_button_active"
+widget "*MixerRecordEnableButton-alternate" style:highest "mixer_track_rec_enable_button_alternate"
+widget "*MuteButton" style:highest "mute_button"
+widget "*MuteButton-alternate" style:highest "mute_button_alternate"
+widget "*MuteButton-active" style:highest "mute_button_active"
+widget "*MixerMuteButton" style:highest "mixer_mute_button"
+widget "*MixerMuteButton-alternate" style:highest "mixer_mute_button_alternate"
+widget "*MixerMuteButton-active" style:highest "mixer_mute_button_active"
+widget "*SoloButton" style:highest "solo_button"
+widget "*SoloButton-alternate" style:highest "solo_button_alternate"
+widget "*SoloButton-active" style:highest "solo_button_active"
+widget "*MixerSoloButton" style:highest "mixer_solo_button"
+widget "*MixerSoloButton-alternate" style:highest "mixer_solo_button_alternate"
+widget "*MixerSoloButton-active" style:highest "mixer_solo_button_active"
+widget "*TrackLoopButton*" style:highest "track_loop_button"
+widget "*PanAutomationLineSelector*" style:highest "multiline_combo"
+widget "*EditorTimeButton*" style:highest "time_button"
+widget "*MixerPhaseInvertButton*" style:highest "very_small_button"
+widget "*MixerPhaseInvertButton.*" style:highest "very_small_button"
+widget "*MixerAutomationRecordingButton*" style:highest "very_small_button"
+widget "*MixerAutomationRecordingButton.*" style:highest "very_small_button"
+widget "*MixerAutomationModeButton*" style:highest "very_small_button"
+widget "*MixerAutomationModeButton.*" style:highest "very_small_button"
+widget "*MixerAutomationPlaybackButton*" style:highest "very_small_button"
+widget "*MixerAutomationPlaybackButton.*" style:highest "very_small_button"
+widget "*MixerNameButton" style:highest "very_small_button"
+widget "*MixerNameButtonLabel" style:highest "very_small_button"
+widget "*MixerGroupButton" style:highest "very_small_button"
+widget "*MixerGroupButtonLabel" style:highest "very_small_button"
+widget "*MixerCommentButton" style:highest "very_small_button"
+widget "*MixerCommentButton*" style:highest "very_small_button"
+widget "*EditGroupButton" style:highest "very_small_button"
+widget "*EditGroupButtonLabel" style:highest "very_small_button"
+widget "*TransportButton" style:highest "transport_rec_button"
+widget "*TransportButton-active" style:highest "transport_button_active"
+widget "*ShuttleButton" style:highest "transport_button"
+widget "*ShuttleButton*" style:highest "transport_button"
+widget "*ShuttleDisplay" style:highest "transport_button"
+widget "*ShuttleDisplay*" style:highest "transport_button"
+widget "*ShuttleControl" style:highest "shuttle_control"
+widget "*TransportRecButton" style:highest "transport_rec_button"
+widget "*TransportRecButton*" style:highest "transport_rec_button"
+widget "*TransportRecButton-active" style:highest "transport_rec_button_active"
+widget "*TransportRecButton-active*" style:highest "transport_rec_button_active"
+widget "*TransportRecButton-alternate" style:highest "transport_rec_button_alternate"
+widget "*TransportRecButton-alternate*" style:highest "transport_rec_button_alternate"
+widget "*TransportRecButton*" style:highest "transport_rec_button"
+widget "*RecordingXrunWarningWindow" style:highest "xrun_warn"
+widget "*RecordingXrunWarningWindow*" style:highest "xrun_warn"
+/*widget "*MainMenuBar" style:highest "menu_bar_base"*/
+widget "*ErrorMessage" style:highest "error_message"
+widget "*FatalMessage" style:highest "fatal_message"
+widget "*InfoMessage" style:highest "info_message"
+widget "*WarningMessage" style:highest "warning_message"
+widget "*BigClockNonRecording" style:highest "non_recording_big_clock_display"
+widget "*BigClockRecording" style:highest "recording_big_clock_display"
+widget "*TransportClockDisplay" style:highest "transport_clock_display"
+widget "*SecondaryClockDisplay" style:highest "transport_clock_display"
+widget "*TransportClockDisplayDelta" style:highest "transport_clock_display_delta"
+widget "*SecondaryClockDisplayDelta" style:highest "transport_clock_display_delta"
+widget "*AudioClockFramesUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockFramesLowerInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockSMPTEUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockSMPTELowerInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockBBTUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockBBTLowerInfo" style:highest "tempo_meter_clock_display"
+widget "*SelectionStartClock" style:highest "default_clock_display"
+widget "*SelectionEndClock" style:highest "default_clock_display"
+widget "*EditPointClock" style:highest "default_clock_display"
+widget "*PreRollClock" style:highest "default_clock_display"
+widget "*PostRollClock" style:highest "default_clock_display"
+widget "*NudgeClock" style:highest "default_clock_display"
+widget "*InsertTimeClock" style:highest "default_clock_display"
+widget "*ZoomRangeClock" style:highest "default_clock_display"
+widget "*SMPTEOffsetClock" style:highest "default_clock_display"
+widget "*TransportLabel" style:highest "small_bold_text"
+widget "*TakeLabel" style:highest "small_bold_text"
+widget "*LocationLabel" style:highest "small_bold_text"
+widget "*WipeLabel" style:highest "small_bold_text"
+widget "*TakeTagLabel" style:highest "small_bold_text"
+widget "*ToolBarLabel" style:highest "small_bold_text"
+widget "*EditorDisplayLabel" style:highest "small_bold_text"
+widget "*NewSessionLabel" style:highest "large_text"
+widget "*GlobalButtonLabel" style:highest "default_generic"
+widget "*ClickButton" style:highest "medium_entry"
+widget "*RegionNameDisplay" style:highest "medium_entry"
+widget "*PluginDisplay" style:highest "medium_entry"
+widget "*SelectionDisplay" style:highest "medium_entry"
+widget "*HistorySelector" style:highest "medium_entry"
+widget "*LocationSelector" style:highest "medium_entry"
+widget "*TakeSelector" style:highest "medium_entry"
+widget "*RegionSelector" style:highest "medium_entry"
+widget "*SMPTERuler" style:highest "editor_time_ruler"
+widget "*BBTRuler" style:highest "editor_time_ruler"
+widget "*FramesRuler" style:highest "editor_time_ruler"
+widget "*MinSecRuler" style:highest "editor_time_ruler"
+widget "*BaseFrame" style:highest "base_frame"
+
+widget "*AudioTrackStripBase" style:highest "audio_track_base"
+widget "*AudioBusStripBase" style:highest "audio_bus_base"
+widget "*MidiTrackStripBase" style:highest "midi_track_base"
+widget "*AudioTrackStripBaseInactive" style:highest "track_controls_inactive"
+widget "*AudioBusStripBaseInactive" style:highest "track_controls_inactive"
+widget "*MidiTrackStripBaseInactive" style:highest "track_controls_inactive"
+widget "*FaderMetricsStrip" style:highest "audio_track_metrics"
+widget "*AudioTrackMetrics" style:highest "audio_track_metrics"
+widget "*AudioBusMetrics" style:highest "audio_bus_metrics"
+widget "*AudioTrackMetricsInactive" style:highest "audio_track_metrics_inactive"
+widget "*AudioBusMetricsInactive" style:highest "audio_bus_metrics_inactive"
+
+widget "*TimeAxisViewControlsBaseUnselected" style:highest "audio_track_base"
+widget "*AudioTrackControlsBaseUnselected" style:highest "audio_track_base"
+widget "*MidiTrackControlsBaseUnselected" style:highest "midi_track_base"
+widget "*AudioTrackFader" style:highest "gain_fader"
+
+widget "*BusControlsBaseUnselected" style:highest "audio_bus_base"
+widget "*AudioBusFader" style:highest "gain_fader"
+widget "*TrackSeparator" style:highest "track_separator"
+widget "*TrackEditIndicator0*" style:highest "edit_group_0"
+widget "*TrackEditIndicator1*" style:highest "edit_group_1"
+widget "*TrackEditIndicator2*" style:highest "edit_group_2"
+widget "*TrackEditIndicator3*" style:highest "edit_group_3"
+widget "*TrackEditIndicator4*" style:highest "edit_group_3"
+widget "*TrackEditIndicator5*" style:highest "edit_group_3"
+widget "*TrackEditIndicator6*" style:highest "edit_group_3"
+widget "*TrackEditIndicator7*" style:highest "edit_group_3"
+widget "*EditorTrackNameDisplay" style:highest "track_name_display"
+widget "*EditorTrackNameDisplay*" style:highest "track_name_display"
+widget "*EditorActiveTrackNameDisplay" style:highest "active_track_name_display"
+widget "*EditorActiveTrackNameDisplay*" style:highest "active_track_name_display"
+widget "*CrossfadeEditAuditionButton" style:highest "red_when_active"
+widget "*CrossfadeEditAuditionButton*" style:highest "red_when_active"
+widget "*CrossfadeEditCurveButton" style:highest "red_when_active"
+widget "*CrossfadeEditCurveButton*" style:highest "red_when_active"
+widget "*CrossfadeEditLabel" style:highest "medium_text"
+widget "*CrossfadeEditFrame" style:highest "base_frame"
+widget "*MouseModeButton" style:highest "default_button"
+widget "*MouseModeButton*" style:highest "default_button"
+widget "*EditorMainCanvas" style:highest "main_canvas_area"
+widget "*AudioTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*BusControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*AutomationTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*AutomationTrackName" style:highest "automation_track_name"
+widget "*AudioTrackControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*BusControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*AutomationTrackControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*AudioTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*MidiTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*BusControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*AutomationTrackControlsBase" style:highest "automation_track_controls_base"
+widget "*AutomationTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+/*widget "*EditorMenuBar*" style:highest "black_mackie_menu_bar"
+widget "*MainMenuBar*" style:highest "black_mackie_menu_bar"
+*/
+widget "*ZoomClickBox" style:highest "medium_bold_entry"
+widget "*PluginParameterLabel" style:highest "medium_text"
+widget "*PluginNameInfo" style:highest "plugin_name_text"
+widget "*PluginMakerInfo" style:highest "plugin_maker_text"
+widget "*PluginParameterInfo" style:highest "medium_text"
+widget "*MotionControllerValue" style:highest "medium_entry"
+widget "*ParameterValueDisplay" style:highest "medium_bold_entry"
+widget "*PluginUIClickBox" style:highest "medium_bold_entry"
+widget "*PluginUIClickBox*" style:highest "medium_bold_entry"
+widget "*PluginSlider" style:highest "plugin_slider"
+widget "*RedirectSelector" style:highest "redirect_list_display"
+widget "*RedirectSelector.*" style:highest "redirect_list_display"
+widget "*EditGroupDisplay" style:highest "treeview_display"
+widget "*TrackListDisplay" style:highest "treeview_display"
+widget "*RegionListDisplay" style:highest "treeview_display"
+widget "*NamedSelectionDisplay" style:highest "treeview_display"
+widget "*SnapshotDisplay" style:highest "treeview_display"
+widget "*MixerTrackCommentArea" style:highest "option_entry"
+widget "*MixerPanZone" style:highest "pan_zone"
+widget "*MixerTrackDisplayList" style:highest "treeview_display"
+widget "*MixerSnapshotDisplayList" style:highest "treeview_display"
+widget "*MixerAuxDisplayList" style:highest "treeview_display"
+widget "*MixerGroupList" style:highest "treeview_display"
+widget "*RegionEditorLabel" style:highest "medium_text"
+widget "*RegionEditorSmallLabel" style:highest "small_text"
+widget "*RegionEditorEntry" style:highest "medium_entry"
+widget "*RegionEditorClock" style:highest "default_clock_display"
+widget "*RegionEditorToggleButton" style:highest "paler_red_when_active"
+widget "*RegionEditorToggleButton*" style:highest "paler_red_when_active"
+widget "*MixerStripSpeedBase" style:highest "small_entry"
+widget "*MixerStripSpeedBase*" style:highest "small_entry"
+widget "*MixerStripSpeedBaseNotOne" style:highest "small_red_on_black_entry"
+widget "*MixerStripSpeedBaseNotOne*" style:highest "small_red_on_black_entry"
+widget "*MixerStripGainDisplay" style:highest "small_entry"
+widget "*MixerStripGainDisplay*" style:highest "small_entry"
+widget "*MixerStripGainUnitButton" style:highest "very_small_button"
+widget "*MixerStripGainUnitButton*" style:highest "very_small_button"
+widget "*MixerStripMeterPreButton" style:highest "very_small_button"
+widget "*MixerStripMeterPreButton*" style:highest "very_small_button"
+widget "*MixerStripPeakDisplay*" style:highest "red_active_small_entry"
+widget "*MixerStripPeakDisplayPeak*" style:highest "peak_display_peaked_entry"
+widget "*MixerStripSelectedFrame" style:highest "selected_strip_frame"
+widget "*MixerStripFrame" style:highest "base_frame"
+widget "*HWMonitorButton" style:highest "red_when_active"
+widget "*HWMonitorButton*" style:highest "red_when_active"
+widget "*TransportSoloAlert" style:highest "flashing_alert"
+widget "*TransportSoloAlert.*" style:highest "flashing_alert"
+widget "*TransportAuditioningAlert" style:highest "flashing_alert"
+widget "*TransportAuditioningAlert.*" style:highest "flashing_alert"
+widget "*FadeCurve" style:highest "medium_bold_entry"
+widget "*FadeCurve*" style:highest "medium_bold_entry"
+widget "*IOSelectorButton" style:highest "default_button"
+widget "*IOSelectorButton*" style:highest "default_button"
+widget "*IOSelectorList" style:highest "medium_entry_noselection_fg"
+widget "*IOSelectorPortList" style:highest "io_selector_port_list"
+widget "*IOSelectorPortList.*" style:highest "io_selector_port_list"
+widget "*IOSelectorPortListSelected" style:highest "selected_io_selector_port_list"
+widget "*IOSelectorPortListSelected.*" style:highest "selected_io_selector_port_list"
+widget "*IOSelectorNotebook" style:highest "io_selector_notebook"
+widget "*IOSelectorNotebookTab" style:highest "io_selector_notebook"
+widget "*IOSelectorFrame" style:highest "base_frame"
+widget "*ConnectionEditorButton" style:highest "default_button"
+widget "*ConnectionEditorButton*" style:highest "default_button"
+widget "*ConnectionEditorList" style:highest "medium_entry_noselection_fg"
+widget "*ConnectionEditorConnectionList" style:highest "medium_entry"
+widget "*ConnectionEditorPortList" style:highest "io_selector_port_list"
+widget "*ConnectionEditorPortListSelected" style:highest "selected_io_selector_port_list"
+widget "*ConnectionEditorNotebook" style:highest "io_selector_notebook"
+widget "*ConnectionEditorNotebookTab" style:highest "io_selector_notebook"
+widget "*ConnectionEditorFrame" style:highest "base_frame"
+widget "*RouteParamsListDisplay" style:highest "inspector_track_list_display"
+widget "*RouteParamsPreListDisplay" style:highest "inspector_redirect_list_display"
+widget "*RouteParamsPostListDisplay" style:highest "inspector_redirect_list_display"
+widget "*TearOffArrow" style:highest "tearoff_arrow"
+widget "*RouteParamsTitleButton" style:highest "medium_text"
+widget "*RouteParamsTitleLabel" style:highest "medium_text"
+widget "*PluginAutomateRecordButton" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomateRecordButton*" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomatePlayButton" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomatePlayButton*" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomateButton" style:highest "small_button"
+widget "*PluginAutomateButton*" style:highest "small_button"
+widget "*PluginSaveButton" style:highest "small_button"
+widget "*PluginSaveButton*" style:highest "small_button"
+widget "*PluginLoadButton" style:highest "small_button"
+widget "*PluginLoadButton*" style:highest "small_button"
+
+widget "*MetricDialogFrame" style:highest "base_frame"
+widget "*MetricEntry" style:highest "medium_bold_entry"
+widget "*MetricButton" style:highest "default_button"
+widget "*MetricButton.*" style:highest "default_button"
+widget "*MetricLabel" style:highest "medium_text"
+widget "*TimeStretchButton" style:highest "default_button"
+widget "*TimeStretchButton.*" style:highest "default_button"
+widget "*TimeStretchProgress" style:highest "default_generic"
+widget "*ChoiceWindow" style:highest "default_generic"
+widget "*ChoicePrompt" style:highest "default_generic"
+widget "*ChoiceButton" style:highest "default_button"
+widget "*ChoiceButton*" style:highest "default_button"
+widget "*SelectionModeButton" style:highest "default_button"
+widget "*SelectionModeButton*" style:highest "default_button"
+widget "*TrackLabel" style:highest "medium_text"
+widget "*TrackPlugName" style:highest "medium_text"
+widget "*TrackParameterName" style:highest "small_text"
+widget "*AddRouteDialog*" style:highest "medium_text"
+widget "*AddRouteDialog.GtkLabel" style:highest "medium_text"
+widget "*AddRouteDialogChannelChoice" style:highest "medium_bold_entry"
+widget "*AddRouteDialogSpinner" style:highest "medium_bold_entry"
+widget "*AddRouteDialogSpinner*" style:highest "medium_bold_entry"
+widget "*AddRouteDialogRadioButton" style:highest "red_when_active"
+widget "*AddRouteDialogButton" style:highest "default_button"
+widget "*AddRouteDialogNameTemplateEntry" style:highest "medium_bold_entry"
+widget "*NewSessionIOLabel" style:highest "larger_bold_text"
+widget "*NewSessionSR1Label" style:highest "red_medium_text"
+widget "*NewSessionSR2Label" style:highest "medium_text"
+widget "*NewSessionChannelChoice" style:highest "medium_bold_entry"
+widget "*NewSessionMainButton" style:highest "larger_bold_text"
+widget "*NewSessionMainButton*" style:highest "larger_bold_text"
+widget "*NewSessionMainLabel" style:highest "larger_bold_text"
+widget "*LocationEditRowClock" style:highest "location_rows_clock"
+widget "*LocationEditNameLabel" style:highest "medium_text"
+widget "*LocationEditSetButton" style:highest "location_row_button"
+widget "*LocationEditSetButton*" style:highest "location_row_button"
+widget "*LocationEditGoButton" style:highest "location_row_button"
+widget "*LocationEditGoButton*" style:highest "location_row_button"
+widget "*LocationEditCdButton" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditCdButton*" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditHideButton" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditHideButton*" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditNumberLabel" style:highest "small_text"
+widget "*LocationLocEditorFrame" style:highest "base_frame"
+widget "*LocationRangeEditorFrame" style:highest "base_frame"
+widget "*LocationEditNameEntry" style:highest "option_entry"
+widget "*LocationAddLocationButton" style:highest "default_button"
+widget "*LocationAddLocationButton*" style:highest "default_button"
+widget "*LocationAddRangeButton" style:highest "default_button"
+widget "*LocationAddRangeButton*" style:highest "default_button"
+widget "*LocationEditRemoveButton" style:highest "location_row_button"
+widget "*LocationEditRemoveButton*" style:highest "location_row_button"
+widget "*PanSlider" style:highest "pan_slider"
+widget "*PanningLinkButton" style:highest "mixer_red_active_button"
+widget "*PanningLinkButton.*" style:highest "mixer_red_active_button"
+widget "*PanningLinkDirectionButton" style:highest "very_small_button"
+widget "*PanningLinkDirectionButton.*" style:highest "very_small_button"
+widget "*ChannelCountSelector" style:highest "medium_bold_entry"
+widget "*ChannelCountSelector.GtkArrow" style:highest "default_generic"
+widget "*RegionListWholeFile" style:highest "treeview_parent_node"
+widget "*EditorHScrollbar" style:highest "editor_hscrollbar"
+widget "*ResizerHandler" style:highest "resizer_handle"
+
+style "tooltip" {
+ fg[NORMAL] = { 0.20, 0.20, 0.20 }
+ bg[NORMAL] = "#FFFFFF"
+}
+
+widget "*ooltip*" style:highest "tooltip"
diff --git a/gtk2_ardour/ardour2_ui_light_sae.rc.in b/gtk2_ardour/ardour2_ui_light_sae.rc.in
new file mode 100644
index 0000000000..2a6844c6d0
--- /dev/null
+++ b/gtk2_ardour/ardour2_ui_light_sae.rc.in
@@ -0,0 +1,1584 @@
+#
+# This is the GTK style file for Ardour
+#
+
+style "very_small_text"
+{
+ font_name = "%FONT_SMALLER%"
+}
+
+style "small_text"
+{
+ font_name = "%FONT_SMALL%"
+}
+
+style "small_bold_text"
+{
+ font_name = "%FONT_BOLD_SMALL%"
+}
+
+style "medium_bold_text"
+{
+ font_name = "%FONT_BOLD_NORMAL%"
+}
+
+style "medium_text"
+{
+ font_name = "%FONT_NORMAL%"
+}
+
+style "red_medium_text" = "medium_text"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+}
+
+
+style "large_text"
+{
+ font_name = "%FONT_LARGE%"
+}
+
+style "larger_bold_text"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+}
+
+style "plugin_name_text"
+{
+ font_name = "%FONT_BOLD_LARGER%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+}
+
+style "plugin_maker_text"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+}
+
+style "automation_track_name"
+{
+ font_name = "%FONT_ITALIC_NORMAL%"
+}
+
+style "first_action_message"
+{
+ font_name = "%FONT_HUGER%"
+}
+
+style "verbose_canvas_cursor"
+{
+ font_name = "%FONT_BOLD_LARGER%"
+}
+
+style "marker_text"
+{
+ font_name = "%FONT_NORMAL%"
+}
+
+style "time_axis_view_item_name"
+{
+ font_name = "%FONT_SMALLER%"
+}
+
+style "default_base" = "medium_text"
+{
+
+ GtkButton::default_border = { 0, 0, 0, 0 }
+ GtkButton::default_outside_border = { 0, 0, 0, 0 }
+ GtkButton::button_relief = GTK_RELIEF_NONE
+ GtkTreeView::vertical-padding = 0
+ GtkTreeView::horizontal-padding = 0
+ GtkTreeView::even-row-color = { 0.70, 0.70, 0.70 }
+ GtkTreeView::odd-row-color = { 0.64, 0.64, 0.64 }
+
+ fg[NORMAL] = { 0.30, 0.30, 0.40 }
+ fg[ACTIVE] = { 0.30, 0.30, 0.40 }
+ fg[PRELIGHT] = { 0.10, 0.10, 0.20 }
+ fg[INSENSITIVE] = { 0.30, 0.30, 0.40 }
+ fg[SELECTED] = { 0.30, 0.30, 0.40 }
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+
+ text[NORMAL] = { 0.30, 0.30, 0.40 }
+ text[ACTIVE] = { 0.30, 0.30, 0.40 }
+ text[PRELIGHT] = { 0.30, 0.30, 0.40 }
+ text[INSENSITIVE] = { 0.30, 0.30, 0.40 }
+ text[SELECTED] = { 0, 0, 0 }
+
+ base[ACTIVE] = { 0.80, 0.80, 0.80 }
+ base[NORMAL] = { 0.80, 0.80, 0.80 }
+ base[PRELIGHT] = { 0.90, 0.90, 0.90 }
+ base[INSENSITIVE] = "#4c5159"
+ base[SELECTED] = { 0.60, 0.60, 0.80 }
+
+ engine "clearlooks"
+ {
+ menubarstyle = 0 # 0 = flat, 1 = sunken, 2 = flat gradient
+ menuitemstyle = 0 # 0 = flat, 1 = 3d-ish (gradient), 2 = 3d-ish (button)
+ listviewitemstyle = 0 # 0 = flat, 1 = 3d-ish (gradient)
+ progressbarstyle = 1 # 0 = candy bar, 1 = fancy candy bar, 2 = flat
+ }
+}
+
+style "base_frame"
+{
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[NORMAL] = { 0.35, 0.35, 0.40 }
+}
+
+style "transport_base" = "medium_bold_text"
+{
+ bg[NORMAL] = { 0.10, 0.10, 0.10 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+ bg[INSENSITIVE] = { 0, 0, 0 }
+ bg[SELECTED] = { 0, 0, 0 }
+}
+/*
+style "black_mackie_menu_bar"
+{
+ font_name = "%FONT_BOLD_NORMAL%"
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ bg[NORMAL] = { 0, 0, 0 }
+}
+*/
+style "default_button"
+{
+ font_name = "%FONT_SMALL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.70, 0.70, 0.90 }
+ bg[INSENSITIVE] = { 0.70, 0.70, 0.90 }
+ bg[SELECTED] = { 0.70, 0.70, 0.90 }
+}
+
+style "default_menu"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.70, 0.70, 0.90 }
+ bg[INSENSITIVE] = { 0.70, 0.70, 0.90 }
+ bg[SELECTED] = { 0.70, 0.70, 0.90 }
+}
+
+style "default_generic"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.70, 0.70, 0.90 }
+ bg[INSENSITIVE] = { 0.70, 0.70, 0.90 }
+ bg[SELECTED] = { 0.70, 0.70, 0.90 }
+}
+
+style "very_small_button" = "default_button"
+{
+ font_name = "%FONT_SMALLER%"
+ ythickness = 0
+ xthickness = 0
+}
+
+style "small_button" = "default_button"
+{
+}
+
+style "very_small_red_active_and_selected_button" = "very_small_button"
+{
+ bg[ACTIVE] = { 1.0, 0, 0}
+ bg[SELECTED] = { 1.0, 0, 0}
+}
+
+style "small_red_active_and_selected_button" = "small_button"
+{
+ fg[ACTIVE] = { 0, 0, 0 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+ bg[SELECTED] = { 1.0, 0, 0}
+}
+
+style "gain_fader"
+{
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+}
+
+
+style "track_rec_enable_button" = "small_button"
+{
+}
+
+style "track_rec_enable_button_active" = "small_button"
+{
+ fg[SELECTED] = { 0.0, 0.0, 0.0 }
+ fg[ACTIVE] = { 0.0, 0.0, 0.0 }
+ fg[PRELIGHT] = { 0.0, 0.0, 0.0 }
+ fg[NORMAL] = { 0.0, 0.0, 0.0 }
+
+ bg[NORMAL] = { 1.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ bg[SELECTED] = { 1.0, 0.0, 0.0 }
+ bg[PRELIGHT] = { 1.0, 0.0, 0.0 }
+}
+
+style "track_rec_enable_button_alternate" = "small_button"
+{
+ fg[SELECTED] = { 0.0, 0.0, 0.0 }
+ fg[ACTIVE] = { 0.0, 0.0, 0.0 }
+ fg[PRELIGHT] = { 0.0, 0.0, 0.0 }
+ fg[NORMAL] = { 0.0, 0.0, 0.0 }
+
+ bg[NORMAL] = { 0.91, 0.68, 0.68}
+ bg[ACTIVE] = { 0.91, 0.68, 0.68}
+ bg[SELECTED] = { 0.91, 0.68, 0.68}
+ bg[PRELIGHT] = { 0.91, 0.68, 0.68}
+}
+
+style "mixer_track_rec_enable_button" = "track_rec_enable_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_track_rec_enable_button_alternate" = "track_rec_enable_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_track_rec_enable_button_active" = "track_rec_enable_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "solo_button" = "small_button"
+{
+}
+
+style "solo_button_alternate" = "small_button"
+{
+ bg[NORMAL] = { 0.19, 0.97, 0.69 } # solo-safe
+ bg[ACTIVE] = { 0.19, 0.97, 0.69 } # solo-safe
+ bg[SELECTED] = { 0.19, 0.97, 0.69 } # solo-safe
+ bg[PRELIGHT] = { 0.19, 0.97, 0.69 } # solo-safe
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+
+style "solo_button_active" = "small_button"
+{
+ bg[NORMAL] = { 0.66, 0.97, 0.19 } # solo
+ bg[ACTIVE] = { 0.66, 0.97, 0.19 } # solo
+ bg[SELECTED] = { 0.66, 0.97, 0.19 } # solo
+ bg[PRELIGHT] = { 0.66, 0.97, 0.19 } # solo
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mixer_solo_button" = "solo_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_solo_button_alternate" = "solo_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+style "mixer_solo_button_active" = "solo_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+
+style "mute_button" = "small_button"
+{
+}
+
+style "mute_button_alternate" = "small_button"
+{
+ bg[ACTIVE] = { 1.0, 0.98, 0.53 }
+ bg[NORMAL] = { 1.0, 0.98, 0.53 }
+ bg[SELECTED] = { 1.0, 0.98, 0.53 }
+ bg[PRELIGHT] = { 1.0, 0.98, 0.53 }
+
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mute_button_active" = "small_button"
+{
+ bg[NORMAL] = { 0.90, 0.89, 0.73 }
+ bg[ACTIVE] = { 0.90, 0.89, 0.73 }
+ bg[PRELIGHT] = { 0.90, 0.89, 0.73 }
+ bg[SELECTED] = { 0.90, 0.89, 0.73 }
+
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mixer_mute_button_alternate" = "mute_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_mute_button_active" = "mute_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "multiline_combo" = "small_button"
+{
+ font_name = "%FONT_NORMAL%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_mute_button" = "mute_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "track_loop_button" = "small_button"
+{
+ bg[ACTIVE] = { 1.0, 0.98, 0.53 }
+ bg[PRELIGHT] = { 1.0, 0.98, 0.53 }
+
+}
+
+style "mixer_red_active_button" = "very_small_button"
+{
+ fg[ACTIVE] = { 0, 1.0, 1.0 }
+ bg[ACTIVE] = { 0.7, 0, 0 }
+
+ base[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+}
+
+style "time_button" = "default_button"
+{
+ font_name = "%FONT_SMALL%"
+}
+
+style "transport_button"
+{
+}
+
+style "transport_button_active"
+{
+ bg[NORMAL] = { 0.50, 1.0, 0.50 }
+ bg[ACTIVE] = { 0.50, 1.0, 0.50 }
+ bg[SELECTED] = { 0.50, 1.0, 0.50 }
+ bg[PRELIGHT] = { 0.50, 1.0, 0.50 }
+
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "transport_rec_button"
+{
+}
+
+style "transport_rec_button_active"
+{
+ bg[ACTIVE] = { 1.0, 0, 0 }
+ bg[NORMAL] = { 1.0, 0, 0 }
+ bg[SELECTED] = { 1.0, 0, 0 }
+ bg[PRELIGHT] = { 1.0, 0, 0 }
+}
+
+style "transport_rec_button_alternate"
+{
+ bg[PRELIGHT] = { 0.91, 0.68, 0.68 }
+ bg[NORMAL] = { 0.91, 0.68, 0.68 }
+ bg[SELECTED] = { 0.91, 0.68, 0.68 }
+ bg[ACTIVE] = { 0.91, 0.68, 0.68 }
+}
+
+style "shuttle_control" = "very_small_text"
+{
+ fg[NORMAL] = { 0.85, 0.92, 0.98 }
+ fg[ACTIVE] = { 0.85, 0.92, 0.98 }
+ fg[PRELIGHT] = { 0.85, 0.92, 0.98 }
+ fg[SELECTED] = { 0.85, 0.92, 0.98 }
+ fg[INSENSITIVE] = { 0.85, 0.92, 0.98 }
+
+ bg[NORMAL] = { 0.26, 0.26, 0.31 }
+ bg[PRELIGHT] = { 0.26, 0.26, 0.31 }
+ bg[INSENSITIVE] = { 0.26, 0.26, 0.31 }
+ bg[ACTIVE] = { 0.70, 0.70, 0.70 }
+ bg[SELECTED] = { 1.0, 0.04, 0.04 }
+}
+
+style "ardour_adjusters" = "default_generic"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.60 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.06, 0.06, 0.06 }
+}
+
+style "editor_hscrollbar" = "ardour_adjusters"
+{
+ #
+ # special case: we want this scrollbar to be as tall as the
+ # zoom focus selector combobox. scrollbars don't expand to
+ # fill the space available to them, so we have to explicitly
+ # make it bigger.
+ #
+ GtkRange::slider_width = 27
+ GtkScrollbar::slider_width = 27
+}
+
+style "resizer_handle"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = "#818181"
+}
+
+style "ardour_progressbars" = "default_generic"
+{
+ bg[NORMAL] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0.00, 0.36, 0.40 }
+}
+
+style "preferences" = "default_base"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+}
+
+style "option_entry" = "default_base"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ fg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+
+ base[INSENSITIVE] = { 0.07, 0.07, 0.12 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+ bg[ACTIVE] = { 0.35, 0.35, 0.40 }
+}
+
+style "red_when_active" = "medium_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+}
+
+style "xrun_warn"
+{
+ font_name = "%FONT_BOLD_LARGE%"
+
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ text[NORMAL] = { 1.0, 1.0, 1.0 }
+ text[ACTIVE] = { 1.0, 1.0, 1.0 }
+ base[NORMAL] = { 0.09, 0.48, 0.46 }
+ base[ACTIVE] = { 0.09, 0.48, 0.46 }
+ bg[NORMAL] = { 1.0, 0.48, 0.46 }
+ bg[ACTIVE] = { 0.09, 1.0, 0.46 }
+}
+/*
+style "menu_bar_base" = "default_base"
+{
+ bg[NORMAL] = { 0.2, 0.2, 0.3 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+ bg[INSENSITIVE] = { 0, 0, 0 }
+ bg[SELECTED] = { 0, 0, 0 }
+}
+*/
+style "fatal_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 1.0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "error_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "info_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "warning_message" = "medium_text"
+{
+ fg[ACTIVE] = { 0.30,0.30, 1.0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[NORMAL] = { 0, 0, 0 }
+}
+
+style "medium_entry" = "medium_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.70, 0.70, 0.70 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "medium_entry_noselection_fg" = "medium_entry"
+{
+ fg[SELECTED] = { 0.50, 1.0, 0.50 }
+}
+
+style "medium_entry_noselection_bg" = "medium_entry"
+{
+ bg[SELECTED] = { 1.0, 1.0, 1.0 }
+}
+
+style "medium_bold_entry" = "medium_bold_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.70, 0.70, 0.70 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "small_entry" = "small_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 1.0, 0 }
+ fg[SELECTED] = { 0, 1.0, 0 }
+ text[NORMAL] = { 0, 0, 0 }
+ text[ACTIVE] = { 0, 1.0, 0 }
+ text[SELECTED] = { 0, 1.0, 0 }
+ bg[NORMAL] = { 0.70, 0.70, 0.70 }
+ bg[SELECTED] = { 0.70, 0.70, 0.70 }
+ bg[SELECTED] = { 0.70, 0.70, 0.70 }
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "red_active_small_entry" = "small_entry"
+{
+ fg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+}
+
+style "small_bold_entry" = "small_bold_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.70, 0.70, 0.70 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "small_red_on_black_entry" = "small_bold_text"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.0, 0.0, 0.0 }
+}
+
+style "non_recording_big_clock_display" = "medium_entry"
+{
+ font_name = "%FONT_MASSIVE%"
+
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ fg[PRELIGHT] = { 1.0, 0, 0.0 }
+ fg[INSENSITIVE] = { 1.0, 0, 0.0 }
+
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.7, 0.0, 0.0 }
+}
+
+style "recording_big_clock_display" = "non_recording_big_clock_display"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+}
+
+style "transport_clock_display"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ fg[PRELIGHT] = { 1.0, 0, 0.0 }
+ fg[INSENSITIVE] = { 1.0, 0, 0.0 }
+
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.0, 0.0, 0.0 }
+}
+
+style "transport_clock_display_delta" = "transport_clock_display"
+{
+ fg[NORMAL] = { 0.30, 0.30, 1.0 }
+}
+
+style "tempo_meter_clock_display"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0.0, 0.48, 1.0 }
+ base[ACTIVE] = { 0.09, 0.98, 0.46 }
+ bg[NORMAL] = { 0.0, 0.48, 1.0 }
+ bg[ACTIVE] = { 0.09, 0.98, 0.46 }
+}
+
+style "default_clock_display" = "medium text"
+{
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ bg[NORMAL] = { 0, 0, 0 }
+ bg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "editor_time_ruler" = "small_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.74, 0.74, 0.77 }
+}
+
+style "audio_bus_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.65, 0.65, 0.65 }
+}
+
+style "audio_track_base" = "default_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[NORMAL] = { 0.70, 0.70, 0.70 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+}
+
+style "midi_bus_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+ #bg[NORMAL] = {0, 0.36, 0.40 }
+ bg[NORMAL] = "#444466"
+}
+
+style "midi_track_base" = "default_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ bg[NORMAL] = { 0.48, 0.30, 0.32 }
+ bg[ACTIVE] = { 0.70, 0.70, 0.80 }
+ bg[PRELIGHT] = { 0.70, 0.70, 0.80 }
+ bg[INSENSITIVE] = { 0.70, 0.70, 0.80 }
+ bg[SELECTED] = { 0.70, 0.70, 0.80 }
+}
+
+style "track_controls_inactive"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.66 }
+ bg[ACTIVE] = { 0.60, 0.60, 0.66 }
+ bg[INSENSITIVE] = { 0.60, 0.60, 0.66 }
+ bg[SELECTED] = { 0.60, 0.60, 0.66 }
+ bg[PRELIGHT] = { 0.60, 0.60, 0.66 }
+
+ #font_name = "sans 18"
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+}
+
+style "audio_track_metrics" = "audio_track_base"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_bus_metrics" = "audio_bus_base"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_track_metrics_inactive" = "track_controls_inactive"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_bus_metrics_inactive" = "track_controls_inactive"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "track_name_display"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ text[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+
+ base[NORMAL] = { 0.80, 0.80, 0.80 }
+ base[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+}
+
+style "active_track_name_display"
+{
+ font_name = "%FONT_NORMAL%"
+ text[NORMAL] = { 0.26, 0.26, 0.26 }
+ base[NORMAL] = { 0.89, 0.89, 0.89 }
+}
+
+style "track_separator"
+{
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+}
+
+#
+# Track edit groups. These styles define
+# the colors that the "edit" button will
+# use as a track is moved from
+# track edit group to track edit group.
+# There are 8 edit groups. Edit group 0
+# is used for tracks that are not editable,
+# so we leave its style to the default.
+#
+
+style "edit_group_0"
+
+{
+ bg[ACTIVE] = { 1.0, 0.65, 0.13 }
+ bg[NORMAL] = { 0.31, 0.31, 0.31 }
+ fg[NORMAL] = { 0.82, 0.91, 0.99 }
+ fg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "edit_group_1"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "edit_group_2"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "edit_group_3"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "treeview_parent_node"
+{
+ # specifies *just* the color used for whole file rows when not selected
+ fg[NORMAL] = { 0.0, 0.0, 1.0 }
+}
+
+style "treeview_display" = "small_bold_text"
+{
+ # expander arrow border and DnD "icon" text
+ fg[NORMAL] = { 0, 0, 0 }
+
+ # background with no rows or no selection, plus
+ # expander arrow core and DnD "icon" background
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+
+ # selected row bg when window does not have focus (including during DnD)
+ base[ACTIVE] = { 0.0, 0.60, 0.60 }
+
+ # selected row bg when window has focus
+ base[SELECTED] = { 0, 0.75, 0.75 }
+
+ # row text when in normal state and not a parent
+ text[NORMAL] = { 0, 0, 0 }
+
+ # selected row text with window focus
+ text[SELECTED] = { 0, 1.0, 1.0 }
+
+ # selected row text without window focus (including during DnD)
+ text[ACTIVE] = { 0, 1.0, 1.0 }
+}
+
+style "main_canvas_area"
+{
+ bg[NORMAL] = { 0.40, 0.40, 0.40 }
+ bg[ACTIVE] = { 0.40, 0.40, 0.40 }
+ bg[INSENSITIVE] = { 0.40, 0.40, 0.40 }
+ bg[SELECTED] = { 0.40, 0.40, 0.40 }
+ bg[PRELIGHT] = { 0.40, 0.40, 0.40 }
+}
+
+style "track_controls_inactive"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.66 }
+ bg[ACTIVE] = { 0.60, 0.60, 0.66 }
+ bg[INSENSITIVE] = { 0.60, 0.60, 0.66 }
+ bg[SELECTED] = { 0.60, 0.60, 0.66 }
+ bg[PRELIGHT] = { 0.60, 0.60, 0.66 }
+
+ font_name = "%FONT_LARGE%"
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+}
+
+style "edit_controls_base_selected"
+{
+ bg[NORMAL] = { 0.60, 0.54, 0.60 }
+ bg[ACTIVE] = { 0.60, 0.54, 0.60 }
+ bg[INSENSITIVE] = { 0.60, 0.54, 0.60 }
+ bg[SELECTED] = { 0.60, 0.54, 0.60 }
+ bg[PRELIGHT] = { 0.60, 0.54, 0.60 }
+}
+
+style "automation_track_controls_base"
+{
+ bg[NORMAL] = { 0.22, 0.22, 0.29 }
+ bg[ACTIVE] = { 0.22, 0.22, 0.29 }
+ bg[INSENSITIVE] = { 0.22, 0.22, 0.29 }
+ bg[SELECTED] = { 0.22, 0.22, 0.29 }
+ bg[PRELIGHT] = { 0.22, 0.22, 0.29 }
+}
+
+# Plugin Editors
+style "plugin_slider"
+{
+ font_name ="%FONT_BOLD_BIG%"
+
+ # the slider itself. the inactive part is INSENSITIVE,
+ # the active part is something else.
+
+ fg[NORMAL] = { 0.37, 0.43, 0.52 }
+ fg[ACTIVE] = { 0.37, 0.43, 0.52 }
+ fg[INSENSITIVE] = {0.35, 0.35, 0.40 } # matches default_base
+ fg[SELECTED] = { 0.37, 0.43, 0.52 }
+ fg[PRELIGHT] = { 0.37, 0.43, 0.52 }
+
+ # draws the outer rectangle around the slider
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = {0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+
+ # the numeric display
+
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.80, 0.80, 0.80 }
+ text[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ text[SELECTED] = { 0.80, 0.80, 0.80 }
+ text[PRELIGHT] = { 0.80, 0.80, 0.80 }
+}
+
+style "track_list_display" = "small_bold_text"
+{
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.3, 0.3, 0.3 }
+ text[INSENSITIVE] = { 0, 0, 0 }
+ text[SELECTED] = { 0.8, 0.8, 0.8 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "inspector_track_list_display" = "track_list_display"
+{
+ text[ACTIVE] = { 0.8, 0.8, 0.8 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.2, 0.2, 0.2 }
+ base[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.3, 0.3, 0.4 }
+}
+
+style "redirect_list_display"
+{
+ GtkTreeView::horizontal-separator = 0
+ GtkTreeView::vertical-separator = 0
+
+ font_name = "%FONT_SMALL%"
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.70, 0.70, 0.70 }
+ text[INSENSITIVE] = { 0, 0, 0 }
+ text[SELECTED] = { 0.9, 0.3, 0.3 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+
+ # these two are explicitly used by the cell renderer for the
+ # text
+
+ fg[NORMAL] = { 0.5, 0.5, 0.5 } # used for inactive
+ fg[ACTIVE] = { 0, 0, 0 } # used for active
+}
+
+style "inspector_redirect_list_display" = "redirect_list_display"
+{
+ base[SELECTED] = { 0.3, 0.3, 0.3 }
+}
+
+# MixerPanZone:
+#
+# the NORMAL fg color is used for the pan puck
+# the ACTIVE fg color is used for the speaker boxes
+
+style "pan_zone" = "default_base"
+{
+ fg[NORMAL] = { 0.34, 0.95, 0.92 }
+ fg[ACTIVE] = { 0.95, 0.48, 0.11 }
+}
+
+style "paler_red_when_active" = "medium_text"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.31, 0.31, 0.31 }
+ bg[PRELIGHT] = { 0.31, 0.31, 0.31 }
+
+ fg[ACTIVE] = { 0.36, 0.46, 0.28 }
+ bg[ACTIVE] = { 1.00, 0.59, 0.59}
+}
+
+style "peak_display_peaked_entry" = "small_text"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = {0.9, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.9, 0.0, 0.0 }
+ bg[PRELIGHT] = { 0.9, 0.0, 0.0 }
+ bg[INSENSITIVE] = { 0.9, 0.0, 0.0 }
+ bg[SELECTED] = { 0.9, 0.0, 0.0 }
+ base[NORMAL] = { 0.9, 0.0, 0.0 }
+ base[ACTIVE] = { 0.9, 0.0, 0.0 }
+ base[PRELIGHT] = { 0.9, 0.0, 0.0 }
+ base[INSENSITIVE] = { 0.9, 0.0, 0.0 }
+ base[SELECTED] = { 0.9, 0.0, 0.0 }
+}
+
+style "selected_strip_frame"
+{
+ fg[NORMAL] = { 0.74, 0.42, 0.47 }
+ bg[NORMAL] = { 0.79, 0.28, 0.18 }
+}
+
+style "flashing_alert" = "very_small_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+}
+
+style "selected_io_selector_port_list" = "medium_bold_text"
+{
+
+ GtkTreeView::even-row-color = { 0.70, 0.70, 0.70 }
+ GtkTreeView::odd-row-color = { 0.70, 0.70, 0.70 }
+
+# fg is used to color the fg (text) of the column header button
+
+ fg[NORMAL] = { 0.30, 0.30, 0.35 }
+ fg[SELECTED] = { 0.30, 0.30, 0.35 }
+ fg[ACTIVE] = { 0.30, 0.30, 0.35 }
+ fg[PRELIGHT] = { 0.30, 0.30, 0.35 }
+ fg[INSENSITIVE] = { 0.30, 0.30, 0.35 }
+
+# bg is used used to color the background of the column header button
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+
+# text is used to color the treeview row text
+
+ text[NORMAL] = { 0.30, 0.30, 0.35 }
+ text[SELECTED] = { 0.30, 0.30, 0.35 }
+
+# base is used to color a treeview with no rows
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[PRELIGHT] = { 0.70, 0.70, 0.70 }
+ base[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+
+}
+
+style "io_selector_port_list" = "medium_text"
+{
+ GtkTreeView::even-row-color = { 0.70, 0.70, 0.70 }
+ GtkTreeView::odd-row-color = { 0.70, 0.70, 0.70 }
+# fg is used to color the fg (text) of the column header button
+
+ fg[NORMAL] = { 0.30, 0.30, 0.35 }
+ fg[SELECTED] = { 0.30, 0.30, 0.35 }
+ fg[ACTIVE] = { 0.30, 0.30, 0.35 }
+ fg[PRELIGHT] = { 0.30, 0.30, 0.35 }
+ fg[INSENSITIVE] = { 0.30, 0.30, 0.35 }
+
+# bg is used used to color the background of the column header button
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+
+# text is used to color the treeview row text
+
+ text[NORMAL] = { 0.30, 0.30, 0.35 }
+ text[SELECTED] = { 0.30, 0.30, 0.35 }
+
+# base is used to color a treeview with no rows
+
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+ base[ACTIVE] = { 0.20, 0.20, 0.25 }
+ base[PRELIGHT] = { 0.20, 0.20, 0.25 }
+ base[INSENSITIVE] = { 0.20, 0.20, 0.25 }
+ base[SELECTED] = { 0.20, 0.20, 0.25 }
+}
+
+style "io_selector_notebook" = "default_base"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ font_name ="%FONT_BOLD_NORMAL%"
+}
+
+style "tearoff_arrow" = "medium_bold_entry"
+{
+ fg[NORMAL] = { 0.30, 0.30, 0.30 }
+ fg[PRELIGHT] = { 0.30, 0.30, 0.30 }
+ bg[NORMAL] = { 0.30, 0.30, 0.30 }
+ bg[PRELIGHT] = { 0.30, 0.30, 0.30 }
+}
+
+style "location_row_button" = "default_button"
+{
+ font_name = "%FONT_NORMAL%"
+}
+
+style "location_rows_clock" = "default_clock_display"
+{
+ font_name = "%FONT_BIG%"
+}
+
+style "pan_slider"
+{
+ font_name = "%FONT_NORMAL%"
+
+ fg[NORMAL] = { 0.22, 0.73, 0.22 }
+ fg[ACTIVE] = { 0.22, 0.73, 0.22 }
+ fg[INSENSITIVE] = {0.22, 0.53, 0.22 }
+ fg[SELECTED] = { 0.67, 0.23, 0.22 }
+ fg[PRELIGHT] = { 0.67, 0.23, 0.22 }
+
+ bg[NORMAL] = { 0.05, 0.05, 0.05 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[INSENSITIVE] = {0.12, 0.19, 0.25 }
+ bg[SELECTED] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+
+ text[NORMAL] = { 0.70, 0.70, 0.70 }
+ text[ACTIVE] = { 0.70, 0.70, 0.70 }
+ text[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ text[SELECTED] = { 0.70, 0.70, 0.70 }
+ text[PRELIGHT] = { 0.70, 0.70, 0.70 }
+
+ # used to draw the triangular indicators
+
+ base[NORMAL] = { 0.80, 0.80, 0.80 }
+ base[ACTIVE] = { 0.80, 0.80, 0.80 }
+ base[INSENSITIVE] = {0.6, 0.6, 0.6 }
+ base[SELECTED] = { 0.80, 0.80, 0.80 }
+ base[PRELIGHT] = { 0.80, 0.80, 0.80 }
+
+}
+
+style "ardour_button" ="default_button"
+{
+ xthickness = 1
+ ythickness = 1
+}
+
+#---------------------------------------------------------------
+
+class "GtkWidget" style:highest "default_base"
+class "GtkScrollbar" style:highest "ardour_adjusters"
+class "GtkLabel" style:highest "default_generic"
+class "GtkButton" style:highest "ardour_button"
+class "GtkArrow" style:highest "tearoff_arrow"
+class "GtkProgressBar" style:highest "ardour_progressbars"
+
+widget "*FirstActionMessage" style:highest "first_action_message"
+widget "*VerboseCanvasCursor" style:highest "verbose_canvas_cursor"
+widget "*MarkerText" style:highest "marker_text"
+widget "*TimeAxisViewItemName*" style:highest "time_axis_view_item_name"
+#widget "*ExportProgress" style:highest "default_generic"
+widget "*ExportFileLabel" style:highest "small_bold_text"
+widget "*ExportFormatLabel" style:highest "medium_bold_text"
+widget "*ExportHeader" style:highest "small_bold_text"
+widget "*ExportFileDisplay" style:highest "medium_entry"
+widget "*ExportFormatDisplay" style:highest "medium_entry"
+widget "*ExportCheckbox" style:highest "small_entry"
+widget "*ExportTrackSelector*" style:highest "medium_entry_noselection_bg"
+widget "*EditModeSelector" style:highest "medium_bold_entry"
+widget "*SnapTypeSelector" style:highest "medium_bold_entry"
+widget "*SnapModeSelector" style:highest "medium_bold_entry"
+widget "*ZoomFocusSelector" style:highest "medium_bold_entry"
+widget "*ArdourContextMenu*" style:highest "default_menu"
+widget "*EditGroupTitleButton*" style:highest "default_button"
+widget "*MixerGroupTitleButton*" style:highest "default_button"
+widget "*ErrorLogCloseButton" style:highest "default_button"
+widget "*EditorGTKButton*" style:highest "default_button"
+widget "*ToolbarButton" style:highest "default_button"
+widget "*ToolbarButton*" style:highest "default_button"
+widget "*CrossfadeEditButton" style:highest "default_button"
+widget "*CrossfadeEditButton*" style:highest "default_button"
+widget "*TrackHistoryButton*" style:highest "default_button"
+widget "*TrackSizeButton*" style:highest "default_button"
+widget "*TrackPlaylistButton*" style:highest "default_button"
+widget "*TrackAutomationButton*" style:highest "default_button"
+widget "*TrackGroupButton*" style:highest "default_button"
+widget "*TrackMixButton*" style:highest "default_button"
+widget "*TrackVisualButton*" style:highest "default_button"
+widget "*TrackRemoveButton*" style:highest "default_button"
+widget "*BaseButton" style:highest "default_button"
+widget "*TakeButtonLabel" style:highest "default_generic"
+widget "*MixerWidthButton" style:highest "default_button"
+widget "*MixerHideButton" style:highest "default_button"
+widget "*MixerSendButton" style:highest "default_button"
+widget "*MixerSendButtonLabel" style:highest "default_button"
+widget "*MixerSendSwitch" style:highest "default_button"
+widget "*MixerInsertButton" style:highest "default_button"
+widget "*MixerInsertButtonLabel" style:highest "default_button"
+widget "*MixerInsertSwitch" style:highest "default_button"
+widget "*MixerMonitorInputButton*" style:highest "very_small_button"
+widget "*MixerMonitorInputButton.*" style:highest "very_small_button"
+widget "*MixerIOButton" style:highest "very_small_button"
+widget "*MixerIOButtonLabel" style:highest "very_small_button"
+widget "*AddRouteDialogSpinner" style:highest "ardour_adjusters"
+widget "*AddRouteDialogRadioButton*" style:highest "preferences"
+widget "*OptionsNotebook" style:highest "preferences"
+widget "*OptionEditorToggleButton*" style:highest "preferences"
+widget "*OptionsLabel" style:highest "preferences"
+widget "*OptionEditorAuditionerLabel" style:highest "preferences"
+widget "*OptionsEntry" style:highest "option_entry"
+widget "*InspectorNotebook" style:highest "preferences"
+widget "*NewSessionDialog" style:highest "preferences"
+widget "*NewSessionDialogButton*" style:highest "preferences"
+widget "*MixerSendSwitch*" style:highest "very_small_red_active_and_selected_button"
+widget "*OptionEditorToggleButton" style:highest "small_red_active_and_selected_button"
+widget "*NewSessionDialogButton" style:highest "small_red_active_and_selected_button"
+widget "*RecordEnableButton" style:highest "track_rec_enable_button"
+widget "*RecordEnableButton-active" style:highest "track_rec_enable_button_active"
+widget "*RecordEnableButton-alternate" style:highest "track_rec_enable_button_alternate"
+widget "*MixerRecordEnableButton" style:highest "mixer_track_rec_enable_button"
+widget "*MixerRecordEnableButton-active" style:highest "mixer_track_rec_enable_button_active"
+widget "*MixerRecordEnableButton-alternate" style:highest "mixer_track_rec_enable_button_alternate"
+widget "*MuteButton" style:highest "mute_button"
+widget "*MuteButton-alternate" style:highest "mute_button_alternate"
+widget "*MuteButton-active" style:highest "mute_button_active"
+widget "*MixerMuteButton" style:highest "mixer_mute_button"
+widget "*MixerMuteButton-alternate" style:highest "mixer_mute_button_alternate"
+widget "*MixerMuteButton-active" style:highest "mixer_mute_button_active"
+widget "*SoloButton" style:highest "solo_button"
+widget "*SoloButton-alternate" style:highest "solo_button_alternate"
+widget "*SoloButton-active" style:highest "solo_button_active"
+widget "*MixerSoloButton" style:highest "mixer_solo_button"
+widget "*MixerSoloButton-alternate" style:highest "mixer_solo_button_alternate"
+widget "*MixerSoloButton-active" style:highest "mixer_solo_button_active"
+widget "*TrackLoopButton*" style:highest "track_loop_button"
+widget "*PanAutomationLineSelector*" style:highest "multiline_combo"
+widget "*EditorTimeButton*" style:highest "time_button"
+widget "*MixerPhaseInvertButton*" style:highest "very_small_button"
+widget "*MixerPhaseInvertButton.*" style:highest "very_small_button"
+widget "*MixerAutomationRecordingButton*" style:highest "very_small_button"
+widget "*MixerAutomationRecordingButton.*" style:highest "very_small_button"
+widget "*MixerAutomationModeButton*" style:highest "very_small_button"
+widget "*MixerAutomationModeButton.*" style:highest "very_small_button"
+widget "*MixerAutomationPlaybackButton*" style:highest "very_small_button"
+widget "*MixerAutomationPlaybackButton.*" style:highest "very_small_button"
+widget "*MixerNameButton" style:highest "very_small_button"
+widget "*MixerNameButtonLabel" style:highest "very_small_button"
+widget "*MixerGroupButton" style:highest "very_small_button"
+widget "*MixerGroupButtonLabel" style:highest "very_small_button"
+widget "*MixerCommentButton" style:highest "very_small_button"
+widget "*MixerCommentButton*" style:highest "very_small_button"
+widget "*EditGroupButton" style:highest "very_small_button"
+widget "*EditGroupButtonLabel" style:highest "very_small_button"
+widget "*TransportButton" style:highest "transport_rec_button"
+widget "*TransportButton-active" style:highest "transport_button_active"
+widget "*ShuttleButton" style:highest "transport_button"
+widget "*ShuttleButton*" style:highest "transport_button"
+widget "*ShuttleDisplay" style:highest "transport_button"
+widget "*ShuttleDisplay*" style:highest "transport_button"
+widget "*ShuttleControl" style:highest "shuttle_control"
+widget "*TransportRecButton" style:highest "transport_rec_button"
+widget "*TransportRecButton*" style:highest "transport_rec_button"
+widget "*TransportRecButton-active" style:highest "transport_rec_button_active"
+widget "*TransportRecButton-active*" style:highest "transport_rec_button_active"
+widget "*TransportRecButton-alternate" style:highest "transport_rec_button_alternate"
+widget "*TransportRecButton-alternate*" style:highest "transport_rec_button_alternate"
+widget "*TransportRecButton*" style:highest "transport_rec_button"
+widget "*RecordingXrunWarningWindow" style:highest "xrun_warn"
+widget "*RecordingXrunWarningWindow*" style:highest "xrun_warn"
+/*widget "*MainMenuBar" style:highest "menu_bar_base"*/
+widget "*ErrorMessage" style:highest "error_message"
+widget "*FatalMessage" style:highest "fatal_message"
+widget "*InfoMessage" style:highest "info_message"
+widget "*WarningMessage" style:highest "warning_message"
+widget "*BigClockNonRecording" style:highest "non_recording_big_clock_display"
+widget "*BigClockRecording" style:highest "recording_big_clock_display"
+widget "*TransportClockDisplay" style:highest "transport_clock_display"
+widget "*SecondaryClockDisplay" style:highest "transport_clock_display"
+widget "*TransportClockDisplayDelta" style:highest "transport_clock_display_delta"
+widget "*SecondaryClockDisplayDelta" style:highest "transport_clock_display_delta"
+widget "*AudioClockFramesUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockFramesLowerInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockSMPTEUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockSMPTELowerInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockBBTUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockBBTLowerInfo" style:highest "tempo_meter_clock_display"
+widget "*SelectionStartClock" style:highest "default_clock_display"
+widget "*SelectionEndClock" style:highest "default_clock_display"
+widget "*EditPointClock" style:highest "default_clock_display"
+widget "*PreRollClock" style:highest "default_clock_display"
+widget "*PostRollClock" style:highest "default_clock_display"
+widget "*NudgeClock" style:highest "default_clock_display"
+widget "*InsertTimeClock" style:highest "default_clock_display"
+widget "*ZoomRangeClock" style:highest "default_clock_display"
+widget "*SMPTEOffsetClock" style:highest "default_clock_display"
+widget "*TransportLabel" style:highest "small_bold_text"
+widget "*TakeLabel" style:highest "small_bold_text"
+widget "*LocationLabel" style:highest "small_bold_text"
+widget "*WipeLabel" style:highest "small_bold_text"
+widget "*TakeTagLabel" style:highest "small_bold_text"
+widget "*ToolBarLabel" style:highest "small_bold_text"
+widget "*EditorDisplayLabel" style:highest "small_bold_text"
+widget "*NewSessionLabel" style:highest "large_text"
+widget "*GlobalButtonLabel" style:highest "default_generic"
+widget "*ClickButton" style:highest "medium_entry"
+widget "*RegionNameDisplay" style:highest "medium_entry"
+widget "*PluginDisplay" style:highest "medium_entry"
+widget "*SelectionDisplay" style:highest "medium_entry"
+widget "*HistorySelector" style:highest "medium_entry"
+widget "*LocationSelector" style:highest "medium_entry"
+widget "*TakeSelector" style:highest "medium_entry"
+widget "*RegionSelector" style:highest "medium_entry"
+widget "*SMPTERuler" style:highest "editor_time_ruler"
+widget "*BBTRuler" style:highest "editor_time_ruler"
+widget "*FramesRuler" style:highest "editor_time_ruler"
+widget "*MinSecRuler" style:highest "editor_time_ruler"
+widget "*BaseFrame" style:highest "base_frame"
+
+widget "*AudioTrackStripBase" style:highest "audio_track_base"
+widget "*AudioBusStripBase" style:highest "audio_bus_base"
+widget "*MidiTrackStripBase" style:highest "midi_track_base"
+widget "*AudioTrackStripBaseInactive" style:highest "track_controls_inactive"
+widget "*AudioBusStripBaseInactive" style:highest "track_controls_inactive"
+widget "*MidiTrackStripBaseInactive" style:highest "track_controls_inactive"
+widget "*FaderMetricsStrip" style:highest "audio_track_metrics"
+widget "*AudioTrackMetrics" style:highest "audio_track_metrics"
+widget "*AudioBusMetrics" style:highest "audio_bus_metrics"
+widget "*AudioTrackMetricsInactive" style:highest "audio_track_metrics_inactive"
+widget "*AudioBusMetricsInactive" style:highest "audio_bus_metrics_inactive"
+
+widget "*TimeAxisViewControlsBaseUnselected" style:highest "audio_track_base"
+widget "*AudioTrackControlsBaseUnselected" style:highest "audio_track_base"
+widget "*MidiTrackControlsBaseUnselected" style:highest "midi_track_base"
+widget "*AudioTrackFader" style:highest "gain_fader"
+
+widget "*BusControlsBaseUnselected" style:highest "audio_bus_base"
+widget "*AudioBusFader" style:highest "gain_fader"
+widget "*TrackSeparator" style:highest "track_separator"
+widget "*TrackEditIndicator0*" style:highest "edit_group_0"
+widget "*TrackEditIndicator1*" style:highest "edit_group_1"
+widget "*TrackEditIndicator2*" style:highest "edit_group_2"
+widget "*TrackEditIndicator3*" style:highest "edit_group_3"
+widget "*TrackEditIndicator4*" style:highest "edit_group_3"
+widget "*TrackEditIndicator5*" style:highest "edit_group_3"
+widget "*TrackEditIndicator6*" style:highest "edit_group_3"
+widget "*TrackEditIndicator7*" style:highest "edit_group_3"
+widget "*EditorTrackNameDisplay" style:highest "track_name_display"
+widget "*EditorTrackNameDisplay*" style:highest "track_name_display"
+widget "*EditorActiveTrackNameDisplay" style:highest "active_track_name_display"
+widget "*EditorActiveTrackNameDisplay*" style:highest "active_track_name_display"
+widget "*CrossfadeEditAuditionButton" style:highest "red_when_active"
+widget "*CrossfadeEditAuditionButton*" style:highest "red_when_active"
+widget "*CrossfadeEditCurveButton" style:highest "red_when_active"
+widget "*CrossfadeEditCurveButton*" style:highest "red_when_active"
+widget "*CrossfadeEditLabel" style:highest "medium_text"
+widget "*CrossfadeEditFrame" style:highest "base_frame"
+widget "*MouseModeButton" style:highest "default_button"
+widget "*MouseModeButton*" style:highest "default_button"
+widget "*EditorMainCanvas" style:highest "main_canvas_area"
+widget "*AudioTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*BusControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*AutomationTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*AutomationTrackName" style:highest "automation_track_name"
+widget "*AudioTrackControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*BusControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*AutomationTrackControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*AudioTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*MidiTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*BusControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*AutomationTrackControlsBase" style:highest "automation_track_controls_base"
+widget "*AutomationTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+/*widget "*EditorMenuBar*" style:highest "black_mackie_menu_bar"
+widget "*MainMenuBar*" style:highest "black_mackie_menu_bar"
+*/
+widget "*ZoomClickBox" style:highest "medium_bold_entry"
+widget "*PluginParameterLabel" style:highest "medium_text"
+widget "*PluginNameInfo" style:highest "plugin_name_text"
+widget "*PluginMakerInfo" style:highest "plugin_maker_text"
+widget "*PluginParameterInfo" style:highest "medium_text"
+widget "*MotionControllerValue" style:highest "medium_entry"
+widget "*ParameterValueDisplay" style:highest "medium_bold_entry"
+widget "*PluginUIClickBox" style:highest "medium_bold_entry"
+widget "*PluginUIClickBox*" style:highest "medium_bold_entry"
+widget "*PluginSlider" style:highest "plugin_slider"
+widget "*RedirectSelector" style:highest "redirect_list_display"
+widget "*RedirectSelector.*" style:highest "redirect_list_display"
+widget "*EditGroupDisplay" style:highest "treeview_display"
+widget "*TrackListDisplay" style:highest "treeview_display"
+widget "*RegionListDisplay" style:highest "treeview_display"
+widget "*NamedSelectionDisplay" style:highest "treeview_display"
+widget "*SnapshotDisplay" style:highest "treeview_display"
+widget "*MixerTrackCommentArea" style:highest "option_entry"
+widget "*MixerPanZone" style:highest "pan_zone"
+widget "*MixerTrackDisplayList" style:highest "treeview_display"
+widget "*MixerSnapshotDisplayList" style:highest "treeview_display"
+widget "*MixerAuxDisplayList" style:highest "treeview_display"
+widget "*MixerGroupList" style:highest "treeview_display"
+widget "*RegionEditorLabel" style:highest "medium_text"
+widget "*RegionEditorSmallLabel" style:highest "small_text"
+widget "*RegionEditorEntry" style:highest "medium_entry"
+widget "*RegionEditorClock" style:highest "default_clock_display"
+widget "*RegionEditorToggleButton" style:highest "paler_red_when_active"
+widget "*RegionEditorToggleButton*" style:highest "paler_red_when_active"
+widget "*MixerStripSpeedBase" style:highest "small_entry"
+widget "*MixerStripSpeedBase*" style:highest "small_entry"
+widget "*MixerStripSpeedBaseNotOne" style:highest "small_red_on_black_entry"
+widget "*MixerStripSpeedBaseNotOne*" style:highest "small_red_on_black_entry"
+widget "*MixerStripGainDisplay" style:highest "small_entry"
+widget "*MixerStripGainDisplay*" style:highest "small_entry"
+widget "*MixerStripGainUnitButton" style:highest "very_small_button"
+widget "*MixerStripGainUnitButton*" style:highest "very_small_button"
+widget "*MixerStripMeterPreButton" style:highest "very_small_button"
+widget "*MixerStripMeterPreButton*" style:highest "very_small_button"
+widget "*MixerStripPeakDisplay*" style:highest "red_active_small_entry"
+widget "*MixerStripPeakDisplayPeak*" style:highest "peak_display_peaked_entry"
+widget "*MixerStripSelectedFrame" style:highest "selected_strip_frame"
+widget "*MixerStripFrame" style:highest "base_frame"
+widget "*HWMonitorButton" style:highest "red_when_active"
+widget "*HWMonitorButton*" style:highest "red_when_active"
+widget "*TransportSoloAlert" style:highest "flashing_alert"
+widget "*TransportSoloAlert.*" style:highest "flashing_alert"
+widget "*TransportAuditioningAlert" style:highest "flashing_alert"
+widget "*TransportAuditioningAlert.*" style:highest "flashing_alert"
+widget "*FadeCurve" style:highest "medium_bold_entry"
+widget "*FadeCurve*" style:highest "medium_bold_entry"
+widget "*IOSelectorButton" style:highest "default_button"
+widget "*IOSelectorButton*" style:highest "default_button"
+widget "*IOSelectorList" style:highest "medium_entry_noselection_fg"
+widget "*IOSelectorPortList" style:highest "io_selector_port_list"
+widget "*IOSelectorPortList.*" style:highest "io_selector_port_list"
+widget "*IOSelectorPortListSelected" style:highest "selected_io_selector_port_list"
+widget "*IOSelectorPortListSelected.*" style:highest "selected_io_selector_port_list"
+widget "*IOSelectorNotebook" style:highest "io_selector_notebook"
+widget "*IOSelectorNotebookTab" style:highest "io_selector_notebook"
+widget "*IOSelectorFrame" style:highest "base_frame"
+widget "*ConnectionEditorButton" style:highest "default_button"
+widget "*ConnectionEditorButton*" style:highest "default_button"
+widget "*ConnectionEditorList" style:highest "medium_entry_noselection_fg"
+widget "*ConnectionEditorConnectionList" style:highest "medium_entry"
+widget "*ConnectionEditorPortList" style:highest "io_selector_port_list"
+widget "*ConnectionEditorPortListSelected" style:highest "selected_io_selector_port_list"
+widget "*ConnectionEditorNotebook" style:highest "io_selector_notebook"
+widget "*ConnectionEditorNotebookTab" style:highest "io_selector_notebook"
+widget "*ConnectionEditorFrame" style:highest "base_frame"
+widget "*RouteParamsListDisplay" style:highest "inspector_track_list_display"
+widget "*RouteParamsPreListDisplay" style:highest "inspector_redirect_list_display"
+widget "*RouteParamsPostListDisplay" style:highest "inspector_redirect_list_display"
+widget "*TearOffArrow" style:highest "tearoff_arrow"
+widget "*RouteParamsTitleButton" style:highest "medium_text"
+widget "*RouteParamsTitleLabel" style:highest "medium_text"
+widget "*PluginAutomateRecordButton" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomateRecordButton*" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomatePlayButton" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomatePlayButton*" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomateButton" style:highest "small_button"
+widget "*PluginAutomateButton*" style:highest "small_button"
+widget "*PluginSaveButton" style:highest "small_button"
+widget "*PluginSaveButton*" style:highest "small_button"
+widget "*PluginLoadButton" style:highest "small_button"
+widget "*PluginLoadButton*" style:highest "small_button"
+
+widget "*MetricDialogFrame" style:highest "base_frame"
+widget "*MetricEntry" style:highest "medium_bold_entry"
+widget "*MetricButton" style:highest "default_button"
+widget "*MetricButton.*" style:highest "default_button"
+widget "*MetricLabel" style:highest "medium_text"
+widget "*TimeStretchButton" style:highest "default_button"
+widget "*TimeStretchButton.*" style:highest "default_button"
+widget "*TimeStretchProgress" style:highest "default_button"
+widget "*ChoiceWindow" style:highest "default_generic"
+widget "*ChoicePrompt" style:highest "default_generic"
+widget "*ChoiceButton" style:highest "default_button"
+widget "*ChoiceButton*" style:highest "default_button"
+widget "*SelectionModeButton" style:highest "default_button"
+widget "*SelectionModeButton*" style:highest "default_button"
+widget "*TrackLabel" style:highest "medium_text"
+widget "*TrackPlugName" style:highest "medium_text"
+widget "*TrackParameterName" style:highest "small_text"
+widget "*AddRouteDialog*" style:highest "medium_text"
+widget "*AddRouteDialog.GtkLabel" style:highest "medium_text"
+widget "*AddRouteDialogChannelChoice" style:highest "medium_bold_entry"
+widget "*AddRouteDialogSpinner" style:highest "medium_bold_entry"
+widget "*AddRouteDialogSpinner*" style:highest "medium_bold_entry"
+widget "*AddRouteDialogRadioButton" style:highest "red_when_active"
+widget "*AddRouteDialogButton" style:highest "default_button"
+widget "*AddRouteDialogNameTemplateEntry" style:highest "medium_bold_entry"
+widget "*NewSessionIOLabel" style:highest "larger_bold_text"
+widget "*NewSessionSR1Label" style:highest "red_medium_text"
+widget "*NewSessionSR2Label" style:highest "medium_text"
+widget "*NewSessionChannelChoice" style:highest "medium_bold_entry"
+widget "*NewSessionMainButton" style:highest "larger_bold_text"
+widget "*NewSessionMainButton*" style:highest "larger_bold_text"
+widget "*NewSessionMainLabel" style:highest "larger_bold_text"
+widget "*LocationEditRowClock" style:highest "location_rows_clock"
+widget "*LocationEditNameLabel" style:highest "medium_text"
+widget "*LocationEditSetButton" style:highest "location_row_button"
+widget "*LocationEditSetButton*" style:highest "location_row_button"
+widget "*LocationEditGoButton" style:highest "location_row_button"
+widget "*LocationEditGoButton*" style:highest "location_row_button"
+widget "*LocationEditCdButton" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditCdButton*" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditHideButton" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditHideButton*" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditNumberLabel" style:highest "small_text"
+widget "*LocationLocEditorFrame" style:highest "base_frame"
+widget "*LocationRangeEditorFrame" style:highest "base_frame"
+widget "*LocationEditNameEntry" style:highest "option_entry"
+widget "*LocationAddLocationButton" style:highest "default_button"
+widget "*LocationAddLocationButton*" style:highest "default_button"
+widget "*LocationAddRangeButton" style:highest "default_button"
+widget "*LocationAddRangeButton*" style:highest "default_button"
+widget "*LocationEditRemoveButton" style:highest "location_row_button"
+widget "*LocationEditRemoveButton*" style:highest "location_row_button"
+widget "*PanSlider" style:highest "pan_slider"
+widget "*PanningLinkButton" style:highest "mixer_red_active_button"
+widget "*PanningLinkButton.*" style:highest "mixer_red_active_button"
+widget "*PanningLinkDirectionButton" style:highest "very_small_button"
+widget "*PanningLinkDirectionButton.*" style:highest "very_small_button"
+widget "*ChannelCountSelector" style:highest "medium_bold_entry"
+widget "*ChannelCountSelector.GtkArrow" style:highest "default_generic"
+widget "*RegionListWholeFile" style:highest "treeview_parent_node"
+widget "*EditorHScrollbar" style:highest "editor_hscrollbar"
+widget "*ResizerHandler" style:highest "resizer_handle"
diff --git a/gtk2_ardour/ardour2_ui_sae.conf b/gtk2_ardour/ardour2_ui_sae.conf
index b9fac38909..277ec44300 100644
--- a/gtk2_ardour/ardour2_ui_sae.conf
+++ b/gtk2_ardour/ardour2_ui_sae.conf
@@ -2,12 +2,13 @@
<Ardour>
<Canvas>
<Option name="active crossfade" value="e8ed3d77"/>
- <Option name="audio bus base" value="dbd1ea68"/>
- <Option name="audio track base" value="c6d3d868"/>
+ <Option name="audio bus base" value="abe1aa68"/>
+ <Option name="audio master bus base" value="ebb1b168"/>
+ <Option name="audio track base" value="c3c3c868"/>
<Option name="automation line" value="44bc59ff"/>
<Option name="automation track fill" value="a0a0ce68"/>
<Option name="automation track outline" value="282828ff"/>
- <Option name="cdmarkerbar" value="9090a3ff"/>
+ <Option name="cdmarkerbar" value="9090a3a0"/>
<Option name="clipped waveform" value="ff0000e5"/>
<Option name="control point fill" value="000000ff"/>
<Option name="control point outline" value="000000ff"/>
@@ -42,13 +43,13 @@
<Option name="location punch" value="7c3a3aff"/>
<Option name="location range" value="497a59ff"/>
<Option name="marker bar separator" value="30303088"/>
- <Option name="markerbar" value="9898a3ff"/>
+ <Option name="markerbar" value="9898a3a0"/>
<Option name="MarkerDragLine" value="004f00f9"/>
<Option name="marker label" value="000000ff"/>
<Option name="MarkerTrack" value="ddddd8ff"/>
<Option name="MeasureLineBar" value="8c8c988c"/>
<Option name="MeasureLineBeat" value="72727266"/>
- <Option name="meterbar" value="666672ff"/>
+ <Option name="meterbar" value="666672a0"/>
<Option name="MeterColorBase" value="0000ffff"/>
<Option name="MeterColorClip" value="ff0000ff"/>
<Option name="MeterColorMid" value="73f9baff"/>
@@ -63,7 +64,7 @@
<Option name="PunchLine" value="a80000ff"/>
<Option name="RangeDragBarRect" value="969696c6"/>
<Option name="RangeDragRect" value="82c696c6"/>
- <Option name="rangemarker bar" value="7f7f8cff"/>
+ <Option name="rangemarker bar" value="7f7f8ca0"/>
<Option name="RecordingRect" value="e5c6c6ff"/>
<Option name="region base" value="99a7b584"/>
<Option name="RubberBandRect" value="c6c6c659"/>
@@ -72,16 +73,19 @@
<Option name="selected region base" value="130505ff"/>
<Option name="selected waveform fill" value="e6e6fac8"/>
<Option name="selected waveform outline" value="1a1a1acc"/>
+ <Option name="recorded region base" value="ad7173ff"/>
+ <Option name="recorded waveform fill" value="74383884"/>
+ <Option name="recorded waveform outline" value="3b0013ff"/>
<Option name="SelectionRect" value="e8f4d377"/>
<Option name="Selection" value="636363b2"/>
- <Option name="tempo bar" value="72727fff"/>
+ <Option name="tempo bar" value="72727fa0"/>
<Option name="TempoMarker" value="f2425bff"/>
<Option name="TimeAxisFrame" value="000000cb"/>
<Option name="time-stretch-fill" value="e2b5b596"/>
<Option name="time-stretch-outline" value="63636396"/>
<Option name="TransportDragRect" value="969696c6"/>
<Option name="TransportLoopRect" value="1e7728f9"/>
- <Option name="TransportMarkerBar" value="8c8c96ff"/>
+ <Option name="TransportMarkerBar" value="8c8c96a0"/>
<Option name="TransportPunchRect" value="6d2828e5"/>
<Option name="TrimHandleLocked" value="ea0f0f28"/>
<Option name="TrimHandle" value="1900ff44"/>
diff --git a/gtk2_ardour/ardour3_ui_dark_sae.rc.in b/gtk2_ardour/ardour3_ui_dark_sae.rc.in
new file mode 100644
index 0000000000..1b0635a1b9
--- /dev/null
+++ b/gtk2_ardour/ardour3_ui_dark_sae.rc.in
@@ -0,0 +1,1587 @@
+#
+# This is the GTK style file for Ardour
+#
+
+style "very_small_text"
+{
+ font_name = "%FONT_SMALLER%"
+}
+
+style "small_text"
+{
+ font_name = "%FONT_SMALL%"
+}
+
+style "small_bold_text"
+{
+ font_name = "%FONT_BOLD_SMALL%"
+}
+
+style "medium_bold_text"
+{
+ font_name = "%FONT_BOLD_NORMAL%"
+}
+
+style "medium_text"
+{
+ font_name = "%FONT_NORMAL%"
+}
+
+style "red_medium_text" = "medium_text"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+}
+
+style "large_text"
+{
+ font_name = "%FONT_LARGE%"
+}
+
+style "larger_bold_text"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+}
+
+style "plugin_name_text"
+{
+ font_name = "%FONT_BOLD_LARGER%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+}
+
+style "plugin_maker_text"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+}
+
+style "automation_track_name"
+{
+ font_name = "%FONT_ITALIC_NORMAL%"
+}
+
+style "first_action_message"
+{
+ font_name = "%FONT_HUGER%"
+}
+
+style "verbose_canvas_cursor"
+{
+ font_name = "%FONT_BOLD_LARGER%"
+}
+
+style "marker_text"
+{
+ font_name = "%FONT_SMALLER%"
+}
+
+style "time_axis_view_item_name"
+{
+ font_name = "%FONT_SMALLER%"
+}
+
+style "default_base" = "medium_text"
+{
+
+ GtkWidget::cursor_color = {1.0, 1.0, 1.0 }
+ GtkButton::default_border = { 0, 0, 0, 0 }
+ GtkButton::default_outside_border = { 0, 0, 0, 0 }
+ GtkButton::button_relief = GTK_RELIEF_NONE
+ GtkTreeView::vertical-padding = 0
+ GtkTreeView::horizontal-padding = 0
+ GtkTreeView::even-row-color = { 0, 0, 0 }
+ GtkTreeView::odd-row-color = { 0.06, 0.06, 0.10 }
+
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ fg[PRELIGHT] = { 1.0, 1.0, 1.0 }
+ fg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ fg[SELECTED] = { 0.80, 0.80, 0.80 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+ bg[ACTIVE] = { 0.35, 0.35, 0.40 }
+ bg[PRELIGHT] = "#565690"
+ bg[INSENSITIVE] = { 0.10, 0.10, 0.10 }
+ bg[SELECTED] = { 0, 0.40, 0.60 }
+
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.80, 0.80, 0.80 }
+ text[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ text[INSENSITIVE] = { 0.80, 0.80, 0.80}
+ text[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ base[ACTIVE] = "#272a2f"
+ base[NORMAL] = "#1a1e20"
+ base[PRELIGHT] = { 0.20, 0.20, 0.20 }
+ base[INSENSITIVE] = "#4c5159"
+ base[SELECTED] = { 0.25, 0.25, 0.25 }
+
+ engine "clearlooks"
+ {
+ menubarstyle = 0 # 0 = flat, 1 = sunken, 2 = flat gradient
+ }
+}
+
+style "base_frame"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+}
+
+style "transport_base" = "medium_bold_text"
+{
+ bg[NORMAL] = { 0.10, 0.10, 0.10 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+ bg[INSENSITIVE] = { 0, 0, 0 }
+ bg[SELECTED] = { 0, 0, 0 }
+}
+/*
+style "black_mackie_menu_bar"
+{
+ font_name = "%FONT_BOLD_NORMAL%"
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ bg[NORMAL] = { 0, 0, 0 }
+}
+*/
+
+style "default_button"
+{
+ font_name = "%FONT_SMALL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.15, 0.15, 0.20 }
+ bg[INSENSITIVE] = { 0.15, 0.15, 0.20 }
+ bg[SELECTED] = { 0.15, 0.15, 0.20 }
+}
+
+style "default_menu"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.15, 0.15, 0.20 }
+ bg[INSENSITIVE] = { 0.15, 0.15, 0.20 }
+ bg[SELECTED] = { 0.15, 0.15, 0.20 }
+}
+
+style "default_generic"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.15, 0.15, 0.20 }
+ bg[INSENSITIVE] = { 0.15, 0.15, 0.20 }
+ bg[SELECTED] = { 0.15, 0.15, 0.20 }
+}
+
+style "very_small_button" = "default_button"
+{
+ font_name = "%FONT_SMALLER%"
+ ythickness = 0
+ xthickness = 0
+}
+
+style "small_button" = "default_button"
+{
+}
+
+style "very_small_red_active_and_selected_button" = "very_small_button"
+{
+ bg[ACTIVE] = { 1.0, 0, 0}
+ bg[SELECTED] = { 1.0, 0, 0}
+}
+
+style "small_red_active_and_selected_button" = "small_button"
+{
+ fg[ACTIVE] = { 0, 0, 0 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+ bg[SELECTED] = { 1.0, 0, 0}
+}
+
+style "gain_fader"
+{
+ bg[NORMAL] = { 0.269, 0.269, 0.300}
+ bg[ACTIVE] = { 0.152, 0.152, 0.168 }
+}
+
+
+style "track_rec_enable_button" = "small_button"
+{
+}
+
+style "track_rec_enable_button_active" = "small_button"
+{
+ fg[SELECTED] = { 0.0, 0.0, 0.0 }
+ fg[ACTIVE] = { 0.0, 0.0, 0.0 }
+ fg[PRELIGHT] = { 0.0, 0.0, 0.0 }
+ fg[NORMAL] = { 0.0, 0.0, 0.0 }
+
+ bg[NORMAL] = { 1.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ bg[SELECTED] = { 1.0, 0.0, 0.0 }
+ bg[PRELIGHT] = { 1.0, 0.0, 0.0 }
+}
+
+style "track_rec_enable_button_alternate" = "small_button"
+{
+ fg[SELECTED] = { 0.0, 0.0, 0.0 }
+ fg[ACTIVE] = { 0.0, 0.0, 0.0 }
+ fg[PRELIGHT] = { 0.0, 0.0, 0.0 }
+ fg[NORMAL] = { 0.0, 0.0, 0.0 }
+
+ bg[NORMAL] = { 0.91, 0.68, 0.68}
+ bg[ACTIVE] = { 0.91, 0.68, 0.68}
+ bg[SELECTED] = { 0.91, 0.68, 0.68}
+ bg[PRELIGHT] = { 0.91, 0.68, 0.68}
+}
+
+style "mixer_track_rec_enable_button" = "track_rec_enable_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_track_rec_enable_button_alternate" = "track_rec_enable_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_track_rec_enable_button_active" = "track_rec_enable_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "solo_button" = "small_button"
+{
+}
+
+style "solo_button_alternate" = "small_button"
+{
+ bg[NORMAL] = { 0.69, 0.69, 0.69 } # solo-safe
+ bg[ACTIVE] = { 0.69, 0.69, 0.69 } # solo-safe
+ bg[SELECTED] = { 0.69, 0.69, 0.69 } # solo-safe
+ bg[PRELIGHT] = { 0.69, 0.69, 0.69 } # solo-safe
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+
+style "solo_button_active" = "small_button"
+{
+ bg[NORMAL] = { 0.66, 0.97, 0.19 } # solo
+ bg[ACTIVE] = { 0.66, 0.97, 0.19 } # solo
+ bg[SELECTED] = { 0.66, 0.97, 0.19 } # solo
+ bg[PRELIGHT] = { 0.66, 0.97, 0.19 } # solo
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mixer_solo_button" = "solo_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_solo_button_alternate" = "solo_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+style "mixer_solo_button_active" = "solo_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mute_button" = "small_button"
+{
+}
+
+style "mute_button_alternate" = "small_button"
+{
+ bg[ACTIVE] = { 1.0, 0.98, 0.53 }
+ bg[NORMAL] = { 1.0, 0.98, 0.53 }
+ bg[SELECTED] = { 1.0, 0.98, 0.53 }
+ bg[PRELIGHT] = { 1.0, 0.98, 0.53 }
+
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mute_button_active" = "small_button"
+{
+ bg[NORMAL] = { 0.90, 0.89, 0.73 }
+ bg[ACTIVE] = { 0.90, 0.89, 0.73 }
+ bg[PRELIGHT] = { 0.90, 0.89, 0.73 }
+ bg[SELECTED] = { 0.90, 0.89, 0.73 }
+
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mixer_mute_button_alternate" = "mute_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_mute_button_active" = "mute_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "multiline_combo" = "small_button"
+{
+ font_name = "%FONT_NORMAL%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_mute_button" = "mute_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "track_loop_button" = "small_button"
+{
+ bg[ACTIVE] = { 1.0, 0.98, 0.53 }
+ bg[PRELIGHT] = { 1.0, 0.98, 0.53 }
+
+}
+
+style "mixer_red_active_button" = "very_small_button"
+{
+ fg[ACTIVE] = { 0, 1.0, 1.0 }
+ bg[ACTIVE] = { 0.7, 0, 0 }
+
+ base[INSENSITIVE] = { 0.16, 0.16, 0.21 }
+ bg[INSENSITIVE] = { 0.16, 0.16, 0.21 }
+}
+
+style "time_button" = "default_button"
+{
+ font_name = "%FONT_SMALL%"
+}
+
+style "transport_button"
+{
+}
+
+style "transport_button_active"
+{
+ bg[NORMAL] = { 0.50, 1.0, 0.50 }
+ bg[ACTIVE] = { 0.50, 1.0, 0.50 }
+ bg[SELECTED] = { 0.50, 1.0, 0.50 }
+ bg[PRELIGHT] = { 0.50, 1.0, 0.50 }
+
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "transport_rec_button"
+{
+}
+
+style "transport_rec_button_active"
+{
+ bg[ACTIVE] = { 1.0, 0, 0 }
+ bg[NORMAL] = { 1.0, 0, 0 }
+ bg[SELECTED] = { 1.0, 0, 0 }
+ bg[PRELIGHT] = { 1.0, 0, 0 }
+}
+
+style "transport_rec_button_alternate"
+{
+ bg[PRELIGHT] = { 0.91, 0.68, 0.68 }
+ bg[NORMAL] = { 0.91, 0.68, 0.68 }
+ bg[SELECTED] = { 0.91, 0.68, 0.68 }
+ bg[ACTIVE] = { 0.91, 0.68, 0.68 }
+}
+
+style "shuttle_control" = "very_small_text"
+{
+ fg[NORMAL] = { 0.85, 0.92, 0.98 }
+ fg[ACTIVE] = { 0.85, 0.92, 0.98 }
+ fg[PRELIGHT] = { 0.85, 0.92, 0.98 }
+ fg[SELECTED] = { 0.85, 0.92, 0.98 }
+ fg[INSENSITIVE] = { 0.85, 0.92, 0.98 }
+
+ bg[NORMAL] = { 0.26, 0.26, 0.31 }
+ bg[PRELIGHT] = { 0.26, 0.26, 0.31 }
+ bg[INSENSITIVE] = { 0.26, 0.26, 0.31 }
+ bg[ACTIVE] = { 0.70, 0.70, 0.70 }
+ bg[SELECTED] = { 1.0, 0.04, 0.04 }
+}
+
+style "ardour_adjusters" = "default_generic"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.60 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.06, 0.06, 0.06 }
+}
+
+style "editor_hscrollbar" = "ardour_adjusters"
+{
+ #
+ # special case: we want this scrollbar to be as tall as the
+ # zoom focus selector combobox. scrollbars don't expand to
+ # fill the space available to them, so we have to explicitly
+ # make it bigger.
+ #
+ GtkRange::slider_width = 27
+ GtkScrollbar::slider_width = 27
+}
+
+style "resizer_handle"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = "#818181"
+}
+
+style "ardour_progressbars" = "default_generic"
+{
+ bg[NORMAL] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0.00, 0.36, 0.40 }
+}
+
+style "preferences" = "default_base"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+}
+
+style "option_entry" = "default_base"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ fg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+
+ base[INSENSITIVE] = { 0.07, 0.07, 0.12 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+ bg[ACTIVE] = { 0.35, 0.35, 0.40 }
+}
+
+style "red_when_active" = "medium_text"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.26, 0.26, 0.31 }
+
+ fg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+}
+
+style "xrun_warn"
+{
+ font_name = "%FONT_BOLD_LARGE%"
+
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ text[NORMAL] = { 1.0, 1.0, 1.0 }
+ text[ACTIVE] = { 1.0, 1.0, 1.0 }
+ base[NORMAL] = { 0.09, 0.48, 0.46 }
+ base[ACTIVE] = { 0.09, 0.48, 0.46 }
+ bg[NORMAL] = { 1.0, 0.48, 0.46 }
+ bg[ACTIVE] = { 0.09, 1.0, 0.46 }
+}
+/*
+style "menu_bar_base" = "default_base"
+{
+ bg[NORMAL] = { 0.2, 0.2, 0.3 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+ bg[INSENSITIVE] = { 0, 0, 0 }
+ bg[SELECTED] = { 0, 0, 0 }
+}
+*/
+style "fatal_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 1.0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "error_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "info_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "warning_message" = "medium_text"
+{
+ fg[ACTIVE] = { 0.30,0.30, 1.0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[NORMAL] = { 0, 0, 0 }
+}
+
+style "medium_entry" = "medium_text"
+{
+ fg[NORMAL] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0.70, 0.70, 0.70 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "medium_entry_noselection_fg" = "medium_entry"
+{
+ fg[SELECTED] = { 0.50, 1.0, 0.50 }
+}
+
+style "medium_entry_noselection_bg" = "medium_entry"
+{
+ bg[SELECTED] = { 1.0, 1.0, 1.0 }
+}
+
+style "medium_bold_entry" = "medium_bold_text"
+{
+ fg[NORMAL] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0.70, 0.70, 0.70 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0, 0, 0 }
+}
+
+style "small_entry" = "small_text"
+{
+ fg[NORMAL] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0, 1.0, 0 }
+ fg[SELECTED] = { 0, 1.0, 0 }
+ text[NORMAL] = { 0.70, 0.70, 0.70 }
+ text[ACTIVE] = { 0, 1.0, 0 }
+ text[SELECTED] = { 0, 1.0, 0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[SELECTED] = { 0.0, 0.0, 0.0 }
+ bg[SELECTED] = { 0.0, 0.0, 0.0 }
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0, 0, 0 }
+}
+
+style "red_active_small_entry" = "small_entry"
+{
+ fg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+}
+
+style "small_bold_entry" = "small_bold_text"
+{
+ fg[NORMAL] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0.70, 0.70, 0.70 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0, 0, 0 }
+}
+
+style "small_red_on_black_entry" = "small_bold_text"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.0, 0.0, 0.0 }
+}
+
+style "non_recording_big_clock_display" = "medium_entry"
+{
+ font_name = "%FONT_MASSIVE%"
+
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ fg[PRELIGHT] = { 1.0, 0, 0.0 }
+ fg[INSENSITIVE] = { 1.0, 0, 0.0 }
+
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.7, 0.0, 0.0 }
+}
+
+style "recording_big_clock_display" = "non_recording_big_clock_display"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+}
+
+style "transport_clock_display"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ fg[PRELIGHT] = { 1.0, 0, 0.0 }
+ fg[INSENSITIVE] = { 1.0, 0, 0.0 }
+
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.0, 0.0, 0.0 }
+}
+
+style "transport_clock_display_delta" = "transport_clock_display"
+{
+ fg[NORMAL] = { 0.30, 0.30, 1.0 }
+}
+
+style "tempo_meter_clock_display"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0.0, 0.48, 1.0 }
+ base[ACTIVE] = { 0.09, 0.98, 0.46 }
+ bg[NORMAL] = { 0.0, 0.48, 1.0 }
+ bg[ACTIVE] = { 0.09, 0.98, 0.46 }
+}
+
+style "default_clock_display" = "medium text"
+{
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ bg[NORMAL] = { 0, 0, 0 }
+ bg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "editor_time_ruler" = "small_text"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.09, 0.09, 0.09 }
+}
+
+style "audio_bus_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+ bg[NORMAL] = { 0.20, 0.20, 0.26 }
+}
+
+style "audio_track_base" = "default_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ bg[NORMAL] = { 0.18, 0.19, 0.22 }
+ bg[ACTIVE] = { 0.20, 0.20, 0.20 }
+ bg[PRELIGHT] = { 0.20, 0.20, 0.20 }
+ bg[INSENSITIVE] = { 0.20, 0.20, 0.20 }
+ bg[SELECTED] = { 0.20, 0.20, 0.20 }
+}
+
+style "midi_bus_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+ #bg[NORMAL] = {0, 0.36, 0.40 }
+ bg[NORMAL] = "#444466"
+}
+
+style "midi_track_base" = "default_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ bg[NORMAL] = { 0.48, 0.30, 0.32 }
+ bg[ACTIVE] = { 0.20, 0.20, 0.20 }
+ bg[PRELIGHT] = { 0.20, 0.20, 0.20 }
+ bg[INSENSITIVE] = { 0.20, 0.20, 0.20 }
+ bg[SELECTED] = { 0.20, 0.20, 0.20 }
+}
+
+style "track_controls_inactive"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.66 }
+ bg[ACTIVE] = { 0.60, 0.60, 0.66 }
+ bg[INSENSITIVE] = { 0.60, 0.60, 0.66 }
+ bg[SELECTED] = { 0.60, 0.60, 0.66 }
+ bg[PRELIGHT] = { 0.60, 0.60, 0.66 }
+
+ #font_name = "sans 18"
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+}
+
+style "audio_track_metrics" = "audio_track_base"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_bus_metrics" = "audio_bus_base"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_track_metrics_inactive" = "track_controls_inactive"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_bus_metrics_inactive" = "track_controls_inactive"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "track_name_display"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[ACTIVE] = { 0.80, 0.80, 0.80 }
+
+ base[NORMAL] = { 0.06, 0.06, 0.06 }
+ base[ACTIVE] = { 0.26, 0.26, 0.26 }
+ bg[NORMAL] = { 0.26, 0.26, 0.26 }
+ bg[ACTIVE] = { 0.26, 0.26, 0.26 }
+}
+
+style "active_track_name_display"
+{
+ font_name = "%FONT_NORMAL%"
+ GtkWidget::cursor_color = {0, 0, 0 }
+ text[NORMAL] = { 0.26, 0.26, 0.26 }
+ base[NORMAL] = { 0.89, 0.89, 0.89 }
+}
+
+style "track_separator"
+{
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+}
+
+#
+# Track edit groups. These styles define
+# the colors that the "edit" button will
+# use as a track is moved from
+# track edit group to track edit group.
+# There are 8 edit groups. Edit group 0
+# is used for tracks that are not editable,
+# so we leave its style to the default.
+#
+
+style "edit_group_0"
+
+{
+ bg[ACTIVE] = { 1.0, 0.65, 0.13 }
+ bg[NORMAL] = { 0.31, 0.31, 0.31 }
+ fg[NORMAL] = { 0.82, 0.91, 0.99 }
+ fg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "edit_group_1"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "edit_group_2"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "edit_group_3"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "treeview_parent_node"
+{
+ # specifies *just* the color used for whole file rows when not selected
+ fg[NORMAL] = { 0.0, 0.6, 0.85 }
+}
+
+style "treeview_display" = "small_bold_text"
+{
+ # expander arrow border and DnD "icon" text
+ fg[NORMAL] = { 0.8, 0.8, 0.8 }
+
+ # background with no rows or no selection, plus
+ # expander arrow core and DnD "icon" background
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+
+ # selected row bg when window does not have focus (including during DnD)
+ base[ACTIVE] = { 0.0, 0.60, 0.60 }
+
+ # selected row bg when window has focus
+ base[SELECTED] = { 0, 0.75, 0.75 }
+
+ # row text when in normal state and not a parent
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+
+ # selected row text with window focus
+ text[SELECTED] = { 0, 1.0, 1.0 }
+
+ # selected row text without window focus (including during DnD)
+ text[ACTIVE] = { 0, 1.0, 1.0 }
+}
+
+style "main_canvas_area"
+{
+ bg[NORMAL] = { 0.30, 0.30, 0.34 }
+ bg[ACTIVE] = { 0.30, 0.30, 0.34 }
+ bg[INSENSITIVE] = { 0.30, 0.30, 0.34 }
+ bg[SELECTED] = { 0.30, 0.30, 0.34 }
+ bg[PRELIGHT] = { 0.30, 0.30, 0.34 }
+}
+
+style "track_controls_inactive"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.66 }
+ bg[ACTIVE] = { 0.60, 0.60, 0.66 }
+ bg[INSENSITIVE] = { 0.60, 0.60, 0.66 }
+ bg[SELECTED] = { 0.60, 0.60, 0.66 }
+ bg[PRELIGHT] = { 0.60, 0.60, 0.66 }
+
+ font_name = "%FONT_LARGE%"
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+}
+
+style "edit_controls_base_selected"
+{
+ bg[NORMAL] = { 0.32, 0.32, 0.54 }
+ bg[ACTIVE] = { 0.32, 0.32, 0.54 }
+ bg[INSENSITIVE] = { 0.32, 0.32, 0.54 }
+ bg[SELECTED] = { 0.32, 0.32, 0.54 }
+ bg[PRELIGHT] = { 0.32, 0.32, 0.54 }
+}
+
+style "automation_track_controls_base"
+{
+ bg[NORMAL] = { 0.22, 0.22, 0.29 }
+ bg[ACTIVE] = { 0.22, 0.22, 0.29 }
+ bg[INSENSITIVE] = { 0.22, 0.22, 0.29 }
+ bg[SELECTED] = { 0.22, 0.22, 0.29 }
+ bg[PRELIGHT] = { 0.22, 0.22, 0.29 }
+}
+
+# Plugin Editors
+style "plugin_slider"
+{
+ font_name ="%FONT_BOLD_BIG%"
+
+ # the slider itself. the inactive part is INSENSITIVE,
+ # the active part is something else.
+
+ fg[NORMAL] = { 0.37, 0.43, 0.52 }
+ fg[ACTIVE] = { 0.37, 0.43, 0.52 }
+ fg[INSENSITIVE] = {0.35, 0.35, 0.40 } # matches default_base
+ fg[SELECTED] = { 0.37, 0.43, 0.52 }
+ fg[PRELIGHT] = { 0.37, 0.43, 0.52 }
+
+ # draws the outer rectangle around the slider
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = {0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+
+ # the numeric display
+
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.80, 0.80, 0.80 }
+ text[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ text[SELECTED] = { 0.80, 0.80, 0.80 }
+ text[PRELIGHT] = { 0.80, 0.80, 0.80 }
+}
+
+style "track_list_display" = "small_bold_text"
+{
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.3, 0.3, 0.3 }
+ text[INSENSITIVE] = { 0, 0, 0 }
+ text[SELECTED] = { 0.8, 0.8, 0.8 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[INSENSITIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0, 0, 0 }
+}
+
+style "inspector_track_list_display" = "track_list_display"
+{
+ text[ACTIVE] = { 0.8, 0.8, 0.8 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0.2, 0.2, 0.2 }
+ base[INSENSITIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0.3, 0.3, 0.4 }
+}
+
+style "redirect_list_display"
+{
+ GtkTreeView::horizontal-separator = 0
+ GtkTreeView::vertical-separator = 0
+
+ font_name = "%FONT_SMALL%"
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.70, 0.70, 0.70 }
+ text[INSENSITIVE] = { 0, 0, 0 }
+ text[SELECTED] = { 0.9, 0.3, 0.3 }
+
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[INSENSITIVE] = { 0, 0, 0 }
+ base[SELECTED] = { 0, 0, 0 }
+
+ # these two are explicitly used by the cell renderer for the
+ # text
+
+ fg[NORMAL] = { 0.5, 0.5, 0.5 } # used for inactive
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 } # used for active
+}
+
+style "inspector_redirect_list_display" = "redirect_list_display"
+{
+ base[SELECTED] = { 0.3, 0.3, 0.3 }
+}
+
+# MixerPanZone:
+#
+# the NORMAL fg color is used for the pan puck
+# the ACTIVE fg color is used for the speaker boxes
+
+style "pan_zone" = "default_base"
+{
+ fg[NORMAL] = { 0.34, 0.95, 0.92 }
+ fg[ACTIVE] = { 0.95, 0.48, 0.11 }
+}
+
+style "paler_red_when_active" = "medium_text"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.31, 0.31, 0.31 }
+ bg[PRELIGHT] = { 0.31, 0.31, 0.31 }
+
+ fg[ACTIVE] = { 0.36, 0.46, 0.28 }
+ bg[ACTIVE] = { 1.00, 0.59, 0.59}
+}
+
+style "peak_display_peaked_entry" = "small_text"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = {0.9, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.9, 0.0, 0.0 }
+ bg[PRELIGHT] = { 0.9, 0.0, 0.0 }
+ bg[INSENSITIVE] = { 0.9, 0.0, 0.0 }
+ bg[SELECTED] = { 0.9, 0.0, 0.0 }
+ base[NORMAL] = { 0.9, 0.0, 0.0 }
+ base[ACTIVE] = { 0.9, 0.0, 0.0 }
+ base[PRELIGHT] = { 0.9, 0.0, 0.0 }
+ base[INSENSITIVE] = { 0.9, 0.0, 0.0 }
+ base[SELECTED] = { 0.9, 0.0, 0.0 }
+}
+
+style "selected_strip_frame"
+{
+ fg[NORMAL] = { 0.74, 0.42, 0.47 }
+ bg[NORMAL] = { 0.79, 0.28, 0.18 }
+}
+
+style "flashing_alert" = "very_small_text"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.26, 0.26, 0.31 }
+
+ fg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+}
+
+style "selected_io_selector_port_list" = "medium_bold_text"
+{
+
+ GtkTreeView::even-row-color = { 0, 0, 0 }
+ GtkTreeView::odd-row-color = { 0, 0, 0 }
+
+# fg is used to color the fg (text) of the column header button
+
+ fg[NORMAL] = { 0.85, 0.85, 0.85 }
+ fg[SELECTED] = { 0.85, 0.85, 0.85 }
+ fg[ACTIVE] = { 0.85, 0.85, 0.85 }
+ fg[PRELIGHT] = { 0.85, 0.85, 0.85 }
+ fg[INSENSITIVE] = { 0.85, 0.85, 0.85 }
+
+# bg is used used to color the background of the column header button
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = { 0.30, 0.30, 0.35 }
+ bg[PRELIGHT] = { 0.30, 0.30, 0.35 }
+ bg[INSENSITIVE] = { 0.30, 0.30, 0.35 }
+ bg[SELECTED] = { 0.30, 0.30, 0.35 }
+
+# text is used to color the treeview row text
+
+ text[NORMAL] = { 0.85, 0.85, 0.85 }
+ text[SELECTED] = { 0.85, 0.85, 0.85 }
+
+# base is used to color a treeview with no rows
+
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+ base[ACTIVE] = { 0.20, 0.20, 0.25 }
+ base[PRELIGHT] = { 0.20, 0.20, 0.25 }
+ base[INSENSITIVE] = { 0.20, 0.20, 0.25 }
+ base[SELECTED] = { 0.20, 0.20, 0.25 }
+
+}
+
+style "io_selector_port_list" = "medium_text"
+{
+ GtkTreeView::even-row-color = { 0.20, 0.20, 0.25 }
+ GtkTreeView::odd-row-color = { 0.20, 0.20, 0.25 }
+# fg is used to color the fg (text) of the column header button
+
+ fg[NORMAL] = { 0.70, 0.70, 0.70 }
+ fg[SELECTED] = { 0.70, 0.70, 0.70 }
+ fg[ACTIVE] = { 0.70, 0.70, 0.70 }
+ fg[PRELIGHT] = { 0.70, 0.70, 0.70 }
+ fg[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+
+# bg is used used to color the background of the column header button
+
+ bg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[ACTIVE] = { 0.30, 0.30, 0.35 }
+ bg[PRELIGHT] = { 0.30, 0.30, 0.35 }
+ bg[INSENSITIVE] = { 0.30, 0.30, 0.35 }
+ bg[SELECTED] = { 0.30, 0.30, 0.35 }
+
+# text is used to color the treeview row text
+
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[SELECTED] = { 0.80, 0.80, 0.80 }
+
+# base is used to color a treeview with no rows
+
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+ base[ACTIVE] = { 0.20, 0.20, 0.25 }
+ base[PRELIGHT] = { 0.20, 0.20, 0.25 }
+ base[INSENSITIVE] = { 0.20, 0.20, 0.25 }
+ base[SELECTED] = { 0.20, 0.20, 0.25 }
+}
+
+style "io_selector_notebook" = "default_base"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ font_name ="%FONT_BOLD_NORMAL%"
+}
+
+style "tearoff_arrow" = "medium_bold_entry"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+}
+
+style "location_row_button" = "default_button"
+{
+ font_name = "%FONT_NORMAL%"
+}
+
+style "location_rows_clock" = "default_clock_display"
+{
+ font_name = "%FONT_BIG%"
+}
+
+style "pan_slider"
+{
+ font_name = "%FONT_NORMAL%"
+
+ fg[NORMAL] = { 0.22, 0.73, 0.22 }
+ fg[ACTIVE] = { 0.22, 0.73, 0.22 }
+ fg[INSENSITIVE] = {0.22, 0.53, 0.22 }
+ fg[SELECTED] = { 0.67, 0.23, 0.22 }
+ fg[PRELIGHT] = { 0.67, 0.23, 0.22 }
+
+ bg[NORMAL] = { 0.05, 0.05, 0.05 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[INSENSITIVE] = {0.12, 0.19, 0.25 }
+ bg[SELECTED] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+
+ text[NORMAL] = { 0.70, 0.70, 0.70 }
+ text[ACTIVE] = { 0.70, 0.70, 0.70 }
+ text[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ text[SELECTED] = { 0.70, 0.70, 0.70 }
+ text[PRELIGHT] = { 0.70, 0.70, 0.70 }
+
+ # used to draw the triangular indicators
+
+ base[NORMAL] = { 0.80, 0.80, 0.80 }
+ base[ACTIVE] = { 0.80, 0.80, 0.80 }
+ base[INSENSITIVE] = {0.6, 0.6, 0.6 }
+ base[SELECTED] = { 0.80, 0.80, 0.80 }
+ base[PRELIGHT] = { 0.80, 0.80, 0.80 }
+
+}
+
+style "ardour_button" ="default_button"
+{
+ xthickness = 1
+ ythickness = 1
+}
+
+#---------------------------------------------------------------
+
+class "GtkWidget" style:highest "default_base"
+class "GtkScrollbar" style:highest "ardour_adjusters"
+class "GtkLabel" style:highest "default_generic"
+class "GtkButton" style:highest "ardour_button"
+class "GtkArrow" style:highest "tearoff_arrow"
+class "GtkProgressBar" style:highest "ardour_progressbars"
+
+widget "*FirstActionMessage" style:highest "first_action_message"
+widget "*VerboseCanvasCursor" style:highest "verbose_canvas_cursor"
+widget "*MarkerText" style:highest "marker_text"
+widget "*TimeAxisViewItemName*" style:highest "time_axis_view_item_name"
+#widget "*ExportProgress" style:highest "default_generic"
+widget "*ExportFileLabel" style:highest "small_bold_text"
+widget "*ExportFormatLabel" style:highest "medium_bold_text"
+widget "*ExportHeader" style:highest "small_bold_text"
+widget "*ExportFileDisplay" style:highest "medium_entry"
+widget "*ExportFormatDisplay" style:highest "medium_entry"
+widget "*ExportCheckbox" style:highest "small_entry"
+widget "*ExportTrackSelector*" style:highest "medium_entry_noselection_bg"
+widget "*EditModeSelector" style:highest "medium_bold_entry"
+widget "*SnapTypeSelector" style:highest "medium_bold_entry"
+widget "*SnapModeSelector" style:highest "medium_bold_entry"
+widget "*ZoomFocusSelector" style:highest "medium_bold_entry"
+widget "*ArdourContextMenu*" style:highest "default_menu"
+widget "*EditGroupTitleButton*" style:highest "default_button"
+widget "*MixerGroupTitleButton*" style:highest "default_button"
+widget "*ErrorLogCloseButton" style:highest "default_button"
+widget "*EditorGTKButton*" style:highest "default_button"
+widget "*ToolbarButton" style:highest "default_button"
+widget "*ToolbarButton*" style:highest "default_button"
+widget "*CrossfadeEditButton" style:highest "default_button"
+widget "*CrossfadeEditButton*" style:highest "default_button"
+widget "*TrackHistoryButton*" style:highest "default_button"
+widget "*TrackSizeButton*" style:highest "default_button"
+widget "*TrackPlaylistButton*" style:highest "default_button"
+widget "*TrackAutomationButton*" style:highest "default_button"
+widget "*TrackGroupButton*" style:highest "default_button"
+widget "*TrackMixButton*" style:highest "default_button"
+widget "*TrackVisualButton*" style:highest "default_button"
+widget "*TrackRemoveButton*" style:highest "default_button"
+widget "*BaseButton" style:highest "default_button"
+widget "*TakeButtonLabel" style:highest "default_button"
+widget "*MixerWidthButton" style:highest "default_button"
+widget "*MixerHideButton" style:highest "default_button"
+widget "*MixerSendButton" style:highest "default_button"
+widget "*MixerSendButtonLabel" style:highest "default_button"
+widget "*MixerSendSwitch" style:highest "default_button"
+widget "*MixerInsertButton" style:highest "default_button"
+widget "*MixerInsertButtonLabel" style:highest "default_button"
+widget "*MixerInsertSwitch" style:highest "default_button"
+widget "*MixerMonitorInputButton*" style:highest "very_small_button"
+widget "*MixerMonitorInputButton.*" style:highest "very_small_button"
+widget "*MixerIOButton" style:highest "very_small_button"
+widget "*MixerIOButtonLabel" style:highest "very_small_button"
+widget "*AddRouteDialogSpinner" style:highest "ardour_adjusters"
+widget "*AddRouteDialogRadioButton*" style:highest "preferences"
+widget "*OptionsNotebook" style:highest "preferences"
+widget "*OptionEditorToggleButton*" style:highest "preferences"
+widget "*OptionsLabel" style:highest "preferences"
+widget "*OptionEditorAuditionerLabel" style:highest "preferences"
+widget "*OptionsEntry" style:highest "option_entry"
+widget "*InspectorNotebook" style:highest "preferences"
+widget "*NewSessionDialog" style:highest "preferences"
+widget "*NewSessionDialogButton*" style:highest "preferences"
+widget "*MixerSendSwitch*" style:highest "very_small_red_active_and_selected_button"
+widget "*OptionEditorToggleButton" style:highest "small_red_active_and_selected_button"
+widget "*NewSessionDialogButton" style:highest "small_red_active_and_selected_button"
+widget "*RecordEnableButton" style:highest "track_rec_enable_button"
+widget "*RecordEnableButton-active" style:highest "track_rec_enable_button_active"
+widget "*RecordEnableButton-alternate" style:highest "track_rec_enable_button_alternate"
+widget "*MixerRecordEnableButton" style:highest "mixer_track_rec_enable_button"
+widget "*MixerRecordEnableButton-active" style:highest "mixer_track_rec_enable_button_active"
+widget "*MixerRecordEnableButton-alternate" style:highest "mixer_track_rec_enable_button_alternate"
+widget "*MuteButton" style:highest "mute_button"
+widget "*MuteButton-alternate" style:highest "mute_button_alternate"
+widget "*MuteButton-active" style:highest "mute_button_active"
+widget "*MixerMuteButton" style:highest "mixer_mute_button"
+widget "*MixerMuteButton-alternate" style:highest "mixer_mute_button_alternate"
+widget "*MixerMuteButton-active" style:highest "mixer_mute_button_active"
+widget "*SoloButton" style:highest "solo_button"
+widget "*SoloButton-alternate" style:highest "solo_button_alternate"
+widget "*SoloButton-active" style:highest "solo_button_active"
+widget "*MixerSoloButton" style:highest "mixer_solo_button"
+widget "*MixerSoloButton-alternate" style:highest "mixer_solo_button_alternate"
+widget "*MixerSoloButton-active" style:highest "mixer_solo_button_active"
+widget "*TrackLoopButton*" style:highest "track_loop_button"
+widget "*PanAutomationLineSelector*" style:highest "multiline_combo"
+widget "*EditorTimeButton*" style:highest "time_button"
+widget "*MixerPhaseInvertButton*" style:highest "very_small_button"
+widget "*MixerPhaseInvertButton.*" style:highest "very_small_button"
+widget "*MixerAutomationRecordingButton*" style:highest "very_small_button"
+widget "*MixerAutomationRecordingButton.*" style:highest "very_small_button"
+widget "*MixerAutomationModeButton*" style:highest "very_small_button"
+widget "*MixerAutomationModeButton.*" style:highest "very_small_button"
+widget "*MixerAutomationPlaybackButton*" style:highest "very_small_button"
+widget "*MixerAutomationPlaybackButton.*" style:highest "very_small_button"
+widget "*MixerNameButton" style:highest "very_small_button"
+widget "*MixerNameButtonLabel" style:highest "very_small_button"
+widget "*MixerGroupButton" style:highest "very_small_button"
+widget "*MixerGroupButtonLabel" style:highest "very_small_button"
+widget "*MixerCommentButton" style:highest "very_small_button"
+widget "*MixerCommentButton*" style:highest "very_small_button"
+widget "*EditGroupButton" style:highest "very_small_button"
+widget "*EditGroupButtonLabel" style:highest "very_small_button"
+widget "*TransportButton" style:highest "transport_rec_button"
+widget "*TransportButton-active" style:highest "transport_button_active"
+widget "*ShuttleButton" style:highest "transport_button"
+widget "*ShuttleButton*" style:highest "transport_button"
+widget "*ShuttleDisplay" style:highest "transport_button"
+widget "*ShuttleDisplay*" style:highest "transport_button"
+widget "*ShuttleControl" style:highest "shuttle_control"
+widget "*TransportRecButton" style:highest "transport_rec_button"
+widget "*TransportRecButton*" style:highest "transport_rec_button"
+widget "*TransportRecButton-active" style:highest "transport_rec_button_active"
+widget "*TransportRecButton-active*" style:highest "transport_rec_button_active"
+widget "*TransportRecButton-alternate" style:highest "transport_rec_button_alternate"
+widget "*TransportRecButton-alternate*" style:highest "transport_rec_button_alternate"
+widget "*TransportRecButton*" style:highest "transport_rec_button"
+widget "*RecordingXrunWarningWindow" style:highest "xrun_warn"
+widget "*RecordingXrunWarningWindow*" style:highest "xrun_warn"
+/*widget "*MainMenuBar" style:highest "menu_bar_base"*/
+widget "*ErrorMessage" style:highest "error_message"
+widget "*FatalMessage" style:highest "fatal_message"
+widget "*InfoMessage" style:highest "info_message"
+widget "*WarningMessage" style:highest "warning_message"
+widget "*BigClockNonRecording" style:highest "non_recording_big_clock_display"
+widget "*BigClockRecording" style:highest "recording_big_clock_display"
+widget "*TransportClockDisplay" style:highest "transport_clock_display"
+widget "*SecondaryClockDisplay" style:highest "transport_clock_display"
+widget "*TransportClockDisplayDelta" style:highest "transport_clock_display_delta"
+widget "*SecondaryClockDisplayDelta" style:highest "transport_clock_display_delta"
+widget "*AudioClockFramesUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockFramesLowerInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockSMPTEUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockSMPTELowerInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockBBTUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockBBTLowerInfo" style:highest "tempo_meter_clock_display"
+widget "*SelectionStartClock" style:highest "default_clock_display"
+widget "*SelectionEndClock" style:highest "default_clock_display"
+widget "*EditPointClock" style:highest "default_clock_display"
+widget "*PreRollClock" style:highest "default_clock_display"
+widget "*PostRollClock" style:highest "default_clock_display"
+widget "*NudgeClock" style:highest "default_clock_display"
+widget "*InsertTimeClock" style:highest "default_clock_display"
+widget "*ZoomRangeClock" style:highest "default_clock_display"
+widget "*SMPTEOffsetClock" style:highest "default_clock_display"
+widget "*TransportLabel" style:highest "small_bold_text"
+widget "*TakeLabel" style:highest "small_bold_text"
+widget "*LocationLabel" style:highest "small_bold_text"
+widget "*WipeLabel" style:highest "small_bold_text"
+widget "*TakeTagLabel" style:highest "small_bold_text"
+widget "*ToolBarLabel" style:highest "small_bold_text"
+widget "*EditorDisplayLabel" style:highest "small_bold_text"
+widget "*NewSessionLabel" style:highest "large_text"
+widget "*GlobalButtonLabel" style:highest "default_generic"
+widget "*ClickButton" style:highest "medium_entry"
+widget "*RegionNameDisplay" style:highest "medium_entry"
+widget "*PluginDisplay" style:highest "medium_entry"
+widget "*SelectionDisplay" style:highest "medium_entry"
+widget "*HistorySelector" style:highest "medium_entry"
+widget "*LocationSelector" style:highest "medium_entry"
+widget "*TakeSelector" style:highest "medium_entry"
+widget "*RegionSelector" style:highest "medium_entry"
+widget "*SMPTERuler" style:highest "editor_time_ruler"
+widget "*BBTRuler" style:highest "editor_time_ruler"
+widget "*FramesRuler" style:highest "editor_time_ruler"
+widget "*MinSecRuler" style:highest "editor_time_ruler"
+widget "*BaseFrame" style:highest "base_frame"
+
+widget "*AudioTrackStripBase" style:highest "audio_track_base"
+widget "*AudioBusStripBase" style:highest "audio_bus_base"
+widget "*MidiTrackStripBase" style:highest "midi_track_base"
+widget "*AudioTrackStripBaseInactive" style:highest "track_controls_inactive"
+widget "*AudioBusStripBaseInactive" style:highest "track_controls_inactive"
+widget "*MidiTrackStripBaseInactive" style:highest "track_controls_inactive"
+widget "*FaderMetricsStrip" style:highest "audio_track_metrics"
+widget "*AudioTrackMetrics" style:highest "audio_track_metrics"
+widget "*AudioBusMetrics" style:highest "audio_bus_metrics"
+widget "*AudioTrackMetricsInactive" style:highest "audio_track_metrics_inactive"
+widget "*AudioBusMetricsInactive" style:highest "audio_bus_metrics_inactive"
+
+widget "*TimeAxisViewControlsBaseUnselected" style:highest "audio_track_base"
+widget "*AudioTrackControlsBaseUnselected" style:highest "audio_track_base"
+widget "*MidiTrackControlsBaseUnselected" style:highest "midi_track_base"
+widget "*AudioTrackFader" style:highest "gain_fader"
+
+widget "*BusControlsBaseUnselected" style:highest "audio_bus_base"
+widget "*AudioBusFader" style:highest "gain_fader"
+widget "*TrackSeparator" style:highest "track_separator"
+widget "*TrackEditIndicator0*" style:highest "edit_group_0"
+widget "*TrackEditIndicator1*" style:highest "edit_group_1"
+widget "*TrackEditIndicator2*" style:highest "edit_group_2"
+widget "*TrackEditIndicator3*" style:highest "edit_group_3"
+widget "*TrackEditIndicator4*" style:highest "edit_group_3"
+widget "*TrackEditIndicator5*" style:highest "edit_group_3"
+widget "*TrackEditIndicator6*" style:highest "edit_group_3"
+widget "*TrackEditIndicator7*" style:highest "edit_group_3"
+widget "*EditorTrackNameDisplay" style:highest "track_name_display"
+widget "*EditorTrackNameDisplay*" style:highest "track_name_display"
+widget "*EditorActiveTrackNameDisplay" style:highest "active_track_name_display"
+widget "*EditorActiveTrackNameDisplay*" style:highest "active_track_name_display"
+widget "*CrossfadeEditAuditionButton" style:highest "red_when_active"
+widget "*CrossfadeEditAuditionButton*" style:highest "red_when_active"
+widget "*CrossfadeEditCurveButton" style:highest "red_when_active"
+widget "*CrossfadeEditCurveButton*" style:highest "red_when_active"
+widget "*CrossfadeEditLabel" style:highest "medium_text"
+widget "*CrossfadeEditFrame" style:highest "base_frame"
+widget "*MouseModeButton" style:highest "default_button"
+widget "*MouseModeButton*" style:highest "default_button"
+widget "*EditorMainCanvas" style:highest "main_canvas_area"
+widget "*AudioTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*BusControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*AutomationTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*AutomationTrackName" style:highest "automation_track_name"
+widget "*AudioTrackControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*BusControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*AutomationTrackControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*AudioTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*MidiTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*BusControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*AutomationTrackControlsBase" style:highest "automation_track_controls_base"
+widget "*AutomationTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+/*widget "*EditorMenuBar*" style:highest "black_mackie_menu_bar"
+widget "*MainMenuBar*" style:highest "black_mackie_menu_bar"
+*/
+widget "*ZoomClickBox" style:highest "medium_bold_entry"
+widget "*PluginParameterLabel" style:highest "medium_text"
+widget "*PluginNameInfo" style:highest "plugin_name_text"
+widget "*PluginMakerInfo" style:highest "plugin_maker_text"
+widget "*PluginParameterInfo" style:highest "medium_text"
+widget "*MotionControllerValue" style:highest "medium_entry"
+widget "*ParameterValueDisplay" style:highest "medium_bold_entry"
+widget "*PluginUIClickBox" style:highest "medium_bold_entry"
+widget "*PluginUIClickBox*" style:highest "medium_bold_entry"
+widget "*PluginSlider" style:highest "plugin_slider"
+widget "*RedirectSelector" style:highest "redirect_list_display"
+widget "*RedirectSelector.*" style:highest "redirect_list_display"
+widget "*EditGroupDisplay" style:highest "treeview_display"
+widget "*TrackListDisplay" style:highest "treeview_display"
+widget "*RegionListDisplay" style:highest "treeview_display"
+widget "*NamedSelectionDisplay" style:highest "treeview_display"
+widget "*SnapshotDisplay" style:highest "treeview_display"
+widget "*MixerTrackCommentArea" style:highest "option_entry"
+widget "*MixerPanZone" style:highest "pan_zone"
+widget "*MixerTrackDisplayList" style:highest "treeview_display"
+widget "*MixerSnapshotDisplayList" style:highest "treeview_display"
+widget "*MixerAuxDisplayList" style:highest "treeview_display"
+widget "*MixerGroupList" style:highest "treeview_display"
+widget "*RegionEditorLabel" style:highest "medium_text"
+widget "*RegionEditorSmallLabel" style:highest "small_text"
+widget "*RegionEditorEntry" style:highest "medium_entry"
+widget "*RegionEditorClock" style:highest "default_clock_display"
+widget "*RegionEditorToggleButton" style:highest "paler_red_when_active"
+widget "*RegionEditorToggleButton*" style:highest "paler_red_when_active"
+widget "*MixerStripSpeedBase" style:highest "small_entry"
+widget "*MixerStripSpeedBase*" style:highest "small_entry"
+widget "*MixerStripSpeedBaseNotOne" style:highest "small_red_on_black_entry"
+widget "*MixerStripSpeedBaseNotOne*" style:highest "small_red_on_black_entry"
+widget "*MixerStripGainDisplay" style:highest "small_entry"
+widget "*MixerStripGainDisplay*" style:highest "small_entry"
+widget "*MixerStripGainUnitButton" style:highest "very_small_button"
+widget "*MixerStripGainUnitButton*" style:highest "very_small_button"
+widget "*MixerStripMeterPreButton" style:highest "very_small_button"
+widget "*MixerStripMeterPreButton*" style:highest "very_small_button"
+widget "*MixerStripPeakDisplay*" style:highest "red_active_small_entry"
+widget "*MixerStripPeakDisplayPeak*" style:highest "peak_display_peaked_entry"
+widget "*MixerStripSelectedFrame" style:highest "selected_strip_frame"
+widget "*MixerStripFrame" style:highest "base_frame"
+widget "*HWMonitorButton" style:highest "red_when_active"
+widget "*HWMonitorButton*" style:highest "red_when_active"
+widget "*TransportSoloAlert" style:highest "flashing_alert"
+widget "*TransportSoloAlert.*" style:highest "flashing_alert"
+widget "*TransportAuditioningAlert" style:highest "flashing_alert"
+widget "*TransportAuditioningAlert.*" style:highest "flashing_alert"
+widget "*FadeCurve" style:highest "medium_bold_entry"
+widget "*FadeCurve*" style:highest "medium_bold_entry"
+widget "*IOSelectorButton" style:highest "default_button"
+widget "*IOSelectorButton*" style:highest "default_button"
+widget "*IOSelectorList" style:highest "medium_entry_noselection_fg"
+widget "*IOSelectorPortList" style:highest "io_selector_port_list"
+widget "*IOSelectorPortList.*" style:highest "io_selector_port_list"
+widget "*IOSelectorPortListSelected" style:highest "selected_io_selector_port_list"
+widget "*IOSelectorPortListSelected.*" style:highest "selected_io_selector_port_list"
+widget "*IOSelectorNotebook" style:highest "io_selector_notebook"
+widget "*IOSelectorNotebookTab" style:highest "io_selector_notebook"
+widget "*IOSelectorFrame" style:highest "base_frame"
+widget "*ConnectionEditorButton" style:highest "default_button"
+widget "*ConnectionEditorButton*" style:highest "default_button"
+widget "*ConnectionEditorList" style:highest "medium_entry_noselection_fg"
+widget "*ConnectionEditorConnectionList" style:highest "medium_entry"
+widget "*ConnectionEditorPortList" style:highest "io_selector_port_list"
+widget "*ConnectionEditorPortListSelected" style:highest "selected_io_selector_port_list"
+widget "*ConnectionEditorNotebook" style:highest "io_selector_notebook"
+widget "*ConnectionEditorNotebookTab" style:highest "io_selector_notebook"
+widget "*ConnectionEditorFrame" style:highest "base_frame"
+widget "*RouteParamsListDisplay" style:highest "inspector_track_list_display"
+widget "*RouteParamsPreListDisplay" style:highest "inspector_redirect_list_display"
+widget "*RouteParamsPostListDisplay" style:highest "inspector_redirect_list_display"
+widget "*TearOffArrow" style:highest "tearoff_arrow"
+widget "*RouteParamsTitleButton" style:highest "medium_text"
+widget "*RouteParamsTitleLabel" style:highest "medium_text"
+widget "*PluginAutomateRecordButton" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomateRecordButton*" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomatePlayButton" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomatePlayButton*" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomateButton" style:highest "small_button"
+widget "*PluginAutomateButton*" style:highest "small_button"
+widget "*PluginSaveButton" style:highest "small_button"
+widget "*PluginSaveButton*" style:highest "small_button"
+widget "*PluginLoadButton" style:highest "small_button"
+widget "*PluginLoadButton*" style:highest "small_button"
+
+widget "*MetricDialogFrame" style:highest "base_frame"
+widget "*MetricEntry" style:highest "medium_bold_entry"
+widget "*MetricButton" style:highest "default_button"
+widget "*MetricButton.*" style:highest "default_button"
+widget "*MetricLabel" style:highest "medium_text"
+widget "*TimeStretchButton" style:highest "default_button"
+widget "*TimeStretchButton.*" style:highest "default_button"
+widget "*TimeStretchProgress" style:highest "default_generic"
+widget "*ChoiceWindow" style:highest "default_generic"
+widget "*ChoicePrompt" style:highest "default_generic"
+widget "*ChoiceButton" style:highest "default_button"
+widget "*ChoiceButton*" style:highest "default_button"
+widget "*SelectionModeButton" style:highest "default_button"
+widget "*SelectionModeButton*" style:highest "default_button"
+widget "*TrackLabel" style:highest "medium_text"
+widget "*TrackPlugName" style:highest "medium_text"
+widget "*TrackParameterName" style:highest "small_text"
+widget "*AddRouteDialog*" style:highest "medium_text"
+widget "*AddRouteDialog.GtkLabel" style:highest "medium_text"
+widget "*AddRouteDialogChannelChoice" style:highest "medium_bold_entry"
+widget "*AddRouteDialogSpinner" style:highest "medium_bold_entry"
+widget "*AddRouteDialogSpinner*" style:highest "medium_bold_entry"
+widget "*AddRouteDialogRadioButton" style:highest "red_when_active"
+widget "*AddRouteDialogButton" style:highest "default_button"
+widget "*AddRouteDialogNameTemplateEntry" style:highest "medium_bold_entry"
+widget "*NewSessionIOLabel" style:highest "larger_bold_text"
+widget "*NewSessionSR1Label" style:highest "red_medium_text"
+widget "*NewSessionSR2Label" style:highest "medium_text"
+widget "*NewSessionChannelChoice" style:highest "medium_bold_entry"
+widget "*NewSessionMainButton" style:highest "larger_bold_text"
+widget "*NewSessionMainButton*" style:highest "larger_bold_text"
+widget "*NewSessionMainLabel" style:highest "larger_bold_text"
+widget "*LocationEditRowClock" style:highest "location_rows_clock"
+widget "*LocationEditNameLabel" style:highest "medium_text"
+widget "*LocationEditSetButton" style:highest "location_row_button"
+widget "*LocationEditSetButton*" style:highest "location_row_button"
+widget "*LocationEditGoButton" style:highest "location_row_button"
+widget "*LocationEditGoButton*" style:highest "location_row_button"
+widget "*LocationEditCdButton" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditCdButton*" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditHideButton" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditHideButton*" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditNumberLabel" style:highest "small_text"
+widget "*LocationLocEditorFrame" style:highest "base_frame"
+widget "*LocationRangeEditorFrame" style:highest "base_frame"
+widget "*LocationEditNameEntry" style:highest "option_entry"
+widget "*LocationAddLocationButton" style:highest "default_button"
+widget "*LocationAddLocationButton*" style:highest "default_button"
+widget "*LocationAddRangeButton" style:highest "default_button"
+widget "*LocationAddRangeButton*" style:highest "default_button"
+widget "*LocationEditRemoveButton" style:highest "location_row_button"
+widget "*LocationEditRemoveButton*" style:highest "location_row_button"
+widget "*PanSlider" style:highest "pan_slider"
+widget "*PanningLinkButton" style:highest "mixer_red_active_button"
+widget "*PanningLinkButton.*" style:highest "mixer_red_active_button"
+widget "*PanningLinkDirectionButton" style:highest "very_small_button"
+widget "*PanningLinkDirectionButton.*" style:highest "very_small_button"
+widget "*ChannelCountSelector" style:highest "medium_bold_entry"
+widget "*ChannelCountSelector.GtkArrow" style:highest "default_generic"
+widget "*RegionListWholeFile" style:highest "treeview_parent_node"
+widget "*EditorHScrollbar" style:highest "editor_hscrollbar"
+widget "*ResizerHandler" style:highest "resizer_handle"
+
+style "tooltip" {
+ fg[NORMAL] = { 0.20, 0.20, 0.20 }
+ bg[NORMAL] = "#FFFFFF"
+}
+
+widget "*ooltip*" style:highest "tooltip"
diff --git a/gtk2_ardour/ardour3_ui_light_sae.rc.in b/gtk2_ardour/ardour3_ui_light_sae.rc.in
new file mode 100644
index 0000000000..2a6844c6d0
--- /dev/null
+++ b/gtk2_ardour/ardour3_ui_light_sae.rc.in
@@ -0,0 +1,1584 @@
+#
+# This is the GTK style file for Ardour
+#
+
+style "very_small_text"
+{
+ font_name = "%FONT_SMALLER%"
+}
+
+style "small_text"
+{
+ font_name = "%FONT_SMALL%"
+}
+
+style "small_bold_text"
+{
+ font_name = "%FONT_BOLD_SMALL%"
+}
+
+style "medium_bold_text"
+{
+ font_name = "%FONT_BOLD_NORMAL%"
+}
+
+style "medium_text"
+{
+ font_name = "%FONT_NORMAL%"
+}
+
+style "red_medium_text" = "medium_text"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+}
+
+
+style "large_text"
+{
+ font_name = "%FONT_LARGE%"
+}
+
+style "larger_bold_text"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+}
+
+style "plugin_name_text"
+{
+ font_name = "%FONT_BOLD_LARGER%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+}
+
+style "plugin_maker_text"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+}
+
+style "automation_track_name"
+{
+ font_name = "%FONT_ITALIC_NORMAL%"
+}
+
+style "first_action_message"
+{
+ font_name = "%FONT_HUGER%"
+}
+
+style "verbose_canvas_cursor"
+{
+ font_name = "%FONT_BOLD_LARGER%"
+}
+
+style "marker_text"
+{
+ font_name = "%FONT_NORMAL%"
+}
+
+style "time_axis_view_item_name"
+{
+ font_name = "%FONT_SMALLER%"
+}
+
+style "default_base" = "medium_text"
+{
+
+ GtkButton::default_border = { 0, 0, 0, 0 }
+ GtkButton::default_outside_border = { 0, 0, 0, 0 }
+ GtkButton::button_relief = GTK_RELIEF_NONE
+ GtkTreeView::vertical-padding = 0
+ GtkTreeView::horizontal-padding = 0
+ GtkTreeView::even-row-color = { 0.70, 0.70, 0.70 }
+ GtkTreeView::odd-row-color = { 0.64, 0.64, 0.64 }
+
+ fg[NORMAL] = { 0.30, 0.30, 0.40 }
+ fg[ACTIVE] = { 0.30, 0.30, 0.40 }
+ fg[PRELIGHT] = { 0.10, 0.10, 0.20 }
+ fg[INSENSITIVE] = { 0.30, 0.30, 0.40 }
+ fg[SELECTED] = { 0.30, 0.30, 0.40 }
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+
+ text[NORMAL] = { 0.30, 0.30, 0.40 }
+ text[ACTIVE] = { 0.30, 0.30, 0.40 }
+ text[PRELIGHT] = { 0.30, 0.30, 0.40 }
+ text[INSENSITIVE] = { 0.30, 0.30, 0.40 }
+ text[SELECTED] = { 0, 0, 0 }
+
+ base[ACTIVE] = { 0.80, 0.80, 0.80 }
+ base[NORMAL] = { 0.80, 0.80, 0.80 }
+ base[PRELIGHT] = { 0.90, 0.90, 0.90 }
+ base[INSENSITIVE] = "#4c5159"
+ base[SELECTED] = { 0.60, 0.60, 0.80 }
+
+ engine "clearlooks"
+ {
+ menubarstyle = 0 # 0 = flat, 1 = sunken, 2 = flat gradient
+ menuitemstyle = 0 # 0 = flat, 1 = 3d-ish (gradient), 2 = 3d-ish (button)
+ listviewitemstyle = 0 # 0 = flat, 1 = 3d-ish (gradient)
+ progressbarstyle = 1 # 0 = candy bar, 1 = fancy candy bar, 2 = flat
+ }
+}
+
+style "base_frame"
+{
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[NORMAL] = { 0.35, 0.35, 0.40 }
+}
+
+style "transport_base" = "medium_bold_text"
+{
+ bg[NORMAL] = { 0.10, 0.10, 0.10 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+ bg[INSENSITIVE] = { 0, 0, 0 }
+ bg[SELECTED] = { 0, 0, 0 }
+}
+/*
+style "black_mackie_menu_bar"
+{
+ font_name = "%FONT_BOLD_NORMAL%"
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ bg[NORMAL] = { 0, 0, 0 }
+}
+*/
+style "default_button"
+{
+ font_name = "%FONT_SMALL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.70, 0.70, 0.90 }
+ bg[INSENSITIVE] = { 0.70, 0.70, 0.90 }
+ bg[SELECTED] = { 0.70, 0.70, 0.90 }
+}
+
+style "default_menu"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.70, 0.70, 0.90 }
+ bg[INSENSITIVE] = { 0.70, 0.70, 0.90 }
+ bg[SELECTED] = { 0.70, 0.70, 0.90 }
+}
+
+style "default_generic"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = "#565690"
+ bg[PRELIGHT] = { 0.70, 0.70, 0.90 }
+ bg[INSENSITIVE] = { 0.70, 0.70, 0.90 }
+ bg[SELECTED] = { 0.70, 0.70, 0.90 }
+}
+
+style "very_small_button" = "default_button"
+{
+ font_name = "%FONT_SMALLER%"
+ ythickness = 0
+ xthickness = 0
+}
+
+style "small_button" = "default_button"
+{
+}
+
+style "very_small_red_active_and_selected_button" = "very_small_button"
+{
+ bg[ACTIVE] = { 1.0, 0, 0}
+ bg[SELECTED] = { 1.0, 0, 0}
+}
+
+style "small_red_active_and_selected_button" = "small_button"
+{
+ fg[ACTIVE] = { 0, 0, 0 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+ bg[SELECTED] = { 1.0, 0, 0}
+}
+
+style "gain_fader"
+{
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+}
+
+
+style "track_rec_enable_button" = "small_button"
+{
+}
+
+style "track_rec_enable_button_active" = "small_button"
+{
+ fg[SELECTED] = { 0.0, 0.0, 0.0 }
+ fg[ACTIVE] = { 0.0, 0.0, 0.0 }
+ fg[PRELIGHT] = { 0.0, 0.0, 0.0 }
+ fg[NORMAL] = { 0.0, 0.0, 0.0 }
+
+ bg[NORMAL] = { 1.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ bg[SELECTED] = { 1.0, 0.0, 0.0 }
+ bg[PRELIGHT] = { 1.0, 0.0, 0.0 }
+}
+
+style "track_rec_enable_button_alternate" = "small_button"
+{
+ fg[SELECTED] = { 0.0, 0.0, 0.0 }
+ fg[ACTIVE] = { 0.0, 0.0, 0.0 }
+ fg[PRELIGHT] = { 0.0, 0.0, 0.0 }
+ fg[NORMAL] = { 0.0, 0.0, 0.0 }
+
+ bg[NORMAL] = { 0.91, 0.68, 0.68}
+ bg[ACTIVE] = { 0.91, 0.68, 0.68}
+ bg[SELECTED] = { 0.91, 0.68, 0.68}
+ bg[PRELIGHT] = { 0.91, 0.68, 0.68}
+}
+
+style "mixer_track_rec_enable_button" = "track_rec_enable_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_track_rec_enable_button_alternate" = "track_rec_enable_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_track_rec_enable_button_active" = "track_rec_enable_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "solo_button" = "small_button"
+{
+}
+
+style "solo_button_alternate" = "small_button"
+{
+ bg[NORMAL] = { 0.19, 0.97, 0.69 } # solo-safe
+ bg[ACTIVE] = { 0.19, 0.97, 0.69 } # solo-safe
+ bg[SELECTED] = { 0.19, 0.97, 0.69 } # solo-safe
+ bg[PRELIGHT] = { 0.19, 0.97, 0.69 } # solo-safe
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+
+style "solo_button_active" = "small_button"
+{
+ bg[NORMAL] = { 0.66, 0.97, 0.19 } # solo
+ bg[ACTIVE] = { 0.66, 0.97, 0.19 } # solo
+ bg[SELECTED] = { 0.66, 0.97, 0.19 } # solo
+ bg[PRELIGHT] = { 0.66, 0.97, 0.19 } # solo
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mixer_solo_button" = "solo_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_solo_button_alternate" = "solo_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+style "mixer_solo_button_active" = "solo_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+
+style "mute_button" = "small_button"
+{
+}
+
+style "mute_button_alternate" = "small_button"
+{
+ bg[ACTIVE] = { 1.0, 0.98, 0.53 }
+ bg[NORMAL] = { 1.0, 0.98, 0.53 }
+ bg[SELECTED] = { 1.0, 0.98, 0.53 }
+ bg[PRELIGHT] = { 1.0, 0.98, 0.53 }
+
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mute_button_active" = "small_button"
+{
+ bg[NORMAL] = { 0.90, 0.89, 0.73 }
+ bg[ACTIVE] = { 0.90, 0.89, 0.73 }
+ bg[PRELIGHT] = { 0.90, 0.89, 0.73 }
+ bg[SELECTED] = { 0.90, 0.89, 0.73 }
+
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+}
+
+style "mixer_mute_button_alternate" = "mute_button_alternate"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_mute_button_active" = "mute_button_active"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "multiline_combo" = "small_button"
+{
+ font_name = "%FONT_NORMAL%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "mixer_mute_button" = "mute_button"
+{
+ font_name = "%FONT_SMALLER%"
+ xthickness = 0
+ ythickness = 0
+}
+
+style "track_loop_button" = "small_button"
+{
+ bg[ACTIVE] = { 1.0, 0.98, 0.53 }
+ bg[PRELIGHT] = { 1.0, 0.98, 0.53 }
+
+}
+
+style "mixer_red_active_button" = "very_small_button"
+{
+ fg[ACTIVE] = { 0, 1.0, 1.0 }
+ bg[ACTIVE] = { 0.7, 0, 0 }
+
+ base[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+}
+
+style "time_button" = "default_button"
+{
+ font_name = "%FONT_SMALL%"
+}
+
+style "transport_button"
+{
+}
+
+style "transport_button_active"
+{
+ bg[NORMAL] = { 0.50, 1.0, 0.50 }
+ bg[ACTIVE] = { 0.50, 1.0, 0.50 }
+ bg[SELECTED] = { 0.50, 1.0, 0.50 }
+ bg[PRELIGHT] = { 0.50, 1.0, 0.50 }
+
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "transport_rec_button"
+{
+}
+
+style "transport_rec_button_active"
+{
+ bg[ACTIVE] = { 1.0, 0, 0 }
+ bg[NORMAL] = { 1.0, 0, 0 }
+ bg[SELECTED] = { 1.0, 0, 0 }
+ bg[PRELIGHT] = { 1.0, 0, 0 }
+}
+
+style "transport_rec_button_alternate"
+{
+ bg[PRELIGHT] = { 0.91, 0.68, 0.68 }
+ bg[NORMAL] = { 0.91, 0.68, 0.68 }
+ bg[SELECTED] = { 0.91, 0.68, 0.68 }
+ bg[ACTIVE] = { 0.91, 0.68, 0.68 }
+}
+
+style "shuttle_control" = "very_small_text"
+{
+ fg[NORMAL] = { 0.85, 0.92, 0.98 }
+ fg[ACTIVE] = { 0.85, 0.92, 0.98 }
+ fg[PRELIGHT] = { 0.85, 0.92, 0.98 }
+ fg[SELECTED] = { 0.85, 0.92, 0.98 }
+ fg[INSENSITIVE] = { 0.85, 0.92, 0.98 }
+
+ bg[NORMAL] = { 0.26, 0.26, 0.31 }
+ bg[PRELIGHT] = { 0.26, 0.26, 0.31 }
+ bg[INSENSITIVE] = { 0.26, 0.26, 0.31 }
+ bg[ACTIVE] = { 0.70, 0.70, 0.70 }
+ bg[SELECTED] = { 1.0, 0.04, 0.04 }
+}
+
+style "ardour_adjusters" = "default_generic"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.60 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.06, 0.06, 0.06 }
+}
+
+style "editor_hscrollbar" = "ardour_adjusters"
+{
+ #
+ # special case: we want this scrollbar to be as tall as the
+ # zoom focus selector combobox. scrollbars don't expand to
+ # fill the space available to them, so we have to explicitly
+ # make it bigger.
+ #
+ GtkRange::slider_width = 27
+ GtkScrollbar::slider_width = 27
+}
+
+style "resizer_handle"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = "#818181"
+}
+
+style "ardour_progressbars" = "default_generic"
+{
+ bg[NORMAL] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0.00, 0.36, 0.40 }
+}
+
+style "preferences" = "default_base"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+}
+
+style "option_entry" = "default_base"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ fg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+
+ base[INSENSITIVE] = { 0.07, 0.07, 0.12 }
+
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+ bg[ACTIVE] = { 0.35, 0.35, 0.40 }
+}
+
+style "red_when_active" = "medium_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+}
+
+style "xrun_warn"
+{
+ font_name = "%FONT_BOLD_LARGE%"
+
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ text[NORMAL] = { 1.0, 1.0, 1.0 }
+ text[ACTIVE] = { 1.0, 1.0, 1.0 }
+ base[NORMAL] = { 0.09, 0.48, 0.46 }
+ base[ACTIVE] = { 0.09, 0.48, 0.46 }
+ bg[NORMAL] = { 1.0, 0.48, 0.46 }
+ bg[ACTIVE] = { 0.09, 1.0, 0.46 }
+}
+/*
+style "menu_bar_base" = "default_base"
+{
+ bg[NORMAL] = { 0.2, 0.2, 0.3 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+ bg[INSENSITIVE] = { 0, 0, 0 }
+ bg[SELECTED] = { 0, 0, 0 }
+}
+*/
+style "fatal_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 1.0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "error_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "info_message" = "medium_text"
+{
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0,0,0 }
+ bg[NORMAL] = { 0,0,0 }
+ base[ACTIVE] = { 0,0,0 }
+ base[NORMAL] = { 0,0,0 }
+}
+
+style "warning_message" = "medium_text"
+{
+ fg[ACTIVE] = { 0.30,0.30, 1.0 }
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ base[NORMAL] = { 0, 0, 0 }
+}
+
+style "medium_entry" = "medium_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.70, 0.70, 0.70 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "medium_entry_noselection_fg" = "medium_entry"
+{
+ fg[SELECTED] = { 0.50, 1.0, 0.50 }
+}
+
+style "medium_entry_noselection_bg" = "medium_entry"
+{
+ bg[SELECTED] = { 1.0, 1.0, 1.0 }
+}
+
+style "medium_bold_entry" = "medium_bold_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.70, 0.70, 0.70 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "small_entry" = "small_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 1.0, 0 }
+ fg[SELECTED] = { 0, 1.0, 0 }
+ text[NORMAL] = { 0, 0, 0 }
+ text[ACTIVE] = { 0, 1.0, 0 }
+ text[SELECTED] = { 0, 1.0, 0 }
+ bg[NORMAL] = { 0.70, 0.70, 0.70 }
+ bg[SELECTED] = { 0.70, 0.70, 0.70 }
+ bg[SELECTED] = { 0.70, 0.70, 0.70 }
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "red_active_small_entry" = "small_entry"
+{
+ fg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+}
+
+style "small_bold_entry" = "small_bold_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = { 0.70, 0.70, 0.70 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "small_red_on_black_entry" = "small_bold_text"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+ fg[ACTIVE] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.0, 0.0, 0.0 }
+}
+
+style "non_recording_big_clock_display" = "medium_entry"
+{
+ font_name = "%FONT_MASSIVE%"
+
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ fg[PRELIGHT] = { 1.0, 0, 0.0 }
+ fg[INSENSITIVE] = { 1.0, 0, 0.0 }
+
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.7, 0.0, 0.0 }
+}
+
+style "recording_big_clock_display" = "non_recording_big_clock_display"
+{
+ fg[NORMAL] = { 1.0, 0, 0 }
+}
+
+style "transport_clock_display"
+{
+ font_name = "%FONT_BOLD_BIGGER%"
+
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ fg[PRELIGHT] = { 1.0, 0, 0.0 }
+ fg[INSENSITIVE] = { 1.0, 0, 0.0 }
+
+ base[NORMAL] = { 0.0, 0.0, 0.0 }
+ base[ACTIVE] = { 0.0, 0.0, 0.0 }
+ bg[NORMAL] = { 0.0, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.0, 0.0, 0.0 }
+}
+
+style "transport_clock_display_delta" = "transport_clock_display"
+{
+ fg[NORMAL] = { 0.30, 0.30, 1.0 }
+}
+
+style "tempo_meter_clock_display"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0.0, 0.48, 1.0 }
+ base[ACTIVE] = { 0.09, 0.98, 0.46 }
+ bg[NORMAL] = { 0.0, 0.48, 1.0 }
+ bg[ACTIVE] = { 0.09, 0.98, 0.46 }
+}
+
+style "default_clock_display" = "medium text"
+{
+ fg[NORMAL] = { 0.50, 1.0, 0.50 }
+ fg[ACTIVE] = { 1.0, 0.0, 0.0 }
+ fg[SELECTED] = { 1.0, 0, 0 }
+ base[NORMAL] = { 0, 0, 0 }
+ base[ACTIVE] = { 0, 0, 0 }
+ bg[NORMAL] = { 0, 0, 0 }
+ bg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "editor_time_ruler" = "small_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.74, 0.74, 0.77 }
+}
+
+style "audio_bus_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.65, 0.65, 0.65 }
+}
+
+style "audio_track_base" = "default_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.30, 0.30, 0.35 }
+ bg[NORMAL] = { 0.70, 0.70, 0.70 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+}
+
+style "midi_bus_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+ #bg[NORMAL] = {0, 0.36, 0.40 }
+ bg[NORMAL] = "#444466"
+}
+
+style "midi_track_base" = "default_base"
+{
+ font_name = "%FONT_SMALLER%"
+ fg[NORMAL] = { 0.77, 0.77, 0.72 }
+ bg[NORMAL] = { 0.48, 0.30, 0.32 }
+ bg[ACTIVE] = { 0.70, 0.70, 0.80 }
+ bg[PRELIGHT] = { 0.70, 0.70, 0.80 }
+ bg[INSENSITIVE] = { 0.70, 0.70, 0.80 }
+ bg[SELECTED] = { 0.70, 0.70, 0.80 }
+}
+
+style "track_controls_inactive"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.66 }
+ bg[ACTIVE] = { 0.60, 0.60, 0.66 }
+ bg[INSENSITIVE] = { 0.60, 0.60, 0.66 }
+ bg[SELECTED] = { 0.60, 0.60, 0.66 }
+ bg[PRELIGHT] = { 0.60, 0.60, 0.66 }
+
+ #font_name = "sans 18"
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+}
+
+style "audio_track_metrics" = "audio_track_base"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_bus_metrics" = "audio_bus_base"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_track_metrics_inactive" = "track_controls_inactive"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "audio_bus_metrics_inactive" = "track_controls_inactive"
+{
+ font_name = "%FONT_TINY%"
+}
+
+style "track_name_display"
+{
+ font_name = "%FONT_NORMAL%"
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ text[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+
+ base[NORMAL] = { 0.80, 0.80, 0.80 }
+ base[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+}
+
+style "active_track_name_display"
+{
+ font_name = "%FONT_NORMAL%"
+ text[NORMAL] = { 0.26, 0.26, 0.26 }
+ base[NORMAL] = { 0.89, 0.89, 0.89 }
+}
+
+style "track_separator"
+{
+ bg[NORMAL] = { 0.35, 0.35, 0.40 }
+}
+
+#
+# Track edit groups. These styles define
+# the colors that the "edit" button will
+# use as a track is moved from
+# track edit group to track edit group.
+# There are 8 edit groups. Edit group 0
+# is used for tracks that are not editable,
+# so we leave its style to the default.
+#
+
+style "edit_group_0"
+
+{
+ bg[ACTIVE] = { 1.0, 0.65, 0.13 }
+ bg[NORMAL] = { 0.31, 0.31, 0.31 }
+ fg[NORMAL] = { 0.82, 0.91, 0.99 }
+ fg[ACTIVE] = { 0, 0, 0 }
+}
+
+style "edit_group_1"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "edit_group_2"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "edit_group_3"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ fg[PRELIGHT] = { 0, 0, 0 }
+ fg[SELECTED] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.93, 0.34, 0.08 }
+ bg[PRELIGHT] = { 0.93, 0.34, 0.08 }
+ bg[SELECTED] = { 0.93, 0.34, 0.08 }
+}
+
+style "treeview_parent_node"
+{
+ # specifies *just* the color used for whole file rows when not selected
+ fg[NORMAL] = { 0.0, 0.0, 1.0 }
+}
+
+style "treeview_display" = "small_bold_text"
+{
+ # expander arrow border and DnD "icon" text
+ fg[NORMAL] = { 0, 0, 0 }
+
+ # background with no rows or no selection, plus
+ # expander arrow core and DnD "icon" background
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+
+ # selected row bg when window does not have focus (including during DnD)
+ base[ACTIVE] = { 0.0, 0.60, 0.60 }
+
+ # selected row bg when window has focus
+ base[SELECTED] = { 0, 0.75, 0.75 }
+
+ # row text when in normal state and not a parent
+ text[NORMAL] = { 0, 0, 0 }
+
+ # selected row text with window focus
+ text[SELECTED] = { 0, 1.0, 1.0 }
+
+ # selected row text without window focus (including during DnD)
+ text[ACTIVE] = { 0, 1.0, 1.0 }
+}
+
+style "main_canvas_area"
+{
+ bg[NORMAL] = { 0.40, 0.40, 0.40 }
+ bg[ACTIVE] = { 0.40, 0.40, 0.40 }
+ bg[INSENSITIVE] = { 0.40, 0.40, 0.40 }
+ bg[SELECTED] = { 0.40, 0.40, 0.40 }
+ bg[PRELIGHT] = { 0.40, 0.40, 0.40 }
+}
+
+style "track_controls_inactive"
+{
+ bg[NORMAL] = { 0.60, 0.60, 0.66 }
+ bg[ACTIVE] = { 0.60, 0.60, 0.66 }
+ bg[INSENSITIVE] = { 0.60, 0.60, 0.66 }
+ bg[SELECTED] = { 0.60, 0.60, 0.66 }
+ bg[PRELIGHT] = { 0.60, 0.60, 0.66 }
+
+ font_name = "%FONT_LARGE%"
+ fg[NORMAL] = { 0.7, 0.8, 0.2 }
+}
+
+style "edit_controls_base_selected"
+{
+ bg[NORMAL] = { 0.60, 0.54, 0.60 }
+ bg[ACTIVE] = { 0.60, 0.54, 0.60 }
+ bg[INSENSITIVE] = { 0.60, 0.54, 0.60 }
+ bg[SELECTED] = { 0.60, 0.54, 0.60 }
+ bg[PRELIGHT] = { 0.60, 0.54, 0.60 }
+}
+
+style "automation_track_controls_base"
+{
+ bg[NORMAL] = { 0.22, 0.22, 0.29 }
+ bg[ACTIVE] = { 0.22, 0.22, 0.29 }
+ bg[INSENSITIVE] = { 0.22, 0.22, 0.29 }
+ bg[SELECTED] = { 0.22, 0.22, 0.29 }
+ bg[PRELIGHT] = { 0.22, 0.22, 0.29 }
+}
+
+# Plugin Editors
+style "plugin_slider"
+{
+ font_name ="%FONT_BOLD_BIG%"
+
+ # the slider itself. the inactive part is INSENSITIVE,
+ # the active part is something else.
+
+ fg[NORMAL] = { 0.37, 0.43, 0.52 }
+ fg[ACTIVE] = { 0.37, 0.43, 0.52 }
+ fg[INSENSITIVE] = {0.35, 0.35, 0.40 } # matches default_base
+ fg[SELECTED] = { 0.37, 0.43, 0.52 }
+ fg[PRELIGHT] = { 0.37, 0.43, 0.52 }
+
+ # draws the outer rectangle around the slider
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = {0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+
+ # the numeric display
+
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.80, 0.80, 0.80 }
+ text[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ text[SELECTED] = { 0.80, 0.80, 0.80 }
+ text[PRELIGHT] = { 0.80, 0.80, 0.80 }
+}
+
+style "track_list_display" = "small_bold_text"
+{
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.3, 0.3, 0.3 }
+ text[INSENSITIVE] = { 0, 0, 0 }
+ text[SELECTED] = { 0.8, 0.8, 0.8 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+}
+
+style "inspector_track_list_display" = "track_list_display"
+{
+ text[ACTIVE] = { 0.8, 0.8, 0.8 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.2, 0.2, 0.2 }
+ base[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.3, 0.3, 0.4 }
+}
+
+style "redirect_list_display"
+{
+ GtkTreeView::horizontal-separator = 0
+ GtkTreeView::vertical-separator = 0
+
+ font_name = "%FONT_SMALL%"
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.70, 0.70, 0.70 }
+ text[INSENSITIVE] = { 0, 0, 0 }
+ text[SELECTED] = { 0.9, 0.3, 0.3 }
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+
+ # these two are explicitly used by the cell renderer for the
+ # text
+
+ fg[NORMAL] = { 0.5, 0.5, 0.5 } # used for inactive
+ fg[ACTIVE] = { 0, 0, 0 } # used for active
+}
+
+style "inspector_redirect_list_display" = "redirect_list_display"
+{
+ base[SELECTED] = { 0.3, 0.3, 0.3 }
+}
+
+# MixerPanZone:
+#
+# the NORMAL fg color is used for the pan puck
+# the ACTIVE fg color is used for the speaker boxes
+
+style "pan_zone" = "default_base"
+{
+ fg[NORMAL] = { 0.34, 0.95, 0.92 }
+ fg[ACTIVE] = { 0.95, 0.48, 0.11 }
+}
+
+style "paler_red_when_active" = "medium_text"
+{
+ fg[NORMAL] = { 0.80, 0.80, 0.80 }
+ fg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[NORMAL] = { 0.31, 0.31, 0.31 }
+ bg[PRELIGHT] = { 0.31, 0.31, 0.31 }
+
+ fg[ACTIVE] = { 0.36, 0.46, 0.28 }
+ bg[ACTIVE] = { 1.00, 0.59, 0.59}
+}
+
+style "peak_display_peaked_entry" = "small_text"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ fg[ACTIVE] = { 1.0, 1.0, 1.0 }
+ fg[SELECTED] = { 1.0, 1.0, 1.0 }
+
+ bg[NORMAL] = {0.9, 0.0, 0.0 }
+ bg[ACTIVE] = { 0.9, 0.0, 0.0 }
+ bg[PRELIGHT] = { 0.9, 0.0, 0.0 }
+ bg[INSENSITIVE] = { 0.9, 0.0, 0.0 }
+ bg[SELECTED] = { 0.9, 0.0, 0.0 }
+ base[NORMAL] = { 0.9, 0.0, 0.0 }
+ base[ACTIVE] = { 0.9, 0.0, 0.0 }
+ base[PRELIGHT] = { 0.9, 0.0, 0.0 }
+ base[INSENSITIVE] = { 0.9, 0.0, 0.0 }
+ base[SELECTED] = { 0.9, 0.0, 0.0 }
+}
+
+style "selected_strip_frame"
+{
+ fg[NORMAL] = { 0.74, 0.42, 0.47 }
+ bg[NORMAL] = { 0.79, 0.28, 0.18 }
+}
+
+style "flashing_alert" = "very_small_text"
+{
+ fg[NORMAL] = { 0, 0, 0 }
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+
+ fg[ACTIVE] = { 0, 0, 0 }
+ bg[ACTIVE] = { 1.0, 0, 0}
+}
+
+style "selected_io_selector_port_list" = "medium_bold_text"
+{
+
+ GtkTreeView::even-row-color = { 0.70, 0.70, 0.70 }
+ GtkTreeView::odd-row-color = { 0.70, 0.70, 0.70 }
+
+# fg is used to color the fg (text) of the column header button
+
+ fg[NORMAL] = { 0.30, 0.30, 0.35 }
+ fg[SELECTED] = { 0.30, 0.30, 0.35 }
+ fg[ACTIVE] = { 0.30, 0.30, 0.35 }
+ fg[PRELIGHT] = { 0.30, 0.30, 0.35 }
+ fg[INSENSITIVE] = { 0.30, 0.30, 0.35 }
+
+# bg is used used to color the background of the column header button
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+
+# text is used to color the treeview row text
+
+ text[NORMAL] = { 0.30, 0.30, 0.35 }
+ text[SELECTED] = { 0.30, 0.30, 0.35 }
+
+# base is used to color a treeview with no rows
+
+ base[NORMAL] = { 0.70, 0.70, 0.70 }
+ base[ACTIVE] = { 0.70, 0.70, 0.70 }
+ base[PRELIGHT] = { 0.70, 0.70, 0.70 }
+ base[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ base[SELECTED] = { 0.70, 0.70, 0.70 }
+
+}
+
+style "io_selector_port_list" = "medium_text"
+{
+ GtkTreeView::even-row-color = { 0.70, 0.70, 0.70 }
+ GtkTreeView::odd-row-color = { 0.70, 0.70, 0.70 }
+# fg is used to color the fg (text) of the column header button
+
+ fg[NORMAL] = { 0.30, 0.30, 0.35 }
+ fg[SELECTED] = { 0.30, 0.30, 0.35 }
+ fg[ACTIVE] = { 0.30, 0.30, 0.35 }
+ fg[PRELIGHT] = { 0.30, 0.30, 0.35 }
+ fg[INSENSITIVE] = { 0.30, 0.30, 0.35 }
+
+# bg is used used to color the background of the column header button
+
+ bg[NORMAL] = { 0.80, 0.80, 0.80 }
+ bg[ACTIVE] = { 0.80, 0.80, 0.80 }
+ bg[PRELIGHT] = { 0.80, 0.80, 0.80 }
+ bg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
+ bg[SELECTED] = { 0.80, 0.80, 0.80 }
+
+# text is used to color the treeview row text
+
+ text[NORMAL] = { 0.30, 0.30, 0.35 }
+ text[SELECTED] = { 0.30, 0.30, 0.35 }
+
+# base is used to color a treeview with no rows
+
+ base[NORMAL] = { 0.20, 0.20, 0.25 }
+ base[ACTIVE] = { 0.20, 0.20, 0.25 }
+ base[PRELIGHT] = { 0.20, 0.20, 0.25 }
+ base[INSENSITIVE] = { 0.20, 0.20, 0.25 }
+ base[SELECTED] = { 0.20, 0.20, 0.25 }
+}
+
+style "io_selector_notebook" = "default_base"
+{
+ fg[NORMAL] = { 1.0, 1.0, 1.0 }
+ font_name ="%FONT_BOLD_NORMAL%"
+}
+
+style "tearoff_arrow" = "medium_bold_entry"
+{
+ fg[NORMAL] = { 0.30, 0.30, 0.30 }
+ fg[PRELIGHT] = { 0.30, 0.30, 0.30 }
+ bg[NORMAL] = { 0.30, 0.30, 0.30 }
+ bg[PRELIGHT] = { 0.30, 0.30, 0.30 }
+}
+
+style "location_row_button" = "default_button"
+{
+ font_name = "%FONT_NORMAL%"
+}
+
+style "location_rows_clock" = "default_clock_display"
+{
+ font_name = "%FONT_BIG%"
+}
+
+style "pan_slider"
+{
+ font_name = "%FONT_NORMAL%"
+
+ fg[NORMAL] = { 0.22, 0.73, 0.22 }
+ fg[ACTIVE] = { 0.22, 0.73, 0.22 }
+ fg[INSENSITIVE] = {0.22, 0.53, 0.22 }
+ fg[SELECTED] = { 0.67, 0.23, 0.22 }
+ fg[PRELIGHT] = { 0.67, 0.23, 0.22 }
+
+ bg[NORMAL] = { 0.05, 0.05, 0.05 }
+ bg[ACTIVE] = { 0, 0, 0 }
+ bg[INSENSITIVE] = {0.12, 0.19, 0.25 }
+ bg[SELECTED] = { 0, 0, 0 }
+ bg[PRELIGHT] = { 0, 0, 0 }
+
+ text[NORMAL] = { 0.70, 0.70, 0.70 }
+ text[ACTIVE] = { 0.70, 0.70, 0.70 }
+ text[INSENSITIVE] = { 0.70, 0.70, 0.70 }
+ text[SELECTED] = { 0.70, 0.70, 0.70 }
+ text[PRELIGHT] = { 0.70, 0.70, 0.70 }
+
+ # used to draw the triangular indicators
+
+ base[NORMAL] = { 0.80, 0.80, 0.80 }
+ base[ACTIVE] = { 0.80, 0.80, 0.80 }
+ base[INSENSITIVE] = {0.6, 0.6, 0.6 }
+ base[SELECTED] = { 0.80, 0.80, 0.80 }
+ base[PRELIGHT] = { 0.80, 0.80, 0.80 }
+
+}
+
+style "ardour_button" ="default_button"
+{
+ xthickness = 1
+ ythickness = 1
+}
+
+#---------------------------------------------------------------
+
+class "GtkWidget" style:highest "default_base"
+class "GtkScrollbar" style:highest "ardour_adjusters"
+class "GtkLabel" style:highest "default_generic"
+class "GtkButton" style:highest "ardour_button"
+class "GtkArrow" style:highest "tearoff_arrow"
+class "GtkProgressBar" style:highest "ardour_progressbars"
+
+widget "*FirstActionMessage" style:highest "first_action_message"
+widget "*VerboseCanvasCursor" style:highest "verbose_canvas_cursor"
+widget "*MarkerText" style:highest "marker_text"
+widget "*TimeAxisViewItemName*" style:highest "time_axis_view_item_name"
+#widget "*ExportProgress" style:highest "default_generic"
+widget "*ExportFileLabel" style:highest "small_bold_text"
+widget "*ExportFormatLabel" style:highest "medium_bold_text"
+widget "*ExportHeader" style:highest "small_bold_text"
+widget "*ExportFileDisplay" style:highest "medium_entry"
+widget "*ExportFormatDisplay" style:highest "medium_entry"
+widget "*ExportCheckbox" style:highest "small_entry"
+widget "*ExportTrackSelector*" style:highest "medium_entry_noselection_bg"
+widget "*EditModeSelector" style:highest "medium_bold_entry"
+widget "*SnapTypeSelector" style:highest "medium_bold_entry"
+widget "*SnapModeSelector" style:highest "medium_bold_entry"
+widget "*ZoomFocusSelector" style:highest "medium_bold_entry"
+widget "*ArdourContextMenu*" style:highest "default_menu"
+widget "*EditGroupTitleButton*" style:highest "default_button"
+widget "*MixerGroupTitleButton*" style:highest "default_button"
+widget "*ErrorLogCloseButton" style:highest "default_button"
+widget "*EditorGTKButton*" style:highest "default_button"
+widget "*ToolbarButton" style:highest "default_button"
+widget "*ToolbarButton*" style:highest "default_button"
+widget "*CrossfadeEditButton" style:highest "default_button"
+widget "*CrossfadeEditButton*" style:highest "default_button"
+widget "*TrackHistoryButton*" style:highest "default_button"
+widget "*TrackSizeButton*" style:highest "default_button"
+widget "*TrackPlaylistButton*" style:highest "default_button"
+widget "*TrackAutomationButton*" style:highest "default_button"
+widget "*TrackGroupButton*" style:highest "default_button"
+widget "*TrackMixButton*" style:highest "default_button"
+widget "*TrackVisualButton*" style:highest "default_button"
+widget "*TrackRemoveButton*" style:highest "default_button"
+widget "*BaseButton" style:highest "default_button"
+widget "*TakeButtonLabel" style:highest "default_generic"
+widget "*MixerWidthButton" style:highest "default_button"
+widget "*MixerHideButton" style:highest "default_button"
+widget "*MixerSendButton" style:highest "default_button"
+widget "*MixerSendButtonLabel" style:highest "default_button"
+widget "*MixerSendSwitch" style:highest "default_button"
+widget "*MixerInsertButton" style:highest "default_button"
+widget "*MixerInsertButtonLabel" style:highest "default_button"
+widget "*MixerInsertSwitch" style:highest "default_button"
+widget "*MixerMonitorInputButton*" style:highest "very_small_button"
+widget "*MixerMonitorInputButton.*" style:highest "very_small_button"
+widget "*MixerIOButton" style:highest "very_small_button"
+widget "*MixerIOButtonLabel" style:highest "very_small_button"
+widget "*AddRouteDialogSpinner" style:highest "ardour_adjusters"
+widget "*AddRouteDialogRadioButton*" style:highest "preferences"
+widget "*OptionsNotebook" style:highest "preferences"
+widget "*OptionEditorToggleButton*" style:highest "preferences"
+widget "*OptionsLabel" style:highest "preferences"
+widget "*OptionEditorAuditionerLabel" style:highest "preferences"
+widget "*OptionsEntry" style:highest "option_entry"
+widget "*InspectorNotebook" style:highest "preferences"
+widget "*NewSessionDialog" style:highest "preferences"
+widget "*NewSessionDialogButton*" style:highest "preferences"
+widget "*MixerSendSwitch*" style:highest "very_small_red_active_and_selected_button"
+widget "*OptionEditorToggleButton" style:highest "small_red_active_and_selected_button"
+widget "*NewSessionDialogButton" style:highest "small_red_active_and_selected_button"
+widget "*RecordEnableButton" style:highest "track_rec_enable_button"
+widget "*RecordEnableButton-active" style:highest "track_rec_enable_button_active"
+widget "*RecordEnableButton-alternate" style:highest "track_rec_enable_button_alternate"
+widget "*MixerRecordEnableButton" style:highest "mixer_track_rec_enable_button"
+widget "*MixerRecordEnableButton-active" style:highest "mixer_track_rec_enable_button_active"
+widget "*MixerRecordEnableButton-alternate" style:highest "mixer_track_rec_enable_button_alternate"
+widget "*MuteButton" style:highest "mute_button"
+widget "*MuteButton-alternate" style:highest "mute_button_alternate"
+widget "*MuteButton-active" style:highest "mute_button_active"
+widget "*MixerMuteButton" style:highest "mixer_mute_button"
+widget "*MixerMuteButton-alternate" style:highest "mixer_mute_button_alternate"
+widget "*MixerMuteButton-active" style:highest "mixer_mute_button_active"
+widget "*SoloButton" style:highest "solo_button"
+widget "*SoloButton-alternate" style:highest "solo_button_alternate"
+widget "*SoloButton-active" style:highest "solo_button_active"
+widget "*MixerSoloButton" style:highest "mixer_solo_button"
+widget "*MixerSoloButton-alternate" style:highest "mixer_solo_button_alternate"
+widget "*MixerSoloButton-active" style:highest "mixer_solo_button_active"
+widget "*TrackLoopButton*" style:highest "track_loop_button"
+widget "*PanAutomationLineSelector*" style:highest "multiline_combo"
+widget "*EditorTimeButton*" style:highest "time_button"
+widget "*MixerPhaseInvertButton*" style:highest "very_small_button"
+widget "*MixerPhaseInvertButton.*" style:highest "very_small_button"
+widget "*MixerAutomationRecordingButton*" style:highest "very_small_button"
+widget "*MixerAutomationRecordingButton.*" style:highest "very_small_button"
+widget "*MixerAutomationModeButton*" style:highest "very_small_button"
+widget "*MixerAutomationModeButton.*" style:highest "very_small_button"
+widget "*MixerAutomationPlaybackButton*" style:highest "very_small_button"
+widget "*MixerAutomationPlaybackButton.*" style:highest "very_small_button"
+widget "*MixerNameButton" style:highest "very_small_button"
+widget "*MixerNameButtonLabel" style:highest "very_small_button"
+widget "*MixerGroupButton" style:highest "very_small_button"
+widget "*MixerGroupButtonLabel" style:highest "very_small_button"
+widget "*MixerCommentButton" style:highest "very_small_button"
+widget "*MixerCommentButton*" style:highest "very_small_button"
+widget "*EditGroupButton" style:highest "very_small_button"
+widget "*EditGroupButtonLabel" style:highest "very_small_button"
+widget "*TransportButton" style:highest "transport_rec_button"
+widget "*TransportButton-active" style:highest "transport_button_active"
+widget "*ShuttleButton" style:highest "transport_button"
+widget "*ShuttleButton*" style:highest "transport_button"
+widget "*ShuttleDisplay" style:highest "transport_button"
+widget "*ShuttleDisplay*" style:highest "transport_button"
+widget "*ShuttleControl" style:highest "shuttle_control"
+widget "*TransportRecButton" style:highest "transport_rec_button"
+widget "*TransportRecButton*" style:highest "transport_rec_button"
+widget "*TransportRecButton-active" style:highest "transport_rec_button_active"
+widget "*TransportRecButton-active*" style:highest "transport_rec_button_active"
+widget "*TransportRecButton-alternate" style:highest "transport_rec_button_alternate"
+widget "*TransportRecButton-alternate*" style:highest "transport_rec_button_alternate"
+widget "*TransportRecButton*" style:highest "transport_rec_button"
+widget "*RecordingXrunWarningWindow" style:highest "xrun_warn"
+widget "*RecordingXrunWarningWindow*" style:highest "xrun_warn"
+/*widget "*MainMenuBar" style:highest "menu_bar_base"*/
+widget "*ErrorMessage" style:highest "error_message"
+widget "*FatalMessage" style:highest "fatal_message"
+widget "*InfoMessage" style:highest "info_message"
+widget "*WarningMessage" style:highest "warning_message"
+widget "*BigClockNonRecording" style:highest "non_recording_big_clock_display"
+widget "*BigClockRecording" style:highest "recording_big_clock_display"
+widget "*TransportClockDisplay" style:highest "transport_clock_display"
+widget "*SecondaryClockDisplay" style:highest "transport_clock_display"
+widget "*TransportClockDisplayDelta" style:highest "transport_clock_display_delta"
+widget "*SecondaryClockDisplayDelta" style:highest "transport_clock_display_delta"
+widget "*AudioClockFramesUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockFramesLowerInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockSMPTEUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockSMPTELowerInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockBBTUpperInfo" style:highest "tempo_meter_clock_display"
+widget "*AudioClockBBTLowerInfo" style:highest "tempo_meter_clock_display"
+widget "*SelectionStartClock" style:highest "default_clock_display"
+widget "*SelectionEndClock" style:highest "default_clock_display"
+widget "*EditPointClock" style:highest "default_clock_display"
+widget "*PreRollClock" style:highest "default_clock_display"
+widget "*PostRollClock" style:highest "default_clock_display"
+widget "*NudgeClock" style:highest "default_clock_display"
+widget "*InsertTimeClock" style:highest "default_clock_display"
+widget "*ZoomRangeClock" style:highest "default_clock_display"
+widget "*SMPTEOffsetClock" style:highest "default_clock_display"
+widget "*TransportLabel" style:highest "small_bold_text"
+widget "*TakeLabel" style:highest "small_bold_text"
+widget "*LocationLabel" style:highest "small_bold_text"
+widget "*WipeLabel" style:highest "small_bold_text"
+widget "*TakeTagLabel" style:highest "small_bold_text"
+widget "*ToolBarLabel" style:highest "small_bold_text"
+widget "*EditorDisplayLabel" style:highest "small_bold_text"
+widget "*NewSessionLabel" style:highest "large_text"
+widget "*GlobalButtonLabel" style:highest "default_generic"
+widget "*ClickButton" style:highest "medium_entry"
+widget "*RegionNameDisplay" style:highest "medium_entry"
+widget "*PluginDisplay" style:highest "medium_entry"
+widget "*SelectionDisplay" style:highest "medium_entry"
+widget "*HistorySelector" style:highest "medium_entry"
+widget "*LocationSelector" style:highest "medium_entry"
+widget "*TakeSelector" style:highest "medium_entry"
+widget "*RegionSelector" style:highest "medium_entry"
+widget "*SMPTERuler" style:highest "editor_time_ruler"
+widget "*BBTRuler" style:highest "editor_time_ruler"
+widget "*FramesRuler" style:highest "editor_time_ruler"
+widget "*MinSecRuler" style:highest "editor_time_ruler"
+widget "*BaseFrame" style:highest "base_frame"
+
+widget "*AudioTrackStripBase" style:highest "audio_track_base"
+widget "*AudioBusStripBase" style:highest "audio_bus_base"
+widget "*MidiTrackStripBase" style:highest "midi_track_base"
+widget "*AudioTrackStripBaseInactive" style:highest "track_controls_inactive"
+widget "*AudioBusStripBaseInactive" style:highest "track_controls_inactive"
+widget "*MidiTrackStripBaseInactive" style:highest "track_controls_inactive"
+widget "*FaderMetricsStrip" style:highest "audio_track_metrics"
+widget "*AudioTrackMetrics" style:highest "audio_track_metrics"
+widget "*AudioBusMetrics" style:highest "audio_bus_metrics"
+widget "*AudioTrackMetricsInactive" style:highest "audio_track_metrics_inactive"
+widget "*AudioBusMetricsInactive" style:highest "audio_bus_metrics_inactive"
+
+widget "*TimeAxisViewControlsBaseUnselected" style:highest "audio_track_base"
+widget "*AudioTrackControlsBaseUnselected" style:highest "audio_track_base"
+widget "*MidiTrackControlsBaseUnselected" style:highest "midi_track_base"
+widget "*AudioTrackFader" style:highest "gain_fader"
+
+widget "*BusControlsBaseUnselected" style:highest "audio_bus_base"
+widget "*AudioBusFader" style:highest "gain_fader"
+widget "*TrackSeparator" style:highest "track_separator"
+widget "*TrackEditIndicator0*" style:highest "edit_group_0"
+widget "*TrackEditIndicator1*" style:highest "edit_group_1"
+widget "*TrackEditIndicator2*" style:highest "edit_group_2"
+widget "*TrackEditIndicator3*" style:highest "edit_group_3"
+widget "*TrackEditIndicator4*" style:highest "edit_group_3"
+widget "*TrackEditIndicator5*" style:highest "edit_group_3"
+widget "*TrackEditIndicator6*" style:highest "edit_group_3"
+widget "*TrackEditIndicator7*" style:highest "edit_group_3"
+widget "*EditorTrackNameDisplay" style:highest "track_name_display"
+widget "*EditorTrackNameDisplay*" style:highest "track_name_display"
+widget "*EditorActiveTrackNameDisplay" style:highest "active_track_name_display"
+widget "*EditorActiveTrackNameDisplay*" style:highest "active_track_name_display"
+widget "*CrossfadeEditAuditionButton" style:highest "red_when_active"
+widget "*CrossfadeEditAuditionButton*" style:highest "red_when_active"
+widget "*CrossfadeEditCurveButton" style:highest "red_when_active"
+widget "*CrossfadeEditCurveButton*" style:highest "red_when_active"
+widget "*CrossfadeEditLabel" style:highest "medium_text"
+widget "*CrossfadeEditFrame" style:highest "base_frame"
+widget "*MouseModeButton" style:highest "default_button"
+widget "*MouseModeButton*" style:highest "default_button"
+widget "*EditorMainCanvas" style:highest "main_canvas_area"
+widget "*AudioTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*BusControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*AutomationTrackControlsBaseInactiveUnselected" style:highest "track_controls_inactive"
+widget "*AutomationTrackName" style:highest "automation_track_name"
+widget "*AudioTrackControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*BusControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*AutomationTrackControlsBaseInactiveSelected" style:highest "track_controls_inactive"
+widget "*AudioTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*MidiTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*BusControlsBaseSelected" style:highest "edit_controls_base_selected"
+widget "*AutomationTrackControlsBase" style:highest "automation_track_controls_base"
+widget "*AutomationTrackControlsBaseSelected" style:highest "edit_controls_base_selected"
+/*widget "*EditorMenuBar*" style:highest "black_mackie_menu_bar"
+widget "*MainMenuBar*" style:highest "black_mackie_menu_bar"
+*/
+widget "*ZoomClickBox" style:highest "medium_bold_entry"
+widget "*PluginParameterLabel" style:highest "medium_text"
+widget "*PluginNameInfo" style:highest "plugin_name_text"
+widget "*PluginMakerInfo" style:highest "plugin_maker_text"
+widget "*PluginParameterInfo" style:highest "medium_text"
+widget "*MotionControllerValue" style:highest "medium_entry"
+widget "*ParameterValueDisplay" style:highest "medium_bold_entry"
+widget "*PluginUIClickBox" style:highest "medium_bold_entry"
+widget "*PluginUIClickBox*" style:highest "medium_bold_entry"
+widget "*PluginSlider" style:highest "plugin_slider"
+widget "*RedirectSelector" style:highest "redirect_list_display"
+widget "*RedirectSelector.*" style:highest "redirect_list_display"
+widget "*EditGroupDisplay" style:highest "treeview_display"
+widget "*TrackListDisplay" style:highest "treeview_display"
+widget "*RegionListDisplay" style:highest "treeview_display"
+widget "*NamedSelectionDisplay" style:highest "treeview_display"
+widget "*SnapshotDisplay" style:highest "treeview_display"
+widget "*MixerTrackCommentArea" style:highest "option_entry"
+widget "*MixerPanZone" style:highest "pan_zone"
+widget "*MixerTrackDisplayList" style:highest "treeview_display"
+widget "*MixerSnapshotDisplayList" style:highest "treeview_display"
+widget "*MixerAuxDisplayList" style:highest "treeview_display"
+widget "*MixerGroupList" style:highest "treeview_display"
+widget "*RegionEditorLabel" style:highest "medium_text"
+widget "*RegionEditorSmallLabel" style:highest "small_text"
+widget "*RegionEditorEntry" style:highest "medium_entry"
+widget "*RegionEditorClock" style:highest "default_clock_display"
+widget "*RegionEditorToggleButton" style:highest "paler_red_when_active"
+widget "*RegionEditorToggleButton*" style:highest "paler_red_when_active"
+widget "*MixerStripSpeedBase" style:highest "small_entry"
+widget "*MixerStripSpeedBase*" style:highest "small_entry"
+widget "*MixerStripSpeedBaseNotOne" style:highest "small_red_on_black_entry"
+widget "*MixerStripSpeedBaseNotOne*" style:highest "small_red_on_black_entry"
+widget "*MixerStripGainDisplay" style:highest "small_entry"
+widget "*MixerStripGainDisplay*" style:highest "small_entry"
+widget "*MixerStripGainUnitButton" style:highest "very_small_button"
+widget "*MixerStripGainUnitButton*" style:highest "very_small_button"
+widget "*MixerStripMeterPreButton" style:highest "very_small_button"
+widget "*MixerStripMeterPreButton*" style:highest "very_small_button"
+widget "*MixerStripPeakDisplay*" style:highest "red_active_small_entry"
+widget "*MixerStripPeakDisplayPeak*" style:highest "peak_display_peaked_entry"
+widget "*MixerStripSelectedFrame" style:highest "selected_strip_frame"
+widget "*MixerStripFrame" style:highest "base_frame"
+widget "*HWMonitorButton" style:highest "red_when_active"
+widget "*HWMonitorButton*" style:highest "red_when_active"
+widget "*TransportSoloAlert" style:highest "flashing_alert"
+widget "*TransportSoloAlert.*" style:highest "flashing_alert"
+widget "*TransportAuditioningAlert" style:highest "flashing_alert"
+widget "*TransportAuditioningAlert.*" style:highest "flashing_alert"
+widget "*FadeCurve" style:highest "medium_bold_entry"
+widget "*FadeCurve*" style:highest "medium_bold_entry"
+widget "*IOSelectorButton" style:highest "default_button"
+widget "*IOSelectorButton*" style:highest "default_button"
+widget "*IOSelectorList" style:highest "medium_entry_noselection_fg"
+widget "*IOSelectorPortList" style:highest "io_selector_port_list"
+widget "*IOSelectorPortList.*" style:highest "io_selector_port_list"
+widget "*IOSelectorPortListSelected" style:highest "selected_io_selector_port_list"
+widget "*IOSelectorPortListSelected.*" style:highest "selected_io_selector_port_list"
+widget "*IOSelectorNotebook" style:highest "io_selector_notebook"
+widget "*IOSelectorNotebookTab" style:highest "io_selector_notebook"
+widget "*IOSelectorFrame" style:highest "base_frame"
+widget "*ConnectionEditorButton" style:highest "default_button"
+widget "*ConnectionEditorButton*" style:highest "default_button"
+widget "*ConnectionEditorList" style:highest "medium_entry_noselection_fg"
+widget "*ConnectionEditorConnectionList" style:highest "medium_entry"
+widget "*ConnectionEditorPortList" style:highest "io_selector_port_list"
+widget "*ConnectionEditorPortListSelected" style:highest "selected_io_selector_port_list"
+widget "*ConnectionEditorNotebook" style:highest "io_selector_notebook"
+widget "*ConnectionEditorNotebookTab" style:highest "io_selector_notebook"
+widget "*ConnectionEditorFrame" style:highest "base_frame"
+widget "*RouteParamsListDisplay" style:highest "inspector_track_list_display"
+widget "*RouteParamsPreListDisplay" style:highest "inspector_redirect_list_display"
+widget "*RouteParamsPostListDisplay" style:highest "inspector_redirect_list_display"
+widget "*TearOffArrow" style:highest "tearoff_arrow"
+widget "*RouteParamsTitleButton" style:highest "medium_text"
+widget "*RouteParamsTitleLabel" style:highest "medium_text"
+widget "*PluginAutomateRecordButton" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomateRecordButton*" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomatePlayButton" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomatePlayButton*" style:highest "small_red_active_and_selected_button"
+widget "*PluginAutomateButton" style:highest "small_button"
+widget "*PluginAutomateButton*" style:highest "small_button"
+widget "*PluginSaveButton" style:highest "small_button"
+widget "*PluginSaveButton*" style:highest "small_button"
+widget "*PluginLoadButton" style:highest "small_button"
+widget "*PluginLoadButton*" style:highest "small_button"
+
+widget "*MetricDialogFrame" style:highest "base_frame"
+widget "*MetricEntry" style:highest "medium_bold_entry"
+widget "*MetricButton" style:highest "default_button"
+widget "*MetricButton.*" style:highest "default_button"
+widget "*MetricLabel" style:highest "medium_text"
+widget "*TimeStretchButton" style:highest "default_button"
+widget "*TimeStretchButton.*" style:highest "default_button"
+widget "*TimeStretchProgress" style:highest "default_button"
+widget "*ChoiceWindow" style:highest "default_generic"
+widget "*ChoicePrompt" style:highest "default_generic"
+widget "*ChoiceButton" style:highest "default_button"
+widget "*ChoiceButton*" style:highest "default_button"
+widget "*SelectionModeButton" style:highest "default_button"
+widget "*SelectionModeButton*" style:highest "default_button"
+widget "*TrackLabel" style:highest "medium_text"
+widget "*TrackPlugName" style:highest "medium_text"
+widget "*TrackParameterName" style:highest "small_text"
+widget "*AddRouteDialog*" style:highest "medium_text"
+widget "*AddRouteDialog.GtkLabel" style:highest "medium_text"
+widget "*AddRouteDialogChannelChoice" style:highest "medium_bold_entry"
+widget "*AddRouteDialogSpinner" style:highest "medium_bold_entry"
+widget "*AddRouteDialogSpinner*" style:highest "medium_bold_entry"
+widget "*AddRouteDialogRadioButton" style:highest "red_when_active"
+widget "*AddRouteDialogButton" style:highest "default_button"
+widget "*AddRouteDialogNameTemplateEntry" style:highest "medium_bold_entry"
+widget "*NewSessionIOLabel" style:highest "larger_bold_text"
+widget "*NewSessionSR1Label" style:highest "red_medium_text"
+widget "*NewSessionSR2Label" style:highest "medium_text"
+widget "*NewSessionChannelChoice" style:highest "medium_bold_entry"
+widget "*NewSessionMainButton" style:highest "larger_bold_text"
+widget "*NewSessionMainButton*" style:highest "larger_bold_text"
+widget "*NewSessionMainLabel" style:highest "larger_bold_text"
+widget "*LocationEditRowClock" style:highest "location_rows_clock"
+widget "*LocationEditNameLabel" style:highest "medium_text"
+widget "*LocationEditSetButton" style:highest "location_row_button"
+widget "*LocationEditSetButton*" style:highest "location_row_button"
+widget "*LocationEditGoButton" style:highest "location_row_button"
+widget "*LocationEditGoButton*" style:highest "location_row_button"
+widget "*LocationEditCdButton" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditCdButton*" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditHideButton" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditHideButton*" style:highest "small_red_active_and_selected_button"
+widget "*LocationEditNumberLabel" style:highest "small_text"
+widget "*LocationLocEditorFrame" style:highest "base_frame"
+widget "*LocationRangeEditorFrame" style:highest "base_frame"
+widget "*LocationEditNameEntry" style:highest "option_entry"
+widget "*LocationAddLocationButton" style:highest "default_button"
+widget "*LocationAddLocationButton*" style:highest "default_button"
+widget "*LocationAddRangeButton" style:highest "default_button"
+widget "*LocationAddRangeButton*" style:highest "default_button"
+widget "*LocationEditRemoveButton" style:highest "location_row_button"
+widget "*LocationEditRemoveButton*" style:highest "location_row_button"
+widget "*PanSlider" style:highest "pan_slider"
+widget "*PanningLinkButton" style:highest "mixer_red_active_button"
+widget "*PanningLinkButton.*" style:highest "mixer_red_active_button"
+widget "*PanningLinkDirectionButton" style:highest "very_small_button"
+widget "*PanningLinkDirectionButton.*" style:highest "very_small_button"
+widget "*ChannelCountSelector" style:highest "medium_bold_entry"
+widget "*ChannelCountSelector.GtkArrow" style:highest "default_generic"
+widget "*RegionListWholeFile" style:highest "treeview_parent_node"
+widget "*EditorHScrollbar" style:highest "editor_hscrollbar"
+widget "*ResizerHandler" style:highest "resizer_handle"
diff --git a/gtk2_ardour/ardour_dialog.cc b/gtk2_ardour/ardour_dialog.cc
index 43fdf85c94..c3d238a9c0 100644
--- a/gtk2_ardour/ardour_dialog.cc
+++ b/gtk2_ardour/ardour_dialog.cc
@@ -18,6 +18,7 @@
*/
#include <iostream>
+#include <sigc++/bind.h>
#include <gtkmm2ext/doi.h>
@@ -25,6 +26,13 @@
#include "keyboard.h"
#include "ardour_ui.h"
#include "splash.h"
+#include "public_editor.h"
+#include "utils.h"
+
+using namespace sigc;
+using namespace Gtk;
+
+sigc::signal<void> ArdourDialog::CloseAllDialogs;
ArdourDialog::ArdourDialog (string title, bool modal, bool use_seperator)
: Dialog (title, modal, use_seperator)
@@ -60,6 +68,7 @@ ArdourDialog::on_leave_notify_event (GdkEventCrossing *ev)
void
ArdourDialog::on_unmap ()
{
+ Keyboard::the_keyboard().leave_window (0, this);
Dialog::on_unmap ();
}
@@ -77,9 +86,17 @@ ArdourDialog::on_show ()
Dialog::on_show ();
}
-void ArdourDialog::init ()
+void
+ArdourDialog::init ()
{
session = 0;
set_type_hint(Gdk::WINDOW_TYPE_HINT_DIALOG);
set_border_width (10);
+ CloseAllDialogs.connect (bind (mem_fun (*this, &ArdourDialog::response), RESPONSE_CANCEL));
+}
+
+bool
+ArdourDialog::on_key_press_event (GdkEventKey* key)
+{
+ return Gtk::Dialog::on_key_press_event (key);
}
diff --git a/gtk2_ardour/ardour_dialog.h b/gtk2_ardour/ardour_dialog.h
index b2c531b0d0..44c731b36c 100644
--- a/gtk2_ardour/ardour_dialog.h
+++ b/gtk2_ardour/ardour_dialog.h
@@ -40,6 +40,9 @@ class ArdourDialog : public Gtk::Dialog
ArdourDialog (Gtk::Window& parent, std::string title, bool modal = false, bool use_separator = false);
~ArdourDialog();
+ static int close_all_current_dialogs (int response);
+
+ bool on_key_press_event (GdkEventKey *);
bool on_enter_notify_event (GdkEventCrossing*);
bool on_leave_notify_event (GdkEventCrossing*);
void on_unmap ();
@@ -55,8 +58,12 @@ class ArdourDialog : public Gtk::Dialog
set_session (0);
}
+ static void close_all_dialogs () { CloseAllDialogs(); }
+
private:
void init ();
+
+ static sigc::signal<void> CloseAllDialogs;
};
#endif // __ardour_dialog_h__
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 44280a3109..3376d1c8da 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -211,6 +211,15 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
session_loaded = false;
last_speed_displayed = -1.0f;
ignore_dual_punch = false;
+ _mixer_on_top = false;
+
+ roll_button.unset_flags (Gtk::CAN_FOCUS);
+ stop_button.unset_flags (Gtk::CAN_FOCUS);
+ goto_start_button.unset_flags (Gtk::CAN_FOCUS);
+ goto_end_button.unset_flags (Gtk::CAN_FOCUS);
+ auto_loop_button.unset_flags (Gtk::CAN_FOCUS);
+ play_selection_button.unset_flags (Gtk::CAN_FOCUS);
+ rec_button.unset_flags (Gtk::CAN_FOCUS);
last_configure_time= 0;
@@ -352,11 +361,12 @@ ARDOUR_UI::post_engine ()
/* set default clock modes */
if (Profile->get_sae()) {
- primary_clock.set_mode (AudioClock::MinSec);
+ primary_clock.set_mode (AudioClock::BBT);
+ secondary_clock.set_mode (AudioClock::MinSec);
} else {
primary_clock.set_mode (AudioClock::SMPTE);
+ secondary_clock.set_mode (AudioClock::BBT);
}
- secondary_clock.set_mode (AudioClock::BBT);
/* start the time-of-day-clock */
@@ -640,7 +650,7 @@ void
ARDOUR_UI::startup ()
{
string name, path;
-
+
new_session_dialog = new NewSessionDialog();
bool backend_audio_is_running = EngineControl::engine_running();
@@ -762,6 +772,7 @@ If you still wish to quit, please use the\n\n\
session->set_deletion_in_progress ();
}
+ ArdourDialog::close_all_dialogs ();
engine->stop (true);
save_ardour_state ();
quit ();
@@ -1980,14 +1991,6 @@ ARDOUR_UI::transport_rec_enable_blink (bool onoff)
}
}
-gint
-ARDOUR_UI::hide_and_quit (GdkEventAny *ev, ArdourDialog *window)
-{
- window->hide();
- Gtk::Main::quit ();
- return TRUE;
-}
-
void
ARDOUR_UI::save_template ()
@@ -2242,7 +2245,7 @@ ARDOUR_UI::loading_message (const std::string& msg)
splash->message (msg);
flush_pending ();
}
-
+
void
ARDOUR_UI::idle_load (const Glib::ustring& path)
{
@@ -2255,11 +2258,16 @@ ARDOUR_UI::idle_load (const Glib::ustring& path)
load_session (Glib::path_get_dirname (path), basename_nosuffix (path));
}
} else {
+
ARDOUR_COMMAND_LINE::session_name = path;
+
if (new_session_dialog) {
+
+
/* make it break out of Dialog::run() and
start again.
*/
+
new_session_dialog->response (1);
}
}
@@ -2329,6 +2337,9 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be
case Gtk::RESPONSE_CANCEL:
case Gtk::RESPONSE_DELETE_EVENT:
if (!session) {
+ if (engine && engine->running()) {
+ engine->stop (true);
+ }
quit();
}
new_session_dialog->hide ();
@@ -2381,7 +2392,7 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be
if (session_name[0] == '/' ||
(session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') ||
(session_name.length() > 3 && session_name[0] == '.' && session_name[1] == '.' && session_name[2] == '/')) {
-
+
session_path = Glib::path_get_dirname (session_name);
session_name = Glib::path_get_basename (session_name);
@@ -2439,7 +2450,7 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be
loadit:
new_session_dialog->hide ();
-
+
if (load_session (session_path, session_name, template_name)) {
/* force a retry */
response = Gtk::RESPONSE_NONE;
@@ -2519,10 +2530,10 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na
MessageDialog msg (err.what(),
true,
Gtk::MESSAGE_INFO,
- Gtk::BUTTONS_OK_CANCEL);
+ Gtk::BUTTONS_CLOSE);
- msg.set_title (_("Loading Error"));
- msg.set_secondary_text (_("Click the OK button to try again."));
+ msg.set_title (_("Port Registration Error"));
+ msg.set_secondary_text (_("Click the Close button to try again."));
msg.set_position (Gtk::WIN_POS_CENTER);
pop_back_splash ();
msg.present ();
@@ -2545,10 +2556,10 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na
MessageDialog msg (string_compose(_("Session \"%1 (snapshot %2)\" did not load successfully"), path, snap_name),
true,
Gtk::MESSAGE_INFO,
- Gtk::BUTTONS_OK_CANCEL);
+ Gtk::BUTTONS_CLOSE);
msg.set_title (_("Loading Error"));
- msg.set_secondary_text (_("Click the OK button to try again."));
+ msg.set_secondary_text (_("Click the Close button to try again."));
msg.set_position (Gtk::WIN_POS_CENTER);
pop_back_splash ();
msg.present ();
@@ -2630,6 +2641,9 @@ ARDOUR_UI::build_session (const Glib::ustring& path, const Glib::ustring& snap_n
connect_to_session (new_session);
session_loaded = true;
+
+ new_session->save_state(new_session->name());
+
return 0;
}
@@ -2947,8 +2961,6 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
/* XXX do something with name template */
- cerr << "Adding with " << input_chan << " in and " << output_chan << "out\n";
-
if (add_route_dialog->type() == ARDOUR::DataType::MIDI) {
if (track) {
session_add_midi_track(count);
@@ -2995,10 +3007,17 @@ ARDOUR_UI::editor_settings () const
} else {
node = Config->instant_xml(X_("Editor"));
}
+
+ if (!node) {
+ if (getenv("ARDOUR_INSTANT_XML_PATH")) {
+ node = Config->instant_xml(getenv("ARDOUR_INSTANT_XML_PATH"));
+ }
+ }
if (!node) {
node = new XMLNode (X_("Editor"));
}
+
return node;
}
@@ -3032,13 +3051,17 @@ ARDOUR_UI::halt_on_xrun_message ()
void
ARDOUR_UI::xrun_handler(nframes_t where)
{
+ if (!session) {
+ return;
+ }
+
ENSURE_GUI_THREAD (bind(mem_fun(*this, &ARDOUR_UI::xrun_handler), where));
- if (Config->get_create_xrun_marker() && session->actively_recording()) {
+ if (session && Config->get_create_xrun_marker() && session->actively_recording()) {
create_xrun_marker(where);
}
- if (Config->get_stop_recording_on_xrun() && session->actively_recording()) {
+ if (session && Config->get_stop_recording_on_xrun() && session->actively_recording()) {
halt_on_xrun_message ();
}
}
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 8243a40fd1..bd3531d8fd 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -119,6 +119,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void hide_about ();
void idle_load (const Glib::ustring& path);
+ void finish();
+
int load_session (const Glib::ustring& path, const Glib::ustring& snapshot, Glib::ustring mix_template = Glib::ustring());
bool session_loaded;
int build_session (const Glib::ustring& path, const Glib::ustring& snapshot,
@@ -183,8 +185,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void name_io_setup (ARDOUR::AudioEngine&, string&, ARDOUR::IO& io, bool in);
- static gint hide_and_quit (GdkEventAny *ev, ArdourDialog *);
-
XMLNode* editor_settings() const;
XMLNode* mixer_settings () const;
XMLNode* keyboard_settings () const;
@@ -287,8 +287,10 @@ class ARDOUR_UI : public Gtkmm2ext::UI
Gtk::Tooltips _tooltips;
- void goto_editor_window ();
- void goto_mixer_window ();
+ void goto_editor_window ();
+ void goto_mixer_window ();
+ void toggle_editor_mixer_on_top ();
+ bool _mixer_on_top;
Gtk::Table adjuster_table;
Gtk::Frame adjuster_frame;
@@ -313,7 +315,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void startup ();
void shutdown ();
- void finish();
int ask_about_saving_session (const string & why);
/* periodic safety backup, to be precise */
@@ -715,6 +716,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void set_denormal_model (ARDOUR::DenormalModel);
void toggle_sync_order_keys ();
+ void toggle_new_plugins_active();
void toggle_StopPluginsWithTransport();
void toggle_DoNotRunPluginsWhileRecording();
void toggle_VerifyRemoveLastCapture();
@@ -725,6 +727,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void toggle_GainReduceFastTransport();
void toggle_LatchedSolo();
void toggle_ShowSoloMutes();
+ void toggle_SoloMuteOverride();
void toggle_LatchedRecordEnable ();
void toggle_RegionEquivalentsOverlap ();
void toggle_PrimaryClockDeltaEditCursor ();
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index d294df8036..60f390501e 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -192,6 +192,10 @@ ARDOUR_UI::setup_transport ()
transport_tearoff = manage (new TearOff (transport_tearoff_hbox));
transport_tearoff->set_name ("TransportBase");
+ if (Profile->get_sae()) {
+ transport_tearoff->set_can_be_torn_off (false);
+ }
+
transport_hbox.pack_start (*transport_tearoff, true, false);
transport_base.set_name ("TransportBase");
diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc
index f81dc8d311..eacf0b50b7 100644
--- a/gtk2_ardour/ardour_ui_dependents.cc
+++ b/gtk2_ardour/ardour_ui_dependents.cc
@@ -99,6 +99,7 @@ ARDOUR_UI::goto_editor_window ()
editor->show_window ();
editor->present ();
+ _mixer_on_top = false;
flush_pending ();
}
@@ -107,12 +108,30 @@ ARDOUR_UI::goto_mixer_window ()
{
mixer->show_window ();
mixer->present ();
+ _mixer_on_top = true;
flush_pending ();
}
+void
+ARDOUR_UI::toggle_editor_mixer_on_top ()
+{
+ if (_mixer_on_top) {
+ goto_editor_window ();
+ } else {
+ goto_mixer_window ();
+ }
+}
+
gint
ARDOUR_UI::exit_on_main_window_close (GdkEventAny *ev)
{
+#ifdef TOP_MENUBAR
+ /* just hide the window, and return - the top menu stays up */
+ editor->hide ();
+ return TRUE;
+#else
+ /* time to get out of here */
finish();
return TRUE;
+#endif
}
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index 4b7008e027..80e543e4b1 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -193,7 +193,7 @@ ARDOUR_UI::install_actions ()
common_actions = ActionGroup::create (X_("Common"));
ActionManager::register_action (main_actions, X_("WindowMenu"), _("Window"));
- ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (mem_fun(*this, &ARDOUR_UI::finish)));
+ ActionManager::register_action (common_actions, X_("Quit"), _("Quit"), (hide_return (mem_fun(*this, &ARDOUR_UI::finish))));
/* windows visibility actions */
@@ -201,6 +201,7 @@ ARDOUR_UI::install_actions ()
ActionManager::register_action (common_actions, X_("goto-editor"), _("Show Editor"), mem_fun(*this, &ARDOUR_UI::goto_editor_window));
ActionManager::register_action (common_actions, X_("goto-mixer"), _("Show Mixer"), mem_fun(*this, &ARDOUR_UI::goto_mixer_window));
+ ActionManager::register_action (common_actions, X_("toggle-editor-mixer-on-top"), _("Toggle Editor Mixer on Top"), mem_fun(*this, &ARDOUR_UI::toggle_editor_mixer_on_top));
ActionManager::register_toggle_action (common_actions, X_("ToggleOptionsEditor"), _("Preferences"), mem_fun(*this, &ARDOUR_UI::toggle_options_window));
act = ActionManager::register_toggle_action (common_actions, X_("ToggleInspector"), _("Track/Bus Inspector"), mem_fun(*this, &ARDOUR_UI::toggle_route_params_window));
ActionManager::session_sensitive_actions.push_back (act);
@@ -450,6 +451,7 @@ ARDOUR_UI::install_actions ()
ActionManager::register_toggle_action (option_actions, X_("SyncEditorAndMixerTrackOrder"), _("Sync Editor and Mixer track order"), mem_fun (*this, &ARDOUR_UI::toggle_sync_order_keys));
ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
+ ActionManager::register_toggle_action (option_actions, X_("NewPluginsActive"), _("New plugins are active"), mem_fun (*this, &ARDOUR_UI::toggle_new_plugins_active));
ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
ActionManager::register_toggle_action (option_actions, X_("PeriodicSafetyBackups"), _("Make periodic safety backups"), mem_fun (*this, &ARDOUR_UI::toggle_PeriodicSafetyBackups));
ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
@@ -514,6 +516,8 @@ ARDOUR_UI::install_actions ()
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_toggle_action (option_actions, X_("ShowSoloMutes"), _("Show solo muting"), mem_fun (*this, &ARDOUR_UI::toggle_ShowSoloMutes));
ActionManager::session_sensitive_actions.push_back (act);
+ act = ActionManager::register_toggle_action (option_actions, X_("SoloMuteOverride"), _("Override muting"), mem_fun (*this, &ARDOUR_UI::toggle_SoloMuteOverride));
+ ActionManager::session_sensitive_actions.push_back (act);
/* act = ActionManager::register_action (option_actions, X_("DisableAllPlugins"), _("Disable All Plugins"), mem_fun (*this, &ARDOUR_UI::disable_all_plugins));
ActionManager::session_sensitive_actions.push_back (act);
@@ -562,7 +566,7 @@ ARDOUR_UI::install_actions ()
*/
act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("JACK does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), HardwareMonitoring));
- if (engine->can_request_hardware_monitoring()) {
+ if (!engine->can_request_hardware_monitoring()) {
act->set_sensitive (false);
}
act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Ardour does monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), SoftwareMonitoring));
diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc
index 4c80b8dd35..1d03fd158e 100644
--- a/gtk2_ardour/ardour_ui_options.cc
+++ b/gtk2_ardour/ardour_ui_options.cc
@@ -480,6 +480,12 @@ ARDOUR_UI::toggle_editing_space()
}
void
+ARDOUR_UI::toggle_new_plugins_active ()
+{
+ ActionManager::toggle_config_state ("options", "NewPluginsActive", &Configuration::set_new_plugins_active, &Configuration::get_new_plugins_active);
+}
+
+void
ARDOUR_UI::toggle_StopPluginsWithTransport()
{
ActionManager::toggle_config_state ("options", "StopPluginsWithTransport", &Configuration::set_plugins_stop_with_transport, &Configuration::get_plugins_stop_with_transport);
@@ -558,6 +564,12 @@ ARDOUR_UI::toggle_ShowSoloMutes()
}
void
+ARDOUR_UI::toggle_SoloMuteOverride()
+{
+ ActionManager::toggle_config_state ("options", "SoloMuteOverride", &Configuration::set_solo_mute_override, &Configuration::get_solo_mute_override);
+}
+
+void
ARDOUR_UI::toggle_PrimaryClockDeltaEditCursor()
{
ActionManager::toggle_config_state ("options", "PrimaryClockDeltaEditCursor", &Configuration::set_primary_clock_delta_edit_cursor, &Configuration::get_primary_clock_delta_edit_cursor);
@@ -1118,6 +1130,8 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
ActionManager::map_some_state ("options", "LatchedSolo", &Configuration::get_solo_latched);
} else if (PARAM_IS ("show-solo-mutes")) {
ActionManager::map_some_state ("options", "ShowSoloMutes", &Configuration::get_show_solo_mutes);
+ } else if (PARAM_IS ("solo-mute-override")) {
+ ActionManager::map_some_state ("options", "SoloMuteOverride", &Configuration::get_solo_mute_override);
} else if (PARAM_IS ("solo-model")) {
map_solo_model ();
} else if (PARAM_IS ("auto-play")) {
@@ -1144,6 +1158,8 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
ActionManager::map_some_state ("Transport", "ToggleTimeMaster", &Configuration::get_jack_time_master);
} else if (PARAM_IS ("plugins-stop-with-transport")) {
ActionManager::map_some_state ("options", "StopPluginsWithTransport", &Configuration::get_plugins_stop_with_transport);
+ } else if (PARAM_IS ("new-plugins-active")) {
+ ActionManager::map_some_state ("options", "NewPluginsActive", &Configuration::get_new_plugins_active);
} else if (PARAM_IS ("latched-record-enable")) {
ActionManager::map_some_state ("options", "LatchedRecordEnable", &Configuration::get_latched_record_enable);
} else if (PARAM_IS ("verify-remove-last-capture")) {
diff --git a/gtk2_ardour/au_pluginui.mm b/gtk2_ardour/au_pluginui.mm
index 977e5762a7..a46021f66f 100644
--- a/gtk2_ardour/au_pluginui.mm
+++ b/gtk2_ardour/au_pluginui.mm
@@ -1,3 +1,6 @@
+#undef Marker
+#define Marker FuckYouAppleAndYourLackOfNameSpaces
+
#include <pbd/error.h>
#include <ardour/audio_unit.h>
#include <ardour/insert.h>
@@ -18,6 +21,11 @@
#import <AudioUnit/AUCocoaUIView.h>
#import <CoreAudioKit/AUGenericView.h>
+#undef Marker
+
+#include "keyboard.h"
+#include "utils.h"
+#include "public_editor.h"
#include "i18n.h"
using namespace ARDOUR;
@@ -57,15 +65,27 @@ AUPluginUI::AUPluginUI (boost::shared_ptr<PluginInsert> insert)
/* stuff some stuff into the top of the window */
+ HBox* smaller_hbox = manage (new HBox);
+
+ smaller_hbox->pack_start (preset_label, false, false, 10);
+ smaller_hbox->pack_start (preset_combo, false, false);
+ smaller_hbox->pack_start (save_button, false, false);
+ smaller_hbox->pack_start (automation_mode_label, false, false);
+ smaller_hbox->pack_start (automation_mode_selector, false, false);
+ smaller_hbox->pack_start (bypass_button, false, true);
+
+ VBox* v1_box = manage (new VBox);
+ VBox* v2_box = manage (new VBox);
+
+ v1_box->pack_start (*smaller_hbox, false, true);
+ v2_box->pack_start (focus_button, false, true);
+
+ top_box.set_homogeneous (false);
top_box.set_spacing (6);
top_box.set_border_width (6);
- top_box.pack_end (bypass_button, false, true);
- top_box.pack_end (automation_mode_selector, false, false);
- top_box.pack_end (automation_mode_label, false, false);
- top_box.pack_end (save_button, false, false);
- top_box.pack_end (preset_combo, false, false);
- top_box.pack_end (preset_label, false, false);
+ top_box.pack_end (*v2_box, false, false);
+ top_box.pack_end (*v1_box, false, false);
set_spacing (6);
pack_start (top_box, false, false);
@@ -617,14 +637,16 @@ create_au_gui (boost::shared_ptr<PluginInsert> plugin_insert, VBox** box)
bool
AUPluginUI::on_focus_in_event (GdkEventFocus* ev)
{
- cerr << "au plugin focus in\n";
+ //cerr << "au plugin focus in\n";
+ //Keyboard::magic_widget_grab_focus ();
return false;
}
bool
AUPluginUI::on_focus_out_event (GdkEventFocus* ev)
{
- cerr << "au plugin focus out\n";
+ //cerr << "au plugin focus out\n";
+ //Keyboard::magic_widget_drop_focus ();
return false;
}
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index 58db7f636b..c27015801f 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -636,14 +636,19 @@ AudioClock::set_bbt (nframes_t when, bool force)
char buf[16];
BBT_Time bbt;
- session->tempo_map().bbt_time (when, bbt);
-
/* handle a common case */
-
- if (is_duration && when == 0) {
- bbt.bars = 0;
- bbt.beats = 0;
-
+ if (is_duration) {
+ if (when == 0) {
+ bbt.bars = 0;
+ bbt.beats = 0;
+ bbt.ticks = 0;
+ } else {
+ session->tempo_map().bbt_time (when, bbt);
+ bbt.bars--;
+ bbt.beats--;
+ }
+ } else {
+ session->tempo_map().bbt_time (when, bbt);
}
sprintf (buf, "%03" PRIu32, bbt.bars);
@@ -1897,6 +1902,11 @@ AudioClock::bbt_frame_from_display (nframes_t pos) const
any.bbt.beats = atoi (beats_label.get_text());
any.bbt.ticks = atoi (ticks_label.get_text());
+ if (is_duration) {
+ any.bbt.bars++;
+ any.bbt.beats++;
+ }
+
nframes_t ret = session->convert_to_frames_at (pos, any);
return ret;
diff --git a/gtk2_ardour/audio_region_editor.cc b/gtk2_ardour/audio_region_editor.cc
index ff84a44488..c36ddbc041 100644
--- a/gtk2_ardour/audio_region_editor.cc
+++ b/gtk2_ardour/audio_region_editor.cc
@@ -47,16 +47,20 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
_region_view (rv),
name_label (_("NAME:")),
audition_button (_("play")),
- time_table (3, 2),
- start_clock (X_("regionstart"), true, X_("AudioRegionEditorClock"), true),
+ time_table (5, 2),
+ position_clock (X_("regionposition"), true, X_("AudioRegionEditorClock"), true),
end_clock (X_("regionend"), true, X_("AudioRegionEditorClock"), true),
length_clock (X_("regionlength"), true, X_("AudioRegionEditorClock"), true, true),
- sync_offset_clock (X_("regionsyncoffset"), true, X_("AudioRegionEditorClock"), true, true)
+ /* XXX cannot edit sync point or start yet */
+ sync_offset_clock (X_("regionsyncoffset"), true, X_("AudioRegionEditorClock"), false),
+ start_clock (X_("regionstart"), true, X_("AudioRegionEditorClock"), false)
{
- start_clock.set_session (&_session);
+ position_clock.set_session (&_session);
end_clock.set_session (&_session);
length_clock.set_session (&_session);
+ sync_offset_clock.set_session (&_session);
+ start_clock.set_session (&_session);
name_entry.set_name ("AudioRegionEditorEntry");
name_label.set_name ("AudioRegionEditorLabel");
@@ -79,27 +83,35 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
top_row_hbox.pack_start (name_hbox, true, true);
top_row_hbox.pack_end (top_row_button_hbox, true, true);
- start_label.set_name ("AudioRegionEditorLabel");
- start_label.set_text (_("START:"));
+ position_label.set_name ("AudioRegionEditorLabel");
+ position_label.set_text (_("POSITION:"));
end_label.set_name ("AudioRegionEditorLabel");
end_label.set_text (_("END:"));
length_label.set_name ("AudioRegionEditorLabel");
length_label.set_text (_("LENGTH:"));
+ sync_label.set_name ("AudioRegionEditorLabel");
+ sync_label.set_text (_("SYNC POINT:"));
+ start_label.set_name ("AudioRegionEditorLabel");
+ start_label.set_text (_("FILE START:"));
time_table.set_col_spacings (2);
time_table.set_row_spacings (5);
time_table.set_border_width (5);
- start_alignment.set (1.0, 0.5);
+ position_alignment.set (1.0, 0.5);
end_alignment.set (1.0, 0.5);
length_alignment.set (1.0, 0.5);
+ sync_alignment.set (1.0, 0.5);
+ start_alignment.set (1.0, 0.5);
- start_alignment.add (start_label);
+ position_alignment.add (position_label);
end_alignment.add (end_label);
length_alignment.add (length_label);
+ sync_alignment.add (sync_label);
+ start_alignment.add (start_label);
- time_table.attach (start_alignment, 0, 1, 0, 1, Gtk::FILL, Gtk::FILL);
- time_table.attach (start_clock, 1, 2, 0, 1, Gtk::FILL, Gtk::FILL);
+ time_table.attach (position_alignment, 0, 1, 0, 1, Gtk::FILL, Gtk::FILL);
+ time_table.attach (position_clock, 1, 2, 0, 1, Gtk::FILL, Gtk::FILL);
time_table.attach (end_alignment, 0, 1, 1, 2, Gtk::FILL, Gtk::FILL);
time_table.attach (end_clock, 1, 2, 1, 2, Gtk::FILL, Gtk::FILL);
@@ -107,6 +119,12 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
time_table.attach (length_alignment, 0, 1, 2, 3, Gtk::FILL, Gtk::FILL);
time_table.attach (length_clock, 1, 2, 2, 3, Gtk::FILL, Gtk::FILL);
+ time_table.attach (sync_alignment, 0, 1, 3, 4, Gtk::FILL, Gtk::FILL);
+ time_table.attach (sync_offset_clock, 1, 2, 3, 4, Gtk::FILL, Gtk::FILL);
+
+ time_table.attach (start_alignment, 0, 1, 4, 5, Gtk::FILL, Gtk::FILL);
+ time_table.attach (start_clock, 1, 2, 4, 5, Gtk::FILL, Gtk::FILL);
+
lower_hbox.pack_start (time_table, true, true);
lower_hbox.pack_start (sep1, false, false);
lower_hbox.pack_start (sep2, false, false);
@@ -128,7 +146,7 @@ AudioRegionEditor::AudioRegionEditor (Session& s, boost::shared_ptr<AudioRegion>
show_all();
name_changed ();
- bounds_changed (Change (StartChanged|LengthChanged|PositionChanged));
+ bounds_changed (Change (StartChanged|LengthChanged|PositionChanged|StartChanged|Region::SyncOffsetChanged));
_region->StateChanged.connect (mem_fun(*this, &AudioRegionEditor::region_changed));
@@ -147,7 +165,8 @@ AudioRegionEditor::region_changed (Change what_changed)
if (what_changed & NameChanged) {
name_changed ();
}
- if (what_changed & BoundsChanged) {
+
+ if (what_changed & Change (BoundsChanged|StartChanged|Region::SyncOffsetChanged)) {
bounds_changed (what_changed);
}
}
@@ -190,7 +209,7 @@ AudioRegionEditor::connect_editor_events ()
{
name_entry.signal_changed().connect (mem_fun(*this, &AudioRegionEditor::name_entry_changed));
- start_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::start_clock_changed));
+ position_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::position_clock_changed));
end_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::end_clock_changed));
length_clock.ValueChanged.connect (mem_fun(*this, &AudioRegionEditor::length_clock_changed));
@@ -199,7 +218,7 @@ AudioRegionEditor::connect_editor_events ()
}
void
-AudioRegionEditor::start_clock_changed ()
+AudioRegionEditor::position_clock_changed ()
{
_session.begin_reversible_command (_("change region start position"));
@@ -207,7 +226,7 @@ AudioRegionEditor::start_clock_changed ()
if (pl) {
XMLNode &before = pl->get_state();
- _region->set_position (start_clock.current_time(), this);
+ _region->set_position (position_clock.current_time(), this);
XMLNode &after = pl->get_state();
_session.add_command(new MementoCommand<Playlist>(*pl, &before, &after));
}
@@ -276,11 +295,25 @@ AudioRegionEditor::name_changed ()
void
AudioRegionEditor::bounds_changed (Change what_changed)
{
- if (what_changed & Change ((PositionChanged|LengthChanged))) {
- start_clock.set (_region->position(), true);
+ if ((what_changed & Change (PositionChanged|LengthChanged)) == Change (PositionChanged|LengthChanged)) {
+ position_clock.set (_region->position(), true);
+ end_clock.set (_region->position() + _region->length(), true);
+ length_clock.set (_region->length(), true);
+ } else if (what_changed & Change (PositionChanged)) {
+ position_clock.set (_region->position(), true);
+ end_clock.set (_region->position() + _region->length(), true);
+ } else if (what_changed & Change (LengthChanged)) {
end_clock.set (_region->position() + _region->length(), true);
length_clock.set (_region->length(), true);
}
+
+ if (what_changed & Region::SyncOffsetChanged) {
+ sync_offset_clock.set (_region->sync_position(), true);
+ }
+
+ if (what_changed & StartChanged) {
+ start_clock.set (_region->start(), true);
+ }
}
void
diff --git a/gtk2_ardour/audio_region_editor.h b/gtk2_ardour/audio_region_editor.h
index 024f390d40..57a9ba40c6 100644
--- a/gtk2_ardour/audio_region_editor.h
+++ b/gtk2_ardour/audio_region_editor.h
@@ -74,17 +74,22 @@ class AudioRegionEditor : public RegionEditor
Gtk::Table time_table;
- Gtk::Label start_label;
+ Gtk::Label position_label;
Gtk::Label end_label;
Gtk::Label length_label;
- Gtk::Alignment start_alignment;
+ Gtk::Label sync_label;
+ Gtk::Label start_label;
+ Gtk::Alignment position_alignment;
Gtk::Alignment end_alignment;
Gtk::Alignment length_alignment;
+ Gtk::Alignment sync_alignment;
+ Gtk::Alignment start_alignment;
- AudioClock start_clock;
+ AudioClock position_clock;
AudioClock end_clock;
AudioClock length_clock;
AudioClock sync_offset_clock;
+ AudioClock start_clock;
Gtk::HSeparator sep3;
Gtk::VSeparator sep1;
@@ -99,7 +104,7 @@ class AudioRegionEditor : public RegionEditor
void activation ();
void name_entry_changed ();
- void start_clock_changed ();
+ void position_clock_changed ();
void end_clock_changed ();
void length_clock_changed ();
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index 7fc7be2db2..ed585a91e1 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -32,6 +32,7 @@
#include <ardour/playlist_templates.h>
#include <ardour/source.h>
#include <ardour/region_factory.h>
+#include <ardour/profile.h>
#include "audio_streamview.h"
#include "audio_region_view.h"
@@ -139,7 +140,7 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
_samples_per_unit, region_color, recording, TimeAxisViewItem::Visibility(TimeAxisViewItem::ShowFrame | TimeAxisViewItem::HideFrameRight));
} else {
region_view = new AudioRegionView (canvas_group, _trackview, region,
- _samples_per_unit, region_color);
+ _samples_per_unit, region_color);
}
break;
case Destructive:
@@ -821,9 +822,12 @@ AudioStreamView::color_handler ()
//case cAudioBusBase:
if (!_trackview.is_track()) {
- canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioBusBase.get();
+ if (Profile->get_sae() && _trackview.route()->is_master()) {
+ canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioMasterBusBase.get();
+ } else {
+ canvas_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_AudioBusBase.get();
+ }
}
-
}
void
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc
index 0e1bf20204..aa02977581 100644
--- a/gtk2_ardour/audio_time_axis.cc
+++ b/gtk2_ardour/audio_time_axis.cc
@@ -377,6 +377,65 @@ AudioTimeAxisView::update_pans (bool show)
++i;
}
}
+#if 0
+void
+AudioTimeAxisView::toggle_gain_track ()
+{
+ bool showit = gain_automation_item->get_active();
+
+ if (showit != gain_track->marked_for_display()) {
+ if (showit) {
+ gain_track->set_marked_for_display (true);
+ gain_track->canvas_display->show();
+ gain_track->canvas_background->show();
+ gain_track->get_state_node()->add_property ("shown", X_("yes"));
+ } else {
+ gain_track->set_marked_for_display (false);
+ gain_track->hide ();
+ gain_track->get_state_node()->add_property ("shown", X_("no"));
+ }
+
+ /* now trigger a redisplay */
+
+ if (!no_redraw) {
+ _route->gui_changed (X_("visible_tracks"), (void *) 0); /* EMIT_SIGNAL */
+ }
+ }
+}
+
+void
+AudioTimeAxisView::gain_hidden ()
+{
+ gain_track->get_state_node()->add_property (X_("shown"), X_("no"));
+
+ if (gain_automation_item && !_hidden) {
+ gain_automation_item->set_active (false);
+ }
+
+ _route->gui_changed ("visible_tracks", (void *) 0); /* EMIT_SIGNAL */
+}
+
+void
+AudioTimeAxisView::toggle_pan_track ()
+{
+ bool showit = pan_automation_item->get_active();
+
+ if (showit != pan_track->marked_for_display()) {
+ if (showit) {
+ pan_track->set_marked_for_display (true);
+ pan_track->canvas_display->show();
+ pan_track->canvas_background->show();
+ pan_track->get_state_node()->add_property ("shown", X_("yes"));
+ } else {
+ pan_track->set_marked_for_display (false);
+ pan_track->hide ();
+ pan_track->get_state_node()->add_property ("shown", X_("no"));
+ }
+
+ /* now trigger a redisplay */
+ }
+}
+#endif
void
AudioTimeAxisView::show_all_automation ()
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc
index 2313515285..f0bcaa30ba 100644
--- a/gtk2_ardour/automation_time_axis.cc
+++ b/gtk2_ardour/automation_time_axis.cc
@@ -67,7 +67,6 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
_base_rect (0),
_view (show_regions ? new AutomationStreamView(*this) : NULL),
_name (nom),
- height_button (_("h")),
clear_button (_("clear")),
auto_button (X_("")) /* force addition of a label */
{
@@ -90,7 +89,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
_base_rect = new SimpleRect(*canvas_display);
_base_rect->property_x1() = 0.0;
_base_rect->property_y1() = 0.0;
- _base_rect->property_x2() = editor.frame_to_pixel (max_frames);
+ _base_rect->property_x2() = LONG_MAX - 2;
_base_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_AutomationTrackOutline.get();
/* outline ends and bottom */
@@ -106,14 +105,16 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
hide_button.add (*(manage (new Gtk::Image (::get_icon("hide")))));
- height_button.set_name ("TrackSizeButton");
auto_button.set_name ("TrackVisualButton");
clear_button.set_name ("TrackVisualButton");
hide_button.set_name ("TrackRemoveButton");
+ auto_button.unset_flags (Gtk::CAN_FOCUS);
+ clear_button.unset_flags (Gtk::CAN_FOCUS);
+ hide_button.unset_flags (Gtk::CAN_FOCUS);
+
controls_table.set_no_show_all();
- ARDOUR_UI::instance()->tooltips().set_tip(height_button, _("track height"));
ARDOUR_UI::instance()->tooltips().set_tip(auto_button, _("automation state"));
ARDOUR_UI::instance()->tooltips().set_tip(clear_button, _("clear track"));
ARDOUR_UI::instance()->tooltips().set_tip(hide_button, _("hide track"));
@@ -174,7 +175,6 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
/* add the buttons */
controls_table.attach (hide_button, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
- controls_table.attach (height_button, 0, 1, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
controls_table.attach (auto_button, 5, 8, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
controls_table.attach (clear_button, 5, 8, 1, 2, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
@@ -184,7 +184,6 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
controls_table.show_all ();
- height_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::height_clicked));
clear_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::clear_clicked));
hide_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::hide_clicked));
auto_button.signal_clicked().connect (mem_fun(*this, &AutomationTimeAxisView::auto_clicked));
@@ -362,12 +361,6 @@ AutomationTimeAxisView::set_interpolation (AutomationList::InterpolationStyle st
}
void
-AutomationTimeAxisView::height_clicked ()
-{
- popup_size_menu (0);
-}
-
-void
AutomationTimeAxisView::clear_clicked ()
{
_session.begin_reversible_command (_("clear automation"));
@@ -380,10 +373,9 @@ void
AutomationTimeAxisView::set_height (uint32_t h)
{
bool changed = (height != (uint32_t) h) || first_call_to_set_height;
- bool changed_between_small_and_normal = ( (h == hSmall || h == hSmaller) ^ (height == hSmall || height == hSmaller) );
+ bool changed_between_small_and_normal = ( (height < hNormal && h >= hNormal) || (height >= hNormal || h < hNormal) );
TimeAxisView* state_parent = get_parent_with_state ();
-
assert(state_parent);
XMLNode* xml_node = state_parent->get_automation_child_xml_node (_control->parameter());
@@ -427,7 +419,6 @@ AutomationTimeAxisView::set_height (uint32_t h)
name_hbox.show_all ();
auto_button.show();
- height_button.show();
clear_button.show();
hide_button.show_all();
@@ -446,15 +437,11 @@ AutomationTimeAxisView::set_height (uint32_t h)
name_hbox.show_all ();
auto_button.hide();
- height_button.hide();
clear_button.hide();
hide_button.hide();
}
- } else if (h >= hNormal){
- auto_button.show();
- height_button.show();
- clear_button.show();
- hide_button.show_all();
+ } else if (h >= hNormal){
+ cerr << "track grown, but neither changed_between_small_and_normal nor first_call_to_set_height set!" << endl;
}
if (changed) {
diff --git a/gtk2_ardour/automation_time_axis.h b/gtk2_ardour/automation_time_axis.h
index 8899dc4949..d749a5fbf0 100644
--- a/gtk2_ardour/automation_time_axis.h
+++ b/gtk2_ardour/automation_time_axis.h
@@ -122,7 +122,6 @@ class AutomationTimeAxisView : public TimeAxisView {
bool first_call_to_set_height;
Gtk::Button hide_button;
- Gtk::Button height_button;
Gtk::Button clear_button;
Gtk::Button auto_button;
Gtk::Menu* automation_menu;
@@ -140,7 +139,6 @@ class AutomationTimeAxisView : public TimeAxisView {
void add_line (boost::shared_ptr<AutomationLine>);
void clear_clicked ();
- void height_clicked ();
void hide_clicked ();
void auto_clicked ();
diff --git a/gtk2_ardour/canvas-waveview.c b/gtk2_ardour/canvas-waveview.c
index dee5706c51..f929b31197 100644
--- a/gtk2_ardour/canvas-waveview.c
+++ b/gtk2_ardour/canvas-waveview.c
@@ -1359,8 +1359,9 @@ gnome_canvas_waveview_render (GnomeCanvasItem *item,
prev_pymax = pymax;
prev_pymin = pymin;
}
- }
- else if(waveview->filled && rectify) {
+
+ } else if (waveview->filled && rectify) {
+
int prev_pymax = -1;
int last_pymax = -1;
int next_pymax;
@@ -1611,11 +1612,10 @@ gnome_canvas_waveview_draw (GnomeCanvasItem *item,
int cache_index;
double zbegin, zend;
gboolean rectify;
- double n;
double origin;
double clip_length;
double xoff;
- double yoff;
+ double yoff = 0.0;
double ulx;
double uly;
double lrx;
@@ -1748,7 +1748,8 @@ gnome_canvas_waveview_draw (GnomeCanvasItem *item,
yoff = origin - (waveview->half_height * max) + 0.5;
- if (n == ulx) {
+ if (xoff == ulx) {
+ /* first point */
cairo_move_to (cr, xoff+0.5, yoff);
} else {
cairo_line_to (cr, xoff+0.5, yoff);
diff --git a/gtk2_ardour/canvas_vars.h b/gtk2_ardour/canvas_vars.h
index 6b14d257ad..6f87539dd5 100644
--- a/gtk2_ardour/canvas_vars.h
+++ b/gtk2_ardour/canvas_vars.h
@@ -1,5 +1,6 @@
CANVAS_VARIABLE(canvasvar_ActiveCrossfade, "active crossfade")
CANVAS_VARIABLE(canvasvar_AudioBusBase, "audio bus base")
+CANVAS_VARIABLE(canvasvar_AudioMasterBusBase, "audio master bus base")
CANVAS_VARIABLE(canvasvar_AudioTrackBase, "audio track base")
CANVAS_VARIABLE(canvasvar_AutomationLine, "automation line")
CANVAS_VARIABLE(canvasvar_AutomationTrackFill, "automation track fill")
diff --git a/gtk2_ardour/cocoacarbon.mm b/gtk2_ardour/cocoacarbon.mm
index 75df481186..e4f833dd26 100644
--- a/gtk2_ardour/cocoacarbon.mm
+++ b/gtk2_ardour/cocoacarbon.mm
@@ -163,3 +163,16 @@ ARDOUR_UI::platform_setup ()
}
}
+bool
+cocoa_open_url (const char* uri)
+{
+ NSString* struri = [[NSString alloc] initWithUTF8String:uri];
+ NSURL* nsurl = [[NSURL alloc] initWithString:struri];
+
+ bool ret = [[NSWorkspace sharedWorkspace] openURL:nsurl];
+
+ [struri release];
+ [nsurl release];
+
+ return ret;
+}
diff --git a/gtk2_ardour/crossfade_edit.cc b/gtk2_ardour/crossfade_edit.cc
index 3c67c62f68..eb5cb2fba9 100644
--- a/gtk2_ardour/crossfade_edit.cc
+++ b/gtk2_ardour/crossfade_edit.cc
@@ -36,6 +36,7 @@
#include <ardour/audiosource.h>
#include <ardour/playlist_templates.h>
#include <ardour/region_factory.h>
+#include <ardour/profile.h>
#include <gtkmm2ext/gtk_ui.h>
@@ -48,6 +49,7 @@
#include "canvas_impl.h"
#include "simplerect.h"
#include "waveview.h"
+#include "actions.h"
using namespace std;
using namespace ARDOUR;
@@ -99,6 +101,8 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
set_name ("CrossfadeEditWindow");
set_position (Gtk::WIN_POS_MOUSE);
+ add_accel_group (ActionManager::ui_manager->get_accel_group());
+
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::POINTER_MOTION_MASK);
RadioButtonGroup sel_but_group = select_in_button.get_group();
@@ -198,6 +202,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
pbutton->add (*pxmap);
pbutton->set_name ("CrossfadeEditButton");
pbutton->signal_clicked().connect (bind (mem_fun(*this, &CrossfadeEditor::apply_preset), *i));
+ ARDOUR_UI::instance()->set_tip (pbutton, (*i)->name, "");
fade_in_table.attach (*pbutton, col, col+1, row, row+1);
fade_in_buttons.push_back (pbutton);
@@ -219,6 +224,7 @@ CrossfadeEditor::CrossfadeEditor (Session& s, boost::shared_ptr<Crossfade> xf, d
pbutton->add (*pxmap);
pbutton->set_name ("CrossfadeEditButton");
pbutton->signal_clicked().connect (bind (mem_fun(*this, &CrossfadeEditor::apply_preset), *i));
+ ARDOUR_UI::instance()->set_tip (pbutton, (*i)->name, "");
fade_out_table.attach (*pbutton, col, col+1, row, row+1);
fade_out_buttons.push_back (pbutton);
@@ -398,7 +404,7 @@ CrossfadeEditor::point_event (GdkEvent* event, Point* point)
if (Keyboard::is_delete_event (&event->button)) {
fade[current].points.remove (point);
delete point;
- }
+ }
redraw ();
break;
@@ -853,58 +859,19 @@ CrossfadeEditor::build_presets ()
fade_out_presets = new Presets;
/* FADE OUT */
- // p = new Preset ("hiin.xpm");
- p = new Preset ("crossfade_in_fast-cut");
- p->push_back (PresetPoint (0, 0));
- p->push_back (PresetPoint (0.0207373, 0.197222));
- p->push_back (PresetPoint (0.0645161, 0.525));
- p->push_back (PresetPoint (0.152074, 0.802778));
- p->push_back (PresetPoint (0.276498, 0.919444));
- p->push_back (PresetPoint (0.481567, 0.980556));
- p->push_back (PresetPoint (0.767281, 1));
- p->push_back (PresetPoint (1, 1));
- fade_in_presets->push_back (p);
-
- // p = new Preset ("loin.xpm");
- p = new Preset ("crossfade_in_transition");
- p->push_back (PresetPoint (0, 0));
- p->push_back (PresetPoint (0.389401, 0.0333333));
- p->push_back (PresetPoint (0.629032, 0.0861111));
- p->push_back (PresetPoint (0.829493, 0.233333));
- p->push_back (PresetPoint (0.9447, 0.483333));
- p->push_back (PresetPoint (0.976959, 0.697222));
- p->push_back (PresetPoint (1, 1));
- fade_in_presets->push_back (p);
-
- // p = new Preset ("regin.xpm");
- p = new Preset ("crossfade_in_constant");
- p->push_back (PresetPoint (0, 0));
- p->push_back (PresetPoint (0.0737327, 0.308333));
- p->push_back (PresetPoint (0.246544, 0.658333));
- p->push_back (PresetPoint (0.470046, 0.886111));
- p->push_back (PresetPoint (0.652074, 0.972222));
- p->push_back (PresetPoint (0.771889, 0.988889));
- p->push_back (PresetPoint (1, 1));
- fade_in_presets->push_back (p);
-
- // p = new Preset ("regin2.xpm");
- p = new Preset ("crossfade_in_slow-cut");
- p->push_back (PresetPoint (0, 0));
- p->push_back (PresetPoint (0.304147, 0.0694444));
- p->push_back (PresetPoint (0.529954, 0.152778));
- p->push_back (PresetPoint (0.725806, 0.333333));
- p->push_back (PresetPoint (0.847926, 0.558333));
- p->push_back (PresetPoint (0.919355, 0.730556));
- p->push_back (PresetPoint (1, 1));
- fade_in_presets->push_back (p);
- // p = new Preset ("linin.xpm");
- p = new Preset ("crossfade_in_dipped");
+ p = new Preset ("Linear (-6dB)", "crossfade_in_dipped");
p->push_back (PresetPoint (0, 0));
- p->push_back (PresetPoint (1, 1));
+ p->push_back (PresetPoint (0.000000, 0.000000));
+ p->push_back (PresetPoint (0.166667, 0.166366));
+ p->push_back (PresetPoint (0.333333, 0.332853));
+ p->push_back (PresetPoint (0.500000, 0.499459));
+ p->push_back (PresetPoint (0.666667, 0.666186));
+ p->push_back (PresetPoint (0.833333, 0.833033));
+ p->push_back (PresetPoint (1.000000, 1.000000));
fade_in_presets->push_back (p);
- p = new Preset ("crossfade_in_default");
+ p = new Preset ("S(1)-curve", "crossfade_in_default");
p->push_back (PresetPoint (0, 0));
p->push_back (PresetPoint (0.1, 0.01));
p->push_back (PresetPoint (0.2, 0.03));
@@ -912,66 +879,141 @@ CrossfadeEditor::build_presets ()
p->push_back (PresetPoint (0.9, 0.99));
p->push_back (PresetPoint (1, 1));
fade_in_presets->push_back (p);
+
+ p = new Preset ("S(2)-curve", "crossfade_in_default");
+ p->push_back (PresetPoint (0.0, 0.0));
+ p->push_back (PresetPoint (0.055, 0.222));
+ p->push_back (PresetPoint (0.163, 0.35));
+ p->push_back (PresetPoint (0.837, 0.678));
+ p->push_back (PresetPoint (0.945, 0.783));
+ p->push_back (PresetPoint (1.0, 1.0));
+ fade_in_presets->push_back (p);
+
+ p = new Preset ("Constant Power (-3dB)", "crossfade_in_constant");
+
+ p->push_back (PresetPoint (0.000000, 0.000000));
+ p->push_back (PresetPoint (0.166667, 0.282192));
+ p->push_back (PresetPoint (0.333333, 0.518174));
+ p->push_back (PresetPoint (0.500000, 0.707946));
+ p->push_back (PresetPoint (0.666667, 0.851507));
+ p->push_back (PresetPoint (0.833333, 0.948859));
+ p->push_back (PresetPoint (1.000000, 1.000000));
+
+ fade_in_presets->push_back (p);
+
+ if (!Profile->get_sae()) {
+ // p = new Preset ("hiin.xpm");
+ p = new Preset ("Long cut", "crossfade_in_fast-cut");
+ p->push_back (PresetPoint (0, 0));
+ p->push_back (PresetPoint (0.0207373, 0.197222));
+ p->push_back (PresetPoint (0.0645161, 0.525));
+ p->push_back (PresetPoint (0.152074, 0.802778));
+ p->push_back (PresetPoint (0.276498, 0.919444));
+ p->push_back (PresetPoint (0.481567, 0.980556));
+ p->push_back (PresetPoint (0.767281, 1));
+ p->push_back (PresetPoint (1, 1));
+ fade_in_presets->push_back (p);
+
+ // p = new Preset ("loin.xpm");
+ p = new Preset ("Short cut", "crossfade_in_transition");
+ p->push_back (PresetPoint (0, 0));
+ p->push_back (PresetPoint (0.389401, 0.0333333));
+ p->push_back (PresetPoint (0.629032, 0.0861111));
+ p->push_back (PresetPoint (0.829493, 0.233333));
+ p->push_back (PresetPoint (0.9447, 0.483333));
+ p->push_back (PresetPoint (0.976959, 0.697222));
+ p->push_back (PresetPoint (1, 1));
+ fade_in_presets->push_back (p);
+
+
+ // p = new Preset ("regin2.xpm");
+ p = new Preset ("Slow cut", "crossfade_in_slow-cut");
+ p->push_back (PresetPoint (0, 0));
+ p->push_back (PresetPoint (0.304147, 0.0694444));
+ p->push_back (PresetPoint (0.529954, 0.152778));
+ p->push_back (PresetPoint (0.725806, 0.333333));
+ p->push_back (PresetPoint (0.847926, 0.558333));
+ p->push_back (PresetPoint (0.919355, 0.730556));
+ p->push_back (PresetPoint (1, 1));
+ fade_in_presets->push_back (p);
+ }
/* FADE OUT */
- // p = new Preset ("hiout.xpm");
- p = new Preset ("crossfade_out_fast-cut");
- p->push_back (PresetPoint (0, 1));
- p->push_back (PresetPoint (0.305556, 1));
- p->push_back (PresetPoint (0.548611, 0.991736));
- p->push_back (PresetPoint (0.759259, 0.931129));
- p->push_back (PresetPoint (0.918981, 0.68595));
- p->push_back (PresetPoint (0.976852, 0.22865));
- p->push_back (PresetPoint (1, 0));
- fade_out_presets->push_back (p);
-
- // p = new Preset ("loout.xpm");
- p = new Preset ("crossfade_out_transition");
+ // p = new Preset ("regout.xpm");
+ p = new Preset ("Linear (-6dB cut)", "crossfade_out_dipped");
p->push_back (PresetPoint (0, 1));
- p->push_back (PresetPoint (0.023041, 0.697222));
- p->push_back (PresetPoint (0.0553, 0.483333));
- p->push_back (PresetPoint (0.170507, 0.233333));
- p->push_back (PresetPoint (0.370968, 0.0861111));
- p->push_back (PresetPoint (0.610599, 0.0333333));
- p->push_back (PresetPoint (1, 0));
+ p->push_back (PresetPoint (0.000000, 1.000000));
+ p->push_back (PresetPoint (0.166667, 0.833033));
+ p->push_back (PresetPoint (0.333333, 0.666186));
+ p->push_back (PresetPoint (0.500000, 0.499459));
+ p->push_back (PresetPoint (0.666667, 0.332853));
+ p->push_back (PresetPoint (0.833333, 0.166366));
+ p->push_back (PresetPoint (1.000000, 0.000000));
fade_out_presets->push_back (p);
- // p = new Preset ("regout.xpm");
- p = new Preset ("crossfade_out_constant");
+ p = new Preset ("S(1)-Curve", "crossfade_out_default");
p->push_back (PresetPoint (0, 1));
- p->push_back (PresetPoint (0.228111, 0.988889));
- p->push_back (PresetPoint (0.347926, 0.972222));
- p->push_back (PresetPoint (0.529954, 0.886111));
- p->push_back (PresetPoint (0.753456, 0.658333));
- p->push_back (PresetPoint (0.9262673, 0.308333));
+ p->push_back (PresetPoint (0.1, 0.99));
+ p->push_back (PresetPoint (0.2, 0.97));
+ p->push_back (PresetPoint (0.8, 0.03));
+ p->push_back (PresetPoint (0.9, 0.01));
p->push_back (PresetPoint (1, 0));
fade_out_presets->push_back (p);
- // p = new Preset ("regout2.xpm");
- p = new Preset ("crossfade_out_slow-fade");
- p->push_back (PresetPoint (0, 1));
- p->push_back (PresetPoint (0.080645, 0.730556));
- p->push_back (PresetPoint (0.277778, 0.289256));
- p->push_back (PresetPoint (0.470046, 0.152778));
- p->push_back (PresetPoint (0.695853, 0.0694444));
- p->push_back (PresetPoint (1, 0));
+ p = new Preset ("S(2)-Curve", "crossfade_out_default");
+ p->push_back (PresetPoint (0.0, 1.0));
+ p->push_back (PresetPoint (0.163, 0.678));
+ p->push_back (PresetPoint (0.055, 0.783));
+ p->push_back (PresetPoint (0.837, 0.35));
+ p->push_back (PresetPoint (0.945, 0.222));
+ p->push_back (PresetPoint (1.0, 0.0));
fade_out_presets->push_back (p);
// p = new Preset ("linout.xpm");
- p = new Preset ("crossfade_out_dipped");
- p->push_back (PresetPoint (0, 1));
- p->push_back (PresetPoint (1, 0));
+ p = new Preset ("Constant Power (-3dB cut)", "crossfade_out_constant");
+ p->push_back (PresetPoint (0.000000, 1.000000));
+ p->push_back (PresetPoint (0.166667, 0.948859));
+ p->push_back (PresetPoint (0.333333, 0.851507));
+ p->push_back (PresetPoint (0.500000, 0.707946));
+ p->push_back (PresetPoint (0.666667, 0.518174));
+ p->push_back (PresetPoint (0.833333, 0.282192));
+ p->push_back (PresetPoint (1.000000, 0.000000));
fade_out_presets->push_back (p);
- p = new Preset ("crossfade_out_default");
- p->push_back (PresetPoint (0, 1));
- p->push_back (PresetPoint (0.1, 0.99));
- p->push_back (PresetPoint (0.2, 0.97));
- p->push_back (PresetPoint (0.8, 0.03));
- p->push_back (PresetPoint (0.9, 0.01));
- p->push_back (PresetPoint (1, 0));
- fade_out_presets->push_back (p);
+ if (!Profile->get_sae()) {
+ // p = new Preset ("hiout.xpm");
+ p = new Preset ("Slow end/cut", "crossfade_out_fast-cut");
+ p->push_back (PresetPoint (0, 1));
+ p->push_back (PresetPoint (0.305556, 1));
+ p->push_back (PresetPoint (0.548611, 0.991736));
+ p->push_back (PresetPoint (0.759259, 0.931129));
+ p->push_back (PresetPoint (0.918981, 0.68595));
+ p->push_back (PresetPoint (0.976852, 0.22865));
+ p->push_back (PresetPoint (1, 0));
+ fade_out_presets->push_back (p);
+
+ // p = new Preset ("loout.xpm");
+ p = new Preset ("Fast start/cut", "crossfade_out_transition");
+ p->push_back (PresetPoint (0, 1));
+ p->push_back (PresetPoint (0.023041, 0.697222));
+ p->push_back (PresetPoint (0.0553, 0.483333));
+ p->push_back (PresetPoint (0.170507, 0.233333));
+ p->push_back (PresetPoint (0.370968, 0.0861111));
+ p->push_back (PresetPoint (0.610599, 0.0333333));
+ p->push_back (PresetPoint (1, 0));
+ fade_out_presets->push_back (p);
+
+ // p = new Preset ("regout2.xpm");
+ p = new Preset ("Slow Fade", "crossfade_out_slow-fade");
+ p->push_back (PresetPoint (0, 1));
+ p->push_back (PresetPoint (0.080645, 0.730556));
+ p->push_back (PresetPoint (0.277778, 0.289256));
+ p->push_back (PresetPoint (0.470046, 0.152778));
+ p->push_back (PresetPoint (0.695853, 0.0694444));
+ p->push_back (PresetPoint (1, 0));
+ fade_out_presets->push_back (p);
+ }
}
void
@@ -1037,7 +1079,7 @@ CrossfadeEditor::x_coordinate (double& xfract) const
{
xfract = min (1.0, xfract);
xfract = max (0.0, xfract);
-
+
return canvas_border + (xfract * effective_width());
}
@@ -1296,3 +1338,44 @@ CrossfadeEditor::audition_left_dry_toggled ()
}
}
}
+
+bool
+CrossfadeEditor::on_key_press_event (GdkEventKey *ev)
+{
+ return true;
+}
+
+bool
+CrossfadeEditor::on_key_release_event (GdkEventKey* ev)
+{
+ switch (ev->keyval) {
+ case GDK_Right:
+ if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
+ audition_right_dry_button.set_active (!audition_right_dry_button.get_active());
+ } else {
+ audition_right_button.set_active (!audition_right_button.get_active());
+ }
+ break;
+
+ case GDK_Left:
+ if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
+ audition_left_dry_button.set_active (!audition_left_dry_button.get_active());
+ } else {
+ audition_left_button.set_active (!audition_left_button.get_active());
+ }
+ break;
+
+ case GDK_space:
+ if (session.is_auditioning()) {
+ cancel_audition ();
+ } else {
+ audition_both_button.set_active (!audition_both_button.get_active());
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return true;
+}
diff --git a/gtk2_ardour/crossfade_edit.h b/gtk2_ardour/crossfade_edit.h
index 9e4db3be88..f7f607393f 100644
--- a/gtk2_ardour/crossfade_edit.h
+++ b/gtk2_ardour/crossfade_edit.h
@@ -62,15 +62,20 @@ class CrossfadeEditor : public ArdourDialog
};
struct Preset : public list<PresetPoint> {
+ const char* name;
const char* image_name;
-
- Preset (const char* x) : image_name (x) {}
+
+ Preset (const char* n, const char* x) : name (n), image_name (x) {}
};
typedef list<Preset*> Presets;
static Presets* fade_in_presets;
static Presets* fade_out_presets;
+
+ protected:
+ bool on_key_press_event (GdkEventKey*);
+ bool on_key_release_event (GdkEventKey*);
private:
boost::shared_ptr<ARDOUR::Crossfade> xfade;
diff --git a/gtk2_ardour/crossfade_view.cc b/gtk2_ardour/crossfade_view.cc
index 8507d5e4d9..a412e310af 100644
--- a/gtk2_ardour/crossfade_view.cc
+++ b/gtk2_ardour/crossfade_view.cc
@@ -175,7 +175,7 @@ CrossfadeView::redraw_curves ()
}
npoints = get_time_axis_view().editor.frame_to_pixel (crossfade->length());
- npoints = std::min (gdk_screen_width(), npoints);
+ // npoints = std::min (gdk_screen_width(), npoints);
if (!_visible || !crossfade->active() || npoints < 3) {
fade_in->hide();
@@ -190,6 +190,7 @@ CrossfadeView::redraw_curves ()
vec = new float[npoints];
crossfade->fade_in().curve().get_vector (0, crossfade->length(), vec, npoints);
+
for (int i = 0, pci = 0; i < npoints; ++i) {
Art::Point &p = (*points)[pci++];
p.set_x(i);
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 6cc35252d5..6f7a5eb132 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -369,6 +369,7 @@ Editor::Editor ()
range_marker_drag_rect = 0;
marker_drag_line = 0;
set_midi_edit_mode (MidiEditPencil, true);
+ _edit_point = EditAtMouse;
set_mouse_mode (MouseObject, true);
frames_per_unit = 2048; /* too early to use reset_zoom () */
@@ -944,22 +945,24 @@ Editor::set_entered_track (TimeAxisView* tav)
void
Editor::show_window ()
{
- show_all_children ();
+ if (! is_visible ()) {
+ show_all ();
- /* re-hide editor list if necessary */
- editor_list_button_toggled ();
-
- /* now reset all audio_time_axis heights, because widgets might need
- to be re-hidden
- */
-
- TimeAxisView *tv;
+ /* re-hide editor list if necessary */
+ editor_list_button_toggled ();
+
+ /* now reset all audio_time_axis heights, because widgets might need
+ to be re-hidden
+ */
+
+ TimeAxisView *tv;
- for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- tv = (static_cast<TimeAxisView*>(*i));
- tv->reset_height ();
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+ tv = (static_cast<TimeAxisView*>(*i));
+ tv->reset_height ();
+ }
}
-
+
present ();
}
@@ -1099,8 +1102,6 @@ Editor::access_action (std::string action_group, std::string action_item)
ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::access_action), action_group, action_item));
- cout<< "OSC: Recieved: "<< action_item << endl;
-
RefPtr<Action> act;
act = ActionManager::get_action( action_group.c_str(), action_item.c_str() );
@@ -1276,11 +1277,23 @@ Editor::connect_to_session (Session *t)
edit_groups_changed ();
+ edit_point_clock.set_mode(AudioClock::BBT);
edit_point_clock.set_session (session);
zoom_range_clock.set_session (session);
_playlist_selector->set_session (session);
nudge_clock.set_session (session);
- nudge_clock.set (session->frame_rate() * 5); // default of 5 seconds
+ if (Profile->get_sae()) {
+ BBT_Time bbt;
+ bbt.bars = 0;
+ bbt.beats = 0;
+ bbt.ticks = 120;
+ nframes_t pos = session->tempo_map().bbt_duration_at (0, bbt, 1);
+ nudge_clock.set_mode(AudioClock::BBT);
+ nudge_clock.set (pos, true, 0, AudioClock::BBT);
+
+ } else {
+ nudge_clock.set (session->frame_rate() * 5, true, 0, AudioClock::SMPTE); // default of 5 seconds
+ }
playhead_cursor->canvas_item.show ();
@@ -1338,16 +1351,16 @@ Editor::connect_to_session (Session *t)
redisplay_named_selections ();
redisplay_snapshots ();
+ restore_ruler_visibility ();
+ //tempo_map_changed (Change (0));
+ session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
+
initial_route_list_display ();
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
(static_cast<TimeAxisView*>(*i))->set_samples_per_unit (frames_per_unit);
}
- restore_ruler_visibility ();
- //tempo_map_changed (Change (0));
- session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
-
start_scrolling ();
/* don't show master bus in a new session */
@@ -1889,10 +1902,11 @@ void
Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> region, Menu_Helpers::MenuList& edit_items)
{
using namespace Menu_Helpers;
+ Gtk::MenuItem* foo_item;
Menu *region_menu = manage (new Menu);
MenuList& items = region_menu->items();
region_menu->set_name ("ArdourContextMenu");
-
+
boost::shared_ptr<AudioRegion> ar;
boost::shared_ptr<MidiRegion> mr;
@@ -2031,7 +2045,12 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> regi
/* range related stuff */
- items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_location_from_audio_region)));
+ items.push_back (MenuElem (_("Add Single Range"), mem_fun (*this, &Editor::add_location_from_audio_region)));
+ items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_locations_from_audio_region)));
+ if (selection->regions.size() < 2) {
+ items.back().set_sensitive (false);
+ }
+
items.push_back (MenuElem (_("Set Range Selection"), mem_fun (*this, &Editor::set_selection_from_region)));
items.push_back (SeparatorElem());
@@ -2054,7 +2073,15 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> regi
trim_menu->set_name ("ArdourContextMenu");
trim_items.push_back (MenuElem (_("Start to edit point"), mem_fun(*this, &Editor::trim_region_from_edit_point)));
+ foo_item = &trim_items.back();
+ if (_edit_point == EditAtMouse) {
+ foo_item->set_sensitive (false);
+ }
trim_items.push_back (MenuElem (_("Edit point to end"), mem_fun(*this, &Editor::trim_region_to_edit_point)));
+ foo_item = &trim_items.back();
+ if (_edit_point == EditAtMouse) {
+ foo_item->set_sensitive (false);
+ }
trim_items.push_back (MenuElem (_("Trim To Loop"), mem_fun(*this, &Editor::trim_region_to_loop)));
trim_items.push_back (MenuElem (_("Trim To Punch"), mem_fun(*this, &Editor::trim_region_to_punch)));
@@ -2063,6 +2090,10 @@ Editor::add_region_context_items (StreamView* sv, boost::shared_ptr<Region> regi
items.push_back (MenuElem (_("Split"), (mem_fun(*this, &Editor::split_region))));
region_edit_menu_split_item = &items.back();
+
+ if (_edit_point == EditAtMouse) {
+ region_edit_menu_split_item->set_sensitive (false);
+ }
items.push_back (MenuElem (_("Make mono regions"), (mem_fun(*this, &Editor::split_multichannel_region))));
region_edit_menu_split_multichannel_item = &items.back();
@@ -2418,23 +2449,56 @@ Editor::set_state (const XMLNode& node)
_id = prop->value ();
}
- if ((geometry = find_named_node (node, "geometry")) == 0) {
+ g.base_width = default_width;
+ g.base_height = default_height;
+ x = 1;
+ y = 1;
+ xoff = 0;
+ yoff = 21;
- g.base_width = default_width;
- g.base_height = default_height;
- x = 1;
- y = 1;
- xoff = 0;
- yoff = 21;
+ if ((geometry = find_named_node (node, "geometry")) != 0) {
- } else {
+ XMLProperty* prop;
+
+ if ((prop = geometry->property("x_size")) == 0) {
+ prop = geometry->property ("x-size");
+ }
+ if (prop) {
+ g.base_width = atoi(prop->value());
+ }
+ if ((prop = geometry->property("y_size")) == 0) {
+ prop = geometry->property ("y-size");
+ }
+ if (prop) {
+ g.base_height = atoi(prop->value());
+ }
+
+ if ((prop = geometry->property ("x_pos")) == 0) {
+ prop = geometry->property ("x-pos");
+ }
+ if (prop) {
+ x = atoi (prop->value());
+
+ }
+ if ((prop = geometry->property ("y_pos")) == 0) {
+ prop = geometry->property ("y-pos");
+ }
+ if (prop) {
+ y = atoi (prop->value());
+ }
- g.base_width = atoi(geometry->property("x-size")->value());
- g.base_height = atoi(geometry->property("y-size")->value());
- x = atoi(geometry->property("x-pos")->value());
- y = atoi(geometry->property("y-pos")->value());
- xoff = atoi(geometry->property("x-off")->value());
- yoff = atoi(geometry->property("y-off")->value());
+ if ((prop = geometry->property ("x_off")) == 0) {
+ prop = geometry->property ("x-off");
+ }
+ if (prop) {
+ xoff = atoi (prop->value());
+ }
+ if ((prop = geometry->property ("y_off")) == 0) {
+ prop = geometry->property ("y-off");
+ }
+ if (prop) {
+ yoff = atoi (prop->value());
+ }
}
set_default_size (g.base_width, g.base_height);
@@ -2941,7 +3005,7 @@ Editor::setup_toolbar ()
#ifdef GTKOSX
const guint32 FUDGE = 38; // Combo's are stupid - they steal space from the entry for the button
#else
- const guint32 FUDGE = 18; // Combo's are stupid - they steal space from the entry for the button
+ const guint32 FUDGE = 24; // Combo's are stupid - they steal space from the entry for the button
#endif
/* Mode Buttons (tool selection) */
@@ -2996,7 +3060,9 @@ Editor::setup_toolbar ()
vector<string> edit_mode_strings;
edit_mode_strings.push_back (edit_mode_to_string (Slide));
- edit_mode_strings.push_back (edit_mode_to_string (Splice));
+ if (!Profile->get_sae()) {
+ edit_mode_strings.push_back (edit_mode_to_string (Splice));
+ }
edit_mode_strings.push_back (edit_mode_to_string (Lock));
edit_mode_selector.set_name ("EditModeSelector");
@@ -3010,6 +3076,10 @@ Editor::setup_toolbar ()
mouse_mode_tearoff = manage (new TearOff (*mode_box));
mouse_mode_tearoff->set_name ("MouseModeBase");
+ if (Profile->get_sae()) {
+ mouse_mode_tearoff->set_can_be_torn_off (false);
+ }
+
mouse_mode_tearoff->Detach.connect (bind (mem_fun(*this, &Editor::detach_tearoff), static_cast<Box*>(&toolbar_hbox),
&mouse_mode_tearoff->tearoff_window()));
mouse_mode_tearoff->Attach.connect (bind (mem_fun(*this, &Editor::reattach_tearoff), static_cast<Box*> (&toolbar_hbox),
@@ -3138,6 +3208,10 @@ Editor::setup_toolbar ()
tools_tearoff = manage (new TearOff (*hbox));
tools_tearoff->set_name ("MouseModeBase");
+ if (Profile->get_sae()) {
+ tools_tearoff->set_can_be_torn_off (false);
+ }
+
tools_tearoff->Detach.connect (bind (mem_fun(*this, &Editor::detach_tearoff), static_cast<Box*>(&toolbar_hbox),
&tools_tearoff->tearoff_window()));
tools_tearoff->Attach.connect (bind (mem_fun(*this, &Editor::reattach_tearoff), static_cast<Box*> (&toolbar_hbox),
@@ -3306,12 +3380,19 @@ Editor::convert_drop_to_paths (vector<ustring>& paths,
}
/* Parse the "uri-list" format that Nautilus provides,
- where each pathname is delimited by \r\n
+ where each pathname is delimited by \r\n.
+
+ THERE MAY BE NO NULL TERMINATING CHAR!!!
*/
-
- const char* p = data.get_text().c_str();
+
+ ustring txt = data.get_text();
+ const char* p;
const char* q;
+ p = (const char *) malloc (txt.length() + 1);
+ txt.copy ((char *) p, txt.length(), 0);
+ ((char*)p)[txt.length()] = '\0';
+
while (p)
{
if (*p != '#')
@@ -3320,8 +3401,9 @@ Editor::convert_drop_to_paths (vector<ustring>& paths,
p++;
q = p;
- while (*q && (*q != '\n') && (*q != '\r'))
+ while (*q && (*q != '\n') && (*q != '\r')) {
q++;
+ }
if (q > p)
{
@@ -3340,6 +3422,8 @@ Editor::convert_drop_to_paths (vector<ustring>& paths,
p++;
}
+ free ((void*)p);
+
if (uris.empty()) {
return -1;
}
@@ -3638,7 +3722,11 @@ Editor::cycle_edit_mode ()
{
switch (Config->get_edit_mode()) {
case Slide:
- Config->set_edit_mode (Splice);
+ if (Profile->get_sae()) {
+ Config->set_edit_mode (Lock);
+ } else {
+ Config->set_edit_mode (Splice);
+ }
break;
case Splice:
Config->set_edit_mode (Lock);
@@ -3911,12 +3999,23 @@ Editor::pane_allocation_handler (Allocation &alloc, Paned* which)
static int32_t done;
XMLNode* geometry;
- if ((geometry = find_named_node (*node, "geometry")) == 0) {
- width = default_width;
- height = default_height;
- } else {
- width = atoi(geometry->property("x-size")->value());
- height = atoi(geometry->property("y-size")->value());
+ width = default_width;
+ height = default_height;
+
+ if ((geometry = find_named_node (*node, "geometry")) != 0) {
+
+ if ((prop = geometry->property ("x_size")) == 0) {
+ prop = geometry->property ("x-size");
+ }
+ if (prop) {
+ width = atoi (prop->value());
+ }
+ if ((prop = geometry->property ("y_size")) == 0) {
+ prop = geometry->property ("y-size");
+ }
+ if (prop) {
+ height = atoi (prop->value());
+ }
}
if (which == static_cast<Paned*> (&edit_pane)) {
@@ -4594,6 +4693,8 @@ Editor::set_frames_per_unit (double fpu)
void
Editor::post_zoom ()
{
+ nframes64_t cef = 0;
+
// convert fpu to frame count
nframes64_t frames = (nframes64_t) floor (frames_per_unit * canvas_width);
@@ -4614,9 +4715,16 @@ Editor::post_zoom ()
}
}
+
ZoomChanged (); /* EMIT_SIGNAL */
reset_hscrollbar_stepping ();
+
+ if (session) {
+ cef = session->current_end_frame() + (current_page_frames() / 10);// Add a little extra so we can see the end marker
+ }
+ horizontal_adjustment.set_upper (cef / frames_per_unit);
+
//reset_scrolling_region ();
if (playhead_cursor) {
@@ -4663,6 +4771,10 @@ Editor::idle_visual_changer ()
VisualChange::Type p = pending_visual_change.pending;
pending_visual_change.pending = (VisualChange::Type) 0;
+#ifdef FIX_THIS_FOR_V3
+ double last_time_origin = horizontal_adjustment.get_value();
+#endif
+
if (p & VisualChange::ZoomLevel) {
set_frames_per_unit (pending_visual_change.frames_per_unit);
@@ -4672,25 +4784,34 @@ Editor::idle_visual_changer ()
update_tempo_based_rulers ();
}
if (p & VisualChange::TimeOrigin) {
+ horizontal_adjustment.set_value (pending_visual_change.time_origin / frames_per_unit);
+ }
- nframes64_t csf=0, cef=0;
- nframes64_t current_time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
-
- if (session) {
- csf = session->current_start_frame();
- cef = session->current_end_frame();
- }
-
- /* if we seek beyond the current end of the canvas, move the end */
+ nframes64_t csf=0, cef=0;
+ nframes64_t current_time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
+
+ if (session) {
+ csf = session->current_start_frame();
+ cef = session->current_end_frame();
+ }
+
+ /* if we seek beyond the current end of the canvas, move the end */
- if (current_time_origin != pending_visual_change.time_origin) {
- cef += current_page_frames() / 10; // Add a little extra so we can see the end marker
- horizontal_adjustment.set_upper (cef / frames_per_unit);
- horizontal_adjustment.set_value (pending_visual_change.time_origin / frames_per_unit);
- } else {
- update_fixed_rulers();
- redisplay_tempo (true);
- }
+#ifdef FIX_THIS_FOR_V3
+ if (last_time_origin == horizontal_adjustment.get_value() ) {
+ /* changed signal not emitted */
+ update_fixed_rulers ();
+ redisplay_tempo (true);
+ }
+#endif
+
+ if (current_time_origin != pending_visual_change.time_origin) {
+ cef += current_page_frames() / 10; // Add a little extra so we can see the end marker
+ horizontal_adjustment.set_upper (cef / frames_per_unit);
+ horizontal_adjustment.set_value (pending_visual_change.time_origin / frames_per_unit);
+ } else {
+ update_fixed_rulers();
+ redisplay_tempo (true);
}
//cerr << "Editor::idle_visual_changer () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG
pending_visual_change.idle_handler_id = -1;
@@ -5016,6 +5137,9 @@ Editor::first_idle ()
for (TrackViewList::iterator t = track_views.begin(); t != track_views.end(); ++t) {
(*t)->first_idle();
}
+
+ // first idle adds route children (automation tracks), so we need to redisplay here
+ redisplay_route_list();
if (dialog) {
delete dialog;
@@ -5171,7 +5295,7 @@ Editor::add_to_idle_resize (TimeAxisView* view, uint32_t h)
{
if (resize_idle_id < 0) {
resize_idle_id = g_idle_add (_idle_resizer, this);
- }
+ }
resize_idle_target = h;
@@ -5189,6 +5313,7 @@ Editor::idle_resize ()
(*i)->idle_resize (resize_idle_target);
}
pending_resizes.clear();
+ flush_canvas ();
resize_idle_id = -1;
return false;
}
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 0fb988bafd..2b421163e4 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -323,6 +323,7 @@ class Editor : public PublicEditor
void toggle_measure_visibility ();
void toggle_logo_visibility ();
+ double get_physical_screen_width () const { return physical_screen_width; };
double physical_screen_width;
double physical_screen_height;
@@ -342,7 +343,6 @@ class Editor : public PublicEditor
void toggle_region_fades_visible ();
void toggle_selected_region_fades (int dir);
void update_region_fade_visibility ();
-
void toggle_auto_xfade ();
void toggle_xfades_active ();
void toggle_xfade_visibility ();
@@ -649,6 +649,13 @@ class Editor : public PublicEditor
ArdourCanvas::Group* cd_marker_bar_group;
/** The group containing all items that require horizontal scrolling. */
+ ArdourCanvas::Group* _background_group;
+ /*
+ The _master_group is the group containing all items
+ that require horizontal scrolling..
+ It is primarily used to separate canvas items
+ that require horizontal scrolling from those that do not.
+ */
ArdourCanvas::Group* _master_group;
/* The group containing all trackviews. Only scrolled vertically. */
@@ -779,6 +786,7 @@ class Editor : public PublicEditor
static const double timebar_height;
guint32 visible_timebars;
gdouble canvas_timebars_vsize;
+ gdouble get_canvas_timebars_vsize () const { return canvas_timebars_vsize; }
Gtk::Menu *editor_ruler_menu;
ArdourCanvas::SimpleRect* tempo_bar;
@@ -899,6 +907,8 @@ class Editor : public PublicEditor
sigc::connection control_scroll_connection;
gdouble get_trackview_group_vertical_offset () const { return vertical_adjustment.get_value () - canvas_timebars_vsize;}
+
+ ArdourCanvas::Group* get_background_group () const { return _background_group; }
ArdourCanvas::Group* get_trackview_group () const { return _trackview_group; }
double last_trackview_group_vertical_offset;
void tie_vertical_scrolling ();
@@ -1138,6 +1148,7 @@ class Editor : public PublicEditor
void toggle_region_mute ();
void toggle_region_lock ();
void toggle_region_opaque ();
+ void toggle_record_enable ();
void set_region_lock_style (ARDOUR::Region::PositionLockStyle);
void raise_region ();
void raise_region_to_top ();
@@ -1248,16 +1259,14 @@ class Editor : public PublicEditor
void bring_in_external_audio (Editing::ImportMode mode, nframes64_t& pos);
- void _do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
+ bool idle_drop_paths (std::vector<Glib::ustring> paths, nframes64_t frame, double ypos);
+ void drop_paths_part_two (const std::vector<Glib::ustring>& paths, nframes64_t frame, double ypos);
+
void do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
- bool idle_do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
-
- void _do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&);
void do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&);
- bool idle_do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&);
int import_sndfiles (vector<Glib::ustring> paths, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t& pos,
- int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&, bool);
+ int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>, bool, uint32_t total);
int embed_sndfiles (vector<Glib::ustring> paths, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode,
nframes64_t& pos, int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&);
@@ -1286,10 +1295,20 @@ class Editor : public PublicEditor
/* import specific info */
- ARDOUR::Session::import_status import_status;
+ struct EditorImportStatus : public ARDOUR::Session::import_status {
+ Editing::ImportMode mode;
+ nframes64_t pos;
+ int target_tracks;
+ int target_regions;
+ boost::shared_ptr<ARDOUR::Track> track;
+ bool replace;
+ };
+
+ EditorImportStatus import_status;
gint import_progress_timeout (void *);
static void *_import_thread (void *);
void* import_thread ();
+ void finish_import ();
/* to support this ... */
@@ -1338,6 +1357,7 @@ class Editor : public PublicEditor
void add_location_mark (nframes64_t where);
void add_location_from_audio_region ();
+ void add_locations_from_audio_region ();
void add_location_from_selection ();
void set_loop_from_selection (bool play);
void set_punch_from_selection ();
@@ -1382,6 +1402,7 @@ class Editor : public PublicEditor
double snap_threshold;
void handle_gui_changes (const string &, void *);
+ bool ignore_gui_changes;
void hide_all_tracks (bool with_select);
@@ -1397,6 +1418,8 @@ class Editor : public PublicEditor
Gtk::Menu fade_context_menu;
void popup_fade_context_menu (int, int, ArdourCanvas::Item*, ItemType);
+ void region_gain_motion_callback (ArdourCanvas::Item*, GdkEvent*);
+
void start_fade_in_grab (ArdourCanvas::Item*, GdkEvent*);
void start_fade_out_grab (ArdourCanvas::Item*, GdkEvent*);
void fade_in_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
@@ -1428,6 +1451,7 @@ class Editor : public PublicEditor
void cursor_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
void cursor_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
+ void cursor_drag_finished_ensure_locate_callback (ArdourCanvas::Item*, GdkEvent*);
void marker_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
void marker_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
void control_point_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
@@ -1448,6 +1472,7 @@ class Editor : public PublicEditor
void start_region_brush_grab (ArdourCanvas::Item*, GdkEvent*);
void start_selection_grab (ArdourCanvas::Item*, GdkEvent*);
void start_cursor_grab (ArdourCanvas::Item*, GdkEvent*);
+ void start_cursor_grab_no_stop (ArdourCanvas::Item*, GdkEvent*);
void start_marker_grab (ArdourCanvas::Item*, GdkEvent*);
void start_control_point_grab (ArdourCanvas::Item*, GdkEvent*);
void start_line_grab_from_regionview (ArdourCanvas::Item*, GdkEvent*);
@@ -1784,7 +1809,9 @@ public:
ArdourCanvas::SimpleRect* range_marker_drag_rect;
void update_marker_drag_item (ARDOUR::Location *);
-
+#ifdef GTKOSX
+ ArdourCanvas::SimpleRect *bogus_background_rect;
+#endif
ArdourCanvas::SimpleRect *transport_bar_range_rect;
ArdourCanvas::SimpleRect *transport_bar_preroll_rect;
ArdourCanvas::SimpleRect *transport_bar_postroll_rect;
@@ -1996,7 +2023,6 @@ public:
guint info,
guint time);
-
void drop_paths (const Glib::RefPtr<Gdk::DragContext>& context,
gint x,
gint y,
@@ -2109,6 +2135,7 @@ public:
Gtk::ComboBoxText stretch_opts_selector;
Gtk::Label stretch_opts_label;
Gtk::ToggleButton precise_button;
+ Gtk::ToggleButton preserve_formants_button;
Gtk::HBox opts_box;
Gtk::Button* cancel_button;
@@ -2151,7 +2178,9 @@ public:
void detach_tearoff (Gtk::Box* b, Gtk::Window* w);
void reattach_tearoff (Gtk::Box* b, Gtk::Window* w, int32_t n);
-
+#ifdef GTKOSX
+ void ensure_all_elements_drawn ();
+#endif
/* nudging tracks */
void nudge_track (bool use_edit_point, bool forwards);
@@ -2250,6 +2279,7 @@ public:
bool entered_track_canvas (GdkEventCrossing*);
void set_entered_track (TimeAxisView*);
void set_entered_regionview (RegionView*);
+ void ensure_track_visible (TimeAxisView*);
gint left_automation_track ();
bool _new_regionviews_show_envelope;
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index a8f3bf3028..75d4b76668 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -57,6 +57,8 @@ Editor::register_actions ()
ActionManager::register_action (editor_actions, X_("LatchMenu"), _("Latch"));
ActionManager::register_action (editor_actions, X_("Layering"), _("Layering"));
ActionManager::register_action (editor_actions, X_("Link"), _("Link"));
+ ActionManager::register_action (editor_actions, X_("ZoomFocusMenu"), _("Zoom Focus"));
+ ActionManager::register_action (editor_actions, X_("KeyMouseActions"), _("Key Mouse"));
ActionManager::register_action (editor_actions, X_("LocateToMarker"), _("Locate To Markers"));
ActionManager::register_action (editor_actions, X_("MarkerMenu"), _("Markers"));
ActionManager::register_action (editor_actions, X_("MeterFalloff"), _("Meter falloff"));
@@ -207,6 +209,9 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "select-prev-route", _("Select Previous Track/Bus"), mem_fun(*this, &Editor::select_prev_route));
ActionManager::session_sensitive_actions.push_back (act);
+ act = ActionManager::register_action (editor_actions, "track-record-enable-toggle", _("Toggle Record Enable"), mem_fun(*this, &Editor::toggle_record_enable));
+ ActionManager::session_sensitive_actions.push_back (act);
+
act = ActionManager::register_action (editor_actions, "save-visual-state-1", _("Save View 1"), bind (mem_fun (*this, &Editor::start_visual_state_op), 0));
ActionManager::session_sensitive_actions.push_back (act);
@@ -378,6 +383,7 @@ Editor::register_actions ()
ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "loop-region", _("Loop Region"), bind (mem_fun(*this, &Editor::set_loop_from_region), true));
ActionManager::session_sensitive_actions.push_back (act);
+ ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-punch-from-edit-range", _("Set Punch From Edit Range"), mem_fun(*this, &Editor::set_punch_from_edit_range));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-punch-from-region", _("Set Punch From Region"), mem_fun(*this, &Editor::set_punch_from_region));
@@ -389,6 +395,12 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "toggle-opaque-region", _("Toggle Opaque"), mem_fun(*this, &Editor::toggle_region_opaque));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::region_selection_sensitive_actions.push_back (act);
+ act = ActionManager::register_action (editor_actions, "add-range-marker-from-region", _("Add 1 Range Marker"), mem_fun(*this, &Editor::add_location_from_audio_region));
+ ActionManager::session_sensitive_actions.push_back (act);
+ ActionManager::region_selection_sensitive_actions.push_back (act);
+ act = ActionManager::register_action (editor_actions, "add-range-markers-from-region", _("Add Range Marker(s)"), mem_fun(*this, &Editor::add_locations_from_audio_region));
+ ActionManager::session_sensitive_actions.push_back (act);
+ ActionManager::region_selection_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "set-fade-in-length", _("Set Fade In Length"), bind (mem_fun(*this, &Editor::set_fade_length), true));
ActionManager::session_sensitive_actions.push_back (act);
@@ -588,7 +600,11 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "toggle-track-active", _("Toggle Active"), (mem_fun(*this, &Editor::toggle_tracks_active)));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::track_selection_sensitive_actions.push_back (act);
- act = ActionManager::register_action (editor_actions, "remove-track", _("Remove"), (mem_fun(*this, &Editor::remove_tracks)));
+ if (Profile->get_sae()) {
+ act = ActionManager::register_action (editor_actions, "remove-track", _("Delete"), (mem_fun(*this, &Editor::remove_tracks)));
+ } else {
+ act = ActionManager::register_action (editor_actions, "remove-track", _("Remove"), (mem_fun(*this, &Editor::remove_tracks)));
+ }
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::track_selection_sensitive_actions.push_back (act);
@@ -640,6 +656,8 @@ Editor::register_actions ()
ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-timefx", _("Timefx Tool"), bind (mem_fun(*this, &Editor::set_mouse_mode), Editing::MouseTimeFX, false));
ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-note", _("Note Tool"), bind (mem_fun(*this, &Editor::set_mouse_mode), Editing::MouseNote, false));
+ ActionManager::register_action (editor_actions, "step-mouse-mode", _("Step Mouse Mode"), bind (mem_fun(*this, &Editor::step_mouse_mode), true));
+
RadioAction::Group edit_point_group;
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-playhead"), _("Playhead"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-mouse"), _("Mouse"), (bind (mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
@@ -647,8 +665,9 @@ Editor::register_actions ()
ActionManager::register_action (editor_actions, "cycle-edit-point", _("Change edit point"), bind (mem_fun (*this, &Editor::cycle_edit_point), false));
ActionManager::register_action (editor_actions, "cycle-edit-point-with-marker", _("Change edit point (w/Marker)"), bind (mem_fun (*this, &Editor::cycle_edit_point), true));
-
- ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), bind (mem_fun (*this, &Editor::set_edit_mode), Splice));
+ if (!Profile->get_sae()) {
+ ActionManager::register_action (editor_actions, "set-edit-splice", _("Splice"), bind (mem_fun (*this, &Editor::set_edit_mode), Splice));
+ }
ActionManager::register_action (editor_actions, "set-edit-slide", _("Slide"), bind (mem_fun (*this, &Editor::set_edit_mode), Slide));
ActionManager::register_action (editor_actions, "set-edit-lock", _("Lock"), bind (mem_fun (*this, &Editor::set_edit_mode), Lock));
ActionManager::register_action (editor_actions, "toggle-edit-mode", _("Toggle Edit Mode"), mem_fun (*this, &Editor::cycle_edit_mode));
@@ -706,12 +725,16 @@ Editor::register_actions ()
ruler_meter_action->set_active (true);
ruler_tempo_action->set_active (true);
ruler_marker_action->set_active (true);
- ruler_range_action->set_active (true);
+ ruler_range_action->set_active (false);
+ ruler_loop_punch_action->set_active (true);
+ ruler_loop_punch_action->set_active (true);
if (Profile->get_sae()) {
+ ruler_bbt_action->set_active (true);
ruler_cd_marker_action->set_active (false);
ruler_timecode_action->set_active (false);
ruler_minsec_action->set_active (true);
} else {
+ ruler_bbt_action->set_active (false);
ruler_cd_marker_action->set_active (true);
ruler_timecode_action->set_active (true);
ruler_minsec_action->set_active (false);
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index a12eb0857f..d6246f15fc 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -57,6 +57,7 @@
#include "midi_time_axis.h"
#include "session_import_dialog.h"
#include "utils.h"
+#include "gui_thread.h"
#include "i18n.h"
@@ -217,7 +218,6 @@ Editor::check_whether_and_how_to_import(string path, bool all_or_nothing)
for (SourceMap::iterator i = all_sources.begin(); i != all_sources.end(); ++i) {
string tmp (Glib::path_get_basename (i->second->path()));
-
if (tmp == wave_name) {
wave_name_exists = true;
break;
@@ -226,7 +226,6 @@ Editor::check_whether_and_how_to_import(string path, bool all_or_nothing)
int function = 1;
-
if (wave_name_exists) {
string message;
if (all_or_nothing) {
@@ -249,7 +248,6 @@ Editor::check_whether_and_how_to_import(string path, bool all_or_nothing)
dialog.add_button("Cancel", 2);
}
-
//dialog.add_button("Skip all", 4); // All or rest?
dialog.show();
@@ -322,29 +320,11 @@ Editor::get_nth_selected_midi_track (int nth) const
return mtv->midi_track();
}
-bool
-Editor::idle_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mode, SrcQuality quality, nframes64_t& pos)
-{
- _do_import (paths, chns, mode, quality, pos);
- return false;
-}
-
void
Editor::do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mode, SrcQuality quality, nframes64_t& pos)
{
-#ifdef GTKOSX
- Glib::signal_idle().connect (bind (mem_fun (*this, &Editor::idle_do_import), paths, chns, mode, quality, pos));
-#else
- _do_import (paths, chns, mode, quality, pos);
-#endif
-}
-
-void
-Editor::_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mode, SrcQuality quality, nframes64_t& pos)
-{
boost::shared_ptr<Track> track;
vector<ustring> to_import;
- bool ok = true;
int nth = 0;
if (interthread_progress_window == 0) {
@@ -352,11 +332,13 @@ Editor::_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mo
}
if (chns == Editing::ImportMergeFiles) {
+
/* create 1 region from all paths, add to 1 track,
ignore "track"
*/
+
bool cancel = false;
- for (vector<ustring>::iterator a = paths.begin(); a != paths.end() && ok; ++a) {
+ for (vector<ustring>::iterator a = paths.begin(); a != paths.end(); ++a) {
int check = check_whether_and_how_to_import(*a, false);
if (check == 2) {
cancel = true;
@@ -365,20 +347,21 @@ Editor::_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mo
}
if (!cancel) {
- if (import_sndfiles (paths, mode, quality, pos, 1, 1, track, false)) {
- ok = false;
- }
+ import_sndfiles (paths, mode, quality, pos, 1, 1, track, false, paths.size());
}
} else {
+
bool replace = false;
+ bool ok = true;
+ vector<ustring>::size_type total = paths.size();
for (vector<ustring>::iterator a = paths.begin(); a != paths.end() && ok; ++a) {
int check = check_whether_and_how_to_import(*a, true);
if (check == 2 ) {
- // skip
+ // user said skip
continue;
}
@@ -390,82 +373,49 @@ Editor::_do_import (vector<ustring> paths, ImportDisposition chns, ImportMode mo
}
- switch (chns) {
- case Editing::ImportDistinctFiles:
-
- to_import.clear ();
- to_import.push_back (*a);
-
- if (mode == Editing::ImportToTrack) {
- track = get_nth_selected_audio_track (nth++);
- }
-
- if (import_sndfiles (to_import, mode, quality, pos, 1, -1, track, replace)) {
- ok = false;
- }
-
- break;
- case Editing::ImportDistinctChannels:
-
- to_import.clear ();
- to_import.push_back (*a);
-
- if (import_sndfiles (to_import, mode, quality, pos, -1, -1, track, replace)) {
- ok = false;
- }
-
- break;
-
- case Editing::ImportSerializeFiles:
-
- to_import.clear ();
- to_import.push_back (*a);
-
- /* create 1 region from this path, add to 1 track,
- reuse "track" across paths
- */
-
- if (import_sndfiles (to_import, mode, quality, pos, 1, 1, track, replace)) {
- ok = false;
- }
+ switch (chns) {
+ case Editing::ImportDistinctFiles:
+
+ to_import.clear ();
+ to_import.push_back (*a);
+
+ if (mode == Editing::ImportToTrack) {
+ track = get_nth_selected_audio_track (nth++);
+ }
+
+ ok = (import_sndfiles (to_import, mode, quality, pos, 1, -1, track, replace, total) == 0);
+ break;
+
+ case Editing::ImportDistinctChannels:
+
+ to_import.clear ();
+ to_import.push_back (*a);
+
+ ok = (import_sndfiles (to_import, mode, quality, pos, -1, -1, track, replace, total) == 0);
+ break;
+
+ case Editing::ImportSerializeFiles:
+
+ to_import.clear ();
+ to_import.push_back (*a);
- break;
+ ok = (import_sndfiles (to_import, mode, quality, pos, 1, 1, track, replace, total) == 0);
+ break;
- case Editing::ImportMergeFiles:
- // Not entered
- break;
+ case Editing::ImportMergeFiles:
+ // Not entered, handled in earlier if() branch
+ break;
}
}
-
- if (ok) {
- session->save_state ("");
- }
-
- interthread_progress_window->hide_all ();
}
-}
-bool
-Editor::idle_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos)
-{
- _do_embed (paths, chns, mode, pos);
- return false;
+ interthread_progress_window->hide_all ();
}
void
Editor::do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos)
{
-#ifdef GTKOSX
- Glib::signal_idle().connect (bind (mem_fun (*this, &Editor::idle_do_embed), paths, chns, mode, pos));
-#else
- _do_embed (paths, chns, mode, pos);
-#endif
-}
-
-void
-Editor::_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mode, nframes64_t& pos)
-{
boost::shared_ptr<Track> track;
bool check_sample_rate = true;
bool ok = false;
@@ -531,7 +481,7 @@ Editor::_do_embed (vector<ustring> paths, ImportDisposition chns, ImportMode mod
int
Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality quality, nframes64_t& pos,
- int target_regions, int target_tracks, boost::shared_ptr<Track>& track, bool replace)
+ int target_regions, int target_tracks, boost::shared_ptr<Track> track, bool replace, uint32_t total)
{
WindowTitle title = string_compose (_("importing %1"), paths.front());
@@ -539,7 +489,7 @@ Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality qual
interthread_progress_window->set_position (Gtk::WIN_POS_MOUSE);
interthread_progress_bar.set_fraction (0.0f);
interthread_cancel_label.set_text (_("Cancel Import"));
- current_interthread_info = &import_status;
+ current_interthread_info = &import_status;
import_status.paths = paths;
import_status.done = false;
@@ -548,42 +498,53 @@ Editor::import_sndfiles (vector<ustring> paths, ImportMode mode, SrcQuality qual
import_status.done = 0.0;
import_status.quality = quality;
import_status.replace_existing_source = replace;
-
+ import_status.total = total;
+
+ import_status.mode = mode;
+ import_status.pos = pos;
+ import_status.target_tracks = target_tracks;
+ import_status.target_regions = target_regions;
+ import_status.track = track;
+ import_status.replace = replace;
interthread_progress_connection = Glib::signal_timeout().connect
(bind (mem_fun(*this, &Editor::import_progress_timeout), (gpointer) 0), 500);
track_canvas->get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
- ARDOUR_UI::instance()->flush_pending ();
+ gdk_flush ();
/* start import thread for this spec. this will ultimately call Session::import_audiofiles()
- and if successful will add the file(s) as a region to the session region list.
+ which, if successful, will add the files as regions to the region list. its up to us
+ (the GUI) to direct additional steps after that.
*/
-
+
pthread_create_and_store ("import", &import_status.thread, 0, _import_thread, this);
pthread_detach (import_status.thread);
- while (!(import_status.done || import_status.cancel)) {
+ while (!import_status.done && !import_status.cancel) {
gtk_main_iteration ();
}
interthread_progress_window->hide ();
-
import_status.done = true;
interthread_progress_connection.disconnect ();
- /* import thread finished - see if we should build a new track */
-
- boost::shared_ptr<AudioRegion> r;
-
- if (import_status.cancel || import_status.sources.empty()) {
- goto out;
+ if (!import_status.cancel && !import_status.sources.empty()) {
+ if (add_sources (import_status.paths,
+ import_status.sources,
+ import_status.pos,
+ import_status.mode,
+ import_status.target_regions,
+ import_status.target_tracks,
+ import_status.track, false) == 0) {
+ session->save_state ("");
+ }
+
+ /* update position from results */
+
+ pos = import_status.pos;
}
- if (add_sources (paths, import_status.sources, pos, mode, target_regions, target_tracks, track, false) == 0) {
- session->save_state ("");
- }
- out:
track_canvas->get_window()->set_cursor (*current_canvas_cursor);
return 0;
}
@@ -600,7 +561,7 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
int ret = 0;
track_canvas->get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
- ARDOUR_UI::instance()->flush_pending ();
+ gdk_flush ();
for (vector<Glib::ustring>::iterator p = paths.begin(); p != paths.end(); ++p) {
@@ -710,8 +671,6 @@ Editor::embed_sndfiles (vector<Glib::ustring> paths, bool multifile,
if ((s = session->source_by_path_and_channel (path, n)) == 0) {
- cerr << "add embed/import source with defer_peaks = true\n";
-
source = boost::dynamic_pointer_cast<AudioFileSource> (SourceFactory::createReadable
(DataType::AUDIO, *session, path, n,
(mode == ImportAsTapeTrack ?
@@ -775,7 +734,7 @@ Editor::add_sources (vector<Glib::ustring> paths, SourceList& sources, nframes64
regions.push_back (RegionFactory::create (sources, 0, sources[0]->length(), region_name, 0,
Region::Flag (Region::DefaultFlags|Region::WholeFile|Region::External)));
- } else if (target_regions == -1) {
+ } else if (target_regions == -1 || target_regions > 1) {
/* take each source and create a region for each one */
@@ -922,7 +881,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t
void *
Editor::_import_thread (void *arg)
{
- PBD::ThreadCreated (pthread_self(), X_("Import"));
+ PBD::notify_gui_about_thread_creation (pthread_self(), X_("Import"));
Editor *ed = (Editor *) arg;
return ed->import_thread ();
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index f0a016d039..be004644f9 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -18,6 +18,7 @@
*/
#include <libgnomecanvasmm/init.h>
+#include <libgnomecanvasmm/pixbuf.h>
#include <jack/types.h>
#include <gtkmm2ext/utils.h>
@@ -29,9 +30,11 @@
#include "waveview.h"
#include "simplerect.h"
#include "simpleline.h"
+#include "imageframe.h"
#include "waveview_p.h"
#include "simplerect_p.h"
#include "simpleline_p.h"
+#include "imageframe_p.h"
#include "canvas_impl.h"
#include "editing.h"
#include "rgb_macros.h"
@@ -39,11 +42,6 @@
#include "time_axis_view.h"
#include "audio_time_axis.h"
-#ifdef WITH_CMT
-#include "imageframe.h"
-#include "imageframe_p.h"
-#endif
-
#include "i18n.h"
using namespace std;
@@ -65,10 +63,7 @@ extern "C"
GType gnome_canvas_simpleline_get_type(void);
GType gnome_canvas_simplerect_get_type(void);
GType gnome_canvas_waveview_get_type(void);
-
-#ifdef WITH_CMT
GType gnome_canvas_imageframe_get_type(void);
-#endif
}
@@ -79,23 +74,16 @@ static void ardour_canvas_type_init()
Glib::wrap_register(gnome_canvas_simpleline_get_type(), &Gnome::Canvas::SimpleLine_Class::wrap_new);
Glib::wrap_register(gnome_canvas_simplerect_get_type(), &Gnome::Canvas::SimpleRect_Class::wrap_new);
Glib::wrap_register(gnome_canvas_waveview_get_type(), &Gnome::Canvas::WaveView_Class::wrap_new);
-
-#ifdef WITH_CMT
- Glib::wrap_register(gnome_canvas_imageframe_get_type(), &Gnome::Canvas::ImageFrame_Class::wrap_new);
-#endif
+ // Glib::wrap_register(gnome_canvas_imageframe_get_type(), &Gnome::Canvas::ImageFrame_Class::wrap_new);
// Register the gtkmm gtypes:
(void) Gnome::Canvas::WaveView::get_type();
(void) Gnome::Canvas::SimpleLine::get_type();
(void) Gnome::Canvas::SimpleRect::get_type();
-
-#ifdef WITH_CMT
(void) Gnome::Canvas::ImageFrame::get_type();
-#endif
}
-
void
Editor::initialize_canvas ()
{
@@ -114,7 +102,7 @@ Editor::initialize_canvas ()
track_canvas->set_dither (Gdk::RGB_DITHER_NONE);
Glib::RefPtr<Gdk::Screen> screen = get_screen();
-
+
if (!screen) {
screen = Gdk::Screen::get_default();
}
@@ -128,10 +116,12 @@ Editor::initialize_canvas ()
verbose_canvas_cursor = new ArdourCanvas::Text (*track_canvas->root());
verbose_canvas_cursor->property_font_desc() = *font;
verbose_canvas_cursor->property_anchor() = ANCHOR_NW;
-
- delete font;
+ delete font;
+
verbose_cursor_visible = false;
+
+ /* on the bottom, an image */
if (Profile->get_sae()) {
Image img (::get_icon (X_("saelogo")));
@@ -143,58 +133,92 @@ Editor::initialize_canvas ()
logo_item->show ();
}
- _master_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
+ /* a group to hold time (measure) lines */
+ time_line_group = new ArdourCanvas::Group (*track_canvas->root());
- transport_loop_range_rect = new ArdourCanvas::SimpleRect (*_master_group, 0.0, 0.0, 0.0, physical_screen_width);
+#ifdef GTKOSX
+ /*XXX please don't laugh. this actually improves canvas performance on osx */
+ bogus_background_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, max_canvas_coordinate/3, physical_screen_height);
+ bogus_background_rect->property_outline_pixels() = 0;
+#endif
+ transport_loop_range_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, physical_screen_height);
transport_loop_range_rect->property_outline_pixels() = 1;
transport_loop_range_rect->hide();
- transport_punch_range_rect = new ArdourCanvas::SimpleRect (*_master_group, 0.0, 0.0, 0.0, physical_screen_width);
+ transport_punch_range_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, physical_screen_height);
transport_punch_range_rect->property_outline_pixels() = 0;
transport_punch_range_rect->hide();
- /* a group to hold time (measure) lines */
- time_line_group = new ArdourCanvas::Group (*_master_group, 0.0, 0.0);
+ _background_group = new ArdourCanvas::Group (*track_canvas->root());
+ _master_group = new ArdourCanvas::Group (*track_canvas->root());
- range_marker_drag_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, physical_screen_width);
+ range_marker_drag_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, physical_screen_height);
range_marker_drag_rect->hide ();
- _trackview_group = new ArdourCanvas::Group (*_master_group, 0.0, 0.0);
- _region_motion_group = new ArdourCanvas::Group (*_trackview_group, 0.0, 0.0);
-
- /* el barrio */
+ _trackview_group = new ArdourCanvas::Group (*_master_group);
+ _region_motion_group = new ArdourCanvas::Group (*_trackview_group);
- meter_bar_group = new ArdourCanvas::Group (*track_canvas->root());
- meter_bar = new ArdourCanvas::SimpleRect (*meter_bar_group, 0.0, 0.0, physical_screen_width, timebar_height-1.0);
+ meter_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
+ if (Profile->get_sae()) {
+ meter_bar = new ArdourCanvas::SimpleRect (*meter_bar_group, 0.0, 0.0, physical_screen_width, timebar_height - 1);
+ meter_bar->property_outline_pixels() = 1;
+ } else {
+ meter_bar = new ArdourCanvas::SimpleRect (*meter_bar_group, 0.0, 0.0, physical_screen_width, timebar_height);
+ meter_bar->property_outline_pixels() = 0;
+ }
meter_bar->property_outline_what() = (0x1 | 0x8);
- meter_bar->property_outline_pixels() = 1;
- tempo_bar_group = new ArdourCanvas::Group (*track_canvas->root());
- tempo_bar = new ArdourCanvas::SimpleRect (*tempo_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height-1.0));
+ tempo_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
+ if (Profile->get_sae()) {
+ tempo_bar = new ArdourCanvas::SimpleRect (*tempo_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height - 1));
+ tempo_bar->property_outline_pixels() = 1;
+ } else {
+ tempo_bar = new ArdourCanvas::SimpleRect (*tempo_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height));
+ tempo_bar->property_outline_pixels() = 0;
+ }
tempo_bar->property_outline_what() = (0x1 | 0x8);
- tempo_bar->property_outline_pixels() = 1;
- range_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root());
- range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height-1.0));
+ range_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
+ if (Profile->get_sae()) {
+ range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height - 1));
+ range_marker_bar->property_outline_pixels() = 1;
+ } else {
+ range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height));
+ range_marker_bar->property_outline_pixels() = 0;
+ }
range_marker_bar->property_outline_what() = (0x1 | 0x8);
- range_marker_bar->property_outline_pixels() = 1;
- transport_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root());
- transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height-1.0));
+ transport_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
+ if (Profile->get_sae()) {
+ transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height - 1));
+ transport_marker_bar->property_outline_pixels() = 1;
+ } else {
+ transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height));
+ transport_marker_bar->property_outline_pixels() = 0;
+ }
transport_marker_bar->property_outline_what() = (0x1 | 0x8);
- transport_marker_bar->property_outline_pixels() = 1;
- marker_bar_group = new ArdourCanvas::Group (*track_canvas->root());
- marker_bar = new ArdourCanvas::SimpleRect (*marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height-1.0));
+ marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
+ if (Profile->get_sae()) {
+ marker_bar = new ArdourCanvas::SimpleRect (*marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height - 1));
+ marker_bar->property_outline_pixels() = 1;
+ } else {
+ marker_bar = new ArdourCanvas::SimpleRect (*marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height));
+ marker_bar->property_outline_pixels() = 0;
+ }
marker_bar->property_outline_what() = (0x1 | 0x8);
- marker_bar->property_outline_pixels() = 1;
- cd_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root());
- cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height-1.0));
+ cd_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root ());
+ if (Profile->get_sae()) {
+ cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height - 1));
+ cd_marker_bar->property_outline_pixels() = 1;
+ } else {
+ cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_bar_group, 0.0, 0.0, physical_screen_width, (timebar_height));
+ cd_marker_bar->property_outline_pixels() = 0;
+ }
cd_marker_bar->property_outline_what() = (0x1 | 0x8);
- cd_marker_bar->property_outline_pixels() = 1;
- timebar_group = new ArdourCanvas::Group (*track_canvas->root());
+ timebar_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
cursor_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
meter_group = new ArdourCanvas::Group (*timebar_group, 0.0, timebar_height * 5.0);
@@ -205,7 +229,7 @@ Editor::initialize_canvas ()
cd_marker_group = new ArdourCanvas::Group (*timebar_group, 0.0, 0.0);
marker_drag_line_points.push_back(Gnome::Art::Point(0.0, 0.0));
- marker_drag_line_points.push_back(Gnome::Art::Point(0.0, 1.0));
+ marker_drag_line_points.push_back(Gnome::Art::Point(0.0, physical_screen_height));
marker_drag_line = new ArdourCanvas::Line (*timebar_group);
marker_drag_line->property_width_pixels() = 1;
@@ -228,14 +252,14 @@ Editor::initialize_canvas ()
transport_punchin_line->property_x1() = 0.0;
transport_punchin_line->property_y1() = 0.0;
transport_punchin_line->property_x2() = 0.0;
- transport_punchin_line->property_y2() = physical_screen_width;
+ transport_punchin_line->property_y2() = physical_screen_height;
transport_punchin_line->hide ();
- transport_punchout_line = new ArdourCanvas::SimpleLine (*_master_group);
+ transport_punchout_line = new ArdourCanvas::SimpleLine (*_master_group);
transport_punchout_line->property_x1() = 0.0;
transport_punchout_line->property_y1() = 0.0;
transport_punchout_line->property_x2() = 0.0;
- transport_punchout_line->property_y2() = physical_screen_width;
+ transport_punchout_line->property_y2() = physical_screen_height;
transport_punchout_line->hide();
// used to show zoom mode active zooming
@@ -263,7 +287,6 @@ Editor::initialize_canvas ()
if (logo_item) {
logo_item->lower_to_bottom ();
}
-
/* need to handle 4 specific types of events as catch-alls */
track_canvas->signal_scroll_event().connect (mem_fun (*this, &Editor::track_canvas_scroll_event));
@@ -283,7 +306,6 @@ Editor::initialize_canvas ()
// Drag-N-Drop from the region list can generate this target
target_table.push_back (TargetEntry ("regions"));
- target_table.push_back (TargetEntry ("routes"));
target_table.push_back (TargetEntry ("text/plain"));
target_table.push_back (TargetEntry ("text/uri-list"));
@@ -326,17 +348,13 @@ Editor::track_canvas_size_allocated ()
}
full_canvas_height = height + canvas_timebars_vsize;
- } else {
- return true;
}
if (height_changed) {
if (playhead_cursor) {
playhead_cursor->set_length (canvas_height);
}
-
- vertical_adjustment.set_page_size (canvas_height);
-
+
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
(*x)->set_line_vpos (0, canvas_height);
}
@@ -348,10 +366,8 @@ Editor::track_canvas_size_allocated ()
We're increasing the size of the canvas while the bottom is visible.
We scroll down to keep in step with the controls layout.
*/
- vertical_adjustment.set_value (full_canvas_height - canvas_height + 1);
+ vertical_adjustment.set_value (full_canvas_height - canvas_height);
}
-
-
}
handle_new_duration ();
@@ -360,7 +376,7 @@ Editor::track_canvas_size_allocated ()
redisplay_tempo (false);
Resized (); /* EMIT_SIGNAL */
-
+
return false;
}
@@ -380,7 +396,7 @@ Editor::controls_layout_size_request (Requisition* req)
}
}
- gint height = min ( (gint) pos, (gint) (physical_screen_height - 600));
+ gint height = min ((gint) pos, (gint) (physical_screen_height - 600));
gint width = max (edit_controls_vbox.get_width(), controls_layout.get_width());
/* don't get too big. the fudge factors here are just guesses */
@@ -409,11 +425,13 @@ Editor::controls_layout_size_request (Requisition* req)
if (req->height != height) {
req->height = height;
controls_layout.property_height () = (guint) floor (pos);
+ controls_layout.property_height_request () = height;
}
if (changed) {
controls_layout_size_request_connection = controls_layout.signal_size_request().connect (mem_fun (*this, &Editor::controls_layout_size_request));
}
+ //cerr << "sizes = " << req->width << " " << edit_controls_vbox.get_width() << " " << controls_layout.get_width() << " " << zoom_box.get_width() << " " << time_button_frame.get_width() << endl;//DEBUG
}
bool
@@ -429,56 +447,27 @@ Editor::track_canvas_drag_data_received (const RefPtr<Gdk::DragContext>& context
const SelectionData& data,
guint info, guint time)
{
- cerr << "drop on canvas, target = " << data.get_target() << endl;
-
if (data.get_target() == "regions") {
drop_regions (context, x, y, data, info, time);
- }
- else if(data.get_target() == "routes") {
- drop_routes (context, x, y, data, info, time);
- }
- else {
+ } else {
drop_paths (context, x, y, data, info, time);
}
}
+bool
+Editor::idle_drop_paths (vector<ustring> paths, nframes64_t frame, double ypos)
+{
+ drop_paths_part_two (paths, frame, ypos);
+ return false;
+}
+
void
-Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
- int x, int y,
- const SelectionData& data,
- guint info, guint time)
+Editor::drop_paths_part_two (const vector<ustring>& paths, nframes64_t frame, double ypos)
{
TimeAxisView* tvp;
- RouteTimeAxisView* tv;
- double cy;
- vector<ustring> paths;
- string spath;
- GdkEvent ev;
- nframes64_t frame;
+ AudioTimeAxisView* tv;
- if (convert_drop_to_paths (paths, context, x, y, data, info, time)) {
- goto out;
- }
-
- /* D-n-D coordinates are window-relative, so convert to "world" coordinates
- */
-
- double wx;
- double wy;
-
- track_canvas->window_to_world (x, y, wx, wy);
- //wx += horizontal_adjustment.get_value();
- //wy += vertical_adjustment.get_value();
-
- ev.type = GDK_BUTTON_RELEASE;
- ev.button.x = wx;
- ev.button.y = wy;
-
- frame = event_frame (&ev, 0, &cy);
-
- snap_to (frame);
-
- if ((tvp = trackview_by_y_position (cy)) == 0) {
+ if ((tvp = trackview_by_y_position (ypos)) == 0) {
/* drop onto canvas background: create new tracks */
@@ -490,58 +479,81 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
do_embed (paths, Editing::ImportDistinctFiles, ImportAsTrack, frame);
}
- } else if ((tv = dynamic_cast<RouteTimeAxisView*>(tvp)) != 0) {
+ } else if ((tv = dynamic_cast<AudioTimeAxisView*>(tvp)) != 0) {
/* check that its an audio track, not a bus */
- /* check that its an audio track, not a bus */
-
if (tv->get_diskstream()) {
- /* select the track, then embed */
+ /* select the track, then embed/import */
selection->set (tv);
if (Profile->get_sae() || Config->get_only_copy_imported_files()) {
- do_import (paths, Editing::ImportDistinctFiles, Editing::ImportToTrack, SrcBest, frame);
+ do_import (paths, Editing::ImportSerializeFiles, Editing::ImportToTrack, SrcBest, frame);
} else {
- do_embed (paths, Editing::ImportDistinctFiles, ImportToTrack, frame);
+ do_embed (paths, Editing::ImportSerializeFiles, ImportToTrack, frame);
}
}
}
-
- out:
- context->drag_finish (true, false, time);
}
void
-Editor::drop_regions (const RefPtr<Gdk::DragContext>& context,
- int x, int y,
- const SelectionData& data,
- guint info, guint time)
+Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
+ int x, int y,
+ const SelectionData& data,
+ guint info, guint time)
{
- const SerializedObjectPointers<boost::shared_ptr<Region> >* sr =
- reinterpret_cast<const SerializedObjectPointers<boost::shared_ptr<Region> > *> (data.get_data());
+ vector<ustring> paths;
+ GdkEvent ev;
+ nframes64_t frame;
+ double wx;
+ double wy;
+ double cy;
- for (uint32_t i = 0; i < sr->cnt; ++i) {
+ if (convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) {
+
+ /* D-n-D coordinates are window-relative, so convert to "world" coordinates
+ */
- boost::shared_ptr<Region> r = sr->data[i];
+ track_canvas->window_to_world (x, y, wx, wy);
+
+ ev.type = GDK_BUTTON_RELEASE;
+ ev.button.x = wx;
+ ev.button.y = wy;
- insert_region_list_drag (r, x, y);
+ frame = event_frame (&ev, 0, &cy);
+
+ snap_to (frame);
+
+#ifdef GTKOSX
+ /* We are not allowed to call recursive main event loops from within
+ the main event loop with GTK/Quartz. Since import/embed wants
+ to push up a progress dialog, defer all this till we go idle.
+ */
+ Glib::signal_idle().connect (bind (mem_fun (*this, &Editor::idle_drop_paths), paths, frame, cy));
+#else
+ drop_paths_part_two (paths, frame, cy);
+#endif
}
context->drag_finish (true, false, time);
}
void
-Editor::drop_routes (const Glib::RefPtr<Gdk::DragContext>& context,
- int x, int y,
- const Gtk::SelectionData& data,
- guint info, guint time) {
- const SerializedObjectPointers<boost::shared_ptr<Route> >* sr =
- reinterpret_cast<const SerializedObjectPointers<boost::shared_ptr<Route> > *> (data.get_data());
+Editor::drop_regions (const RefPtr<Gdk::DragContext>& context,
+ int x, int y,
+ const SelectionData& data,
+ guint info, guint time)
+{
+ std::list<boost::shared_ptr<Region> > regions;
+ region_list_display.get_object_drag_data (regions);
- for (uint32_t i = 0; i < sr->cnt; ++i) {
- boost::shared_ptr<Route> r = sr->data[i];
- insert_route_list_drag (r, x, y);
+ for (list<boost::shared_ptr<Region> >::iterator r = regions.begin(); r != regions.end(); ++r) {
+
+ boost::shared_ptr<AudioRegion> ar;
+
+ if ((ar = boost::dynamic_pointer_cast<AudioRegion>(*r)) != 0) {
+ insert_region_list_drag (ar, x, y);
+ }
}
context->drag_finish (true, false, time);
@@ -648,20 +660,24 @@ Editor::autoscroll_canvas ()
double new_pixel;
double target_pixel;
- if (autoscroll_x > 0) {
- autoscroll_x_distance = (unit_to_frame (drag_info.current_pointer_x) - (leftmost_frame + current_page_frames())) / 3;
- } else if (autoscroll_x < 0) {
- autoscroll_x_distance = (leftmost_frame - unit_to_frame (drag_info.current_pointer_x)) / 3;
-
+ if (autoscroll_x_distance != 0) {
+ if (autoscroll_x > 0) {
+ autoscroll_x_distance = (unit_to_frame (drag_info.current_pointer_x) - (leftmost_frame + current_page_frames())) / 3;
+ } else if (autoscroll_x < 0) {
+ autoscroll_x_distance = (leftmost_frame - unit_to_frame (drag_info.current_pointer_x)) / 3;
+
+ }
}
-
- if (autoscroll_y > 0) {
- autoscroll_y_distance = (drag_info.current_pointer_y - (get_trackview_group_vertical_offset() + canvas_height)) / 3;
- } else if (autoscroll_y < 0) {
-
- autoscroll_y_distance = (vertical_adjustment.get_value () - drag_info.current_pointer_y) / 3;
+
+ if (autoscroll_y_distance != 0) {
+ if (autoscroll_y > 0) {
+ autoscroll_y_distance = (drag_info.current_pointer_y - (get_trackview_group_vertical_offset() + canvas_height)) / 3;
+ } else if (autoscroll_y < 0) {
+
+ autoscroll_y_distance = (vertical_adjustment.get_value () - drag_info.current_pointer_y) / 3;
+ }
}
-
+
if (autoscroll_x < 0) {
if (leftmost_frame < autoscroll_x_distance) {
new_frame = 0;
@@ -725,6 +741,8 @@ Editor::autoscroll_canvas ()
reset_x_origin (new_frame);
}
+ vertical_adjustment.set_value (new_pixel);
+
/* fake an event. */
Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->track_canvas->get_window();
@@ -738,8 +756,6 @@ Editor::autoscroll_canvas ()
motion_handler (drag_info.item, (GdkEvent*) &ev, drag_info.item_type, true);
- vertical_adjustment.set_value (new_pixel);
-
autoscroll_cnt++;
if (autoscroll_cnt == 1) {
@@ -830,20 +846,33 @@ Editor::scroll_canvas_horizontally ()
_master_group->move (-x_delta, 0);
timebar_group->move (-x_delta, 0);
+ time_line_group->move (-x_delta, 0);
cursor_group->move (-x_delta, 0);
+
update_fixed_rulers ();
redisplay_tempo (true);
+
+#ifndef GTKOSX
+ if (!autoscroll_active) {
+ /* force rulers and canvas to move in lock step */
+ while (gtk_events_pending ()) {
+ gtk_main_iteration ();
+ }
+ }
+#endif
+
}
void
Editor::scroll_canvas_vertically ()
{
/* vertical scrolling only */
+
double y_delta;
y_delta = last_trackview_group_vertical_offset - get_trackview_group_vertical_offset ();
-
_trackview_group->move (0, y_delta);
+ _background_group->move (0, y_delta);
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
(*i)->clip_to_viewport ();
@@ -875,7 +904,7 @@ Editor::color_handler()
{
playhead_cursor->canvas_item.property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_PlayHead.get();
verbose_canvas_cursor->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_VerboseCanvasCursor.get();
-
+
meter_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MeterBar.get();
meter_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
@@ -946,3 +975,4 @@ Editor::flush_canvas ()
// gdk_window_process_updates (GTK_LAYOUT(track_canvas->gobj())->bin_window, true);
}
}
+
diff --git a/gtk2_ardour/editor_cursors.cc b/gtk2_ardour/editor_cursors.cc
index 0f5c414408..93743f580e 100644
--- a/gtk2_ardour/editor_cursors.cc
+++ b/gtk2_ardour/editor_cursors.cc
@@ -35,10 +35,7 @@ Editor::Cursor::Cursor (Editor& ed, bool (Editor::*callbck)(GdkEvent*,ArdourCanv
canvas_item (*editor.cursor_group),
length(1.0)
{
-
- /* "randomly" initialize coords */
-
- points.push_back(Gnome::Art::Point(1.0, 0.0));
+ points.push_back(Gnome::Art::Point(-1.0, 0.0)); // first x-coord needs to be a non-normal value
points.push_back(Gnome::Art::Point(1.0, 1.0));
canvas_item.property_points() = points;
diff --git a/gtk2_ardour/editor_edit_groups.cc b/gtk2_ardour/editor_edit_groups.cc
index 20179f84c6..371b13ed0c 100644
--- a/gtk2_ardour/editor_edit_groups.cc
+++ b/gtk2_ardour/editor_edit_groups.cc
@@ -140,6 +140,9 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
if ((group = (*iter)[group_columns.routegroup]) != 0) {
// edit_route_group (group);
+#ifdef GTKOSX
+ edit_group_display.queue_draw();
+#endif
return true;
}
}
@@ -151,6 +154,9 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
bool active = (*iter)[group_columns.is_active];
(*iter)[group_columns.is_active] = !active;
+#ifdef GTKOSX
+ edit_group_display.queue_draw();
+#endif
return true;
}
break;
@@ -159,6 +165,9 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
bool visible = (*iter)[group_columns.is_visible];
(*iter)[group_columns.is_visible] = !visible;
+#ifdef GTKOSX
+ edit_group_display.queue_draw();
+#endif
return true;
}
break;
diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc
index e6b30232cd..bf8aca105e 100644
--- a/gtk2_ardour/editor_mixer.cc
+++ b/gtk2_ardour/editor_mixer.cc
@@ -156,6 +156,16 @@ Editor::ensure_all_elements_drawn ()
#endif
void
+Editor::show_editor_list (bool yn)
+{
+ if (yn) {
+ the_notebook.show();
+ } else {
+ the_notebook.hide();
+ }
+}
+
+void
Editor::create_editor_mixer ()
{
current_mixer_strip = new MixerStrip (*ARDOUR_UI::instance()->the_mixer(),
@@ -170,16 +180,6 @@ Editor::create_editor_mixer ()
}
void
-Editor::show_editor_list (bool yn)
-{
- if (yn) {
- the_notebook.show();
- } else {
- the_notebook.hide();
- }
-}
-
-void
Editor::set_selected_mixer_strip (TimeAxisView& view)
{
AudioTimeAxisView* at;
@@ -228,7 +228,6 @@ Editor::set_selected_mixer_strip (TimeAxisView& view)
}
double current = 0.0;
-bool currentInitialized = 0;
void
Editor::update_current_screen ()
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 1a03f66f24..4b4ed86164 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -367,8 +367,15 @@ Editor::step_mouse_mode (bool next)
{
switch (current_mouse_mode()) {
case MouseObject:
- if (next) set_mouse_mode (MouseRange);
- else set_mouse_mode (MouseTimeFX);
+ if (next) {
+ if (Profile->get_sae()) {
+ set_mouse_mode (MouseZoom);
+ } else {
+ set_mouse_mode (MouseRange);
+ }
+ } else {
+ set_mouse_mode (MouseTimeFX);
+ }
break;
case MouseRange:
@@ -377,8 +384,19 @@ Editor::step_mouse_mode (bool next)
break;
case MouseZoom:
- if (next) set_mouse_mode (MouseGain);
- else set_mouse_mode (MouseRange);
+ if (next) {
+ if (Profile->get_sae()) {
+ set_mouse_mode (MouseTimeFX);
+ } else {
+ set_mouse_mode (MouseGain);
+ }
+ } else {
+ if (Profile->get_sae()) {
+ set_mouse_mode (MouseObject);
+ } else {
+ set_mouse_mode (MouseRange);
+ }
+ }
break;
case MouseGain:
@@ -387,8 +405,15 @@ Editor::step_mouse_mode (bool next)
break;
case MouseTimeFX:
- if (next) set_mouse_mode (MouseAudition);
- else set_mouse_mode (MouseGain);
+ if (next) {
+ set_mouse_mode (MouseAudition);
+ } else {
+ if (Profile->get_sae()) {
+ set_mouse_mode (MouseZoom);
+ } else {
+ set_mouse_mode (MouseGain);
+ }
+ }
break;
case MouseAudition:
@@ -508,10 +533,11 @@ Editor::set_midi_edit_cursor (MidiEditMode m)
void
Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
- /* in object/audition/timefx mode, any button press sets
- the selection if the object can be selected. this is a
- bit of hack, because we want to avoid this if the
- mouse operation is a region alignment.
+ /* in object/audition/timefx/gain-automation mode,
+ any button press sets the selection if the object
+ can be selected. this is a bit of hack, because
+ we want to avoid this if the mouse operation is a
+ region alignment.
note: not dbl-click or triple-click
*/
@@ -519,6 +545,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
if (((mouse_mode != MouseObject) &&
(mouse_mode != MouseAudition || item_type != RegionItem) &&
(mouse_mode != MouseTimeFX || item_type != RegionItem) &&
+ (mouse_mode != MouseGain) &&
(mouse_mode != MouseRange)) ||
((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3)) {
@@ -537,7 +564,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
}
}
}
-
+
Selection::Operation op = Keyboard::selection_type (event->button.state);
bool press = (event->type == GDK_BUTTON_PRESS);
@@ -602,7 +629,7 @@ bool
Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->track_canvas->get_window();
-
+
if (canvas_window) {
Glib::RefPtr<const Gdk::Window> pointer_window;
int x, y;
@@ -626,7 +653,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
}
button_selection (item, event, item_type);
-
+
if (drag_info.item == 0 &&
(Keyboard::is_delete_event (&event->button) ||
Keyboard::is_context_menu_event (&event->button) ||
@@ -680,27 +707,43 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
}
return true;
+ case MarkerBarItem:
case TempoBarItem:
- return true;
-
case MeterBarItem:
+ if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
+ start_cursor_grab_no_stop(&playhead_cursor->canvas_item, event);
+ }
return true;
+ break;
+
case RangeMarkerBarItem:
- start_range_markerbar_op (item, event, CreateRangeMarker);
+ if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
+ start_cursor_grab_no_stop(&playhead_cursor->canvas_item, event);
+ } else {
+ start_range_markerbar_op (item, event, CreateRangeMarker);
+ }
return true;
break;
case CdMarkerBarItem:
- start_range_markerbar_op (item, event, CreateCDMarker);
+ if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
+ start_cursor_grab_no_stop(&playhead_cursor->canvas_item, event);
+ } else {
+ start_range_markerbar_op (item, event, CreateCDMarker);
+ }
return true;
break;
case TransportMarkerBarItem:
- start_range_markerbar_op (item, event, CreateTransportMarker);
+ if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)) {
+ start_cursor_grab_no_stop(&playhead_cursor->canvas_item, event);
+ } else {
+ start_range_markerbar_op (item, event, CreateTransportMarker);
+ }
return true;
break;
-
+
default:
break;
}
@@ -830,7 +873,13 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
case MouseGain:
switch (item_type) {
case RegionItem:
- // start_line_grab_from_regionview (item, event);
+ /* start a grab so that if we finish after moving
+ we can tell what happened.
+ */
+ drag_info.item = item;
+ drag_info.motion_callback = &Editor::region_gain_motion_callback;
+ drag_info.finished_callback = 0;
+ start_grab (event, current_canvas_cursor);
break;
case GainLineItem:
@@ -982,7 +1031,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
{
nframes64_t where = event_frame (event, 0, 0);
AutomationTimeAxisView* atv = 0;
-
+
/* no action if we're recording */
if (session && session->actively_recording()) {
@@ -1001,7 +1050,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
button_selection (item, event, item_type);
/* edit events get handled here */
-
+
if (drag_info.item == 0 && Keyboard::is_edit_event (&event->button)) {
switch (item_type) {
case RegionItem:
@@ -1163,36 +1212,44 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
return true;
case MarkerBarItem:
- if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
- snap_to (where, 0, true);
+ if (!_dragging_playhead) {
+ if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
+ snap_to (where, 0, true);
+ }
+ mouse_add_new_marker (where);
}
- mouse_add_new_marker (where);
return true;
case CdMarkerBarItem:
- // if we get here then a dragged range wasn't done
- if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
- snap_to (where, 0, true);
+ if (!_dragging_playhead) {
+ // if we get here then a dragged range wasn't done
+ if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
+ snap_to (where, 0, true);
+ }
+ mouse_add_new_marker (where, true);
}
- mouse_add_new_marker (where, true);
return true;
case TempoBarItem:
- if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
- snap_to (where);
+ if (!_dragging_playhead) {
+ if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
+ snap_to (where);
+ }
+ mouse_add_new_tempo_event (where);
}
- mouse_add_new_tempo_event (where);
return true;
case MeterBarItem:
- mouse_add_new_meter_event (pixel_to_frame (event->button.x));
+ if (!_dragging_playhead) {
+ mouse_add_new_meter_event (pixel_to_frame (event->button.x));
+ }
return true;
break;
default:
break;
}
-
+
switch (mouse_mode) {
case MouseObject:
switch (item_type) {
@@ -1219,7 +1276,13 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
switch (item_type) {
case RegionItem:
- dynamic_cast<AudioRegionView*>(clicked_regionview)->add_gain_point_event (item, event);
+ /* check that we didn't drag before releasing, since
+ its really annoying to create new control
+ points when doing this.
+ */
+ if (drag_info.first_move) {
+ dynamic_cast<AudioRegionView*>(clicked_regionview)->add_gain_point_event (item, event);
+ }
return true;
break;
@@ -1571,7 +1634,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case TempoBarItem:
case MarkerBarItem:
if (is_drawable()) {
- track_canvas->get_window()->set_cursor (*timebar_cursor);
+ track_canvas->get_window()->set_cursor (*current_canvas_cursor);
}
break;
@@ -1783,6 +1846,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
case PlayheadCursorItem:
case MarkerItem:
case ControlPointItem:
+ case MarkerBarItem:
+ case TempoBarItem:
+ case MeterBarItem:
case RangeMarkerBarItem:
case TransportMarkerBarItem:
case CdMarkerBarItem:
@@ -1809,7 +1875,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
if (!from_autoscroll) {
maybe_autoscroll_horizontally (&event->motion);
}
- (this->*(drag_info.motion_callback)) (item, event);
+ if (drag_info.motion_callback) {
+ (this->*(drag_info.motion_callback)) (item, event);
+ }
goto handled;
}
goto not_handled;
@@ -1819,6 +1887,15 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
}
switch (mouse_mode) {
+ case MouseGain:
+ if (item_type == RegionItem) {
+ if (drag_info.item && drag_info.motion_callback) {
+ (this->*(drag_info.motion_callback)) (item, event);
+ }
+ goto handled;
+ }
+ break;
+
case MouseObject:
case MouseRange:
case MouseZoom:
@@ -1829,7 +1906,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
if (!from_autoscroll) {
maybe_autoscroll (&event->motion);
}
- (this->*(drag_info.motion_callback)) (item, event);
+ if (drag_info.motion_callback) {
+ (this->*(drag_info.motion_callback)) (item, event);
+ }
goto handled;
}
goto not_handled;
@@ -1902,7 +1981,7 @@ Editor::start_grab (GdkEvent* event, Gdk::Cursor *cursor)
// if dragging with button2, the motion is x constrained, with Alt-button2 it is y constrained
- if (event->button.button == 2) {
+ if (Keyboard::is_button2_event (&event->button)) {
if (Keyboard::modifier_state_equals (event->button.state, Keyboard::SecondaryModifier)) {
drag_info.y_constrained = true;
drag_info.x_constrained = false;
@@ -1999,6 +2078,14 @@ Editor::end_grab (ArdourCanvas::Item* item, GdkEvent* event)
}
void
+Editor::region_gain_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
+{
+ if (drag_info.first_move && drag_info.move_threshold_passed) {
+ drag_info.first_move = false;
+ }
+}
+
+void
Editor::start_fade_in_grab (ArdourCanvas::Item* item, GdkEvent* event)
{
drag_info.item = item;
@@ -2258,6 +2345,39 @@ Editor::start_cursor_grab (ArdourCanvas::Item* item, GdkEvent* event)
}
void
+Editor::start_cursor_grab_no_stop (ArdourCanvas::Item* item, GdkEvent* event)
+{
+ drag_info.item = item;
+ drag_info.motion_callback = &Editor::cursor_drag_motion_callback;
+ drag_info.finished_callback = &Editor::cursor_drag_finished_ensure_locate_callback;
+
+ start_grab (event);
+
+ if ((drag_info.data = (item->get_data ("cursor"))) == 0) {
+ fatal << _("programming error: cursor canvas item has no cursor data pointer!") << endmsg;
+ /*NOTREACHED*/
+ }
+
+ Cursor* cursor = (Cursor *) drag_info.data;
+ nframes64_t where = event_frame (event, 0, 0);
+
+ snap_to(where);
+ playhead_cursor->set_position (where);
+
+ if (cursor == playhead_cursor) {
+ _dragging_playhead = true;
+
+ if (session && session->is_auditioning()) {
+ session->cancel_audition ();
+ }
+ }
+
+ drag_info.pointer_frame_offset = drag_info.grab_frame - cursor->current_frame;
+
+ show_verbose_time_cursor (cursor->current_frame, 10);
+}
+
+void
Editor::cursor_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
{
Cursor* cursor = (Cursor *) drag_info.data;
@@ -2294,12 +2414,28 @@ Editor::cursor_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
void
Editor::cursor_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event)
{
- if (drag_info.first_move) return;
+ _dragging_playhead = false;
+
+ if (drag_info.first_move) {
+ return;
+ }
cursor_drag_motion_callback (item, event);
+
+ if (item == &playhead_cursor->canvas_item) {
+ if (session) {
+ session->request_locate (playhead_cursor->current_frame, drag_info.was_rolling);
+ }
+ }
+}
+void
+Editor::cursor_drag_finished_ensure_locate_callback (ArdourCanvas::Item* item, GdkEvent* event)
+{
_dragging_playhead = false;
+ cursor_drag_motion_callback (item, event);
+
if (item == &playhead_cursor->canvas_item) {
if (session) {
session->request_locate (playhead_cursor->current_frame, drag_info.was_rolling);
@@ -3100,12 +3236,14 @@ Editor::start_line_grab (AutomationLine* line, GdkEvent* event)
nframes64_t frame_within_region;
/* need to get x coordinate in terms of parent (TimeAxisItemView)
- origin.
+ origin, and ditto for y.
*/
cx = event->button.x;
cy = event->button.y;
+
line->parent_group().w2i (cx, cy);
+
frame_within_region = (nframes64_t) floor (cx * frames_per_unit);
if (!line->control_points_adjacent (frame_within_region, current_line_drag_info.before,
@@ -3121,6 +3259,11 @@ Editor::start_line_grab (AutomationLine* line, GdkEvent* event)
start_grab (event, fader_cursor);
+ /* store grab start in parent frame */
+
+ drag_info.grab_x = cx;
+ drag_info.grab_y = cy;
+
double fraction = 1.0 - (cy / line->height());
line->start_drag (0, drag_info.grab_frame, fraction);
@@ -3136,7 +3279,7 @@ Editor::line_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
AutomationLine* line = reinterpret_cast<AutomationLine *> (drag_info.data);
double dy = drag_info.current_pointer_y - drag_info.last_pointer_y;
-
+
if (event->button.state & Keyboard::SecondaryModifier) {
dy *= 0.1;
}
@@ -3145,9 +3288,9 @@ Editor::line_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
// calculate zero crossing point. back off by .01 to stay on the
// positive side of zero
- double _unused = 0;
double zero_gain_y = (1.0 - ZERO_GAIN_FRACTION) * line->height() - .01;
- line->parent_group().i2w(_unused, zero_gain_y);
+
+ // line->parent_group().i2w(_unused, zero_gain_y);
// make sure we hit zero when passing through
if ((cy < zero_gain_y and (cy - dy) > zero_gain_y)
@@ -3160,6 +3303,7 @@ Editor::line_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
cy = max (0.0, cy);
cy = min ((double) line->height(), cy);
+
double fraction = 1.0 - (cy / line->height());
bool push;
@@ -3976,7 +4120,6 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
}
begin_reversible_command (op_string);
-
changed_position = (drag_info.last_frame_position != (nframes64_t) (clicked_regionview->region()->position()));
changed_tracks = (trackview_by_y_position (drag_info.current_pointer_y) != &clicked_regionview->get_time_axis_view());
@@ -3994,13 +4137,14 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
TimeAxisView* dest_tv = trackview_by_y_position (iy1);
RouteTimeAxisView* dest_rtv = dynamic_cast<RouteTimeAxisView*>(dest_tv);
+
nframes64_t where;
if (rv->region()->locked()) {
++i;
continue;
}
-
+
if (changed_position && !drag_info.x_constrained) {
where = rv->region()->position() - drag_delta;
} else {
@@ -5538,7 +5682,9 @@ Editor::end_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event)
}
} else {
- selection->clear_tracks();
+ if (!getenv("ARDOUR_SAE")) {
+ selection->clear_tracks();
+ }
selection->clear_regions();
selection->clear_points ();
selection->clear_lines ();
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 283935af77..a5dfb6b08e 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -38,7 +38,6 @@
#include <gtkmm2ext/window_title.h>
#include <gtkmm2ext/popup.h>
-
#include <ardour/audioengine.h>
#include <ardour/session.h>
#include <ardour/audioplaylist.h>
@@ -148,8 +147,6 @@ Editor::split_regions_at (nframes64_t where, RegionSelection& regions)
snap_to (where);
}
- cerr << "Split " << regions.size() << " at " << where << endl;
-
for (RegionSelection::iterator a = regions.begin(); a != regions.end(); ) {
RegionSelection::iterator tmp;
@@ -2009,7 +2006,7 @@ Editor::add_location_from_playhead_cursor ()
}
void
-Editor::add_location_from_audio_region ()
+Editor::add_locations_from_audio_region ()
{
RegionSelection rs;
@@ -2019,15 +2016,61 @@ Editor::add_location_from_audio_region ()
return;
}
- RegionView* rv = *(rs.begin());
- boost::shared_ptr<Region> region = rv->region();
+ session->begin_reversible_command (rs.size () > 1 ? _("add markers") : _("add marker"));
+ XMLNode &before = session->locations()->get_state();
- Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker);
+ cerr << "Add locations\n";
+
+ for (RegionSelection::iterator i = rs.begin (); i != rs.end (); ++i) {
+
+ boost::shared_ptr<Region> region = (*i)->region ();
+
+ Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker);
+
+ session->locations()->add (location, true);
+ }
+
+ XMLNode &after = session->locations()->get_state();
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
+ session->commit_reversible_command ();
+}
+
+void
+Editor::add_location_from_audio_region ()
+{
+ RegionSelection rs;
+
+ get_regions_for_action (rs);
+
+ if (rs.empty()) {
+ return;
+ }
+
session->begin_reversible_command (_("add marker"));
- XMLNode &before = session->locations()->get_state();
+ XMLNode &before = session->locations()->get_state();
+
+ string markername;
+
+ if (rs.size() > 1) { // more than one region selected
+ session->locations()->next_available_name(markername, "regions");
+ } else {
+ RegionView* rv = *(rs.begin());
+ boost::shared_ptr<Region> region = rv->region();
+ markername = region->name();
+ }
+
+ if (!choose_new_marker_name(markername)) {
+ return;
+ }
+
+ cerr << "Add location\n";
+
+ // single range spanning all selected
+ Location *location = new Location (rs.start(), rs.end_frame(), markername, Location::IsRangeMarker);
session->locations()->add (location, true);
- XMLNode &after = session->locations()->get_state();
- session->add_command(new MementoCommand<Locations>(*(session->locations()), &before, &after));
+
+ XMLNode &after = session->locations()->get_state();
+ session->add_command (new MementoCommand<Locations>(*(session->locations()), &before, &after));
session->commit_reversible_command ();
}
@@ -3607,7 +3650,7 @@ Editor::unfreeze_route ()
void*
Editor::_freeze_thread (void* arg)
{
- PBD::ThreadCreated (pthread_self(), X_("Freeze"));
+ PBD::notify_gui_about_thread_creation (pthread_self(), X_("Freeze"));
return static_cast<Editor*>(arg)->freeze_thread ();
}
@@ -4734,6 +4777,28 @@ Editor::toggle_region_opaque ()
}
void
+Editor::toggle_record_enable ()
+{
+ bool new_state = false;
+ bool first = true;
+ for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
+ RouteTimeAxisView *rtav = dynamic_cast<RouteTimeAxisView *>(*i);
+ if (!rtav)
+ continue;
+ if (!rtav->is_track())
+ continue;
+
+ if (first) {
+ new_state = !rtav->track()->record_enabled();
+ first = false;
+ }
+
+ rtav->track()->set_record_enable(new_state, this);
+ }
+}
+
+
+void
Editor::set_fade_length (bool in)
{
RegionSelection rs;
@@ -5216,17 +5281,26 @@ Editor::select_next_route()
TimeAxisView* current = selection->tracks.front();
- for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- if (*i == current) {
- ++i;
- if (i != track_views.end()) {
- selection->set (*i);
- } else {
- selection->set (*(track_views.begin()));
+ RouteUI *rui;
+ do {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+ if (*i == current) {
+ ++i;
+ if (i != track_views.end()) {
+ current = (*i);
+ } else {
+ current = (*(track_views.begin()));
+ //selection->set (*(track_views.begin()));
+ }
+ break;
}
- break;
}
- }
+ rui = dynamic_cast<RouteUI *>(current);
+ } while ( current->hidden() || (rui != NULL && !rui->route()->active()));
+
+ selection->set(current);
+
+ ensure_track_visible(current);
}
void
@@ -5239,17 +5313,55 @@ Editor::select_prev_route()
TimeAxisView* current = selection->tracks.front();
- for (TrackViewList::reverse_iterator i = track_views.rbegin(); i != track_views.rend(); ++i) {
- if (*i == current) {
- ++i;
- if (i != track_views.rend()) {
- selection->set (*i);
- } else {
- selection->set (*(track_views.rbegin()));
+ RouteUI *rui;
+ do {
+ for (TrackViewList::reverse_iterator i = track_views.rbegin(); i != track_views.rend(); ++i) {
+ if (*i == current) {
+ ++i;
+ if (i != track_views.rend()) {
+ current = (*i);
+ } else {
+ current = *(track_views.rbegin());
+ }
+ break;
}
- break;
}
+ rui = dynamic_cast<RouteUI *>(current);
+ } while ( current->hidden() || (rui != NULL && !rui->route()->active()));
+
+ selection->set (current);
+
+ ensure_track_visible(current);
+}
+
+void
+Editor::ensure_track_visible(TimeAxisView *track)
+{
+ if (track->hidden())
+ return;
+
+ double current_view_min_y = vertical_adjustment.get_value();
+ double current_view_max_y = vertical_adjustment.get_value() + vertical_adjustment.get_page_size() - canvas_timebars_vsize;
+
+ double track_min_y = track->y_position;
+ double track_max_y = track->y_position + (double)track->effective_height;
+
+ if (track_min_y >= current_view_min_y &&
+ track_max_y <= current_view_max_y) {
+ return;
+ }
+
+ double new_value;
+
+ if (track_min_y < current_view_min_y) {
+ // Track is above the current view
+ new_value = track_min_y;
+ } else {
+ // Track is below the current view
+ new_value = track->y_position + (double)track->effective_height + canvas_timebars_vsize - vertical_adjustment.get_page_size();
}
+
+ vertical_adjustment.set_value(new_value);
}
void
@@ -6032,26 +6144,34 @@ Editor::insert_time (nframes64_t pos, nframes64_t frames, InsertTimeOption opt,
begin_reversible_command (_("insert time"));
for (TrackSelection::iterator x = selection->tracks.begin(); x != selection->tracks.end(); ++x) {
+ /* regions */
boost::shared_ptr<Playlist> pl = (*x)->playlist();
- if (!pl) {
- continue;
- }
-
- XMLNode &before = pl->get_state();
+ if (pl) {
- if (opt == SplitIntersected) {
- pl->split (pos);
+ XMLNode &before = pl->get_state();
+
+ if (opt == SplitIntersected) {
+ pl->split (pos);
+ }
+
+ pl->shift (pos, frames, (opt == MoveIntersected), ignore_music_glue);
+
+ XMLNode &after = pl->get_state();
+
+ session->add_command (new MementoCommand<Playlist> (*pl, &before, &after));
+ commit = true;
+ }
+
+ /* automation */
+ RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*> (*x);
+ if (rtav) {
+ rtav->route ()->shift (pos, frames);
+ commit = true;
}
-
- pl->shift (pos, frames, (opt == MoveIntersected), ignore_music_glue);
-
- XMLNode &after = pl->get_state();
-
- session->add_command (new MementoCommand<Playlist> (*pl, &before, &after));
- commit = true;
}
+ /* markers */
if (markers_too) {
bool moved = false;
XMLNode& before (session->locations()->get_state());
@@ -6185,22 +6305,23 @@ Editor::goto_visual_state (uint32_t n)
void
Editor::start_visual_state_op (uint32_t n)
{
- cerr << "Start\n";
+ cerr << "Start visual op\n";
if (visual_state_op_connection.empty()) {
- cerr << "\tqueue\n";
visual_state_op_connection = Glib::signal_timeout().connect (bind (mem_fun (*this, &Editor::end_visual_state_op), n), 1000);
+ cerr << "\tqueued new timeout\n";
}
}
void
Editor::cancel_visual_state_op (uint32_t n)
{
- cerr << "Cancel\n";
if (!visual_state_op_connection.empty()) {
- cerr << "\tgoto\n";
+ cerr << "cancel visual op, time to goto\n";
visual_state_op_connection.disconnect();
goto_visual_state (n);
- }
+ } else {
+ cerr << "cancel visual op, do nothing\n";
+ }
}
bool
diff --git a/gtk2_ardour/editor_region_list.cc b/gtk2_ardour/editor_region_list.cc
index 1c8d95ad12..f2c98dfa30 100644
--- a/gtk2_ardour/editor_region_list.cc
+++ b/gtk2_ardour/editor_region_list.cc
@@ -29,6 +29,7 @@
#include <ardour/audiofilesource.h>
#include <ardour/silentfilesource.h>
#include <ardour/session_region.h>
+#include <ardour/profile.h>
#include <gtkmm2ext/stop_signal.h>
@@ -777,8 +778,6 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
int cellx;
int celly;
- // cerr << "Button press release, button = " << ev->button << endl;
-
if (region_list_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
if ((iter = region_list_model->get_iter (path))) {
region = (*iter)[region_list_columns.region];
@@ -787,14 +786,12 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
if (Keyboard::is_context_menu_event (ev)) {
show_region_list_display_context_menu (ev->button, ev->time);
- cerr << "\tcontext menu event, event handled\n";
return true;
}
if (region == 0) {
region_list_display.get_selection()->unselect_all();
deselect_all();
- cerr << "\tSelection cleared\n";
return false;
}
@@ -807,7 +804,6 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
if (!Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
consider_auditioning (region);
}
- cerr << "\taudition, event handled\n";
return true;
break;
@@ -815,7 +811,6 @@ Editor::region_list_display_button_press (GdkEventButton *ev)
break;
}
- cerr << "\tnot handled\n";
return false;
}
@@ -1036,14 +1031,17 @@ Editor::region_list_display_drag_data_received (const RefPtr<Gdk::DragContext>&
vector<ustring> paths;
if (data.get_target() == "GTK_TREE_MODEL_ROW") {
- cerr << "Delete drag data drop to treeview\n";
region_list_display.on_drag_data_received (context, x, y, data, info, time);
return;
}
if (convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) {
nframes64_t pos = 0;
- do_embed (paths, Editing::ImportDistinctFiles, ImportAsRegion, pos);
+ if (Profile->get_sae() || Config->get_only_copy_imported_files()) {
+ do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, SrcBest, pos);
+ } else {
+ do_embed (paths, Editing::ImportDistinctFiles, ImportAsRegion, pos);
+ }
context->drag_finish (true, false, time);
}
}
diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc
index db3c4918c2..6e368716f7 100644
--- a/gtk2_ardour/editor_route_list.cc
+++ b/gtk2_ardour/editor_route_list.cc
@@ -147,7 +147,7 @@ void
Editor::handle_gui_changes (const string & what, void *src)
{
ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::handle_gui_changes), what, src));
-
+
if (what == "track_height") {
/* Optional :make tracks change height while it happens, instead
of on first-idle
@@ -643,14 +643,10 @@ Editor::route_list_display_drag_data_received (const RefPtr<Gdk::DragContext>& c
const SelectionData& data,
guint info, guint time)
{
- cerr << "RouteLD::dddr target = " << data.get_target() << endl;
-
if (data.get_target() == "GTK_TREE_MODEL_ROW") {
- cerr << "Delete drag data drop to treeview\n";
route_list_display.on_drag_data_received (context, x, y, data, info, time);
return;
}
- cerr << "some other kind of drag\n";
context->drag_finish (true, false, time);
}
@@ -786,114 +782,6 @@ Editor::move_selected_tracks (bool up)
}
route_display_model->reorder (neworder);
-}
-
-#if 0
- vector<boost::shared_ptr<Route> > selected_block;
- boost::shared_ptr<Route> target_unselected_route;
- bool last_track_was_selected = false;
- vector<int> neworder;
- TreeModel::Children rows = route_display_model->children();
- TreeModel::Children::iterator ri;
- uint32_t old_key;
- uint32_t new_key;
- int n;
-
- /* preload "neworder" with the current order */
-
- for (n = 0, ri = rows.begin(); ri != rows.end(); ++ri, ++n) {
- neworder.push_back (n);
- }
-
- for (ri = rows.begin(); ri != rows.end(); ++ri) {
-
- TimeAxisView* tv = (*ri)[route_display_columns.tv];
- boost::shared_ptr<Route> route = (*ri)[route_display_columns.route];
-
- if (selection->selected (tv)) {
-
- selected_block.push_back (route);
- cerr << "--SAVE as SELECTED " << route->name() << endl;
- last_track_was_selected = true;
- continue;
- } else {
-
- if (!last_track_was_selected) {
- /* keep moving through unselected tracks, but save this
- one in case we need it later as the one that will
- move *down* as the selected block moves up.
- */
- target_unselected_route = route;
- cerr << "--pre-SAVE as UNSELECTED " << route->name() << endl;
- continue;
- }
-
- last_track_was_selected = false;
-
- if (!up) {
- /* this is the track immediately after a selected block,
- and this is the one that will move *up* as
- the selected block moves down.
- */
-
- target_unselected_route = route;
- cerr << "--post-SAVE as UNSELECTED " << route->name() << endl;
- } else {
- cerr << "--(up) plan to use existing unselected target\n";
- }
- }
-
- cerr << "TRANSITION: sel = " << selected_block.size() << " unsel = " << target_unselected_route << endl;
-
- /* transitioned between selected/not-selected */
-
- uint32_t distance;
-
- for (vector<boost::shared_ptr<Route> >::iterator x = selected_block.begin(); x != selected_block.end(); ++x) {
- old_key = (*x)->order_key (_order_key);
- new_key = compute_new_key (old_key, up, 1, rows.size());
- neworder[new_key] = old_key;
- cerr << "--SELECTED, reorder from " << old_key << " => " << new_key << endl;
- }
-
- /* now move the unselected tracks in the opposite direction */
-
- if (!selected_block.empty() && target_unselected_route) {
- distance = selected_block.size();
- old_key = target_unselected_route->order_key (_order_key);
- new_key = compute_new_key (old_key, !up, distance, rows.size());
- neworder[new_key] = old_key;
- cerr << "--UNSELECTED, reorder from " << old_key << " => " << new_key << endl;
- }
-
- selected_block.clear ();
- target_unselected_route.reset ();
- }
-
- cerr << "when done ... sel = " << selected_block.size() << " unsel = " << target_unselected_route << endl;
-
- if (!selected_block.empty() || target_unselected_route) {
-
- /* left over blocks */
-
- uint32_t distance;
-
- for (vector<boost::shared_ptr<Route> >::iterator x = selected_block.begin(); x != selected_block.end(); ++x) {
- old_key = (*x)->order_key (_order_key);
- new_key = compute_new_key (old_key, up, 1, rows.size());
- neworder[new_key] = old_key;
- cerr << "--SELECTED, reorder from " << old_key << " => " << new_key << endl;
- }
-
- if (!selected_block.empty() && target_unselected_route) {
- distance = selected_block.size();
- old_key = target_unselected_route->order_key (_order_key);
- new_key = compute_new_key (old_key, !up, distance, rows.size());
- neworder[new_key] = old_key;
- cerr << "--UNSELECTED, reorder from " << old_key << " => " << new_key << endl;
- }
- }
-
- route_display_model->reorder (neworder);
-#endif
+ session->sync_order_keys (_order_key);
+}
diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc
index 048d8c2725..a4344c3ffa 100644
--- a/gtk2_ardour/editor_rulers.cc
+++ b/gtk2_ardour/editor_rulers.cc
@@ -33,6 +33,7 @@
#include "actions.h"
#include "gtk-custom-hruler.h"
#include "gui_thread.h"
+#include "time_axis_view.h"
#include "i18n.h"
@@ -64,6 +65,14 @@ Editor::initialize_rulers ()
_ruler_separator->set_name("TimebarPadding");
_ruler_separator->show();
+ _minsec_ruler = gtk_custom_hruler_new ();
+ minsec_ruler = Glib::wrap (_minsec_ruler);
+ minsec_ruler->set_name ("MinSecRuler");
+ minsec_ruler->set_size_request (-1, (int)timebar_height);
+ gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_minsec_ruler), &ruler_metrics[ruler_metric_minsec]);
+ minsec_ruler->hide ();
+ minsec_ruler->set_no_show_all();
+
_smpte_ruler = gtk_custom_hruler_new ();
smpte_ruler = Glib::wrap (_smpte_ruler);
smpte_ruler->set_name ("SMPTERuler");
@@ -90,11 +99,13 @@ Editor::initialize_rulers ()
frames_ruler->hide ();
frames_ruler->set_no_show_all();
- _minsec_ruler = gtk_custom_hruler_new ();
- minsec_ruler = Glib::wrap (_minsec_ruler);
- minsec_ruler->set_name ("MinSecRuler");
- minsec_ruler->set_size_request (-1, (int)timebar_height);
- gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_minsec_ruler), &ruler_metrics[ruler_metric_minsec]);
+ _bbt_ruler = gtk_custom_hruler_new ();
+ bbt_ruler = Glib::wrap (_bbt_ruler);
+ bbt_ruler->set_name ("BBTRuler");
+ bbt_ruler->set_size_request (-1, (int)timebar_height);
+ gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_bbt_ruler), &ruler_metrics[ruler_metric_bbt]);
+ bbt_ruler->hide ();
+ bbt_ruler->set_no_show_all();
minsec_ruler->hide ();
minsec_ruler->set_no_show_all();
minsec_nmarks = 0;
@@ -532,66 +543,76 @@ Editor::restore_ruler_visibility ()
if (node) {
if ((prop = node->property ("smpte")) != 0) {
- if (prop->value() == "yes")
+ if (prop->value() == "yes") {
ruler_timecode_action->set_active (true);
- else
+ } else {
ruler_timecode_action->set_active (false);
+ }
}
if ((prop = node->property ("bbt")) != 0) {
- if (prop->value() == "yes")
+ if (prop->value() == "yes") {
ruler_bbt_action->set_active (true);
- else
+ } else {
ruler_bbt_action->set_active (false);
+ }
}
if ((prop = node->property ("frames")) != 0) {
- if (prop->value() == "yes")
+ if (prop->value() == "yes") {
ruler_samples_action->set_active (true);
- else
+ } else {
ruler_samples_action->set_active (false);
+ }
}
if ((prop = node->property ("minsec")) != 0) {
- if (prop->value() == "yes")
+ if (prop->value() == "yes") {
ruler_minsec_action->set_active (true);
- else
+ } else {
ruler_minsec_action->set_active (false);
+ }
}
if ((prop = node->property ("tempo")) != 0) {
- if (prop->value() == "yes")
+ if (prop->value() == "yes") {
ruler_tempo_action->set_active (true);
- else
+ } else {
ruler_tempo_action->set_active (false);
+ }
}
if ((prop = node->property ("meter")) != 0) {
- if (prop->value() == "yes")
+ if (prop->value() == "yes") {
ruler_meter_action->set_active (true);
- else
+ } else {
ruler_meter_action->set_active (false);
+ }
}
if ((prop = node->property ("marker")) != 0) {
- if (prop->value() == "yes")
+ if (prop->value() == "yes") {
ruler_marker_action->set_active (true);
- else
+ } else {
ruler_marker_action->set_active (false);
+ }
}
if ((prop = node->property ("rangemarker")) != 0) {
- if (prop->value() == "yes")
+ if (prop->value() == "yes") {
ruler_range_action->set_active (true);
- else
+ } else {
ruler_range_action->set_active (false);
+ }
}
if ((prop = node->property ("transportmarker")) != 0) {
- if (prop->value() == "yes")
+ if (prop->value() == "yes") {
ruler_loop_punch_action->set_active (true);
- else
+ } else {
ruler_loop_punch_action->set_active (false);
+ }
}
if ((prop = node->property ("cdmarker")) != 0) {
- if (prop->value() == "yes")
+ if (prop->value() == "yes") {
ruler_cd_marker_action->set_active (true);
- else
+ } else {
ruler_cd_marker_action->set_active (false);
+ }
} else {
// this session doesn't yet know about the cdmarker ruler
@@ -610,7 +631,6 @@ Editor::restore_ruler_visibility ()
}
no_ruler_shown_update = false;
-
update_ruler_visibility ();
}
@@ -816,10 +836,17 @@ Editor::update_ruler_visibility ()
vertical_adjustment.set_value (full_canvas_height - canvas_height + 1);
} else {
_trackview_group->property_y () = - get_trackview_group_vertical_offset ();
+ _background_group->property_y () = - get_trackview_group_vertical_offset ();
_trackview_group->move (0, 0);
+ _background_group->move (0, 0);
last_trackview_group_vertical_offset = get_trackview_group_vertical_offset ();
}
+ gdouble bottom_track_pos = vertical_adjustment.get_value() + canvas_height - canvas_timebars_vsize;
+ if (trackview_by_y_position(bottom_track_pos) != 0) {
+ trackview_by_y_position(bottom_track_pos)->clip_to_viewport ();
+ }
+
ruler_label_vbox.set_size_request (-1, (int)(timebar_height * visible_rulers));
time_canvas_vbox.set_size_request (-1,-1);
diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc
index 923c2fbd1c..ec3cf30b45 100644
--- a/gtk2_ardour/editor_tempodisplay.cc
+++ b/gtk2_ardour/editor_tempodisplay.cc
@@ -106,8 +106,7 @@ Editor::tempo_map_changed (Change ignored)
tempo_lines->tempo_map_changed();
compute_current_bbt_points(leftmost_frame, leftmost_frame + current_page_frames());
- session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks);
- update_tempo_based_rulers ();// redraw metric markers
+ session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers
redraw_measures ();
}
@@ -120,8 +119,17 @@ Editor::redisplay_tempo (bool immediate_redraw)
compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames()); // redraw rulers and measures
- redraw_measures();
- update_tempo_based_rulers ();
+ compute_current_bbt_points (leftmost_frame, leftmost_frame + current_page_frames());
+ if (immediate_redraw) {
+ redraw_measures ();
+ } else {
+#ifdef GTKOSX
+ redraw_measures ();
+#else
+ Glib::signal_idle().connect (mem_fun (*this, &Editor::redraw_measures));
+#endif
+ }
+ update_tempo_based_rulers (); // redraw rulers and measures
}
void
diff --git a/gtk2_ardour/editor_timefx.cc b/gtk2_ardour/editor_timefx.cc
index 6628be7116..3dda9e87e9 100644
--- a/gtk2_ardour/editor_timefx.cc
+++ b/gtk2_ardour/editor_timefx.cc
@@ -72,7 +72,8 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
quick_button (_("Quick but Ugly")),
antialias_button (_("Skip Anti-aliasing")),
stretch_opts_label (_("Contents:")),
- precise_button (_("Strict Linear"))
+ precise_button (_("Strict Linear")),
+ preserve_formants_button(_("Preserve Formants"))
{
set_modal (true);
set_position (Gtk::WIN_POS_MOUSE);
@@ -112,6 +113,9 @@ Editor::TimeFXDialog::TimeFXDialog (Editor& e, bool pitch)
pitch_cent_spinner.set_digits (1);
+ upper_button_box.pack_start (preserve_formants_button, false, false);
+
+
add_button (_("Shift"), Gtk::RESPONSE_ACCEPT);
get_vbox()->pack_start (upper_button_box, false, false);
@@ -281,6 +285,7 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
bool peaklock = true;
bool longwin = false;
bool shortwin = false;
+ bool preserve_formants = false;
string txt;
enum {
@@ -290,6 +295,7 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
} transients = Transients;
precise = current_timefx->precise_button.get_active();
+ preserve_formants = current_timefx->preserve_formants_button.get_active();
txt = current_timefx->stretch_opts_selector.get_active_text ();
@@ -312,10 +318,14 @@ Editor::time_fx (RegionSelection& regions, float val, bool pitching)
if (realtime) options |= RubberBandStretcher::OptionProcessRealTime;
if (precise) options |= RubberBandStretcher::OptionStretchPrecise;
+ if (preserve_formants) options |= RubberBandStretcher::OptionFormantPreserved;
+
if (!peaklock) options |= RubberBandStretcher::OptionPhaseIndependent;
if (longwin) options |= RubberBandStretcher::OptionWindowLong;
if (shortwin) options |= RubberBandStretcher::OptionWindowShort;
+
+
switch (transients) {
case NoTransients:
options |= RubberBandStretcher::OptionTransientsSmooth;
@@ -455,7 +465,7 @@ Editor::do_timefx (TimeFXDialog& dialog)
void*
Editor::timefx_thread (void *arg)
{
- PBD::ThreadCreated (pthread_self(), X_("TimeFX"));
+ PBD::notify_gui_about_thread_creation (pthread_self(), X_("TimeFX"));
TimeFXDialog* tsd = static_cast<TimeFXDialog*>(arg);
diff --git a/gtk2_ardour/export_range_markers_dialog.cc b/gtk2_ardour/export_range_markers_dialog.cc
index bf2f0e3989..cea690f74c 100644
--- a/gtk2_ardour/export_range_markers_dialog.cc
+++ b/gtk2_ardour/export_range_markers_dialog.cc
@@ -131,7 +131,6 @@ ExportRangeMarkersDialog::get_target_filepath(string path, string filename, stri
return target_filepath;
}
-
bool
ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
{
@@ -148,10 +147,10 @@ ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
if ( (stat (filepath.c_str(), &statbuf) != 0) ||
(!S_ISDIR (statbuf.st_mode)) ) {
- string txt = _("Please select an existing target directory. Files are not allowed!");
- MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true);
- msg.run();
- return false;
+ string txt = _("Please select an existing target directory. Files are not allowed!");
+ MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true);
+ msg.run();
+ return false;
}
// directory needs to exist and be writable
@@ -166,7 +165,6 @@ ExportRangeMarkersDialog::is_filepath_valid(string &filepath)
return true;
}
-
void
ExportRangeMarkersDialog::init_progress_computing(Locations::LocationList& locations)
{
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index b34c0b8d28..a74df66bc0 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -454,7 +454,7 @@ GainMeterBase::meter_press(GdkEventButton* ev)
} else {
- if (ev->button == 2) {
+ if (Keyboard::is_button2_event(ev)) {
// Primary-button2 click is the midi binding click
// button2-click is "momentary"
@@ -465,7 +465,7 @@ GainMeterBase::meter_press(GdkEventButton* ev)
}
}
- if (ev->button == 1 || ev->button == 2) {
+ if (ev->button == 1 || Keyboard::is_button2_event (ev)) {
if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc
index af21227c0f..c7cecc7130 100644
--- a/gtk2_ardour/generic_pluginui.cc
+++ b/gtk2_ardour/generic_pluginui.cc
@@ -77,7 +77,6 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
//set_homogeneous (false);
pack1(main_contents);
-
settings_box.set_homogeneous (false);
HBox* constraint_hbox = manage (new HBox);
@@ -92,16 +91,25 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
smaller_hbox->pack_start (latency_gui, false, false, 10);
smaller_hbox->pack_start (preset_combo, false, false);
smaller_hbox->pack_start (save_button, false, false);
+ smaller_hbox->pack_start (bypass_button, false, true);
constraint_hbox->set_spacing (5);
- constraint_hbox->pack_start (*smaller_hbox, true, false);
- constraint_hbox->pack_end (bypass_button, false, false);
+ constraint_hbox->set_homogeneous (false);
+
+ VBox* v1_box = manage (new VBox);
+ VBox* v2_box = manage (new VBox);
constraint_hbox->pack_start (eqgui_toggle, false, false);
- settings_box.pack_end (*constraint_hbox, false, false);
+ v1_box->pack_start (*smaller_hbox, false, true);
+ v2_box->pack_start (focus_button, false, true);
main_contents.pack_start (settings_box, false, false);
+ constraint_hbox->pack_end (*v2_box, false, false);
+ constraint_hbox->pack_end (*v1_box, false, false);
+
+ main_contents.pack_start (*constraint_hbox, false, false);
+
if ( is_scrollable ) {
scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
scroller.set_name ("PluginEditor");
@@ -120,9 +128,10 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
eqgui_toggle.signal_toggled().connect( mem_fun(*this, &GenericPluginUI::toggle_plugin_analysis));
pi->ActiveChanged.connect (bind(mem_fun(*this, &GenericPluginUI::processor_active_changed),
- boost::weak_ptr<Processor>(pi)));
- bypass_button.set_active (!pi->active());
+ boost::weak_ptr<Processor>(pi)));
+ bypass_button.set_active (!pi->active());
+
build ();
}
@@ -202,7 +211,7 @@ GenericPluginUI::build ()
/* if we are scrollable, just use one long column */
if (!is_scrollable) {
- if (x++ > 7){
+ if (x++ > 20){
frame = manage (new Frame);
frame->set_name ("BaseFrame");
box = manage (new VBox);
diff --git a/gtk2_ardour/icons/computer_keyboard.png b/gtk2_ardour/icons/computer_keyboard.png
new file mode 100644
index 0000000000..8d425d0385
--- /dev/null
+++ b/gtk2_ardour/icons/computer_keyboard.png
Binary files differ
diff --git a/gtk2_ardour/icons/computer_keyboard_active.png b/gtk2_ardour/icons/computer_keyboard_active.png
new file mode 100644
index 0000000000..70e6b37aa0
--- /dev/null
+++ b/gtk2_ardour/icons/computer_keyboard_active.png
Binary files differ
diff --git a/gtk2_ardour/keyboard.cc b/gtk2_ardour/keyboard.cc
index ef8cc34389..d0fcbea5cf 100644
--- a/gtk2_ardour/keyboard.cc
+++ b/gtk2_ardour/keyboard.cc
@@ -64,6 +64,7 @@ guint Keyboard::TertiaryModifier = GDK_SHIFT_MASK; // Shift
guint Keyboard::Level4Modifier = GDK_CONTROL_MASK; // Control
guint Keyboard::CopyModifier = GDK_MOD1_MASK; // Alt/Option
guint Keyboard::RangeSelectModifier = GDK_SHIFT_MASK;
+guint Keyboard::button2_modifiers = Keyboard::SecondaryModifier|Keyboard::Level4Modifier;
#else
guint Keyboard::PrimaryModifier = GDK_CONTROL_MASK; // Control
guint Keyboard::SecondaryModifier = GDK_MOD1_MASK; // Alt/Option
@@ -71,8 +72,10 @@ guint Keyboard::TertiaryModifier = GDK_SHIFT_MASK; // Shift
guint Keyboard::Level4Modifier = GDK_MOD4_MASK; // Mod4/Windows
guint Keyboard::CopyModifier = GDK_CONTROL_MASK;
guint Keyboard::RangeSelectModifier = GDK_SHIFT_MASK;
+guint Keyboard::button2_modifiers = 0; /* not used */
#endif
+
Keyboard* Keyboard::_the_keyboard = 0;
Gtk::Window* Keyboard::current_window = 0;
bool Keyboard::_some_magic_widget_has_focus = false;
@@ -265,10 +268,20 @@ Keyboard::snooper (GtkWidget *widget, GdkEventKey *event)
}
}
- if (event->type == GDK_KEY_RELEASE && event->keyval == GDK_w && modifier_state_equals (event->state, PrimaryModifier)) {
- if (current_window) {
- current_window->hide ();
- current_window = 0;
+ /* Special keys that we want to handle in
+ any dialog, no matter whether it uses
+ the regular set of accelerators or not
+ */
+
+ if (event->type == GDK_KEY_RELEASE && modifier_state_equals (event->state, PrimaryModifier)) {
+ switch (event->keyval) {
+ case GDK_w:
+ if (current_window) {
+ current_window->hide ();
+ current_window = 0;
+ ret = true;
+ }
+ break;
}
}
@@ -291,25 +304,29 @@ Keyboard::enter_window (GdkEventCrossing *ev, Gtk::Window* win)
bool
Keyboard::leave_window (GdkEventCrossing *ev, Gtk::Window* win)
{
- switch (ev->detail) {
- case GDK_NOTIFY_INFERIOR:
- if (debug_keyboard) {
- cerr << "INFERIOR crossing ... out\n";
- }
- break;
-
- case GDK_NOTIFY_VIRTUAL:
- if (debug_keyboard) {
- cerr << "VIRTUAL crossing ... out\n";
- }
- /* fallthru */
-
- default:
- if (debug_keyboard) {
- cerr << "REAL CROSSING ... out\n";
- cerr << "clearing current target\n";
+ if (ev) {
+ switch (ev->detail) {
+ case GDK_NOTIFY_INFERIOR:
+ if (debug_keyboard) {
+ cerr << "INFERIOR crossing ... out\n";
+ }
+ break;
+
+ case GDK_NOTIFY_VIRTUAL:
+ if (debug_keyboard) {
+ cerr << "VIRTUAL crossing ... out\n";
+ }
+ /* fallthru */
+
+ default:
+ if (debug_keyboard) {
+ cerr << "REAL CROSSING ... out\n";
+ cerr << "clearing current target\n";
+ }
+ state.clear ();
+ current_window = 0;
}
- state.clear ();
+ } else {
current_window = 0;
}
@@ -363,13 +380,24 @@ Keyboard::set_snap_modifier (guint mod)
bool
Keyboard::is_edit_event (GdkEventButton *ev)
{
-
return (ev->type == GDK_BUTTON_PRESS || ev->type == GDK_BUTTON_RELEASE) &&
(ev->button == Keyboard::edit_button()) &&
((ev->state & RelevantModifierKeyMask) == Keyboard::edit_modifier());
}
bool
+Keyboard::is_button2_event (GdkEventButton* ev)
+{
+#ifdef GTKOSX
+ return (ev->button == 2) ||
+ ((ev->button == 1) &&
+ ((ev->state & Keyboard::button2_modifiers) == Keyboard::button2_modifiers));
+#else
+ return ev->button == 2;
+#endif
+}
+
+bool
Keyboard::is_delete_event (GdkEventButton *ev)
{
return (ev->type == GDK_BUTTON_PRESS || ev->type == GDK_BUTTON_RELEASE) &&
diff --git a/gtk2_ardour/keyboard.h b/gtk2_ardour/keyboard.h
index e6d5065e86..5fb696e6a5 100644
--- a/gtk2_ardour/keyboard.h
+++ b/gtk2_ardour/keyboard.h
@@ -107,6 +107,7 @@ class Keyboard : public sigc::trackable, PBD::Stateful
static bool is_edit_event (GdkEventButton*);
static bool is_delete_event (GdkEventButton*);
static bool is_context_menu_event (GdkEventButton*);
+ static bool is_button2_event (GdkEventButton*);
static Keyboard& the_keyboard() { return *_the_keyboard; }
@@ -143,6 +144,7 @@ class Keyboard : public sigc::trackable, PBD::Stateful
static guint delete_but;
static guint delete_mod;
static guint snap_mod;
+ static guint button2_modifiers;
static Gtk::Window* current_window;
static std::string user_keybindings_path;
static bool can_save_keybindings;
diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc
index aecbc1f634..c7724cff63 100644
--- a/gtk2_ardour/main.cc
+++ b/gtk2_ardour/main.cc
@@ -151,6 +151,10 @@ fixup_bundle_environment ()
setenv ("ARDOUR_CONFIG_PATH", path.c_str(), 1);
setenv ("ARDOUR_DATA_PATH", path.c_str(), 1);
+ path = dir_path;
+ path += "/../Resources";
+ setenv ("ARDOUR_INSTANT_XML_PATH", path.c_str(), 1);
+
cstr = getenv ("LADSPA_PATH");
if (cstr) {
path = cstr;
@@ -264,7 +268,6 @@ fixup_bundle_environment ()
path += "/../Resources/gdk-pixbuf.loaders";
setenv ("GDK_PIXBUF_MODULE_FILE", path.c_str(), 1);
- cerr << "Set GDK_PIXBUF_MODULE_FILE to " << path << endl;
if (getenv ("ARDOUR_WITH_JACK")) {
// JACK driver dir
@@ -297,12 +300,9 @@ int main (int argc, char *argv[])
{
vector<Glib::ustring> null_file_list;
- cerr << "here we go\n";
-
#ifdef __APPLE__
fixup_bundle_environment ();
#endif
- cerr << "just did it\n";
Glib::thread_init();
gtk_set_locale ();
diff --git a/gtk2_ardour/matrix.cc b/gtk2_ardour/matrix.cc
index db16362ca0..5cb229e4ea 100644
--- a/gtk2_ardour/matrix.cc
+++ b/gtk2_ardour/matrix.cc
@@ -152,7 +152,6 @@ Matrix::reset_size ()
*/
float w = 0;
- float w1;
float h = 0;
cairo_text_extents_t extents;
cairo_t* cr;
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 1a357dc002..c6b60b974e 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -321,6 +321,16 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
RouteUI::set_route (rt);
+ if (input_selector) {
+ delete input_selector;
+ input_selector = 0;
+ }
+
+ if (output_selector) {
+ delete output_selector;
+ output_selector = 0;
+ }
+
panners.set_io (rt);
gpm.set_io (rt);
pre_processor_box.set_route (rt);
@@ -364,6 +374,7 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
#endif /* VARISPEED_IN_MIXER_STRIP */
button_table.attach (*rec_enable_button, 0, 2, 2, 3);
+ rec_enable_button->show();
}
if (_route->phase_invert()) {
@@ -385,6 +396,9 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
meter_point_label.set_text (_("post"));
break;
}
+
+ delete route_ops_menu;
+ route_ops_menu = 0;
ARDOUR_UI::instance()->tooltips().set_tip (comment_button, _route->comment().empty() ?
_("Click to Add/Edit Comments"):
@@ -518,20 +532,19 @@ MixerStrip::set_width (Width w, void* owner)
switch (w) {
case Wide:
- set_size_request (-1, -1);
-
+
if (rec_enable_button) {
- ((Gtk::Label*)rec_enable_button->get_child())->set_text (_("record"));
+ ((Gtk::Label*)rec_enable_button->get_child())->set_text (_("Record"));
}
((Gtk::Label*)mute_button->get_child())->set_text (_("Mute"));
((Gtk::Label*)solo_button->get_child())->set_text (_("Solo"));
if (_route->comment() == "") {
comment_button.unset_bg (STATE_NORMAL);
- ((Gtk::Label*)comment_button.get_child())->set_text (_("comments"));
+ ((Gtk::Label*)comment_button.get_child())->set_text (_("Comments"));
} else {
comment_button.modify_bg (STATE_NORMAL, color());
- ((Gtk::Label*)comment_button.get_child())->set_text (_("*comments*"));
+ ((Gtk::Label*)comment_button.get_child())->set_text (_("*Comments*"));
}
((Gtk::Label*)gpm.gain_automation_style_button.get_child())->set_text (gpm.astyle_string(gain_automation->automation_style()));
@@ -539,6 +552,7 @@ MixerStrip::set_width (Width w, void* owner)
((Gtk::Label*)panners.pan_automation_style_button.get_child())->set_text (panners.astyle_string(_route->panner().automation_style()));
((Gtk::Label*)panners.pan_automation_state_button.get_child())->set_text (panners.astate_string(_route->panner().automation_state()));
Gtkmm2ext::set_size_request_to_display_given_text (name_button, "long", 2, 2);
+ set_size_request (-1, -1);
break;
case Narrow:
@@ -564,12 +578,13 @@ MixerStrip::set_width (Width w, void* owner)
set_size_request (max (50, gpm.get_gm_width()), -1);
break;
}
-
update_input_display ();
update_output_display ();
mix_group_changed (0);
name_changed ();
-
+#ifdef GTKOSX
+ WidthChanged();
+#endif
}
void
@@ -1084,7 +1099,7 @@ void
MixerStrip::build_route_ops_menu ()
{
using namespace Menu_Helpers;
- route_ops_menu = manage (new Menu);
+ route_ops_menu = new Menu;
route_ops_menu->set_name ("ArdourContextMenu");
MenuList& items = route_ops_menu->items();
@@ -1107,11 +1122,10 @@ MixerStrip::build_route_ops_menu ()
denormal_menu_item = dynamic_cast<CheckMenuItem *> (&items.back());
denormal_menu_item->set_active (_route->denormal_protection());
- build_remote_control_menu ();
-
- items.push_back (SeparatorElem());
if (!Profile->get_sae()) {
- items.push_back (MenuElem (_("Remote Control ID"), *remote_control_menu));
+ build_remote_control_menu ();
+ items.push_back (SeparatorElem());
+ items.push_back (MenuElem (_("Remote Control ID"), *remote_control_menu));
}
items.push_back (SeparatorElem());
@@ -1121,7 +1135,7 @@ MixerStrip::build_route_ops_menu ()
gint
MixerStrip::name_button_button_press (GdkEventButton* ev)
{
- if (ev->button == 1) {
+ if (ev->button == 1 || ev->button == 3) {
list_route_operations ();
Menu_Helpers::MenuList& items = route_ops_menu->items();
diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h
index c4c28a06e9..2b6aed2717 100644
--- a/gtk2_ardour/mixer_strip.h
+++ b/gtk2_ardour/mixer_strip.h
@@ -96,6 +96,10 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
ARDOUR::RouteGroup* mix_group() const;
void set_route (boost::shared_ptr<ARDOUR::Route>);
+#ifdef GTKOSX
+ sigc::signal<void> WidthChanged;
+#endif
+
protected:
friend class Mixer_UI;
void set_packed (bool yn);
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 0be9b03444..06b30c700c 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -271,7 +271,7 @@ Mixer_UI::show_window ()
present ();
if (!_visible) {
set_window_pos_and_size ();
-
+
/* now reset each strips width so the right widgets are shown */
MixerStrip* ms;
@@ -339,7 +339,9 @@ Mixer_UI::add_strip (Session::RouteList& routes)
route->NameChanged.connect (bind (mem_fun(*this, &Mixer_UI::strip_name_changed), strip));
strip->GoingAway.connect (bind (mem_fun(*this, &Mixer_UI::remove_strip), strip));
-
+#ifdef GTKOSX
+ strip->WidthChanged.connect (mem_fun(*this, &Mixer_UI::queue_draw_all_strips));
+#endif
strip->signal_button_release_event().connect (bind (mem_fun(*this, &Mixer_UI::strip_button_release_event), strip));
}
@@ -767,6 +769,30 @@ Mixer_UI::redisplay_track_list ()
auto_rebind_midi_controls ();
}
+#ifdef GTKOSX
+void
+Mixer_UI::queue_draw_all_strips ()
+{
+ TreeModel::Children rows = track_model->children();
+ TreeModel::Children::iterator i;
+ long order;
+
+ for (order = 0, i = rows.begin(); i != rows.end(); ++i, ++order) {
+ MixerStrip* strip = (*i)[track_columns.strip];
+
+ if (strip == 0) {
+ continue;
+ }
+
+ bool visible = (*i)[track_columns.visible];
+
+ if (visible) {
+ strip->queue_draw();
+ }
+ }
+}
+#endif
+
void
Mixer_UI::set_auto_rebinding( bool val )
{
@@ -919,6 +945,9 @@ Mixer_UI::track_display_button_press (GdkEventButton* ev)
bool visible = (*iter)[track_columns.visible];
(*iter)[track_columns.visible] = !visible;
}
+#ifdef GTKOSX
+ track_display.queue_draw();
+#endif
}
}
return true;
@@ -1014,6 +1043,9 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
if ((group = (*iter)[group_columns.group]) != 0) {
// edit_mix_group (group);
+#ifdef GTKOSX
+ group_display.queue_draw();
+#endif
return true;
}
}
@@ -1025,6 +1057,9 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
bool active = (*iter)[group_columns.active];
(*iter)[group_columns.active] = !active;
+#ifdef GTKOSX
+ group_display.queue_draw();
+#endif
return true;
}
break;
@@ -1033,6 +1068,9 @@ Mixer_UI::group_display_button_press (GdkEventButton* ev)
if ((iter = group_model->get_iter (path))) {
bool visible = (*iter)[group_columns.visible];
(*iter)[group_columns.visible] = !visible;
+#ifdef GTKOSX
+ group_display.queue_draw();
+#endif
return true;
}
break;
@@ -1281,19 +1319,41 @@ Mixer_UI::set_state (const XMLNode& node)
const XMLProperty* prop;
XMLNode* geometry;
- if ((geometry = find_named_node (node, "geometry")) == 0) {
+ m_width = default_width;
+ m_height = default_height;
+ m_root_x = 1;
+ m_root_y = 1;
+
+ if ((geometry = find_named_node (node, "geometry")) != 0) {
- m_width = default_width;
- m_height = default_height;
- m_root_x = 1;
- m_root_y = 1;
+ XMLProperty* prop;
- } else {
+ if ((prop = geometry->property("x_size")) == 0) {
+ prop = geometry->property ("x-size");
+ }
+ if (prop) {
+ m_width = atoi(prop->value());
+ }
+ if ((prop = geometry->property("y_size")) == 0) {
+ prop = geometry->property ("y-size");
+ }
+ if (prop) {
+ m_height = atoi(prop->value());
+ }
- m_width = atoi(geometry->property("x-size")->value().c_str());
- m_height = atoi(geometry->property("y-size")->value().c_str());
- m_root_x = atoi(geometry->property("x-pos")->value().c_str());
- m_root_y = atoi(geometry->property("y-pos")->value().c_str());
+ if ((prop = geometry->property ("x_pos")) == 0) {
+ prop = geometry->property ("x-pos");
+ }
+ if (prop) {
+ m_root_x = atoi (prop->value());
+
+ }
+ if ((prop = geometry->property ("y_pos")) == 0) {
+ prop = geometry->property ("y-pos");
+ }
+ if (prop) {
+ m_root_y = atoi (prop->value());
+ }
}
set_window_pos_and_size ();
@@ -1369,12 +1429,24 @@ Mixer_UI::pane_allocation_handler (Allocation& alloc, Gtk::Paned* which)
int width, height;
static int32_t done[3] = { 0, 0, 0 };
- if ((geometry = find_named_node (*node, "geometry")) == 0) {
- width = default_width;
- height = default_height;
- } else {
- width = atoi(geometry->property("x-size")->value());
- height = atoi(geometry->property("y-size")->value());
+ width = default_width;
+ height = default_height;
+
+ if ((geometry = find_named_node (*node, "geometry")) != 0) {
+
+
+ if ((prop = geometry->property ("x_size")) == 0) {
+ prop = geometry->property ("x-size");
+ }
+ if (prop) {
+ width = atoi (prop->value());
+ }
+ if ((prop = geometry->property ("y_size")) == 0) {
+ prop = geometry->property ("y-size");
+ }
+ if (prop) {
+ height = atoi (prop->value());
+ }
}
if (which == static_cast<Gtk::Paned*> (&rhs_pane1)) {
diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h
index 4765256d58..2b48ade6e0 100644
--- a/gtk2_ardour/mixer_ui.h
+++ b/gtk2_ardour/mixer_ui.h
@@ -152,6 +152,9 @@ class Mixer_UI : public Gtk::Window
void redisplay_track_list ();
bool no_track_list_redisplay;
bool track_display_button_press (GdkEventButton*);
+#ifdef GTKOSX
+ void queue_draw_all_strips ();
+#endif
void track_list_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
void track_list_delete (const Gtk::TreeModel::Path&);
diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in
index 8a2a1923ba..27e6e9f259 100644
--- a/gtk2_ardour/mnemonic-us.bindings.in
+++ b/gtk2_ardour/mnemonic-us.bindings.in
@@ -108,28 +108,30 @@
(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<%WINDOW%>b")
(gtk_accel_path "<Actions>/Editor/normalize-region" "<%SECONDARY%>n")
(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "<%SECONDARY%>m")
-(gtk_accel_path "<Actions>/Common/goto-mixer" "<%WINDOW%>m")
+(gtk_accel_path "<Actions>/Common/toggle-editor-mixer-on-top" "<%WINDOW%>m")
;; arrow keys, navigation etc.
(gtk_accel_path "<Actions>/Editor/step-tracks-up" "uparrow")
-(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%PRIMARY%>uparrow")
+(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<%TERTIARY%>uparrow")
(gtk_accel_path "<Actions>/Editor/select-prev-route" "<%SECONDARY%>uparrow")
-(gtk_accel_path "<Actions>/Editor/move-selected-tracks-up" "<%TERTIARY%>uparrow")
+(gtk_accel_path "<Actions>/Editor/move-selected-tracks-up" "<%PRIMARY%>uparrow")
(gtk_accel_path "<Actions>/Editor/step-tracks-down" "downarrow")
-(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
+(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%TERTIARY%>downarrow")
(gtk_accel_path "<Actions>/Editor/select-next-route" "<%SECONDARY%>downarrow")
-(gtk_accel_path "<Actions>/Editor/move-selected-tracks-down" "<%TERTIARY%>downarrow")
+(gtk_accel_path "<Actions>/Editor/move-selected-tracks-down" "<%PRIMARY%>downarrow")
(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<%PRIMARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<%SECONDARY%>leftarrow")
+(gtk_accel_path "<Actions>/Transport/Rewind" "<%TERTIARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<%PRIMARY%><%TERTIARY%>leftarrow")
(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<%PRIMARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<%SECONDARY%>rightarrow")
+(gtk_accel_path "<Actions>/Transport/Forward" "<%TERTIARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<%PRIMARY%><%TERTIARY%>rightarrow")
(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
@@ -214,8 +216,9 @@
(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
-(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "4")
-(gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
+(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "4")
+(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "5")
+(gtk_accel_path "<Actions>/Transport/ToggleClick" "6")
(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "9")
(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
diff --git a/gtk2_ardour/nag.cc b/gtk2_ardour/nag.cc
new file mode 100644
index 0000000000..ece3ac3e2a
--- /dev/null
+++ b/gtk2_ardour/nag.cc
@@ -0,0 +1,206 @@
+#include <fstream>
+#include <gtkmm/stock.h>
+
+#include <ardour/ardour.h>
+#include <ardour/filesystem_paths.h>
+
+#include "nag.h"
+#include "i18n.h"
+
+using namespace ARDOUR;
+using namespace std;
+using namespace Glib;
+using namespace Gtk;
+
+NagScreen::NagScreen (std::string context, bool maybe_sub)
+ : ArdourDialog (_("Support Ardour Development"), true)
+ , donate_button (button_group, _("I'd like to make a one-time donation"))
+ , subscribe_button (button_group, _("Tell me more about becoming a subscriber"))
+ , existing_button (button_group, _("I'm already a subscriber!"))
+ , next_time_button (button_group, _("Ask about this the next time I export"))
+ , never_again_button (button_group, _("Never ever ask me about this again"))
+{
+ if (maybe_sub) {
+ message.set_text (_("Congratulations on your session export.\n\n\
+It looks as if you may already be a subscriber. If so, thanks, and sorry\n\
+to bother you again about this - I'm working on improving our subscriber system\n\
+so that I don't have to keep annoying you with this message.\n\n\
+If you're not a subscriber, perhaps you might consider supporting my work\n\
+on Ardour with either a one-time donation or subscription. Nothing will \n\
+happen if you choose not to do so. However Ardour's continuing development\n\
+relies on a stable, sustainable income stream. Thanks for using Ardour!"));
+ } else {
+ message.set_text (_("Congratulations on your session export.\n\n\
+I hope you find Ardour a useful tool. I'd like to ask you to consider supporting\n\
+its development with either a one-time donation or subscription. Nothing\n\
+will happen if you choose not to do so. However Ardour's continuing development\n\
+relies on a stable, sustainable income stream. Thanks for using Ardour!"));
+ }
+
+ button_box.pack_start (donate_button);
+ button_box.pack_start (subscribe_button);
+ button_box.pack_start (existing_button);
+ button_box.pack_start (next_time_button);
+ button_box.pack_start (never_again_button);
+
+ get_vbox()->set_spacing (12);
+ get_vbox()->pack_start (message);
+ get_vbox()->pack_start (button_box);
+
+ set_border_width (12);
+ add_button (Stock::OK, RESPONSE_ACCEPT);
+}
+
+NagScreen::~NagScreen ()
+{
+}
+
+void
+NagScreen::nag ()
+{
+ show_all ();
+
+ int response = run ();
+
+ hide ();
+
+ switch (response) {
+ case RESPONSE_ACCEPT:
+ break;
+ default:
+ return;
+ }
+
+ if (donate_button.get_active()) {
+ offer_to_donate ();
+ } else if (subscribe_button.get_active()) {
+ offer_to_subscribe ();
+ } else if (never_again_button.get_active ()) {
+ mark_never_again ();
+ } else if (existing_button.get_active ()) {
+ mark_affirmed_subscriber ();
+ }
+}
+
+NagScreen*
+NagScreen::maybe_nag (std::string why)
+{
+ Glib::ustring path;
+ bool really_subscribed;
+ bool maybe_subscribed;
+
+ path = Glib::build_filename (user_config_directory().to_string(), ".nevernag");
+
+ if (Glib::file_test (path, Glib::FILE_TEST_EXISTS)) {
+ return 0;
+ }
+
+ maybe_subscribed = is_subscribed (really_subscribed);
+
+ if (really_subscribed) {
+ return 0;
+ }
+
+ return new NagScreen (why, maybe_subscribed);
+}
+
+void
+NagScreen::mark_never_again ()
+{
+ Glib::ustring path;
+
+ path = Glib::build_filename (user_config_directory().to_string(), ".nevernag");
+
+ ofstream nagfile (path.c_str());
+}
+
+void
+NagScreen::mark_subscriber ()
+{
+ Glib::ustring path;
+
+ path = Glib::build_filename (user_config_directory().to_string(), ".askedaboutsub");
+
+ ofstream subsfile (path.c_str());
+}
+
+void
+NagScreen::mark_affirmed_subscriber ()
+{
+ Glib::ustring path;
+
+ path = Glib::build_filename (user_config_directory().to_string(), ".isubscribe");
+
+ ofstream subsfile (path.c_str());
+}
+
+bool
+NagScreen::is_subscribed (bool& really)
+{
+ Glib::ustring path;
+
+ really = false;
+
+ /* what we'd really like here is a way to query paypal
+ for someone's subscription status. thats a bit complicated
+ so for now, just see if they ever told us they were
+ subscribed. we try to trust our users :)
+ */
+
+ path = Glib::build_filename (user_config_directory().to_string(), ".isubscribe");
+ if (file_test (path, FILE_TEST_EXISTS)) {
+ really = true;
+ return true;
+ }
+
+ path = Glib::build_filename (user_config_directory().to_string(), ".askedaboutsub");
+ if (file_test (path, FILE_TEST_EXISTS)) {
+ /* they never said they were subscribed but they
+ did once express an interest in it.
+ */
+ really = false;
+ return true;
+ }
+
+ return false;
+}
+
+void
+NagScreen::offer_to_donate ()
+{
+ const char* uri = "http://ardour.org/donate";
+
+ /* we don't care if it fails */
+
+ open_uri (uri);
+}
+
+void
+NagScreen::offer_to_subscribe ()
+{
+ const char* uri = "http://ardour.org/subscribe";
+
+ if (open_uri (uri)) {
+ mark_subscriber ();
+ }
+}
+
+bool
+NagScreen::open_uri (const char* uri)
+{
+#ifdef HAVE_GTK_OPEN_URI
+ GError* err;
+ return gtk_open_uri (0, uri, GDK_CURRENT_TIME, &err);
+#else
+#ifndef __APPLE__
+ std::string command = "xdg-open ";
+ command += uri;
+ spawn_command_line_async (command);
+
+ return true;
+#else
+ extern bool cocoa_open_url (const char*);
+ return cocoa_open_url (uri);
+#endif
+#endif
+}
diff --git a/gtk2_ardour/nag.h b/gtk2_ardour/nag.h
new file mode 100644
index 0000000000..5872e28f3b
--- /dev/null
+++ b/gtk2_ardour/nag.h
@@ -0,0 +1,39 @@
+#ifndef __gtk_ardour_nag_h__
+#define __gtk_ardour_nag_h__
+
+#include "ardour_dialog.h"
+
+#include <gtkmm/label.h>
+#include <gtkmm/radiobutton.h>
+#include <gtkmm/buttonbox.h>
+
+class NagScreen : public ArdourDialog
+{
+ public:
+ ~NagScreen();
+
+ static NagScreen* maybe_nag (std::string context);
+ void nag ();
+
+ private:
+ NagScreen (std::string context, bool maybe_subscriber);
+
+ Gtk::Label message;
+ Gtk::VButtonBox button_box;
+ Gtk::RadioButtonGroup button_group;
+ Gtk::RadioButton donate_button;
+ Gtk::RadioButton subscribe_button;
+ Gtk::RadioButton existing_button;
+ Gtk::RadioButton next_time_button;
+ Gtk::RadioButton never_again_button;
+
+ void mark_never_again ();
+ void mark_subscriber ();
+ void mark_affirmed_subscriber ();
+ void offer_to_donate ();
+ void offer_to_subscribe ();
+ bool open_uri (const char*);
+ static bool is_subscribed (bool& really);
+};
+
+#endif /* __gtk_ardour_nag_h__ */
diff --git a/gtk2_ardour/new_session_dialog.cc b/gtk2_ardour/new_session_dialog.cc
index 4c128d4bf3..e87f201a29 100644
--- a/gtk2_ardour/new_session_dialog.cc
+++ b/gtk2_ardour/new_session_dialog.cc
@@ -17,9 +17,6 @@
*/
-#include "i18n.h"
-#include "new_session_dialog.h"
-
#include <pbd/error.h>
#include <ardour/recent_sessions.h>
@@ -46,6 +43,8 @@ using namespace ARDOUR;
#include "opts.h"
#include "utils.h"
+#include "i18n.h"
+#include "new_session_dialog.h"
NewSessionDialog::NewSessionDialog()
: ArdourDialog ("session control")
@@ -426,6 +425,8 @@ NewSessionDialog::NewSessionDialog()
m_notebook->show();
m_notebook->show_all_children();
+ engine_page_session_folder = X_("");
+ engine_page_session_name = X_("");
set_default_response (Gtk::RESPONSE_OK);
if (!ARDOUR_COMMAND_LINE::session_name.length()) {
@@ -466,7 +467,9 @@ NewSessionDialog::run ()
/* nothing to display */
return Gtk::RESPONSE_OK;
}
-
+ if (!(page_set & NewPage) && !(page_set & OpenPage)) {
+ set_response_sensitive (Gtk::RESPONSE_OK, true);
+ }
return ArdourDialog::run ();
}
@@ -521,13 +524,13 @@ void
NewSessionDialog::set_session_name (const Glib::ustring& name)
{
m_name->set_text (name);
+ engine_page_session_name = name;
}
void
NewSessionDialog::set_session_folder(const Glib::ustring& dir)
{
Glib::ustring realdir = dir;
- char* res;
/* this little tangled mess is a result of 4 things:
@@ -547,15 +550,17 @@ NewSessionDialog::set_session_folder(const Glib::ustring& dir)
char buf[PATH_MAX];
- if((res = realpath (dir.c_str(), buf)) != 0) {
+ if(realpath (dir.c_str(), buf) != 0) {
if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
realdir = Glib::path_get_dirname (realdir);
}
m_folder->set_current_folder (realdir);
+ engine_page_session_folder = realdir;
}
#else
+ char* res;
if (!Glib::file_test (dir, Glib::FILE_TEST_IS_DIR)) {
realdir = Glib::path_get_dirname (realdir);
cerr << "didn't exist, use " << realdir << endl;
@@ -593,6 +598,9 @@ NewSessionDialog::session_name() const
case NewPage:
case EnginePage:
/* new or audio setup pages */
+ if (!(page_set & OpenPage) && !(page_set & NewPage)) {
+ return Glib::filename_from_utf8(engine_page_session_name);
+ }
return Glib::filename_from_utf8(m_name->get_text());
default:
break;
@@ -613,8 +621,12 @@ NewSessionDialog::session_folder() const
return Glib::filename_from_utf8(m_folder->get_filename());
case EnginePage:
+ if (!(page_set & OpenPage) && !(page_set & NewPage)) {
+ /* just engine page, nothing else */
+ return Glib::filename_from_utf8(engine_page_session_folder);
+ }
if (page_set == EnginePage) {
- /* just engine page, nothing else : use m_folder since it should be set */
+ /* use m_folder since it should be set */
return Glib::filename_from_utf8(m_folder->get_filename());
}
break;
diff --git a/gtk2_ardour/new_session_dialog.h b/gtk2_ardour/new_session_dialog.h
index aa6911f360..2d35c2d6bf 100644
--- a/gtk2_ardour/new_session_dialog.h
+++ b/gtk2_ardour/new_session_dialog.h
@@ -216,6 +216,8 @@ protected:
bool on_new_session_page;
bool have_engine;
+ Glib::ustring engine_page_session_folder;
+ Glib::ustring engine_page_session_name;
};
#endif // NEW_SESSION_DIALOG_H
diff --git a/gtk2_ardour/option_editor.cc b/gtk2_ardour/option_editor.cc
index c261aba649..3bd864422e 100644
--- a/gtk2_ardour/option_editor.cc
+++ b/gtk2_ardour/option_editor.cc
@@ -28,6 +28,7 @@
#include <ardour/auditioner.h>
#include <ardour/sndfilesource.h>
#include <ardour/crossfade.h>
+#include <ardour/profile.h>
#include <midi++/manager.h>
#include <midi++/factory.h>
#include <gtkmm2ext/stop_signal.h>
@@ -148,9 +149,11 @@ OptionEditor::OptionEditor (ARDOUR_UI& uip, PublicEditor& ed, Mixer_UI& mixui)
setup_keyboard_options ();
setup_auditioner_editor ();
- notebook.pages().push_back (TabElem (sync_packer, _("Sync")));
- notebook.pages().push_back (TabElem (path_table, _("Paths/Files")));
- notebook.pages().push_back (TabElem (keyboard_mouse_table, _("Kbd/Mouse")));
+ if (!Profile->get_sae()) {
+ notebook.pages().push_back (TabElem (sync_packer, _("Sync")));
+ notebook.pages().push_back (TabElem (path_table, _("Paths/Files")));
+ notebook.pages().push_back (TabElem (keyboard_mouse_table, _("Kbd/Mouse")));
+ }
notebook.pages().push_back (TabElem (click_packer, _("Click")));
notebook.pages().push_back (TabElem (audition_packer, _("Audition")));
notebook.pages().push_back (TabElem (misc_packer, _("Misc")));
diff --git a/gtk2_ardour/panner_ui.cc b/gtk2_ardour/panner_ui.cc
index b1273aa460..3368905ad3 100644
--- a/gtk2_ardour/panner_ui.cc
+++ b/gtk2_ardour/panner_ui.cc
@@ -154,6 +154,7 @@ PannerUI::set_io (boost::shared_ptr<IO> io)
panner = 0;
}
+ setup_pan ();
pan_changed (0);
update_pan_sensitive ();
@@ -225,14 +226,12 @@ PannerUI::get_controllable()
bool
PannerUI::panning_link_button_press (GdkEventButton* ev)
{
- cerr << "link press\n";
return true;
}
bool
PannerUI::panning_link_button_release (GdkEventButton* ev)
{
- cerr << "link release\n";
if (!ignore_toggle) {
_io->panner().set_linked (!_io->panner().linked());
}
@@ -259,7 +258,7 @@ PannerUI::update_pan_linkage ()
bool x = _io->panner().linked();
bool bx = panning_link_button.get_active();
-
+
if (x != bx) {
ignore_toggle = true;
@@ -328,6 +327,7 @@ PannerUI::panner_changed ()
{
ENSURE_GUI_THREAD (mem_fun(*this, &PannerUI::panner_changed));
setup_pan ();
+ pan_changed (0);
}
void
@@ -573,6 +573,7 @@ PannerUI::pan_changed (void *src)
break;
case 2:
+ /* bring pan bar state up to date */
update_pan_bars (false);
break;
@@ -806,7 +807,7 @@ PannerUI::pan_automation_state_changed ()
pan_watching.disconnect();
if (x) {
- pan_watching = ARDOUR_UI::RapidScreenUpdate.connect (mem_fun (*this, &PannerUI::effective_pan_display));
+ pan_watching = ARDOUR_UI::RapidScreenUpdate.connect (mem_fun (*this, &PannerUI::effective_pan_display));
}
}
diff --git a/gtk2_ardour/plugin_eq_gui.cc b/gtk2_ardour/plugin_eq_gui.cc
index bacfbe98b2..307503fc8b 100644
--- a/gtk2_ardour/plugin_eq_gui.cc
+++ b/gtk2_ardour/plugin_eq_gui.cc
@@ -458,7 +458,7 @@ PluginEqGui::plot_impulse_phase(Gtk::Widget *w, cairo_t *cr)
float avgY = 0.0;
int avgNum = 0;
- float width = w->get_width();
+ // float width = w->get_width();
float height = w->get_height();
cairo_set_source_rgba(cr, 0.95, 0.3, 0.2, 1.0);
@@ -508,7 +508,7 @@ PluginEqGui::draw_scales_power(Gtk::Widget *w, cairo_t *cr)
cairo_font_extents_t extents;
cairo_font_extents(cr, &extents);
- float fontXOffset = extents.descent + 1.0;
+ // float fontXOffset = extents.descent + 1.0;
char buf[256];
@@ -607,7 +607,7 @@ PluginEqGui::plot_impulse_amplitude(Gtk::Widget *w, cairo_t *cr)
float avgY = 0.0;
int avgNum = 0;
- float width = w->get_width();
+ // float width = w->get_width();
float height = w->get_height();
cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
@@ -656,7 +656,7 @@ PluginEqGui::plot_signal_amplitude_difference(Gtk::Widget *w, cairo_t *cr)
float avgY = 0.0;
int avgNum = 0;
- float width = w->get_width();
+ // float width = w->get_width();
float height = w->get_height();
cairo_set_source_rgb(cr, 0.0, 1.0, 0.0);
diff --git a/gtk2_ardour/plugin_selector.h b/gtk2_ardour/plugin_selector.h
index c4b613647d..e5224b4fa7 100644
--- a/gtk2_ardour/plugin_selector.h
+++ b/gtk2_ardour/plugin_selector.h
@@ -46,6 +46,7 @@ class PluginSelector : public ArdourDialog
void on_show ();
Gtk::Menu& plugin_menu ();
+ void show_manager ();
private:
PluginInterestedObject* interested_object;
@@ -129,7 +130,6 @@ class PluginSelector : public ArdourDialog
void plugin_chosen_from_menu (const ARDOUR::PluginInfoPtr&);
Gtk::Menu* _menu;
- void show_manager ();
};
#endif // __ardour_plugin_selector_h__
diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc
index 06d2a04125..dbb5f3969e 100644
--- a/gtk2_ardour/plugin_ui.cc
+++ b/gtk2_ardour/plugin_ui.cc
@@ -183,6 +183,22 @@ PluginUIWindow::on_leave_notify_event (GdkEventCrossing *ev)
return false;
}
+bool
+PluginUIWindow::on_focus_in_event (GdkEventFocus *ev)
+{
+ Window::on_focus_in_event (ev);
+ //Keyboard::the_keyboard().magic_widget_grab_focus ();
+ return false;
+}
+
+bool
+PluginUIWindow::on_focus_out_event (GdkEventFocus *ev)
+{
+ Window::on_focus_out_event (ev);
+ //Keyboard::the_keyboard().magic_widget_drop_focus ();
+ return false;
+}
+
void
PluginUIWindow::on_show ()
{
@@ -295,10 +311,6 @@ PluginUIWindow::create_lv2_editor(boost::shared_ptr<PluginInsert> insert)
bool
PluginUIWindow::on_key_press_event (GdkEventKey* event)
{
- if (non_gtk_gui) {
- return false;
- }
-
if (!key_press_focus_accelerator_handler (*this, event)) {
return PublicEditor::instance().on_key_press_event(event);
} else {
@@ -347,6 +359,20 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi)
bypass_button.set_name ("PluginBypassButton");
bypass_button.signal_toggled().connect (mem_fun(*this, &PlugUIBase::bypass_toggled));
+ focus_button.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
+
+ focus_button.signal_button_release_event().connect (mem_fun(*this, &PlugUIBase::focus_toggled));
+ focus_button.add_events (Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
+
+ /* these images are not managed, so that we can remove them at will */
+
+ focus_out_image = new Image (get_icon (X_("computer_keyboard")));
+ focus_in_image = new Image (get_icon (X_("computer_keyboard_active")));
+
+ focus_button.add (*focus_out_image);
+
+ ARDOUR_UI::instance()->set_tip (&focus_button, _("Click to focus all keyboard events on this plugin window"), "");
+ ARDOUR_UI::instance()->set_tip (&bypass_button, _("Click to enable/disable this plugin"), "");
}
void
@@ -376,6 +402,7 @@ PlugUIBase::save_plugin_setting ()
prompter.set_prompt(_("Name of New Preset:"));
prompter.add_button (Gtk::Stock::ADD, Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
+ prompter.set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY);
prompter.show_all();
@@ -403,14 +430,29 @@ PlugUIBase::bypass_toggled ()
if ((x = bypass_button.get_active()) == insert->active()) {
insert->set_active (!x);
- if (insert->active()) {
- bypass_button.set_label (_("Bypass"));
- } else {
- bypass_button.set_label (_("Active"));
- }
}
}
+bool
+PlugUIBase::focus_toggled (GdkEventButton* ev)
+{
+ if (Keyboard::the_keyboard().some_magic_widget_has_focus()) {
+ Keyboard::the_keyboard().magic_widget_drop_focus();
+ focus_button.remove ();
+ focus_button.add (*focus_out_image);
+ focus_out_image->show ();
+ ARDOUR_UI::instance()->set_tip (&focus_button, _("Click to focus all keyboard events on this plugin window"), "");
+ } else {
+ Keyboard::the_keyboard().magic_widget_grab_focus();
+ focus_button.remove ();
+ focus_button.add (*focus_in_image);
+ focus_in_image->show ();
+ ARDOUR_UI::instance()->set_tip (&focus_button, _("Click to remove keyboard focus from this plugin window"), "");
+ }
+
+ return true;
+}
+
void
PlugUIBase::update_presets ()
{
diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h
index 2dcaaf188c..b5202a9327 100644
--- a/gtk2_ardour/plugin_ui.h
+++ b/gtk2_ardour/plugin_ui.h
@@ -34,6 +34,8 @@
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/label.h>
#include <gtkmm/menu.h>
+#include <gtkmm/image.h>
+#include <gtkmm/adjustment.h>
#include <gtkmm/togglebutton.h>
#include <gtkmm/socket.h>
#include <gtkmm/comboboxtext.h>
@@ -87,11 +89,16 @@ class PlugUIBase : public virtual sigc::trackable
Gtk::ComboBoxText preset_combo;
Gtk::Button save_button;
Gtk::ToggleButton bypass_button;
+ Gtk::EventBox focus_button;
LatencyGUI latency_gui;
+ Gtk::Image* focus_out_image;
+ Gtk::Image* focus_in_image;
+
void setting_selected();
void save_plugin_setting (void);
+ bool focus_toggled(GdkEventButton*);
void bypass_toggled();
void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p);
};
@@ -223,6 +230,8 @@ class PluginUIWindow : public Gtk::Window
bool on_enter_notify_event (GdkEventCrossing*);
bool on_leave_notify_event (GdkEventCrossing*);
+ bool on_focus_in_event (GdkEventFocus*);
+ bool on_focus_out_event (GdkEventFocus*);
bool on_key_press_event (GdkEventKey*);
bool on_key_release_event (GdkEventKey*);
void on_show ();
diff --git a/gtk2_ardour/po/de_DE.po b/gtk2_ardour/po/de_DE.po
index 5df81e9209..aacb4ddc2b 100644
--- a/gtk2_ardour/po/de_DE.po
+++ b/gtk2_ardour/po/de_DE.po
@@ -1,921 +1,416 @@
# German translations for gtk-ardour
# Copyright (C) 2003 Paul Davis
# This file is distributed under the same license as the gtk-ardour package.
-# Karsten Petersen <kapet@kapet.de>, 2003.
#
+# Karsten Petersen <kapet@kapet.de>, 2003.
+# Edgar Aichinger <edgar.aichinger@aon.at>, 2008.
msgid ""
msgstr ""
"Project-Id-Version: gtk-ardour 0.347.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-01-07 12:21+0100\n"
-"PO-Revision-Date: 2008-01-07 17:01+0100\n"
-"Last-Translator: Sebastian Arnold <mail@sebastian-arnold.net>\n"
-"Language-Team: Deutsch <de@li.org>\n"
+"POT-Creation-Date: 2008-10-20 19:01+0100\n"
+"PO-Revision-Date: 2008-11-02 11:27+0100\n"
+"Last-Translator: Edgar Aichinger <edgar.aichinger@aon.at>\n"
+"Language-Team: German <kde-i18n-de@lists.kde.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: KBabel 0.9.6\n"
+"X-Generator: Lokalize 0.2\n"
"X-Poedit-Country: GERMANY\n"
-"X-Poedit-Basepath: ../\n"
-
-#: gtk2_ardour/about.cc:120
-msgid "Paul Davis"
-msgstr "Paul Davis"
-
-#: gtk2_ardour/about.cc:121
-msgid "Jesse Chappell"
-msgstr "Jesse Chappell"
-
-#: gtk2_ardour/about.cc:122
-msgid "Taybin Rutkin"
-msgstr "Taybin Rutkin"
-
-#: gtk2_ardour/about.cc:123
-msgid "Marcus Andersson"
-msgstr "Marcus Andersson"
-
-#: gtk2_ardour/about.cc:124
-msgid "Jeremy Hall"
-msgstr "Jeremy Hall"
-
-#: gtk2_ardour/about.cc:125
-msgid "Steve Harris"
-msgstr "Steve Harris"
-
-#: gtk2_ardour/about.cc:126
-msgid "Tim Mayberry"
-msgstr "Tim Mayberry"
-
-#: gtk2_ardour/about.cc:127
-msgid "Mark Stewart"
-msgstr "Mark Stewart"
-
-#: gtk2_ardour/about.cc:128
-msgid "Sam Chessman"
-msgstr "Sam Chessman"
-
-#: gtk2_ardour/about.cc:129
-msgid "Jack O'Quin"
-msgstr "Jack O'Quin"
-
-#: gtk2_ardour/about.cc:130
-msgid "Matt Krai"
-msgstr "Matt Krai"
-
-#: gtk2_ardour/about.cc:131
-msgid "Ben Bell"
-msgstr "Ben Bell"
-
-#: gtk2_ardour/about.cc:132
-msgid "Gerard van Dongen"
-msgstr "Gerard van Dongen"
-
-#: gtk2_ardour/about.cc:133
-msgid "Thomas Charbonnel"
-msgstr "Thomas Charbonnel"
-
-#: gtk2_ardour/about.cc:134
-msgid "Nick Mainsbridge"
-msgstr "Nick Mainsbridge"
-
-#: gtk2_ardour/about.cc:135
-msgid "Colin Law"
-msgstr "Colin Law"
-
-#: gtk2_ardour/about.cc:136
-msgid "Sampo Savolainen"
-msgstr "Sampo Savolainen"
-
-#: gtk2_ardour/about.cc:137
-msgid "Joshua Leach"
-msgstr "Joshua Leach"
-
-#: gtk2_ardour/about.cc:138
-msgid "Rob Holland"
-msgstr "Rob Holland"
-
-#: gtk2_ardour/about.cc:139
-msgid "Per Sigmond"
-msgstr "Per Sigmond"
-
-#: gtk2_ardour/about.cc:140
-msgid "Doug Mclain"
-msgstr "Doug Mclain"
+"X-Poedit-Basepath: ../../\n"
+"X-Poedit-SearchPath-0: gtk2_ardour\n"
-#: gtk2_ardour/about.cc:141
-msgid "Petter Sundlöf"
-msgstr "Petter Sundlöf"
-
-#: gtk2_ardour/about.cc:142
-msgid "Thorsten Wilms"
-msgstr "Thorsten Wilms"
-
-#: gtk2_ardour/about.cc:143
-msgid "Ben Loftis"
-msgstr "Ben Loftis"
-
-#: gtk2_ardour/about.cc:144
-msgid "Stefan Kersten"
-msgstr "Stefan Kersten"
-
-#: gtk2_ardour/about.cc:145
-msgid "Christopher George"
-msgstr "Christopher George"
-
-#: gtk2_ardour/about.cc:146
-msgid "Robert Jordens"
-msgstr "Robert Jordens"
-
-#: gtk2_ardour/about.cc:147
-msgid "Dave Robillard"
-msgstr "Dave Robillard"
-
-#: gtk2_ardour/about.cc:148
-msgid "Hans Fugal"
-msgstr "Hans Fugal"
-
-#: gtk2_ardour/about.cc:149
-msgid "Brian Ahr"
-msgstr "Brian Ahr"
-
-#: gtk2_ardour/about.cc:150
-msgid "Nimal Ratnayake"
-msgstr "Nimal Ratnayake"
-
-#: gtk2_ardour/about.cc:151
-msgid "Mike Täht"
-msgstr "Mike Täht"
-
-#: gtk2_ardour/about.cc:152
-msgid "John Anderson"
-msgstr "John Anderson"
-
-#: gtk2_ardour/about.cc:153
-msgid "Nedko Arnaudov"
-msgstr "Nedko Arnaudov"
-
-#: gtk2_ardour/about.cc:154
-msgid "Carl Hetherington"
-msgstr "Carl Hetherington"
-
-#: gtk2_ardour/about.cc:159
-msgid ""
-"French:\n"
-"\tAlain Fréhel <alain.frehel@free.fr>\n"
-"\tChristophe Combelles <ccomb@free.fr>\n"
-msgstr ""
-"French:\n"
-"\tAlain Fréhel <alain.frehel@free.fr>\n"
-"\tChristophe Combelles <ccomb@free.fr>\n"
-
-#: gtk2_ardour/about.cc:160
-msgid ""
-"German:\n"
-"\tKarsten Petersen <kapet@kapet.de>\n"
-"\tSebastian Arnold <mail@sebastian-arnold.net>\n"
-msgstr ""
-"Deutsch:\n"
-"\tKarsten Petersen <kapet@kapet.de>\n"
-"\tSebastian Arnold <mail@sebastian-arnold.net>\n"
-
-#: gtk2_ardour/about.cc:161
-msgid ""
-"Italian:\n"
-"\tFilippo Pappalardo <filippo@email.it>\n"
+#: gtk2_ardour/canvas-simplerect.c:107
+#: gtk2_ardour/canvas-ruler.c:79
+#: gtk2_ardour/canvas-simpleline.c:111
+msgid "x1"
msgstr ""
-"Italian:\n"
-"\tFilippo Pappalardo <filippo@email.it>\n"
-#: gtk2_ardour/about.cc:162
-msgid ""
-"Portuguese:\n"
-"\tRui Nuno Capela <rncbc@rncbc.org>\n"
+#: gtk2_ardour/canvas-simplerect.c:108
+#: gtk2_ardour/canvas-imageframe.c:111
+#: gtk2_ardour/canvas-ruler.c:80
+#: gtk2_ardour/canvas-simpleline.c:112
+msgid "x coordinate of upper left corner of rect"
msgstr ""
-"Portuguese:\n"
-"\tRui Nuno Capela <rncbc@rncbc.org>\n"
-#: gtk2_ardour/about.cc:163
-msgid ""
-"Brazilian Portuguese:\n"
-"\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
-"\tChris Ross <chris@tebibyte.org>\n"
+#: gtk2_ardour/canvas-simplerect.c:117
+#: gtk2_ardour/canvas-ruler.c:89
+#: gtk2_ardour/canvas-simpleline.c:121
+msgid "y1"
msgstr ""
-"Brazilian Portuguese:\n"
-"\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
-"\tChris Ross <chris@tebibyte.org>\n"
-#: gtk2_ardour/about.cc:165
-msgid ""
-"Spanish:\n"
-"\t Alex Krohn <alexkrohn@fastmail.fm>\n"
+#: gtk2_ardour/canvas-simplerect.c:118
+#: gtk2_ardour/canvas-imageframe.c:121
+#: gtk2_ardour/canvas-ruler.c:90
+#: gtk2_ardour/canvas-simpleline.c:122
+msgid "y coordinate of upper left corner of rect "
msgstr ""
-"Spanish:\n"
-"\t Alex Krohn <alexkrohn@fastmail.fm>\n"
-#: gtk2_ardour/about.cc:166
-msgid ""
-"Russian:\n"
-"\t Igor Blinov <pitstop@nm.ru>\n"
+#: gtk2_ardour/canvas-simplerect.c:128
+#: gtk2_ardour/canvas-ruler.c:100
+#: gtk2_ardour/canvas-simpleline.c:132
+msgid "x2"
msgstr ""
-"Russian:\n"
-"\t Igor Blinov <pitstop@nm.ru>\n"
-#: gtk2_ardour/about.cc:167
-msgid ""
-"Greek:\n"
-"\t Klearchos Gourgourinis <muadib@in.gr>\n"
+#: gtk2_ardour/canvas-simplerect.c:129
+#: gtk2_ardour/canvas-ruler.c:101
+#: gtk2_ardour/canvas-simpleline.c:133
+msgid "x coordinate of lower right corner of rect"
msgstr ""
-"Greek:\n"
-"\t Klearchos Gourgourinis <muadib@in.gr>\n"
-#: gtk2_ardour/about.cc:195
-msgid "Copyright (C) 1999-2007 Paul Davis\n"
-msgstr "Copyright (C) 1999-2007 Paul Davis\n"
-
-#: gtk2_ardour/about.cc:196
-msgid ""
-"Ardour comes with ABSOLUTELY NO WARRANTY\n"
-"This is free software, and you are welcome to redistribute it\n"
-"under certain conditions; see the file COPYING for details.\n"
+#: gtk2_ardour/canvas-simplerect.c:138
+#: gtk2_ardour/canvas-ruler.c:110
+#: gtk2_ardour/canvas-simpleline.c:142
+msgid "y2"
msgstr ""
-"Ardour wird Ihnen OHNE JEGLICHE GEWÄHRLEISTUNG zur Verfügung gestellt.\n"
-"Dies ist freie Software und Sie dürfen sie gerne weiterverbreiten,\n"
-"solange Sie sich an die Bedingungen, die in der Datei COPYING aufgeführt sind halten.\n"
-#: gtk2_ardour/about.cc:201
-msgid "visit http://www.ardour.org/"
-msgstr "besuchen Sie http://www.ardour.org"
-
-#: gtk2_ardour/about.cc:202
-msgid ""
-"%1\n"
-"(built from revision %2)"
+#: gtk2_ardour/canvas-simplerect.c:139
+#: gtk2_ardour/canvas-ruler.c:111
+#: gtk2_ardour/canvas-simpleline.c:143
+msgid "y coordinate of lower right corner of rect "
msgstr ""
-"%1\n"
-"(built from revision %2)"
-#: gtk2_ardour/actions.cc:78
-msgid "badly formatted UI definition file"
-msgstr "die UI Definitionsdatei ist falsch formatiert"
-
-#: gtk2_ardour/actions.cc:80
-msgid "Ardour menu definition file not found"
-msgstr "Konnte die ardour Menü-Definition nicht finden"
-
-#: gtk2_ardour/actions.cc:84
-msgid "ardour will not work without a valid ardour.menus file"
-msgstr "ardour benötigt eine gültige ardour.menus Datei"
-
-#: gtk2_ardour/actions.cc:265
-msgid "programmer error: %1 %2"
-msgstr "Programmierfehler: %1 %2"
-
-#: gtk2_ardour/actions.cc:284
-msgid "Unknown action name: %1"
-msgstr "Unbekannte Aktionsbezeichnung: %1"
-
-#: gtk2_ardour/add_route_dialog.cc:41
-#: gtk2_ardour/add_route_dialog.cc:219
-msgid "Mono"
-msgstr "Mono"
-
-#: gtk2_ardour/add_route_dialog.cc:42
-#: gtk2_ardour/add_route_dialog.cc:221
-msgid "Stereo"
-msgstr "Stereo"
-
-#: gtk2_ardour/add_route_dialog.cc:43
-msgid "3 Channels"
-msgstr "3 Kanäle"
-
-#: gtk2_ardour/add_route_dialog.cc:44
-msgid "4 Channels"
-msgstr "4 Kanäle"
-
-#: gtk2_ardour/add_route_dialog.cc:45
-msgid "6 Channels"
-msgstr "6 Kanäle"
-
-#: gtk2_ardour/add_route_dialog.cc:46
-msgid "8 Channels"
-msgstr "8 Kanäle"
-
-#: gtk2_ardour/add_route_dialog.cc:47
-msgid "Manual Setup"
-msgstr "Manuell"
-
-#: gtk2_ardour/add_route_dialog.cc:52
-#: gtk2_ardour/add_route_dialog.cc:200
-#: gtk2_ardour/time_axis_view.cc:592
-msgid "Normal"
-msgstr "Normal"
-
-#: gtk2_ardour/add_route_dialog.cc:53
-#: gtk2_ardour/add_route_dialog.cc:202
-msgid "Tape"
-msgstr "Tape"
-
-#: gtk2_ardour/add_route_dialog.cc:62
-msgid "ardour: add track/bus"
-msgstr "ardour: Füge Spur/Bus hinzu"
-
-#: gtk2_ardour/add_route_dialog.cc:63
-msgid "Tracks"
-msgstr "Audiospuren"
-
-#: gtk2_ardour/add_route_dialog.cc:64
-msgid "Busses"
-msgstr "Busse"
+#: gtk2_ardour/canvas-simplerect.c:149
+msgid "outline pixels"
+msgstr "Pixelbreite der Umrandung"
-#: gtk2_ardour/add_route_dialog.cc:113
-#: gtk2_ardour/plugin_ui.cc:220
-msgid "Add"
-msgstr "Hinzufügen"
+#: gtk2_ardour/canvas-simplerect.c:150
+msgid "width in pixels of outline"
+msgstr "Pixelbreite der Umrandung"
-#: gtk2_ardour/add_route_dialog.cc:131
-msgid "Name (template)"
-msgstr "Name für Mixer-Vorlage"
+#: gtk2_ardour/canvas-simplerect.c:160
+msgid "outline what"
+msgstr "abzugrenzende Ränder"
-#: gtk2_ardour/add_route_dialog.cc:137
-msgid "Channel Configuration"
-msgstr "Kanaleinstellungen"
+#: gtk2_ardour/canvas-simplerect.c:161
+msgid "which boundaries to outline (mask)"
+msgstr "abzugrenzende Ränder"
-#: gtk2_ardour/ardour_ui.cc:114
-msgid ""
-"pre\n"
-"roll"
-msgstr ""
-"pre\n"
-"roll"
+#: gtk2_ardour/canvas-simplerect.c:172
+msgid "fill"
+msgstr "füllen"
-#: gtk2_ardour/ardour_ui.cc:115
-msgid ""
-"post\n"
-"roll"
-msgstr ""
-"post\n"
-"roll"
+#: gtk2_ardour/canvas-simplerect.c:173
+msgid "fill rectangle"
+msgstr "Rechteck füllen"
-#: gtk2_ardour/ardour_ui.cc:141
-msgid "% "
-msgstr ""
+#: gtk2_ardour/canvas-simplerect.c:180
+msgid "draw"
+msgstr "zeichnen"
-#: gtk2_ardour/ardour_ui.cc:143
-#: gtk2_ardour/ardour_ui_ed.cc:306
-msgid "Punch In"
-msgstr "Punch In"
+#: gtk2_ardour/canvas-simplerect.c:181
+msgid "draw rectangle"
+msgstr "Rechteck zeichnen"
-#: gtk2_ardour/ardour_ui.cc:144
-#: gtk2_ardour/ardour_ui_ed.cc:309
-msgid "Punch Out"
-msgstr "Punch Out"
+#: gtk2_ardour/canvas-simplerect.c:189
+msgid "outline color rgba"
+msgstr "Rahmenfarbe RGBA"
-#: gtk2_ardour/ardour_ui.cc:145
-#: gtk2_ardour/ardour_ui_ed.cc:321
-msgid "Auto Return"
-msgstr "Auto Return"
+#: gtk2_ardour/canvas-simplerect.c:190
+msgid "color of outline"
+msgstr "Rahmenfarbe"
-#: gtk2_ardour/ardour_ui.cc:146
-#: gtk2_ardour/ardour_ui_ed.cc:318
-msgid "Auto Play"
-msgstr "Auto Play"
+#: gtk2_ardour/canvas-simplerect.c:200
+msgid "fill color rgba"
+msgstr "Füllfarbe RGBA"
-#: gtk2_ardour/ardour_ui.cc:147
-#: gtk2_ardour/ardour_ui_ed.cc:315
-msgid "Auto Input"
-msgstr "Auto Input"
+#: gtk2_ardour/canvas-simplerect.c:201
+#: gtk2_ardour/canvas-ruler.c:133
+msgid "color of fill"
+msgstr "Füllfarbe"
-#: gtk2_ardour/ardour_ui.cc:148
-#: gtk2_ardour/ardour_ui_ed.cc:312
-#: gtk2_ardour/option_editor.cc:147
-msgid "Click"
-msgstr "Click"
+#: gtk2_ardour/canvas-imageframe.c:104
+msgid "pixbuf"
+msgstr "Pixbuffer"
-#: gtk2_ardour/ardour_ui.cc:149
-msgid ""
-"time\n"
-"master"
-msgstr ""
-"Time\n"
-"Master"
+#: gtk2_ardour/canvas-imageframe.c:105
+msgid "the pixbuf"
+msgstr "Pixbuffer"
-#: gtk2_ardour/ardour_ui.cc:151
-msgid "AUDITION"
-msgstr "VORHÖREN"
+#: gtk2_ardour/canvas-imageframe.c:110
+msgid "x"
+msgstr "x"
-#: gtk2_ardour/ardour_ui.cc:152
-msgid "SOLO"
-msgstr "SOLO"
+#: gtk2_ardour/canvas-imageframe.c:120
+msgid "y"
+msgstr "y"
-#: gtk2_ardour/ardour_ui.cc:154
-msgid "Errors"
-msgstr "Fehlermeldungen"
+#: gtk2_ardour/canvas-imageframe.c:129
+msgid "width"
+msgstr "Breite"
-#: gtk2_ardour/ardour_ui.cc:237
-msgid "could not initialize Ardour."
-msgstr "Konnte ardour nicht initialisieren."
+#: gtk2_ardour/canvas-imageframe.c:130
+msgid "the width"
+msgstr "Breite"
-#: gtk2_ardour/ardour_ui.cc:548
-msgid "Ardour could not start JACK"
-msgstr "Ardour konnte JACK nicht starten"
+#: gtk2_ardour/canvas-imageframe.c:139
+msgid "drawwidth"
+msgstr "gezeichnete Breite"
-#: gtk2_ardour/ardour_ui.cc:550
-msgid "Ardour could not connect to JACK."
-msgstr "ardour konnte nicht zu JACK verbinden."
+#: gtk2_ardour/canvas-imageframe.c:140
+msgid "drawn width"
+msgstr "gezeichnete Breite"
-#: gtk2_ardour/ardour_ui.cc:559
-msgid ""
-"There are several possible reasons:\n"
-"\n"
-"1) You requested audio parameters that are not supported..\n"
-"2) JACK is running as another user.\n"
-"\n"
-"Please consider the possibilities, and perhaps try different parameters."
-msgstr ""
-"Dafür kann es verschiedene Gründe geben:\n"
-"\n"
-"1) Sie haben nicht unterstützte Audioeinstellungen gewählt.\n"
-"2) JACK wurde unter einem anderen Benutzer gestartet.\n"
-"\n"
-"Betrachten Sie bitte diese Möglichkeiten und verwenden sie ggf. andere Einstellungen."
+#: gtk2_ardour/canvas-imageframe.c:148
+msgid "height"
+msgstr "Höhe"
-#: gtk2_ardour/ardour_ui.cc:566
-msgid ""
-"There are several possible reasons:\n"
-"\n"
-"1) JACK is not running.\n"
-"2) JACK is running as another user, perhaps root.\n"
-"3) There is already another client called \"ardour\".\n"
-"\n"
-"Please consider the possibilities, and perhaps (re)start JACK."
-msgstr ""
-"Dafür kann es verschiedene Gründe geben:\n"
-"\n"
-"1) JACK läuft nicht.\n"
-"2) JACK wurde unter einem anderen Benutzer gestartet, möglicherweise als root.\n"
-"3) Es gibt bereits einen anderen Client mit der Bezeichnung \"ardour\".\n"
-"\n"
-"Betrachten Sie bitte diese Möglichkeiten und starten Sie JACK neu, wenn dies notwendig sein sollte."
+#: gtk2_ardour/canvas-imageframe.c:149
+msgid "the height"
+msgstr "Höhe"
-#: gtk2_ardour/ardour_ui.cc:615
-msgid "Could not find command line session \"%1\""
-msgstr "Konnte das per Kommandozeile übergebene Projekt nicht laden: \"%1\""
+#: gtk2_ardour/canvas-imageframe.c:157
+msgid "anchor"
+msgstr "Anker"
-#: gtk2_ardour/ardour_ui.cc:633
-msgid ""
-"\n"
-"\n"
-"No session named \"%1\" exists.\n"
-"To create it from the command line, start ardour as:\n"
-" ardour --new %1"
-msgstr ""
-"\n"
-"\n"
-"Es existiert kein Projekt mit dem Namen \"%1\".\n"
-"Um es von der Kommandozeile aus zu erstellen, starten Sie ardour mit:\n"
-" ardour --new %1"
+#: gtk2_ardour/canvas-imageframe.c:158
+msgid "the anchor"
+msgstr "Anker"
-#: gtk2_ardour/ardour_ui.cc:702
-msgid ""
-"WARNING: Your system has a limit for maximum amount of locked memory. This might cause Ardour to run out of memory before your system runs out of memory. \n"
-"\n"
-"You can view the memory limit with 'ulimit -l', and it is normally controlled by /etc/security/limits.conf"
+#: gtk2_ardour/canvas-ruler.c:121
+msgid "frames_per_unit"
msgstr ""
-"WARNUNG: Ihr System hat eine Begrenzung für die Reservierung von Arbeitsspeicher eingestellt. Dies könnte dazu führen, dass Ardour zu schnell der Speicher ausgeht.\n"
-"\n"
-"Sie können die Speicherbegrenzung mit 'ulimit -l' einsehen und normalerweise in /etc/security/limits.conf verändern."
-#: gtk2_ardour/ardour_ui.cc:710
-msgid "Do not show this window again"
-msgstr "Diese Meldung nicht wieder anzeigen"
+#: gtk2_ardour/canvas-ruler.c:122
+#, fuzzy
+msgid "frames_per_unit of ruler"
+msgstr "Obere Grenze für das Lineal"
-#: gtk2_ardour/ardour_ui.cc:730
-msgid "quit"
-msgstr "Beenden"
+#: gtk2_ardour/canvas-ruler.c:132
+msgid "fill color"
+msgstr "Füllfarbe"
-#: gtk2_ardour/ardour_ui.cc:739
-msgid ""
-"Ardour was unable to save your session.\n"
-"\n"
-"If you still wish to quit, please use the\n"
-"\n"
-"\"Just quit\" option."
-msgstr ""
-"ardour konnte das Projekt nicht speichern.\n"
-"\n"
-"Wenn Sie trotzdem beenden wollen, wählen Sie bitte\n"
-"\n"
-"\"Trotzdem beenden\"."
+#: gtk2_ardour/canvas-ruler.c:143
+msgid "tick color"
+msgstr "Häkchenfarbe"
-#: gtk2_ardour/ardour_ui.cc:763
-msgid "ardour: save session?"
-msgstr "ardour: Projekt speichern?"
+#: gtk2_ardour/canvas-ruler.c:144
+msgid "color of tick"
+msgstr "Häkchenfarbe"
-#: gtk2_ardour/ardour_ui.cc:770
-msgid "Don't %1"
-msgstr "Abbrechen"
+#: gtk2_ardour/canvas-simpleline.c:151
+msgid "color rgba"
+msgstr "RGBA-Farbe"
-#: gtk2_ardour/ardour_ui.cc:772
-msgid "Just %1"
-msgstr "%1"
+#: gtk2_ardour/canvas-simpleline.c:152
+msgid "color of line"
+msgstr "Linienfarbe"
-#: gtk2_ardour/ardour_ui.cc:774
-msgid "Save and %1"
-msgstr "Speichern und %1"
+#: gtk2_ardour/gtk-custom-ruler.c:126
+msgid "Lower"
+msgstr "Untergrenze"
-#: gtk2_ardour/ardour_ui.cc:786
-msgid "session"
-msgstr "Das Projekt"
+#: gtk2_ardour/gtk-custom-ruler.c:127
+msgid "Lower limit of ruler"
+msgstr "Untere Grenze des Lineals"
-#: gtk2_ardour/ardour_ui.cc:788
-msgid "snapshot"
-msgstr "Der Schnappschuss"
+#: gtk2_ardour/gtk-custom-ruler.c:136
+msgid "Upper"
+msgstr "Obergrenze"
-#: gtk2_ardour/ardour_ui.cc:790
-msgid ""
-"The %1\"%2\"\n"
-"has not been saved.\n"
-"\n"
-"Any changes made this time\n"
-"will be lost unless you save it.\n"
-"\n"
-"What do you want to do?"
-msgstr ""
-"%1 \"%2\" wurde nicht gespeichert.\n"
-"\n"
-"Alle Änderungen werden verloren gehen wenn Sie nicht speichern.\n"
-"\n"
-"Wie wollen Sie vorgehen?"
+#: gtk2_ardour/gtk-custom-ruler.c:137
+msgid "Upper limit of ruler"
+msgstr "Obere Grenze für das Lineal"
-#: gtk2_ardour/ardour_ui.cc:804
-msgid "Prompter"
-msgstr "Frage"
+#: gtk2_ardour/gtk-custom-ruler.c:146
+msgid "Position"
+msgstr "Position"
-#: gtk2_ardour/ardour_ui.cc:866
-#, c-format
-msgid "disconnected"
-msgstr "getrennt"
+#: gtk2_ardour/gtk-custom-ruler.c:147
+msgid "Position of mark on the ruler"
+msgstr "Position der Markierung auf dem Lineal"
-#: gtk2_ardour/ardour_ui.cc:873
-#, c-format
-msgid "%.1f kHz / %4.1f ms"
-msgstr "%.1f kHz / %4.1f ms"
+#: gtk2_ardour/gtk-custom-ruler.c:156
+msgid "Max Size"
+msgstr "Maximale Größe"
-#: gtk2_ardour/ardour_ui.cc:877
-#, c-format
-msgid "%u kHz / %4.1f ms"
-msgstr "%u kHz / %4.1f ms"
+#: gtk2_ardour/gtk-custom-ruler.c:157
+msgid "Maximum size of the ruler"
+msgstr "Minimal Größe des Lineals"
-#: gtk2_ardour/ardour_ui.cc:890
-#, c-format
-msgid "DSP: %5.1f%%"
-msgstr "DSP: %5.1f%%"
+#: gtk2_ardour/gtk-custom-ruler.c:166
+msgid "Show Position"
+msgstr "Zeige Position"
-#: gtk2_ardour/ardour_ui.cc:900
-#, c-format
-msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
-msgstr "Buffer p:%<PRIu32>%% c:%<PRIu32>%%"
+#: gtk2_ardour/gtk-custom-ruler.c:167
+msgid "Draw current ruler position"
+msgstr "Zeige aktuelle Position des Lineals"
-#: gtk2_ardour/ardour_ui.cc:928
-msgid "Disk: 24hrs+"
-msgstr "HD: >24 Std."
+#: gtk2_ardour/export_range_markers_dialog.cc:41
+msgid "ardour: export ranges"
+msgstr "ardour: Bereiche Exportieren"
-#: gtk2_ardour/ardour_ui.cc:948
-#, c-format
-msgid "Disk: %02dh:%02dm:%02ds"
-msgstr "HD: %02dh:%02dm:%02ds"
+#: gtk2_ardour/export_range_markers_dialog.cc:42
+msgid "Export to Directory"
+msgstr "In Verzeichnis exportieren"
-#: gtk2_ardour/ardour_ui.cc:1061
-#: gtk2_ardour/new_session_dialog.cc:365
-msgid "Recent Sessions"
-msgstr "Zuletzt verwendete Projekte"
+#: gtk2_ardour/export_range_markers_dialog.cc:143
+msgid "Please enter a valid target directory."
+msgstr "Bitte geben Sie ein gültiges Zielverzeichis an."
-#: gtk2_ardour/ardour_ui.cc:1150
-msgid ""
-"Ardour is not connected to JACK\n"
-"You cannot open or close sessions in this condition"
+#: gtk2_ardour/export_range_markers_dialog.cc:151
+msgid "Please select an existing target directory. Files are not allowed!"
msgstr ""
-"Ardour ist derzeit nicht mit JACK verbunden.\n"
-"Es ist nicht möglich, neue Projekte zu erstellen."
-
-#: gtk2_ardour/ardour_ui.cc:1174
-msgid "open session"
-msgstr "Projekt öffnen"
-
-#: gtk2_ardour/ardour_ui.cc:1181
-msgid "Ardour sessions"
-msgstr "ardour-Projekte"
-
-#: gtk2_ardour/ardour_ui.cc:1214
-msgid "Patience is a virtue.\n"
-msgstr "Geduld ist eine Tugend.\n"
-
-#: gtk2_ardour/ardour_ui.cc:1224
-msgid "You cannot add a track or bus without a session already loaded."
-msgstr "Sie können erst Spuren oder Busse hinzufügen, wenn ein Projekt geladen wurde."
-
-#: gtk2_ardour/ardour_ui.cc:1234
-#: gtk2_ardour/ardour_ui.cc:1247
-msgid "could not create a new audio track"
-msgstr "Konnte neue Spur nicht erstellen."
-
-#: gtk2_ardour/ardour_ui.cc:1236
-msgid "could only create %1 of %2 new audio %3"
-msgstr "Konnte nur %1 von %2 neuen %3 erstellen"
-
-#: gtk2_ardour/ardour_ui.cc:1237
-msgid "tracks"
-msgstr "Spuren"
+"Bitte wählen Sie ein vorhandenes Zielverzeichnis aus.\n"
+"Dateien sind nicht möglich."
-#: gtk2_ardour/ardour_ui.cc:1237
-msgid "busses"
-msgstr "Audio-Bussen"
+#: gtk2_ardour/export_range_markers_dialog.cc:160
+msgid "Cannot write file in: "
+msgstr "Konnte Datei nicht in Verzeichnis schreiben:"
-#: gtk2_ardour/ardour_ui.cc:1249
-msgid "could not create %1 new audio tracks"
-msgstr "Konnte %1 neue Spuren nicht erstellen."
+#: gtk2_ardour/audio_region_editor.cc:48
+msgid "NAME:"
+msgstr "Name:"
-#: gtk2_ardour/ardour_ui.cc:1270
-msgid ""
-"There are insufficient JACK ports available\n"
-"to create a new track or bus.\n"
-"You should save Ardour, exit and\n"
-"restart JACK with more ports."
-msgstr ""
-"Es sind nicht genügend JACK Ports verfügbar\n"
-"um neue Spuren oder Busse zu erstellen.\n"
-"Speichern Sie Ihr Projekt und starten Sie\n"
-"ardour sowie JACK mit einer größeren\n"
-"Anzahl Ports erneut."
+#: gtk2_ardour/audio_region_editor.cc:49
+msgid "play"
+msgstr "Play"
-#: gtk2_ardour/ardour_ui.cc:1390
-msgid ""
-"Please create 1 or more track\n"
-"before trying to record.\n"
-"Check the Session menu."
-msgstr ""
-"Bitte fügen Sie mindestens eine weitere Spur hinzu,\n"
-"bevor Sie aufnehmen.\n"
-"Weitere Einstellungen finden Sie im Projektmenü."
+#: gtk2_ardour/audio_region_editor.cc:68
+msgid "audition this region"
+msgstr "Diese Region Vorhören"
-#: gtk2_ardour/ardour_ui.cc:1645
-msgid ""
-"JACK has either been shutdown or it\n"
-"disconnected Ardour because Ardour\n"
-"was not fast enough. You can save the\n"
-"session and/or try to reconnect to JACK ."
-msgstr ""
-"JACK wurde entweder beendet oder\n"
-"hat ardour getrennt weil Ardour nicht\n"
-"schnell genug war. Sie sollten versuchen,\n"
-"das Projekt zu speichern und erneut mit JACK zu verbinden."
+#: gtk2_ardour/audio_region_editor.cc:83
+msgid "START:"
+msgstr "Beginn:"
-#: gtk2_ardour/ardour_ui.cc:1662
-msgid "Unable to start the session running"
-msgstr "Konnte das aktuelle Projekt nicht starten"
+#: gtk2_ardour/audio_region_editor.cc:85
+msgid "END:"
+msgstr "Ende:"
-#: gtk2_ardour/ardour_ui.cc:1753
-#: gtk2_ardour/ardour_ui.cc:1772
-#: gtk2_ardour/audio_clock.cc:508
-msgid "none"
-msgstr "keine"
+#: gtk2_ardour/audio_region_editor.cc:87
+msgid "LENGTH:"
+msgstr "Länge:"
-#: gtk2_ardour/ardour_ui.cc:1762
-#: gtk2_ardour/ardour_ui.cc:1781
-msgid "off"
-msgstr "aus"
+#: gtk2_ardour/audio_region_editor.cc:123
+msgid "Region %1"
+msgstr "Region %1"
-#: gtk2_ardour/ardour_ui.cc:1807
-msgid "Name of New Snapshot"
-msgstr "Name für neuen Schnappschuss"
+#: gtk2_ardour/audio_region_editor.cc:204
+msgid "change region start position"
+msgstr "Startposition der Region ändern"
-#: gtk2_ardour/ardour_ui.cc:1959
-msgid "Name for mix template:"
-msgstr "Name für Mixer-Vorlage"
+#: gtk2_ardour/audio_region_editor.cc:221
+msgid "change region end position"
+msgstr "Endposition der Region ändern"
-#: gtk2_ardour/ardour_ui.cc:1960
-msgid "-template"
-msgstr "Vorlage"
+#: gtk2_ardour/audio_region_editor.cc:242
+msgid "change region length"
+msgstr "Länge der Region verändern"
-#: gtk2_ardour/ardour_ui.cc:1989
-msgid ""
-"Welcome to Ardour.\n"
-"\n"
-"The program will take a bit longer to start up\n"
-"while the system fonts are checked.\n"
-"\n"
-"This will only be done once, and you will\n"
-"not see this message again\n"
-msgstr ""
-"Willkommen bei Ardour.\n"
-"\n"
-"Der Programmstart wird etwas länger dauern,\n"
-"da die Systemschriften geprüft werden.\n"
-"\n"
-"Diese Meldung wird nur dieses eine Mal\n"
-"auftauchen.\n"
+#: gtk2_ardour/theme_manager.cc:52
+msgid "Object"
+msgstr "Element"
-#: gtk2_ardour/ardour_ui.cc:2039
-msgid "Ardour cannot understand \"%1\" as a session name"
-msgstr "Ardour kann \"%1\" nicht als Projektnamen benutzen"
+#: gtk2_ardour/theme_manager.cc:53
+msgid "Color"
+msgstr "Farbe"
-#: gtk2_ardour/ardour_ui.cc:2074
-#: gtk2_ardour/ardour_ui.cc:2131
-msgid "Starting audio engine"
-msgstr "Starte Audio Engine"
+#: gtk2_ardour/theme_manager.cc:185
+msgid "Unable to find UI style file %1. Ardour will look strange"
+msgstr "Kann die UI-Style Datei %1 nicht finden. Ardour wird merkwürdig aussehen."
-#: gtk2_ardour/ardour_ui.cc:2249
-msgid ""
-"This session\n"
-"%1\n"
-"already exists. Do you want to open it?"
-msgstr ""
-"Das Projekt\n"
-"%1\n"
-"existiert bereits. Wollen Sie sie öffnen?"
+#: gtk2_ardour/generic_pluginui.cc:80
+msgid "<span size=\"large\">Presets</span>"
+msgstr "<span size=\"large\">Voreinstellungen</span>"
-#: gtk2_ardour/ardour_ui.cc:2430
-msgid ""
-"You do not have write access to this session.\n"
-"This prevents the session from being loaded."
-msgstr ""
-"Sie haben keinen Schreibzugriff auf dieses Projekt.\n"
-"Dadurch kann das Projekt nicht geladen werden."
+#: gtk2_ardour/generic_pluginui.cc:171
+#: gtk2_ardour/ardour_ui_ed.cc:743
+msgid "Controls"
+msgstr "Steuerelemente"
-#: gtk2_ardour/ardour_ui.cc:2437
-msgid "Please wait while Ardour loads your session"
-msgstr "Bitte warten Sie, während Ardour das Projekt lädt"
+#: gtk2_ardour/generic_pluginui.cc:208
+msgid "Plugin Editor: could not build control element for port %1"
+msgstr "Plugin Editor: konnte kein Steuerelement für Port %1 erzeugen"
-#: gtk2_ardour/ardour_ui.cc:2448
-msgid "Session \"%1 (snapshot %2)\" did not load successfully"
-msgstr "Projekt \"%1 (Schnappschuss %2)\" konnte nicht geladen werden."
+#: gtk2_ardour/generic_pluginui.cc:298
+msgid "Automation control"
+msgstr "Automation"
-#: gtk2_ardour/ardour_ui.cc:2453
+#: gtk2_ardour/generic_pluginui.cc:305
#, fuzzy
-msgid "Loading Error"
-msgstr "Programmierfehler:"
-
-#: gtk2_ardour/ardour_ui.cc:2454
-msgid "Click the OK button to try again."
-msgstr "Klicken Sie auf OK, um es erneut zu versuchen."
-
-#: gtk2_ardour/ardour_ui.cc:2527
-msgid "Could not create session in \"%1\""
-msgstr "Konnte kein Projekt in \"%1\" anlegen"
-
-#: gtk2_ardour/ardour_ui.cc:2587
-msgid "No audio files were ready for cleanup"
-msgstr "Keine Audiodateien zum Aufräumen vorhanden"
-
-#: gtk2_ardour/ardour_ui.cc:2591
-msgid ""
-"If this seems suprising, \n"
-"check for any existing snapshots.\n"
-"These may still include regions that\n"
-"require some unused files to continue to exist."
-msgstr ""
-"Falls trotzdem nicht benötigte Dateien\n"
-"existieren, welche hier nicht erkannt werden,\n"
-"sind sie wahrscheinlich noch in einem\n"
-"älteren Schnappschuss als Region eingebunden."
-
-#: gtk2_ardour/ardour_ui.cc:2600
-msgid "ardour: cleanup"
-msgstr "ardour: Aufräumen"
-
-#: gtk2_ardour/ardour_ui.cc:2636
-#: gtk2_ardour/ardour_ui.cc:2642
-msgid "files were"
-msgstr "folgenden Dateien wurden"
-
-#: gtk2_ardour/ardour_ui.cc:2638
-#: gtk2_ardour/ardour_ui.cc:2644
-msgid "file was"
-msgstr "folgende Datei wurde"
+msgid "Mgnual"
+msgstr "Manuell"
-#: gtk2_ardour/ardour_ui.cc:2685
-msgid "Are you sure you want to cleanup?"
-msgstr "Sind Sie sicher, dass Sie aufräumen wollen?"
+#: gtk2_ardour/generic_pluginui.cc:335
+#: gtk2_ardour/generic_pluginui.cc:606
+#: gtk2_ardour/gain_meter.cc:182
+msgid "Manual"
+msgstr "Manuell"
-#: gtk2_ardour/ardour_ui.cc:2690
-msgid ""
-"Cleanup is a destructive operation.\n"
-"ALL undo/redo information will be lost if you cleanup.\n"
-"After cleanup, unused audio files will be moved to a \"dead sounds\" location."
-msgstr ""
-"Das Aufräumen ist eine destruktive Operation.\n"
-"Sämtliche Wiederherstellungsinformationen gehen verloren, wenn Sie aufräumen.\n"
-"Nach dem Aufräumen werden alle nicht benötigten Audiodateien in einen \"dead sounds\" Ordner verschoben."
+#: gtk2_ardour/generic_pluginui.cc:338
+#: gtk2_ardour/generic_pluginui.cc:608
+#: gtk2_ardour/gain_meter.cc:184
+msgid "Play"
+msgstr "Wiedergabe"
-#: gtk2_ardour/ardour_ui.cc:2696
-msgid "Clean Up"
-msgstr "Aufräumen"
+#: gtk2_ardour/generic_pluginui.cc:341
+#: gtk2_ardour/generic_pluginui.cc:610
+#: gtk2_ardour/gain_meter.cc:186
+msgid "Write"
+msgstr "Schreiben"
-#: gtk2_ardour/ardour_ui.cc:2699
-msgid "CleanupDialog"
-msgstr ""
+#: gtk2_ardour/generic_pluginui.cc:344
+#: gtk2_ardour/generic_pluginui.cc:612
+#: gtk2_ardour/gain_meter.cc:188
+msgid "Touch"
+msgstr "Ändern"
-#: gtk2_ardour/ardour_ui.cc:2727
-msgid "cleaned files"
-msgstr "aufgeräumte Dateien"
+#: gtk2_ardour/generic_pluginui.cc:347
+msgid "???"
+msgstr "???"
-#: gtk2_ardour/ardour_ui.cc:2728
-msgid ""
-"The following %1 %2 not in use and \n"
-"have been moved to:\n"
-"%3. \n"
-"\n"
-"Flushing the wastebasket will \n"
-"release an additional\n"
-"%4 %5bytes of disk space.\n"
-msgstr ""
-"Die %1 %2 nicht benötigt und\n"
-"verschoben nach:\n"
-"%3. \n"
-"\n"
-"Wenn Sie den Müll leeren werden weitere\n"
-"%4 %5byte Speicherplatz frei.\n"
+#: gtk2_ardour/gain_meter.cc:117
+#: gtk2_ardour/gain_meter.cc:362
+#: gtk2_ardour/gain_meter.cc:723
+msgid "-inf"
+msgstr "-inf"
-#: gtk2_ardour/ardour_ui.cc:2756
-msgid "deleted file"
-msgstr "gelöschte Datei"
+#: gtk2_ardour/gain_meter.cc:123
+#: gtk2_ardour/gain_meter.cc:769
+msgid "Fader automation mode"
+msgstr "Fader Automationsmodus"
-#: gtk2_ardour/ardour_ui.cc:2757
-msgid ""
-"The following %1 %2 deleted from\n"
-"%3,\n"
-"releasing %4 %5bytes of disk space"
-msgstr ""
-"Die %1 %2 gelöscht aus\n"
-"%3,\n"
-"und machten %4 %5byte Speicherplatz frei"
+#: gtk2_ardour/gain_meter.cc:124
+#: gtk2_ardour/gain_meter.cc:770
+msgid "Fader automation type"
+msgstr "Fader-Automationstyp"
-#: gtk2_ardour/ardour_ui.cc:2875
-msgid "Recording was stopped because your system could not keep up."
-msgstr "Die Aufnahme wurde gestoppt, da Ihr System nicht schnell genug folgen konnte."
+#: gtk2_ardour/gain_meter.cc:132
+#: gtk2_ardour/gain_meter.cc:658
+msgid "Trim"
+msgstr "Abschneiden"
-#: gtk2_ardour/ardour_ui.cc:2886
-msgid ""
-"The disk system on your computer\n"
-"was not able to keep up with Ardour.\n"
-"\n"
-"Specifically, it failed to write data to disk\n"
-"quickly enough to keep up with recording.\n"
-msgstr ""
-"Ihre Festplatte war nicht schnell genug,\n"
-"um ardour zu folgen.\n"
-"\n"
-"Die Daten konnten nicht schnell genug geschrieben\n"
-"werden, um die Aufnahme fortzuführen.\n"
+#: gtk2_ardour/gain_meter.cc:133
+#: gtk2_ardour/gain_meter.cc:662
+msgid "Abs"
+msgstr "Abs"
-#: gtk2_ardour/ardour_ui.cc:2905
-msgid ""
-"The disk system on your computer\n"
-"was not able to keep up with Ardour.\n"
-"\n"
-"Specifically, it failed to read data from disk\n"
-"quickly enough to keep up with playback.\n"
-msgstr ""
-"Ihre Festplatte war nicht schnell genug,\n"
-"um ardour zu folgen.\n"
-"\n"
-"Die Daten konnten nicht schnell genug gelesen\n"
-"werden, um die Wiedergabe aufrechtzuerhalten.\n"
+#: gtk2_ardour/gain_meter.cc:287
+msgid "-Inf"
+msgstr "-Inf"
-#: gtk2_ardour/ardour_ui.cc:2926
-msgid ""
-"This session appears to have been in\n"
-"middle of recording when ardour or\n"
-"the computer was shutdown.\n"
-"\n"
-"Ardour can recover any captured audio for\n"
-"you, or it can ignore it. Please decide\n"
-"what you would like to do.\n"
-msgstr ""
-"Es scheint, dass dieses Projekt während\n"
-"einer Aufnahme abgebrochen oder\n"
-"geschlossen wurde.\n"
-"\n"
-"Ardour kann die Aufgenommenen Audiodaten\n"
-"für Sie wiederherstellen oder sie verwerfen.\n"
-"Bitte entscheiden Sie, wie Sie vorgehen möchten.\n"
+#: gtk2_ardour/gain_meter.cc:473
+#: gtk2_ardour/gain_meter.cc:488
+msgid "meter point change"
+msgstr "Taktwechsel ändern"
-#: gtk2_ardour/ardour_ui.cc:2936
-msgid "Recover from crash"
-msgstr "Daten wiederherstellen"
+#: gtk2_ardour/gain_meter.cc:626
+msgid "M"
+msgstr "M"
-#: gtk2_ardour/ardour_ui.cc:2937
-msgid "Ignore crash data"
-msgstr "Daten verwerfen"
+#: gtk2_ardour/gain_meter.cc:629
+msgid "P"
+msgstr "P"
-#: gtk2_ardour/ardour_ui.cc:2955
-msgid "Could not disconnect from JACK"
-msgstr "Konnte Verbindung mit JACK nicht trennen"
+#: gtk2_ardour/gain_meter.cc:632
+msgid "T"
+msgstr "T"
-#: gtk2_ardour/ardour_ui.cc:2968
-msgid "Could not reconnect to JACK"
-msgstr "Konnte nicht erneut zu JACK verbinden"
+#: gtk2_ardour/gain_meter.cc:635
+msgid "W"
+msgstr "W"
#: gtk2_ardour/ardour_ui2.cc:62
msgid "UI: cannot setup editor"
@@ -975,11 +470,11 @@ msgstr "Automatisches Input Monitoring aktivieren"
#: gtk2_ardour/ardour_ui2.cc:292
msgid "Start recording at auto-punch start"
-msgstr "Beginnt die Aufnahme bei Auto-Punch Start"
+msgstr "Aufnahme am Anfang des Punch-Bereichs beginnen"
#: gtk2_ardour/ardour_ui2.cc:293
msgid "Stop recording at auto-punch end"
-msgstr "Beginnt die Aufnahme bei Auto-Punch Ende"
+msgstr "Aufnahme am Ende des Punch-Bereichs beenden"
#: gtk2_ardour/ardour_ui2.cc:294
msgid "Enable/Disable audio click"
@@ -991,7 +486,7 @@ msgstr "Positionsbezogene Sync-quelle"
#: gtk2_ardour/ardour_ui2.cc:296
msgid "Does Ardour control the time?"
-msgstr "Bestimmt ardour die Time?"
+msgstr "Bestimmt Ardour die Time?"
#: gtk2_ardour/ardour_ui2.cc:297
msgid "Shuttle speed control"
@@ -1031,15 +526,13 @@ msgstr ""
"Klicken stoppt das Vorhören."
#: gtk2_ardour/ardour_ui2.cc:376
-#: gtk2_ardour/ardour_ui2.cc:826
-#: gtk2_ardour/ardour_ui2.cc:882
-#: gtk2_ardour/ardour_ui_options.cc:1064
+#: gtk2_ardour/ardour_ui2.cc:822
+#: gtk2_ardour/ardour_ui2.cc:878
msgid "sprung"
msgstr "Feder"
#: gtk2_ardour/ardour_ui2.cc:377
-#: gtk2_ardour/ardour_ui2.cc:828
-#: gtk2_ardour/ardour_ui_options.cc:1075
+#: gtk2_ardour/ardour_ui2.cc:824
msgid "wheel"
msgstr "Drehrad"
@@ -1047,1300 +540,2057 @@ msgstr "Drehrad"
msgid "Maximum speed"
msgstr "Max. Geschwindigkeit"
-#: gtk2_ardour/ardour_ui2.cc:838
-#: gtk2_ardour/ardour_ui2.cc:861
+#: gtk2_ardour/ardour_ui2.cc:834
+#: gtk2_ardour/ardour_ui2.cc:857
msgid "stop"
msgstr "Stop"
-#: gtk2_ardour/ardour_ui2.cc:880
+#: gtk2_ardour/ardour_ui2.cc:876
msgid "-0.55"
msgstr "-0.55"
-#: gtk2_ardour/ardour_ui_dependents.cc:85
-msgid "Ardour key bindings file not found at \"%1\" or contains errors."
-msgstr "Konnte die Datei mit den Tastaturzuweisungen nicht an der Stelle \"%1\" finden, oder sie ist fehlerhaft."
+#: gtk2_ardour/editor_mouse.cc:147
+msgid "Editor::event_frame() used on unhandled event type %1"
+msgstr "Editor::event_frame() auf unbekannten Eventtyp %1 angewandt"
-#: gtk2_ardour/ardour_ui_dialogs.cc:170
-#: gtk2_ardour/playlist_selector.cc:73
-msgid "close"
-msgstr "Schließen"
+#: gtk2_ardour/editor_mouse.cc:1842
+msgid "programming error: start_grab called without drag item"
+msgstr "Programmierfehler: start_grab called without drag item"
+
+#: gtk2_ardour/editor_mouse.cc:1967
+msgid "programming error: fade in canvas item has no regionview data pointer!"
+msgstr "Programmierfehler: fade in canvas item has no regionview data pointer!"
+
+#: gtk2_ardour/editor_mouse.cc:2042
+msgid "change fade in length"
+msgstr "Ändere Fade-In Länge"
+
+#: gtk2_ardour/editor_mouse.cc:2075
+msgid "programming error: fade out canvas item has no regionview data pointer!"
+msgstr "Programmierfehler: fade out canvas item has no regionview data pointer!"
+
+#: gtk2_ardour/editor_mouse.cc:2159
+msgid "change fade out length"
+msgstr "Fade-Out verändern"
+
+#: gtk2_ardour/editor_mouse.cc:2192
+msgid "programming error: cursor canvas item has no cursor data pointer!"
+msgstr "Programmierfehler: cursor canvas item has no cursor data pointer!"
+
+#: gtk2_ardour/editor_mouse.cc:2287
+#: gtk2_ardour/editor_mouse.cc:5005
+msgid "programming error: marker canvas item has no marker object pointer!"
+msgstr "Programmierfehler: marker canvas item has no marker object pointer!"
+
+#: gtk2_ardour/editor_mouse.cc:2572
+msgid "move marker"
+msgstr "Marker bewegen"
+
+#: gtk2_ardour/editor_mouse.cc:2614
+#: gtk2_ardour/editor_mouse.cc:2646
+msgid "programming error: meter marker canvas item has no marker object pointer!"
+msgstr "pProgrammierfehler: meter marker canvas item has no marker object pointer!"
+
+#: gtk2_ardour/editor_mouse.cc:2714
+msgid "copy meter mark"
+msgstr "Taktmarker kopieren"
+
+#: gtk2_ardour/editor_mouse.cc:2725
+msgid "move meter mark"
+msgstr "Taktwechsel bewegen"
+
+#: gtk2_ardour/editor_mouse.cc:2741
+#: gtk2_ardour/editor_mouse.cc:2775
+msgid "programming error: tempo marker canvas item has no marker object pointer!"
+msgstr "Programmierfehler: tempo marker canvas item has no marker object pointer!"
+
+#: gtk2_ardour/editor_mouse.cc:2746
+#: gtk2_ardour/editor_mouse.cc:2780
+msgid "programming error: marker for tempo is not a tempo marker!"
+msgstr "Programmierfehler: marker for tempo is not a tempo marker!"
+
+#: gtk2_ardour/editor_mouse.cc:2847
+msgid "copy tempo mark"
+msgstr "Tempomarker kopieren"
+
+#: gtk2_ardour/editor_mouse.cc:2858
+msgid "move tempo mark"
+msgstr "Tempowechsel bewegen"
+
+#: gtk2_ardour/editor_mouse.cc:2873
+#: gtk2_ardour/editor_mouse.cc:2892
+#: gtk2_ardour/editor_mouse.cc:2905
+msgid "programming error: control point canvas item has no control point object pointer!"
+msgstr "Programmierfehler: control point canvas item has no control point object pointer!"
+
+#: gtk2_ardour/editor_mouse.cc:3040
+msgid "programming error: line canvas item has no line pointer!"
+msgstr "Programmierfehler: line canvas item has no line pointer!"
+
+#: gtk2_ardour/editor_mouse.cc:3184
+msgid "move region(s)"
+msgstr "Region(en) bewegen"
+
+#: gtk2_ardour/editor_mouse.cc:3256
+msgid "Drag region brush"
+msgstr "Region Brush ziehen"
+
+#: gtk2_ardour/editor_mouse.cc:3904
+msgid "fixed time region copy"
+msgstr "Region zeitgleich kopieren"
+
+#: gtk2_ardour/editor_mouse.cc:3906
+msgid "region copy"
+msgstr "Region kopieren"
+
+#: gtk2_ardour/editor_mouse.cc:3910
+msgid "fixed time region drag"
+msgstr "Region zeitgleich verschieben"
+
+#: gtk2_ardour/editor_mouse.cc:3912
+msgid "region drag"
+msgstr "Region verschieben"
+
+#: gtk2_ardour/editor_mouse.cc:4325
+msgid "selection grab"
+msgstr "Auswählen"
+
+#: gtk2_ardour/editor_mouse.cc:4476
+msgid "range selection"
+msgstr "Auswahlbereich"
-#: gtk2_ardour/ardour_ui_ed.cc:84
+#: gtk2_ardour/editor_mouse.cc:4492
+msgid "trim selection start"
+msgstr "Anfangspunkt der Auswahl abschneiden"
+
+#: gtk2_ardour/editor_mouse.cc:4508
+msgid "trim selection end"
+msgstr "Endpunkt der Auswahl abschneiden"
+
+#: gtk2_ardour/editor_mouse.cc:4525
+msgid "move selection"
+msgstr "Auswahl bewegen"
+
+#: gtk2_ardour/editor_mouse.cc:4914
+msgid "Start point trim"
+msgstr "Anfangspunkt verändern"
+
+#: gtk2_ardour/editor_mouse.cc:4946
+msgid "End point trim"
+msgstr "Endpunkt verändern"
+
+#: gtk2_ardour/editor_mouse.cc:4989
+msgid "trimmed region"
+msgstr "Abgeschnittene Region"
+
+#: gtk2_ardour/editor_mouse.cc:5152
+msgid "new range marker"
+msgstr "Neuer Bereich"
+
+#: gtk2_ardour/editor_mouse.cc:5400
+msgid "rubberband selection"
+msgstr "Bereichsauswahl"
+
+#: gtk2_ardour/editor_mouse.cc:5430
+msgid "Name for region:"
+msgstr "Name für Region:"
+
+#: gtk2_ardour/editor_mouse.cc:5432
+msgid "Rename"
+msgstr "Umbenennen"
+
+#: gtk2_ardour/editor_mouse.cc:5503
+msgid "timestretch"
+msgstr "Time-Stretch"
+
+#: gtk2_ardour/editor_selection.cc:733
+msgid "set selected regions"
+msgstr "Regionen auswählen"
+
+#: gtk2_ardour/editor_selection.cc:875
+msgid "select all"
+msgstr "Alle Regionen auswählen"
+
+#: gtk2_ardour/editor_selection.cc:964
+msgid "select all within"
+msgstr "Alle im Bereich auswählen"
+
+#: gtk2_ardour/editor_selection.cc:1024
+msgid "set selection from range"
+msgstr "Auswahlbereich von Bereich erstellen"
+
+#: gtk2_ardour/editor_selection.cc:1064
+msgid "select all from range"
+msgstr "Alle im Bereich auswählen"
+
+#: gtk2_ardour/editor_selection.cc:1095
+msgid "select all from punch"
+msgstr "Alle im Punch-Bereich auswählen"
+
+#: gtk2_ardour/editor_selection.cc:1126
+msgid "select all from loop"
+msgstr "Alle im Loop-Bereich auswählen"
+
+#: gtk2_ardour/editor_selection.cc:1140
+msgid "select all after cursor"
+msgstr "Alle nach Positionszeiger auswählen"
+
+#: gtk2_ardour/editor_selection.cc:1145
+msgid "select all before cursor"
+msgstr "Alle vor Positionszeiger auswählen"
+
+#: gtk2_ardour/editor_selection.cc:1180
+msgid "select all after edit"
+msgstr "Alles nach Arbeitspunkt auswählen"
+
+#: gtk2_ardour/editor_selection.cc:1185
+msgid "select all before edit"
+msgstr "Alles vor Arbeitspunkt auswählen"
+
+#: gtk2_ardour/editor_selection.cc:1312
+msgid "No edit range defined"
+msgstr "Kein Editierbereich definiert"
+
+#: gtk2_ardour/editor_selection.cc:1318
+msgid ""
+"the edit point is Selected Marker\n"
+"but there is no selected marker."
+msgstr ""
+"der Arbeitspunkt ist der gewählte Positionsmarker,\n"
+"es ist aber kein Positionsmarker ausgewählt."
+
+#: gtk2_ardour/ardour_ui_ed.cc:90
msgid "Session"
msgstr "Projekt"
-#: gtk2_ardour/ardour_ui_ed.cc:85
+#: gtk2_ardour/ardour_ui_ed.cc:91
msgid "Import/Export"
msgstr "Import/Export"
-#: gtk2_ardour/ardour_ui_ed.cc:86
-#: gtk2_ardour/editor.cc:576
-#: gtk2_ardour/editor.cc:647
-msgid "Regions"
-msgstr "Regionen"
-
-#: gtk2_ardour/ardour_ui_ed.cc:87
+#: gtk2_ardour/ardour_ui_ed.cc:92
msgid "Cleanup"
msgstr "Aufräumen"
-#: gtk2_ardour/ardour_ui_ed.cc:88
-#: gtk2_ardour/option_editor.cc:144
+#: gtk2_ardour/ardour_ui_ed.cc:93
msgid "Sync"
msgstr "Sync"
-#: gtk2_ardour/ardour_ui_ed.cc:89
-#: gtk2_ardour/ardour_ui_ed.cc:90
-#: gtk2_ardour/engine_dialog.cc:343
+#: gtk2_ardour/ardour_ui_ed.cc:94
+#: gtk2_ardour/ardour_ui_ed.cc:95
msgid "Options"
msgstr "Optionen"
-#: gtk2_ardour/ardour_ui_ed.cc:91
+#: gtk2_ardour/ardour_ui_ed.cc:96
msgid "Help"
msgstr "Hilfe"
-#: gtk2_ardour/ardour_ui_ed.cc:92
-msgid "KeyMouse Actions"
-msgstr "Tastatur/Maus-Befehle"
+#: gtk2_ardour/ardour_ui_ed.cc:97
+msgid "Misc. Shortcuts"
+msgstr "Verschiedenes"
-#: gtk2_ardour/ardour_ui_ed.cc:93
+#: gtk2_ardour/ardour_ui_ed.cc:98
msgid "Audio File Format"
msgstr "Audio-Dateiformat"
-#: gtk2_ardour/ardour_ui_ed.cc:94
-msgid "Header"
-msgstr "Header"
+#: gtk2_ardour/ardour_ui_ed.cc:99
+msgid "File Type"
+msgstr "Dateiformat"
-#: gtk2_ardour/ardour_ui_ed.cc:95
-msgid "Data"
-msgstr "Datenformat"
+#: gtk2_ardour/ardour_ui_ed.cc:100
+msgid "Sample Format"
+msgstr "Sampleformat"
-#: gtk2_ardour/ardour_ui_ed.cc:96
+#: gtk2_ardour/ardour_ui_ed.cc:101
msgid "Control Surfaces"
msgstr "Eingabegeräte / Controller"
-#: gtk2_ardour/ardour_ui_ed.cc:97
+#: gtk2_ardour/ardour_ui_ed.cc:102
msgid "Metering"
msgstr "Pegelanzeige"
-#: gtk2_ardour/ardour_ui_ed.cc:98
+#: gtk2_ardour/ardour_ui_ed.cc:103
msgid "Fall off rate"
msgstr "Abfall der Pegelanzeige"
-#: gtk2_ardour/ardour_ui_ed.cc:99
+#: gtk2_ardour/ardour_ui_ed.cc:104
msgid "Hold Time"
msgstr "Pegelanzeige halten"
-#: gtk2_ardour/ardour_ui_ed.cc:100
+#: gtk2_ardour/ardour_ui_ed.cc:105
msgid "Denormal Handling"
msgstr "Umgang mit Denormals"
-#: gtk2_ardour/ardour_ui_ed.cc:104
-#: gtk2_ardour/route_time_axis.cc:1343
+#: gtk2_ardour/ardour_ui_ed.cc:109
msgid "New"
msgstr "Neu"
-#: gtk2_ardour/ardour_ui_ed.cc:106
+#: gtk2_ardour/ardour_ui_ed.cc:111
msgid "Open"
msgstr "Öffnen"
-#: gtk2_ardour/ardour_ui_ed.cc:107
+#: gtk2_ardour/ardour_ui_ed.cc:112
msgid "Recent"
msgstr "Zuletzt verwendet..."
-#: gtk2_ardour/ardour_ui_ed.cc:108
-#: gtk2_ardour/io_selector.cc:59
-#: gtk2_ardour/io_selector.cc:747
-#: gtk2_ardour/connection_editor.cc:58
+#: gtk2_ardour/ardour_ui_ed.cc:113
msgid "Close"
msgstr "Schließen"
-#: gtk2_ardour/ardour_ui_ed.cc:111
-#: gtk2_ardour/route_params_ui.cc:513
+#: gtk2_ardour/ardour_ui_ed.cc:116
msgid "Add Track/Bus"
msgstr "Spur/Bus hinzufügen..."
-#: gtk2_ardour/ardour_ui_ed.cc:123
+#: gtk2_ardour/ardour_ui_ed.cc:128
msgid "Connect"
msgstr "Verbinden"
-#: gtk2_ardour/ardour_ui_ed.cc:131
+#: gtk2_ardour/ardour_ui_ed.cc:136
msgid "Snapshot"
msgstr "Schnappschuss..."
-#: gtk2_ardour/ardour_ui_ed.cc:134
+#: gtk2_ardour/ardour_ui_ed.cc:139
msgid "Save Template..."
msgstr "Als Vorlage Speichern..."
-#: gtk2_ardour/ardour_ui_ed.cc:137
+#: gtk2_ardour/ardour_ui_ed.cc:142
msgid "Export session to audiofile..."
msgstr "Exportiere Projekt als Audio-Datei..."
-#: gtk2_ardour/ardour_ui_ed.cc:140
+#: gtk2_ardour/ardour_ui_ed.cc:145
msgid "Export selection to audiofile..."
msgstr "Exportiere Auswahlbereich als Audio-Datei..."
-#: gtk2_ardour/ardour_ui_ed.cc:144
+#: gtk2_ardour/ardour_ui_ed.cc:149
msgid "Export range markers to audiofile..."
msgstr "Exportiere Bereiche als Audio-Datei..."
-#: gtk2_ardour/ardour_ui_ed.cc:148
-#: gtk2_ardour/editor.cc:1724
-#: gtk2_ardour/export_dialog.cc:125
-#: gtk2_ardour/export_dialog.cc:374
-#: gtk2_ardour/export_dialog.cc:1122
-#: gtk2_ardour/export_dialog.cc:1126
+#: gtk2_ardour/ardour_ui_ed.cc:153
msgid "Export"
msgstr "Exportieren"
-#: gtk2_ardour/ardour_ui_ed.cc:151
+#: gtk2_ardour/ardour_ui_ed.cc:156
msgid "Cleanup unused sources"
msgstr "Nicht benutzte Dateien entfernen"
-#: gtk2_ardour/ardour_ui_ed.cc:153
+#: gtk2_ardour/ardour_ui_ed.cc:158
msgid "Flush wastebasket"
msgstr "Müll leeren"
-#: gtk2_ardour/ardour_ui_ed.cc:159
+#: gtk2_ardour/ardour_ui_ed.cc:164
msgid "JACK"
msgstr "JACK"
-#: gtk2_ardour/ardour_ui_ed.cc:160
+#: gtk2_ardour/ardour_ui_ed.cc:165
msgid "Latency"
msgstr "Latenz"
-#: gtk2_ardour/ardour_ui_ed.cc:162
+#: gtk2_ardour/ardour_ui_ed.cc:167
msgid "Reconnect"
msgstr "Neu Verbinden"
-#: gtk2_ardour/ardour_ui_ed.cc:165
-#: gtk2_ardour/mixer_strip.cc:504
-#: gtk2_ardour/mixer_strip.cc:566
+#: gtk2_ardour/ardour_ui_ed.cc:170
msgid "Disconnect"
msgstr "Trennen"
-#: gtk2_ardour/ardour_ui_ed.cc:192
-msgid "Windows"
+#: gtk2_ardour/ardour_ui_ed.cc:197
+msgid "Window"
msgstr "Fenster"
-#: gtk2_ardour/ardour_ui_ed.cc:193
+#: gtk2_ardour/ardour_ui_ed.cc:198
msgid "Quit"
msgstr "Beenden"
-#: gtk2_ardour/ardour_ui_ed.cc:197
+#: gtk2_ardour/ardour_ui_ed.cc:202
msgid "Maximise Editor Space"
-msgstr "Editor Maximieren"
+msgstr "Editor maximieren"
-#: gtk2_ardour/ardour_ui_ed.cc:199
+#: gtk2_ardour/ardour_ui_ed.cc:204
msgid "Show Editor"
msgstr "Editor anzeigen"
-#: gtk2_ardour/ardour_ui_ed.cc:200
+#: gtk2_ardour/ardour_ui_ed.cc:205
msgid "Show Mixer"
msgstr "Mixer anzeigen"
-#: gtk2_ardour/ardour_ui_ed.cc:201
-#: gtk2_ardour/option_editor.cc:117
+#: gtk2_ardour/ardour_ui_ed.cc:206
msgid "Preferences"
msgstr "Einstellungen"
-#: gtk2_ardour/ardour_ui_ed.cc:202
-#: gtk2_ardour/route_params_ui.cc:143
-#: gtk2_ardour/route_params_ui.cc:659
+#: gtk2_ardour/ardour_ui_ed.cc:207
msgid "Track/Bus Inspector"
msgstr "Verbindungen"
-#: gtk2_ardour/ardour_ui_ed.cc:204
-#: gtk2_ardour/connection_editor.cc:146
-#: gtk2_ardour/connection_editor.cc:147
+#: gtk2_ardour/ardour_ui_ed.cc:209
msgid "Connections"
msgstr "Verbindungen"
-#: gtk2_ardour/ardour_ui_ed.cc:206
-#: gtk2_ardour/location_ui.cc:611
+#: gtk2_ardour/ardour_ui_ed.cc:211
msgid "Locations"
msgstr "Positionen"
-#: gtk2_ardour/ardour_ui_ed.cc:208
+#: gtk2_ardour/ardour_ui_ed.cc:213
msgid "Big Clock"
msgstr "Große Zeitanzeige"
-#: gtk2_ardour/ardour_ui_ed.cc:210
+#: gtk2_ardour/ardour_ui_ed.cc:215
msgid "About"
-msgstr "Ãœber ardour..."
+msgstr "Ãœber Ardour..."
-#: gtk2_ardour/ardour_ui_ed.cc:211
+#: gtk2_ardour/ardour_ui_ed.cc:216
msgid "Theme Manager"
msgstr "Thema"
-#: gtk2_ardour/ardour_ui_ed.cc:212
+#: gtk2_ardour/ardour_ui_ed.cc:217
msgid "Keybindings"
msgstr "Tastaturbefehle"
-#: gtk2_ardour/ardour_ui_ed.cc:214
+#: gtk2_ardour/ardour_ui_ed.cc:219
msgid "Add Audio Track"
msgstr "Audiospur hinzufügen"
-#: gtk2_ardour/ardour_ui_ed.cc:216
+#: gtk2_ardour/ardour_ui_ed.cc:221
msgid "Add Audio Bus"
msgstr "Audio-Bus hinzufügen"
-#: gtk2_ardour/ardour_ui_ed.cc:218
+#: gtk2_ardour/ardour_ui_ed.cc:223
msgid "Save"
msgstr "Speichern"
-#: gtk2_ardour/ardour_ui_ed.cc:220
-#: gtk2_ardour/editor_actions.cc:377
+#: gtk2_ardour/ardour_ui_ed.cc:225
msgid "Remove Last Capture"
msgstr "Letzte Aufnahme entfernen"
-#: gtk2_ardour/ardour_ui_ed.cc:227
+#: gtk2_ardour/ardour_ui_ed.cc:232
msgid "Transport"
msgstr "Transport"
-#: gtk2_ardour/ardour_ui_ed.cc:233
-#: gtk2_ardour/engine_dialog.cc:56
-#: gtk2_ardour/sfdb_ui.cc:178
+#: gtk2_ardour/ardour_ui_ed.cc:238
msgid "Stop"
msgstr "Stop"
-#: gtk2_ardour/ardour_ui_ed.cc:236
+#: gtk2_ardour/ardour_ui_ed.cc:241
msgid "Roll"
msgstr "Wiedergabe"
-#: gtk2_ardour/ardour_ui_ed.cc:240
+#: gtk2_ardour/ardour_ui_ed.cc:245
msgid "Start/Stop"
msgstr "Start/Stop"
-#: gtk2_ardour/ardour_ui_ed.cc:243
+#: gtk2_ardour/ardour_ui_ed.cc:248
msgid "Stop + Forget Capture"
msgstr "Stop + Aufnahme verwerfen"
-#: gtk2_ardour/ardour_ui_ed.cc:253
+#: gtk2_ardour/ardour_ui_ed.cc:258
msgid "Transition To Roll"
msgstr "Vorwärts wiedergeben"
-#: gtk2_ardour/ardour_ui_ed.cc:257
+#: gtk2_ardour/ardour_ui_ed.cc:262
msgid "Transition To Reverse"
msgstr "Rückwärts wiedergeben"
-#: gtk2_ardour/ardour_ui_ed.cc:262
+#: gtk2_ardour/ardour_ui_ed.cc:267
msgid "Play Loop Range"
msgstr "Schleife wiedergeben"
-#: gtk2_ardour/ardour_ui_ed.cc:265
+#: gtk2_ardour/ardour_ui_ed.cc:270
msgid "Play Selection"
msgstr "Ausgewählten Bereich wiedergeben"
-#: gtk2_ardour/ardour_ui_ed.cc:269
+#: gtk2_ardour/ardour_ui_ed.cc:274
msgid "Enable Record"
msgstr "Aufnahme aktivieren"
-#: gtk2_ardour/ardour_ui_ed.cc:271
+#: gtk2_ardour/ardour_ui_ed.cc:276
msgid "Start Recording"
msgstr "Aufnahme beginnen"
-#: gtk2_ardour/ardour_ui_ed.cc:274
+#: gtk2_ardour/ardour_ui_ed.cc:279
msgid "Rewind"
msgstr "Rückwärts"
-#: gtk2_ardour/ardour_ui_ed.cc:277
+#: gtk2_ardour/ardour_ui_ed.cc:282
msgid "Rewind (Slow)"
msgstr "Rückwärts (langsam)"
-#: gtk2_ardour/ardour_ui_ed.cc:280
+#: gtk2_ardour/ardour_ui_ed.cc:285
msgid "Rewind (Fast)"
msgstr "Rückwärts (schnell)"
-#: gtk2_ardour/ardour_ui_ed.cc:283
+#: gtk2_ardour/ardour_ui_ed.cc:288
msgid "Forward"
msgstr "Vorwärts"
-#: gtk2_ardour/ardour_ui_ed.cc:286
+#: gtk2_ardour/ardour_ui_ed.cc:291
msgid "Forward (Slow)"
msgstr "Vorwärts (langsam)"
-#: gtk2_ardour/ardour_ui_ed.cc:289
+#: gtk2_ardour/ardour_ui_ed.cc:294
msgid "Forward (Fast)"
msgstr "Vorwärts (schnell)"
-#: gtk2_ardour/ardour_ui_ed.cc:292
+#: gtk2_ardour/ardour_ui_ed.cc:297
msgid "Goto Zero"
msgstr "Zum Nullpunkt springen"
-#: gtk2_ardour/ardour_ui_ed.cc:295
+#: gtk2_ardour/ardour_ui_ed.cc:300
msgid "Goto Start"
msgstr "Zum Anfang springen"
-#: gtk2_ardour/ardour_ui_ed.cc:298
+#: gtk2_ardour/ardour_ui_ed.cc:303
msgid "Goto End"
-msgstr "Zum Ende Springen"
+msgstr "Zum Ende springen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:306
+msgid "Goto Wall Clock"
+msgstr "Zur lokalen Uhrzeit springen"
-#: gtk2_ardour/ardour_ui_ed.cc:302
+#: gtk2_ardour/ardour_ui_ed.cc:310
msgid "Focus On Clock"
msgstr "Fokus auf Zeitanzeige setzen"
+#: gtk2_ardour/ardour_ui_ed.cc:314
+#: gtk2_ardour/ardour_ui_ed.cc:323
+msgid "Bars & Beats"
+msgstr "Takte & Schläge"
+
+#: gtk2_ardour/ardour_ui_ed.cc:316
#: gtk2_ardour/ardour_ui_ed.cc:325
+msgid "Minutes & Seconds"
+msgstr "Minuten & Sekunden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:318
+#: gtk2_ardour/ardour_ui_ed.cc:327
+msgid "Samples"
+msgstr "Samples"
+
+#: gtk2_ardour/ardour_ui_ed.cc:320
+#: gtk2_ardour/ardour_ui_ed.cc:329
+#: gtk2_ardour/ardour_ui_ed.cc:518
+#: gtk2_ardour/ardour_ui_ed.cc:526
+msgid "Off"
+msgstr "Aus"
+
+#: gtk2_ardour/ardour_ui_ed.cc:332
+msgid "Punch In"
+msgstr "Punch In"
+
+#: gtk2_ardour/ardour_ui_ed.cc:335
+msgid "Punch Out"
+msgstr "Punch Out"
+
+#: gtk2_ardour/ardour_ui_ed.cc:338
+msgid "Punch In/Out"
+msgstr "Punch In/Out"
+
+#: gtk2_ardour/ardour_ui_ed.cc:341
+msgid "Click"
+msgstr "Click"
+
+#: gtk2_ardour/ardour_ui_ed.cc:344
+msgid "Auto Input"
+msgstr "Auto Input"
+
+#: gtk2_ardour/ardour_ui_ed.cc:347
+msgid "Auto Play"
+msgstr "Auto Play"
+
+#: gtk2_ardour/ardour_ui_ed.cc:350
+msgid "Auto Return"
+msgstr "Auto Return"
+
+#: gtk2_ardour/ardour_ui_ed.cc:354
msgid "Sync startup to video"
msgstr "Mit Video synchronisieren"
-#: gtk2_ardour/ardour_ui_ed.cc:326
+#: gtk2_ardour/ardour_ui_ed.cc:355
msgid "Time master"
msgstr "Time Master"
-#: gtk2_ardour/ardour_ui_ed.cc:329
+#: gtk2_ardour/ardour_ui_ed.cc:358
msgid "Toggle Record Enable Track1"
msgstr "Aufnahme aktivieren für Spur 1"
-#: gtk2_ardour/ardour_ui_ed.cc:331
+#: gtk2_ardour/ardour_ui_ed.cc:360
msgid "Toggle Record Enable Track2"
msgstr "Aufnahme aktivieren für Spur 2"
-#: gtk2_ardour/ardour_ui_ed.cc:333
+#: gtk2_ardour/ardour_ui_ed.cc:362
msgid "Toggle Record Enable Track3"
msgstr "Aufnahme aktivieren für Spur 3"
-#: gtk2_ardour/ardour_ui_ed.cc:335
+#: gtk2_ardour/ardour_ui_ed.cc:364
msgid "Toggle Record Enable Track4"
msgstr "Aufnahme aktivieren für Spur 4"
-#: gtk2_ardour/ardour_ui_ed.cc:337
+#: gtk2_ardour/ardour_ui_ed.cc:366
msgid "Toggle Record Enable Track5"
msgstr "Aufnahme aktivieren für Spur 5"
-#: gtk2_ardour/ardour_ui_ed.cc:339
+#: gtk2_ardour/ardour_ui_ed.cc:368
msgid "Toggle Record Enable Track6"
msgstr "Aufnahme aktivieren für Spur 6"
-#: gtk2_ardour/ardour_ui_ed.cc:341
+#: gtk2_ardour/ardour_ui_ed.cc:370
msgid "Toggle Record Enable Track7"
msgstr "Aufnahme aktivieren für Spur 7"
-#: gtk2_ardour/ardour_ui_ed.cc:343
+#: gtk2_ardour/ardour_ui_ed.cc:372
msgid "Toggle Record Enable Track8"
msgstr "Aufnahme aktivieren für Spur 8"
-#: gtk2_ardour/ardour_ui_ed.cc:345
+#: gtk2_ardour/ardour_ui_ed.cc:374
msgid "Toggle Record Enable Track9"
msgstr "Aufnahme aktivieren für Spur 9"
-#: gtk2_ardour/ardour_ui_ed.cc:347
+#: gtk2_ardour/ardour_ui_ed.cc:376
msgid "Toggle Record Enable Track10"
msgstr "Aufnahme aktivieren für Spur 10"
-#: gtk2_ardour/ardour_ui_ed.cc:349
+#: gtk2_ardour/ardour_ui_ed.cc:378
msgid "Toggle Record Enable Track11"
msgstr "Aufnahme aktivieren für Spur 11"
-#: gtk2_ardour/ardour_ui_ed.cc:351
+#: gtk2_ardour/ardour_ui_ed.cc:380
msgid "Toggle Record Enable Track12"
msgstr "Aufnahme aktivieren für Spur 12"
-#: gtk2_ardour/ardour_ui_ed.cc:353
+#: gtk2_ardour/ardour_ui_ed.cc:382
msgid "Toggle Record Enable Track13"
msgstr "Aufnahme aktivieren für Spur 13"
-#: gtk2_ardour/ardour_ui_ed.cc:355
+#: gtk2_ardour/ardour_ui_ed.cc:384
msgid "Toggle Record Enable Track14"
msgstr "Aufnahme aktivieren für Spur 14"
-#: gtk2_ardour/ardour_ui_ed.cc:357
+#: gtk2_ardour/ardour_ui_ed.cc:386
msgid "Toggle Record Enable Track15"
msgstr "Aufnahme aktivieren für Spur 15"
-#: gtk2_ardour/ardour_ui_ed.cc:359
+#: gtk2_ardour/ardour_ui_ed.cc:388
msgid "Toggle Record Enable Track16"
msgstr "Aufnahme aktivieren für Spur 16"
-#: gtk2_ardour/ardour_ui_ed.cc:361
+#: gtk2_ardour/ardour_ui_ed.cc:390
msgid "Toggle Record Enable Track17"
msgstr "Aufnahme aktivieren für Spur 17"
-#: gtk2_ardour/ardour_ui_ed.cc:363
+#: gtk2_ardour/ardour_ui_ed.cc:392
msgid "Toggle Record Enable Track18"
msgstr "Aufnahme aktivieren für Spur 18"
-#: gtk2_ardour/ardour_ui_ed.cc:365
+#: gtk2_ardour/ardour_ui_ed.cc:394
msgid "Toggle Record Enable Track19"
msgstr "Aufnahme aktivieren für Spur 19"
-#: gtk2_ardour/ardour_ui_ed.cc:367
+#: gtk2_ardour/ardour_ui_ed.cc:396
msgid "Toggle Record Enable Track20"
msgstr "Aufnahme aktivieren für Spur 20"
-#: gtk2_ardour/ardour_ui_ed.cc:369
+#: gtk2_ardour/ardour_ui_ed.cc:398
msgid "Toggle Record Enable Track21"
msgstr "Aufnahme aktivieren für Spur 21"
-#: gtk2_ardour/ardour_ui_ed.cc:371
+#: gtk2_ardour/ardour_ui_ed.cc:400
msgid "Toggle Record Enable Track22"
msgstr "Aufnahme aktivieren für Spur 22"
-#: gtk2_ardour/ardour_ui_ed.cc:373
+#: gtk2_ardour/ardour_ui_ed.cc:402
msgid "Toggle Record Enable Track23"
msgstr "Aufnahme aktivieren für Spur 23"
-#: gtk2_ardour/ardour_ui_ed.cc:375
+#: gtk2_ardour/ardour_ui_ed.cc:404
msgid "Toggle Record Enable Track24"
msgstr "Aufnahme aktivieren für Spur 24"
-#: gtk2_ardour/ardour_ui_ed.cc:377
+#: gtk2_ardour/ardour_ui_ed.cc:406
msgid "Toggle Record Enable Track25"
msgstr "Aufnahme aktivieren für Spur 25"
-#: gtk2_ardour/ardour_ui_ed.cc:379
+#: gtk2_ardour/ardour_ui_ed.cc:408
msgid "Toggle Record Enable Track26"
msgstr "Aufnahme aktivieren für Spur 26"
-#: gtk2_ardour/ardour_ui_ed.cc:381
+#: gtk2_ardour/ardour_ui_ed.cc:410
msgid "Toggle Record Enable Track27"
msgstr "Aufnahme aktivieren für Spur 27"
-#: gtk2_ardour/ardour_ui_ed.cc:383
+#: gtk2_ardour/ardour_ui_ed.cc:412
msgid "Toggle Record Enable Track28"
msgstr "Aufnahme aktivieren für Spur 28"
-#: gtk2_ardour/ardour_ui_ed.cc:385
+#: gtk2_ardour/ardour_ui_ed.cc:414
msgid "Toggle Record Enable Track29"
msgstr "Aufnahme aktivieren für Spur 29"
-#: gtk2_ardour/ardour_ui_ed.cc:387
+#: gtk2_ardour/ardour_ui_ed.cc:416
msgid "Toggle Record Enable Track30"
msgstr "Aufnahme aktivieren für Spur 30"
-#: gtk2_ardour/ardour_ui_ed.cc:389
+#: gtk2_ardour/ardour_ui_ed.cc:418
msgid "Toggle Record Enable Track31"
msgstr "Aufnahme aktivieren für Spur 31"
-#: gtk2_ardour/ardour_ui_ed.cc:391
+#: gtk2_ardour/ardour_ui_ed.cc:420
msgid "Toggle Record Enable Track32"
msgstr "Aufnahme aktivieren für Spur 32"
-#: gtk2_ardour/ardour_ui_ed.cc:396
+#: gtk2_ardour/ardour_ui_ed.cc:425
msgid "Percentage"
msgstr "Prozent"
-#: gtk2_ardour/ardour_ui_ed.cc:397
+#: gtk2_ardour/ardour_ui_ed.cc:426
msgid "Semitones"
msgstr "Halbtöne"
-#: gtk2_ardour/ardour_ui_ed.cc:401
+#: gtk2_ardour/ardour_ui_ed.cc:430
msgid "Send MTC"
msgstr "MTC senden"
-#: gtk2_ardour/ardour_ui_ed.cc:403
+#: gtk2_ardour/ardour_ui_ed.cc:432
msgid "Send MMC"
msgstr "MMC senden"
-#: gtk2_ardour/ardour_ui_ed.cc:405
+#: gtk2_ardour/ardour_ui_ed.cc:434
msgid "Use MMC"
msgstr "Benutze MMC"
-#: gtk2_ardour/ardour_ui_ed.cc:407
+#: gtk2_ardour/ardour_ui_ed.cc:436
msgid "Send MIDI feedback"
msgstr "MIDI Feedback senden"
-#: gtk2_ardour/ardour_ui_ed.cc:410
+#: gtk2_ardour/ardour_ui_ed.cc:439
msgid "Use OSC"
msgstr "Aktiviere OSC"
-#: gtk2_ardour/ardour_ui_ed.cc:415
+#: gtk2_ardour/ardour_ui_ed.cc:443
+msgid "Tape Machine mode"
+msgstr "Bandmaschinen-Modus"
+
+#: gtk2_ardour/ardour_ui_ed.cc:446
msgid "Sync Editor and Mixer track order"
msgstr "Einheitliche Reihenfolge der Spuren im Editor und Mixer"
-#: gtk2_ardour/ardour_ui_ed.cc:416
+#: gtk2_ardour/ardour_ui_ed.cc:447
msgid "Stop plugins with transport"
msgstr "Plugins mit Transport stoppen"
-#: gtk2_ardour/ardour_ui_ed.cc:417
+#: gtk2_ardour/ardour_ui_ed.cc:448
msgid "Verify remove last capture"
msgstr "Verwerfen der letzten Aufnahme bestätigen"
-#: gtk2_ardour/ardour_ui_ed.cc:418
+#: gtk2_ardour/ardour_ui_ed.cc:449
msgid "Make periodic safety backups"
msgstr "Erstelle regelmäßig Sicherungskopien"
-#: gtk2_ardour/ardour_ui_ed.cc:419
+#: gtk2_ardour/ardour_ui_ed.cc:450
msgid "Stop recording on xrun"
-msgstr "Aufnahme bei XRUN stoppen"
+msgstr "Aufnahme bei xrun stoppen"
-#: gtk2_ardour/ardour_ui_ed.cc:420
+#: gtk2_ardour/ardour_ui_ed.cc:451
+msgid "Create marker at xrun location"
+msgstr "Bei xrun Marker erzeugen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:452
msgid "Stop transport at session end"
msgstr "Transport am Ende des Projekts stoppen"
-#: gtk2_ardour/ardour_ui_ed.cc:421
+#: gtk2_ardour/ardour_ui_ed.cc:453
msgid "-12dB gain reduce ffwd/rewind"
msgstr "Beim Spulen Pegel um -12dB absenken"
-#: gtk2_ardour/ardour_ui_ed.cc:422
+#: gtk2_ardour/ardour_ui_ed.cc:454
msgid "Rec-enable stays engaged at stop"
msgstr "Aufnahmestatus bleibt nach Stop erhalten"
-#: gtk2_ardour/ardour_ui_ed.cc:423
+#: gtk2_ardour/ardour_ui_ed.cc:455
msgid "Region equivalents overlap"
msgstr "Region entspricht Ãœberdeckung"
-#: gtk2_ardour/ardour_ui_ed.cc:424
+#: gtk2_ardour/ardour_ui_ed.cc:456
msgid "Primary Clock delta to edit point"
msgstr "Primäre Zeitanzeige zeigt Abstand zum Arbeitspunkt"
-#: gtk2_ardour/ardour_ui_ed.cc:425
+#: gtk2_ardour/ardour_ui_ed.cc:457
msgid "Secondary Clock delta to edit point"
msgstr "Sekundäre Zeitanzeige zeigt Abstand zum Arbeitspunkt"
-#: gtk2_ardour/ardour_ui_ed.cc:426
+#: gtk2_ardour/ardour_ui_ed.cc:458
msgid "Enable Editor Meters"
msgstr "Aktiviere Pegelanzeigen im Editor"
-#: gtk2_ardour/ardour_ui_ed.cc:427
+#: gtk2_ardour/ardour_ui_ed.cc:459
msgid "Always copy imported files"
msgstr "Importierte Dateien immer kopieren"
-#: gtk2_ardour/ardour_ui_ed.cc:431
+#: gtk2_ardour/ardour_ui_ed.cc:460
+msgid "Rubberbanding Snaps to Grid"
+msgstr "Time-Stretch schnappt auf Raster ein"
+
+#: gtk2_ardour/ardour_ui_ed.cc:461
+msgid "Auto-analyse new audio"
+msgstr "Neue Audiodaten automatisch analysieren"
+
+#: gtk2_ardour/ardour_ui_ed.cc:463
+msgid "Use narrow mixer strips"
+msgstr "Schmale Mixerzüge verwenden"
+
+#: gtk2_ardour/ardour_ui_ed.cc:464
+msgid "Name New Markers"
+msgstr "Neue Marker benennen"
+
+#: gtk2_ardour/ardour_ui_ed.cc:468
msgid "Use DC bias"
-msgstr "DC bias aktivieren"
+msgstr "Benutze DC bias"
-#: gtk2_ardour/ardour_ui_ed.cc:433
+#: gtk2_ardour/ardour_ui_ed.cc:470
msgid "No processor handling"
msgstr "Keine Korrekturen"
-#: gtk2_ardour/ardour_ui_ed.cc:442
-#: gtk2_ardour/ardour_ui_ed.cc:453
+#: gtk2_ardour/ardour_ui_ed.cc:479
+#: gtk2_ardour/ardour_ui_ed.cc:490
msgid "Use FlushToZero"
msgstr "Benutze FlushToZero"
-#: gtk2_ardour/ardour_ui_ed.cc:444
-#: gtk2_ardour/ardour_ui_ed.cc:458
+#: gtk2_ardour/ardour_ui_ed.cc:481
+#: gtk2_ardour/ardour_ui_ed.cc:495
msgid "Use DenormalsAreZero"
msgstr "Benutze DenormalsAreZero"
-#: gtk2_ardour/ardour_ui_ed.cc:446
-#: gtk2_ardour/ardour_ui_ed.cc:463
+#: gtk2_ardour/ardour_ui_ed.cc:483
+#: gtk2_ardour/ardour_ui_ed.cc:500
msgid "Use FlushToZero & DenormalsAreZero"
msgstr "Benutze FlushToZero & DenormalsAreZero"
-#: gtk2_ardour/ardour_ui_ed.cc:469
+#: gtk2_ardour/ardour_ui_ed.cc:506
msgid "Do not run plugins while recording"
-msgstr "Plugins während der Aufnahme daktivieren"
+msgstr "Plugins während der Aufnahme deaktivieren"
-#: gtk2_ardour/ardour_ui_ed.cc:471
+#: gtk2_ardour/ardour_ui_ed.cc:508
msgid "Latched solo"
msgstr "Latch Solo"
-#: gtk2_ardour/ardour_ui_ed.cc:473
+#: gtk2_ardour/ardour_ui_ed.cc:510
msgid "Show solo muting"
msgstr "Solo als Mute anzeigen"
-#: gtk2_ardour/ardour_ui_ed.cc:481
-#: gtk2_ardour/ardour_ui_ed.cc:489
-#: gtk2_ardour/audio_clock.cc:1889
-msgid "Off"
-msgstr "Aus"
-
-#: gtk2_ardour/ardour_ui_ed.cc:482
-#: gtk2_ardour/editor.cc:1335
-#: gtk2_ardour/editor.cc:1338
-#: gtk2_ardour/editor.cc:1357
-#: gtk2_ardour/editor.cc:1360
+#: gtk2_ardour/ardour_ui_ed.cc:519
msgid "Slowest"
msgstr "Sehr langsam"
-#: gtk2_ardour/ardour_ui_ed.cc:483
-#: gtk2_ardour/editor.cc:1339
-#: gtk2_ardour/editor.cc:1361
+#: gtk2_ardour/ardour_ui_ed.cc:520
msgid "Slow"
msgstr "Langsam"
-#: gtk2_ardour/ardour_ui_ed.cc:484
-#: gtk2_ardour/ardour_ui_ed.cc:491
+#: gtk2_ardour/ardour_ui_ed.cc:521
+#: gtk2_ardour/ardour_ui_ed.cc:528
msgid "Medium"
msgstr "Mittel"
-#: gtk2_ardour/ardour_ui_ed.cc:485
-#: gtk2_ardour/editor.cc:1340
-#: gtk2_ardour/editor.cc:1362
-#: gtk2_ardour/sfdb_ui.cc:1070
-#: gtk2_ardour/sfdb_ui.cc:1151
+#: gtk2_ardour/ardour_ui_ed.cc:522
msgid "Fast"
msgstr "Schnell"
-#: gtk2_ardour/ardour_ui_ed.cc:486
+#: gtk2_ardour/ardour_ui_ed.cc:523
msgid "Faster"
msgstr "Schneller"
-#: gtk2_ardour/ardour_ui_ed.cc:487
-#: gtk2_ardour/editor.cc:1341
-#: gtk2_ardour/editor.cc:1363
-#: gtk2_ardour/sfdb_ui.cc:1071
+#: gtk2_ardour/ardour_ui_ed.cc:524
msgid "Fastest"
msgstr "Schnellstmöglich"
-#: gtk2_ardour/ardour_ui_ed.cc:490
-#: gtk2_ardour/editor_actions.cc:79
+#: gtk2_ardour/ardour_ui_ed.cc:527
msgid "Short"
msgstr "Kurz"
-#: gtk2_ardour/ardour_ui_ed.cc:492
+#: gtk2_ardour/ardour_ui_ed.cc:529
msgid "Long"
msgstr "Lange"
-#: gtk2_ardour/ardour_ui_ed.cc:511
-msgid "Hardware monitoring"
-msgstr "Hardware Monitoring"
+#: gtk2_ardour/ardour_ui_ed.cc:554
+msgid "JACK does monitoring"
+msgstr "Monitoring mit JACK"
-#: gtk2_ardour/ardour_ui_ed.cc:512
-msgid "Software monitoring"
-msgstr "Software Monitoring"
+#: gtk2_ardour/ardour_ui_ed.cc:558
+msgid "Ardour does monitoring"
+msgstr "Monitoring mit Ardour"
-#: gtk2_ardour/ardour_ui_ed.cc:513
-msgid "External monitoring"
-msgstr "Externes Monitoring"
+#: gtk2_ardour/ardour_ui_ed.cc:559
+msgid "Audio Hardware does monitoring"
+msgstr "Hardware Monitoring"
-#: gtk2_ardour/ardour_ui_ed.cc:517
+#: gtk2_ardour/ardour_ui_ed.cc:563
msgid "Solo in-place"
msgstr "Solo-In-Place"
-#: gtk2_ardour/ardour_ui_ed.cc:519
+#: gtk2_ardour/ardour_ui_ed.cc:565
msgid "Solo via bus"
msgstr "Solo über Bus"
-#: gtk2_ardour/ardour_ui_ed.cc:524
+#: gtk2_ardour/ardour_ui_ed.cc:570
msgid "Auto-connect inputs to physical inputs"
msgstr "Eingänge automatisch mit Audioeingängen verbinden"
-#: gtk2_ardour/ardour_ui_ed.cc:526
+#: gtk2_ardour/ardour_ui_ed.cc:572
msgid "Manually connect inputs"
msgstr "Eingänge manuell verbinden"
-#: gtk2_ardour/ardour_ui_ed.cc:531
+#: gtk2_ardour/ardour_ui_ed.cc:577
msgid "Auto-connect outputs to physical outs"
msgstr "Ausgänge automatisch mit Audioausgängen verbinden"
-#: gtk2_ardour/ardour_ui_ed.cc:533
+#: gtk2_ardour/ardour_ui_ed.cc:579
msgid "Auto-connect outputs to master bus"
msgstr "Ausgänge automatisch mit Master-Bus verbinden"
-#: gtk2_ardour/ardour_ui_ed.cc:535
+#: gtk2_ardour/ardour_ui_ed.cc:581
msgid "Manually connect outputs"
msgstr "Ausgänge manuell verbinden"
-#: gtk2_ardour/ardour_ui_ed.cc:540
+#: gtk2_ardour/ardour_ui_ed.cc:586
msgid "Remote ID assigned by User"
msgstr "Fernsteuerungs-ID vom Benutzer festgelegt"
-#: gtk2_ardour/ardour_ui_ed.cc:542
+#: gtk2_ardour/ardour_ui_ed.cc:588
msgid "Remote ID follows order of Mixer"
msgstr "Fernsteuerungs-ID aus Reihenfolge im Mixer"
-#: gtk2_ardour/ardour_ui_ed.cc:544
+#: gtk2_ardour/ardour_ui_ed.cc:590
msgid "Remote ID follows order of Editor"
msgstr "Fernsteuerungs-ID aus Reihenfolge im Editor"
-#: gtk2_ardour/ardour_ui_ed.cc:693
-#: gtk2_ardour/generic_pluginui.cc:168
-msgid "Controls"
-msgstr "Steuerelemente"
+#: gtk2_ardour/ardour_ui_ed.cc:593
+msgid "Auto Rebind Controls"
+msgstr "Controller automatisch anbinden"
-#: gtk2_ardour/ardour_ui_ed.cc:697
+#: gtk2_ardour/ardour_ui_ed.cc:747
msgid "Feedback"
msgstr "Feedback"
-#: gtk2_ardour/ardour_ui_ed.cc:803
+#: gtk2_ardour/ardour_ui_ed.cc:853
msgid "Clock"
msgstr "Zeitanzeige"
-#: gtk2_ardour/ardour_ui_options.cc:119
-#: gtk2_ardour/ardour_ui_options.cc:149
-#: gtk2_ardour/editor_actions.cc:874
-#: gtk2_ardour/editor_actions.cc:1233
-#: gtk2_ardour/editor_actions.cc:1246
-#: gtk2_ardour/editor_actions.cc:1310
-#: gtk2_ardour/engine_dialog.cc:887
-#: gtk2_ardour/audio_streamview.cc:172
-msgid "programming error: %1"
-msgstr "Programmierfehler: %1"
+#: gtk2_ardour/editor_edit_groups.cc:52
+msgid "Activate All"
+msgstr "Alle aktivieren"
-#: gtk2_ardour/ardour_ui_options.cc:228
-msgid "programming error: unknown solo model in ARDOUR_UI::set_solo_model: %1"
-msgstr "Programmierfehler: unbekannte Solo-Einstellung in ARDOUR_UI::set_solo_model: %1"
+#: gtk2_ardour/editor_edit_groups.cc:53
+msgid "Disable All"
+msgstr "Alle deaktivieren"
-#: gtk2_ardour/ardour_ui_options.cc:261
-msgid "programming error: unknown remote model in ARDOUR_UI::set_remote_model: %1"
-msgstr "Programmierfehler: unbekanntes Fernsteuerungsmodell in ARDOUR_UI::set_remote_model: %1"
+#: gtk2_ardour/editor_edit_groups.cc:55
+msgid "Add group"
+msgstr "Gruppe hinzufügen"
-#: gtk2_ardour/ardour_ui_options.cc:295
-msgid "programming error: unknown monitor model in ARDOUR_UI::set_monitor_model: %1"
-msgstr "Programmierfehler: unbekannte Monitoring-Einstellung in ARDOUR_UI::set_monitor_model: %1"
+#: gtk2_ardour/editor_edit_groups.cc:228
+msgid "unnamed"
+msgstr "unbenannt"
-#: gtk2_ardour/ardour_ui_options.cc:334
-msgid "programming error: unknown denormal model in ARDOUR_UI::set_denormal_model: %1"
-msgstr "Programmierfehler: unknown denormal model in ARDOUR_UI::set_denormal_model: %1"
+#: gtk2_ardour/editor_edit_groups.cc:257
+msgid "-all-"
+msgstr "-alle-"
-#: gtk2_ardour/ardour_ui_options.cc:699
-msgid "programming error: unknown file header format passed to ARDOUR_UI::map_file_data_format: %1"
-msgstr "Programmierfehler: unbekanntes Dateiheaderformat übergeben an ARDOUR_UI::map_file_data_format: %1"
+#: gtk2_ardour/redirect_automation_line.cc:53
+msgid "redirect automation created for non-plugin"
+msgstr "Redirect-Automation für ein nicht-Plugin erstellt"
-#: gtk2_ardour/ardour_ui_options.cc:735
-msgid "programming error: unknown file data format passed to ARDOUR_UI::map_file_data_format: %1"
-msgstr "Programmierfehler: unbekanntes Dateiformat übergeben an ARDOUR_UI::map_file_data_format: %1"
+#: gtk2_ardour/audio_time_axis.cc:237
+msgid "Fader"
+msgstr "Fader"
-#: gtk2_ardour/ardour_ui_options.cc:1086
-msgid "ST"
-msgstr "HT"
+#: gtk2_ardour/audio_time_axis.cc:242
+msgid "Pan"
+msgstr "Pan"
-#: gtk2_ardour/audio_clock.cc:1885
-#: gtk2_ardour/editor.cc:179
-#: gtk2_ardour/editor_rulers.cc:410
-msgid "Timecode"
-msgstr "Timecode"
+#: gtk2_ardour/audio_time_axis.cc:258
+msgid "Hide all crossfades"
+msgstr "Alle Crossfades verbergen"
-#: gtk2_ardour/audio_clock.cc:1886
-#: gtk2_ardour/editor.cc:178
-#: gtk2_ardour/editor_rulers.cc:422
-msgid "Bars:Beats"
-msgstr "Takte:Schläge"
+#: gtk2_ardour/audio_time_axis.cc:259
+msgid "Show all crossfades"
+msgstr "Alle Crossfades zeigen"
-#: gtk2_ardour/audio_clock.cc:1887
-msgid "Minutes:Seconds"
-msgstr "Minuten:Sekunden"
+#: gtk2_ardour/audio_time_axis.cc:267
+msgid "Show waveforms"
+msgstr "Wellenformen zeigen"
-#: gtk2_ardour/audio_clock.cc:1888
-#: gtk2_ardour/editor.cc:180
-#: gtk2_ardour/editor_rulers.cc:416
-msgid "Samples"
-msgstr "Samples"
+#: gtk2_ardour/audio_time_axis.cc:277
+msgid "Traditional"
+msgstr "Traditionell"
-#: gtk2_ardour/route_time_axis.cc:88
-msgid "m"
-msgstr "m"
+#: gtk2_ardour/audio_time_axis.cc:281
+msgid "Rectified"
+msgstr "Gleichgerichtet"
-#: gtk2_ardour/route_time_axis.cc:88
-msgid "s"
-msgstr "s"
+#: gtk2_ardour/audio_time_axis.cc:291
+msgid "Linear"
+msgstr "Linear"
-#: gtk2_ardour/route_time_axis.cc:88
-msgid "r"
-msgstr "r"
+#: gtk2_ardour/audio_time_axis.cc:294
+msgid "Logarithmic"
+msgstr "Logarithmisch"
-#: gtk2_ardour/route_time_axis.cc:92
-msgid "g"
-msgstr "g"
+#: gtk2_ardour/audio_time_axis.cc:313
+msgid "Waveform"
+msgstr "Wellenform"
-#: gtk2_ardour/route_time_axis.cc:93
-msgid "p"
-msgstr "w"
+#: gtk2_ardour/audio_time_axis.cc:385
+msgid "gain"
+msgstr "Gain"
+
+#: gtk2_ardour/audio_time_axis.cc:425
+msgid "pan"
+msgstr "Pan"
+
+#: gtk2_ardour/editor_imageframe.cc:624
+#: gtk2_ardour/editor_imageframe.cc:654
+msgid "programming error: no ImageFrameView selected"
+msgstr "Programmierfehler: kein ImageFrameView ausgewählt"
+
+#: gtk2_ardour/editor_imageframe.cc:847
+#: gtk2_ardour/editor_imageframe.cc:869
+msgid "programming error: no MarkerView selected"
+msgstr "Programmierfehler: kein MarkerView ausgewählt"
-#: gtk2_ardour/route_time_axis.cc:94
#: gtk2_ardour/automation_time_axis.cc:55
-#: gtk2_ardour/visual_time_axis.cc:73
msgid "h"
msgstr "h"
-#: gtk2_ardour/route_time_axis.cc:95
-msgid "a"
-msgstr "a"
+#: gtk2_ardour/automation_time_axis.cc:56
+msgid "clear"
+msgstr "Leeren"
-#: gtk2_ardour/route_time_axis.cc:96
-#: gtk2_ardour/visual_time_axis.cc:72
-msgid "v"
-msgstr "v"
+#: gtk2_ardour/automation_time_axis.cc:97
+msgid "track height"
+msgstr "Anzeigehöhe"
-#: gtk2_ardour/route_time_axis.cc:154
-#: gtk2_ardour/mixer_strip.cc:88
-msgid "Record"
-msgstr "Aufnahme"
+#: gtk2_ardour/automation_time_axis.cc:98
+msgid "automation state"
+msgstr "Automationsmodus"
-#: gtk2_ardour/route_time_axis.cc:168
-#: gtk2_ardour/editor_actions.cc:58
-#: gtk2_ardour/mixer_strip.cc:88
-#: gtk2_ardour/mixer_strip.cc:422
-msgid "Solo"
-msgstr "Solo"
+#: gtk2_ardour/automation_time_axis.cc:99
+msgid "clear track"
+msgstr "Spur zurücksetzen"
-#: gtk2_ardour/route_time_axis.cc:169
-#: gtk2_ardour/editor.cc:1647
-#: gtk2_ardour/editor.cc:1743
-#: gtk2_ardour/mixer_strip.cc:88
-#: gtk2_ardour/mixer_strip.cc:421
-#: gtk2_ardour/panner_ui.cc:404
-msgid "Mute"
-msgstr "Mute"
+#: gtk2_ardour/automation_time_axis.cc:100
+msgid "hide track"
+msgstr "Diese Spur verbergen"
-#: gtk2_ardour/route_time_axis.cc:170
-msgid "Edit Group"
-msgstr "Bearbeitungsgruppe"
+#: gtk2_ardour/automation_time_axis.cc:294
+msgid "clear automation"
+msgstr "Automation zurücksetzen"
-#: gtk2_ardour/route_time_axis.cc:171
-#: gtk2_ardour/visual_time_axis.cc:91
-msgid "Display Height"
-msgstr "Anzeigehöhe"
+#: gtk2_ardour/automation_time_axis.cc:427
+msgid "Height"
+msgstr "Höhe"
-#: gtk2_ardour/route_time_axis.cc:172
-msgid "Playlist"
-msgstr "Wiedergabeliste"
+#: gtk2_ardour/automation_time_axis.cc:429
+msgid "Hide"
+msgstr "Verbergen"
-#: gtk2_ardour/route_time_axis.cc:173
-#: gtk2_ardour/route_time_axis.cc:431
-msgid "Automation"
-msgstr "Automationen"
+#: gtk2_ardour/automation_time_axis.cc:431
+msgid "Clear"
+msgstr "Leeren"
-#: gtk2_ardour/route_time_axis.cc:174
-#: gtk2_ardour/visual_time_axis.cc:92
-msgid "Visual options"
-msgstr "Visuelle optionen"
+#: gtk2_ardour/automation_time_axis.cc:454
+msgid "State"
+msgstr "Automationssmodus"
-#: gtk2_ardour/route_time_axis.cc:175
-#: gtk2_ardour/visual_time_axis.cc:93
-msgid "Hide this track"
-msgstr "Diese Spur verbergen"
+#: gtk2_ardour/analysis_window.cc:46
+msgid "Signal source"
+msgstr "Signalquelle"
-#: gtk2_ardour/route_time_axis.cc:282
-#: gtk2_ardour/mixer_strip.cc:907
-msgid "No group"
-msgstr "keine Gruppe"
+#: gtk2_ardour/analysis_window.cc:47
+msgid "Selected ranges"
+msgstr "Ausgewählte Bereiche"
-#: gtk2_ardour/route_time_axis.cc:391
-msgid "Show all automation"
-msgstr "Alle Automationen zeigen"
+#: gtk2_ardour/analysis_window.cc:48
+msgid "Selected regions"
+msgstr "Ausgewählte Regionen"
-#: gtk2_ardour/route_time_axis.cc:394
-msgid "Show existing automation"
-msgstr "Verfügbare Automationen zeigen"
+#: gtk2_ardour/analysis_window.cc:50
+msgid "Display model"
+msgstr "Anzeigetyp"
-#: gtk2_ardour/route_time_axis.cc:397
-msgid "Hide all automation"
-msgstr "Automationen verbergen"
+#: gtk2_ardour/analysis_window.cc:51
+msgid "Composite graphs for each track"
+msgstr "Graphen für jede Spur einzeln"
-#: gtk2_ardour/route_time_axis.cc:400
-msgid "Plugins"
-msgstr "Plugins"
+#: gtk2_ardour/analysis_window.cc:52
+msgid "Composite graph of all tracks"
+msgstr "Graphen aller Spuren zusammenfassen"
-#: gtk2_ardour/route_time_axis.cc:421
-#: gtk2_ardour/automation_time_axis.cc:450
-#: gtk2_ardour/imageframe_time_axis.cc:254
-#: gtk2_ardour/marker_time_axis.cc:210
-msgid "Height"
-msgstr "Höhe"
+#: gtk2_ardour/analysis_window.cc:54
+msgid "Show frequency power range"
+msgstr "Leistungsspektrum anzeigen"
-#: gtk2_ardour/route_time_axis.cc:422
-#: gtk2_ardour/imageframe_time_axis.cc:255
-#: gtk2_ardour/marker_time_axis.cc:211
-#: gtk2_ardour/theme_manager.cc:52
-msgid "Color"
-msgstr "Farbe"
+#: gtk2_ardour/analysis_window.cc:55
+msgid "Normalize values"
+msgstr "Normalisieren"
-#: gtk2_ardour/route_time_axis.cc:430
-#: gtk2_ardour/mixer_strip.cc:995
-msgid "Remote Control ID"
-msgstr "ID für Fernsteuerung"
+#: gtk2_ardour/analysis_window.cc:59
+#: gtk2_ardour/analysis_window.cc:60
+msgid "FFT analysis window"
+msgstr "FFT - Analysefenster"
-#: gtk2_ardour/route_time_axis.cc:447
-msgid "Align with existing material"
-msgstr "An vorhandenem Material ausrichten"
+#: gtk2_ardour/analysis_window.cc:67
+msgid "Track"
+msgstr "Spur"
-#: gtk2_ardour/route_time_axis.cc:453
-msgid "Align with capture time"
-msgstr "An Aufnahmezeit ausrichten"
+#: gtk2_ardour/analysis_window.cc:68
+msgid "Show"
+msgstr "Anzeigen"
-#: gtk2_ardour/route_time_axis.cc:460
-msgid "Alignment"
-msgstr "Ausrichtung"
+#: gtk2_ardour/analysis_window.cc:135
+msgid "Re-analyze data"
+msgstr "Daten erneut analysieren"
-#: gtk2_ardour/route_time_axis.cc:464
-msgid "Normal mode"
-msgstr "Normaler Modus"
+#: gtk2_ardour/editor_rulers.cc:353
+msgid "New location marker"
+msgstr "Neuer Positionsmarker"
-#: gtk2_ardour/route_time_axis.cc:467
-msgid "Tape mode"
-msgstr "Tape-Modus"
+#: gtk2_ardour/editor_rulers.cc:354
+msgid "Clear all locations"
+msgstr "Alle Positionsmarker entfernen"
-#: gtk2_ardour/route_time_axis.cc:484
-#: gtk2_ardour/editor.cc:502
-#: gtk2_ardour/editor_actions.cc:82
-#: gtk2_ardour/mixer_strip.cc:980
-#: gtk2_ardour/mixer_ui.cc:116
-msgid "Active"
-msgstr "Aktiv"
+#: gtk2_ardour/editor_rulers.cc:355
+msgid "Unhide locations"
+msgstr "Positionen anzeigen"
-#: gtk2_ardour/route_time_axis.cc:489
-#: gtk2_ardour/editor.cc:1852
-#: gtk2_ardour/editor.cc:3730
-#: gtk2_ardour/editor_actions.cc:463
-#: gtk2_ardour/editor_markers.cc:596
-#: gtk2_ardour/editor_markers.cc:652
-#: gtk2_ardour/imageframe_time_axis.cc:258
-#: gtk2_ardour/location_ui.cc:58
-#: gtk2_ardour/marker_time_axis.cc:214
-#: gtk2_ardour/mixer_strip.cc:999
+#: gtk2_ardour/editor_rulers.cc:360
+msgid "Clear all ranges"
+msgstr "Alle Bereiche entfernen"
+
+#: gtk2_ardour/editor_rulers.cc:361
+msgid "Unhide ranges"
+msgstr "Bereiche anzeigen"
+
+#: gtk2_ardour/editor_rulers.cc:371
+msgid "New CD track marker"
+msgstr "Neuer CD-Track Marker"
+
+#: gtk2_ardour/editor_rulers.cc:376
+msgid "New Tempo"
+msgstr "Tempowechsel einfügen..."
+
+#: gtk2_ardour/editor_rulers.cc:377
+msgid "Clear tempo"
+msgstr "Tempo zurücksetzen"
+
+#: gtk2_ardour/editor_rulers.cc:382
+msgid "New Meter"
+msgstr "Taktwechsel einfügen..."
+
+#: gtk2_ardour/editor_rulers.cc:383
+msgid "Clear meter"
+msgstr "Taktart zurücksetzen"
+
+#: gtk2_ardour/gain_automation_time_axis.cc:64
+msgid "add gain automation event"
+msgstr "Punkt in die Lautstärkekurve einfügen"
+
+#: gtk2_ardour/editor_audio_import.cc:73
+#: gtk2_ardour/editor_audio_import.cc:94
+msgid "You can't import or embed an audiofile until you have a session loaded."
+msgstr "Sie können keine Audiodatei importieren, solange kein Projekt geladen ist."
+
+#: gtk2_ardour/editor_audio_import.cc:79
+#: gtk2_ardour/editor_audio_import.cc:112
+msgid "Add existing audio"
+msgstr "Audio importieren"
+
+#: gtk2_ardour/editor_audio_import.cc:224
+msgid "The session already contains a source file named %1. This file will be imported as a new file, please confirm."
+msgstr "Das Projekt enthält bereits eine Datei %1. Diese Datei wird neu importiert."
+
+#: gtk2_ardour/editor_audio_import.cc:226
+msgid "A source file %1 already exists. This operation will not update that source but import the file %2 as a new source, please confirm."
+msgstr "Die Datei %1 existiert bereits. Dieser Vorgang wird die ursprüngliche Datei nicht beibehalten, sondern die Datei %2 als neue Datei importiern."
+
+#: gtk2_ardour/editor_audio_import.cc:498
+msgid "importing %1"
+msgstr "importiere %1"
+
+#: gtk2_ardour/editor_audio_import.cc:503
+msgid "Cancel Import"
+msgstr "Importieren Abbrechen"
+
+#: gtk2_ardour/editor_audio_import.cc:607
+msgid "Editor: cannot open file \"%1\", (%2)"
+msgstr "Editor: kann die Datei \"%1\" nicht öffnen (%2)"
+
+#: gtk2_ardour/editor_audio_import.cc:615
+msgid "Cancel entire import"
+msgstr "Importieren Abbrechen"
+
+#: gtk2_ardour/editor_audio_import.cc:616
+msgid "Don't embed it"
+msgstr "Nicht einbetten"
+
+#: gtk2_ardour/editor_audio_import.cc:617
+msgid "Embed all without questions"
+msgstr "Alle Importieren ohne nachzufragen"
+
+#: gtk2_ardour/editor_audio_import.cc:620
+#: gtk2_ardour/editor_audio_import.cc:647
+msgid ""
+"%1\n"
+"This audiofile's sample rate doesn't match the session sample rate!"
+msgstr ""
+"%1\n"
+"Die Samplerate dieser Audiodatei unterscheidet sich von der Samplerate dieses Projekts."
+
+#: gtk2_ardour/editor_audio_import.cc:643
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: gtk2_ardour/editor_audio_import.cc:644
+msgid "Embed it anyway"
+msgstr "Trotzdem importieren"
+
+#: gtk2_ardour/editor_audio_import.cc:692
+msgid "could not open %1"
+msgstr "Konnte \"%s\" nicht öffnen."
+
+#: gtk2_ardour/editor_audio_import.cc:822
+msgid "insert sndfile"
+msgstr "Audiodatei einfügen"
+
+#: gtk2_ardour/audio_streamview.cc:171
+msgid "programming error: %1"
+msgstr "Programmierfehler: %1"
+
+#: gtk2_ardour/marker_time_axis.cc:209
msgid "Remove"
msgstr "Löschen"
-#: gtk2_ardour/route_time_axis.cc:514
-#: gtk2_ardour/route_time_axis.cc:569
-#: gtk2_ardour/route_time_axis.cc:838
-#: gtk2_ardour/editor_actions.cc:1297
-msgid "programming error: %1 %2"
-msgstr "Programmierfehler: %1 %2"
+#: gtk2_ardour/marker_time_axis.cc:236
+msgid "1 seconds"
+msgstr "1 Sekunde"
-#: gtk2_ardour/route_time_axis.cc:862
-msgid "Name for playlist"
-msgstr "Name für Wiedergabeliste"
+#: gtk2_ardour/marker_time_axis.cc:237
+msgid "1.5 seconds"
+msgstr "1,5 Sekunden"
-#: gtk2_ardour/route_time_axis.cc:864
-#: gtk2_ardour/route_time_axis.cc:1340
-#: gtk2_ardour/editor.cc:1714
-#: gtk2_ardour/editor.cc:3735
-#: gtk2_ardour/editor_markers.cc:590
-#: gtk2_ardour/editor_markers.cc:1022
-#: gtk2_ardour/editor_mouse.cc:5097
-#: gtk2_ardour/imageframe_time_axis.cc:247
-#: gtk2_ardour/marker_time_axis.cc:207
-#: gtk2_ardour/mixer_strip.cc:978
-#: gtk2_ardour/redirect_box.cc:860
-#: gtk2_ardour/redirect_box.cc:1192
-#: gtk2_ardour/route_ui.cc:814
-#: gtk2_ardour/visual_time_axis.cc:330
-msgid "Rename"
-msgstr "Umbenennen"
+#: gtk2_ardour/marker_time_axis.cc:238
+msgid "2 seconds"
+msgstr "2 Sekunden"
-#: gtk2_ardour/route_time_axis.cc:906
-#: gtk2_ardour/route_time_axis.cc:952
-msgid "Name for Playlist"
-msgstr "Name für Wiedergabeliste"
+#: gtk2_ardour/marker_time_axis.cc:239
+msgid "2.5 seconds"
+msgstr "2,5 Sekunden"
-#: gtk2_ardour/route_time_axis.cc:1155
-#: gtk2_ardour/visual_time_axis.cc:340
-#: gtk2_ardour/visual_time_axis.cc:387
-msgid "A track already exists with that name"
-msgstr "Es existiert bereits eine Spur mit diesem Namen"
+#: gtk2_ardour/marker_time_axis.cc:240
+msgid "3 seconds"
+msgstr "3 Sekunden"
-#: gtk2_ardour/route_time_axis.cc:1344
-msgid "New Copy"
-msgstr "Neue Kopie"
+#: gtk2_ardour/marker_time_axis.cc:245
+msgid "Duration (sec)"
+msgstr "Dauer (Sek)"
-#: gtk2_ardour/route_time_axis.cc:1346
-msgid "Clear Current"
-msgstr "Ausgewählte zurücksetzen"
+#: gtk2_ardour/marker_time_axis.cc:248
+msgid "Remove Marker"
+msgstr "Marker entfernen"
-#: gtk2_ardour/route_time_axis.cc:1349
-msgid "Select from all ..."
-msgstr "Aus allen auswählen..."
+#: gtk2_ardour/marker_time_axis.cc:250
+msgid "Marker"
+msgstr "Marker"
-#: gtk2_ardour/route_time_axis.cc:1554
-#: gtk2_ardour/editor.cc:1368
-#: gtk2_ardour/selection.cc:694
-#: gtk2_ardour/selection.cc:733
-msgid "programming error: "
-msgstr "Programmierfehler:"
+#: gtk2_ardour/marker_time_axis.cc:251
+msgid "Rename Track"
+msgstr "Spur umbenennen"
-#: gtk2_ardour/audio_time_axis.cc:214
-msgid "Fader"
-msgstr "Fader"
+#: gtk2_ardour/redirect_automation_time_axis.cc:95
+msgid "add automation event to "
+msgstr "Automationspunkt einfügen für"
-#: gtk2_ardour/audio_time_axis.cc:219
-msgid "Pan"
-msgstr "Pan"
+#: gtk2_ardour/export_session_dialog.cc:29
+msgid "Export to File"
+msgstr "Als Audiodatei exportieren"
-#: gtk2_ardour/audio_time_axis.cc:235
-msgid "Hide all crossfades"
-msgstr "Alle Crossfades verbergen"
+#: gtk2_ardour/new_session_dialog.cc:51
+msgid "Name :"
+msgstr "Name :"
-#: gtk2_ardour/audio_time_axis.cc:236
-msgid "Show all crossfades"
-msgstr "Alle Crossfades zeigen"
+#: gtk2_ardour/new_session_dialog.cc:55
+#: gtk2_ardour/new_session_dialog.cc:56
+#: gtk2_ardour/new_session_dialog.cc:57
+#: gtk2_ardour/new_session_dialog.cc:58
+msgid "channels"
+msgstr "Kanäle"
-#: gtk2_ardour/audio_time_axis.cc:244
-msgid "Show waveforms"
-msgstr "Wellenformen zeigen"
+#: gtk2_ardour/new_session_dialog.cc:76
+msgid "<b>Busses</b>"
+msgstr "<b>Busse</b>"
-#: gtk2_ardour/audio_time_axis.cc:254
-msgid "Traditional"
-msgstr "Traditionell"
+#: gtk2_ardour/new_session_dialog.cc:77
+msgid "<b>Inputs</b>"
+msgstr "<b>Eingänge</b>"
-#: gtk2_ardour/audio_time_axis.cc:258
-msgid "Rectified"
-msgstr "Gleichgerichtet"
+#: gtk2_ardour/new_session_dialog.cc:78
+msgid "<b>Outputs</b>"
+msgstr "<b>Ausgänge</b>"
-#: gtk2_ardour/audio_time_axis.cc:268
-#: gtk2_ardour/editor.cc:1334
-#: gtk2_ardour/editor.cc:1337
-#: gtk2_ardour/editor.cc:1356
-#: gtk2_ardour/editor.cc:1359
-msgid "Linear"
-msgstr "Linear"
+#: gtk2_ardour/new_session_dialog.cc:80
+msgid "Create Folder In :"
+msgstr "Verzeichnis erstellen in:"
-#: gtk2_ardour/audio_time_axis.cc:271
-msgid "Logarithmic"
-msgstr "Logarithmisch"
+#: gtk2_ardour/new_session_dialog.cc:82
+msgid "Template :"
+msgstr "Vorlage :"
-#: gtk2_ardour/audio_time_axis.cc:290
-msgid "Waveform"
-msgstr "Wellenform"
+#: gtk2_ardour/new_session_dialog.cc:84
+msgid "Create Monitor Bus"
+msgstr "Monitor Bus erstellen"
-#: gtk2_ardour/audio_time_axis.cc:362
-msgid "gain"
-msgstr "Gain"
+#: gtk2_ardour/new_session_dialog.cc:91
+msgid "Create Master Bus"
+msgstr "Master Bus erstellen"
-#: gtk2_ardour/audio_time_axis.cc:402
-msgid "pan"
-msgstr "Pan"
+#: gtk2_ardour/new_session_dialog.cc:93
+msgid "Automatically Connect to Physical Inputs"
+msgstr "Eingänge automatisch mit Audioeingängen verbinden"
+
+#: gtk2_ardour/new_session_dialog.cc:94
+#: gtk2_ardour/new_session_dialog.cc:107
+msgid "Use only"
+msgstr "Benutze nur"
+
+#: gtk2_ardour/new_session_dialog.cc:106
+msgid "Automatically Connect Outputs"
+msgstr "Ausgänge automatisch verbinden"
-#: gtk2_ardour/automation_line.cc:794
+#: gtk2_ardour/new_session_dialog.cc:115
+msgid "... to Master Bus"
+msgstr "... mit Master Bus"
+
+#: gtk2_ardour/new_session_dialog.cc:116
+msgid "... to Physical Outputs"
+msgstr "... mit Audioausgängen"
+
+#: gtk2_ardour/new_session_dialog.cc:122
+msgid "Advanced Options"
+msgstr "Erweiterte Einstellungen"
+
+#: gtk2_ardour/new_session_dialog.cc:130
+msgid "Recent:"
+msgstr "Zuletzt verwendet:"
+
+#: gtk2_ardour/new_session_dialog.cc:167
+msgid "Browse:"
+msgstr "Durchsuchen:"
+
+#: gtk2_ardour/new_session_dialog.cc:379
+msgid "Session Control"
+msgstr "Projektübersicht"
+
+#: gtk2_ardour/new_session_dialog.cc:391
+msgid "Recent Sessions"
+msgstr "Zuletzt verwendete Projekte"
+
+#: gtk2_ardour/new_session_dialog.cc:419
+msgid "select template"
+msgstr "Vorlage auswählen"
+
+#: gtk2_ardour/new_session_dialog.cc:425
+msgid "select session file"
+msgstr "Projektdatei auswählen"
+
+#: gtk2_ardour/new_session_dialog.cc:434
+msgid "select directory"
+msgstr "Verzeichnis auswählen"
+
+#: gtk2_ardour/new_session_dialog.cc:493
+msgid "Audio Setup"
+msgstr "Audio-Einstellungen"
+
+#: gtk2_ardour/new_session_dialog.cc:517
+msgid "New Session"
+msgstr "Neues Projekt"
+
+#: gtk2_ardour/new_session_dialog.cc:522
+msgid "Open Session"
+msgstr "Projekt öffnen"
+
+#: gtk2_ardour/panner_ui.cc:57
+#: gtk2_ardour/panner_ui.cc:272
+msgid "link"
+msgstr "link"
+
+#: gtk2_ardour/panner_ui.cc:70
+msgid "Pan automation mode"
+msgstr "Pan-Automationsmodus"
+
+#: gtk2_ardour/panner_ui.cc:71
+msgid "Pan automation type"
+msgstr "Pan-Automationstyp"
+
+#: gtk2_ardour/panner_ui.cc:81
+msgid "panning link control"
+msgstr "Pan-Regler verbinden"
+
+#: gtk2_ardour/panner_ui.cc:83
+msgid "panning link direction"
+msgstr "Richtung der Verbindung"
+
+#: gtk2_ardour/panner_ui.cc:275
+msgid "L"
+msgstr "L"
+
+#: gtk2_ardour/panner_ui.cc:395
+#, c-format
+msgid "panner for channel %zu"
+msgstr "Pan-Regler für Kanal %zu"
+
+#: gtk2_ardour/panner_ui.cc:466
+msgid "Mute"
+msgstr "Mute"
+
+#: gtk2_ardour/panner_ui.cc:474
+msgid "Bypass"
+msgstr "Bypass"
+
+#: gtk2_ardour/panner_ui.cc:482
+msgid "Reset"
+msgstr "Zurücksetzen"
+
+#: gtk2_ardour/panner_ui.cc:484
+msgid "Reset all"
+msgstr "Alle zurücksetzen"
+
+#: gtk2_ardour/opts.cc:50
+msgid "Usage: "
+msgstr "Aufruf:"
+
+#: gtk2_ardour/opts.cc:51
+msgid " -v, --version Show version information\n"
+msgstr " -v, --version Versionsinformation ausgeben\n"
+
+#: gtk2_ardour/opts.cc:52
+msgid " -h, --help Print this message\n"
+msgstr " -h, --help Diese Hinweise\n"
+
+#: gtk2_ardour/opts.cc:53
+msgid " -b, --bindings Print all possible keyboard binding names\n"
+msgstr " -b, --bindings Alle möglichen Tastenzuweisungsnamen ausgeben\n"
+
+#: gtk2_ardour/opts.cc:54
+msgid " -c, --name name Use a specific jack client name, default is ardour\n"
+msgstr " -c, --name name Benutze spezielle JACK-Clientkennung, Standard: ardour\n"
+
+#: gtk2_ardour/opts.cc:55
+msgid " -d, --disable-plugins Disable all plugins in an existing session\n"
+msgstr "-d, --disable-plugins Alle Plugins eines bestehenden Projekts deaktivieren\n"
+
+#: gtk2_ardour/opts.cc:56
+msgid " -n, --show-splash Show splash screen\n"
+msgstr " -n, --show-splash Zeige Splashscreen\n"
+
+#: gtk2_ardour/opts.cc:57
+msgid " -m, --menus file Use \"file\" for Ardour menus\n"
+msgstr " -m, --menus file Benutze \"file\" für Ardour-Menüs\n"
+
+#: gtk2_ardour/opts.cc:58
+msgid " -N, --new session-name Create a new session from the command line\n"
+msgstr " -N, --new session-name Erstelle neues Projekt aus der Kommandozeile\n"
+
+#: gtk2_ardour/opts.cc:59
+msgid " -O, --no-hw-optimizations Disable h/w specific optimizations\n"
+msgstr " -O, --no-hw-optimizations Hardwarespezifische Optimierungen deaktivieren\n"
+
+#: gtk2_ardour/opts.cc:60
+msgid " -S, --sync\t Draw the gui synchronously \n"
+msgstr " -S, --sync\t Zeichne die GUI synchron \n"
+
+#: gtk2_ardour/opts.cc:62
+msgid " -V, --novst Do not use VST support\n"
+msgstr " -V, --novst VST-Unterstützung ausschalten\n"
+
+#: gtk2_ardour/opts.cc:64
+msgid " [session-name] Name of session to load\n"
+msgstr " [session-name] Name des zu ladenden Projekts\n"
+
+#: gtk2_ardour/opts.cc:65
+msgid " -C, --curvetest filename Curve algorithm debugger\n"
+msgstr " -C, --curvetest filename Kurvenalgorithmus debuggen\n"
+
+#: gtk2_ardour/opts.cc:66
+msgid " -k, --keybindings filename Name of key bindings to load (default is ~/.ardour2/ardour.bindings)\n"
+msgstr " -k, --keybindings filename Dateiname für die Tastaturbelegungen (Standard: ~/.ardour2/ardour.bindings)\n"
+
+#: gtk2_ardour/ardour_ui_options.cc:228
+msgid "programming error: unknown solo model in ARDOUR_UI::set_solo_model: %1"
+msgstr "Programmierfehler: unbekannte Solo-Einstellung in ARDOUR_UI::set_solo_model: %1"
+
+#: gtk2_ardour/ardour_ui_options.cc:261
+msgid "programming error: unknown remote model in ARDOUR_UI::set_remote_model: %1"
+msgstr "Programmierfehler: unbekanntes Fernsteuerungsmodell in ARDOUR_UI::set_remote_model: %1"
+
+#: gtk2_ardour/ardour_ui_options.cc:295
+msgid "programming error: unknown monitor model in ARDOUR_UI::set_monitor_model: %1"
+msgstr "Programmierfehler: unbekannte Monitoring-Einstellung in ARDOUR_UI::set_monitor_model: %1"
+
+#: gtk2_ardour/ardour_ui_options.cc:334
+msgid "programming error: unknown denormal model in ARDOUR_UI::set_denormal_model: %1"
+msgstr "Programmierfehler: unknown denormal model in ARDOUR_UI::set_denormal_model: %1"
+
+#: gtk2_ardour/ardour_ui_options.cc:781
+msgid "programming error: unknown file header format passed to ARDOUR_UI::map_file_data_format: %1"
+msgstr "Programmierfehler: unbekanntes Dateiheaderformat übergeben an ARDOUR_UI::map_file_data_format: %1"
+
+#: gtk2_ardour/ardour_ui_options.cc:817
+msgid "programming error: unknown file data format passed to ARDOUR_UI::map_file_data_format: %1"
+msgstr "Programmierfehler: unbekanntes Dateiformat übergeben an ARDOUR_UI::map_file_data_format: %1"
+
+#: gtk2_ardour/ardour_ui_options.cc:1180
+msgid "ST"
+msgstr "HT"
+
+#: gtk2_ardour/time_axis_view_item.cc:327
+msgid "new duration %1 frames is out of bounds for %2"
+msgstr "Neue Dauer %1 Frames ist außerhalb des erlaubten Bereichs %2"
+
+#: gtk2_ardour/about.cc:201
+msgid "Copyright (C) 1999-2008 Paul Davis\n"
+msgstr "Copyright (C) 1999-2008 Paul Davis\n"
+
+#: gtk2_ardour/about.cc:202
+msgid ""
+"Ardour comes with ABSOLUTELY NO WARRANTY\n"
+"This is free software, and you are welcome to redistribute it\n"
+"under certain conditions; see the file COPYING for details.\n"
+msgstr ""
+"Ardour wird Ihnen OHNE JEGLICHE GEWÄHRLEISTUNG zur Verfügung gestellt.\n"
+"Dies ist freie Software und Sie dürfen sie gerne weiterverbreiten,\n"
+"solange Sie sich an die Bedingungen, die in der Datei COPYING aufgeführt sind halten.\n"
+
+#: gtk2_ardour/about.cc:207
+msgid "visit http://www.ardour.org/"
+msgstr "besuchen Sie http://www.ardour.org"
+
+#: gtk2_ardour/about.cc:208
+msgid ""
+"%1\n"
+"(built from revision %2)"
+msgstr ""
+"%1\n"
+"(Aus Revision %2 erstellt)"
+
+#: gtk2_ardour/pan_automation_time_axis.cc:69
+msgid "You need to select which line to edit"
+msgstr "Sie müssen die entsprechende Automationslinie auswählen"
+
+#: gtk2_ardour/pan_automation_time_axis.cc:90
+msgid "add pan automation event"
+msgstr "Pan-Automationspunkt einfügen"
+
+#: gtk2_ardour/automation_line.cc:610
+msgid "Ignoring illegal points on AutomationLine \"%1\""
+msgstr "Unzulässige Automationspunkte werden ignoriert: \"%1\""
+
+#: gtk2_ardour/automation_line.cc:800
msgid "automation event move"
msgstr "Automationspunkt bewegen"
-#: gtk2_ardour/automation_line.cc:796
+#: gtk2_ardour/automation_line.cc:802
msgid "automation range drag"
msgstr "Automationsbereich bewegen"
-#: gtk2_ardour/automation_line.cc:1021
-#: gtk2_ardour/region_gain_line.cc:83
+#: gtk2_ardour/automation_line.cc:1027
msgid "remove control point"
msgstr "Automationspunkt entfernen"
-#: gtk2_ardour/automation_time_axis.cc:56
-#: gtk2_ardour/editor_ops.cc:3404
-msgid "clear"
-msgstr "Leeren"
+#: gtk2_ardour/editor_route_list.cc:369
+#: gtk2_ardour/mixer_ui.cc:917
+msgid "Show All"
+msgstr "Alles zeigen"
-#: gtk2_ardour/automation_time_axis.cc:97
-msgid "track height"
-msgstr "Anzeigehöhe"
+#: gtk2_ardour/editor_route_list.cc:370
+#: gtk2_ardour/mixer_ui.cc:918
+msgid "Hide All"
+msgstr "Alle verbergen"
-#: gtk2_ardour/automation_time_axis.cc:98
-msgid "automation state"
-msgstr "Automationsmodus"
+#: gtk2_ardour/editor_route_list.cc:371
+#: gtk2_ardour/mixer_ui.cc:919
+msgid "Show All Audio Tracks"
+msgstr "Zeige alle Audio-Spuren"
-#: gtk2_ardour/automation_time_axis.cc:99
-msgid "clear track"
-msgstr "Spur zurücksetzen"
+#: gtk2_ardour/editor_route_list.cc:372
+#: gtk2_ardour/mixer_ui.cc:920
+msgid "Hide All Audio Tracks"
+msgstr "Verberge alle Audio-Spuren"
-#: gtk2_ardour/automation_time_axis.cc:100
-msgid "hide track"
-msgstr "Diese Spur verbergen"
+#: gtk2_ardour/editor_route_list.cc:373
+#: gtk2_ardour/mixer_ui.cc:921
+msgid "Show All Audio Busses"
+msgstr "Zeige alle Audio-Busse"
-#: gtk2_ardour/automation_time_axis.cc:207
-#: gtk2_ardour/automation_time_axis.cc:236
-#: gtk2_ardour/automation_time_axis.cc:461
-#: gtk2_ardour/gain_meter.cc:160
-#: gtk2_ardour/generic_pluginui.cc:332
-#: gtk2_ardour/generic_pluginui.cc:579
-#: gtk2_ardour/panner_ui.cc:88
-msgid "Manual"
-msgstr "Manuell"
+#: gtk2_ardour/editor_route_list.cc:374
+#: gtk2_ardour/mixer_ui.cc:922
+msgid "Hide All Audio Busses"
+msgstr "Verberge alle Audio-Busse"
-#: gtk2_ardour/automation_time_axis.cc:209
-#: gtk2_ardour/automation_time_axis.cc:247
-#: gtk2_ardour/automation_time_axis.cc:465
-#: gtk2_ardour/editor.cc:1931
-#: gtk2_ardour/editor.cc:2014
-#: gtk2_ardour/gain_meter.cc:162
-#: gtk2_ardour/generic_pluginui.cc:335
-#: gtk2_ardour/generic_pluginui.cc:581
-#: gtk2_ardour/panner_ui.cc:90
-msgid "Play"
-msgstr "Wiedergabe"
+#: gtk2_ardour/editor_timefx.cc:71
+msgid "Quick but Ugly"
+msgstr "Quick but Ugly"
-#: gtk2_ardour/automation_time_axis.cc:211
-#: gtk2_ardour/automation_time_axis.cc:258
-#: gtk2_ardour/automation_time_axis.cc:469
-#: gtk2_ardour/gain_meter.cc:164
-#: gtk2_ardour/generic_pluginui.cc:338
-#: gtk2_ardour/generic_pluginui.cc:583
-#: gtk2_ardour/panner_ui.cc:92
-msgid "Write"
-msgstr "Write"
+#: gtk2_ardour/editor_timefx.cc:72
+msgid "Skip Anti-aliasing"
+msgstr "Ãœberspringe Anti-Aliasing"
-#: gtk2_ardour/automation_time_axis.cc:213
-#: gtk2_ardour/automation_time_axis.cc:269
-#: gtk2_ardour/automation_time_axis.cc:473
-#: gtk2_ardour/gain_meter.cc:166
-#: gtk2_ardour/generic_pluginui.cc:341
-#: gtk2_ardour/generic_pluginui.cc:585
-#: gtk2_ardour/panner_ui.cc:94
-msgid "Touch"
-msgstr "Touch"
+#: gtk2_ardour/editor_timefx.cc:73
+msgid "Contents:"
+msgstr "Inhalt:"
-#: gtk2_ardour/automation_time_axis.cc:280
-#: gtk2_ardour/generic_pluginui.cc:344
-msgid "???"
-msgstr "???"
+#: gtk2_ardour/editor_timefx.cc:74
+msgid "Strict Linear"
+msgstr "Linear"
-#: gtk2_ardour/automation_time_axis.cc:294
-msgid "clear automation"
-msgstr "Automation zurücksetzen"
+#: gtk2_ardour/editor_timefx.cc:82
+msgid "Pitch Shift"
+msgstr "Pitch-Shift"
-#: gtk2_ardour/automation_time_axis.cc:452
-#: gtk2_ardour/editor_actions.cc:461
-#: gtk2_ardour/editor_markers.cc:588
-msgid "Hide"
-msgstr "Verbergen"
+#: gtk2_ardour/editor_timefx.cc:84
+msgid "Time Stretch"
+msgstr "Time-Stretch"
-#: gtk2_ardour/automation_time_axis.cc:454
-#: gtk2_ardour/crossfade_edit.cc:77
-#: gtk2_ardour/redirect_box.cc:1180
-#: gtk2_ardour/connection_editor.cc:56
-msgid "Clear"
-msgstr "Leeren"
+#: gtk2_ardour/editor_timefx.cc:100
+msgid "Octaves"
+msgstr "Oktaven"
-#: gtk2_ardour/automation_time_axis.cc:477
-msgid "State"
-msgstr "Automationssmodus"
+#: gtk2_ardour/editor_timefx.cc:104
+msgid "Semitones (12TET)"
+msgstr "Halbtöne"
-#: gtk2_ardour/canvas-imageframe.c:104
-msgid "pixbuf"
-msgstr ""
+#: gtk2_ardour/editor_timefx.cc:108
+msgid "Cents"
+msgstr "Cents"
-#: gtk2_ardour/canvas-imageframe.c:105
-msgid "the pixbuf"
-msgstr ""
+#: gtk2_ardour/editor_timefx.cc:114
+msgid "Shift"
+msgstr "Shift"
-#: gtk2_ardour/canvas-imageframe.c:110
-msgid "x"
-msgstr ""
+#: gtk2_ardour/editor_timefx.cc:149
+msgid "Stretch/Shrink"
+msgstr "Stretch/Shrink"
-#: gtk2_ardour/canvas-imageframe.c:111
-#: gtk2_ardour/canvas-simpleline.c:111
-#: gtk2_ardour/canvas-simplerect.c:107
-msgid "x coordinate of upper left corner of rect"
-msgstr ""
+#: gtk2_ardour/editor_timefx.cc:324
+msgid "timefx cannot be started - thread creation error"
+msgstr "Time-Stretch konnte nicht gestartet werden - Fehler beim erstellen des Threads"
-#: gtk2_ardour/canvas-imageframe.c:120
-msgid "y"
-msgstr ""
+#: gtk2_ardour/editor_timefx.cc:405
+msgid "pitch shift"
+msgstr "pitch-shift"
-#: gtk2_ardour/canvas-imageframe.c:121
-#: gtk2_ardour/canvas-simpleline.c:121
-#: gtk2_ardour/canvas-simplerect.c:117
-msgid "y coordinate of upper left corner of rect "
-msgstr ""
+#: gtk2_ardour/editor_timefx.cc:405
+msgid "time stretch"
+msgstr "Time-Stretch"
-#: gtk2_ardour/canvas-imageframe.c:129
-msgid "width"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:59
+#: gtk2_ardour/io_selector.cc:749
+msgid "OK"
+msgstr "OK"
-#: gtk2_ardour/canvas-imageframe.c:130
-msgid "the width"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:61
+#: gtk2_ardour/io_selector.cc:751
+msgid "Rescan"
+msgstr "Auffrischen"
-#: gtk2_ardour/canvas-imageframe.c:139
-msgid "drawwidth"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:69
+msgid "%1 input"
+msgstr "%1 Eingang"
-#: gtk2_ardour/canvas-imageframe.c:140
-msgid "drawn width"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:71
+msgid "%1 output"
+msgstr "%1 Ausgang"
-#: gtk2_ardour/canvas-imageframe.c:148
-msgid "height"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:143
+msgid "Inputs"
+msgstr "Eingänge"
-#: gtk2_ardour/canvas-imageframe.c:149
-msgid "the height"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:143
+msgid "Outputs"
+msgstr "Ausgänge"
-#: gtk2_ardour/canvas-imageframe.c:157
-msgid "anchor"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:144
+msgid "Add Input"
+msgstr "Hinzufügen"
-#: gtk2_ardour/canvas-imageframe.c:158
-msgid "the anchor"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:144
+msgid "Add Output"
+msgstr "Hinzufügen"
-#: gtk2_ardour/canvas-simpleline.c:110
-#: gtk2_ardour/canvas-simplerect.c:106
-msgid "x1"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:145
+msgid "Remove Input"
+msgstr "Entfernen"
-#: gtk2_ardour/canvas-simpleline.c:120
-#: gtk2_ardour/canvas-simplerect.c:116
-msgid "y1"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:145
+msgid "Remove Output"
+msgstr "Entfernen"
-#: gtk2_ardour/canvas-simpleline.c:131
-#: gtk2_ardour/canvas-simplerect.c:127
-msgid "x2"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:146
+msgid "Disconnect All"
+msgstr "Alle trennen"
-#: gtk2_ardour/canvas-simpleline.c:132
-#: gtk2_ardour/canvas-simplerect.c:128
-msgid "x coordinate of lower right corner of rect"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:160
+msgid "Available connections"
+msgstr "Verfügbare Verbindungen"
-#: gtk2_ardour/canvas-simpleline.c:141
-#: gtk2_ardour/canvas-simplerect.c:137
-msgid "y2"
-msgstr ""
+#: gtk2_ardour/io_selector.cc:550
+#: gtk2_ardour/io_selector.cc:561
+msgid "There are no more JACK ports available."
+msgstr "Es sind keine weiteren JACK Ports verfügbar."
-#: gtk2_ardour/canvas-simpleline.c:142
-#: gtk2_ardour/canvas-simplerect.c:138
-msgid "y coordinate of lower right corner of rect "
-msgstr ""
+#: gtk2_ardour/io_selector.cc:755
+msgid "ardour: "
+msgstr "ardour: "
-#: gtk2_ardour/canvas-simpleline.c:150
-msgid "color rgba"
-msgstr ""
+#: gtk2_ardour/editor_selection_list.cc:180
+msgid "Name for Chunk:"
+msgstr "Name für Abschnitt:"
-#: gtk2_ardour/canvas-simpleline.c:151
-msgid "color of line"
-msgstr ""
+#: gtk2_ardour/editor_selection_list.cc:183
+msgid "Create Chunk"
+msgstr "Abschnitt erzeugen"
-#: gtk2_ardour/canvas-simplerect.c:148
-msgid "outline pixels"
-msgstr ""
+#: gtk2_ardour/editor_selection_list.cc:183
+msgid "Forget it"
+msgstr "Abbrechen"
-#: gtk2_ardour/canvas-simplerect.c:149
-msgid "width in pixels of outline"
-msgstr ""
+#: gtk2_ardour/editor_selection_list.cc:206
+msgid "No selectable material found in the currently selected time range"
+msgstr "Konnte im ausgewählten Bereich kein auswählbares Material finden"
-#: gtk2_ardour/canvas-simplerect.c:159
-msgid "outline what"
+#: gtk2_ardour/time_axis_view.cc:626
+msgid "Largest"
+msgstr "Am größten"
+
+#: gtk2_ardour/time_axis_view.cc:627
+msgid "Large"
+msgstr "Groß"
+
+#: gtk2_ardour/time_axis_view.cc:628
+msgid "Larger"
+msgstr "Größer"
+
+#: gtk2_ardour/time_axis_view.cc:629
+msgid "Normal"
+msgstr "Normal"
+
+#: gtk2_ardour/time_axis_view.cc:630
+msgid "Smaller"
+msgstr "Kleiner"
+
+#: gtk2_ardour/time_axis_view.cc:631
+msgid "Small"
+msgstr "Klein"
+
+#: gtk2_ardour/time_axis_view.cc:971
+msgid "unknown track height name \"%1\" in XML GUI information"
+msgstr "Unbekannte Spurhöhe \"%1\" in der XML GUI Information"
+
+#: gtk2_ardour/redirect_box.cc:239
+msgid "New send"
+msgstr "Neuer Send"
+
+#: gtk2_ardour/redirect_box.cc:240
+msgid "Show send controls"
+msgstr "Zeige Send-Steuerung"
+
+#: gtk2_ardour/redirect_box.cc:422
+#: gtk2_ardour/redirect_box.cc:725
+msgid "ardour: weird plugin dialog"
+msgstr "ardour: Merkwürdiger Plugin-Dialog"
+
+#: gtk2_ardour/redirect_box.cc:429
+msgid ""
+"You attempted to add a plugin (%1).\n"
+"The plugin has %2 inputs\n"
+"but at the insertion point, there are\n"
+"%3 active signal streams.\n"
+"\n"
+"This makes no sense - you are throwing away\n"
+"part of the signal."
msgstr ""
+"Sie möchten ein Plugin hinzufügen (%1).\n"
+"Dieses Plugin besitzt %2 Eingänge,\n"
+"doch an dieser Position existieren\n"
+"%3 aktive Signale.\n"
+"\n"
+"Das ist nicht möglich - es würden Teile\n"
+"des Signals fehlen."
-#: gtk2_ardour/canvas-simplerect.c:160
-msgid "which boundaries to outline (mask)"
+#: gtk2_ardour/redirect_box.cc:441
+msgid ""
+"You attempted to add a plugin (%1).\n"
+"The plugin has %2 inputs\n"
+"but at the insertion point there are\n"
+"only %3 active signal streams.\n"
+"\n"
+"This makes no sense - unless the plugin supports\n"
+"side-chain inputs. A future version of Ardour will\n"
+"support this type of configuration."
msgstr ""
+"Sie möchten ein Plugin hinzufügen (%1).\n"
+"Dieses Plugin besitzt %2 Eingänge,\n"
+"doch an dieser Position existieren\n"
+"nur %3 aktive Signale.\n"
+"\n"
+"Das ist nicht möglich - außer, wenn dieses Plugin\n"
+"Side-Chain-Eingänge unterstützt. Dies wird in einer\n"
+"der nächsten Versionen von Ardour möglich sein."
-#: gtk2_ardour/canvas-simplerect.c:171
-msgid "fill"
+#: gtk2_ardour/redirect_box.cc:454
+msgid ""
+"You attempted to add a plugin (%1).\n"
+"\n"
+"The I/O configuration doesn't make sense:\n"
+"\n"
+"The plugin has %2 inputs and %3 outputs.\n"
+"The track/bus has %4 inputs and %5 outputs.\n"
+"The insertion point, has %6 active signals.\n"
+"\n"
+"Ardour does not understand what to do in such situations.\n"
msgstr ""
+"Sie möchten ein Plugin hinzufügen (%1).\n"
+"\n"
+"Die Ein-/Ausgangskonfiguration ist aber nicht möglich:\n"
+"\n"
+"Das Plugin besitzt %2 Eingänge und %3 Ausgänge.\n"
+"Diese Spur besitzt %4 Eingänge und %5 Ausgänge.\n"
+"An dieser Position existieren %6 aktive Signale.\n"
+"\n"
+"Ardour kann mit dieser Situation nicht umgehen.\n"
-#: gtk2_ardour/canvas-simplerect.c:172
-msgid "fill rectangle"
+#: gtk2_ardour/redirect_box.cc:503
+msgid "Cannot set up new send: %1"
+msgstr "Kann keinen neuen Send erstellen: %1"
+
+#: gtk2_ardour/redirect_box.cc:559
+msgid "Pre-fader inserts, sends & plugins:"
+msgstr "Pre-Fader Inserts, Sends & Plugins:"
+
+#: gtk2_ardour/redirect_box.cc:562
+msgid "Post-fader inserts, sends & plugins:"
+msgstr "Post-Fader Inserts, Sends & Plugins:"
+
+#: gtk2_ardour/redirect_box.cc:728
+msgid ""
+"You cannot reorder this set of redirects\n"
+"in that way because the inputs and\n"
+"outputs do not work correctly."
msgstr ""
+"Sie können diese Gruppe von Redirects\n"
+"nicht auf diese Weise verändern, denn\n"
+"die Ein-/Ausgänge arbeiten ncht korrekt."
-#: gtk2_ardour/canvas-simplerect.c:179
-msgid "draw"
+#: gtk2_ardour/redirect_box.cc:882
+msgid "rename redirect"
+msgstr "Redirect umbenennen"
+
+#: gtk2_ardour/redirect_box.cc:958
+#: gtk2_ardour/redirect_box.cc:1007
+msgid ""
+"Copying the set of redirects on the clipboard failed,\n"
+"probably because the I/O configuration of the plugins\n"
+"could not match the configuration of this track."
msgstr ""
+"Konnte diese Gruppe von Redirects nicht in die\n"
+"Zwischenablage kopieren. Wahrscheinlich passt die\n"
+"Ein-/Ausgangskonfiguration des Plugins nicht zu dieser Spur."
-#: gtk2_ardour/canvas-simplerect.c:180
-msgid "draw rectangle"
+#: gtk2_ardour/redirect_box.cc:1030
+msgid ""
+"Do you really want to remove all pre-fader redirects from this track?\n"
+"(this cannot be undone)"
msgstr ""
+"Wollen Sie wirklich alle Pre-Fader-Redirects von dieser Spur entfernen?\n"
+"(Dies kann nicht rückgängig gemacht werden)"
-#: gtk2_ardour/canvas-simplerect.c:188
-msgid "outline color rgba"
+#: gtk2_ardour/redirect_box.cc:1033
+msgid ""
+"Do you really want to remove all post-fader redirects from this track?\n"
+"(this cannot be undone)"
msgstr ""
+"Wollen Sie wirklich alle Post-Fader-Redirects von dieser Spur entfernen?\n"
+"(Dies kann nicht rückgängig gemacht werden)"
-#: gtk2_ardour/canvas-simplerect.c:189
-msgid "color of outline"
+#: gtk2_ardour/redirect_box.cc:1038
+msgid ""
+"Do you really want to remove all pre-fader redirects from this bus?\n"
+"(this cannot be undone)"
msgstr ""
+"Wollen Sie wirklich alle Pre-Fader-Redirects von diesem Bus entfernen?\n"
+"(Dies kann nicht rückgängig gemacht werden)"
-#: gtk2_ardour/canvas-simplerect.c:199
-msgid "fill color rgba"
+#: gtk2_ardour/redirect_box.cc:1041
+msgid ""
+"Do you really want to remove all post-fader redirects from this bus?\n"
+"(this cannot be undone)"
msgstr ""
+"Wollen Sie wirklich alle Post-Fader-Redirects von diesem Bus entfernen?\n"
+"(Dies kann nicht rückgängig gemacht werden)"
-#: gtk2_ardour/canvas-simplerect.c:200
-msgid "color of fill"
+#: gtk2_ardour/redirect_box.cc:1047
+msgid "Yes, remove them all"
+msgstr "Ja, alle löschen"
+
+#: gtk2_ardour/redirect_box.cc:1145
+msgid "Not connected to JACK - no I/O changes are possible"
+msgstr "Nicht mit Jack verbunden - es sind keine Änderungen an Ein-/Ausgängen möglich"
+
+#: gtk2_ardour/redirect_box.cc:1194
+msgid "New Plugin"
+msgstr "Plugin einfügen"
+
+#: gtk2_ardour/redirect_box.cc:1196
+msgid "New Insert"
+msgstr "Insert einfügen"
+
+#: gtk2_ardour/redirect_box.cc:1198
+msgid "New Send ..."
+msgstr "Send einfügen..."
+
+#: gtk2_ardour/redirect_box.cc:1204
+msgid "Cut"
+msgstr "Ausschneiden"
+
+#: gtk2_ardour/redirect_box.cc:1206
+msgid "Copy"
+msgstr "Kopieren"
+
+#: gtk2_ardour/redirect_box.cc:1209
+msgid "Delete"
+msgstr "Löschen"
+
+#: gtk2_ardour/redirect_box.cc:1212
+msgid "Paste"
+msgstr "Einfügen"
+
+#: gtk2_ardour/redirect_box.cc:1215
+msgid "Select All"
+msgstr "Alles auswählen"
+
+#: gtk2_ardour/redirect_box.cc:1216
+msgid "Deselect All"
+msgstr "Nichts auswählen"
+
+#: gtk2_ardour/redirect_box.cc:1219
+msgid "Activate"
+msgstr "Aktivieren"
+
+#: gtk2_ardour/redirect_box.cc:1221
+msgid "Deactivate"
+msgstr "Deaktivieren"
+
+#: gtk2_ardour/redirect_box.cc:1223
+msgid "Activate all"
+msgstr "Alle aktivieren"
+
+#: gtk2_ardour/redirect_box.cc:1224
+msgid "Deactivate all"
+msgstr "Alle deaktivieren"
+
+#: gtk2_ardour/redirect_box.cc:1227
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: gtk2_ardour/redirect_box.cc:1417
+msgid "%1: %2 (by %3)"
+msgstr "%1: %2 (by %3)"
+
+#: gtk2_ardour/mixer_ui.cc:88
+msgid "Strips"
+msgstr "Spur"
+
+#: gtk2_ardour/mixer_ui.cc:114
+msgid "Group"
+msgstr "Gruppe"
+
+#: gtk2_ardour/mixer_ui.cc:115
+msgid "Active"
+msgstr "Aktiv"
+
+#: gtk2_ardour/mixer_ui.cc:210
+#: gtk2_ardour/mixer_ui.cc:440
+#: gtk2_ardour/mixer_ui.cc:472
+msgid "Mixer"
+msgstr "Mixer"
+
+#: gtk2_ardour/mixer_ui.cc:941
+msgid "track display list item for renamed strip not found!"
+msgstr "Konnte Bezeichnung für umbenannten Mixerkanal nicht in der Spurliste finden!"
+
+#: gtk2_ardour/utils.cc:138
+#: gtk2_ardour/utils.cc:181
+msgid "bad XPM header %1"
+msgstr "Fehlerhafter XPM Header %1"
+
+#: gtk2_ardour/utils.cc:320
+msgid "missing RGBA style for \"%1\""
+msgstr "Fehlender RGBA Style für \"%1\""
+
+#: gtk2_ardour/utils.cc:343
+msgid "no style found for %1, using red"
+msgstr "Kein Stil für %1 gefunden, verwende rot"
+
+#: gtk2_ardour/utils.cc:382
+msgid "unknown style attribute %1 requested for color; using \"red\""
+msgstr "Unbekanntes Stil-Attribute für Farbe verlagt; stattdessen wir lieber \"rot\" verwendet"
+
+#: gtk2_ardour/utils.cc:583
+msgid "cannot find icon image for %1"
+msgstr "Konnte Icon-Bild für %1 nicht finden"
+
+#: gtk2_ardour/visual_time_axis.cc:72
+msgid "v"
+msgstr "v"
+
+#: gtk2_ardour/visual_time_axis.cc:91
+msgid "Display Height"
+msgstr "Anzeigehöhe"
+
+#: gtk2_ardour/visual_time_axis.cc:92
+msgid "Visual options"
+msgstr "Visuelle optionen"
+
+#: gtk2_ardour/visual_time_axis.cc:93
+msgid "Hide this track"
+msgstr "Diese Spur verbergen"
+
+#: gtk2_ardour/visual_time_axis.cc:227
+msgid "ardour: color selection"
+msgstr "ardour: Farbe auswählen"
+
+#: gtk2_ardour/visual_time_axis.cc:266
+msgid ""
+"Do you really want to remove track \"%1\" ?\n"
+"(cannot be undone)"
msgstr ""
+"Wollen Sie wirklich die Spur \"%1\" löschen?\n"
+"(Kann nicht rückgängig gemacht werden!)"
+
+#: gtk2_ardour/visual_time_axis.cc:268
+msgid "No, do nothing."
+msgstr "Nein, nichts machen."
+
+#: gtk2_ardour/visual_time_axis.cc:269
+msgid "Yes, remove it."
+msgstr "Ja, entfernen."
+
+#: gtk2_ardour/visual_time_axis.cc:315
+msgid "new name: "
+msgstr "Neuer Name: "
+
+#: gtk2_ardour/visual_time_axis.cc:326
+#: gtk2_ardour/visual_time_axis.cc:373
+msgid "A track already exists with that name"
+msgstr "Es existiert bereits eine Spur mit diesem Namen"
#: gtk2_ardour/crossfade_edit.cc:74
msgid "ardour: x-fade edit"
msgstr "ardour: Crossfade Editor"
-#: gtk2_ardour/crossfade_edit.cc:78
-#: gtk2_ardour/panner_ui.cc:420
-msgid "Reset"
-msgstr "Zurücksetzen"
-
#: gtk2_ardour/crossfade_edit.cc:79
msgid "Fade"
msgstr "Fade"
@@ -2378,794 +2628,676 @@ msgid "Fade Out"
msgstr "Fade Out"
#: gtk2_ardour/crossfade_edit.cc:171
-#: gtk2_ardour/editor.cc:1723
-#: gtk2_ardour/editor_actions.cc:459
-#: gtk2_ardour/option_editor.cc:148
+#: gtk2_ardour/editor.cc:1835
msgid "Audition"
msgstr "Vorhören"
-#: gtk2_ardour/editor.cc:109
-#: gtk2_ardour/editor.cc:3214
-msgid "CD Frames"
-msgstr "CD-Frames"
-
-#: gtk2_ardour/editor.cc:110
-#: gtk2_ardour/editor.cc:3216
-msgid "SMPTE Frames"
-msgstr "SMPTE-Frames"
-
-#: gtk2_ardour/editor.cc:111
-#: gtk2_ardour/editor.cc:2748
-#: gtk2_ardour/editor.cc:3218
-msgid "SMPTE Seconds"
-msgstr "SMPTE-Sekunden"
-
-#: gtk2_ardour/editor.cc:112
-#: gtk2_ardour/editor.cc:3220
-msgid "SMPTE Minutes"
-msgstr "SMPTE-Minuten"
-
-#: gtk2_ardour/editor.cc:113
-#: gtk2_ardour/editor.cc:3222
-msgid "Seconds"
-msgstr "Sekunden"
-
-#: gtk2_ardour/editor.cc:114
-#: gtk2_ardour/editor.cc:3224
-msgid "Minutes"
-msgstr "Minuten"
-
-#: gtk2_ardour/editor.cc:115
-#: gtk2_ardour/editor.cc:3198
-msgid "Beats/32"
-msgstr "Schläge / 32"
-
-#: gtk2_ardour/editor.cc:116
-#: gtk2_ardour/editor.cc:3196
-msgid "Beats/16"
-msgstr "Schläge / 16"
-
-#: gtk2_ardour/editor.cc:117
-#: gtk2_ardour/editor.cc:3194
-msgid "Beats/8"
-msgstr "Schläge / 8"
-
-#: gtk2_ardour/editor.cc:118
-#: gtk2_ardour/editor.cc:3192
-msgid "Beats/4"
-msgstr "Schläge / 4"
-
-#: gtk2_ardour/editor.cc:119
-#: gtk2_ardour/editor.cc:3190
-msgid "Beats/3"
-msgstr "Schläge / 3"
-
-#: gtk2_ardour/editor.cc:120
-#: gtk2_ardour/editor.cc:3200
-msgid "Beats"
-msgstr "Schläge"
-
-#: gtk2_ardour/editor.cc:121
-#: gtk2_ardour/editor.cc:3202
-msgid "Bars"
-msgstr "Takte"
-
-#: gtk2_ardour/editor.cc:122
-#: gtk2_ardour/editor.cc:3204
-msgid "Marks"
-msgstr "Marker"
-
-#: gtk2_ardour/editor.cc:123
-#: gtk2_ardour/editor.cc:3206
-msgid "Region starts"
-msgstr "Regionen-Anfang"
-
-#: gtk2_ardour/editor.cc:124
-#: gtk2_ardour/editor.cc:3208
-msgid "Region ends"
-msgstr "Regionen-Ende"
-
-#: gtk2_ardour/editor.cc:125
-#: gtk2_ardour/editor.cc:3212
-msgid "Region syncs"
-msgstr "Regionen-Sync"
-
-#: gtk2_ardour/editor.cc:126
-#: gtk2_ardour/editor.cc:3210
-msgid "Region bounds"
-msgstr "Regionen-Grenzen"
-
-#: gtk2_ardour/editor.cc:131
-#: gtk2_ardour/editor.cc:3240
-#: gtk2_ardour/editor_actions.cc:421
-msgid "No Grid"
-msgstr "Raster aus"
-
-#: gtk2_ardour/editor.cc:132
-#: gtk2_ardour/editor.cc:3242
-#: gtk2_ardour/editor_actions.cc:422
-msgid "Grid"
-msgstr "Einrasten"
-
-#: gtk2_ardour/editor.cc:133
-#: gtk2_ardour/editor.cc:3244
-#: gtk2_ardour/editor_actions.cc:423
-msgid "Magnetic"
-msgstr "Magnetisch"
-
-#: gtk2_ardour/editor.cc:138
-#: gtk2_ardour/editor.cc:148
-#: gtk2_ardour/editor.cc:2734
-#: gtk2_ardour/editor.cc:2760
-#: gtk2_ardour/editor.cc:3283
-#: gtk2_ardour/editor.cc:3308
-#: gtk2_ardour/editor_actions.cc:406
-msgid "Playhead"
-msgstr "Positionszeiger"
-
-#: gtk2_ardour/editor.cc:139
-#: gtk2_ardour/editor.cc:3281
-#: gtk2_ardour/editor_actions.cc:408
-#: gtk2_ardour/marker_time_axis.cc:255
-msgid "Marker"
-msgstr "Marker"
-
-#: gtk2_ardour/editor.cc:140
-#: gtk2_ardour/editor.cc:149
-#: gtk2_ardour/editor.cc:3310
-#: gtk2_ardour/editor_actions.cc:407
-msgid "Mouse"
-msgstr "Maus"
-
-#: gtk2_ardour/editor.cc:145
-#: gtk2_ardour/editor.cc:3302
-#: gtk2_ardour/export_dialog.cc:142
-#: gtk2_ardour/export_dialog.cc:158
-#: gtk2_ardour/export_dialog.cc:1131
-#: gtk2_ardour/export_dialog.cc:1135
-msgid "Left"
-msgstr "Links"
-
-#: gtk2_ardour/editor.cc:146
-#: gtk2_ardour/editor.cc:3304
-#: gtk2_ardour/export_dialog.cc:143
-#: gtk2_ardour/export_dialog.cc:159
-msgid "Right"
-msgstr "Rechts"
-
-#: gtk2_ardour/editor.cc:147
-#: gtk2_ardour/editor.cc:3306
-msgid "Center"
-msgstr "Mitte"
-
-#: gtk2_ardour/editor.cc:150
-#: gtk2_ardour/editor.cc:3312
-msgid "Edit Point"
-msgstr "Arbeitspunkt"
+#: gtk2_ardour/midi_port_dialog.cc:22
+msgid "Port name"
+msgstr "Port Name"
-#: gtk2_ardour/editor.cc:177
+#: gtk2_ardour/editor.cc:202
msgid "Mins:Secs"
msgstr "Min:Sek"
-#: gtk2_ardour/editor.cc:181
-#: gtk2_ardour/editor_rulers.cc:436
+#: gtk2_ardour/editor.cc:203
+msgid "Bars:Beats"
+msgstr "Takte:Schläge"
+
+#: gtk2_ardour/editor.cc:204
+msgid "Timecode"
+msgstr "Timecode"
+
+#: gtk2_ardour/editor.cc:206
msgid "Tempo"
msgstr "Tempo"
-#: gtk2_ardour/editor.cc:182
-#: gtk2_ardour/editor_rulers.cc:430
+#: gtk2_ardour/editor.cc:207
msgid "Meter"
msgstr "Taktart"
-#: gtk2_ardour/editor.cc:183
-#: gtk2_ardour/editor_rulers.cc:442
+#: gtk2_ardour/editor.cc:208
msgid "Location Markers"
msgstr "Positionsmarker"
-#: gtk2_ardour/editor.cc:184
-#: gtk2_ardour/editor_rulers.cc:449
+#: gtk2_ardour/editor.cc:209
msgid "Range Markers"
msgstr "Bereiche"
-#: gtk2_ardour/editor.cc:185
-#: gtk2_ardour/editor_rulers.cc:462
+#: gtk2_ardour/editor.cc:210
msgid "Loop/Punch Ranges"
msgstr "Schleifen/Punch-Bereiche"
-#: gtk2_ardour/editor.cc:186
-#: gtk2_ardour/editor_rulers.cc:456
+#: gtk2_ardour/editor.cc:211
msgid "CD Markers"
msgstr "CD-Marker"
-#: gtk2_ardour/editor.cc:204
+#: gtk2_ardour/editor.cc:228
msgid "mode"
msgstr "Modus"
-#: gtk2_ardour/editor.cc:205
+#: gtk2_ardour/editor.cc:229
msgid "automation"
msgstr "Automation"
-#: gtk2_ardour/editor.cc:476
-#: gtk2_ardour/editor.cc:503
-#: gtk2_ardour/editor_actions.cc:84
-#: gtk2_ardour/mixer_ui.cc:90
-#: gtk2_ardour/mixer_ui.cc:117
-#: gtk2_ardour/analysis_window.cc:63
-msgid "Show"
-msgstr "Anzeigen"
-
-#: gtk2_ardour/editor.cc:477
-#: gtk2_ardour/editor.cc:501
+#: gtk2_ardour/editor.cc:513
+#: gtk2_ardour/editor.cc:537
msgid "Name"
msgstr "Name"
-#: gtk2_ardour/editor.cc:619
-#: gtk2_ardour/editor.cc:661
+#: gtk2_ardour/editor.cc:616
+#: gtk2_ardour/editor.cc:687
+msgid "Regions"
+msgstr "Regionen"
+
+#: gtk2_ardour/editor.cc:659
+#: gtk2_ardour/editor.cc:701
msgid "Chunks"
msgstr "Teile"
-#: gtk2_ardour/editor.cc:650
+#: gtk2_ardour/editor.cc:690
msgid "Tracks/Busses"
msgstr "Spuren/Busse"
-#: gtk2_ardour/editor.cc:653
+#: gtk2_ardour/editor.cc:693
msgid "Snapshots"
msgstr "Schnappschüsse"
-#: gtk2_ardour/editor.cc:656
+#: gtk2_ardour/editor.cc:696
msgid "Edit Groups"
msgstr "Bearbeitungsgruppen"
-#: gtk2_ardour/editor.cc:720
+#: gtk2_ardour/editor.cc:759
msgid "Nudge Region/Selection Forwards"
msgstr "Region/Auswahl schrittweise nach vorne"
-#: gtk2_ardour/editor.cc:721
+#: gtk2_ardour/editor.cc:760
msgid "Nudge Region/Selection Backwards"
msgstr "Region/Auswahl schrittweise nach hinten"
-#: gtk2_ardour/editor.cc:751
-#: gtk2_ardour/editor_mixer.cc:358
+#: gtk2_ardour/editor.cc:790
msgid "Editor"
msgstr "Editor"
-#: gtk2_ardour/editor.cc:1169
-#: gtk2_ardour/editor.cc:1177
-#: gtk2_ardour/editor.cc:4181
-#: gtk2_ardour/editor.cc:4209
+#: gtk2_ardour/editor.cc:1238
+#: gtk2_ardour/editor.cc:1246
+#: gtk2_ardour/editor.cc:4504
+#: gtk2_ardour/editor.cc:4531
msgid "Loop"
msgstr "Schleife"
-#: gtk2_ardour/editor.cc:1182
-#: gtk2_ardour/editor.cc:1190
+#: gtk2_ardour/editor.cc:1251
+#: gtk2_ardour/editor.cc:1259
msgid "Punch"
msgstr "Punch"
-#: gtk2_ardour/editor.cc:1314
-#: gtk2_ardour/editor_mouse.cc:1823
-msgid "programming error: fade in canvas item has no regionview data pointer!"
-msgstr "Programmierfehler: fade in canvas item has no regionview data pointer!"
-
-#: gtk2_ardour/editor.cc:1326
-#: gtk2_ardour/editor.cc:1348
-#: gtk2_ardour/redirect_box.cc:1200
-msgid "Deactivate"
-msgstr "Deaktivieren"
-
-#: gtk2_ardour/editor.cc:1328
-#: gtk2_ardour/editor.cc:1350
-#: gtk2_ardour/redirect_box.cc:1198
-msgid "Activate"
-msgstr "Aktivieren"
+#: gtk2_ardour/editor.cc:1456
+#: gtk2_ardour/route_time_axis.cc:1648
+msgid "programming error: "
+msgstr "Programmierfehler:"
-#: gtk2_ardour/editor.cc:1475
-#: gtk2_ardour/editor.cc:1483
-#: gtk2_ardour/editor_ops.cc:3297
+#: gtk2_ardour/editor.cc:1563
+#: gtk2_ardour/editor.cc:1571
msgid "Freeze"
msgstr "Einfrieren"
-#: gtk2_ardour/editor.cc:1479
+#: gtk2_ardour/editor.cc:1567
msgid "Unfreeze"
msgstr "Auftauen"
-#: gtk2_ardour/editor.cc:1649
+#: gtk2_ardour/editor.cc:1754
msgid "Unmute"
msgstr "Unmute"
-#: gtk2_ardour/editor.cc:1653
-#: gtk2_ardour/editor.cc:1978
-#: gtk2_ardour/editor_actions.cc:47
-#: gtk2_ardour/editor_markers.cc:651
-#: gtk2_ardour/mixer_strip.cc:502
-#: gtk2_ardour/mixer_strip.cc:564
-#: gtk2_ardour/redirect_box.cc:1206
-msgid "Edit"
-msgstr "Bearbeiten"
-
-#: gtk2_ardour/editor.cc:1658
+#: gtk2_ardour/editor.cc:1763
msgid "Convert to short"
msgstr "In kurzen Crossfade umwandeln"
-#: gtk2_ardour/editor.cc:1660
+#: gtk2_ardour/editor.cc:1765
msgid "Convert to full"
msgstr "In langen Crossfade umwandeln"
-#: gtk2_ardour/editor.cc:1671
+#: gtk2_ardour/editor.cc:1776
msgid "Crossfade"
msgstr "Crossfade"
-#: gtk2_ardour/editor.cc:1715
+#: gtk2_ardour/editor.cc:1825
msgid "Popup region editor"
msgstr "Regioneneditor öffnen"
-#: gtk2_ardour/editor.cc:1716
+#: gtk2_ardour/editor.cc:1828
msgid "Raise to top layer"
msgstr "Region ganz nach oben"
-#: gtk2_ardour/editor.cc:1717
+#: gtk2_ardour/editor.cc:1829
msgid "Lower to bottom layer"
msgstr "Region ganz nach unten"
-#: gtk2_ardour/editor.cc:1719
+#: gtk2_ardour/editor.cc:1831
msgid "Define sync point"
msgstr "Einrastpunkt definieren"
-#: gtk2_ardour/editor.cc:1720
+#: gtk2_ardour/editor.cc:1832
msgid "Remove sync point"
msgstr "Einrastpunkt entfernen"
-#: gtk2_ardour/editor.cc:1725
+#: gtk2_ardour/editor.cc:1837
msgid "Bounce"
msgstr "Bounce"
-#: gtk2_ardour/editor.cc:1728
-msgid "Analyze region"
-msgstr "Analysiere Region"
+#: gtk2_ardour/editor.cc:1840
+#: gtk2_ardour/editor.cc:2016
+msgid "Spectral Analysis"
+msgstr "FFT-Analyse"
-#: gtk2_ardour/editor.cc:1735
-#: gtk2_ardour/editor_markers.cc:591
+#: gtk2_ardour/editor.cc:1854
msgid "Lock"
msgstr "Sperren"
-#: gtk2_ardour/editor.cc:1753
+#: gtk2_ardour/editor.cc:1861
+msgid "Glue to Bars&Beats"
+msgstr "An Takte und Schläge binden"
+
+#: gtk2_ardour/editor.cc:1885
msgid "Opaque"
msgstr "Deckend"
-#: gtk2_ardour/editor.cc:1763
+#: gtk2_ardour/editor.cc:1895
msgid "Original position"
msgstr "Ursprungsposition"
-#: gtk2_ardour/editor.cc:1776
+#: gtk2_ardour/editor.cc:1908
msgid "Reset Envelope"
msgstr "Lautstärkekurve zurücksetzen"
-#: gtk2_ardour/editor.cc:1778
+#: gtk2_ardour/editor.cc:1910
msgid "Envelope Visible"
msgstr "Lautstärkekurve sichtbar"
-#: gtk2_ardour/editor.cc:1787
+#: gtk2_ardour/editor.cc:1919
msgid "Envelope Active"
msgstr "Lautstärkekurve aktiv"
-#: gtk2_ardour/editor.cc:1801
+#: gtk2_ardour/editor.cc:1933
msgid "DeNormalize"
msgstr "DeNormalisieren"
-#: gtk2_ardour/editor.cc:1803
+#: gtk2_ardour/editor.cc:1935
msgid "Normalize"
msgstr "Normalisieren"
-#: gtk2_ardour/editor.cc:1807
+#: gtk2_ardour/editor.cc:1939
msgid "Reverse"
-msgstr "Rückwärts"
+msgstr "Umkehren"
-#: gtk2_ardour/editor.cc:1812
-#: gtk2_ardour/editor.cc:1903
+#: gtk2_ardour/editor.cc:1944
+#: gtk2_ardour/editor.cc:2035
msgid "Add Range Markers"
msgstr "Bereichsmarker einfügen"
-#: gtk2_ardour/editor.cc:1813
+#: gtk2_ardour/editor.cc:1945
msgid "Set Range Selection"
msgstr "Bereich auswählen"
-#: gtk2_ardour/editor.cc:1822
+#: gtk2_ardour/editor.cc:1954
msgid "Nudge fwd"
msgstr "Schritt nach vorne"
-#: gtk2_ardour/editor.cc:1823
+#: gtk2_ardour/editor.cc:1955
msgid "Nudge bwd"
msgstr "Schritt nach hinten"
-#: gtk2_ardour/editor.cc:1824
+#: gtk2_ardour/editor.cc:1956
msgid "Nudge fwd by capture offset"
msgstr "Schritt nach vorne um Aufnahme-Offset"
-#: gtk2_ardour/editor.cc:1825
+#: gtk2_ardour/editor.cc:1957
msgid "Nudge bwd by capture offset"
msgstr "Schritt nach hinten um Aufnahme-Offset"
-#: gtk2_ardour/editor.cc:1827
-#: gtk2_ardour/editor.cc:1998
-#: gtk2_ardour/editor.cc:2054
+#: gtk2_ardour/editor.cc:1959
+#: gtk2_ardour/editor.cc:2131
+#: gtk2_ardour/editor.cc:2187
msgid "Nudge"
msgstr "Verschieben"
-#: gtk2_ardour/editor.cc:1834
-#: gtk2_ardour/editor_actions.cc:253
+#: gtk2_ardour/editor.cc:1966
msgid "Start to edit point"
msgstr "Von Anfang bis Arbeitspunkt"
-#: gtk2_ardour/editor.cc:1835
-#: gtk2_ardour/editor_actions.cc:255
+#: gtk2_ardour/editor.cc:1967
msgid "Edit point to end"
msgstr "Von Arbeitspunkt bis Ende"
-#: gtk2_ardour/editor.cc:1836
-#: gtk2_ardour/editor_actions.cc:257
+#: gtk2_ardour/editor.cc:1968
msgid "Trim To Loop"
msgstr "Auf Schleife kürzen"
-#: gtk2_ardour/editor.cc:1837
-#: gtk2_ardour/editor_actions.cc:259
+#: gtk2_ardour/editor.cc:1969
msgid "Trim To Punch"
msgstr "Punch-Bereich schneiden"
-#: gtk2_ardour/editor.cc:1839
-#: gtk2_ardour/gain_meter.cc:169
-#: gtk2_ardour/gain_meter.cc:903
-#: gtk2_ardour/panner_ui.cc:97
-#: gtk2_ardour/panner_ui.cc:780
-msgid "Trim"
-msgstr "Abschneiden"
-
-#: gtk2_ardour/editor.cc:1842
+#: gtk2_ardour/editor.cc:1974
msgid "Split"
msgstr "Teilen"
-#: gtk2_ardour/editor.cc:1845
+#: gtk2_ardour/editor.cc:1977
msgid "Make mono regions"
msgstr "Zu Mono-Regionen umwandeln"
-#: gtk2_ardour/editor.cc:1848
+#: gtk2_ardour/editor.cc:1980
+#: gtk2_ardour/editor.cc:3278
msgid "Duplicate"
msgstr "Duplizieren"
-#: gtk2_ardour/editor.cc:1849
+#: gtk2_ardour/editor.cc:1981
msgid "Multi-Duplicate"
msgstr "Mehrfach duplizieren"
-#: gtk2_ardour/editor.cc:1850
+#: gtk2_ardour/editor.cc:1982
msgid "Fill Track"
msgstr "Spur auffüllen"
-#: gtk2_ardour/editor.cc:1879
+#: gtk2_ardour/editor.cc:2011
msgid "Play range"
msgstr "Bereich abspielen"
-#: gtk2_ardour/editor.cc:1880
+#: gtk2_ardour/editor.cc:2012
msgid "Loop range"
msgstr "Bereich in Schleife abspielen"
-#: gtk2_ardour/editor.cc:1884
-msgid "Analyze range"
-msgstr "Bereich analysieren"
-
-#: gtk2_ardour/editor.cc:1888
-#: gtk2_ardour/editor_actions.cc:370
+#: gtk2_ardour/editor.cc:2020
msgid "Extend Range to End of Region"
msgstr "Bereich vergrößern bis zum Ende der Region "
-#: gtk2_ardour/editor.cc:1889
-#: gtk2_ardour/editor_actions.cc:372
+#: gtk2_ardour/editor.cc:2021
msgid "Extend Range to Start of Region"
msgstr "Bereich vergrößern bis zum Anfang der Region "
-#: gtk2_ardour/editor.cc:1892
+#: gtk2_ardour/editor.cc:2024
msgid "Convert to region in-place"
msgstr "Am Rastpunkt der Regionen einrasten"
-#: gtk2_ardour/editor.cc:1893
-#, fuzzy
+#: gtk2_ardour/editor.cc:2025
msgid "Convert to region in region list"
msgstr "Bereich zur Regionenliste hinzufügen"
-#: gtk2_ardour/editor.cc:1896
+#: gtk2_ardour/editor.cc:2028
msgid "Select all in range"
msgstr "Alles im Bereich auswählen"
-#: gtk2_ardour/editor.cc:1899
+#: gtk2_ardour/editor.cc:2031
msgid "Set loop from selection"
msgstr "Schleife aus Auswahl erstellen"
-#: gtk2_ardour/editor.cc:1900
+#: gtk2_ardour/editor.cc:2032
msgid "Set punch from selection"
msgstr "Punch-Bereich aus Auswahl erstellen"
-#: gtk2_ardour/editor.cc:1905
+#: gtk2_ardour/editor.cc:2037
msgid "Crop region to range"
-msgstr "Regionen-Editor öffnen"
+msgstr "Region auf Bereich kürzen"
-#: gtk2_ardour/editor.cc:1906
+#: gtk2_ardour/editor.cc:2038
msgid "Fill range with region"
msgstr "Bereich mit Region ausfüllen"
-#: gtk2_ardour/editor.cc:1907
+#: gtk2_ardour/editor.cc:2039
msgid "Duplicate range"
-msgstr "Bereich Duplizieren"
+msgstr "Bereich duplizieren"
-#: gtk2_ardour/editor.cc:1908
+#: gtk2_ardour/editor.cc:2040
msgid "Create chunk from range"
msgstr "Abschnitt aus Bereich erstellen..."
-#: gtk2_ardour/editor.cc:1910
-msgid "Bounce range"
-msgstr "Bereich Bouncen"
+#: gtk2_ardour/editor.cc:2042
+msgid "Consolidate range"
+msgstr "Bereich als neue Region"
-#: gtk2_ardour/editor.cc:1911
+#: gtk2_ardour/editor.cc:2043
+msgid "Bounce range to region list"
+msgstr "zur Liste der Regionen"
+
+#: gtk2_ardour/editor.cc:2044
msgid "Export range"
msgstr "Bereich exportieren"
-#: gtk2_ardour/editor.cc:1925
-#: gtk2_ardour/editor.cc:2012
+#: gtk2_ardour/editor.cc:2058
+#: gtk2_ardour/editor.cc:2145
msgid "Play from edit point"
msgstr "Wiedergabe ab Arbeitspunkt"
-#: gtk2_ardour/editor.cc:1926
-#: gtk2_ardour/editor.cc:2013
+#: gtk2_ardour/editor.cc:2059
+#: gtk2_ardour/editor.cc:2146
msgid "Play from start"
msgstr "Wiedergabe ab Anfang"
-#: gtk2_ardour/editor.cc:1927
+#: gtk2_ardour/editor.cc:2060
msgid "Play region"
msgstr "Region wiedergeben"
-#: gtk2_ardour/editor.cc:1929
-#: gtk2_ardour/editor_actions.cc:266
+#: gtk2_ardour/editor.cc:2062
msgid "Loop Region"
msgstr "Region in Schleife wiedergeben"
-#: gtk2_ardour/editor.cc:1939
-#: gtk2_ardour/editor.cc:2022
+#: gtk2_ardour/editor.cc:2072
+#: gtk2_ardour/editor.cc:2155
msgid "Select All in track"
msgstr "Alles in Spur auswählen"
-#: gtk2_ardour/editor.cc:1940
-#: gtk2_ardour/editor.cc:2023
-#: gtk2_ardour/editor_actions.cc:137
-#: gtk2_ardour/redirect_box.cc:1194
-msgid "Select All"
-msgstr "Alles Auswählen"
-
-#: gtk2_ardour/editor.cc:1941
-#: gtk2_ardour/editor.cc:2024
+#: gtk2_ardour/editor.cc:2074
+#: gtk2_ardour/editor.cc:2157
msgid "Invert selection in track"
msgstr "Auswahl in Spur umkehren"
-#: gtk2_ardour/editor.cc:1942
-#: gtk2_ardour/editor.cc:2025
+#: gtk2_ardour/editor.cc:2075
+#: gtk2_ardour/editor.cc:2158
msgid "Invert selection"
msgstr "Auswahl umkehren"
-#: gtk2_ardour/editor.cc:1944
+#: gtk2_ardour/editor.cc:2077
msgid "Set range to loop range"
msgstr "Ausgewählten Bereich als Schleife"
-#: gtk2_ardour/editor.cc:1945
+#: gtk2_ardour/editor.cc:2078
msgid "Set range to punch range"
msgstr "Ausgewählten Bereich als Punch-Bereich"
-#: gtk2_ardour/editor.cc:1947
-#: gtk2_ardour/editor_actions.cc:143
+#: gtk2_ardour/editor.cc:2080
msgid "Select All After Edit Point"
msgstr "Alle Regionen nach dem Arbeitspunkt auswählen"
-#: gtk2_ardour/editor.cc:1948
-#: gtk2_ardour/editor_actions.cc:145
+#: gtk2_ardour/editor.cc:2081
msgid "Select All Before Edit Point"
msgstr "Alle Regionen vor dem Arbeitspunkt auswählen"
-#: gtk2_ardour/editor.cc:1949
-#: gtk2_ardour/editor_actions.cc:148
+#: gtk2_ardour/editor.cc:2082
msgid "Select All After Playhead"
msgstr "Alle Regionen nach dem Positionszeiger auswählen"
-#: gtk2_ardour/editor.cc:1950
-#: gtk2_ardour/editor_actions.cc:150
+#: gtk2_ardour/editor.cc:2083
msgid "Select All Before Playhead"
msgstr "Alle Regionen vor dem Positionszeiger auswählen"
-#: gtk2_ardour/editor.cc:1951
-#: gtk2_ardour/editor_actions.cc:152
+#: gtk2_ardour/editor.cc:2084
msgid "Select All Between Playhead & Edit Point"
msgstr "Alle Regionen zwischen Positionszeiger und Arbeitspunkt auswählen"
-#: gtk2_ardour/editor.cc:1952
-#: gtk2_ardour/editor_actions.cc:154
+#: gtk2_ardour/editor.cc:2085
msgid "Select All Within Playhead & Edit Point"
msgstr "Alle Regionen innerhalb Positionszeiger und Arbeitspunkt auswählen"
-#: gtk2_ardour/editor.cc:1953
-#: gtk2_ardour/editor_actions.cc:157
+#: gtk2_ardour/editor.cc:2086
msgid "Select Range Between Playhead & Edit Point"
msgstr "Wähle Bereich zwischen Positionszeiger und Arbeitspunkt aus"
-#: gtk2_ardour/editor.cc:1957
-#: gtk2_ardour/editor.cc:2032
-#: gtk2_ardour/editor_actions.cc:48
+#: gtk2_ardour/editor.cc:2090
+#: gtk2_ardour/editor.cc:2165
msgid "Select"
msgstr "Auswahl"
-#: gtk2_ardour/editor.cc:1965
-#: gtk2_ardour/editor.cc:2040
-#: gtk2_ardour/editor_actions.cc:334
-#: gtk2_ardour/redirect_box.cc:1183
-msgid "Cut"
-msgstr "Ausschneiden"
-
-#: gtk2_ardour/editor.cc:1966
-#: gtk2_ardour/editor.cc:2041
-#: gtk2_ardour/editor_actions.cc:339
-#: gtk2_ardour/redirect_box.cc:1185
-msgid "Copy"
-msgstr "Kopieren"
-
-#: gtk2_ardour/editor.cc:1967
-#: gtk2_ardour/editor.cc:2042
-#: gtk2_ardour/editor_actions.cc:341
-#: gtk2_ardour/redirect_box.cc:1191
-msgid "Paste"
-msgstr "Einfügen"
-
-#: gtk2_ardour/editor.cc:1971
+#: gtk2_ardour/editor.cc:2104
msgid "Align"
msgstr "Ausrichten"
-#: gtk2_ardour/editor.cc:1972
+#: gtk2_ardour/editor.cc:2105
msgid "Align Relative"
msgstr "Relativ ausrichten"
-#: gtk2_ardour/editor.cc:1976
+#: gtk2_ardour/editor.cc:2109
msgid "Insert chunk"
msgstr "Abschnitt einfügen"
-#: gtk2_ardour/editor.cc:1983
+#: gtk2_ardour/editor.cc:2116
msgid "Insert Selected Region"
msgstr "Ausgewählte Region einfügen"
-#: gtk2_ardour/editor.cc:1984
+#: gtk2_ardour/editor.cc:2117
msgid "Insert Existing Audio"
msgstr "Audio importieren..."
-#: gtk2_ardour/editor.cc:1993
-#: gtk2_ardour/editor.cc:2049
+#: gtk2_ardour/editor.cc:2126
+#: gtk2_ardour/editor.cc:2182
msgid "Nudge entire track fwd"
msgstr "Gesamte Spur schrittweise nach vorne"
-#: gtk2_ardour/editor.cc:1994
-#: gtk2_ardour/editor.cc:2050
+#: gtk2_ardour/editor.cc:2127
+#: gtk2_ardour/editor.cc:2183
msgid "Nudge track after edit point fwd"
msgstr "Spur nach Arbeitspunkt schrittweise nach vorne"
-#: gtk2_ardour/editor.cc:1995
-#: gtk2_ardour/editor.cc:2051
+#: gtk2_ardour/editor.cc:2128
+#: gtk2_ardour/editor.cc:2184
msgid "Nudge entire track bwd"
msgstr "Gesamte Spur schrittweise nach hinten"
-#: gtk2_ardour/editor.cc:1996
-#: gtk2_ardour/editor.cc:2052
+#: gtk2_ardour/editor.cc:2129
+#: gtk2_ardour/editor.cc:2185
msgid "Nudge track after edit point bwd"
msgstr "Spur nach Arbeitspunkt schrittweise nach hinten"
-#: gtk2_ardour/editor.cc:2027
+#: gtk2_ardour/editor.cc:2160
msgid "Select all after edit point"
msgstr "Alles nach Arbeitspunkt auswählen"
-#: gtk2_ardour/editor.cc:2028
+#: gtk2_ardour/editor.cc:2161
msgid "Select all before edit point"
msgstr "Alles vor Arbeitspunkt auswählen"
-#: gtk2_ardour/editor.cc:2029
+#: gtk2_ardour/editor.cc:2162
msgid "Select all after playhead"
msgstr "Alles nach Positionszeiger auswählen"
-#: gtk2_ardour/editor.cc:2030
+#: gtk2_ardour/editor.cc:2163
msgid "Select all before playhead"
msgstr "Alles vor Positionszeiger auswählen"
-#: gtk2_ardour/editor.cc:2684
+#: gtk2_ardour/editor.cc:2866
msgid "Select/Move Objects"
msgstr "Objekte auswählen/verschieben"
-#: gtk2_ardour/editor.cc:2685
+#: gtk2_ardour/editor.cc:2867
msgid "Select/Move Ranges"
msgstr "Editierbereich auswählen/verschieben"
-#: gtk2_ardour/editor.cc:2686
+#: gtk2_ardour/editor.cc:2868
msgid "Draw Gain Automation"
msgstr "Lautstärkekurve zeichnen"
-#: gtk2_ardour/editor.cc:2687
+#: gtk2_ardour/editor.cc:2869
msgid "Select Zoom Range"
msgstr "Zoombereich auswählen"
-#: gtk2_ardour/editor.cc:2688
+#: gtk2_ardour/editor.cc:2870
msgid "Stretch/Shrink Regions"
-msgstr "Regionen vergrößern/verkleinern (Time-Stretch)"
+msgstr "Regionen strecken/stauchen (Time-Stretch)"
-#: gtk2_ardour/editor.cc:2689
+#: gtk2_ardour/editor.cc:2871
msgid "Listen to Specific Regions"
msgstr "Ausgewählte Regionen vorhören"
-#: gtk2_ardour/editor.cc:2719
-#: gtk2_ardour/editor_actions.cc:209
+#: gtk2_ardour/editor.cc:2901
msgid "Zoom In"
msgstr "Vergrößern"
-#: gtk2_ardour/editor.cc:2725
-#: gtk2_ardour/editor_actions.cc:207
+#: gtk2_ardour/editor.cc:2907
msgid "Zoom Out"
msgstr "Verkleinern"
-#: gtk2_ardour/editor.cc:2731
-#: gtk2_ardour/editor_actions.cc:211
+#: gtk2_ardour/editor.cc:2913
msgid "Zoom to Session"
msgstr "Auf ganzes Projekt zoomen"
-#: gtk2_ardour/editor.cc:2737
+#: gtk2_ardour/editor.cc:2916
+#: gtk2_ardour/editor.cc:2942
+#: gtk2_ardour/editor.cc:3496
+#: gtk2_ardour/editor.cc:3521
+msgid "Playhead"
+msgstr "Positionszeiger"
+
+#: gtk2_ardour/editor.cc:2919
msgid "Zoom focus"
msgstr "Zoom-Mittelpunkt"
-#: gtk2_ardour/editor.cc:2751
+#: gtk2_ardour/editor.cc:2930
+#: gtk2_ardour/editor.cc:3431
+msgid "SMPTE Seconds"
+msgstr "SMPTE-Sekunden"
+
+#: gtk2_ardour/editor.cc:2933
msgid "Snap/Grid Units"
msgstr "Einrast-Einheiten"
-#: gtk2_ardour/editor.cc:2754
+#: gtk2_ardour/editor.cc:2936
msgid "Magnetic Snap"
msgstr "Magnetisch einrasten"
-#: gtk2_ardour/editor.cc:2757
+#: gtk2_ardour/editor.cc:2939
msgid "Snap/Grid Mode"
msgstr "Einrastmodus"
-#: gtk2_ardour/editor.cc:2763
+#: gtk2_ardour/editor.cc:2945
msgid "Edit point"
msgstr "Arbeitspunkt"
-#: gtk2_ardour/editor.cc:2913
+#: gtk2_ardour/editor.cc:3095
msgid "malformed URL passed to drag-n-drop code"
-msgstr ""
+msgstr "Ungültige URL an drag-n-drop-Code weitergeleitet"
-#: gtk2_ardour/editor.cc:3032
-#: gtk2_ardour/editor_actions.cc:320
+#: gtk2_ardour/editor.cc:3214
msgid "Undo"
msgstr "Rückgängig"
-#: gtk2_ardour/editor.cc:3034
+#: gtk2_ardour/editor.cc:3216
msgid "Undo (%1)"
msgstr "Rückgängig (%1)"
-#: gtk2_ardour/editor.cc:3041
-#: gtk2_ardour/editor_actions.cc:322
+#: gtk2_ardour/editor.cc:3223
msgid "Redo"
msgstr "Wiederherstellen"
-#: gtk2_ardour/editor.cc:3043
+#: gtk2_ardour/editor.cc:3225
msgid "Redo (%1)"
msgstr "Wiederherstellen (%1)"
-#: gtk2_ardour/editor.cc:3073
-msgid "Duplicate how many times?"
-msgstr "Wie häufig duplizieren?"
+#: gtk2_ardour/editor.cc:3255
+msgid "Number of Duplications:"
+msgstr "Anzahl der Duplikate"
-#: gtk2_ardour/editor.cc:3175
+#: gtk2_ardour/editor.cc:3386
msgid "Splice Edit"
-msgstr "Kleben"
+msgstr "Splice Edit"
-#: gtk2_ardour/editor.cc:3177
+#: gtk2_ardour/editor.cc:3388
msgid "Slide Edit"
msgstr "Slide Edit"
-#: gtk2_ardour/editor.cc:3572
+#: gtk2_ardour/editor.cc:3390
+#, fuzzy
+msgid "Lock Edit"
+msgstr "Positionszeiger zum Arbeitspunkt"
+
+#: gtk2_ardour/editor.cc:3403
+msgid "Beats/3"
+msgstr "Schläge / 3"
+
+#: gtk2_ardour/editor.cc:3405
+msgid "Beats/4"
+msgstr "Schläge / 4"
+
+#: gtk2_ardour/editor.cc:3407
+msgid "Beats/8"
+msgstr "Schläge / 8"
+
+#: gtk2_ardour/editor.cc:3409
+msgid "Beats/16"
+msgstr "Schläge / 16"
+
+#: gtk2_ardour/editor.cc:3411
+msgid "Beats/32"
+msgstr "Schläge / 32"
+
+#: gtk2_ardour/editor.cc:3413
+msgid "Beats"
+msgstr "Schläge"
+
+#: gtk2_ardour/editor.cc:3415
+msgid "Bars"
+msgstr "Takte"
+
+#: gtk2_ardour/editor.cc:3417
+msgid "Marks"
+msgstr "Marker"
+
+#: gtk2_ardour/editor.cc:3419
+msgid "Region starts"
+msgstr "Regionen-Anfang"
+
+#: gtk2_ardour/editor.cc:3421
+msgid "Region ends"
+msgstr "Regionen-Ende"
+
+#: gtk2_ardour/editor.cc:3423
+msgid "Region bounds"
+msgstr "Regionen-Grenzen"
+
+#: gtk2_ardour/editor.cc:3425
+msgid "Region syncs"
+msgstr "Regionen-Sync"
+
+#: gtk2_ardour/editor.cc:3427
+msgid "CD Frames"
+msgstr "CD-Frames"
+
+#: gtk2_ardour/editor.cc:3429
+msgid "SMPTE Frames"
+msgstr "SMPTE-Frames"
+
+#: gtk2_ardour/editor.cc:3433
+msgid "SMPTE Minutes"
+msgstr "SMPTE-Minuten"
+
+#: gtk2_ardour/editor.cc:3435
+msgid "Seconds"
+msgstr "Sekunden"
+
+#: gtk2_ardour/editor.cc:3437
+msgid "Minutes"
+msgstr "Minuten"
+
+#: gtk2_ardour/editor.cc:3453
+msgid "No Grid"
+msgstr "Raster aus"
+
+#: gtk2_ardour/editor.cc:3455
+msgid "Grid"
+msgstr "Einrasten"
+
+#: gtk2_ardour/editor.cc:3457
+msgid "Magnetic"
+msgstr "Magnetisch"
+
+#: gtk2_ardour/editor.cc:3515
+msgid "Left"
+msgstr "Links"
+
+#: gtk2_ardour/editor.cc:3517
+msgid "Right"
+msgstr "Rechts"
+
+#: gtk2_ardour/editor.cc:3519
+msgid "Center"
+msgstr "Mitte"
+
+#: gtk2_ardour/editor.cc:3523
+msgid "Mouse"
+msgstr "Maus"
+
+#: gtk2_ardour/editor.cc:3525
+msgid "Active Mark"
+msgstr "Aktueller Marker"
+
+#: gtk2_ardour/editor.cc:3790
msgid ""
"Playlist %1 is currently unused.\n"
"If left alone, no audio files used by it will be cleaned.\n"
@@ -3175,34 +3307,19 @@ msgstr ""
"Es können keine Audiodateien aufgeräumt werden, die von ihr verwendet werden.\n"
"Falls sie gelöscht wird, werden die ausschließlich von ihr verwendeten Audiodateien gelöscht."
-#: gtk2_ardour/editor.cc:3582
+#: gtk2_ardour/editor.cc:3800
msgid "Delete playlist"
msgstr "Wiedergabeliste löschen"
-#: gtk2_ardour/editor.cc:3583
+#: gtk2_ardour/editor.cc:3801
msgid "Keep playlist"
msgstr "Wiedergabeliste beibehalten"
-#: gtk2_ardour/editor.cc:3584
-#: gtk2_ardour/editor_audio_import.cc:515
-#: gtk2_ardour/editor_timefx.cc:78
-#: gtk2_ardour/export_dialog.cc:1034
-#: gtk2_ardour/io_selector.cc:60
-#: gtk2_ardour/io_selector.cc:748
-#: gtk2_ardour/redirect_box.cc:1022
-#: gtk2_ardour/tempo_dialog.cc:42
-#: gtk2_ardour/tempo_dialog.cc:61
-#: gtk2_ardour/tempo_dialog.cc:256
-#: gtk2_ardour/tempo_dialog.cc:274
-#: gtk2_ardour/connection_editor.cc:59
-msgid "Cancel"
-msgstr "Abbrechen"
-
-#: gtk2_ardour/editor.cc:3752
+#: gtk2_ardour/editor.cc:3979
msgid "New name of snapshot"
msgstr "Name für neuen Schnappschuss"
-#: gtk2_ardour/editor.cc:3770
+#: gtk2_ardour/editor.cc:3997
msgid ""
"Do you really want to remove snapshot \"%1\" ?\n"
"(cannot be undone)"
@@ -3210,1476 +3327,2556 @@ msgstr ""
"Wollen Sie den Schnappschuss \"%1\" wirklich löschen?\n"
"(Dies kann nicht rückgängig gemacht werden!)"
-#: gtk2_ardour/editor.cc:3772
-#: gtk2_ardour/editor_ops.cc:206
-#: gtk2_ardour/editor_ops.cc:3954
-#: gtk2_ardour/route_ui.cc:790
-#: gtk2_ardour/visual_time_axis.cc:282
-msgid "No, do nothing."
-msgstr "Nein, nichts machen."
-
-#: gtk2_ardour/editor.cc:3773
-#: gtk2_ardour/route_ui.cc:791
-#: gtk2_ardour/visual_time_axis.cc:283
-msgid "Yes, remove it."
-msgstr "Ja, entfernen."
-
-#: gtk2_ardour/editor.cc:3883
+#: gtk2_ardour/editor.cc:4106
msgid "new playlists"
msgstr "Neue Wiedergabelisten"
-#: gtk2_ardour/editor.cc:3898
+#: gtk2_ardour/editor.cc:4123
msgid "copy playlists"
msgstr "Wiedergabelisten kopieren"
-#: gtk2_ardour/editor.cc:3913
+#: gtk2_ardour/editor.cc:4140
msgid "clear playlists"
msgstr "Wiedergabelisten zurücksetzen"
+#: gtk2_ardour/editor.cc:4736
+msgid "Please wait while Ardour loads visual data"
+msgstr "Bitte warten Sie, während Ardour Daten zur Anzeige des Projekts lädt"
+
+#: gtk2_ardour/route_time_axis.cc:99
+msgid "m"
+msgstr "m"
+
+#: gtk2_ardour/route_time_axis.cc:99
+msgid "s"
+msgstr "s"
+
+#: gtk2_ardour/route_time_axis.cc:99
+msgid "r"
+msgstr "r"
+
+#: gtk2_ardour/route_time_axis.cc:103
+msgid "g"
+msgstr "g"
+
+#: gtk2_ardour/route_time_axis.cc:104
+msgid "p"
+msgstr "w"
+
+#: gtk2_ardour/route_time_axis.cc:106
+msgid "a"
+msgstr "a"
+
+#: gtk2_ardour/route_time_axis.cc:166
+#: gtk2_ardour/mixer_strip.cc:88
+#: gtk2_ardour/mixer_strip.cc:109
+msgid "Record"
+msgstr "Aufnahme"
+
+#: gtk2_ardour/route_time_axis.cc:181
+#: gtk2_ardour/mixer_strip.cc:88
+#: gtk2_ardour/mixer_strip.cc:109
+#: gtk2_ardour/mixer_strip.cc:487
+msgid "Solo"
+msgstr "Solo"
+
+#: gtk2_ardour/route_time_axis.cc:183
+msgid "Edit Group"
+msgstr "Bearbeitungsgruppe"
+
+#: gtk2_ardour/route_time_axis.cc:185
+msgid "Playlist"
+msgstr "Wiedergabeliste"
+
+#: gtk2_ardour/route_time_axis.cc:186
+#: gtk2_ardour/route_time_axis.cc:451
+msgid "Automation"
+msgstr "Automationen"
+
+#: gtk2_ardour/route_time_axis.cc:301
+#: gtk2_ardour/mixer_strip.cc:969
+msgid "No group"
+msgstr "keine Gruppe"
+
+#: gtk2_ardour/route_time_axis.cc:411
+msgid "Show all automation"
+msgstr "Alle Automationen zeigen"
+
+#: gtk2_ardour/route_time_axis.cc:414
+msgid "Show existing automation"
+msgstr "Verfügbare Automationen zeigen"
+
+#: gtk2_ardour/route_time_axis.cc:417
+msgid "Hide all automation"
+msgstr "Automationen verbergen"
+
+#: gtk2_ardour/route_time_axis.cc:420
+msgid "Plugins"
+msgstr "Plugins"
+
+#: gtk2_ardour/route_time_axis.cc:450
+#: gtk2_ardour/mixer_strip.cc:1057
+msgid "Remote Control ID"
+msgstr "ID für Fernsteuerung"
+
+#: gtk2_ardour/route_time_axis.cc:467
+msgid "Align with existing material"
+msgstr "An vorhandenem Material ausrichten"
+
+#: gtk2_ardour/route_time_axis.cc:473
+msgid "Align with capture time"
+msgstr "An Aufnahmezeit ausrichten"
+
+#: gtk2_ardour/route_time_axis.cc:480
+msgid "Alignment"
+msgstr "Ausrichtung"
+
+#: gtk2_ardour/route_time_axis.cc:484
+msgid "Normal mode"
+msgstr "Normaler Modus"
+
+#: gtk2_ardour/route_time_axis.cc:487
+msgid "Tape mode"
+msgstr "Tape-Modus"
+
+#: gtk2_ardour/route_time_axis.cc:535
+#: gtk2_ardour/route_time_axis.cc:590
+#: gtk2_ardour/route_time_axis.cc:836
+msgid "programming error: %1 %2"
+msgstr "Programmierfehler: %1 %2"
+
+#: gtk2_ardour/route_time_axis.cc:860
+msgid "Name for playlist"
+msgstr "Name für Wiedergabeliste"
+
+#: gtk2_ardour/route_time_axis.cc:943
+#: gtk2_ardour/route_time_axis.cc:993
+msgid "Name for Playlist"
+msgstr "Name für Wiedergabeliste"
+
+#: gtk2_ardour/route_time_axis.cc:1386
+msgid "New Copy"
+msgstr "Neue Kopie"
+
+#: gtk2_ardour/route_time_axis.cc:1390
+msgid "New Take"
+msgstr "Neuer Take"
+
+#: gtk2_ardour/route_time_axis.cc:1391
+msgid "Copy Take"
+msgstr "Take kopieren"
+
+#: gtk2_ardour/route_time_axis.cc:1396
+msgid "Clear Current"
+msgstr "Ausgewählte zurücksetzen"
+
+#: gtk2_ardour/route_time_axis.cc:1399
+msgid "Select from all ..."
+msgstr "Aus allen auswählen..."
+
+#: gtk2_ardour/keyeditor.cc:29
+msgid "Shortcut Editor"
+msgstr "Tastenkürzel - Editor"
+
+#: gtk2_ardour/keyeditor.cc:30
+msgid "Remove shortcut"
+msgstr "Tastenkürzel entfernen"
+
+#: gtk2_ardour/keyeditor.cc:40
+msgid "Action"
+msgstr "Aktion"
+
+#: gtk2_ardour/keyeditor.cc:41
+msgid "Shortcut"
+msgstr "Tastenkürzel"
+
+#: gtk2_ardour/keyeditor.cc:61
+msgid "Select an action, then press the key(s) to (re)set its shortcut"
+msgstr ""
+"Wählen Sie eine Aktion und drücken Sie dann die Taste(n) \n"
+"um das Tastaturkürzel zu setzen"
+
+#: gtk2_ardour/keyeditor.cc:267
+msgid "Command-"
+msgstr "Befehl-"
+
+#: gtk2_ardour/keyeditor.cc:268
+msgid "Option-"
+msgstr "Option-"
+
+#: gtk2_ardour/keyeditor.cc:269
+msgid "Shift-"
+msgstr "Groß-"
+
+#: gtk2_ardour/keyeditor.cc:270
+msgid "Control-"
+msgstr "Strg-"
+
+#: gtk2_ardour/add_route_dialog.cc:62
+msgid "ardour: add track/bus"
+msgstr "ardour: Füge Spur/Bus hinzu"
+
+#: gtk2_ardour/add_route_dialog.cc:63
+msgid "Tracks"
+msgstr "Audiospuren"
+
+#: gtk2_ardour/add_route_dialog.cc:64
+msgid "Busses"
+msgstr "Busse"
+
+#: gtk2_ardour/add_route_dialog.cc:114
+#: gtk2_ardour/plugin_ui.cc:316
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: gtk2_ardour/add_route_dialog.cc:132
+msgid "Name (template)"
+msgstr "Name für Mixer-Vorlage"
+
+#: gtk2_ardour/add_route_dialog.cc:138
+msgid "Channel Configuration"
+msgstr "Kanaleinstellungen"
+
+#: gtk2_ardour/add_route_dialog.cc:203
+msgid "Tape"
+msgstr "Tape"
+
+#: gtk2_ardour/add_route_dialog.cc:220
+msgid "Mono"
+msgstr "Mono"
+
+#: gtk2_ardour/add_route_dialog.cc:222
+msgid "Stereo"
+msgstr "Stereo"
+
+#: gtk2_ardour/export_region_dialog.cc:34
+msgid "ardour: export region"
+msgstr "ardour: Region Exportieren"
+
+#: gtk2_ardour/mixer_strip.cc:98
+#: gtk2_ardour/mixer_strip.cc:119
+#: gtk2_ardour/mixer_strip.cc:379
+#: gtk2_ardour/mixer_strip.cc:1287
+msgid "pre"
+msgstr "Pre"
+
+#: gtk2_ardour/mixer_strip.cc:99
+#: gtk2_ardour/mixer_strip.cc:120
+#: gtk2_ardour/mixer_strip.cc:848
+msgid "Comments"
+msgstr "Kommentare"
+
+#: gtk2_ardour/mixer_strip.cc:147
+msgid "Input"
+msgstr "Eingang"
+
+#: gtk2_ardour/mixer_strip.cc:152
+#: gtk2_ardour/mixer_strip.cc:794
+msgid "Output"
+msgstr "Ausgang"
+
+#: gtk2_ardour/mixer_strip.cc:164
+msgid "tupni"
+msgstr "tupni"
+
+#: gtk2_ardour/mixer_strip.cc:359
+msgid "Varispeed"
+msgstr "Varispeed"
+
+#: gtk2_ardour/mixer_strip.cc:375
+#: gtk2_ardour/mixer_strip.cc:1283
+msgid "input"
+msgstr "Input"
+
+#: gtk2_ardour/mixer_strip.cc:383
+#: gtk2_ardour/mixer_strip.cc:1291
+msgid "post"
+msgstr "Post"
+
+#: gtk2_ardour/mixer_strip.cc:388
+#: gtk2_ardour/mixer_strip.cc:864
+msgid "Click to Add/Edit Comments"
+msgstr "Kommentare hinzufügen/ändern"
+
+#: gtk2_ardour/mixer_strip.cc:484
+msgid "record"
+msgstr "Aufnahme"
+
+#: gtk2_ardour/mixer_strip.cc:491
+msgid "comments"
+msgstr "Kommentare"
+
+#: gtk2_ardour/mixer_strip.cc:494
+msgid "*comments*"
+msgstr "*Kommentare*"
+
+#: gtk2_ardour/mixer_strip.cc:506
+msgid "Rec"
+msgstr "Rec"
+
+#: gtk2_ardour/mixer_strip.cc:509
+msgid "S"
+msgstr "S"
+
+#: gtk2_ardour/mixer_strip.cc:513
+#: gtk2_ardour/mixer_strip.cc:858
+msgid "Cmt"
+msgstr "Kmt"
+
+#: gtk2_ardour/mixer_strip.cc:516
+#: gtk2_ardour/mixer_strip.cc:855
+msgid "*Cmt*"
+msgstr "*Kmt*"
+
+#: gtk2_ardour/mixer_strip.cc:655
+#: gtk2_ardour/mixer_strip.cc:671
+msgid "could not register new ports required for that connection"
+msgstr "Konnte die Ports, die diese Verbindung benötigt nicht registrieren"
+
+#: gtk2_ardour/mixer_strip.cc:774
+msgid " Input"
+msgstr "Eingang"
+
+#: gtk2_ardour/mixer_strip.cc:777
+msgid "I"
+msgstr "I"
+
+#: gtk2_ardour/mixer_strip.cc:797
+msgid "O"
+msgstr "O"
+
+#: gtk2_ardour/mixer_strip.cc:845
+msgid "*Comments*"
+msgstr "*Kommentare*"
+
+#: gtk2_ardour/mixer_strip.cc:900
+msgid ": comment editor"
+msgstr "Kommentare bearbeiten"
+
+#: gtk2_ardour/mixer_strip.cc:995
+msgid "Grp"
+msgstr "Grp"
+
+#: gtk2_ardour/mixer_strip.cc:998
+msgid "~G"
+msgstr "~G"
+
+#: gtk2_ardour/mixer_strip.cc:1046
+msgid "Invert Polarity"
+msgstr "Polarität umkehren"
+
+#: gtk2_ardour/mixer_strip.cc:1049
+msgid "Protect against denormals"
+msgstr "Schutz vor Denormals"
+
+#: gtk2_ardour/plugin_ui.cc:87
+msgid "Eh? LADSPA plugins don't have editors!"
+msgstr "Merkwürdig... LADSPA-Plugins sollten kein GUI haben!"
+
+#: gtk2_ardour/plugin_ui.cc:96
+#: gtk2_ardour/plugin_ui.cc:203
+msgid "unknown type of editor-supplying plugin (note: no VST support in this version of ardour)"
+msgstr "Unbekannter Plugintyp (Hinweis: diese Ardour-Version unterstützt keine VST-Plugins)"
+
+#: gtk2_ardour/plugin_ui.cc:99
+msgid "unknown type of editor-supplying plugin"
+msgstr "Unbekannter Plugintyp"
+
+#: gtk2_ardour/plugin_ui.cc:268
+msgid "create_lv2_editor called on non-LV2 plugin"
+msgstr "create_lv2_editor auf nicht-LV2-Plugin angewandt"
+
+#: gtk2_ardour/plugin_ui.cc:347
+msgid "Plugin preset %1 not found"
+msgstr "Plugin Preset %1 nicht gefunden"
+
+#: gtk2_ardour/plugin_ui.cc:356
+msgid "Name of New Preset:"
+msgstr "Name für neue Voreinstellung:"
+
+#: gtk2_ardour/imageframe_socket_handler.cc:126
+msgid "Image Compositor Socket has been shutdown/closed"
+msgstr ""
+
+#: gtk2_ardour/location_ui.cc:49
+#: gtk2_ardour/location_ui.cc:52
+msgid "Use PH"
+msgstr "zu PZ"
+
+#: gtk2_ardour/location_ui.cc:50
+#: gtk2_ardour/location_ui.cc:53
+msgid "Go"
+msgstr "Gehe zu"
+
+#: gtk2_ardour/location_ui.cc:56
+msgid "CD"
+msgstr "CD"
+
+#: gtk2_ardour/location_ui.cc:57
+msgid "Hidden"
+msgstr "Versteckt"
+
+#: gtk2_ardour/location_ui.cc:59
+msgid "SCMS"
+msgstr "SCMS"
+
+#: gtk2_ardour/location_ui.cc:60
+msgid "Pre-Emphasis"
+msgstr "Präemphase"
+
+#: gtk2_ardour/location_ui.cc:85
+#: gtk2_ardour/location_ui.cc:86
+msgid "Set value to Playhead"
+msgstr "Wert auf Positionszeiger setzen"
+
+#: gtk2_ardour/location_ui.cc:443
+msgid "You cannot put a CD marker at the start of the session"
+msgstr "Sie können keinen CD-Marker am Anfang des Projekts erstellen"
+
+#: gtk2_ardour/location_ui.cc:624
+msgid "Add New Location"
+msgstr "Neue Position hinzufügen"
+
+#: gtk2_ardour/location_ui.cc:625
+msgid "Add New Range"
+msgstr "Neuen Bereich hinzufügen"
+
+#: gtk2_ardour/location_ui.cc:663
+msgid "Location (CD Index) Markers"
+msgstr "Positionsmarker (CD Index)"
+
+#: gtk2_ardour/location_ui.cc:683
+msgid "Range (CD Track) Markers"
+msgstr "Bereiche (CD Tracks)"
+
+#: gtk2_ardour/location_ui.cc:720
+msgid "remove marker"
+msgstr "Marker entfernen"
+
+#: gtk2_ardour/location_ui.cc:851
+msgid "add marker"
+msgstr "Marker hinzufügen"
+
+#: gtk2_ardour/location_ui.cc:870
+msgid "add range marker"
+msgstr "Bereich hinzufügen"
+
+#: gtk2_ardour/sfdb_ui.cc:77
+#: gtk2_ardour/sfdb_ui.cc:97
+#: gtk2_ardour/sfdb_ui.cc:106
+msgid "as new tracks"
+msgstr "als neue Spuren"
+
+#: gtk2_ardour/sfdb_ui.cc:79
+#: gtk2_ardour/sfdb_ui.cc:99
+msgid "to selected tracks"
+msgstr "zu ausgewählten Spuren"
+
+#: gtk2_ardour/sfdb_ui.cc:81
+#: gtk2_ardour/sfdb_ui.cc:101
+msgid "to region list"
+msgstr "zur Liste der Regionen"
+
+#: gtk2_ardour/sfdb_ui.cc:83
+#: gtk2_ardour/sfdb_ui.cc:103
+msgid "as new tape tracks"
+msgstr "als neue Tape-Spuren"
+
+#: gtk2_ardour/sfdb_ui.cc:87
+msgid "programming error: unknown import mode string %1"
+msgstr "Programmierfehler: unbekannter Importmodus %1"
+
+#: gtk2_ardour/sfdb_ui.cc:115
+msgid "Auto-play"
+msgstr "Auto-Play"
+
+#: gtk2_ardour/sfdb_ui.cc:124
+#: gtk2_ardour/sfdb_ui.cc:234
+msgid "<b>Soundfile Info</b>"
+msgstr "<b>Eigenschaften der Audiodatei</b>"
+
+#: gtk2_ardour/sfdb_ui.cc:135
+msgid "Length:"
+msgstr "Länge:"
+
+#: gtk2_ardour/sfdb_ui.cc:136
+msgid "Timestamp:"
+msgstr "Zeitstempel:"
+
+#: gtk2_ardour/sfdb_ui.cc:137
+msgid "Format:"
+msgstr "Format:"
+
+#: gtk2_ardour/sfdb_ui.cc:138
+msgid "Channels:"
+msgstr "Kanäle:"
+
+#: gtk2_ardour/sfdb_ui.cc:139
+#: gtk2_ardour/sfdb_ui.cc:254
+#: gtk2_ardour/sfdb_ui.cc:259
+msgid "Sample rate:"
+msgstr "Samplerate:"
+
+#: gtk2_ardour/sfdb_ui.cc:171
+#: gtk2_ardour/sfdb_ui.cc:490
+msgid "Tags:"
+msgstr "Stichworte:"
+
+#: gtk2_ardour/sfdb_ui.cc:181
+msgid "Play (double click)"
+msgstr "Play"
+
+#: gtk2_ardour/sfdb_ui.cc:235
+#: gtk2_ardour/sfdb_ui.cc:236
+#: gtk2_ardour/sfdb_ui.cc:237
+msgid "n/a"
+msgstr "n/a"
+
+#: gtk2_ardour/sfdb_ui.cc:314
+msgid "Could not read file: %1 (%2)."
+msgstr "Konnte Datei nicht lesen: %1 (%2)."
+
+#: gtk2_ardour/sfdb_ui.cc:334
+msgid "Could not access soundfile: "
+msgstr "Konnte auf Audiodatei nicht zugreifen: "
+
+#: gtk2_ardour/sfdb_ui.cc:380
+msgid "SoundFileBox: Could not tokenize string: "
+msgstr "SoundFileBox: Konnte Zeichenkette nicht zerlegen: "
+
+#: gtk2_ardour/sfdb_ui.cc:400
+msgid "Search"
+msgstr "Suchen"
+
+#: gtk2_ardour/sfdb_ui.cc:402
+#: gtk2_ardour/sfdb_ui.cc:792
+msgid "Start Downloading"
+msgstr "Download beginnen"
+
+#: gtk2_ardour/sfdb_ui.cc:417
+msgid "Audio files"
+msgstr "Audiodateien"
+
+#: gtk2_ardour/sfdb_ui.cc:420
+msgid "All files"
+msgstr "Alle Dateien"
+
+#: gtk2_ardour/sfdb_ui.cc:431
+msgid "Browse Files"
+msgstr "Durchsuchen"
+
+#: gtk2_ardour/sfdb_ui.cc:458
+#: gtk2_ardour/sfdb_ui.cc:505
+msgid "Paths"
+msgstr "Pfade"
+
+#: gtk2_ardour/sfdb_ui.cc:467
+msgid "Search Tags"
+msgstr "Stichwortsuche"
+
+#: gtk2_ardour/sfdb_ui.cc:482
+msgid "User:"
+msgstr "Benutzer:"
+
+#: gtk2_ardour/sfdb_ui.cc:486
+msgid "Password:"
+msgstr "Passwort"
+
+#: gtk2_ardour/sfdb_ui.cc:515
+msgid "Search Freesound"
+msgstr "Freesound durchsuchen"
+
+#: gtk2_ardour/sfdb_ui.cc:698
+msgid "SoundFileBrowser: Could not tokenize string: "
+msgstr "SoundFileBrowser: Konnte Zeichenkete nicht zerlegen:"
+
+#: gtk2_ardour/sfdb_ui.cc:734
+msgid "Cancelling.."
+msgstr "Abbrechen..."
+
+#: gtk2_ardour/sfdb_ui.cc:959
+#: gtk2_ardour/sfdb_ui.cc:1238
+#: gtk2_ardour/sfdb_ui.cc:1280
+msgid "one track per file"
+msgstr "eine Spur pro Datei"
+
+#: gtk2_ardour/sfdb_ui.cc:962
+#: gtk2_ardour/sfdb_ui.cc:1281
+msgid "one track per channel"
+msgstr "eine Spur pro Kanal"
+
+#: gtk2_ardour/sfdb_ui.cc:970
+#: gtk2_ardour/sfdb_ui.cc:1283
+msgid "sequence files"
+msgstr "Dateien aneinanderreihen"
+
+#: gtk2_ardour/sfdb_ui.cc:973
+#: gtk2_ardour/sfdb_ui.cc:987
+#: gtk2_ardour/sfdb_ui.cc:1287
+msgid "all files in one region"
+msgstr "alle Dateien in einer Region"
+
+#: gtk2_ardour/sfdb_ui.cc:979
+#: gtk2_ardour/sfdb_ui.cc:1285
+msgid "one region per file"
+msgstr "eine Region pro Datei"
+
+#: gtk2_ardour/sfdb_ui.cc:982
+#: gtk2_ardour/sfdb_ui.cc:1286
+msgid "one region per channel"
+msgstr "eine Region pro Kanal"
+
+#: gtk2_ardour/sfdb_ui.cc:1040
+msgid ""
+"One or more of the selected files\n"
+"cannot be used by Ardour"
+msgstr ""
+"Eine oder mehrere der ausgewählten Dateien\n"
+"können nicht von Ardour benutzt werden"
+
+#: gtk2_ardour/sfdb_ui.cc:1167
+msgid "Copy files to session"
+msgstr "Kopiere Dateien zum Projekt"
+
+#: gtk2_ardour/sfdb_ui.cc:1183
+#: gtk2_ardour/sfdb_ui.cc:1318
+msgid "use file timestamp"
+msgstr "Zeitstempel"
+
+#: gtk2_ardour/sfdb_ui.cc:1184
+#: gtk2_ardour/sfdb_ui.cc:1320
+msgid "at edit point"
+msgstr "Arbeitspunkt"
+
+#: gtk2_ardour/sfdb_ui.cc:1185
+#: gtk2_ardour/sfdb_ui.cc:1322
+msgid "at playhead"
+msgstr "Positionszeiger"
+
+#: gtk2_ardour/sfdb_ui.cc:1186
+msgid "at session start"
+msgstr "Projektanfang"
+
+#: gtk2_ardour/sfdb_ui.cc:1191
+msgid "Add files:"
+msgstr "Hinzufügen:"
+
+#: gtk2_ardour/sfdb_ui.cc:1213
+msgid "Insert:"
+msgstr "Einfügepunkt:"
+
+#: gtk2_ardour/sfdb_ui.cc:1226
+msgid "Mapping:"
+msgstr "Zuordnung:"
+
+#: gtk2_ardour/sfdb_ui.cc:1244
+msgid "Conversion Quality:"
+msgstr "SR-Konvertierung:"
+
+#: gtk2_ardour/sfdb_ui.cc:1256
+#: gtk2_ardour/sfdb_ui.cc:1334
+msgid "Best"
+msgstr "bestmöglich"
+
+#: gtk2_ardour/sfdb_ui.cc:1257
+#: gtk2_ardour/sfdb_ui.cc:1336
+msgid "Good"
+msgstr "gut"
+
+#: gtk2_ardour/sfdb_ui.cc:1258
+#: gtk2_ardour/sfdb_ui.cc:1338
+msgid "Quick"
+msgstr "schnell"
+
+#: gtk2_ardour/sfdb_ui.cc:1282
+msgid "merge files"
+msgstr "Dateien zusammenfügen"
+
+#: gtk2_ardour/sfdb_ui.cc:1359
+msgid "programming error: %1 (%2)"
+msgstr "Programmierfehler: %1 (%2)"
+
+#: gtk2_ardour/editor_export_audio.cc:66
+msgid ""
+"There is no selection to export.\n"
+"\n"
+"Select a selection using the range mouse mode"
+msgstr ""
+"Es wurde keine Auswahlbereich zum Exportieren erstellt.\n"
+"\n"
+"Erstellen Sie eine Auswahl mit dem Bereichswerkzeug"
+
+#: gtk2_ardour/editor_export_audio.cc:109
+msgid ""
+"There are no ranges to export.\n"
+"\n"
+"Create 1 or more ranges by dragging the mouse in the range bar"
+msgstr ""
+"Es gibt keine Bereiche, die exportiert werden können.\n"
+"\n"
+"Erstellen Sie einen oder mehrere Bereiche, indem Sie den Mauszeiger in der Bereichleiste ziehen"
+
#: gtk2_ardour/editor_actions.cc:49
-msgid "Select Regions"
-msgstr "Region auswählen"
+msgid "Autoconnect"
+msgstr "Automatisch verbinden"
#: gtk2_ardour/editor_actions.cc:50
-msgid "Select Range Operations"
-msgstr "Bereichs"
+msgid "Crossfades"
+msgstr "Crossfades"
-#: gtk2_ardour/editor_actions.cc:51
+#: gtk2_ardour/editor_actions.cc:52
msgid "Move Selected Marker"
msgstr "Ausgewählten Positionsmarker verschieben"
-#: gtk2_ardour/editor_actions.cc:52
-msgid "Region operations"
-msgstr "Region(en)"
-
#: gtk2_ardour/editor_actions.cc:53
-msgid "Tools"
-msgstr "Werkzeuge"
+msgid "Select Range Operations"
+msgstr "Bereichs"
#: gtk2_ardour/editor_actions.cc:54
-msgid "View"
-msgstr "Ansicht"
+msgid "Select Regions"
+msgstr "Region auswählen"
#: gtk2_ardour/editor_actions.cc:55
-msgid "ZoomFocus"
-msgstr "Zoom-Mittelpunkt"
-
-#: gtk2_ardour/editor_actions.cc:56
-msgid "Meter hold"
-msgstr "Pegelanzeige halten"
+msgid "Edit Point"
+msgstr "Arbeitspunkt"
#: gtk2_ardour/editor_actions.cc:57
-msgid "Meter falloff"
-msgstr "Abfall der Pegelanzeigen"
+msgid "Latch"
+msgstr "Latch"
+
+#: gtk2_ardour/editor_actions.cc:58
+msgid "Layering"
+msgstr "Layering"
#: gtk2_ardour/editor_actions.cc:59
-msgid "Crossfades"
-msgstr "Crossfades"
+msgid "Link"
+msgstr "Link"
#: gtk2_ardour/editor_actions.cc:60
-msgid "Monitoring"
-msgstr "Monitoring"
+#, fuzzy
+msgid "Locate To Markers"
+msgstr "Positionsmarker"
#: gtk2_ardour/editor_actions.cc:61
-msgid "Autoconnect"
-msgstr "Automatisch verbinden"
+#: gtk2_ardour/editor_actions.cc:685
+msgid "Markers"
+msgstr "Marker"
#: gtk2_ardour/editor_actions.cc:62
-msgid "Layering"
-msgstr "Layering"
+msgid "Meter falloff"
+msgstr "Abfall der Pegelanzeigen"
#: gtk2_ardour/editor_actions.cc:63
-msgid "Timecode fps"
-msgstr "Timecode FPS"
+msgid "Meter hold"
+msgstr "Pegelanzeige halten"
#: gtk2_ardour/editor_actions.cc:64
+msgid "Misc Options"
+msgstr "Sonstiges"
+
+#: gtk2_ardour/editor_actions.cc:65
+msgid "Monitoring"
+msgstr "Monitoring"
+
+#: gtk2_ardour/editor_actions.cc:70
+msgid "Primary Clock"
+msgstr "Erste Zeitanzeige"
+
+#: gtk2_ardour/editor_actions.cc:71
msgid "Pullup / Pulldown"
msgstr "Pull-Up / Pull-Down"
-#: gtk2_ardour/editor_actions.cc:65
+#: gtk2_ardour/editor_actions.cc:72
+msgid "Region"
+msgstr "Region"
+
+#: gtk2_ardour/editor_actions.cc:73
+msgid "Region operations"
+msgstr "Region(en)"
+
+#: gtk2_ardour/editor_actions.cc:74
+msgid "Gain"
+msgstr "Gain"
+
+#: gtk2_ardour/editor_actions.cc:75
+msgid "Rulers"
+msgstr "Markierungsleisten"
+
+#: gtk2_ardour/editor_actions.cc:76
+msgid "Views"
+msgstr "Ansichten"
+
+#: gtk2_ardour/editor_actions.cc:77
+msgid "Scroll"
+msgstr "Scrollen"
+
+#: gtk2_ardour/editor_actions.cc:78
+msgid "Secondary Clock"
+msgstr "Zweite Zeitanzeige"
+
+#: gtk2_ardour/editor_actions.cc:81
+#: gtk2_ardour/editor_actions.cc:511
+msgid "Separate"
+msgstr "Teilen"
+
+#: gtk2_ardour/editor_actions.cc:85
msgid "Subframes"
msgstr "Subframes"
-#: gtk2_ardour/editor_actions.cc:66
-#, fuzzy
-msgid "Locate To Markers"
-msgstr "Positionsmarker"
+#: gtk2_ardour/editor_actions.cc:88
+msgid "Timecode fps"
+msgstr "Timecode FPS"
-#: gtk2_ardour/editor_actions.cc:70
+#: gtk2_ardour/editor_actions.cc:91
+msgid "Tools"
+msgstr "Werkzeuge"
+
+#: gtk2_ardour/editor_actions.cc:93
+msgid "View"
+msgstr "Ansicht"
+
+#: gtk2_ardour/editor_actions.cc:94
+msgid "Waveforms"
+msgstr "Wellenform"
+
+#: gtk2_ardour/editor_actions.cc:95
+msgid "Zoom Focus"
+msgstr "Zoom Fokus"
+
+#: gtk2_ardour/editor_actions.cc:96
+msgid "Zoom"
+msgstr "Zoom"
+
+#: gtk2_ardour/editor_actions.cc:98
msgid "Link Region/Track Selection"
msgstr "Spurauswahl folgt Auswahl der Region"
-#: gtk2_ardour/editor_actions.cc:72
+#: gtk2_ardour/editor_actions.cc:99
+msgid "Break drag"
+msgstr "Verschieben abbrechen"
+
+#: gtk2_ardour/editor_actions.cc:101
msgid "Show Editor Mixer"
msgstr "Mixer-Panel zeigen"
-#: gtk2_ardour/editor_actions.cc:77
+#: gtk2_ardour/editor_actions.cc:106
msgid "Span Entire Overlap"
msgstr "Gesamte Ãœberlappung"
-#: gtk2_ardour/editor_actions.cc:86
+#: gtk2_ardour/editor_actions.cc:115
msgid "Created Automatically"
msgstr "Automatisch erzeugen"
-#: gtk2_ardour/editor_actions.cc:89
+#: gtk2_ardour/editor_actions.cc:118
+msgid "Use Region Fades (global)"
+msgstr "Regionen-Fades global benutzen"
+
+#: gtk2_ardour/editor_actions.cc:120
+msgid "Show Region Fades"
+msgstr "Fades anzeigen"
+
+#: gtk2_ardour/editor_actions.cc:122
+msgid "Toggle Region Fade In"
+msgstr "Fade-In (de-)aktivieren"
+
+#: gtk2_ardour/editor_actions.cc:124
+msgid "Toggle Region Fade Out"
+msgstr "Fade-Out (de-)aktivieren"
+
+#: gtk2_ardour/editor_actions.cc:126
+msgid "Toggle Region Fades"
+msgstr "Ãœberblenden von Region (de-)aktivieren"
+
+#: gtk2_ardour/editor_actions.cc:129
msgid "Playhead to Next Region Boundary"
msgstr "Positionszeiger zur nächsten Regiongrenze"
-#: gtk2_ardour/editor_actions.cc:91
+#: gtk2_ardour/editor_actions.cc:131
msgid "Playhead to Previous Region Boundary"
msgstr "Positionszeiger zur vorherigen Regiongrenze"
-#: gtk2_ardour/editor_actions.cc:94
+#: gtk2_ardour/editor_actions.cc:134
msgid "Playhead to Next Region Start"
msgstr "Positionszeiger zum Anfang der nächsten Region"
-#: gtk2_ardour/editor_actions.cc:96
+#: gtk2_ardour/editor_actions.cc:136
msgid "Playhead to Next Region End"
msgstr "Positionszeiger zum Ende der nächsten Region"
-#: gtk2_ardour/editor_actions.cc:98
+#: gtk2_ardour/editor_actions.cc:138
msgid "Playhead to Next Region Sync"
msgstr "Positionszeiger zum Einrastpunkt der nächsten Region"
-#: gtk2_ardour/editor_actions.cc:101
+#: gtk2_ardour/editor_actions.cc:141
msgid "Playhead to Previous Region Start"
msgstr "Positionszeiger zum Anfang der vorherigen Region"
-#: gtk2_ardour/editor_actions.cc:103
+#: gtk2_ardour/editor_actions.cc:143
msgid "Playhead to Previous Region End"
msgstr "Positionszeiger zum Ende der vorherigen Region"
-#: gtk2_ardour/editor_actions.cc:105
+#: gtk2_ardour/editor_actions.cc:145
msgid "Playhead to Previous Region Sync"
msgstr "Positionszeiger zum Einrastpunkt der vorherigen Region"
-#: gtk2_ardour/editor_actions.cc:108
+#: gtk2_ardour/editor_actions.cc:148
msgid "to Next Region Boundary"
msgstr "zur nächsten Regiongrenze"
-#: gtk2_ardour/editor_actions.cc:110
+#: gtk2_ardour/editor_actions.cc:150
msgid "to Previous Region Boundary"
msgstr "zur vorherigen Regiongrenze"
-#: gtk2_ardour/editor_actions.cc:113
+#: gtk2_ardour/editor_actions.cc:153
msgid "to Next Region Start"
msgstr "zum Anfang der nächsten Region"
-#: gtk2_ardour/editor_actions.cc:115
+#: gtk2_ardour/editor_actions.cc:155
msgid "to Next Region End"
msgstr "zum Ende der nächsten Region"
-#: gtk2_ardour/editor_actions.cc:117
+#: gtk2_ardour/editor_actions.cc:157
msgid "to Next Region Sync"
msgstr "zum Einrastpunkt der nächsten Region"
-#: gtk2_ardour/editor_actions.cc:120
+#: gtk2_ardour/editor_actions.cc:160
msgid "to Previous Region Start"
msgstr "zum Anfang der vorherigen Region"
-#: gtk2_ardour/editor_actions.cc:122
+#: gtk2_ardour/editor_actions.cc:162
msgid "to Previous Region End"
msgstr "zum Ende der vorherigen Region"
-#: gtk2_ardour/editor_actions.cc:124
+#: gtk2_ardour/editor_actions.cc:164
msgid "to Previous Region Sync"
msgstr "zum Einrastpunkt der vorherigen Region"
-#: gtk2_ardour/editor_actions.cc:127
+#: gtk2_ardour/editor_actions.cc:167
msgid "to Range Start"
msgstr "zum Anfang des Auswahlbereichs"
-#: gtk2_ardour/editor_actions.cc:129
+#: gtk2_ardour/editor_actions.cc:169
msgid "to Range End"
msgstr "zum Ende des Auswahlbereichs"
-#: gtk2_ardour/editor_actions.cc:132
+#: gtk2_ardour/editor_actions.cc:172
msgid "Playhead to Range Start"
msgstr "Positionszeiger zum Anfang des Auswahlbereichs"
-#: gtk2_ardour/editor_actions.cc:134
+#: gtk2_ardour/editor_actions.cc:174
msgid "Playhead to Range End"
msgstr "Positionszeiger zum Ende des Auswahlbereichs"
-#: gtk2_ardour/editor_actions.cc:139
-#: gtk2_ardour/redirect_box.cc:1195
-msgid "Deselect All"
-msgstr "Nichts auswählen"
-
-#: gtk2_ardour/editor_actions.cc:141
+#: gtk2_ardour/editor_actions.cc:181
msgid "Invert Selection"
msgstr "Auswahl umkehren"
-#: gtk2_ardour/editor_actions.cc:160
+#: gtk2_ardour/editor_actions.cc:188
+msgid "Select All Overlapping Edit Range"
+msgstr "Alle Regionen des Bearbeitungsbereichs auswählen "
+
+#: gtk2_ardour/editor_actions.cc:190
+msgid "Select All Inside Edit Range"
+msgstr "Alles inerhalb des Bearbeitungsbereichs auswählen"
+
+#: gtk2_ardour/editor_actions.cc:193
+msgid "Select Edit Range"
+msgstr "Bearbeitungsbereich auswählen"
+
+#: gtk2_ardour/editor_actions.cc:196
msgid "Select All in Punch Range"
msgstr "Alle Regionen im Punch-Bereich auswählen"
-#: gtk2_ardour/editor_actions.cc:162
+#: gtk2_ardour/editor_actions.cc:198
msgid "Select All in Loop Range"
msgstr "Alle Regionen innerhalb der Schleife auswählen"
-#: gtk2_ardour/editor_actions.cc:165
+#: gtk2_ardour/editor_actions.cc:201
msgid "Select Next Track/Bus"
msgstr "Nächste Spur/Bus auswählen"
-#: gtk2_ardour/editor_actions.cc:167
+#: gtk2_ardour/editor_actions.cc:203
msgid "Select Previous Track/Bus"
msgstr "Vorherige Spur/Bus auswählen"
-#: gtk2_ardour/editor_actions.cc:171
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:207
+msgid "Save View 1"
+msgstr "Ansicht 1 speichern"
+
+#: gtk2_ardour/editor_actions.cc:209
+msgid "Goto View 1"
+msgstr "Ansicht 1 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:211
+msgid "Save View 2"
+msgstr "Ansicht 2 speichern"
+
+#: gtk2_ardour/editor_actions.cc:213
+msgid "Goto View 2"
+msgstr "Ansicht 2 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:215
+msgid "Save View 3"
+msgstr "Ansicht 3 speichern"
+
+#: gtk2_ardour/editor_actions.cc:217
+msgid "Goto View 3"
+msgstr "Ansicht 3 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:219
+msgid "Save View 4"
+msgstr "Ansicht 4 speichern"
+
+#: gtk2_ardour/editor_actions.cc:221
+msgid "Goto View 4"
+msgstr "Ansicht 4 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:223
+msgid "Save View 5"
+msgstr "Ansicht 5 speichern"
+
+#: gtk2_ardour/editor_actions.cc:225
+msgid "Goto View 5"
+msgstr "Ansicht 5 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:227
+msgid "Save View 6"
+msgstr "Ansicht 6 speichern"
+
+#: gtk2_ardour/editor_actions.cc:229
+msgid "Goto View 6"
+msgstr "Ansicht 6 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:231
+msgid "Save View 7"
+msgstr "Ansicht 7 speichern"
+
+#: gtk2_ardour/editor_actions.cc:233
+msgid "Goto View 7"
+msgstr "Ansicht 7 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:235
+msgid "Save View 8"
+msgstr "Ansicht 8 speichern"
+
+#: gtk2_ardour/editor_actions.cc:237
+msgid "Goto View 8"
+msgstr "Ansicht 8 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:239
+msgid "Save View 9"
+msgstr "Ansicht 9 speichern"
+
+#: gtk2_ardour/editor_actions.cc:241
+msgid "Goto View 9"
+msgstr "Ansicht 9 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:243
+msgid "Save View 10"
+msgstr "Ansicht 10 speichern"
+
+#: gtk2_ardour/editor_actions.cc:245
+msgid "Goto View 10"
+msgstr "Ansicht 10 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:247
+msgid "Save View 11"
+msgstr "Ansicht 11 speichern"
+
+#: gtk2_ardour/editor_actions.cc:249
+msgid "Goto View 11"
+msgstr "Ansicht 11 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:251
+msgid "Save View 12"
+msgstr "Ansicht 12 speichern"
+
+#: gtk2_ardour/editor_actions.cc:253
+msgid "Goto View 12"
+msgstr "Ansicht 12 aufrufen"
+
+#: gtk2_ardour/editor_actions.cc:257
msgid "Locate to Mark 1"
-msgstr "Zu Marker 1 "
+msgstr "Positionszeiger zu Marker 1 setzen"
-#: gtk2_ardour/editor_actions.cc:173
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:259
msgid "Locate to Mark 2"
-msgstr "Positionszeiger zu Marker setzen"
+msgstr "Positionszeiger zu Marker 2 setzen"
-#: gtk2_ardour/editor_actions.cc:175
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:261
msgid "Locate to Mark 3"
-msgstr "Positionszeiger zu Marker setzen"
+msgstr "Positionszeiger zu Marker 3 setzen"
-#: gtk2_ardour/editor_actions.cc:177
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:263
msgid "Locate to Mark 4"
-msgstr "Positionszeiger zu Marker setzen"
+msgstr "Positionszeiger zu Marker 4 setzen"
-#: gtk2_ardour/editor_actions.cc:179
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:265
msgid "Locate to Mark 5"
-msgstr "Positionszeiger zu Marker setzen"
+msgstr "Positionszeiger zu Marker 5 setzen"
-#: gtk2_ardour/editor_actions.cc:181
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:267
msgid "Locate to Mark 6"
-msgstr "Positionszeiger zu Marker setzen"
+msgstr "Positionszeiger zu Marker 6 setzen"
-#: gtk2_ardour/editor_actions.cc:183
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:269
msgid "Locate to Mark 7"
-msgstr "Positionszeiger zu Marker setzen"
+msgstr "Positionszeiger zu Marker 7 setzen"
-#: gtk2_ardour/editor_actions.cc:185
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:271
msgid "Locate to Mark 8"
-msgstr "Positionszeiger zu Marker setzen"
+msgstr "Positionszeiger zu Marker 8 setzen"
-#: gtk2_ardour/editor_actions.cc:187
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:273
msgid "Locate to Mark 9"
-msgstr "Positionszeiger zu Marker setzen"
+msgstr "Positionszeiger zu Marker 9 setzen"
-#: gtk2_ardour/editor_actions.cc:190
+#: gtk2_ardour/editor_actions.cc:276
msgid "Jump Forward to Mark"
msgstr "Zum nächsten Marker springen"
-#: gtk2_ardour/editor_actions.cc:192
+#: gtk2_ardour/editor_actions.cc:278
msgid "Jump Backward to Mark"
msgstr "Zum vorherigen Marker springen"
-#: gtk2_ardour/editor_actions.cc:194
+#: gtk2_ardour/editor_actions.cc:280
msgid "Add Mark from Playhead"
msgstr "Marker am Positionszeiger setzen"
-#: gtk2_ardour/editor_actions.cc:197
+#: gtk2_ardour/editor_actions.cc:283
msgid "Nudge Forward"
msgstr "Schritt nach vorne"
-#: gtk2_ardour/editor_actions.cc:199
+#: gtk2_ardour/editor_actions.cc:285
msgid "Nudge Next Forward"
msgstr "Nächste Region Schritt vorwärts"
-#: gtk2_ardour/editor_actions.cc:201
+#: gtk2_ardour/editor_actions.cc:287
msgid "Nudge Backward"
msgstr "Schritt nach Hinten"
-#: gtk2_ardour/editor_actions.cc:203
+#: gtk2_ardour/editor_actions.cc:289
msgid "Nudge Next Backward"
msgstr "Nächste Region Schritt rückwärts"
-#: gtk2_ardour/editor_actions.cc:213
+#: gtk2_ardour/editor_actions.cc:292
+msgid "Nudge Playhead Forward"
+msgstr "Positionszeiger vorwärts"
+
+#: gtk2_ardour/editor_actions.cc:294
+msgid "Nudge Playhead Backward"
+msgstr "Positionszeiger rückwärts"
+
+#: gtk2_ardour/editor_actions.cc:296
+msgid "Forward To Grid"
+msgstr "Vorwärts auf Raster"
+
+#: gtk2_ardour/editor_actions.cc:298
+msgid "Backward To Grid"
+msgstr "Rückwärts auf Raster"
+
+#: gtk2_ardour/editor_actions.cc:308
msgid "Zoom to Region"
msgstr "Auf Region zoomen"
-#: gtk2_ardour/editor_actions.cc:215
+#: gtk2_ardour/editor_actions.cc:310
+msgid "Zoom to Region (W&H)"
+msgstr "Auf Region zoomen (B&H)"
+
+#: gtk2_ardour/editor_actions.cc:312
msgid "Toggle Zoom State"
-msgstr ""
+msgstr "Letzten Zoom wählen"
+
+#: gtk2_ardour/editor_actions.cc:315
+msgid "Move Selected Tracks Up"
+msgstr "Ausgewählte Spuren nach oben verschieben"
+
+#: gtk2_ardour/editor_actions.cc:317
+msgid "Move Selected Tracks Down"
+msgstr "Ausgewählte Spuren nach unten verschieben"
-#: gtk2_ardour/editor_actions.cc:218
+#: gtk2_ardour/editor_actions.cc:320
msgid "Scroll Tracks Up"
msgstr "Spuren nach oben scrollen"
-#: gtk2_ardour/editor_actions.cc:220
+#: gtk2_ardour/editor_actions.cc:322
msgid "Scroll Tracks Down"
msgstr "Spuren nach unten scrollen"
-#: gtk2_ardour/editor_actions.cc:222
+#: gtk2_ardour/editor_actions.cc:324
msgid "Step Tracks Up"
msgstr "Spuren langsam nach oben scrollen"
-#: gtk2_ardour/editor_actions.cc:224
+#: gtk2_ardour/editor_actions.cc:326
msgid "Step Tracks Down"
msgstr "Spuren langsam nach unten scrollen"
-#: gtk2_ardour/editor_actions.cc:227
+#: gtk2_ardour/editor_actions.cc:329
msgid "Scroll Backward"
-msgstr "Vorwärts scrollen"
+msgstr "Nach rechts scrollen"
-#: gtk2_ardour/editor_actions.cc:229
+#: gtk2_ardour/editor_actions.cc:331
msgid "Scroll Forward"
-msgstr "Rückwärts scrollen"
+msgstr "Nach links scrollen"
-#: gtk2_ardour/editor_actions.cc:231
+#: gtk2_ardour/editor_actions.cc:333
msgid "goto"
msgstr "Gehe zu"
-#: gtk2_ardour/editor_actions.cc:233
-#: gtk2_ardour/editor_actions.cc:235
-msgid "to Center"
-msgstr "zur Mitte"
+#: gtk2_ardour/editor_actions.cc:335
+msgid "Center Playhead"
+msgstr "Positionszeiger zentrieren"
+
+#: gtk2_ardour/editor_actions.cc:337
+msgid "Center Active Marker"
+msgstr "Marker zentrieren"
-#: gtk2_ardour/editor_actions.cc:238
-msgid "Playhead forward"
+#: gtk2_ardour/editor_actions.cc:340
+msgid "Playhead Forward"
msgstr "Positionszeiger vorwärts"
-#: gtk2_ardour/editor_actions.cc:240
+#: gtk2_ardour/editor_actions.cc:342
msgid "Playhead Backward"
msgstr "Positionszeiger rückwärts"
-#: gtk2_ardour/editor_actions.cc:243
-msgid "to Edit"
-msgstr "Positionszeiger zum Arbeitspunkt"
+#: gtk2_ardour/editor_actions.cc:345
+msgid "Playhead To Active Mark"
+msgstr "Positionszeiger zur aktiven Markierung"
-#: gtk2_ardour/editor_actions.cc:245
-msgid "to Playhead"
-msgstr "zum Positionszeiger"
+#: gtk2_ardour/editor_actions.cc:347
+msgid "Active Mark To Playhead"
+msgstr "Aktiven Marker zum Positionszeiger verschieben"
+
+#: gtk2_ardour/editor_actions.cc:350
+msgid "Trim Start At Edit Point"
+msgstr "Schneide Anfang der Region am Arbeitspunkt"
+
+#: gtk2_ardour/editor_actions.cc:353
+msgid "Trim End At Edit Point"
+msgstr "Schneide Ende der Region am Arbeitspunkt"
-#: gtk2_ardour/editor_actions.cc:248
-msgid "Trim start at edit point"
-msgstr "Schneide Regionanfang am Arbeitspunkt"
+#: gtk2_ardour/editor_actions.cc:357
+msgid "Start To Edit Point"
+msgstr "Von Anfang bis Arbeitspunkt"
-#: gtk2_ardour/editor_actions.cc:250
-msgid "Trim end at edit point"
-msgstr "Schneide Regionende am Arbeitspunkt"
+#: gtk2_ardour/editor_actions.cc:360
+msgid "Edit Point To End"
+msgstr "Von Arbeitspunkt bis Ende"
-#: gtk2_ardour/editor_actions.cc:262
+#: gtk2_ardour/editor_actions.cc:370
msgid "Set Loop From Edit Range"
msgstr "Schleife aus Editierbereich erstellen"
-#: gtk2_ardour/editor_actions.cc:264
+#: gtk2_ardour/editor_actions.cc:372
msgid "Set Loop From Region"
msgstr "Schleife aus Region erstellen"
-#: gtk2_ardour/editor_actions.cc:268
+#: gtk2_ardour/editor_actions.cc:377
msgid "Set Punch From Edit Range"
msgstr "Punch-Bereich aus Editierbereich erstellen"
-#: gtk2_ardour/editor_actions.cc:272
+#: gtk2_ardour/editor_actions.cc:379
+msgid "Set Punch From Region"
+msgstr "Punch-Bereich aus Region erstellen"
+
+#: gtk2_ardour/editor_actions.cc:382
msgid "Transpose"
msgstr "Transponieren"
-#: gtk2_ardour/editor_actions.cc:275
+#: gtk2_ardour/editor_actions.cc:384
+msgid "Toggle Opaque"
+msgstr "Deckend"
+
+#: gtk2_ardour/editor_actions.cc:388
msgid "Set Fade In Length"
msgstr "Ändere Fade-In Länge"
-#: gtk2_ardour/editor_actions.cc:277
+#: gtk2_ardour/editor_actions.cc:390
msgid "Toggle Fade In Active"
msgstr "Fade-In aktivieren"
-#: gtk2_ardour/editor_actions.cc:279
+#: gtk2_ardour/editor_actions.cc:392
msgid "Set Fade Out Length"
msgstr "Fade-Out verändern"
-#: gtk2_ardour/editor_actions.cc:281
+#: gtk2_ardour/editor_actions.cc:394
msgid "Toggle Fade Out Active"
msgstr "Fade-Out aktivieren"
-#: gtk2_ardour/editor_actions.cc:284
+#: gtk2_ardour/editor_actions.cc:397
msgid "Align Regions Start"
msgstr "Anfang der Regionen ausrichten"
-#: gtk2_ardour/editor_actions.cc:286
+#: gtk2_ardour/editor_actions.cc:400
msgid "Align Regions Start Relative"
msgstr "Anfang der Regionen relativ ausrichten"
-#: gtk2_ardour/editor_actions.cc:288
+#: gtk2_ardour/editor_actions.cc:403
msgid "Align Regions End"
msgstr "Regionenenden ausrichten"
-#: gtk2_ardour/editor_actions.cc:290
+#: gtk2_ardour/editor_actions.cc:406
msgid "Align Regions End Relative"
msgstr "Regionenenden relativ ausrichten"
-#: gtk2_ardour/editor_actions.cc:293
+#: gtk2_ardour/editor_actions.cc:410
msgid "Align Regions Sync"
msgstr "Regionen-Einrastpunkt ausrichten"
-#: gtk2_ardour/editor_actions.cc:295
+#: gtk2_ardour/editor_actions.cc:413
msgid "Align Regions Sync Relative"
msgstr "Regionen-Einrastpunkt relativ ausrichten"
-#: gtk2_ardour/editor_actions.cc:298
+#: gtk2_ardour/editor_actions.cc:417
msgid "Play From Edit Point"
msgstr "Wiedergabe ab Arbeitspunkt"
-#: gtk2_ardour/editor_actions.cc:300
+#: gtk2_ardour/editor_actions.cc:419
msgid "Play from Edit Point & Return"
msgstr "Wiedergabe ab Arbeitspunkt & Return"
-#: gtk2_ardour/editor_actions.cc:303
+#: gtk2_ardour/editor_actions.cc:422
msgid "Play Edit Range"
msgstr "Editierbereich wiedergeben"
-#: gtk2_ardour/editor_actions.cc:304
+#: gtk2_ardour/editor_actions.cc:423
msgid "Play Selected Region(s)"
msgstr "Ausgewählte Regionen wiedergeben"
-#: gtk2_ardour/editor_actions.cc:306
+#: gtk2_ardour/editor_actions.cc:426
msgid "Brush at Mouse"
msgstr "Pinsel an Mausposition (Brush)"
-#: gtk2_ardour/editor_actions.cc:308
-msgid "Mute/Unmute Region"
-msgstr "Region Mute/Unmute"
+#: gtk2_ardour/editor_actions.cc:429
+msgid "Playhead to Mouse"
+msgstr "Positionszeiger zur Mausposition"
-#: gtk2_ardour/editor_actions.cc:311
-msgid "Set Playhead"
-msgstr "Positionszeiger setzen"
+#: gtk2_ardour/editor_actions.cc:431
+msgid "Active Marker to Mouse"
+msgstr "Akitven Marker zur Mausposition"
-#: gtk2_ardour/editor_actions.cc:313
-msgid "Set Edit Point"
-msgstr "Arbeitspunkt setzen"
+#: gtk2_ardour/editor_actions.cc:434
+msgid "Duplicate Region"
+msgstr "Region duplizieren"
-#: gtk2_ardour/editor_actions.cc:315
+#: gtk2_ardour/editor_actions.cc:437
+msgid "Multi-Duplicate Region"
+msgstr "Region mehrfach duplizieren"
+
+#: gtk2_ardour/editor_actions.cc:440
+msgid "Duplicate Range"
+msgstr "Bereich duplizieren"
+
+#: gtk2_ardour/editor_actions.cc:443
+msgid "Insert Region"
+msgstr "Einfügen"
+
+#: gtk2_ardour/editor_actions.cc:446
+msgid "Normalize Region"
+msgstr "Normalisieren"
+
+#: gtk2_ardour/editor_actions.cc:452
+msgid "Auto-Rename"
+msgstr "Automatisch umbenennen"
+
+#: gtk2_ardour/editor_actions.cc:455
+msgid "Boost Region Gain"
+msgstr "Lautstärke erhöhen"
+
+#: gtk2_ardour/editor_actions.cc:458
+msgid "Cut Region Gain"
+msgstr "Lautstärke erniedrigen"
+
+#: gtk2_ardour/editor_actions.cc:461
msgid "Split Region"
msgstr "Region teilen (Split)"
-#: gtk2_ardour/editor_actions.cc:317
+#: gtk2_ardour/editor_actions.cc:464
msgid "Set Region Sync Position"
msgstr "Einrastpunkt der Region setzen"
-#: gtk2_ardour/editor_actions.cc:325
+#: gtk2_ardour/editor_actions.cc:467
+msgid "Remove Region Sync"
+msgstr "Synchronisation entfernen"
+
+#: gtk2_ardour/editor_actions.cc:470
+msgid "Raise Region"
+msgstr "Region weiter nach oben"
+
+#: gtk2_ardour/editor_actions.cc:473
+msgid "Lower Region"
+msgstr "Region weiter nach unten"
+
+#: gtk2_ardour/editor_actions.cc:476
+msgid "Export Region"
+msgstr "Region exportieren"
+
+#: gtk2_ardour/editor_actions.cc:479
+msgid "Lock Region"
+msgstr "Region sperren"
+
+#: gtk2_ardour/editor_actions.cc:482
+msgid "Glue Region To Bars&Beats"
+msgstr "Region an an Takte und Schläge binden"
+
+#: gtk2_ardour/editor_actions.cc:485
+msgid "Move To Original Position"
+msgstr "Ursprungsposition"
+
+#: gtk2_ardour/editor_actions.cc:497
+msgid "Mute/Unmute Region"
+msgstr "Region stummschalten"
+
+#: gtk2_ardour/editor_actions.cc:506
msgid "Export Session"
msgstr "Projekt exportieren..."
-#: gtk2_ardour/editor_actions.cc:327
+#: gtk2_ardour/editor_actions.cc:508
msgid "Export Range"
msgstr "Bereiche exportieren..."
-#: gtk2_ardour/editor_actions.cc:330
-msgid "Separate"
-msgstr "Teilen"
+#: gtk2_ardour/editor_actions.cc:514
+msgid "Separate Using Punch Range"
+msgstr "an Punch-Bereichsgrenzen teilen"
-#: gtk2_ardour/editor_actions.cc:332
-#: gtk2_ardour/editor_actions.cc:355
-#, fuzzy
-msgid "Crop"
-msgstr "Kopieren"
+#: gtk2_ardour/editor_actions.cc:517
+msgid "Separate Using Loop Range"
+msgstr "an Schleifenenden teilen"
-#: gtk2_ardour/editor_actions.cc:337
-#: gtk2_ardour/redirect_box.cc:1188
-#: gtk2_ardour/connection_editor.cc:55
-msgid "Delete"
-msgstr "Löschen"
+#: gtk2_ardour/editor_actions.cc:520
+#: gtk2_ardour/editor_actions.cc:550
+msgid "Crop"
+msgstr "Beschneiden"
-#: gtk2_ardour/editor_actions.cc:343
-msgid "Duplicate Region"
-msgstr "Duplizieren"
+#: gtk2_ardour/editor_actions.cc:533
+msgid "Set Tempo from Region=Bar"
+msgstr "Tempo setzen mit \"Region=Takt\""
-#: gtk2_ardour/editor_actions.cc:345
-msgid "Multi-Duplicate Region"
-msgstr "Region mehrfach Duplizieren"
+#: gtk2_ardour/editor_actions.cc:536
+msgid "Set Tempo from Edit Range=Bar"
+msgstr "Tempo setzen mit \"Auswahl=Takt\""
-#: gtk2_ardour/editor_actions.cc:347
-msgid "Duplicate Range"
-msgstr "Bereich duplizieren"
+#: gtk2_ardour/editor_actions.cc:539
+msgid "Split Regions At Percussion Onsets"
+msgstr "Regionen an perkussiven Schlägen teilen"
-#: gtk2_ardour/editor_actions.cc:349
-msgid "Insert Region"
-msgstr "Einfügen"
+#: gtk2_ardour/editor_actions.cc:542
+msgid "Rhythm Ferret"
+msgstr "Rhythm Ferret"
-#: gtk2_ardour/editor_actions.cc:351
-msgid "Reverse Region"
-msgstr "Rückwärts"
+#: gtk2_ardour/editor_actions.cc:545
+msgid "Move Forward to Transient"
+msgstr "Zum nächsten Transienten"
-#: gtk2_ardour/editor_actions.cc:353
-msgid "Normalize Region"
-msgstr "Normalisieren"
+#: gtk2_ardour/editor_actions.cc:547
+msgid "Move Backwards to Transient"
+msgstr "Zum vorherigen Transienten"
-#: gtk2_ardour/editor_actions.cc:357
+#: gtk2_ardour/editor_actions.cc:552
msgid "Insert Chunk"
msgstr "Abschnitt einfügen"
-#: gtk2_ardour/editor_actions.cc:360
+#: gtk2_ardour/editor_actions.cc:555
msgid "Split At Edit Point"
msgstr "Am Arbeitspunkt trennen"
-#: gtk2_ardour/editor_actions.cc:363
+#: gtk2_ardour/editor_actions.cc:558
msgid "Start Range"
msgstr "Bereich beginnen"
-#: gtk2_ardour/editor_actions.cc:365
+#: gtk2_ardour/editor_actions.cc:560
msgid "Finish Range"
msgstr "Bereich beenden"
-#: gtk2_ardour/editor_actions.cc:367
+#: gtk2_ardour/editor_actions.cc:562
msgid "Finish add Range"
msgstr "Bereich hinzufügen beenden"
-#: gtk2_ardour/editor_actions.cc:375
+#: gtk2_ardour/editor_actions.cc:570
msgid "Follow Playhead"
msgstr "Positionszeiger folgen"
-#: gtk2_ardour/editor_actions.cc:383
+#: gtk2_ardour/editor_actions.cc:575
+msgid "Insert Time"
+msgstr "Stille Einfügen"
+
+#: gtk2_ardour/editor_actions.cc:579
+msgid "Toggle Active"
+msgstr "Spur Aktivieren / Deaktivieren"
+
+#: gtk2_ardour/editor_actions.cc:586
+msgid "Fit Selected Tracks"
+msgstr "An ausgewählte Spuren anpassen"
+
+#: gtk2_ardour/editor_actions.cc:611
msgid "Zoom Focus Left"
msgstr "Am linken Rand ausrichten"
-#: gtk2_ardour/editor_actions.cc:385
+#: gtk2_ardour/editor_actions.cc:613
msgid "Zoom Focus Right"
msgstr "Am rechten Rand ausrichten"
-#: gtk2_ardour/editor_actions.cc:387
+#: gtk2_ardour/editor_actions.cc:615
msgid "Zoom Focus Center"
msgstr "Zentriert ausrichten"
-#: gtk2_ardour/editor_actions.cc:389
+#: gtk2_ardour/editor_actions.cc:617
msgid "Zoom Focus Playhead"
msgstr "Am Positionszeiger ausrichten"
-#: gtk2_ardour/editor_actions.cc:391
+#: gtk2_ardour/editor_actions.cc:619
msgid "Zoom Focus Mouse"
msgstr "Zoom Fokus zur Maus"
-#: gtk2_ardour/editor_actions.cc:393
+#: gtk2_ardour/editor_actions.cc:621
msgid "Zoom Focus Edit"
msgstr "Am Editierzeiger ausrichten"
-#: gtk2_ardour/editor_actions.cc:399
+#: gtk2_ardour/editor_actions.cc:627
msgid "Object Tool"
msgstr "Objektwerkzeug"
-#: gtk2_ardour/editor_actions.cc:400
+#: gtk2_ardour/editor_actions.cc:628
msgid "Range Tool"
msgstr "Bereich-Werkzeug (Range)"
-#: gtk2_ardour/editor_actions.cc:401
+#: gtk2_ardour/editor_actions.cc:629
msgid "Gain Tool"
msgstr "Lautstärkewerkzeug (Gain)"
-#: gtk2_ardour/editor_actions.cc:402
+#: gtk2_ardour/editor_actions.cc:630
msgid "Zoom Tool"
msgstr "Zoom-Werkzeug"
-#: gtk2_ardour/editor_actions.cc:403
+#: gtk2_ardour/editor_actions.cc:631
msgid "Timefx Tool"
msgstr "Zeit-Werkzeug (Time)"
-#: gtk2_ardour/editor_actions.cc:410
+#: gtk2_ardour/editor_actions.cc:638
msgid "Change edit point"
msgstr "Arbeitspunkt ändern"
-#: gtk2_ardour/editor_actions.cc:411
+#: gtk2_ardour/editor_actions.cc:639
msgid "Change edit point (w/Marker)"
msgstr "Setze Arbeitspunkt (über Positionsmarker)"
-#: gtk2_ardour/editor_actions.cc:413
-#, fuzzy
+#: gtk2_ardour/editor_actions.cc:641
msgid "Splice"
msgstr "Teilen"
-#: gtk2_ardour/editor_actions.cc:414
+#: gtk2_ardour/editor_actions.cc:642
#, fuzzy
msgid "Slide"
msgstr "Verbergen"
-#: gtk2_ardour/editor_actions.cc:415
+#: gtk2_ardour/editor_actions.cc:644
msgid "Toggle Edit Mode"
-msgstr ""
+msgstr "Edit-Modus (de-) aktivieren"
-#: gtk2_ardour/editor_actions.cc:417
+#: gtk2_ardour/editor_actions.cc:646
msgid "Snap To"
msgstr "Raster"
-#: gtk2_ardour/editor_actions.cc:418
+#: gtk2_ardour/editor_actions.cc:647
msgid "Snap Mode"
msgstr "Einrastmodus"
-#: gtk2_ardour/editor_actions.cc:425
+#: gtk2_ardour/editor_actions.cc:654
msgid "Next Snap Mode"
msgstr "Nächster Einrastmodus"
-#: gtk2_ardour/editor_actions.cc:426
+#: gtk2_ardour/editor_actions.cc:655
msgid "Next Snap Choice"
-msgstr ""
+msgstr "Nächster Einrastmodus"
-#: gtk2_ardour/editor_actions.cc:431
+#: gtk2_ardour/editor_actions.cc:660
msgid "Snap to cd frame"
msgstr "An CD-Frames einrasten"
-#: gtk2_ardour/editor_actions.cc:432
+#: gtk2_ardour/editor_actions.cc:661
msgid "Snap to SMPTE frame"
msgstr "An SMPTE-Frames einrasten"
-#: gtk2_ardour/editor_actions.cc:433
+#: gtk2_ardour/editor_actions.cc:662
msgid "Snap to SMPTE seconds"
msgstr "An SMPTE-Sekunden einrasten"
-#: gtk2_ardour/editor_actions.cc:434
+#: gtk2_ardour/editor_actions.cc:663
msgid "Snap to SMPTE minutes"
msgstr "An SMPTE-Minuten einrasten"
-#: gtk2_ardour/editor_actions.cc:435
+#: gtk2_ardour/editor_actions.cc:664
msgid "Snap to seconds"
msgstr "An Sekunden einrasten"
-#: gtk2_ardour/editor_actions.cc:436
+#: gtk2_ardour/editor_actions.cc:665
msgid "Snap to minutes"
msgstr "An Minuten einrasten"
-#: gtk2_ardour/editor_actions.cc:437
+#: gtk2_ardour/editor_actions.cc:666
msgid "Snap to thirtyseconds"
msgstr "An halben Minuten einrasten"
-#: gtk2_ardour/editor_actions.cc:438
+#: gtk2_ardour/editor_actions.cc:667
msgid "Snap to asixteenthbeat"
msgstr "An Sechzehnteln einrasten"
-#: gtk2_ardour/editor_actions.cc:439
+#: gtk2_ardour/editor_actions.cc:668
msgid "Snap to eighths"
msgstr "An Achteln einrasten"
-#: gtk2_ardour/editor_actions.cc:440
+#: gtk2_ardour/editor_actions.cc:669
msgid "Snap to quarters"
msgstr "An Vierteln einrasten"
-#: gtk2_ardour/editor_actions.cc:441
+#: gtk2_ardour/editor_actions.cc:670
msgid "Snap to thirds"
msgstr "An Triolen einrasten"
-#: gtk2_ardour/editor_actions.cc:442
+#: gtk2_ardour/editor_actions.cc:671
msgid "Snap to beat"
msgstr "An Schlägen einrasten"
-#: gtk2_ardour/editor_actions.cc:443
+#: gtk2_ardour/editor_actions.cc:672
msgid "Snap to bar"
msgstr "An Takten einrasten"
-#: gtk2_ardour/editor_actions.cc:444
+#: gtk2_ardour/editor_actions.cc:673
msgid "Snap to mark"
msgstr "An Markern einrasten"
-#: gtk2_ardour/editor_actions.cc:445
+#: gtk2_ardour/editor_actions.cc:674
msgid "Snap to region start"
msgstr "Am Anfang der Regionen einrasten"
-#: gtk2_ardour/editor_actions.cc:446
+#: gtk2_ardour/editor_actions.cc:675
msgid "Snap to region end"
msgstr "Am Ende der Regionen einrasten"
-#: gtk2_ardour/editor_actions.cc:447
+#: gtk2_ardour/editor_actions.cc:676
msgid "Snap to region sync"
msgstr "Am Einrastpunkt der Regionen einrasten"
-#: gtk2_ardour/editor_actions.cc:448
+#: gtk2_ardour/editor_actions.cc:677
msgid "Snap to region boundary"
msgstr "An Grenzen der Regionen einrasten"
-#: gtk2_ardour/editor_actions.cc:457
+#: gtk2_ardour/editor_actions.cc:684
+msgid "Ranges"
+msgstr "Bereiche"
+
+#: gtk2_ardour/editor_actions.cc:687
+msgid "Loop/Punch"
+msgstr "Schleifen/Punch-Bereiche"
+
+#: gtk2_ardour/editor_actions.cc:691
+msgid "Min:Sec"
+msgstr "Min:Sek"
+
+#: gtk2_ardour/editor_actions.cc:719
msgid "Sort"
msgstr "Sortieren"
-#: gtk2_ardour/editor_actions.cc:465
+#: gtk2_ardour/editor_actions.cc:727
msgid "Show all"
msgstr "Alle zeigen"
-#: gtk2_ardour/editor_actions.cc:466
+#: gtk2_ardour/editor_actions.cc:728
msgid "Show automatic regions"
msgstr "Automatische Regionen zeigen"
-#: gtk2_ardour/editor_actions.cc:468
+#: gtk2_ardour/editor_actions.cc:730
msgid "Ascending"
msgstr "aufsteigend"
-#: gtk2_ardour/editor_actions.cc:470
+#: gtk2_ardour/editor_actions.cc:732
msgid "Descending"
msgstr "absteigend"
-#: gtk2_ardour/editor_actions.cc:473
+#: gtk2_ardour/editor_actions.cc:735
msgid "By Region Name"
msgstr "nach Name der Region"
-#: gtk2_ardour/editor_actions.cc:475
+#: gtk2_ardour/editor_actions.cc:737
msgid "By Region Length"
msgstr "nach Länge der Region"
-#: gtk2_ardour/editor_actions.cc:477
+#: gtk2_ardour/editor_actions.cc:739
msgid "By Region Position"
msgstr "nach Position der Region"
-#: gtk2_ardour/editor_actions.cc:479
+#: gtk2_ardour/editor_actions.cc:741
msgid "By Region Timestamp"
msgstr "nach Zeitstempel der Region"
-#: gtk2_ardour/editor_actions.cc:481
+#: gtk2_ardour/editor_actions.cc:743
msgid "By Region Start in File"
msgstr "nach Anfang der Region in der Datei"
-#: gtk2_ardour/editor_actions.cc:483
+#: gtk2_ardour/editor_actions.cc:745
msgid "By Region End in File"
msgstr "nach Ende der Region in der Datei"
-#: gtk2_ardour/editor_actions.cc:485
+#: gtk2_ardour/editor_actions.cc:747
msgid "By Source File Name"
msgstr "nach Namen der Quelldatei"
-#: gtk2_ardour/editor_actions.cc:487
+#: gtk2_ardour/editor_actions.cc:749
msgid "By Source File Length"
msgstr "nach Länge der Quelldatei"
-#: gtk2_ardour/editor_actions.cc:489
+#: gtk2_ardour/editor_actions.cc:751
msgid "By Source File Creation Date"
msgstr "nach Erstellungsdatum der Quelldatei"
-#: gtk2_ardour/editor_actions.cc:491
+#: gtk2_ardour/editor_actions.cc:753
msgid "By Source Filesystem"
msgstr "nach Dateisystem der Quelle"
-#: gtk2_ardour/editor_actions.cc:497
-msgid "Add Existing Audio"
-msgstr "Audio importieren"
+#: gtk2_ardour/editor_actions.cc:759
+msgid "Import"
+msgstr "Importieren"
-#: gtk2_ardour/editor_actions.cc:499
-msgid "Add External Audio"
-msgstr "Audio importieren..."
+#: gtk2_ardour/editor_actions.cc:761
+msgid "Import to Region List"
+msgstr "Regionen importieren"
-#: gtk2_ardour/editor_actions.cc:502
+#: gtk2_ardour/editor_actions.cc:764
msgid "Show Waveforms"
msgstr "Wellenformen zeigen"
-#: gtk2_ardour/editor_actions.cc:503
+#: gtk2_ardour/editor_actions.cc:767
msgid "Show Waveforms While Recording"
msgstr "Wellenformen beim Aufnehmen zeigen"
-#: gtk2_ardour/editor_actions.cc:504
+#: gtk2_ardour/editor_actions.cc:768
msgid "Show Measures"
-msgstr "Takte zeigen"
+msgstr "Takt-Raster einblenden"
-#: gtk2_ardour/editor_actions.cc:508
+#: gtk2_ardour/editor_actions.cc:779
msgid "Show Logo"
msgstr "Zeige Logo"
-#: gtk2_ardour/editor_actions.cc:514
+#: gtk2_ardour/editor_actions.cc:785
msgid "Later is Higher"
-msgstr "Neuste nach oben"
+msgstr "Spätere nach oben"
-#: gtk2_ardour/editor_actions.cc:515
+#: gtk2_ardour/editor_actions.cc:786
msgid "Most Recently Moved/Added is Higher"
msgstr "Zuletzt bewegte/hinzugefügte nach oben"
-#: gtk2_ardour/editor_actions.cc:516
+#: gtk2_ardour/editor_actions.cc:787
msgid "Most Recently Added is Higher"
msgstr "Zuletzt hinzugefügte nach oben"
-#: gtk2_ardour/editor_actions.cc:520
+#: gtk2_ardour/editor_actions.cc:791
msgid "23.976"
msgstr "23,976"
-#: gtk2_ardour/editor_actions.cc:521
+#: gtk2_ardour/editor_actions.cc:792
msgid "24"
msgstr "24"
-#: gtk2_ardour/editor_actions.cc:522
+#: gtk2_ardour/editor_actions.cc:793
msgid "24.976"
msgstr "24,976"
-#: gtk2_ardour/editor_actions.cc:523
+#: gtk2_ardour/editor_actions.cc:794
msgid "25"
msgstr "25"
-#: gtk2_ardour/editor_actions.cc:524
+#: gtk2_ardour/editor_actions.cc:795
msgid "29.97"
msgstr "29,97"
-#: gtk2_ardour/editor_actions.cc:525
+#: gtk2_ardour/editor_actions.cc:796
msgid "29.97 drop"
msgstr "29,97 (drop)"
-#: gtk2_ardour/editor_actions.cc:526
+#: gtk2_ardour/editor_actions.cc:797
msgid "30"
msgstr "30"
-#: gtk2_ardour/editor_actions.cc:527
+#: gtk2_ardour/editor_actions.cc:798
msgid "30 drop"
msgstr "30 (drop)"
-#: gtk2_ardour/editor_actions.cc:528
+#: gtk2_ardour/editor_actions.cc:799
msgid "59.94"
msgstr "59,94"
-#: gtk2_ardour/editor_actions.cc:529
+#: gtk2_ardour/editor_actions.cc:800
msgid "60"
msgstr "60"
-#: gtk2_ardour/editor_actions.cc:533
+#: gtk2_ardour/editor_actions.cc:804
msgid "+4.1667% + 0.1%"
msgstr "+4,1667% + 0,1%"
-#: gtk2_ardour/editor_actions.cc:534
+#: gtk2_ardour/editor_actions.cc:805
msgid "+4.1667%"
msgstr "+4,1667%"
-#: gtk2_ardour/editor_actions.cc:535
+#: gtk2_ardour/editor_actions.cc:806
msgid "+4.1667% - 0.1%"
msgstr "+4,1667% - 0,1%"
-#: gtk2_ardour/editor_actions.cc:536
+#: gtk2_ardour/editor_actions.cc:807
msgid "+ 0.1%"
msgstr "+ 0,1%"
-#: gtk2_ardour/editor_actions.cc:537
-#: gtk2_ardour/engine_dialog.cc:98
-#: gtk2_ardour/engine_dialog.cc:103
-#: gtk2_ardour/engine_dialog.cc:479
-#: gtk2_ardour/export_dialog.cc:78
-#: gtk2_ardour/export_dialog.cc:92
+#: gtk2_ardour/editor_actions.cc:808
+#: gtk2_ardour/route_ui.cc:604
#: gtk2_ardour/export_dialog.cc:956
-#: gtk2_ardour/export_dialog.cc:1294
-#: gtk2_ardour/route_ui.cc:513
+#: gtk2_ardour/export_dialog.cc:1291
msgid "None"
msgstr "Kein"
-#: gtk2_ardour/editor_actions.cc:538
+#: gtk2_ardour/editor_actions.cc:809
msgid "- 0.1%"
msgstr "- 0,1%"
-#: gtk2_ardour/editor_actions.cc:539
+#: gtk2_ardour/editor_actions.cc:810
msgid "-4.1667% + 0.1%"
msgstr "-4,1667% + 0,1%"
-#: gtk2_ardour/editor_actions.cc:540
+#: gtk2_ardour/editor_actions.cc:811
msgid "-4.1667%"
msgstr "-4,1667%"
-#: gtk2_ardour/editor_actions.cc:541
+#: gtk2_ardour/editor_actions.cc:812
msgid "-4.1667% - 0.1%"
msgstr "-4,1667% - 0,1%"
-#: gtk2_ardour/editor_actions.cc:545
+#: gtk2_ardour/editor_actions.cc:816
msgid "80 per frame"
msgstr "80 pro Frame"
-#: gtk2_ardour/editor_actions.cc:547
+#: gtk2_ardour/editor_actions.cc:818
msgid "100 per frame"
msgstr "100 pro Frame"
-#: gtk2_ardour/editor_actions.cc:863
-#: gtk2_ardour/editor_actions.cc:972
-#: gtk2_ardour/editor_actions.cc:983
-#: gtk2_ardour/editor_actions.cc:1036
-#: gtk2_ardour/editor_actions.cc:1047
-#: gtk2_ardour/editor_actions.cc:1094
-#: gtk2_ardour/editor_actions.cc:1104
+#: gtk2_ardour/editor_actions.cc:1212
+#: gtk2_ardour/editor_actions.cc:1321
+#: gtk2_ardour/editor_actions.cc:1332
+#: gtk2_ardour/editor_actions.cc:1385
+#: gtk2_ardour/editor_actions.cc:1396
+#: gtk2_ardour/editor_actions.cc:1443
+#: gtk2_ardour/editor_actions.cc:1453
msgid "programming error: %1: %2"
msgstr "Programmierfehler: %1: %2"
-#: gtk2_ardour/editor_actions.cc:1265
+#: gtk2_ardour/editor_actions.cc:1614
msgid "Configuraton is using unhandled subframes per frame value: %1"
msgstr "Diese Konfiguration benutzt einen unzulässigen Wert für Subframes pro Frame: %1"
-#: gtk2_ardour/editor_audio_import.cc:71
-#: gtk2_ardour/editor_audio_import.cc:92
-msgid "You can't import or embed an audiofile until you have a session loaded."
-msgstr "Sie können keine Audiodatei importieren, solange kein Projekt geladen ist."
+#: gtk2_ardour/keyboard.cc:81
+#: gtk2_ardour/keyboard.cc:592
+msgid "Unknown"
+msgstr "Unknown"
-#: gtk2_ardour/editor_audio_import.cc:77
-#: gtk2_ardour/editor_audio_import.cc:110
-msgid "Add existing audio"
-msgstr "Audio importieren"
+#: gtk2_ardour/keyboard.cc:473
+msgid "your own"
+msgstr ""
-#: gtk2_ardour/editor_audio_import.cc:370
-msgid "importing %1"
-msgstr "importiere %1"
+#: gtk2_ardour/keyboard.cc:537
+#: gtk2_ardour/keyboard.cc:561
+msgid "Default keybindings not found - Ardour will be hard to use!"
+msgstr "Keine Tastatur-Standardbelegung gefunden!"
-#: gtk2_ardour/editor_audio_import.cc:376
-msgid "Cancel Import"
-msgstr "Importieren Abbrechen"
+#: gtk2_ardour/keyboard.cc:540
+#: gtk2_ardour/keyboard.cc:564
+msgid "Key bindings file \"%1\" not found. Default bindings used instead"
+msgstr "Die Datei \"%1\" für Tastaturkürzel wurde nicht gefunden. Stattdessen wird die Standard-Belegung verwendet."
-#: gtk2_ardour/editor_audio_import.cc:479
-msgid "Editor: cannot open file \"%1\", (%2)"
-msgstr "Editor: kann die Datei \"%1\" nicht öffnen (%2)"
+#: gtk2_ardour/keyboard.cc:603
+msgid "Ardour key bindings file not found at \"%1\" or contains errors."
+msgstr "Konnte die Datei mit den Tastaturzuweisungen nicht an der Stelle \"%1\" finden, oder sie ist fehlerhaft."
-#: gtk2_ardour/editor_audio_import.cc:487
-msgid "Cancel entire import"
-msgstr "Importieren Abbrechen"
+#: gtk2_ardour/connection_editor.cc:50
+msgid "ardour: connections"
+msgstr "ardour: Verbindungen"
-#: gtk2_ardour/editor_audio_import.cc:488
-msgid "Don't embed it"
-msgstr "Nicht einbetten"
+#: gtk2_ardour/connection_editor.cc:51
+msgid "Input Connections"
+msgstr "Verbindungen der Eingänge"
-#: gtk2_ardour/editor_audio_import.cc:489
-msgid "Embed all without questions"
-msgstr "Alle Importieren ohne nachzufragen"
+#: gtk2_ardour/connection_editor.cc:52
+msgid "Output Connections"
+msgstr "Verbindungen der Ausgänge"
-#: gtk2_ardour/editor_audio_import.cc:492
-#: gtk2_ardour/editor_audio_import.cc:519
-msgid ""
-"%1\n"
-"This audiofile's sample rate doesn't match the session sample rate!"
-msgstr ""
-"%1\n"
-"Die Samplerate dieser Audiodatei unterscheidet sich von der Samplerate dieses Projekts."
+#: gtk2_ardour/connection_editor.cc:53
+msgid "New Input"
+msgstr "Neuer Eingang"
-#: gtk2_ardour/editor_audio_import.cc:516
-msgid "Embed it anyway"
-msgstr "Trotzdem importieren"
+#: gtk2_ardour/connection_editor.cc:54
+msgid "New Output"
+msgstr "Neuer Ausgang"
-#: gtk2_ardour/editor_audio_import.cc:561
-msgid "could not open %1"
-msgstr "Konnte \"%s\" nicht öffnen."
+#: gtk2_ardour/connection_editor.cc:57
+#: gtk2_ardour/connection_editor.cc:100
+msgid "Add Port"
+msgstr "Port hinzufügen"
-#: gtk2_ardour/editor_audio_import.cc:691
-msgid "insert sndfile"
-msgstr "Audiodatei einfügen"
+#: gtk2_ardour/connection_editor.cc:105
+msgid "Available Ports"
+msgstr "Verfügbare Verbindungen"
-#: gtk2_ardour/editor_canvas.cc:129
-msgid "VerboseCanvasCursor"
+#: gtk2_ardour/connection_editor.cc:500
+msgid "Connection \""
+msgstr "Verbindung \""
+
+#: gtk2_ardour/connection_editor.cc:502
+msgid "\""
msgstr ""
-#: gtk2_ardour/editor_edit_groups.cc:52
-#: gtk2_ardour/mixer_ui.cc:848
-msgid "Activate All"
-msgstr "Alle aktivieren"
+#: gtk2_ardour/connection_editor.cc:531
+#, c-format
+msgid "in %d"
+msgstr "In %d"
-#: gtk2_ardour/editor_edit_groups.cc:53
-#: gtk2_ardour/mixer_ui.cc:849
-msgid "Disable All"
-msgstr "Alle deaktivieren"
+#: gtk2_ardour/connection_editor.cc:533
+#, c-format
+msgid "out %d"
+msgstr "Out %d"
-#: gtk2_ardour/editor_edit_groups.cc:55
-#: gtk2_ardour/mixer_ui.cc:851
-msgid "Add group"
-msgstr "Gruppe hinzufügen"
+#: gtk2_ardour/connection_editor.cc:657
+msgid "Name for new connection:"
+msgstr "Name für neue Verbindung:"
-#: gtk2_ardour/editor_edit_groups.cc:228
-#: gtk2_ardour/mixer_ui.cc:1092
-msgid "unnamed"
-msgstr "unbenannt"
+#: gtk2_ardour/route_ui.cc:238
+msgid "mute change"
+msgstr "Mute ändern"
-#: gtk2_ardour/editor_edit_groups.cc:257
-#: gtk2_ardour/mixer_ui.cc:946
-msgid "-all-"
-msgstr "-alle-"
+#: gtk2_ardour/route_ui.cc:322
+#: gtk2_ardour/route_ui.cc:333
+msgid "solo change"
+msgstr "Solo ändern"
-#: gtk2_ardour/editor_export_audio.cc:66
+#: gtk2_ardour/route_ui.cc:394
+msgid "Not connected to JACK - cannot engage record"
+msgstr "Nicht mit JACK verbunden - konnte die Aufnahme nicht starten"
+
+#: gtk2_ardour/route_ui.cc:408
+msgid "rec-enable change"
+msgstr "Aufnahmestatus ändern"
+
+#: gtk2_ardour/route_ui.cc:646
+msgid "Solo-safe"
+msgstr "Solo-Safe"
+
+#: gtk2_ardour/route_ui.cc:668
+msgid "Pre Fader"
+msgstr "Pre Fader"
+
+#: gtk2_ardour/route_ui.cc:675
+msgid "Post Fader"
+msgstr "Post Fader"
+
+#: gtk2_ardour/route_ui.cc:682
+msgid "Control Outs"
+msgstr "Vorhörausgang"
+
+#: gtk2_ardour/route_ui.cc:689
+msgid "Main Outs"
+msgstr "Main Ausgänge"
+
+#: gtk2_ardour/route_ui.cc:726
+msgid "mix group solo change"
+msgstr "Mixergruppe Solo-Status ändern"
+
+#: gtk2_ardour/route_ui.cc:765
+msgid "mix group mute change"
+msgstr "Mixergruppe Mute-Status ändern"
+
+#: gtk2_ardour/route_ui.cc:782
+msgid "mix group rec-enable change"
+msgstr "Mixergruppe Aufnahmestatus ändern"
+
+#: gtk2_ardour/route_ui.cc:876
msgid ""
-"There is no selection to export.\n"
+"Do you really want to remove track \"%1\" ?\n"
"\n"
-"Select a selection using the range mouse mode"
+"You may also lose the playlist used by this track.\n"
+"(cannot be undone)"
msgstr ""
-"Es wurde keine Auswahlbereich zum Exportieren erstellt.\n"
+"Wollen Sie wirklich die Spur \"%1\" löschen?\n"
"\n"
-"Erstellen Sie eine Auswahl mit dem Bereichswerkzeug"
+"Sie werden auch die Wiedergabeliste, die diese Spur benutzt verlieren.\n"
+"(Dies kann nicht rückgängig gemacht werden!)"
-#: gtk2_ardour/editor_export_audio.cc:109
+#: gtk2_ardour/route_ui.cc:878
msgid ""
-"There are no ranges to export.\n"
-"\n"
-"Create 1 or more ranges by dragging the mouse in the range bar"
+"Do you really want to remove bus \"%1\" ?\n"
+"(cannot be undone)"
msgstr ""
-"Es gibt keine Bereiche, die exportiert werden können.\n"
-"\n"
-"Erstellen Sie einen oder mehrere Bereiche, indem Sie den Mauszeiger in der Bereichleiste ziehen"
+"Wollen Sie den Bus \"%1\" wirklich löschen?\n"
+"(Dies kann nicht rückgängig gemacht werden!)"
-#: gtk2_ardour/editor_imageframe.cc:622
-#: gtk2_ardour/editor_imageframe.cc:652
-msgid "programming error: no ImageFrameView selected"
-msgstr "Programmierfehler: kein ImageFrameView ausgewählt"
+#: gtk2_ardour/route_ui.cc:903
+msgid "New Name: "
+msgstr "Neuer Name: "
-#: gtk2_ardour/editor_imageframe.cc:845
-#: gtk2_ardour/editor_imageframe.cc:867
-msgid "programming error: no MarkerView selected"
-msgstr "Programmierfehler: kein MarkerView ausgewählt"
+#: gtk2_ardour/export_dialog.cc:102
+msgid "Format"
+msgstr "Format"
-#: gtk2_ardour/editor_keyboard.cc:82
-msgid "mute region"
-msgstr "Region stummschalten"
+#: gtk2_ardour/export_dialog.cc:103
+msgid "CD Marker File Type"
+msgstr "CD-Marker"
-#: gtk2_ardour/editor_markers.cc:399
-#: gtk2_ardour/editor_ops.cc:1794
-#: gtk2_ardour/editor_ops.cc:1811
-#: gtk2_ardour/editor_ops.cc:1836
-#: gtk2_ardour/location_ui.cc:821
-msgid "add marker"
-msgstr "Marker hinzufügen"
+#: gtk2_ardour/export_dialog.cc:104
+msgid "Channels"
+msgstr "Kanäle"
-#: gtk2_ardour/editor_markers.cc:423
-#: gtk2_ardour/editor_markers.cc:491
-#: gtk2_ardour/editor_markers.cc:676
-#: gtk2_ardour/editor_markers.cc:694
-#: gtk2_ardour/editor_markers.cc:712
-#: gtk2_ardour/editor_markers.cc:731
-#: gtk2_ardour/editor_markers.cc:750
-#: gtk2_ardour/editor_markers.cc:780
-#: gtk2_ardour/editor_markers.cc:808
-#: gtk2_ardour/editor_markers.cc:836
-#: gtk2_ardour/editor_markers.cc:874
-#: gtk2_ardour/editor_markers.cc:899
-#: gtk2_ardour/editor_markers.cc:926
-#: gtk2_ardour/editor_markers.cc:949
-#: gtk2_ardour/editor_markers.cc:969
-#: gtk2_ardour/editor_markers.cc:993
-#: gtk2_ardour/editor_mouse.cc:2139
-#: gtk2_ardour/editor_mouse.cc:4686
-msgid "programming error: marker canvas item has no marker object pointer!"
-msgstr "Programmierfehler: marker canvas item has no marker object pointer!"
+#: gtk2_ardour/export_dialog.cc:107
+msgid "Sample Endianness"
+msgstr "Bytefolge"
-#: gtk2_ardour/editor_markers.cc:441
-#: gtk2_ardour/location_ui.cc:699
-msgid "remove marker"
-msgstr "Marker entfernen"
+#: gtk2_ardour/export_dialog.cc:108
+msgid "Sample Rate"
+msgstr "Samplerate"
-#: gtk2_ardour/editor_markers.cc:582
-msgid "Locate to here"
-msgstr "Positionszeiger hierhin setzen"
+#: gtk2_ardour/export_dialog.cc:109
+msgid "Conversion Quality"
+msgstr "SR-Konvertierung"
-#: gtk2_ardour/editor_markers.cc:583
-msgid "Play from here"
-msgstr "Wiedergabe ab hier"
+#: gtk2_ardour/export_dialog.cc:110
+msgid "Dither Type"
+msgstr "Dithering"
-#: gtk2_ardour/editor_markers.cc:584
-msgid "Move Mark to Playhead"
-msgstr "Marker zum Positionszeiger verschieben"
+#: gtk2_ardour/export_dialog.cc:111
+msgid "Export CD Marker File Only"
+msgstr "Nur CD-Marker exportieren"
-#: gtk2_ardour/editor_markers.cc:592
-msgid "Unlock"
-msgstr "Entsperren"
+#: gtk2_ardour/export_dialog.cc:112
+msgid "Browse"
+msgstr "Durchsuchen"
-#: gtk2_ardour/editor_markers.cc:614
-msgid "Play Range"
-msgstr "Bereich wiedergeben"
+#: gtk2_ardour/export_dialog.cc:113
+msgid "Specific tracks ..."
+msgstr "Alle Spuren..."
-#: gtk2_ardour/editor_markers.cc:615
-msgid "Locate to Range Mark"
-msgstr "Positionszeiger zu Bereichsmarker"
+#: gtk2_ardour/export_dialog.cc:423
+msgid "22.05kHz"
+msgstr "22,05 kHz"
-#: gtk2_ardour/editor_markers.cc:616
-msgid "Play from Range Mark"
-msgstr "Wiedergabe ab Bereichsmarker"
+#: gtk2_ardour/export_dialog.cc:426
+#: gtk2_ardour/export_dialog.cc:441
+#: gtk2_ardour/export_dialog.cc:1089
+#: gtk2_ardour/export_dialog.cc:1259
+msgid "44.1kHz"
+msgstr "44,1 kHz"
-#: gtk2_ardour/editor_markers.cc:618
-msgid "Loop Range"
-msgstr "Bereich in Schleife wiedergeben"
+#: gtk2_ardour/export_dialog.cc:429
+#: gtk2_ardour/export_dialog.cc:1091
+#: gtk2_ardour/export_dialog.cc:1261
+msgid "48kHz"
+msgstr "48 kHz"
-#: gtk2_ardour/editor_markers.cc:620
-msgid "Set Range Mark from Playhead"
-msgstr "Bereichsmarker zum Positionszeiger verschieben"
+#: gtk2_ardour/export_dialog.cc:432
+#: gtk2_ardour/export_dialog.cc:1093
+#: gtk2_ardour/export_dialog.cc:1263
+msgid "88.2kHz"
+msgstr "88,2 kHz"
-#: gtk2_ardour/editor_markers.cc:622
-msgid "Set Range from Range Selection"
-msgstr "Bereichsmarker zum Auswahlbereich verschieben"
+#: gtk2_ardour/export_dialog.cc:435
+#: gtk2_ardour/export_dialog.cc:1095
+#: gtk2_ardour/export_dialog.cc:1265
+msgid "96kHz"
+msgstr "96 kHz"
-#: gtk2_ardour/editor_markers.cc:628
-msgid "Hide Range"
-msgstr "Bereich verbergen"
+#: gtk2_ardour/export_dialog.cc:438
+#: gtk2_ardour/export_dialog.cc:1097
+#: gtk2_ardour/export_dialog.cc:1267
+msgid "192kHz"
+msgstr "192 kHz"
-#: gtk2_ardour/editor_markers.cc:629
-#: gtk2_ardour/editor_markers.cc:1013
-msgid "Rename Range"
-msgstr "Bereich umbenennen"
+#: gtk2_ardour/export_dialog.cc:510
+#: gtk2_ardour/export_dialog.cc:1115
+#: gtk2_ardour/export_dialog.cc:1237
+msgid "mono"
+msgstr "Mono"
-#: gtk2_ardour/editor_markers.cc:630
-msgid "Remove Range"
-msgstr "Bereich entfernen"
+#: gtk2_ardour/export_dialog.cc:656
+msgid "Editor: cannot open \"%1\" as export file for CD toc file"
+msgstr "Editor: Kann \"%1\" nicht nicht zum Export für CD-Inhaltsverzeichnis (TOC) öffnen."
-#: gtk2_ardour/editor_markers.cc:635
-msgid "Separate Regions in Range"
-msgstr "Regionen an Bereichsgrenzen teilen"
+#: gtk2_ardour/export_dialog.cc:790
+msgid "Editor: cannot open \"%1\" as export file for CD cue file"
+msgstr "Editor: Kann \"%1\" nicht zum Export für CD CUE-Datei öffnen."
-#: gtk2_ardour/editor_markers.cc:636
-msgid "Select All in Range"
-msgstr "Alles im Bereich auswählen"
+#: gtk2_ardour/export_dialog.cc:926
+msgid "TOC"
+msgstr "TOC"
-#: gtk2_ardour/editor_markers.cc:638
-msgid "Select Range"
-msgstr "Bereich auswählen"
+#: gtk2_ardour/export_dialog.cc:941
+msgid "Not connected to audioengine"
+msgstr "Nicht mit JACK verbunden"
-#: gtk2_ardour/editor_markers.cc:664
-msgid "Set Loop Range"
-msgstr "Schleife erstellen"
+#: gtk2_ardour/export_dialog.cc:945
+msgid "Ardour cannot export audio when disconnected"
+msgstr "Ardour kann nicht exportieren, wenn keine Verbindung zu JACK besteht."
-#: gtk2_ardour/editor_markers.cc:665
-msgid "Set Punch Range"
-msgstr "Punch-Bereich erstellen"
+#: gtk2_ardour/export_dialog.cc:975
+msgid "Stop Export"
+msgstr "Export Abbrechen"
-#: gtk2_ardour/editor_markers.cc:1007
-msgid "New Name:"
-msgstr "Neuer Name: "
+#: gtk2_ardour/export_dialog.cc:1191
+msgid "Please enter a valid filename."
+msgstr "Bitte geben Sie einen gültigen Dateinamen ein."
-#: gtk2_ardour/editor_markers.cc:1011
-msgid "Rename Mark"
-msgstr "Marker umbenennen"
+#: gtk2_ardour/export_dialog.cc:1201
+msgid "Please specify a complete filename for the audio file."
+msgstr "Bitte geben Sie einen kompletten Dateinamen für die Audiodatei ein."
-#: gtk2_ardour/editor_markers.cc:1035
-msgid "rename marker"
-msgstr "Marker umbenennen"
+#: gtk2_ardour/export_dialog.cc:1207
+msgid "File already exists, do you want to overwrite it?"
+msgstr "Datei existiert bereits, wollen Sie sie überschreiben?"
-#: gtk2_ardour/editor_markers.cc:1059
-msgid "set loop range"
-msgstr "Loop-Bereich festlegen"
+#: gtk2_ardour/export_dialog.cc:1277
+msgid "fastest"
+msgstr "schnellstmöglich"
-#: gtk2_ardour/editor_markers.cc:1065
-msgid "set punch range"
-msgstr "Punch-Bereich festlegen"
+#: gtk2_ardour/export_dialog.cc:1279
+msgid "linear"
+msgstr "Linear"
-#: gtk2_ardour/editor_mouse.cc:144
-msgid "Editor::event_frame() used on unhandled event type %1"
-msgstr ""
+#: gtk2_ardour/export_dialog.cc:1281
+msgid "better"
+msgstr "besser"
-#: gtk2_ardour/editor_mouse.cc:1696
-msgid "programming error: start_grab called without drag item"
-msgstr "Programmierfehler: start_grab called without drag item"
+#: gtk2_ardour/export_dialog.cc:1283
+msgid "intermediate"
+msgstr "mittelmäßig"
-#: gtk2_ardour/editor_mouse.cc:1898
-msgid "change fade in length"
-msgstr "Ändere Fade-In Länge"
+#: gtk2_ardour/export_dialog.cc:1293
+msgid "Rectangular"
+msgstr "rechteckig"
-#: gtk2_ardour/editor_mouse.cc:1930
-msgid "programming error: fade out canvas item has no regionview data pointer!"
-msgstr "Programmierfehler: fade out canvas item has no regionview data pointer!"
+#: gtk2_ardour/export_dialog.cc:1295
+msgid "Triangular"
+msgstr "dreieckig"
-#: gtk2_ardour/editor_mouse.cc:2014
-msgid "change fade out length"
-msgstr "Fade-Out verändern"
+#: gtk2_ardour/audio_region_view.cc:975
+msgid "add gain control point"
+msgstr "Lautstärkekurve bearbeiten"
-#: gtk2_ardour/editor_mouse.cc:2046
-msgid "programming error: cursor canvas item has no cursor data pointer!"
-msgstr "Programmierfehler: cursor canvas item has no cursor data pointer!"
+#: gtk2_ardour/engine_dialog.cc:49
+msgid "Realtime"
+msgstr "Realtime"
-#: gtk2_ardour/editor_mouse.cc:2301
-msgid "move marker"
-msgstr "Marker bewegen"
+#: gtk2_ardour/engine_dialog.cc:50
+msgid "Do not lock memory"
+msgstr "Speicherzugriff nicht sperren"
-#: gtk2_ardour/editor_mouse.cc:2334
-#: gtk2_ardour/editor_mouse.cc:2366
-#: gtk2_ardour/editor_tempodisplay.cc:505
-msgid "programming error: meter marker canvas item has no marker object pointer!"
-msgstr "pProgrammierfehler: meter marker canvas item has no marker object pointer!"
+#: gtk2_ardour/engine_dialog.cc:51
+msgid "Unlock memory"
+msgstr "Speicherzugriff öffnen"
-#: gtk2_ardour/editor_mouse.cc:2434
-msgid "copy meter mark"
-msgstr "Taktmarker kopieren"
+#: gtk2_ardour/engine_dialog.cc:52
+msgid "No zombies"
+msgstr "Keine Zombies (Soft Mode)"
-#: gtk2_ardour/editor_mouse.cc:2445
-msgid "move meter mark"
-msgstr "Taktwechsel bewegen"
+#: gtk2_ardour/engine_dialog.cc:53
+msgid "Provide monitor ports"
+msgstr "Monitor-Ports erstellen"
-#: gtk2_ardour/editor_mouse.cc:2461
-#: gtk2_ardour/editor_mouse.cc:2495
-#: gtk2_ardour/editor_tempodisplay.cc:373
-#: gtk2_ardour/editor_tempodisplay.cc:454
-#: gtk2_ardour/editor_tempodisplay.cc:473
-msgid "programming error: tempo marker canvas item has no marker object pointer!"
-msgstr "Programmierfehler: tempo marker canvas item has no marker object pointer!"
+#: gtk2_ardour/engine_dialog.cc:54
+msgid "Force 16 bit"
+msgstr "Erzwinge 16 Bit"
-#: gtk2_ardour/editor_mouse.cc:2466
-#: gtk2_ardour/editor_mouse.cc:2500
-#: gtk2_ardour/editor_tempodisplay.cc:378
-#: gtk2_ardour/editor_tempodisplay.cc:459
-msgid "programming error: marker for tempo is not a tempo marker!"
-msgstr "Programmierfehler: marker for tempo is not a tempo marker!"
+#: gtk2_ardour/engine_dialog.cc:55
+msgid "H/W monitoring"
+msgstr "Hardware Monitoring"
-#: gtk2_ardour/editor_mouse.cc:2567
-msgid "copy tempo mark"
-msgstr "Tempomarker kopieren"
+#: gtk2_ardour/engine_dialog.cc:56
+msgid "H/W metering"
+msgstr "Hardware-Pegelanzeige"
-#: gtk2_ardour/editor_mouse.cc:2578
-msgid "move tempo mark"
-msgstr "Tempowechsel bewegen"
+#: gtk2_ardour/engine_dialog.cc:57
+msgid "Verbose output"
+msgstr "Ausführliche Statusmeldungen"
-#: gtk2_ardour/editor_mouse.cc:2593
-#: gtk2_ardour/editor_mouse.cc:2612
-#: gtk2_ardour/editor_mouse.cc:2625
-msgid "programming error: control point canvas item has no control point object pointer!"
-msgstr "Programmierfehler: control point canvas item has no control point object pointer!"
+#: gtk2_ardour/engine_dialog.cc:58
+msgid "Start"
+msgstr "Start"
-#: gtk2_ardour/editor_mouse.cc:2761
-msgid "programming error: line canvas item has no line pointer!"
-msgstr "Programmierfehler: line canvas item has no line pointer!"
+#: gtk2_ardour/engine_dialog.cc:77
+msgid "8000Hz"
+msgstr "8000 Hz"
-#: gtk2_ardour/editor_mouse.cc:2900
-msgid "move region(s)"
-msgstr "Region(en) bewegen"
+#: gtk2_ardour/engine_dialog.cc:78
+msgid "22050Hz"
+msgstr "22050 Hz"
-#: gtk2_ardour/editor_mouse.cc:2964
-msgid "Drag region brush"
-msgstr "Region Brush ziehen"
+#: gtk2_ardour/engine_dialog.cc:79
+msgid "44100Hz"
+msgstr "44100 Hz"
-#: gtk2_ardour/editor_mouse.cc:3595
-msgid "fixed time region copy"
-msgstr "Region zeitgleich kopieren"
+#: gtk2_ardour/engine_dialog.cc:80
+msgid "48000Hz"
+msgstr "48000 Hz"
-#: gtk2_ardour/editor_mouse.cc:3597
-msgid "region copy"
-msgstr "Region kopieren"
+#: gtk2_ardour/engine_dialog.cc:81
+msgid "88200Hz"
+msgstr "88200 Hz"
-#: gtk2_ardour/editor_mouse.cc:3601
-msgid "fixed time region drag"
-msgstr "Region zeitgleich verschieben"
+#: gtk2_ardour/engine_dialog.cc:82
+msgid "96000Hz"
+msgstr "96000 Hz"
-#: gtk2_ardour/editor_mouse.cc:3603
-msgid "region drag"
-msgstr "Region verschieben"
+#: gtk2_ardour/engine_dialog.cc:83
+msgid "192000Hz"
+msgstr "192000 Hz"
-#: gtk2_ardour/editor_mouse.cc:4007
-msgid "selection grab"
-msgstr "Auswählen"
+#: gtk2_ardour/engine_dialog.cc:104
+#: gtk2_ardour/engine_dialog.cc:515
+msgid "Shaped"
+msgstr "shaped"
-#: gtk2_ardour/editor_mouse.cc:4157
-msgid "range selection"
-msgstr "Auswahlbereich"
+#: gtk2_ardour/engine_dialog.cc:129
+#: gtk2_ardour/engine_dialog.cc:449
+#: gtk2_ardour/engine_dialog.cc:909
+msgid "Playback/Recording on 1 Device"
+msgstr "Wiedergabe/Aufnahme mit einem Gerät"
-#: gtk2_ardour/editor_mouse.cc:4173
-msgid "trim selection start"
-msgstr "Anfangspunkt der Auswahl abschneiden"
+#: gtk2_ardour/engine_dialog.cc:130
+#: gtk2_ardour/engine_dialog.cc:453
+#: gtk2_ardour/engine_dialog.cc:488
+#: gtk2_ardour/engine_dialog.cc:912
+msgid "Playback/Recording on 2 Devices"
+msgstr "Wiedergabe/Aufnahme mit zwei Geräten"
-#: gtk2_ardour/editor_mouse.cc:4189
-msgid "trim selection end"
-msgstr "Endpunkt der Auswahl abschneiden"
+#: gtk2_ardour/engine_dialog.cc:131
+#: gtk2_ardour/engine_dialog.cc:468
+#: gtk2_ardour/engine_dialog.cc:915
+msgid "Playback only"
+msgstr "Nur Wiedergabe"
-#: gtk2_ardour/editor_mouse.cc:4206
-msgid "move selection"
-msgstr "Auswahl bewegen"
+#: gtk2_ardour/engine_dialog.cc:132
+#: gtk2_ardour/engine_dialog.cc:470
+#: gtk2_ardour/engine_dialog.cc:917
+msgid "Recording only"
+msgstr "Nur Aufnahme"
-#: gtk2_ardour/editor_mouse.cc:4595
-msgid "Start point trim"
-msgstr "Anfangspunkt verändern"
+#: gtk2_ardour/engine_dialog.cc:141
+msgid "Driver"
+msgstr "Treiber"
-#: gtk2_ardour/editor_mouse.cc:4627
-msgid "End point trim"
-msgstr "Endpunkt verändern"
+#: gtk2_ardour/engine_dialog.cc:146
+msgid "Interface"
+msgstr "Gerät / Interface"
-#: gtk2_ardour/editor_mouse.cc:4670
-msgid "trimmed region"
-msgstr "Abgeschnittene Region"
+#: gtk2_ardour/engine_dialog.cc:156
+msgid "Buffer size"
+msgstr "Größe Buffer"
-#: gtk2_ardour/editor_mouse.cc:4817
-msgid "new range marker"
-msgstr "Neuer Bereich"
+#: gtk2_ardour/engine_dialog.cc:162
+msgid "Number of buffers"
+msgstr "Anzahl Buffer"
-#: gtk2_ardour/editor_mouse.cc:5065
-msgid "rubberband selection"
-msgstr "Bereichsauswahl"
+#: gtk2_ardour/engine_dialog.cc:169
+msgid "Approximate latency"
+msgstr "Latenz (ca.)"
-#: gtk2_ardour/editor_mouse.cc:5095
-msgid "Name for region:"
-msgstr "Name für Region:"
+#: gtk2_ardour/engine_dialog.cc:183
+msgid "Audio Mode"
+msgstr "Audio-Modus"
-#: gtk2_ardour/editor_mouse.cc:5168
-msgid "timestretch"
-msgstr "Time-Stretch"
+#: gtk2_ardour/engine_dialog.cc:222
+msgid "Realtime Priority"
+msgstr "Realtime Priorität"
-#: gtk2_ardour/editor_ops.cc:114
-msgid "split"
-msgstr "Teile"
+#: gtk2_ardour/engine_dialog.cc:251
+#: gtk2_ardour/engine_dialog.cc:375
+msgid "Ignore"
+msgstr "ignorieren"
-#: gtk2_ardour/editor_ops.cc:180
-msgid "remove region"
-msgstr "Region(en) löschen"
+#: gtk2_ardour/engine_dialog.cc:259
+msgid "Client timeout"
+msgstr "Client Timeout"
+
+#: gtk2_ardour/engine_dialog.cc:265
+msgid "Number of ports"
+msgstr "Anzahl Ports"
-#: gtk2_ardour/editor_ops.cc:200
+#: gtk2_ardour/engine_dialog.cc:272
+msgid "Dither"
+msgstr "Dithering"
+
+#: gtk2_ardour/engine_dialog.cc:282
+msgid "No JACK server found anywhere on this system. Please install JACK and restart"
+msgstr "Es wurde kein JACK Server auf diesem System gefunden. Bitte installieren Sie JACK und starten Sie Ardour neu."
+
+#: gtk2_ardour/engine_dialog.cc:290
+msgid "Server:"
+msgstr "Server:"
+
+#: gtk2_ardour/engine_dialog.cc:303
+msgid "Input device"
+msgstr "Eingangsgerät"
+
+#: gtk2_ardour/engine_dialog.cc:308
+msgid "Output device"
+msgstr "Ausgabegerät"
+
+#: gtk2_ardour/engine_dialog.cc:314
+msgid "Input channels"
+msgstr "Eingangskanäle"
+
+#: gtk2_ardour/engine_dialog.cc:319
+msgid "Output channels"
+msgstr "Ausgangskanäle"
+
+#: gtk2_ardour/engine_dialog.cc:324
+msgid "Hardware input latency (samples)"
+msgstr "Hardware Eingangslatenz (Samples)"
+
+#: gtk2_ardour/engine_dialog.cc:329
+msgid "Hardware output latency (samples)"
+msgstr "Hardware Ausgangslatenz (Samples)"
+
+#: gtk2_ardour/engine_dialog.cc:342
+msgid "Device"
+msgstr "Gerät"
+
+#: gtk2_ardour/engine_dialog.cc:344
+msgid "Advanced"
+msgstr "Erweitert"
+
+#: gtk2_ardour/engine_dialog.cc:579
+msgid "cannot open JACK rc file %1 to store parameters"
+msgstr "kann die JACK rc-Datei %1 nicht öffnen, um die Parameter zu sichern"
+
+#: gtk2_ardour/engine_dialog.cc:720
+#, fuzzy
msgid ""
-" This is destructive, will possibly delete audio files\n"
-"It cannot be undone\n"
-"Do you really want to destroy %1 ?"
-msgstr ""
-" Diese Aktion ist destruktiv und löscht möglicherweise Audiodateien\n"
-"Dies kann nicht rückgängig gemacht werden\n"
-"Wollen Sie %1 wirklich löschen ?"
+"You do not have any audio devices capable of\n"
+"simultaneous playback and recording.\n"
+"\n"
+"Please use Applications -> Utilities -> Audio MIDI Setup\n"
+"to create an \"aggregrate\" device, or install a suitable\n"
+"audio interface.\n"
+"\n"
+"Please send email to Apple and ask them why new Macs\n"
+"have no duplex audio device.\n"
+"\n"
+"Alternatively, if you really want just playback\n"
+"or recording but not both, start JACK before running\n"
+"Ardour and choose the relevant device then."
+msgstr " "
-#: gtk2_ardour/editor_ops.cc:204
-msgid "these regions"
-msgstr "diese Region"
+#: gtk2_ardour/engine_dialog.cc:733
+msgid "No suitable audio devices"
+msgstr "Keine passenden Audiogeräte."
-#: gtk2_ardour/editor_ops.cc:204
-msgid "this region"
-msgstr "diese Region"
+#: gtk2_ardour/engine_dialog.cc:845
+msgid "No devices found for driver \"%1\""
+msgstr "Keine Treiber für das Gerät \"%1\" gefunden."
-#: gtk2_ardour/editor_ops.cc:209
-msgid "Yes, destroy them."
-msgstr "Ja, entfernen."
+#: gtk2_ardour/engine_dialog.cc:950
+msgid "JACK appears to be missing from the Ardour bundle"
+msgstr "JACK scheint im Ardour-Paket zu fehlen."
-#: gtk2_ardour/editor_ops.cc:211
-#: gtk2_ardour/editor_ops.cc:3955
-msgid "Yes, destroy it."
-msgstr "Ja, entfernen."
+#: gtk2_ardour/engine_dialog.cc:1016
+msgid "You need to choose an audio device first."
+msgstr "Sie müssen zuerst ein Audiogerät auswählen."
+
+#: gtk2_ardour/engine_dialog.cc:1032
+msgid "Audio device \"%1\" not known on this computer."
+msgstr "Audiogerät %1 scheint auf diesem Computer nicht vorhanden zu sein."
+
+#: gtk2_ardour/engine_dialog.cc:1180
+msgid "AudioSetup value for %1 is missing data"
+msgstr "Es fehlen Daten zum AudioSetup-Wert von %1"
-#: gtk2_ardour/editor_ops.cc:297
-#: gtk2_ardour/editor_ops.cc:325
+#: gtk2_ardour/engine_dialog.cc:1260
+msgid "configuration files contain a JACK server path that doesn't exist (%1)"
+msgstr "die Konfiguration enthält einen JACK-Serverpfad, der nicht existiert (%1)"
+
+#: gtk2_ardour/editor_keyboard.cc:82
+msgid "mute region"
+msgstr "Region stummschalten"
+
+#: gtk2_ardour/editor_ops.cc:127
+msgid "split"
+msgstr "Teile"
+
+#: gtk2_ardour/editor_ops.cc:194
+#: gtk2_ardour/editor_ops.cc:217
+msgid "remove region"
+msgstr "Region(en) löschen"
+
+#: gtk2_ardour/editor_ops.cc:315
+#: gtk2_ardour/editor_ops.cc:343
msgid "extend selection"
msgstr "Auswahl erweitern"
-#: gtk2_ardour/editor_ops.cc:341
+#: gtk2_ardour/editor_ops.cc:384
msgid "nudge regions forward"
msgstr "Regionen Schritt vorwärts"
-#: gtk2_ardour/editor_ops.cc:368
-#: gtk2_ardour/editor_ops.cc:445
+#: gtk2_ardour/editor_ops.cc:408
+#: gtk2_ardour/editor_ops.cc:493
msgid "nudge location forward"
msgstr "Position Schritt vorwärts"
-#: gtk2_ardour/editor_ops.cc:414
+#: gtk2_ardour/editor_ops.cc:465
msgid "nudge regions backward"
msgstr "Regionen Schritt nach hinten"
-#: gtk2_ardour/editor_ops.cc:497
-#: gtk2_ardour/editor_ops.cc:524
+#: gtk2_ardour/editor_ops.cc:558
+#: gtk2_ardour/editor_ops.cc:588
msgid "nudge forward"
msgstr "Schritt vorwärts"
-#: gtk2_ardour/editor_ops.cc:591
+#: gtk2_ardour/editor_ops.cc:655
msgid "build_region_boundary_cache called with snap_type = %1"
-msgstr ""
+msgstr "build_region_boundary_cache wurde mit snap_type = %1 aufgerufen"
+
+#: gtk2_ardour/editor_ops.cc:1919
+#: gtk2_ardour/editor_markers.cc:1076
+msgid "New Name:"
+msgstr "Neuer Name: "
-#: gtk2_ardour/editor_ops.cc:1634
-#: gtk2_ardour/editor_ops.cc:4709
-msgid "cannot set loop: no region selected"
-msgstr "Kann keine Schleife erstellen: keine Region ausgewählt"
+#: gtk2_ardour/editor_ops.cc:1922
+msgid "Name New Location Marker"
+msgstr "Marker benennen"
-#: gtk2_ardour/editor_ops.cc:1957
+#: gtk2_ardour/editor_ops.cc:2140
msgid "clear markers"
msgstr "Marker zurücksetzen"
-#: gtk2_ardour/editor_ops.cc:1970
+#: gtk2_ardour/editor_ops.cc:2153
msgid "clear ranges"
msgstr "Bereiche zurücksetzen"
-#: gtk2_ardour/editor_ops.cc:1990
+#: gtk2_ardour/editor_ops.cc:2173
msgid "clear locations"
msgstr "Positionen zurücksetzen"
-#: gtk2_ardour/editor_ops.cc:2063
+#: gtk2_ardour/editor_ops.cc:2246
msgid "insert dragged region"
msgstr "Region ziehen"
-#: gtk2_ardour/editor_ops.cc:2110
+#: gtk2_ardour/editor_ops.cc:2293
msgid "insert region"
msgstr "Region einfügen"
-#: gtk2_ardour/editor_ops.cc:2321
+#: gtk2_ardour/editor_ops.cc:2517
msgid "Rename Region"
msgstr "Region umbenennen"
-#: gtk2_ardour/editor_ops.cc:2325
+#: gtk2_ardour/editor_ops.cc:2521
msgid "New name:"
msgstr "Neuer Name: "
-#: gtk2_ardour/editor_ops.cc:2624
+#: gtk2_ardour/editor_ops.cc:2859
msgid "separate"
msgstr "Teilen"
-#: gtk2_ardour/editor_ops.cc:2759
+#: gtk2_ardour/editor_ops.cc:3007
msgid "trim to selection"
msgstr "Auf Auswahl kürzen"
-#: gtk2_ardour/editor_ops.cc:2804
+#: gtk2_ardour/editor_ops.cc:3055
msgid "region fill"
msgstr "Region füllen"
-#: gtk2_ardour/editor_ops.cc:2868
+#: gtk2_ardour/editor_ops.cc:3119
msgid "fill selection"
msgstr "Auswahl füllen"
-#: gtk2_ardour/editor_ops.cc:2906
+#: gtk2_ardour/editor_ops.cc:3158
msgid "set sync point"
msgstr "Einrastpunkt definieren"
-#: gtk2_ardour/editor_ops.cc:2926
+#: gtk2_ardour/editor_ops.cc:3184
msgid "remove sync"
msgstr "Einrastpunkt entfernen"
-#: gtk2_ardour/editor_ops.cc:2941
+#: gtk2_ardour/editor_ops.cc:3206
msgid "naturalize"
msgstr "zur Ursprungsposition setzen"
-#: gtk2_ardour/editor_ops.cc:3026
+#: gtk2_ardour/editor_ops.cc:3306
msgid "align selection (relative)"
msgstr "Auswahl relativ ausrichten"
-#: gtk2_ardour/editor_ops.cc:3055
+#: gtk2_ardour/editor_ops.cc:3346
msgid "align selection"
msgstr "Auswahl ausrichten"
-#: gtk2_ardour/editor_ops.cc:3067
+#: gtk2_ardour/editor_ops.cc:3358
msgid "align region"
msgstr "Region ausrichten"
-#: gtk2_ardour/editor_ops.cc:3104
+#: gtk2_ardour/editor_ops.cc:3395
msgid "trim to loop"
msgstr "Auf Schleife kürzen"
-#: gtk2_ardour/editor_ops.cc:3114
+#: gtk2_ardour/editor_ops.cc:3405
msgid "trim to punch"
msgstr "Auf Punch-Bereich kürzen"
-#: gtk2_ardour/editor_ops.cc:3174
+#: gtk2_ardour/editor_ops.cc:3468
msgid "trim region start to edit point"
msgstr "Regionanfang bis Arbeitspunkt abschneiden"
-#: gtk2_ardour/editor_ops.cc:3216
+#: gtk2_ardour/editor_ops.cc:3513
msgid "trim region end to edit point"
msgstr "Regionende bis Arbeitspunkt abschneiden"
-#: gtk2_ardour/editor_ops.cc:3303
+#: gtk2_ardour/editor_ops.cc:3600
msgid "Cancel Freeze"
msgstr "Einfrieren abbrechen"
-#: gtk2_ardour/editor_ops.cc:3346
+#: gtk2_ardour/editor_ops.cc:3643
msgid "bounce range"
msgstr "Bereich Bouncen"
-#: gtk2_ardour/editor_ops.cc:3398
+#: gtk2_ardour/editor_ops.cc:3703
msgid "cut"
msgstr "Ausschneiden"
-#: gtk2_ardour/editor_ops.cc:3401
+#: gtk2_ardour/editor_ops.cc:3706
msgid "copy"
msgstr "Kopieren"
-#: gtk2_ardour/editor_ops.cc:3429
+#: gtk2_ardour/editor_ops.cc:3756
msgid " objects"
msgstr "Objekte"
-#: gtk2_ardour/editor_ops.cc:3469
+#: gtk2_ardour/editor_ops.cc:3792
msgid " range"
msgstr "Bereich"
-#: gtk2_ardour/editor_ops.cc:3698
+#: gtk2_ardour/editor_ops.cc:4031
msgid "paste"
msgstr "Einfügen"
-#: gtk2_ardour/editor_ops.cc:3747
+#: gtk2_ardour/editor_ops.cc:4080
msgid "paste chunk"
msgstr "Abschnitt einfügen"
-#: gtk2_ardour/editor_ops.cc:3791
+#: gtk2_ardour/editor_ops.cc:4124
msgid "duplicate region"
msgstr "Region duplizieren"
-#: gtk2_ardour/editor_ops.cc:3839
+#: gtk2_ardour/editor_ops.cc:4172
msgid "duplicate selection"
msgstr "Auswahl duplizieren"
-#: gtk2_ardour/editor_ops.cc:3893
+#: gtk2_ardour/editor_ops.cc:4226
msgid "clear playlist"
msgstr "Wiedergabeliste zurücksetzen"
-#: gtk2_ardour/editor_ops.cc:3923
+#: gtk2_ardour/editor_ops.cc:4256
msgid "nudge track"
msgstr "Spur verschieben"
-#: gtk2_ardour/editor_ops.cc:3951
+#: gtk2_ardour/editor_ops.cc:4284
msgid ""
"Do you really want to destroy the last capture?\n"
"(This is destructive and cannot be undone)"
@@ -4687,1454 +5884,1208 @@ msgstr ""
"Wollen Sie wirklich die letzte Aufnahme rückgängig machen?\n"
"(Dies kann nicht rückgängig gemacht werden!)"
-#: gtk2_ardour/editor_ops.cc:3979
+#: gtk2_ardour/editor_ops.cc:4288
+msgid "Yes, destroy it."
+msgstr "Ja, entfernen."
+
+#: gtk2_ardour/editor_ops.cc:4316
msgid "normalize"
msgstr "Normalisieren"
-#: gtk2_ardour/editor_ops.cc:4032
+#: gtk2_ardour/editor_ops.cc:4425
msgid "reverse regions"
msgstr "Regionen umkehren"
-#: gtk2_ardour/editor_ops.cc:4145
+#: gtk2_ardour/editor_ops.cc:4545
msgid "reset region gain"
msgstr "Lautstärkekurve zurücksetzen"
-#: gtk2_ardour/editor_ops.cc:4258
+#: gtk2_ardour/editor_ops.cc:4683
msgid "set fade in length"
msgstr "Ändere Fade-In Länge"
-#: gtk2_ardour/editor_ops.cc:4265
+#: gtk2_ardour/editor_ops.cc:4690
msgid "set fade out length"
msgstr "Ändere Fade-Out Länge"
-#: gtk2_ardour/editor_ops.cc:4305
+#: gtk2_ardour/editor_ops.cc:4738
msgid "toggle fade in active"
msgstr "Fade-In aktivieren"
-#: gtk2_ardour/editor_ops.cc:4305
+#: gtk2_ardour/editor_ops.cc:4738
msgid "toggle fade out active"
msgstr "Fade-Out aktivieren"
-#: gtk2_ardour/editor_ops.cc:4343
+#: gtk2_ardour/editor_ops.cc:4788
msgid "set fade in shape"
msgstr "Fade-In Kurve bearbeiten"
-#: gtk2_ardour/editor_ops.cc:4367
+#: gtk2_ardour/editor_ops.cc:4821
msgid "set fade out shape"
msgstr "Fade-Out Kurve ändern"
-#: gtk2_ardour/editor_ops.cc:4391
+#: gtk2_ardour/editor_ops.cc:4853
msgid "set fade in active"
msgstr "Fade-In aktivieren"
-#: gtk2_ardour/editor_ops.cc:4415
+#: gtk2_ardour/editor_ops.cc:4887
msgid "set fade out active"
msgstr "Fade-Out aktivieren"
-#: gtk2_ardour/editor_ops.cc:4589
+#: gtk2_ardour/editor_ops.cc:5097
msgid "trim front"
msgstr "vorne abschneiden"
-#: gtk2_ardour/editor_ops.cc:4589
+#: gtk2_ardour/editor_ops.cc:5097
msgid "trim back"
msgstr "hinten Abschneiden"
-#: gtk2_ardour/editor_ops.cc:4670
+#: gtk2_ardour/editor_ops.cc:5179
msgid "set loop range from selection"
msgstr "Schleife aus Auswahl erstellen"
-#: gtk2_ardour/editor_ops.cc:4692
+#: gtk2_ardour/editor_ops.cc:5201
msgid "set loop range from edit range"
msgstr "Schleife aus Editierbereich erstellen"
-#: gtk2_ardour/editor_ops.cc:4722
+#: gtk2_ardour/editor_ops.cc:5232
msgid "set loop range from region"
msgstr "Schleife aus Region erstellen"
-#: gtk2_ardour/editor_ops.cc:4740
+#: gtk2_ardour/editor_ops.cc:5250
msgid "set punch range from selection"
msgstr "Punch-Bereich aus Auswahl erstellen"
-#: gtk2_ardour/editor_ops.cc:4757
+#: gtk2_ardour/editor_ops.cc:5267
msgid "set punch range from edit range"
msgstr "Punch-Bereich aus Editierbereich erstellen"
-#: gtk2_ardour/editor_region_list.cc:109
-#: gtk2_ardour/editor_region_list.cc:113
-#: gtk2_ardour/editor_region_list.cc:116
-#: gtk2_ardour/location_ui.cc:57
-msgid "Hidden"
-msgstr "Versteckt"
+#: gtk2_ardour/editor_ops.cc:5293
+msgid "set punch range from region"
+msgstr "Punch-Bereich aus Region erstellen"
-#: gtk2_ardour/editor_region_list.cc:159
-msgid " (MISSING)"
-msgstr "(FEHLT)"
-
-#: gtk2_ardour/editor_route_list.cc:77
-#: gtk2_ardour/editor_route_list.cc:78
-#: gtk2_ardour/editor_route_list.cc:264
-msgid "editor"
-msgstr "Editor"
-
-#: gtk2_ardour/editor_route_list.cc:338
-#: gtk2_ardour/mixer_ui.cc:811
-msgid "Show All"
-msgstr "Alles zeigen"
-
-#: gtk2_ardour/editor_route_list.cc:339
-#: gtk2_ardour/mixer_ui.cc:812
-msgid "Hide All"
-msgstr "Alle verbergen"
-
-#: gtk2_ardour/editor_route_list.cc:340
-#: gtk2_ardour/mixer_ui.cc:813
-msgid "Show All Audio Tracks"
-msgstr "Zeige alle Audio-Spuren"
-
-#: gtk2_ardour/editor_route_list.cc:341
-#: gtk2_ardour/mixer_ui.cc:814
-msgid "Hide All Audio Tracks"
-msgstr "Verberge alle Audio-Spuren"
-
-#: gtk2_ardour/editor_route_list.cc:342
-#: gtk2_ardour/mixer_ui.cc:815
-msgid "Show All Audio Busses"
-msgstr "Zeige alle Audio-Busse"
-
-#: gtk2_ardour/editor_route_list.cc:343
-#: gtk2_ardour/mixer_ui.cc:816
-msgid "Hide All Audio Busses"
-msgstr "Verberge alle Audio-Busse"
-
-#: gtk2_ardour/editor_rulers.cc:366
-msgid "New location marker"
-msgstr "Neuer Positionsmarker"
-
-#: gtk2_ardour/editor_rulers.cc:367
-msgid "Clear all locations"
-msgstr "Alle Positionsmarker entfernen"
-
-#: gtk2_ardour/editor_rulers.cc:368
-msgid "Unhide locations"
-msgstr "Positionen anzeigen"
+#: gtk2_ardour/editor_ops.cc:5377
+msgid "Add new marker"
+msgstr "Marker hinzufügen"
-#: gtk2_ardour/editor_rulers.cc:373
-msgid "Clear all ranges"
-msgstr "Alle Bereiche entfernen"
+#: gtk2_ardour/editor_ops.cc:5378
+msgid "Set global tempo"
+msgstr "Globales tempo setzen"
-#: gtk2_ardour/editor_rulers.cc:374
-msgid "Unhide ranges"
-msgstr "Bereiche anzeigen"
+#: gtk2_ardour/editor_ops.cc:5379
+msgid "Do you want to set the global tempo or add new tempo marker?"
+msgstr "Möchten Sie das globale Tempo ändern oder einen neuen Tempo-Marker setzen?"
-#: gtk2_ardour/editor_rulers.cc:384
-msgid "New CD track marker"
-msgstr "Neuer CD-Track Marker"
+#: gtk2_ardour/editor_ops.cc:5403
+msgid "set tempo from region"
+msgstr "Tempo anhand von Region setzen"
-#: gtk2_ardour/editor_rulers.cc:389
-msgid "New Tempo"
-msgstr "Tempowechsel einfügen..."
+#: gtk2_ardour/editor_ops.cc:5437
+msgid "split regions"
+msgstr "Region teilen (Split)"
-#: gtk2_ardour/editor_rulers.cc:390
-msgid "Clear tempo"
-msgstr "Tempo zurücksetzen"
+#: gtk2_ardour/editor_ops.cc:5482
+msgid ""
+"You are about to split\n"
+"%1\n"
+"into %2 pieces.\n"
+"This could take a long time."
+msgstr ""
+"Sie versuchen %1 in %2 Teile zu teilen.\n"
+"Das könnte sehr lange dauern."
-#: gtk2_ardour/editor_rulers.cc:395
-msgid "New Meter"
-msgstr "Taktwechsel einfügen..."
+#: gtk2_ardour/editor_ops.cc:5489
+msgid "Call for the Ferret!"
+msgstr "Call for the Ferret!"
-#: gtk2_ardour/editor_rulers.cc:396
-msgid "Clear meter"
-msgstr "Taktart zurücksetzen"
+#: gtk2_ardour/editor_ops.cc:5490
+msgid ""
+"Press OK to continue with this split operation\n"
+"or ask the Ferret dialog to tune the analysis"
+msgstr ""
+"Drücken Sie OK um mit der aufteiloperation (Split) fortzufahren\n"
+"oder versuchen sie im Ferret-Fenster die Analyse zu verbessern."
-#: gtk2_ardour/editor_rulers.cc:404
-msgid "Min:Secs"
-msgstr "Min:Sek"
+#: gtk2_ardour/editor_ops.cc:5492
+msgid "Press OK to continue with this split operation"
+msgstr "Drücken Sie OK um mit der aufteiloperation (Split) fortzufahren"
-#: gtk2_ardour/editor_selection.cc:740
-msgid "set selected regions"
-msgstr "Regionen auswählen"
+#: gtk2_ardour/editor_ops.cc:5495
+msgid "Excessive split?"
+msgstr "Übermäßige Aufteilung?"
-#: gtk2_ardour/editor_selection.cc:850
-msgid "select all"
-msgstr "Alle Regionen auswählen"
+#: gtk2_ardour/editor_ops.cc:5798
+#: gtk2_ardour/ardour_ui.cc:1227
+msgid "tracks"
+msgstr "Spuren"
-#: gtk2_ardour/editor_selection.cc:939
-msgid "select all within"
-msgstr "Alle im Bereich auswählen"
+#: gtk2_ardour/editor_ops.cc:5800
+msgid "track"
+msgstr "Spur"
-#: gtk2_ardour/editor_selection.cc:970
-msgid "set selection from region"
-msgstr "Auswahlbereich von Region erstellen"
+#: gtk2_ardour/editor_ops.cc:5804
+#: gtk2_ardour/ardour_ui.cc:1227
+msgid "busses"
+msgstr "Audio-Bussen"
-#: gtk2_ardour/editor_selection.cc:1003
-msgid "set selection from range"
-msgstr "Auswahlbereich von Bereich erstellen"
+#: gtk2_ardour/editor_ops.cc:5806
+msgid "bus"
+msgstr "Bus"
-#: gtk2_ardour/editor_selection.cc:1033
-msgid "select all from range"
-msgstr "Alle im Bereich auswählen"
+#: gtk2_ardour/editor_ops.cc:5811
+msgid ""
+"Do you really want to remove %1 %2 and %3 %4?\n"
+"(You may also lose the playlists associated with the %2)\n"
+"\n"
+"This action cannot be undone!"
+msgstr ""
+"Wollen Sie wirklich die Spur \"%1\" löschen?\n"
+"\n"
+"Sie werden auch die Wiedergabeliste, die diese Spur benutzt verlieren.\n"
+"(Dies kann nicht rückgängig gemacht werden!)"
-#: gtk2_ardour/editor_selection.cc:1055
-msgid "select all from punch"
-msgstr "Alle im Punch-Bereich auswählen"
+#: gtk2_ardour/editor_ops.cc:5816
+msgid ""
+"Do you really want to remove %1 %2?\n"
+"(You may also lose the playlists associated with the %2)\n"
+"\n"
+"This action cannot be undone!"
+msgstr ""
+"Wollen Sie wirklich die Spur \"%1\" löschen?\n"
+"\n"
+"Sie werden auch die von dieser Spur benutzten Wiedergabelisten verlieren.\n"
+"(Dies kann nicht rückgängig gemacht werden!)"
-#: gtk2_ardour/editor_selection.cc:1077
-msgid "select all from loop"
-msgstr "Alle im Loop-Bereich auswählen"
+#: gtk2_ardour/editor_ops.cc:5822
+msgid "Do you really want to remove %1 %2?"
+msgstr ""
+"Wollen Sie den Bus \"%1\" wirklich löschen?\n"
+"(Dies kann nicht rückgängig gemacht werden!)"
-#: gtk2_ardour/editor_selection.cc:1091
-msgid "select all after cursor"
-msgstr "Alle nach Positionszeiger auswählen"
+#: gtk2_ardour/editor_ops.cc:5828
+msgid "Yes, remove them."
+msgstr "Ja, entfernen."
-#: gtk2_ardour/editor_selection.cc:1096
-msgid "select all before cursor"
-msgstr "Alle vor Positionszeiger auswählen"
+#: gtk2_ardour/editor_ops.cc:5873
+msgid "Stay in position"
+msgstr "Unverändert lassen"
-#: gtk2_ardour/editor_selection.cc:1122
-msgid "select all after edit"
-msgstr "Alles nach Arbeitspunkt auswählen"
+#: gtk2_ardour/editor_ops.cc:5874
+msgid "Move"
+msgstr "Verschieben"
-#: gtk2_ardour/editor_selection.cc:1127
-msgid "select all before edit"
-msgstr "Alles vor Arbeitspunkt auswählen"
+#: gtk2_ardour/editor_ops.cc:5875
+msgid "Split & Later Section Moves"
+msgstr "Teilen & hinteren Teil verschieben"
-#: gtk2_ardour/editor_selection.cc:1237
-msgid "No edit range defined"
-msgstr "Kein Editierbereich definiert"
+#: gtk2_ardour/editor_ops.cc:5876
+msgid "Intersected regions should:"
+msgstr "Regionen am Positionsmarker:"
-#: gtk2_ardour/editor_selection.cc:1243
-msgid ""
-"the edit point is Selected Marker\n"
-"but there is no selected marker."
-msgstr ""
-"der Arbeitspunkt ist der gewählte Positionsmarker,\n"
-"es ist aber kein Positionsmarker ausgewählt."
+#: gtk2_ardour/editor_ops.cc:5877
+msgid "Move Glued Regions"
+msgstr "Taktgebundene Regionen mitbewegen"
-#: gtk2_ardour/editor_selection_list.cc:180
-msgid "Name for Chunk:"
-msgstr "Name für Abschnitt:"
+#: gtk2_ardour/editor_ops.cc:5878
+msgid "Move Markers"
+msgstr "Marker mitbewegen"
-#: gtk2_ardour/editor_selection_list.cc:183
-msgid "Create Chunk"
-msgstr "Abschnitt erzeugen"
+#: gtk2_ardour/editor_ops.cc:5952
+msgid "insert time"
+msgstr "Stille einfügen"
-#: gtk2_ardour/editor_selection_list.cc:183
-msgid "Forget it"
-msgstr "Abbrechen"
+#: gtk2_ardour/editor_ops.cc:6026
+msgid "There are too many selected tracks to fit in the current window"
+msgstr "Es sind zu viele Spuren ausgewählt um in das aktuelle Fenster zu passen"
-#: gtk2_ardour/editor_selection_list.cc:206
-msgid "No selectable material found in the currently selected time range"
-msgstr "Konnte im ausgewählten Bereich kein auswählbares Material finden"
+#: gtk2_ardour/editor_ops.cc:6136
+#, c-format
+msgid "Saved view %u"
+msgstr "Ansicht %u gespeichert"
-#: gtk2_ardour/editor_tempodisplay.cc:293
-#: gtk2_ardour/editor_tempodisplay.cc:335
+#: gtk2_ardour/editor_tempodisplay.cc:213
+#: gtk2_ardour/editor_tempodisplay.cc:256
msgid "add"
msgstr "Hinzufügen"
-#: gtk2_ardour/editor_tempodisplay.cc:316
+#: gtk2_ardour/editor_tempodisplay.cc:237
msgid "add tempo mark"
msgstr "Tempowechsel einfügen"
-#: gtk2_ardour/editor_tempodisplay.cc:357
+#: gtk2_ardour/editor_tempodisplay.cc:280
msgid "add meter mark"
msgstr "Taktwechsel einfügen"
-#: gtk2_ardour/editor_tempodisplay.cc:390
-#: gtk2_ardour/editor_tempodisplay.cc:419
+#: gtk2_ardour/editor_tempodisplay.cc:313
+#: gtk2_ardour/editor_tempodisplay.cc:342
msgid "done"
msgstr "Fertig"
-#: gtk2_ardour/editor_tempodisplay.cc:408
-#: gtk2_ardour/editor_tempodisplay.cc:438
+#: gtk2_ardour/editor_tempodisplay.cc:331
+#: gtk2_ardour/editor_tempodisplay.cc:363
msgid "replace tempo mark"
msgstr "Tempowechsel ersetzen"
-#: gtk2_ardour/editor_tempodisplay.cc:478
-#: gtk2_ardour/editor_tempodisplay.cc:510
+#: gtk2_ardour/editor_tempodisplay.cc:405
+#: gtk2_ardour/editor_tempodisplay.cc:437
msgid "programming error: marker for meter is not a meter marker!"
msgstr "Programmierfehler: marker for meter is not a meter marker!"
-#: gtk2_ardour/editor_tempodisplay.cc:488
-#: gtk2_ardour/editor_tempodisplay.cc:522
+#: gtk2_ardour/editor_tempodisplay.cc:415
+#: gtk2_ardour/editor_tempodisplay.cc:449
msgid "remove tempo mark"
msgstr "Tempowechsel entfernen"
-#: gtk2_ardour/editor_timefx.cc:63
-msgid "Quick but Ugly"
-msgstr "Quick but Ugly"
-
-#: gtk2_ardour/editor_timefx.cc:64
-msgid "Skip Anti-aliasing"
-msgstr "Ãœberspringe Anti-Aliasing"
-
-#: gtk2_ardour/editor_timefx.cc:68
-msgid "TimeFXDialog"
-msgstr ""
-
-#: gtk2_ardour/editor_timefx.cc:72
-msgid "Pitch Shift"
-msgstr "Pitch-Shift"
-
-#: gtk2_ardour/editor_timefx.cc:74
-msgid "Time Stretch"
-msgstr "Time-Stretch"
-
-#: gtk2_ardour/editor_timefx.cc:92
-msgid "Octaves"
-msgstr "Oktaven"
-
-#: gtk2_ardour/editor_timefx.cc:96
-msgid "Semitones (12TET)"
-msgstr "Halbtöne"
-
-#: gtk2_ardour/editor_timefx.cc:100
-msgid "Cents"
-msgstr "Cents"
-
-#: gtk2_ardour/editor_timefx.cc:106
-msgid "Shift"
-msgstr "Shift"
-
-#: gtk2_ardour/editor_timefx.cc:116
-msgid "Stretch/Shrink"
-msgstr "Stretch/Shrink"
-
-#: gtk2_ardour/editor_timefx.cc:119
-#: gtk2_ardour/editor_timefx.cc:120
-msgid "TimeFXButton"
-msgstr ""
-
-#: gtk2_ardour/editor_timefx.cc:121
-msgid "TimeFXProgress"
-msgstr ""
-
-#: gtk2_ardour/editor_timefx.cc:234
-#, fuzzy
-msgid "timefx cannot be started - thread creation error"
-msgstr "Time-Stretch konnte nicht gestartet werden - Fehler beim erstellen des Threads"
-
-#: gtk2_ardour/editor_timefx.cc:315
-msgid "pitch shift"
-msgstr "pitch-shift"
-
-#: gtk2_ardour/editor_timefx.cc:315
-msgid "time stretch"
-msgstr "Time-Stretch"
-
-#: gtk2_ardour/engine_dialog.cc:46
-msgid "Realtime"
-msgstr "Realtime"
-
-#: gtk2_ardour/engine_dialog.cc:47
-msgid "Do not lock memory"
-msgstr "Speicherzugriff nicht sperren"
-
-#: gtk2_ardour/engine_dialog.cc:48
-msgid "Unlock memory"
-msgstr "Speicherzugriff öffnen"
-
-#: gtk2_ardour/engine_dialog.cc:49
-msgid "No zombies"
-msgstr "Keine Zombies (Soft Mode)"
-
-#: gtk2_ardour/engine_dialog.cc:50
-msgid "Provide monitor ports"
-msgstr "Monitor-Ports erstellen"
-
-#: gtk2_ardour/engine_dialog.cc:51
-msgid "Force 16 bit"
-msgstr "Erzwinge 16 Bit"
-
-#: gtk2_ardour/engine_dialog.cc:52
-msgid "H/W monitoring"
-msgstr "Hardware Monitoring"
-
-#: gtk2_ardour/engine_dialog.cc:53
-msgid "H/W metering"
-msgstr "Hardware-Pegelanzeige"
-
-#: gtk2_ardour/engine_dialog.cc:54
-msgid "Verbose output"
-msgstr "Ausführliche Statusmeldungen"
-
-#: gtk2_ardour/engine_dialog.cc:55
-msgid "Start"
-msgstr "Start"
-
-#: gtk2_ardour/engine_dialog.cc:74
-msgid "8000Hz"
-msgstr "8000 Hz"
-
-#: gtk2_ardour/engine_dialog.cc:75
-msgid "22050Hz"
-msgstr "22050 Hz"
-
-#: gtk2_ardour/engine_dialog.cc:76
-msgid "44100Hz"
-msgstr "44100 Hz"
-
-#: gtk2_ardour/engine_dialog.cc:77
-msgid "48000Hz"
-msgstr "48000 Hz"
-
-#: gtk2_ardour/engine_dialog.cc:78
-msgid "88200Hz"
-msgstr "88200 Hz"
-
-#: gtk2_ardour/engine_dialog.cc:79
-msgid "96000Hz"
-msgstr "96000 Hz"
-
-#: gtk2_ardour/engine_dialog.cc:80
-msgid "192000Hz"
-msgstr "192000 Hz"
-
-#: gtk2_ardour/engine_dialog.cc:99
-#: gtk2_ardour/engine_dialog.cc:480
-#: gtk2_ardour/export_dialog.cc:81
-#: gtk2_ardour/export_dialog.cc:1298
-msgid "Triangular"
-msgstr "dreieckig"
+#: gtk2_ardour/editor_region_list.cc:174
+msgid " (MISSING)"
+msgstr "(FEHLT)"
-#: gtk2_ardour/engine_dialog.cc:100
-#: gtk2_ardour/engine_dialog.cc:482
-#: gtk2_ardour/export_dialog.cc:79
-#: gtk2_ardour/export_dialog.cc:1296
-msgid "Rectangular"
-msgstr "rechteckig"
+#: gtk2_ardour/route_params_ui.cc:85
+msgid "Tracks/Buses"
+msgstr "Spuren/Busse"
-#: gtk2_ardour/engine_dialog.cc:101
-#: gtk2_ardour/engine_dialog.cc:484
-msgid "Shaped"
-msgstr "shaped"
+#: gtk2_ardour/route_params_ui.cc:105
+msgid "Pre-fader Redirects"
+msgstr "Pre-Fader Redirects"
-#: gtk2_ardour/engine_dialog.cc:129
-#: gtk2_ardour/engine_dialog.cc:435
-#: gtk2_ardour/engine_dialog.cc:803
-msgid "Playback/Recording on 1 Device"
-msgstr "Wiedergabe/Aufnahme mit einem Gerät"
+#: gtk2_ardour/route_params_ui.cc:106
+msgid "Post-fader Redirects"
+msgstr "Post-Fader Redirects"
-#: gtk2_ardour/engine_dialog.cc:130
-#: gtk2_ardour/engine_dialog.cc:439
-#: gtk2_ardour/engine_dialog.cc:464
-#: gtk2_ardour/engine_dialog.cc:806
-msgid "Playback/Recording on 2 Devices"
-msgstr "Wiedergabe/Aufnahme mit zwei Geräten"
+#: gtk2_ardour/route_params_ui.cc:205
+msgid "route display list item for renamed route not found!"
+msgstr "Konnte Bezeichnung für umbenannten Verbindung nicht in der Liste der Verbindungen finden!"
-#: gtk2_ardour/engine_dialog.cc:131
-#: gtk2_ardour/engine_dialog.cc:446
-#: gtk2_ardour/engine_dialog.cc:809
-msgid "Playback only"
-msgstr "Nur Wiedergabe"
+#: gtk2_ardour/route_params_ui.cc:455
+msgid "NO TRACK"
+msgstr "KEINE SPUR"
-#: gtk2_ardour/engine_dialog.cc:132
-#: gtk2_ardour/engine_dialog.cc:448
-#: gtk2_ardour/engine_dialog.cc:811
-msgid "Recording only"
-msgstr "Nur Aufnahme"
+#: gtk2_ardour/route_params_ui.cc:685
+#: gtk2_ardour/route_params_ui.cc:686
+msgid "No Route Selected"
+msgstr "Keine Route ausgewählt"
-#: gtk2_ardour/engine_dialog.cc:141
-msgid "Driver"
-msgstr "Treiber"
+#: gtk2_ardour/editor_markers.cc:594
+msgid "Locate to here"
+msgstr "Positionszeiger hierhin setzen"
-#: gtk2_ardour/engine_dialog.cc:146
-msgid "Interface"
-msgstr "Gerät / Interface"
+#: gtk2_ardour/editor_markers.cc:595
+msgid "Play from here"
+msgstr "Wiedergabe ab hier"
-#: gtk2_ardour/engine_dialog.cc:151
-#: gtk2_ardour/export_dialog.cc:108
-msgid "Sample Rate"
-msgstr "Samplerate"
+#: gtk2_ardour/editor_markers.cc:596
+msgid "Move Mark to Playhead"
+msgstr "Marker zum Positionszeiger verschieben"
-#: gtk2_ardour/engine_dialog.cc:156
-msgid "Buffer size"
-msgstr "Größe Buffer"
+#: gtk2_ardour/editor_markers.cc:600
+msgid "Create range to next marker"
+msgstr "Bereich bis zum nächsten Marker erstellen"
-#: gtk2_ardour/engine_dialog.cc:162
-msgid "Number of buffers"
-msgstr "Anzahl Buffer"
+#: gtk2_ardour/editor_markers.cc:606
+msgid "Unlock"
+msgstr "Entsperren"
-#: gtk2_ardour/engine_dialog.cc:169
-msgid "Approximate latency"
-msgstr "Latenz (ca.)"
+#: gtk2_ardour/editor_markers.cc:628
+msgid "Play Range"
+msgstr "Bereich wiedergeben"
-#: gtk2_ardour/engine_dialog.cc:183
-msgid "Audio Mode"
-msgstr "Audio-Modus"
+#: gtk2_ardour/editor_markers.cc:629
+msgid "Locate to Range Mark"
+msgstr "Positionszeiger zu Bereichsmarker"
-#: gtk2_ardour/engine_dialog.cc:222
-msgid "Realtime Priority"
-msgstr "Realtime Priorität"
+#: gtk2_ardour/editor_markers.cc:630
+msgid "Play from Range Mark"
+msgstr "Wiedergabe ab Bereichsmarker"
-#: gtk2_ardour/engine_dialog.cc:251
-#: gtk2_ardour/engine_dialog.cc:374
-msgid "Ignore"
-msgstr "ignorieren"
+#: gtk2_ardour/editor_markers.cc:632
+msgid "Loop Range"
+msgstr "Bereich in Schleife wiedergeben"
-#: gtk2_ardour/engine_dialog.cc:259
-msgid "Client timeout"
-msgstr "Client Timeout"
+#: gtk2_ardour/editor_markers.cc:634
+msgid "Set Range Mark from Playhead"
+msgstr "Bereichsmarker beim Positionszeiger erzeugen"
-#: gtk2_ardour/engine_dialog.cc:265
-msgid "Number of ports"
-msgstr "Anzahl Ports"
+#: gtk2_ardour/editor_markers.cc:636
+msgid "Set Range from Range Selection"
+msgstr "Bereichsmarker für Auswahl erzeugen"
-#: gtk2_ardour/engine_dialog.cc:272
-msgid "Dither"
-msgstr "Dithering"
+#: gtk2_ardour/editor_markers.cc:646
+msgid "Hide Range"
+msgstr "Bereich verbergen"
-#: gtk2_ardour/engine_dialog.cc:282
-msgid "No JACK server found anywhere on this system. Please install JACK and restart"
-msgstr "Es wurde kein JACK Server auf diesem System gefunden. Bitte installieren Sie JACK und starten Sie ardour neu."
+#: gtk2_ardour/editor_markers.cc:647
+#: gtk2_ardour/editor_markers.cc:1082
+msgid "Rename Range"
+msgstr "Bereich umbenennen"
-#: gtk2_ardour/engine_dialog.cc:290
-#, fuzzy
-msgid "Server:"
-msgstr "Stereo"
+#: gtk2_ardour/editor_markers.cc:648
+msgid "Remove Range"
+msgstr "Bereich entfernen"
-#: gtk2_ardour/engine_dialog.cc:303
-msgid "Input device"
-msgstr "Eingangsgerät"
+#: gtk2_ardour/editor_markers.cc:653
+msgid "Separate Regions in Range"
+msgstr "Regionen an Bereichsgrenzen teilen"
-#: gtk2_ardour/engine_dialog.cc:308
-msgid "Output device"
-msgstr "Ausgabegerät"
+#: gtk2_ardour/editor_markers.cc:654
+msgid "Select All in Range"
+msgstr "Alles im Bereich auswählen"
-#: gtk2_ardour/engine_dialog.cc:314
-msgid "Input channels"
-msgstr "Eingangskanäle"
+#: gtk2_ardour/editor_markers.cc:656
+msgid "Select Range"
+msgstr "Bereich auswählen"
-#: gtk2_ardour/engine_dialog.cc:319
-msgid "Output channels"
-msgstr "Ausgangskanäle"
+#: gtk2_ardour/editor_markers.cc:682
+msgid "Set Loop Range"
+msgstr "Schleife erstellen"
-#: gtk2_ardour/engine_dialog.cc:324
-msgid "Hardware input latency (samples)"
-msgstr "Hardware Eingangslatenz (Samples)"
+#: gtk2_ardour/editor_markers.cc:683
+msgid "Set Punch Range"
+msgstr "Punch-Bereich erstellen"
-#: gtk2_ardour/engine_dialog.cc:329
-msgid "Hardware output latency (samples)"
-msgstr "Hardware Ausgangslatenz (Samples)"
+#: gtk2_ardour/editor_markers.cc:1080
+msgid "Rename Mark"
+msgstr "Marker umbenennen"
-#: gtk2_ardour/engine_dialog.cc:342
-msgid "Device"
-msgstr "Gerät"
+#: gtk2_ardour/editor_markers.cc:1104
+msgid "rename marker"
+msgstr "Marker umbenennen"
-#: gtk2_ardour/engine_dialog.cc:344
-msgid "Advanced"
-msgstr "Erweitert"
+#: gtk2_ardour/editor_markers.cc:1126
+msgid "set loop range"
+msgstr "Loop-Bereich festlegen"
-#: gtk2_ardour/engine_dialog.cc:537
-msgid "cannot open JACK rc file %1 to store parameters"
-msgstr "kann die JACK rc-Datei %1 nicht öffnen, um die Parameter zu sichern"
+#: gtk2_ardour/editor_markers.cc:1132
+msgid "set punch range"
+msgstr "Punch-Bereich festlegen"
-#: gtk2_ardour/engine_dialog.cc:842
-msgid "JACK appears to be missing from the Ardour bundle"
+#: gtk2_ardour/ardour_ui.cc:115
+msgid ""
+"pre\n"
+"roll"
msgstr ""
+"pre\n"
+"roll"
-#: gtk2_ardour/engine_dialog.cc:1026
-msgid "AudioSetup value for %1 is missing data"
+#: gtk2_ardour/ardour_ui.cc:116
+msgid ""
+"post\n"
+"roll"
msgstr ""
+"post\n"
+"roll"
-#: gtk2_ardour/engine_dialog.cc:1106
-msgid "configuration files contain a JACK server path that doesn't exist (%1)"
-msgstr "die Konfiguration enthält einen JACK-Serverpfad, der nicht existiert (%1)"
-
-#: gtk2_ardour/export_dialog.cc:59
-#: gtk2_ardour/export_dialog.cc:423
-#: gtk2_ardour/export_dialog.cc:1090
-#: gtk2_ardour/export_dialog.cc:1260
-msgid "22.05kHz"
-msgstr "22,05 kHz"
-
-#: gtk2_ardour/export_dialog.cc:60
-#: gtk2_ardour/export_dialog.cc:426
-#: gtk2_ardour/export_dialog.cc:441
-#: gtk2_ardour/export_dialog.cc:1092
-#: gtk2_ardour/export_dialog.cc:1262
-msgid "44.1kHz"
-msgstr "44,1 kHz"
-
-#: gtk2_ardour/export_dialog.cc:61
-#: gtk2_ardour/export_dialog.cc:429
-#: gtk2_ardour/export_dialog.cc:1094
-#: gtk2_ardour/export_dialog.cc:1264
-msgid "48kHz"
-msgstr "4"
-
-#: gtk2_ardour/export_dialog.cc:62
-#: gtk2_ardour/export_dialog.cc:432
-#: gtk2_ardour/export_dialog.cc:1096
-#: gtk2_ardour/export_dialog.cc:1266
-msgid "88.2kHz"
-msgstr "88,2 kHz"
-
-#: gtk2_ardour/export_dialog.cc:63
-#: gtk2_ardour/export_dialog.cc:435
-#: gtk2_ardour/export_dialog.cc:1098
-#: gtk2_ardour/export_dialog.cc:1268
-msgid "96kHz"
-msgstr "96 kHz"
-
-#: gtk2_ardour/export_dialog.cc:64
-#: gtk2_ardour/export_dialog.cc:438
-#: gtk2_ardour/export_dialog.cc:1100
-#: gtk2_ardour/export_dialog.cc:1270
-msgid "192kHz"
-msgstr "192 kHz"
-
-#: gtk2_ardour/export_dialog.cc:69
-msgid "best"
-msgstr "bestmöglich"
-
-#: gtk2_ardour/export_dialog.cc:70
-#: gtk2_ardour/export_dialog.cc:1280
-msgid "fastest"
-msgstr "schnellstmöglich"
-
-#: gtk2_ardour/export_dialog.cc:71
-#: gtk2_ardour/export_dialog.cc:1282
-msgid "linear"
-msgstr "Linear"
-
-#: gtk2_ardour/export_dialog.cc:72
-#: gtk2_ardour/export_dialog.cc:1284
-msgid "better"
-msgstr "besser"
-
-#: gtk2_ardour/export_dialog.cc:73
-#: gtk2_ardour/export_dialog.cc:1286
-msgid "intermediate"
-msgstr "mittelmäßig"
-
-#: gtk2_ardour/export_dialog.cc:80
-msgid "Shaped Noise"
-msgstr "Shaped Noise"
-
-#: gtk2_ardour/export_dialog.cc:86
-msgid "stereo"
-msgstr "Stereo"
-
-#: gtk2_ardour/export_dialog.cc:87
-#: gtk2_ardour/export_dialog.cc:510
-#: gtk2_ardour/export_dialog.cc:1118
-#: gtk2_ardour/export_dialog.cc:1240
-msgid "mono"
-msgstr "Mono"
-
-#: gtk2_ardour/export_dialog.cc:93
-msgid "CUE"
-msgstr "CUE"
-
-#: gtk2_ardour/export_dialog.cc:94
-#: gtk2_ardour/export_dialog.cc:926
-msgid "TOC"
-msgstr "TOC"
-
-#: gtk2_ardour/export_dialog.cc:102
-msgid "Format"
-msgstr "Format"
-
-#: gtk2_ardour/export_dialog.cc:103
-msgid "CD Marker File Type"
-msgstr "CD-Marker"
-
-#: gtk2_ardour/export_dialog.cc:104
-msgid "Channels"
-msgstr "Kanäle"
-
-#: gtk2_ardour/export_dialog.cc:105
-msgid "File Type"
-msgstr "Dateiformat"
-
-#: gtk2_ardour/export_dialog.cc:106
-msgid "Sample Format"
-msgstr "Sampleformat"
-
-#: gtk2_ardour/export_dialog.cc:107
-msgid "Sample Endianness"
-msgstr "Bytefolge"
-
-#: gtk2_ardour/export_dialog.cc:109
-msgid "Conversion Quality"
-msgstr "Qualität"
-
-#: gtk2_ardour/export_dialog.cc:110
-msgid "Dither Type"
-msgstr "Dithering"
-
-#: gtk2_ardour/export_dialog.cc:111
-msgid "Export CD Marker File Only"
-msgstr "Nur CD-Marker exportieren"
-
-#: gtk2_ardour/export_dialog.cc:112
-#: gtk2_ardour/option_editor.cc:98
-#: gtk2_ardour/option_editor.cc:99
-msgid "Browse"
-msgstr "Durchsuchen"
-
-#: gtk2_ardour/export_dialog.cc:113
-msgid "Specific tracks ..."
-msgstr "Alle Spuren..."
-
-#: gtk2_ardour/export_dialog.cc:141
-#: gtk2_ardour/export_dialog.cc:157
-#: gtk2_ardour/mixer_strip.cc:127
-#: gtk2_ardour/mixer_strip.cc:733
-msgid "Output"
-msgstr "Ausgang"
-
-#: gtk2_ardour/export_dialog.cc:656
-msgid "Editor: cannot open \"%1\" as export file for CD toc file"
-msgstr "Editor: Kann \"%1\" nicht nicht zum Export für CD-Inhaltsverzeichnis (TOC) öffnen."
+#: gtk2_ardour/ardour_ui.cc:142
+msgid "% "
+msgstr ""
-#: gtk2_ardour/export_dialog.cc:790
-msgid "Editor: cannot open \"%1\" as export file for CD cue file"
-msgstr "Editor: Kann \"%1\" nicht zum Export für CD CUE-Datei öffnen."
+#: gtk2_ardour/ardour_ui.cc:150
+msgid ""
+"time\n"
+"master"
+msgstr ""
+"Time\n"
+"Master"
-#: gtk2_ardour/export_dialog.cc:809
-msgid "WAV"
-msgstr "WAV"
+#: gtk2_ardour/ardour_ui.cc:152
+msgid "AUDITION"
+msgstr "VORHÖREN"
-#: gtk2_ardour/export_dialog.cc:941
-#, fuzzy
-msgid "Not connected to audioengine"
-msgstr "Nicht mit JACK verbunden - konnte die Aufnahme nicht starten"
+#: gtk2_ardour/ardour_ui.cc:153
+msgid "SOLO"
+msgstr "SOLO"
-#: gtk2_ardour/export_dialog.cc:945
-msgid "Ardour cannot export audio when disconnected"
-msgstr "Ardour kann nicht exportieren, wenn keine Verbindung zu JACK besteht."
+#: gtk2_ardour/ardour_ui.cc:155
+msgid "Errors"
+msgstr "Fehlermeldungen"
-#: gtk2_ardour/export_dialog.cc:975
-msgid "Stop Export"
-msgstr "Export Abbrechen"
+#: gtk2_ardour/ardour_ui.cc:246
+msgid "could not initialize Ardour."
+msgstr "Konnte Ardour nicht initialisieren."
-#: gtk2_ardour/export_dialog.cc:1194
-msgid "Please enter a valid filename."
-msgstr "Bitte geben Sie einen gültigen Dateinamen ein."
+#: gtk2_ardour/ardour_ui.cc:272
+msgid "Starting audio engine"
+msgstr "Starte Audio Engine"
-#: gtk2_ardour/export_dialog.cc:1204
-msgid "Please specify a complete filename for the audio file."
-msgstr "Bitte geben Sie einen kompletten Dateinamen für die Audiodatei ein."
+#: gtk2_ardour/ardour_ui.cc:578
+msgid "Ardour could not start JACK"
+msgstr "Ardour konnte JACK nicht starten"
-#: gtk2_ardour/export_dialog.cc:1210
-msgid "File already exists, do you want to overwrite it?"
-msgstr "Datei existiert bereits, wollen Sie sie überschreiben?"
+#: gtk2_ardour/ardour_ui.cc:580
+msgid "Ardour could not connect to JACK."
+msgstr "Ardour konnte nicht zu JACK verbinden."
-#: gtk2_ardour/export_dialog.cc:1222
-#: gtk2_ardour/export_range_markers_dialog.cc:160
-msgid "Cannot write file in: "
-msgstr "Konnte Datei nicht in Verzeichnis schreiben:"
+#: gtk2_ardour/ardour_ui.cc:589
+msgid ""
+"There are several possible reasons:\n"
+"\n"
+"1) You requested audio parameters that are not supported..\n"
+"2) JACK is running as another user.\n"
+"\n"
+"Please consider the possibilities, and perhaps try different parameters."
+msgstr ""
+"Dafür kann es verschiedene Gründe geben:\n"
+"\n"
+"1) Sie haben nicht unterstützte Audioeinstellungen gewählt.\n"
+"2) JACK wurde unter einem anderen Benutzer gestartet.\n"
+"\n"
+"Betrachten Sie bitte diese Möglichkeiten und verwenden sie ggf. andere Einstellungen."
-#: gtk2_ardour/export_session_dialog.cc:29
-#: gtk2_ardour/export_region_dialog.cc:35
-msgid "Export to File"
-msgstr "Als Audiodatei exportieren"
+#: gtk2_ardour/ardour_ui.cc:596
+msgid ""
+"There are several possible reasons:\n"
+"\n"
+"1) JACK is not running.\n"
+"2) JACK is running as another user, perhaps root.\n"
+"3) There is already another client called \"ardour\".\n"
+"\n"
+"Please consider the possibilities, and perhaps (re)start JACK."
+msgstr ""
+"Dafür kann es verschiedene Gründe geben:\n"
+"\n"
+"1) JACK läuft nicht.\n"
+"2) JACK wurde unter einem anderen Benutzer gestartet, möglicherweise als root.\n"
+"3) Es gibt bereits einen anderen Client mit der Bezeichnung \"ardour\".\n"
+"\n"
+"Betrachten Sie bitte diese Möglichkeiten und starten Sie ggf. JACK neu."
-#: gtk2_ardour/export_region_dialog.cc:34
-msgid "ardour: export region"
-msgstr "ardour: Region Exportieren"
+#: gtk2_ardour/ardour_ui.cc:644
+msgid "Ardour is ready for use"
+msgstr "Ardour ist bereit"
-#: gtk2_ardour/export_range_markers_dialog.cc:41
-msgid "ardour: export ranges"
-msgstr "ardour: Bereiche Exportieren"
+#: gtk2_ardour/ardour_ui.cc:686
+msgid ""
+"WARNING: Your system has a limit for maximum amount of locked memory. This might cause Ardour to run out of memory before your system runs out of memory. \n"
+"\n"
+"You can view the memory limit with 'ulimit -l', and it is normally controlled by /etc/security/limits.conf"
+msgstr ""
+"WARNUNG: Ihr System hat eine Begrenzung für die Reservierung von Arbeitsspeicher eingestellt. Dies könnte dazu führen, dass Ardour zu schnell der Speicher ausgeht.\n"
+"\n"
+"Sie können die Speicherbegrenzung mit 'ulimit -l' einsehen und normalerweise in /etc/security/limits.conf verändern."
-#: gtk2_ardour/export_range_markers_dialog.cc:42
-msgid "Export to Directory"
-msgstr "In Verzeichnis exportieren"
+#: gtk2_ardour/ardour_ui.cc:694
+msgid "Do not show this window again"
+msgstr "Diese Meldung nicht wieder anzeigen"
-#: gtk2_ardour/export_range_markers_dialog.cc:143
-msgid "Please enter a valid target directory."
-msgstr "Bitte geben Sie ein gültiges Zielverzeichis an."
+#: gtk2_ardour/ardour_ui.cc:723
+msgid "quit"
+msgstr "Beenden"
-#: gtk2_ardour/export_range_markers_dialog.cc:151
-msgid "Please select an existing target directory. Files are not allowed!"
+#: gtk2_ardour/ardour_ui.cc:732
+msgid ""
+"Ardour was unable to save your session.\n"
+"\n"
+"If you still wish to quit, please use the\n"
+"\n"
+"\"Just quit\" option."
msgstr ""
-"Bitte wählen Sie ein vorhandenes Zielverzeichnis aus.\n"
-"Dateien sind nicht möglich."
-
-#: gtk2_ardour/gain_automation_time_axis.cc:64
-msgid "add gain automation event"
-msgstr "Punkt in die Lautstärkekurve einfügen"
-
-#: gtk2_ardour/gain_meter.cc:114
-#: gtk2_ardour/gain_meter.cc:345
-#: gtk2_ardour/gain_meter.cc:541
-#: gtk2_ardour/gain_meter.cc:612
-msgid "-inf"
-msgstr "-inf"
+"Ardour konnte das Projekt nicht speichern.\n
\n"
+"Wenn Sie trotzdem beenden wollen, wählen Sie bitte\n"
+"\n"
+"\"Trotzdem beenden\"."
-#: gtk2_ardour/gain_meter.cc:125
-msgid "Fader automation mode"
-msgstr "Fader Automationsmodus"
+#: gtk2_ardour/ardour_ui.cc:757
+msgid "ardour: save session?"
+msgstr "ardour: Projekt speichern?"
-#: gtk2_ardour/gain_meter.cc:126
-msgid "Fader automation type"
-msgstr "Fader-Automationstyp"
+#: gtk2_ardour/ardour_ui.cc:764
+msgid "Don't %1"
+msgstr "Abbrechen"
-#: gtk2_ardour/gain_meter.cc:170
-#: gtk2_ardour/gain_meter.cc:907
-#: gtk2_ardour/panner_ui.cc:98
-#: gtk2_ardour/panner_ui.cc:784
-msgid "Abs"
-msgstr "Abs"
+#: gtk2_ardour/ardour_ui.cc:766
+msgid "Just %1"
+msgstr "%1"
-#: gtk2_ardour/gain_meter.cc:519
-msgid "-Inf"
-msgstr "-Inf"
+#: gtk2_ardour/ardour_ui.cc:768
+msgid "Save and %1"
+msgstr "Speichern und %1"
-#: gtk2_ardour/gain_meter.cc:723
-#: gtk2_ardour/gain_meter.cc:738
-msgid "meter point change"
-msgstr "Taktwechsel ändern"
+#: gtk2_ardour/ardour_ui.cc:780
+msgid "session"
+msgstr "Das Projekt"
-#: gtk2_ardour/gain_meter.cc:871
-#: gtk2_ardour/mixer_strip.cc:443
-#: gtk2_ardour/panner_ui.cc:748
-msgid "M"
-msgstr "M"
+#: gtk2_ardour/ardour_ui.cc:782
+msgid "snapshot"
+msgstr "Der Schnappschuss"
-#: gtk2_ardour/gain_meter.cc:874
-#: gtk2_ardour/panner_ui.cc:751
-msgid "P"
-msgstr "P"
+#: gtk2_ardour/ardour_ui.cc:784
+msgid ""
+"The %1\"%2\"\n"
+"has not been saved.\n"
+"\n"
+"Any changes made this time\n"
+"will be lost unless you save it.\n"
+"\n"
+"What do you want to do?"
+msgstr ""
+"%1 \"%2\" wurde nicht gespeichert.\n"
+"\n"
+"Alle Änderungen werden verloren gehen wenn Sie nicht speichern.\n"
+"\n"
+"Wie wollen Sie vorgehen?"
-#: gtk2_ardour/gain_meter.cc:877
-#: gtk2_ardour/panner_ui.cc:754
-msgid "T"
-msgstr "T"
+#: gtk2_ardour/ardour_ui.cc:798
+msgid "Prompter"
+msgstr "Frage"
-#: gtk2_ardour/gain_meter.cc:880
-#: gtk2_ardour/panner_ui.cc:757
-msgid "W"
-msgstr "W"
+#: gtk2_ardour/ardour_ui.cc:858
+#, c-format
+msgid "disconnected"
+msgstr "getrennt"
-#: gtk2_ardour/generic_pluginui.cc:77
-msgid "<span size=\"large\">Presets</span>"
-msgstr "<span size=\"large\">Voreinstellungen</span>"
+#: gtk2_ardour/ardour_ui.cc:865
+#, c-format
+msgid "%.1f kHz / %4.1f ms"
+msgstr "%.1f kHz / %4.1f ms"
-#: gtk2_ardour/generic_pluginui.cc:205
-msgid "Plugin Editor: could not build control element for port %1"
-msgstr "Plugin Editor: konnte kein Steuerelement für Port %1 erzeugen"
+#: gtk2_ardour/ardour_ui.cc:869
+#, c-format
+msgid "%u kHz / %4.1f ms"
+msgstr "%u kHz / %4.1f ms"
-#: gtk2_ardour/generic_pluginui.cc:295
-msgid "Automation control"
-msgstr "Automation"
+#: gtk2_ardour/ardour_ui.cc:882
+#, c-format
+msgid "DSP: %5.1f%%"
+msgstr "DSP: %5.1f%%"
-#: gtk2_ardour/generic_pluginui.cc:302
-#, fuzzy
-msgid "Mgnual"
-msgstr "Manuell"
+#: gtk2_ardour/ardour_ui.cc:892
+#, c-format
+msgid "Buffers p:%<PRIu32>%% c:%<PRIu32>%%"
+msgstr "Buffer p:%<PRIu32>%% c:%<PRIu32>%%"
-#: gtk2_ardour/gtk-custom-ruler.c:126
-msgid "Lower"
-msgstr "Untergrenze"
+#: gtk2_ardour/ardour_ui.cc:920
+msgid "Disk: 24hrs+"
+msgstr "HD: >24 Std."
-#: gtk2_ardour/gtk-custom-ruler.c:127
-msgid "Lower limit of ruler"
-msgstr "Untere Grenze des Lineals"
+#: gtk2_ardour/ardour_ui.cc:940
+#, c-format
+msgid "Disk: %02dh:%02dm:%02ds"
+msgstr "HD: %02dh:%02dm:%02ds"
-#: gtk2_ardour/gtk-custom-ruler.c:136
-msgid "Upper"
-msgstr "Obergrenze"
+#: gtk2_ardour/ardour_ui.cc:1139
+msgid ""
+"Ardour is not connected to JACK\n"
+"You cannot open or close sessions in this condition"
+msgstr ""
+"Ardour ist derzeit nicht mit JACK verbunden.\n"
+"Es ist nicht möglich, neue Projekte zu erstellen."
-#: gtk2_ardour/gtk-custom-ruler.c:137
-msgid "Upper limit of ruler"
-msgstr "Obere Grenze für das Lineal"
+#: gtk2_ardour/ardour_ui.cc:1164
+msgid "open session"
+msgstr "Projekt öffnen"
-#: gtk2_ardour/gtk-custom-ruler.c:146
-msgid "Position"
-msgstr "Position"
+#: gtk2_ardour/ardour_ui.cc:1171
+msgid "Ardour sessions"
+msgstr "Ardour-Projekte"
-#: gtk2_ardour/gtk-custom-ruler.c:147
-msgid "Position of mark on the ruler"
-msgstr "Position der Markierung auf dem Lineal"
+#: gtk2_ardour/ardour_ui.cc:1204
+msgid "Patience is a virtue.\n"
+msgstr "Geduld ist eine Tugend.\n"
-#: gtk2_ardour/gtk-custom-ruler.c:156
-msgid "Max Size"
-msgstr "Maximale Größe"
+#: gtk2_ardour/ardour_ui.cc:1214
+msgid "You cannot add a track or bus without a session already loaded."
+msgstr "Sie können erst Spuren oder Busse hinzufügen, wenn ein Projekt geladen wurde."
-#: gtk2_ardour/gtk-custom-ruler.c:157
-msgid "Maximum size of the ruler"
-msgstr "Minimal Größe des Lineals"
+#: gtk2_ardour/ardour_ui.cc:1224
+#: gtk2_ardour/ardour_ui.cc:1237
+msgid "could not create a new audio track"
+msgstr "Konnte neue Spur nicht erstellen."
-#: gtk2_ardour/gtk-custom-ruler.c:166
-msgid "Show Position"
-msgstr "Zeige Position"
+#: gtk2_ardour/ardour_ui.cc:1226
+msgid "could only create %1 of %2 new audio %3"
+msgstr "Konnte nur %1 von %2 neuen %3 erstellen"
-#: gtk2_ardour/gtk-custom-ruler.c:167
-msgid "Draw current ruler position"
-msgstr "Zeige aktuelle Position des Lineals"
+#: gtk2_ardour/ardour_ui.cc:1239
+msgid "could not create %1 new audio tracks"
+msgstr "Konnte %1 neue Spuren nicht erstellen."
-#: gtk2_ardour/imageframe_socket_handler.cc:126
-msgid "Image Compositor Socket has been shutdown/closed"
+#: gtk2_ardour/ardour_ui.cc:1259
+msgid ""
+"There are insufficient JACK ports available\n"
+"to create a new track or bus.\n"
+"You should save Ardour, exit and\n"
+"restart JACK with more ports."
msgstr ""
+"Es sind nicht genügend JACK Ports verfügbar\n"
+"um neue Spuren oder Busse zu erstellen.\n"
+"Speichern Sie Ihr Projekt, beenden Sie\n"
+"Ardour und starten Sie JACK mit einer größeren\n"
+"Anzahl Ports neu."
-#: gtk2_ardour/imageframe_time_axis.cc:285
-msgid "0.5 seconds"
-msgstr "0,5 Sekunden"
-
-#: gtk2_ardour/imageframe_time_axis.cc:286
-#: gtk2_ardour/marker_time_axis.cc:241
-msgid "1 seconds"
-msgstr "1 Sekunde"
-
-#: gtk2_ardour/imageframe_time_axis.cc:287
-#: gtk2_ardour/marker_time_axis.cc:242
-msgid "1.5 seconds"
-msgstr "1,5 Sekunden"
-
-#: gtk2_ardour/imageframe_time_axis.cc:288
-#: gtk2_ardour/marker_time_axis.cc:243
-msgid "2 seconds"
-msgstr "2 Sekunden"
-
-#: gtk2_ardour/imageframe_time_axis.cc:289
-#: gtk2_ardour/marker_time_axis.cc:244
-msgid "2.5 seconds"
-msgstr "2,5 Sekunden"
-
-#: gtk2_ardour/imageframe_time_axis.cc:290
-#: gtk2_ardour/marker_time_axis.cc:245
-msgid "3 seconds"
-msgstr "3 Sekunden"
-
-#: gtk2_ardour/imageframe_time_axis.cc:295
-#: gtk2_ardour/marker_time_axis.cc:250
-msgid "Duration (sec)"
-msgstr "Dauer (Sek)"
-
-#: gtk2_ardour/imageframe_time_axis.cc:300
-msgid "Remove Frame"
-msgstr "Frame löschen"
+#: gtk2_ardour/ardour_ui.cc:1409
+msgid ""
+"Please create 1 or more track\n"
+"before trying to record.\n"
+"Check the Session menu."
+msgstr ""
+"Bitte fügen Sie mindestens eine weitere Spur hinzu,\n"
+"bevor Sie aufnehmen.\n"
+"Weitere Einstellungen finden Sie im Projektmenü."
-#: gtk2_ardour/imageframe_time_axis.cc:303
-msgid "Image Frame"
+#: gtk2_ardour/ardour_ui.cc:1667
+msgid ""
+"JACK has either been shutdown or it\n"
+"disconnected Ardour because Ardour\n"
+"was not fast enough. You can save the\n"
+"session and/or try to reconnect to JACK ."
msgstr ""
+"JACK wurde entweder beendet oder\n"
+"hat Ardour getrennt weil Ardour nicht\n"
+"schnell genug war. Sie sollten versuchen,\n"
+"das Projekt zu speichern und erneut mit JACK zu verbinden."
-#: gtk2_ardour/imageframe_time_axis.cc:304
-#: gtk2_ardour/marker_time_axis.cc:256
-msgid "Rename Track"
-msgstr "Spur umbenennen"
+#: gtk2_ardour/ardour_ui.cc:1685
+msgid "Unable to start the session running"
+msgstr "Konnte das aktuelle Projekt nicht starten"
-#: gtk2_ardour/io_selector.cc:59
-#: gtk2_ardour/io_selector.cc:747
-#: gtk2_ardour/connection_editor.cc:85
-msgid "OK"
-msgstr "OK"
+#: gtk2_ardour/ardour_ui.cc:1776
+#: gtk2_ardour/ardour_ui.cc:1795
+#: gtk2_ardour/audio_clock.cc:514
+#: gtk2_ardour/audio_clock.cc:515
+msgid "none"
+msgstr "keine"
-#: gtk2_ardour/io_selector.cc:61
-#: gtk2_ardour/io_selector.cc:749
-#: gtk2_ardour/connection_editor.cc:60
-#: gtk2_ardour/connection_editor.cc:109
-msgid "Rescan"
-msgstr "Auffrischen"
+#: gtk2_ardour/ardour_ui.cc:1785
+#: gtk2_ardour/ardour_ui.cc:1804
+msgid "off"
+msgstr "aus"
-#: gtk2_ardour/io_selector.cc:69
-msgid "%1 input"
-msgstr "%1 Eingang"
+#: gtk2_ardour/ardour_ui.cc:1830
+msgid "Name of New Snapshot"
+msgstr "Name für neuen Schnappschuss"
-#: gtk2_ardour/io_selector.cc:71
-msgid "%1 output"
-msgstr "%1 Ausgang"
+#: gtk2_ardour/ardour_ui.cc:1940
+msgid "Name for mix template:"
+msgstr "Name für Mixer-Vorlage"
-#: gtk2_ardour/io_selector.cc:143
-#: gtk2_ardour/route_params_ui.cc:103
-msgid "Inputs"
-msgstr "Eingänge"
+#: gtk2_ardour/ardour_ui.cc:1941
+msgid "-template"
+msgstr "Vorlage"
-#: gtk2_ardour/io_selector.cc:143
-#: gtk2_ardour/route_params_ui.cc:104
-msgid "Outputs"
-msgstr "Ausgänge"
+#: gtk2_ardour/ardour_ui.cc:1970
+msgid ""
+"Welcome to Ardour.\n"
+"\n"
+"The program will take a bit longer to start up\n"
+"while the system fonts are checked.\n"
+"\n"
+"This will only be done once, and you will\n"
+"not see this message again\n"
+msgstr ""
+"Willkommen bei Ardour.\n"
+"\n"
+"Der Programmstart wird etwas länger dauern,\n"
+"da die Systemschriften geprüft werden.\n"
+"\n"
+"Diese Meldung wird nur dieses eine Mal\n"
+"auftauchen.\n"
-#: gtk2_ardour/io_selector.cc:144
-msgid "Add Input"
-msgstr "Hinzufügen"
+#: gtk2_ardour/ardour_ui.cc:2057
+msgid ""
+"This session\n"
+"%1\n"
+"already exists. Do you want to open it?"
+msgstr ""
+"Das Projekt\n"
+"%1\n"
+"existiert bereits. Wollen Sie sie öffnen?"
-#: gtk2_ardour/io_selector.cc:144
-msgid "Add Output"
-msgstr "Hinzufügen"
+#: gtk2_ardour/ardour_ui.cc:2420
+msgid ""
+"You do not have write access to this session.\n"
+"This prevents the session from being loaded."
+msgstr ""
+"Sie haben keinen Schreibzugriff auf dieses Projekt.\n"
+"Dadurch kann das Projekt nicht geladen werden."
-#: gtk2_ardour/io_selector.cc:145
-msgid "Remove Input"
-msgstr "Entfernen"
+#: gtk2_ardour/ardour_ui.cc:2427
+msgid "Please wait while Ardour loads your session"
+msgstr "Bitte warten Sie, während Ardour das Projekt lädt"
-#: gtk2_ardour/io_selector.cc:145
-msgid "Remove Output"
-msgstr "Entfernen"
+#: gtk2_ardour/ardour_ui.cc:2442
+#: gtk2_ardour/ardour_ui.cc:2468
+msgid "Loading Error"
+msgstr "Fehler beim Laden"
-#: gtk2_ardour/io_selector.cc:146
-msgid "Disconnect All"
-msgstr "Alle trennen"
+#: gtk2_ardour/ardour_ui.cc:2443
+#: gtk2_ardour/ardour_ui.cc:2469
+msgid "Click the OK button to try again."
+msgstr "Klicken Sie auf OK, um es erneut zu versuchen."
-#: gtk2_ardour/io_selector.cc:160
-msgid "Available connections"
-msgstr "Verfügbare Verbindungen"
+#: gtk2_ardour/ardour_ui.cc:2463
+msgid "Session \"%1 (snapshot %2)\" did not load successfully"
+msgstr "Projekt \"%1 (Schnappschuss %2)\" konnte nicht geladen werden."
-#: gtk2_ardour/io_selector.cc:548
-#: gtk2_ardour/io_selector.cc:559
-msgid "There are no more JACK ports available."
-msgstr "Es sind keine weiteren JACK Ports verfügbar."
+#: gtk2_ardour/ardour_ui.cc:2542
+msgid "Could not create session in \"%1\""
+msgstr "Konnte kein Projekt in \"%1\" anlegen"
-#: gtk2_ardour/io_selector.cc:753
-msgid "ardour: "
-msgstr "ardour: "
+#: gtk2_ardour/ardour_ui.cc:2629
+msgid "No audio files were ready for cleanup"
+msgstr "Keine Audiodateien zum Aufräumen vorhanden"
-#: gtk2_ardour/keyeditor.cc:25
-msgid "Keybinding Editor"
+#: gtk2_ardour/ardour_ui.cc:2633
+msgid ""
+"If this seems suprising, \n"
+"check for any existing snapshots.\n"
+"These may still include regions that\n"
+"require some unused files to continue to exist."
msgstr ""
+"Falls trotzdem nicht benötigte Dateien\n"
+"existieren, welche hier nicht erkannt werden,\n"
+"sind sie wahrscheinlich noch in einem\n"
+"älteren Schnappschuss als Region eingebunden."
-#: gtk2_ardour/keyeditor.cc:33
-msgid "Action"
-msgstr "Aktion"
+#: gtk2_ardour/ardour_ui.cc:2642
+msgid "ardour: cleanup"
+msgstr "ardour: Aufräumen"
-#: gtk2_ardour/keyeditor.cc:34
-msgid "Binding"
-msgstr "Zugewiesene Taste"
+#: gtk2_ardour/ardour_ui.cc:2678
+#: gtk2_ardour/ardour_ui.cc:2684
+msgid "files were"
+msgstr "folgenden Dateien wurden"
-#: gtk2_ardour/keyeditor.cc:188
-msgid "Command-"
-msgstr "Befehl-"
+#: gtk2_ardour/ardour_ui.cc:2680
+#: gtk2_ardour/ardour_ui.cc:2686
+msgid "file was"
+msgstr "folgende Datei wurde"
-#: gtk2_ardour/keyeditor.cc:189
-msgid "Option-"
-msgstr "Option-"
+#: gtk2_ardour/ardour_ui.cc:2727
+msgid "Are you sure you want to cleanup?"
+msgstr "Sind Sie sicher, dass Sie aufräumen wollen?"
-#: gtk2_ardour/keyeditor.cc:190
-msgid "Shift-"
+#: gtk2_ardour/ardour_ui.cc:2732
+msgid ""
+"Cleanup is a destructive operation.\n"
+"ALL undo/redo information will be lost if you cleanup.\n"
+"After cleanup, unused audio files will be moved to a \"dead sounds\" location."
msgstr ""
+"Das Aufräumen ist eine destruktive Operation.\n"
+"Sämtliche Wiederherstellungsinformationen gehen verloren, wenn Sie aufräumen.\n"
+"Nach dem Aufräumen werden alle nicht benötigten Audiodateien in einen \"dead sounds\" Ordner verschoben."
-#: gtk2_ardour/location_ui.cc:49
-#: gtk2_ardour/location_ui.cc:52
-msgid "Set"
-msgstr "Setzen"
-
-#: gtk2_ardour/location_ui.cc:50
-#: gtk2_ardour/location_ui.cc:53
-msgid "Go"
-msgstr "Gehe zu"
-
-#: gtk2_ardour/location_ui.cc:56
-msgid "CD"
-msgstr "CD"
-
-#: gtk2_ardour/location_ui.cc:59
-msgid "SCMS"
-msgstr "SCMS"
-
-#: gtk2_ardour/location_ui.cc:60
-msgid "Pre-Emphasis"
-msgstr "Präemphase"
-
-#: gtk2_ardour/location_ui.cc:430
-msgid "You cannot put a CD marker at the start of the session"
-msgstr "Sie können keinen CD-Marker am Anfang des Projekts erstellen"
-
-#: gtk2_ardour/location_ui.cc:605
-msgid "Add New Location"
-msgstr "Neue Position hinzufügen"
-
-#: gtk2_ardour/location_ui.cc:606
-msgid "Add New Range"
-msgstr "Neuen Bereich hinzufügen"
+#: gtk2_ardour/ardour_ui.cc:2738
+msgid "Clean Up"
+msgstr "Aufräumen"
-#: gtk2_ardour/location_ui.cc:642
-msgid "Location (CD Index) Markers"
-msgstr "Positionsmarker (CD Index)"
+#: gtk2_ardour/ardour_ui.cc:2741
+msgid "CleanupDialog"
+msgstr "Aufräumdialog"
-#: gtk2_ardour/location_ui.cc:662
-msgid "Range (CD Track) Markers"
-msgstr "Bereiche (CD Tracks)"
+#: gtk2_ardour/ardour_ui.cc:2772
+msgid "cleaned files"
+msgstr "aufgeräumte Dateien"
-#: gtk2_ardour/location_ui.cc:840
-msgid "add range marker"
-msgstr "Bereich hinzufügen"
+#: gtk2_ardour/ardour_ui.cc:2773
+msgid ""
+"The following %1 %2 not in use and \n"
+"have been moved to:\n"
+"%3. \n"
+"\n"
+"Flushing the wastebasket will \n"
+"release an additional\n"
+"%4 %5bytes of disk space.\n"
+msgstr ""
+"Die %1 %2 nicht benötigt und\n"
+"verschoben nach:\n"
+"%3. \n"
+"\n"
+"Wenn Sie den Müll leeren werden weitere\n"
+"%4 %5byte Speicherplatz frei.\n"
-#: gtk2_ardour/main.cc:153
-msgid "cannot open pango.rc file %1"
-msgstr "kann die Datei pango.rc nicht öffnen %1"
+#: gtk2_ardour/ardour_ui.cc:2799
+msgid "deleted file"
+msgstr "gelöschte Datei"
-#: gtk2_ardour/main.cc:230
-msgid "Key bindings file \"%1\" not found. Default bindings used instead"
+#: gtk2_ardour/ardour_ui.cc:2800
+msgid ""
+"The following %1 %2 deleted from\n"
+"%3,\n"
+"releasing %4 %5bytes of disk space"
msgstr ""
+"Die %1 %2 gelöscht aus\n"
+"%3,\n"
+"und machten %4 %5byte Speicherplatz frei"
-#: gtk2_ardour/main.cc:292
-msgid "Ardour/GTK "
-msgstr "Ardour/GTK "
+#: gtk2_ardour/ardour_ui.cc:2924
+msgid "Recording was stopped because your system could not keep up."
+msgstr "Die Aufnahme wurde gestoppt, da Ihr System nicht schnell genug folgen konnte."
-#: gtk2_ardour/main.cc:294
+#: gtk2_ardour/ardour_ui.cc:2949
msgid ""
+"The disk system on your computer\n"
+"was not able to keep up with Ardour.\n"
"\n"
-" (built using "
+"Specifically, it failed to write data to disk\n"
+"quickly enough to keep up with recording.\n"
msgstr ""
+"Ihre Festplatte war nicht schnell genug,\n"
+"um Ardour zu folgen.\n"
"\n"
-" (kompiliert mit Version "
-
-#: gtk2_ardour/main.cc:297
-msgid " and GCC version "
-msgstr " und GCC Version"
-
-#: gtk2_ardour/main.cc:307
-msgid "Copyright (C) 1999-2007 Paul Davis"
-msgstr "Copyright (C) 1999-2007 Paul Davis"
-
-#: gtk2_ardour/main.cc:308
-msgid "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel Baker"
-msgstr "Einige Teile Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel Baker"
-
-#: gtk2_ardour/main.cc:310
-msgid "Ardour comes with ABSOLUTELY NO WARRANTY"
-msgstr "Ardour wird Ihnen ohne jegliche Gewährleistung und ausdrücklich ohne die Zusicherung"
-
-#: gtk2_ardour/main.cc:311
-msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-msgstr "für allgemeine oder spezielle Gebrauchstauglichkeit zur Verfügung gestellt."
-
-#: gtk2_ardour/main.cc:312
-msgid "This is free software, and you are welcome to redistribute it "
-msgstr "Dies ist freie Software und Sie dürfen sie gerne weiterverbreiten,"
-
-#: gtk2_ardour/main.cc:313
-msgid "under certain conditions; see the source for copying conditions."
-msgstr "solange Sie sich an die Bedingungen, die in der Datei COPYING aufgeführt sind halten."
-
-#: gtk2_ardour/main.cc:324
-msgid "could not create ARDOUR GUI"
-msgstr "konnte das grafische Ardour User Interface nicht erstellen"
+"Die Daten konnten nicht schnell genug geschrieben\n"
+"werden, um die Aufnahme fortzuführen.\n"
-#: gtk2_ardour/marker.cc:244
-msgid "MarkerText"
+#: gtk2_ardour/ardour_ui.cc:2968
+msgid ""
+"The disk system on your computer\n"
+"was not able to keep up with Ardour.\n"
+"\n"
+"Specifically, it failed to read data from disk\n"
+"quickly enough to keep up with playback.\n"
msgstr ""
+"Ihre Festplatte war nicht schnell genug,\n"
+"um Ardour zu folgen.\n"
+"\n"
+"Die Daten konnten nicht schnell genug gelesen\n"
+"werden, um die Wiedergabe aufrechtzuerhalten.\n"
-#: gtk2_ardour/marker_time_axis.cc:253
-msgid "Remove Marker"
-msgstr "Marker entfernen"
-
-#: gtk2_ardour/midi_port_dialog.cc:22
-msgid "Port name"
-msgstr "Port Name"
-
-#: gtk2_ardour/mixer_strip.cc:97
-#: gtk2_ardour/mixer_strip.cc:143
-#: gtk2_ardour/mixer_strip.cc:1217
-msgid "pre"
-msgstr "Pre"
+#: gtk2_ardour/ardour_ui.cc:3008
+msgid "Crash Recovery"
+msgstr "Wiederherstellung"
-#: gtk2_ardour/mixer_strip.cc:98
-#: gtk2_ardour/mixer_strip.cc:786
-msgid "Comments"
-msgstr "Kommentare"
+#: gtk2_ardour/ardour_ui.cc:3009
+msgid ""
+"This session appears to have been in\n"
+"middle of recording when ardour or\n"
+"the computer was shutdown.\n"
+"\n"
+"Ardour can recover any captured audio for\n"
+"you, or it can ignore it. Please decide\n"
+"what you would like to do.\n"
+msgstr ""
+"Es scheint, dass dieses Projekt während\n"
+"einer Aufnahme abgebrochen oder\n"
+"geschlossen wurde.\n"
+"\n"
+"Ardour kann die Aufgenommenen Audiodaten\n"
+"für Sie wiederherstellen oder sie verwerfen.\n"
+"Bitte entscheiden Sie, wie Sie vorgehen möchten.\n"
-#: gtk2_ardour/mixer_strip.cc:122
-msgid "Input"
-msgstr "Eingang"
+#: gtk2_ardour/ardour_ui.cc:3021
+msgid "Ignore crash data"
+msgstr "Daten verwerfen"
-#: gtk2_ardour/mixer_strip.cc:139
-#: gtk2_ardour/mixer_strip.cc:1213
-#: gtk2_ardour/option_editor.cc:707
-msgid "input"
-msgstr "Input"
+#: gtk2_ardour/ardour_ui.cc:3022
+msgid "Recover from crash"
+msgstr "Daten wiederherstellen"
-#: gtk2_ardour/mixer_strip.cc:147
-#: gtk2_ardour/mixer_strip.cc:1221
-msgid "post"
-msgstr "Post"
+#: gtk2_ardour/ardour_ui.cc:3042
+msgid "Sample Rate Mismatch"
+msgstr "Samplerate passt nicht"
-#: gtk2_ardour/mixer_strip.cc:154
-msgid "tupni"
+#: gtk2_ardour/ardour_ui.cc:3043
+msgid ""
+"This session was created with a sample rate of %1 Hz\n"
+"\n"
+"The audioengine is currently running at %2 Hz\n"
msgstr ""
+"Dieses Projekt wurde mit einer Samplrate von %1 Hz erstellt.\n"
+"\n"
+"Die Audioengine läuft derzeit mit %2 Hz.\n"
-#: gtk2_ardour/mixer_strip.cc:202
-msgid "Varispeed"
-msgstr "Varispeed"
-
-#: gtk2_ardour/mixer_strip.cc:228
-#: gtk2_ardour/mixer_strip.cc:802
-msgid "Click to Add/Edit Comments"
-msgstr "Kommentare hinzufügen/ändern"
-
-#: gtk2_ardour/mixer_strip.cc:419
-msgid "record"
-msgstr "Aufnahme"
+#: gtk2_ardour/ardour_ui.cc:3052
+msgid "Do not load session"
+msgstr "Projekt nicht laden"
-#: gtk2_ardour/mixer_strip.cc:426
-msgid "comments"
-msgstr "Kommentare"
+#: gtk2_ardour/ardour_ui.cc:3053
+msgid "Load session anyway"
+msgstr "Projekt trotzdem laden"
-#: gtk2_ardour/mixer_strip.cc:429
-msgid "*comments*"
-msgstr "*Kommentare*"
+#: gtk2_ardour/ardour_ui.cc:3074
+msgid "Could not disconnect from JACK"
+msgstr "Konnte Verbindung mit JACK nicht trennen"
-#: gtk2_ardour/mixer_strip.cc:441
-msgid "Rec"
-msgstr "Rec"
+#: gtk2_ardour/ardour_ui.cc:3087
+msgid "Could not reconnect to JACK"
+msgstr "Konnte nicht erneut zu JACK verbinden"
-#: gtk2_ardour/mixer_strip.cc:444
-msgid "S"
-msgstr "S"
+#: gtk2_ardour/audio_clock.cc:1941
+msgid "Minutes:Seconds"
+msgstr "Minuten:Sekunden"
-#: gtk2_ardour/mixer_strip.cc:448
-#: gtk2_ardour/mixer_strip.cc:796
-msgid "Cmt"
-msgstr "Kmt"
+#: gtk2_ardour/time_selection.cc:40
+msgid "programming error: request for non-existent audio range (%1)!"
+msgstr "Programmierfehler: request for non-existent audio range (%1)!"
-#: gtk2_ardour/mixer_strip.cc:451
-#: gtk2_ardour/mixer_strip.cc:793
-msgid "*Cmt*"
-msgstr "*Kmt*"
+#: gtk2_ardour/plugin_selector.cc:60
+msgid "ardour: plugins"
+msgstr "ardour: Plugins"
-#: gtk2_ardour/mixer_strip.cc:490
-#: gtk2_ardour/mixer_strip.cc:556
-#: gtk2_ardour/redirect_box.cc:1124
-msgid "Not connected to JACK - no I/O changes are possible"
-msgstr "Nicht mit Jack verbunden - es sind keine Änderungen an Ein-/Ausgängen möglich"
+#: gtk2_ardour/plugin_selector.cc:77
+msgid "Fav"
+msgstr "Fav"
-#: gtk2_ardour/mixer_strip.cc:590
-#: gtk2_ardour/mixer_strip.cc:606
-msgid "could not register new ports required for that connection"
-msgstr "Konnte die Ports, die diese Verbindung benötigt nicht registrieren"
+#: gtk2_ardour/plugin_selector.cc:78
+msgid "Available Plugins"
+msgstr "Verfügbare Plugins"
-#: gtk2_ardour/mixer_strip.cc:713
-msgid " Input"
-msgstr "Eingang"
+#: gtk2_ardour/plugin_selector.cc:79
+msgid "Type"
+msgstr "Typ"
-#: gtk2_ardour/mixer_strip.cc:716
-msgid "I"
-msgstr "I"
+#: gtk2_ardour/plugin_selector.cc:80
+msgid "Category"
+msgstr "Kategorie"
-#: gtk2_ardour/mixer_strip.cc:736
-msgid "O"
-msgstr "O"
+#: gtk2_ardour/plugin_selector.cc:81
+msgid "Creator"
+msgstr "Ersteller"
-#: gtk2_ardour/mixer_strip.cc:783
-msgid "*Comments*"
-msgstr "*Kommentare*"
+#: gtk2_ardour/plugin_selector.cc:82
+msgid "# Inputs"
+msgstr "Eingänge"
-#: gtk2_ardour/mixer_strip.cc:838
-msgid ": comment editor"
-msgstr "Kommentare bearbeiten"
+#: gtk2_ardour/plugin_selector.cc:83
+msgid "# Outputs"
+msgstr "Ausgänge"
-#: gtk2_ardour/mixer_strip.cc:933
-msgid "Grp"
-msgstr "Grp"
+#: gtk2_ardour/plugin_selector.cc:100
+msgid "Plugins to be connected"
+msgstr "Plugins, die verbunden werden"
-#: gtk2_ardour/mixer_strip.cc:936
-msgid "~G"
-msgstr "~G"
+#: gtk2_ardour/plugin_selector.cc:113
+msgid "Add a plugin to the effect list"
+msgstr "Plugin zur Effektliste hinzufügen"
-#: gtk2_ardour/mixer_strip.cc:984
-msgid "Invert Polarity"
-msgstr "Polarität umkehren"
+#: gtk2_ardour/plugin_selector.cc:117
+msgid "Remove a plugin from the effect list"
+msgstr "Plugin aus der Effektliste entfernen"
-#: gtk2_ardour/mixer_strip.cc:987
-msgid "Protect against denormals"
-msgstr "Schutz vor Denormals"
+#: gtk2_ardour/plugin_selector.cc:119
+msgid "Update available plugins"
+msgstr "Verfügbare Plugins auffrischen"
-#: gtk2_ardour/mixer_ui.cc:89
-msgid "Strips"
-msgstr "Spur"
+#: gtk2_ardour/plugin_selector.cc:156
+msgid "Insert Plugin(s)"
+msgstr "Plugin(s) einfügen"
-#: gtk2_ardour/mixer_ui.cc:115
-msgid "Group"
-msgstr "Gruppe"
+#: gtk2_ardour/plugin_selector.cc:203
+#: gtk2_ardour/plugin_selector.cc:450
+msgid "Favorites only"
+msgstr "nur Favoriten"
-#: gtk2_ardour/mixer_ui.cc:215
-#: gtk2_ardour/mixer_ui.cc:425
-#: gtk2_ardour/mixer_ui.cc:457
-msgid "Mixer"
-msgstr "Mixer"
-
-#: gtk2_ardour/mixer_ui.cc:835
-msgid "track display list item for renamed strip not found!"
-msgstr "Konnte Bezeichnung für umbenannten Mixerkanal nicht in der Spurliste finden!"
+#: gtk2_ardour/plugin_selector.cc:209
+msgid "Name contains"
+msgstr "Name enthält"
-#: gtk2_ardour/new_session_dialog.cc:46
-msgid "Name :"
-msgstr "Name :"
+#: gtk2_ardour/plugin_selector.cc:211
+msgid "Type contains"
+msgstr "Typ enthält"
-#: gtk2_ardour/new_session_dialog.cc:50
-#: gtk2_ardour/new_session_dialog.cc:51
-#: gtk2_ardour/new_session_dialog.cc:52
-#: gtk2_ardour/new_session_dialog.cc:53
-msgid "channels"
-msgstr "Kanäle"
+#: gtk2_ardour/plugin_selector.cc:213
+msgid "Author contains"
+msgstr "Autor enthält"
-#: gtk2_ardour/new_session_dialog.cc:71
-msgid "<b>Busses</b>"
-msgstr "<b>Busse</b>"
+#: gtk2_ardour/plugin_selector.cc:215
+msgid "Library contains"
+msgstr "Kategorie enthält"
-#: gtk2_ardour/new_session_dialog.cc:72
-msgid "<b>Inputs</b>"
-msgstr "<b>Eingänge</b>"
+#: gtk2_ardour/plugin_selector.cc:502
+msgid "Favorites"
+msgstr "Favoriten"
-#: gtk2_ardour/new_session_dialog.cc:73
-msgid "<b>Outputs</b>"
-msgstr "<b>Ausgänge</b>"
+#: gtk2_ardour/plugin_selector.cc:503
+msgid "Plugin Manager"
+msgstr "Alle Plugins ..."
-#: gtk2_ardour/new_session_dialog.cc:75
-msgid "Create Folder In :"
-msgstr "Verzeichnis erstellen in:"
+#: gtk2_ardour/tempo_dialog.cc:36
+msgid "edit tempo"
+msgstr "Tempo bearbeiten"
-#: gtk2_ardour/new_session_dialog.cc:77
-msgid "Template :"
-msgstr "Vorlage :"
+#: gtk2_ardour/tempo_dialog.cc:42
+#: gtk2_ardour/tempo_dialog.cc:61
+msgid "Bar"
+msgstr "Takt"
-#: gtk2_ardour/new_session_dialog.cc:79
-msgid "Create Monitor Bus"
-msgstr "Monitor Bus erstellen"
+#: gtk2_ardour/tempo_dialog.cc:43
+#: gtk2_ardour/tempo_dialog.cc:62
+msgid "Beat"
+msgstr "Schlag"
-#: gtk2_ardour/new_session_dialog.cc:86
-msgid "Create Master Bus"
-msgstr "Master Bus erstellen"
+#: gtk2_ardour/tempo_dialog.cc:45
+#: gtk2_ardour/tempo_dialog.cc:64
+#: gtk2_ardour/tempo_dialog.cc:276
+#: gtk2_ardour/tempo_dialog.cc:291
+msgid "Location"
+msgstr "Position"
-#: gtk2_ardour/new_session_dialog.cc:88
-msgid "Automatically Connect to Physical Inputs"
-msgstr "Eingänge automatisch mit Audioeingängen verbinden"
+#: gtk2_ardour/tempo_dialog.cc:77
+#: gtk2_ardour/tempo_dialog.cc:94
+#: gtk2_ardour/tempo_dialog.cc:304
+#: gtk2_ardour/tempo_dialog.cc:322
+msgid "whole (1)"
+msgstr "Ganze (1)"
-#: gtk2_ardour/new_session_dialog.cc:89
-#: gtk2_ardour/new_session_dialog.cc:102
-msgid "Use only"
-msgstr "Benutze nur"
+#: gtk2_ardour/tempo_dialog.cc:78
+#: gtk2_ardour/tempo_dialog.cc:96
+#: gtk2_ardour/tempo_dialog.cc:305
+#: gtk2_ardour/tempo_dialog.cc:324
+msgid "second (2)"
+msgstr "Halbe (2)"
-#: gtk2_ardour/new_session_dialog.cc:101
-msgid "Automatically Connect Outputs"
-msgstr "Ausgänge automatisch verbinden"
+#: gtk2_ardour/tempo_dialog.cc:79
+#: gtk2_ardour/tempo_dialog.cc:98
+#: gtk2_ardour/tempo_dialog.cc:306
+#: gtk2_ardour/tempo_dialog.cc:326
+msgid "third (3)"
+msgstr "Triolen (3)"
-#: gtk2_ardour/new_session_dialog.cc:110
-msgid "... to Master Bus"
-msgstr "... mit Master Bus"
+#: gtk2_ardour/tempo_dialog.cc:80
+#: gtk2_ardour/tempo_dialog.cc:100
+#: gtk2_ardour/tempo_dialog.cc:108
+#: gtk2_ardour/tempo_dialog.cc:307
+#: gtk2_ardour/tempo_dialog.cc:328
+#: gtk2_ardour/tempo_dialog.cc:336
+msgid "quarter (4)"
+msgstr "Viertel (4)"
-#: gtk2_ardour/new_session_dialog.cc:111
-msgid "... to Physical Outputs"
-msgstr "... mit Audioausgängen"
+#: gtk2_ardour/tempo_dialog.cc:81
+#: gtk2_ardour/tempo_dialog.cc:102
+#: gtk2_ardour/tempo_dialog.cc:308
+#: gtk2_ardour/tempo_dialog.cc:330
+msgid "eighth (8)"
+msgstr "Achtel (8)"
-#: gtk2_ardour/new_session_dialog.cc:117
-msgid "Advanced Options"
-msgstr "Erweiterte Einstellungen"
+#: gtk2_ardour/tempo_dialog.cc:82
+#: gtk2_ardour/tempo_dialog.cc:104
+#: gtk2_ardour/tempo_dialog.cc:309
+#: gtk2_ardour/tempo_dialog.cc:332
+msgid "sixteenth (16)"
+msgstr "Sechzehntel (16)"
-#: gtk2_ardour/new_session_dialog.cc:125
-msgid "Recent:"
-msgstr "Zuletzt verwendet:"
+#: gtk2_ardour/tempo_dialog.cc:83
+#: gtk2_ardour/tempo_dialog.cc:106
+#: gtk2_ardour/tempo_dialog.cc:310
+#: gtk2_ardour/tempo_dialog.cc:334
+msgid "thirty-second (32)"
+msgstr "Zweiunddreissigstel (32)"
-#: gtk2_ardour/new_session_dialog.cc:162
-msgid "Browse:"
-msgstr "Durchsuchen:"
+#: gtk2_ardour/tempo_dialog.cc:110
+msgid "Beats Per Minute:"
+msgstr "Schläge pro Minute"
-#: gtk2_ardour/new_session_dialog.cc:350
-msgid "Session Control"
-msgstr "Projektübersicht"
+#: gtk2_ardour/tempo_dialog.cc:150
+msgid "Tempo Begins at:"
+msgstr "Tempo beginnt bei:"
-#: gtk2_ardour/new_session_dialog.cc:393
-msgid "select template"
-msgstr "Vorlage auswählen"
+#: gtk2_ardour/tempo_dialog.cc:246
+#: gtk2_ardour/tempo_dialog.cc:478
+msgid "garbaged note type entry (%1)"
+msgstr "Fehlerhafter Notentyp (%1)"
-#: gtk2_ardour/new_session_dialog.cc:399
-msgid "select session file"
-msgstr "Projektdatei auswählen"
+#: gtk2_ardour/tempo_dialog.cc:256
+#: gtk2_ardour/tempo_dialog.cc:488
+msgid "incomprehensible note type entry (%1)"
+msgstr "Unverständlicher Notentyp (%1)"
-#: gtk2_ardour/new_session_dialog.cc:408
-msgid "select directory"
-msgstr "Verzeichnis auswählen"
+#: gtk2_ardour/tempo_dialog.cc:317
+msgid "thirtq-second (32)"
+msgstr "Zweiunddreissigstel (32)"
-#: gtk2_ardour/new_session_dialog.cc:468
-msgid "Audio Setup"
-msgstr "Audio-Einstellungen"
+#: gtk2_ardour/tempo_dialog.cc:338
+msgid "Note Value:"
+msgstr "Notenwert"
-#: gtk2_ardour/new_session_dialog.cc:492
-msgid "New Session"
-msgstr "Neues Projekt"
+#: gtk2_ardour/tempo_dialog.cc:339
+msgid "Beats Per Bar:"
+msgstr "Schläge pro Takt"
-#: gtk2_ardour/new_session_dialog.cc:497
-msgid "Open Session"
-msgstr "Projekt öffnen"
+#: gtk2_ardour/tempo_dialog.cc:357
+msgid "Meter Begins at Bar:"
+msgstr "Neue Taktart beginnt bei Takt:"
-#: gtk2_ardour/option_editor.cc:77
+#: gtk2_ardour/option_editor.cc:82
msgid "Limit undo history"
msgstr "Begrenze Aktionsliste"
-#: gtk2_ardour/option_editor.cc:78
+#: gtk2_ardour/option_editor.cc:83
msgid "Save undo history"
msgstr "Aktionsliste speichern"
-#: gtk2_ardour/option_editor.cc:83
+#: gtk2_ardour/option_editor.cc:88
msgid "SMPTE offset is negative"
msgstr "Negatives SMPTE-Offset"
-#: gtk2_ardour/option_editor.cc:84
+#: gtk2_ardour/option_editor.cc:89
msgid "Timecode source is sample-clock synced"
-msgstr ""
+msgstr "Timecode-Quelle ist mit Sample-Clock synchronisiert"
-#: gtk2_ardour/option_editor.cc:93
+#: gtk2_ardour/option_editor.cc:98
msgid "Add new MIDI port"
msgstr "Neuen MIDI-Port hinzufügen"
-#: gtk2_ardour/option_editor.cc:145
+#: gtk2_ardour/option_editor.cc:154
msgid "Paths/Files"
msgstr "Pfade"
-#: gtk2_ardour/option_editor.cc:146
+#: gtk2_ardour/option_editor.cc:155
msgid "Kbd/Mouse"
msgstr "Tastatur/Maus"
-#: gtk2_ardour/option_editor.cc:149
+#: gtk2_ardour/option_editor.cc:159
msgid "Misc"
msgstr "Sonstiges"
-#: gtk2_ardour/option_editor.cc:152
+#: gtk2_ardour/option_editor.cc:162
msgid "MIDI"
msgstr "MIDI"
-#: gtk2_ardour/option_editor.cc:222
+#: gtk2_ardour/option_editor.cc:232
msgid "session RAID path"
msgstr "Projektverzeichnis (RAID)"
-#: gtk2_ardour/option_editor.cc:238
-#: gtk2_ardour/option_editor.cc:244
-#: gtk2_ardour/option_editor.cc:933
-#: gtk2_ardour/option_editor.cc:953
+#: gtk2_ardour/option_editor.cc:248
+#: gtk2_ardour/option_editor.cc:254
+#: gtk2_ardour/option_editor.cc:988
+#: gtk2_ardour/option_editor.cc:1008
msgid "internal"
msgstr "intern"
-#: gtk2_ardour/option_editor.cc:257
+#: gtk2_ardour/option_editor.cc:281
+msgid "Font Scaling"
+msgstr "Schriftskalierung"
+
+#: gtk2_ardour/option_editor.cc:295
msgid "Short crossfade length (msecs)"
msgstr "Länge für kurze Crossfades (ms)"
-#: gtk2_ardour/option_editor.cc:269
+#: gtk2_ardour/option_editor.cc:307
msgid "Destructive crossfade length (msecs)"
msgstr "Länge für destruktive Crossfades (ms)"
-#: gtk2_ardour/option_editor.cc:288
+#: gtk2_ardour/option_editor.cc:326
msgid "History depth (commands)"
msgstr "Anzahl der Befehle, die rückgängig gemacht werden können"
-#: gtk2_ardour/option_editor.cc:309
+#: gtk2_ardour/option_editor.cc:347
msgid "Saved history depth (commands)"
msgstr "Anzahl der Befehle, die im Verlauf gespeichert werden"
-#: gtk2_ardour/option_editor.cc:407
+#: gtk2_ardour/option_editor.cc:445
msgid "SMPTE Offset"
msgstr "SMPTE Offset"
-#: gtk2_ardour/option_editor.cc:480
-#, fuzzy
+#: gtk2_ardour/option_editor.cc:518
msgid "Inbound MMC Device ID"
-msgstr "MMC Gerät ID"
+msgstr "ID des ausgehenden MMC-Geräts"
-#: gtk2_ardour/option_editor.cc:490
-#, fuzzy
+#: gtk2_ardour/option_editor.cc:528
msgid "Outbound MMC Device ID"
-msgstr "MMC Gerät ID"
+msgstr "ID des eingehenden MMC-Geräts"
+
+#: gtk2_ardour/option_editor.cc:538
+#, fuzzy
+msgid "Startup program change"
+msgstr "Bereich beginnen"
-#: gtk2_ardour/option_editor.cc:522
+#: gtk2_ardour/option_editor.cc:577
msgid "Port"
msgstr "Port"
-#: gtk2_ardour/option_editor.cc:526
+#: gtk2_ardour/option_editor.cc:581
msgid "Offline"
msgstr "Offline"
-#: gtk2_ardour/option_editor.cc:530
+#: gtk2_ardour/option_editor.cc:585
msgid ""
"Trace\n"
"Input"
@@ -6142,7 +7093,7 @@ msgstr ""
"Verfolge\n"
"Eingang"
-#: gtk2_ardour/option_editor.cc:534
+#: gtk2_ardour/option_editor.cc:589
msgid ""
"Trace\n"
"Output"
@@ -6150,15 +7101,15 @@ msgstr ""
"Verfolge\n"
"Ausgang"
-#: gtk2_ardour/option_editor.cc:538
+#: gtk2_ardour/option_editor.cc:593
msgid "MTC"
msgstr "MTC"
-#: gtk2_ardour/option_editor.cc:542
+#: gtk2_ardour/option_editor.cc:597
msgid "MMC"
msgstr "MMC"
-#: gtk2_ardour/option_editor.cc:546
+#: gtk2_ardour/option_editor.cc:601
msgid ""
"MIDI Parameter\n"
"Control"
@@ -6166,40 +7117,40 @@ msgstr ""
"MIDI Parameter\n"
"Steuerung"
-#: gtk2_ardour/option_editor.cc:585
-#: gtk2_ardour/option_editor.cc:592
-#: gtk2_ardour/option_editor.cc:595
-#: gtk2_ardour/option_editor.cc:808
+#: gtk2_ardour/option_editor.cc:640
+#: gtk2_ardour/option_editor.cc:647
+#: gtk2_ardour/option_editor.cc:650
+#: gtk2_ardour/option_editor.cc:863
msgid "online"
msgstr "Online"
-#: gtk2_ardour/option_editor.cc:592
-#: gtk2_ardour/option_editor.cc:593
-#: gtk2_ardour/option_editor.cc:805
+#: gtk2_ardour/option_editor.cc:647
+#: gtk2_ardour/option_editor.cc:648
+#: gtk2_ardour/option_editor.cc:860
msgid "offline"
msgstr "Offline"
-#: gtk2_ardour/option_editor.cc:709
+#: gtk2_ardour/option_editor.cc:764
msgid "output"
msgstr "Ausgang"
-#: gtk2_ardour/option_editor.cc:880
+#: gtk2_ardour/option_editor.cc:935
msgid "Choose Click"
msgstr "Click auswählen"
-#: gtk2_ardour/option_editor.cc:902
+#: gtk2_ardour/option_editor.cc:957
msgid "Choose Click Emphasis"
msgstr "Click-Betonung auswählen"
-#: gtk2_ardour/option_editor.cc:1005
+#: gtk2_ardour/option_editor.cc:1056
msgid "Click audio file"
msgstr "Audiodatei für Click"
-#: gtk2_ardour/option_editor.cc:1011
+#: gtk2_ardour/option_editor.cc:1062
msgid "Click emphasis audiofile"
msgstr "Audiodatei für Click-Betonung"
-#: gtk2_ardour/option_editor.cc:1048
+#: gtk2_ardour/option_editor.cc:1111
msgid ""
"The auditioner is a dedicated mixer strip used\n"
"for listening to specific regions outside the context\n"
@@ -6212,130 +7163,98 @@ msgstr ""
"Dieser Bus lässt sich wie jeder andere Mixer-Kanal\n"
"verbinden."
-#: gtk2_ardour/option_editor.cc:1139
+#: gtk2_ardour/option_editor.cc:1203
msgid "Edit using"
msgstr "Bearbeiten mit"
-#: gtk2_ardour/option_editor.cc:1146
-#: gtk2_ardour/option_editor.cc:1173
+#: gtk2_ardour/option_editor.cc:1210
+#: gtk2_ardour/option_editor.cc:1237
msgid "+ button"
msgstr "und Maustaste"
-#: gtk2_ardour/option_editor.cc:1166
+#: gtk2_ardour/option_editor.cc:1230
msgid "Delete using"
msgstr "Entfernen mit"
-#: gtk2_ardour/option_editor.cc:1193
+#: gtk2_ardour/option_editor.cc:1257
msgid "Ignore snap using"
msgstr "Einrasten übergehen mit"
-#: gtk2_ardour/opts.cc:49
-msgid "Usage: "
-msgstr "Aufruf:"
-
-#: gtk2_ardour/opts.cc:50
-msgid " -v, --version Show version information\n"
-msgstr " -v, --version Versionsinformation ausgeben\n"
+#: gtk2_ardour/option_editor.cc:1274
+msgid "Keyboard layout"
+msgstr "Tastaturlayout"
-#: gtk2_ardour/opts.cc:51
-msgid " -h, --help Print this message\n"
-msgstr " -h, --help Diese Hinweise\n"
+#: gtk2_ardour/rhythm_ferret.cc:50
+msgid "Operation"
+msgstr "Aktionen"
-#: gtk2_ardour/opts.cc:52
-msgid " -b, --bindings Print all possible keyboard binding names\n"
-msgstr " -b, --bindings Alle möglichen Tastenzuweisungsnamen ausgeben\n"
-
-#: gtk2_ardour/opts.cc:53
-msgid " -c, --name name Use a specific jack client name, default is ardour\n"
-msgstr " -c, --name name Benutze spezielle JACK-Clientkennung, Standard: ardour\n"
-
-#: gtk2_ardour/opts.cc:54
-msgid " -d, --disable-plugins Disable all plugins in an existing session\n"
-msgstr ""
-
-#: gtk2_ardour/opts.cc:55
-msgid " -n, --show-splash Show splash screen\n"
-msgstr " -n, --show-splash Zeige Splashscreen\n"
-
-#: gtk2_ardour/opts.cc:56
-msgid " -m, --menus file Use \"file\" for Ardour menus\n"
-msgstr " -m, --menus file Benutze \"file\" für Ardour-Menüs\n"
-
-#: gtk2_ardour/opts.cc:57
-msgid " -N, --new session-name Create a new session from the command line\n"
-msgstr " -N, --new session-name Erstelle neues Projekt aus der Kommandozeile\n"
-
-#: gtk2_ardour/opts.cc:58
-msgid " -O, --no-hw-optimizations Disable h/w specific optimizations\n"
-msgstr " -O, --no-hw-optimizations Hardwarespezifische Optimierungen deaktivieren\n"
+#: gtk2_ardour/rhythm_ferret.cc:51
+msgid "Selection"
+msgstr "Auswahl"
-#: gtk2_ardour/opts.cc:59
-msgid " -S, --sync\t Draw the gui synchronously \n"
-msgstr " -S, --sync\t Zeichne die GUI synchron \n"
+#: gtk2_ardour/rhythm_ferret.cc:52
+msgid "Analysis"
+msgstr "Analyse"
-#: gtk2_ardour/opts.cc:61
-msgid " -V, --novst Do not use VST support\n"
-msgstr " -V, --novst VST-Unterstützung ausschalten\n"
+#: gtk2_ardour/rhythm_ferret.cc:55
+msgid "Set Tempo Map"
+msgstr "Tempowechsel einfügen"
-#: gtk2_ardour/opts.cc:63
-msgid " [session-name] Name of session to load\n"
-msgstr " [session-name] Name des zu ladenden Projekts\n"
+#: gtk2_ardour/rhythm_ferret.cc:56
+msgid "Conform Region"
+msgstr "Region angleichen"
-#: gtk2_ardour/opts.cc:64
-msgid " -C, --curvetest filename Curve algorithm debugger\n"
-msgstr " -C, --curvetest filename Kurvenalgorithmus debuggen\n"
+#: gtk2_ardour/rhythm_ferret.cc:57
+msgid "Mode"
+msgstr "Modus"
-#: gtk2_ardour/opts.cc:65
-msgid " -k, --keybindings filename Name of key bindings to load (default is ~/.ardour2/ardour.bindings)\n"
-msgstr " -k, --keybindings filename Dateiname für die Tastaturbelegungen (Standard: ~/.ardour2/ardour.bindings)\n"
+#: gtk2_ardour/rhythm_ferret.cc:60
+msgid "Threshold"
+msgstr "Schwellwert"
-#: gtk2_ardour/pan_automation_time_axis.cc:69
-msgid "You need to select which line to edit"
-msgstr "Sie müssen die entsprechende Automationslinie auswählen"
+#: gtk2_ardour/rhythm_ferret.cc:63
+msgid "Sensitivity"
+msgstr "Empfindlichkeit"
-#: gtk2_ardour/pan_automation_time_axis.cc:90
-msgid "add pan automation event"
-msgstr "Pan-Automationspunkt einfügen"
+#: gtk2_ardour/rhythm_ferret.cc:64
+msgid "Analyze"
+msgstr "Daten analysieren"
-#: gtk2_ardour/panner2d.cc:588
-#: gtk2_ardour/panner_ui.cc:412
-#: gtk2_ardour/plugin_ui.cc:221
-msgid "Bypass"
-msgstr "Bypass"
+#: gtk2_ardour/rhythm_ferret.cc:65
+msgid "Detection function"
+msgstr "Erkennungsfunktion"
-#: gtk2_ardour/panner_ui.cc:58
-#: gtk2_ardour/panner_ui.cc:217
-msgid "link"
-msgstr "link"
+#: gtk2_ardour/rhythm_ferret.cc:68
+msgid "Peak Threshold"
+msgstr "Laut-Schwellwert (dB)"
-#: gtk2_ardour/panner_ui.cc:69
-msgid "Pan automation mode"
-msgstr "Pan-Automationsmodus"
+#: gtk2_ardour/rhythm_ferret.cc:71
+msgid "Silent Threshold (dB)"
+msgstr "Ruhe-Schwellwert (dB)"
-#: gtk2_ardour/panner_ui.cc:70
-msgid "Pan automation type"
-msgstr "Pan-Automationstyp"
+#: gtk2_ardour/rhythm_ferret.cc:74
+msgid "Trigger gap (msecs)"
+msgstr "Mindestauslöseabstand (msec)"
-#: gtk2_ardour/panner_ui.cc:80
-msgid "panning link control"
-msgstr "Pan-Regler verbinden"
+#: gtk2_ardour/rhythm_ferret.cc:394
+msgid "split regions (rhythm ferret)"
+msgstr "Regionen teilen (rhythm ferret)"
-#: gtk2_ardour/panner_ui.cc:82
-msgid "panning link direction"
-msgstr "Richtung der Verbindung"
+#: gtk2_ardour/ardour_ui_dependents.cc:74
+msgid "Setup Editor"
+msgstr "Editor laden"
-#: gtk2_ardour/panner_ui.cc:220
-msgid "L"
-msgstr "L"
+#: gtk2_ardour/ardour_ui_dependents.cc:76
+msgid "Setup Mixer"
+msgstr "Mixer laden"
-#: gtk2_ardour/panner_ui.cc:333
-#, c-format
-msgid "panner for channel %zu"
-msgstr "Pan-Regler für Kanal %zu"
+#: gtk2_ardour/ardour_ui_dependents.cc:81
+msgid "Reload Session History"
+msgstr "Projektverlauf laden"
-#: gtk2_ardour/panner_ui.cc:422
-msgid "Reset all"
-msgstr "Alle zurücksetzen"
+#: gtk2_ardour/splash.cc:42
+msgid "Ardour loading ..."
+msgstr "Ardour startet ..."
#: gtk2_ardour/playlist_selector.cc:58
msgid "Playlists"
@@ -6345,6 +7264,11 @@ msgstr "Wiedergabelisten"
msgid "Playlists grouped by track"
msgstr "Wiedergabelisten, nach Spur gruppiert"
+#: gtk2_ardour/playlist_selector.cc:73
+#: gtk2_ardour/ardour_ui_dialogs.cc:169
+msgid "close"
+msgstr "Schließen"
+
#: gtk2_ardour/playlist_selector.cc:112
msgid "Playlist for %1"
msgstr "Wiedergabeliste für %1"
@@ -6357,925 +7281,340 @@ msgstr "Andere Spuren"
msgid "unassigned"
msgstr "nicht zugewiesen"
-#: gtk2_ardour/plugin_selector.cc:50
-#: gtk2_ardour/plugin_selector.cc:190
-msgid "Name contains"
-msgstr "Name enthält"
-
-#: gtk2_ardour/plugin_selector.cc:51
-#: gtk2_ardour/plugin_selector.cc:192
-msgid "Type contains"
-msgstr ""
-
-#: gtk2_ardour/plugin_selector.cc:52
-#: gtk2_ardour/plugin_selector.cc:194
-msgid "Author contains"
-msgstr "Autor enthält"
-
-#: gtk2_ardour/plugin_selector.cc:53
-#: gtk2_ardour/plugin_selector.cc:196
-msgid "Library contains"
-msgstr ""
-
-#: gtk2_ardour/plugin_selector.cc:58
-msgid "ardour: plugins"
-msgstr "ardour: Plugins"
-
-#: gtk2_ardour/plugin_selector.cc:70
-msgid "Available Plugins"
-msgstr "Verfügbare Plugins"
-
-#: gtk2_ardour/plugin_selector.cc:71
-msgid "Type"
-msgstr "Typ"
-
-#: gtk2_ardour/plugin_selector.cc:72
-msgid "Category"
-msgstr ""
-
-#: gtk2_ardour/plugin_selector.cc:73
-msgid "Creator"
-msgstr "Ersteller"
-
-#: gtk2_ardour/plugin_selector.cc:74
-msgid "# Inputs"
-msgstr "Eingänge"
-
-#: gtk2_ardour/plugin_selector.cc:75
-msgid "# Outputs"
-msgstr "Ausgänge"
-
-#: gtk2_ardour/plugin_selector.cc:85
-msgid "Plugins to be connected"
-msgstr "Plugins, die verbunden werden"
-
-#: gtk2_ardour/plugin_selector.cc:98
-msgid "Add a plugin to the effect list"
-msgstr "Plugin zur Effektliste hinzufügen"
-
-#: gtk2_ardour/plugin_selector.cc:102
-msgid "Remove a plugin from the effect list"
-msgstr "Plugin aus der Effektliste entfernen"
-
-#: gtk2_ardour/plugin_selector.cc:104
-msgid "Update available plugins"
-msgstr "Verfügbare Plugins auffrischen"
-
-#: gtk2_ardour/plugin_selector.cc:141
-msgid "Insert Plugin(s)"
-msgstr "Plugin(s) einfügen"
-
-#: gtk2_ardour/plugin_ui.cc:81
-msgid "Eh? LADSPA plugins don't have editors!"
-msgstr ""
-
-#: gtk2_ardour/plugin_ui.cc:85
-#: gtk2_ardour/plugin_ui.cc:141
-msgid "unknown type of editor-supplying plugin (note: no VST support in this version of ardour)"
-msgstr "Unbekannter Plugintyp (Hinweis: diese ardour-Version unterstützt keine VST-Plugins)"
-
-#: gtk2_ardour/plugin_ui.cc:241
-msgid "Plugin preset %1 not found"
-msgstr "Plugin Preset %1 nicht gefunden"
-
-#: gtk2_ardour/plugin_ui.cc:251
-msgid "Name of New Preset:"
-msgstr "Name für neue Voreinstellung:"
-
-#: gtk2_ardour/redirect_automation_line.cc:53
-msgid "redirect automation created for non-plugin"
-msgstr "Redirect-Automation für ein nicht-Plugin erstellt"
-
-#: gtk2_ardour/redirect_automation_time_axis.cc:95
-msgid "add automation event to "
-msgstr "Automationspunkt einfügen für"
-
-#: gtk2_ardour/redirect_box.cc:237
-msgid "New send"
-msgstr "Neuer Send"
-
-#: gtk2_ardour/redirect_box.cc:238
-msgid "Show send controls"
-msgstr "Zeige Send-Steuerung"
-
-#: gtk2_ardour/redirect_box.cc:413
-#: gtk2_ardour/redirect_box.cc:708
-msgid "ardour: weird plugin dialog"
-msgstr "ardour: Merkwürdiger Plugin-Dialog"
-
-#: gtk2_ardour/redirect_box.cc:420
-msgid ""
-"You attempted to add a plugin (%1).\n"
-"The plugin has %2 inputs\n"
-"but at the insertion point, there are\n"
-"%3 active signal streams.\n"
-"\n"
-"This makes no sense - you are throwing away\n"
-"part of the signal."
-msgstr ""
-"Sie möchten ein Plugin hinzufügen (%1).\n"
-"Dieses Plugin besitzt %2 Eingänge,\n"
-"doch an dieser Position existieren\n"
-"%3 aktive Signale.\n"
-"\n"
-"Das ist nicht möglich - es würden Teile\n"
-"des Signals fehlen."
-
-#: gtk2_ardour/redirect_box.cc:432
-msgid ""
-"You attempted to add a plugin (%1).\n"
-"The plugin has %2 inputs\n"
-"but at the insertion point there are\n"
-"only %3 active signal streams.\n"
-"\n"
-"This makes no sense - unless the plugin supports\n"
-"side-chain inputs. A future version of Ardour will\n"
-"support this type of configuration."
-msgstr ""
-"Sie möchten ein Plugin hinzufügen (%1).\n"
-"Dieses Plugin besitzt %2 Eingänge,\n"
-"doch an dieser Position existieren\n"
-"nur %3 aktive Signale.\n"
-"\n"
-"Das ist nicht möglich - außer, wenn dieses Plugin\n"
-"Side-Chain-Eingänge unterstützt. Dies wird in einer\n"
-"der nächsten Versionen von ardour möglich sein."
-
-#: gtk2_ardour/redirect_box.cc:445
-msgid ""
-"You attempted to add a plugin (%1).\n"
-"\n"
-"The I/O configuration doesn't make sense:\n"
-"\n"
-"The plugin has %2 inputs and %3 outputs.\n"
-"The track/bus has %4 inputs and %5 outputs.\n"
-"The insertion point, has %6 active signals.\n"
-"\n"
-"Ardour does not understand what to do in such situations.\n"
-msgstr ""
-"Sie möchten ein Plugin hinzufügen (%1).\n"
-"\n"
-"Die Ein-/Ausgangskonfiguration ist aber nicht möglich:\n"
-"\n"
-"Das Plugin besitzt %2 Eingänge und %3 Ausgänge.\n"
-"Diese Spur besitzt %4 Eingänge und %5 Ausgänge.\n"
-"An dieser Position existieren %6 aktive Signale.\n"
-"\n"
-"Ardour kann mit dieser Situation nicht umgehen.\n"
-
-#: gtk2_ardour/redirect_box.cc:542
-msgid "Pre-fader inserts, sends & plugins:"
-msgstr "Pre-Fader Inserts, Sends & Plugins:"
-
-#: gtk2_ardour/redirect_box.cc:545
-msgid "Post-fader inserts, sends & plugins:"
-msgstr "Post-Fader Inserts, Sends & Plugins:"
-
-#: gtk2_ardour/redirect_box.cc:711
-msgid ""
-"You cannot reorder this set of redirects\n"
-"in that way because the inputs and\n"
-"outputs do not work correctly."
-msgstr ""
-"Sie können diese Gruppe von Redirects\n"
-"nicht auf diese Weise verändern, denn\n"
-"die Ein-/Ausgänge arbeiten ncht korrekt."
-
-#: gtk2_ardour/redirect_box.cc:858
-msgid "rename redirect"
-msgstr "Redirect umbenennen"
-
-#: gtk2_ardour/redirect_box.cc:934
-#: gtk2_ardour/redirect_box.cc:983
-msgid ""
-"Copying the set of redirects on the clipboard failed,\n"
-"probably because the I/O configuration of the plugins\n"
-"could not match the configuration of this track."
-msgstr ""
-"Konnte diese Gruppe von Redirects nicht in die\n"
-"Zwischenablage kopieren. Wahrscheinlich passt die\n"
-"Ein-/Ausgangskonfiguration des Plugins nicht zu dieser Spur."
-
-#: gtk2_ardour/redirect_box.cc:1006
-msgid ""
-"Do you really want to remove all pre-fader redirects from this track?\n"
-"(this cannot be undone)"
-msgstr ""
-"Wollen Sie wirklich alle Pre-Fader-Redirects von dieser Spur entfernen?\n"
-"(Dies kann nicht rückgängig gemacht werden)"
-
-#: gtk2_ardour/redirect_box.cc:1009
-msgid ""
-"Do you really want to remove all post-fader redirects from this track?\n"
-"(this cannot be undone)"
-msgstr ""
-"Wollen Sie wirklich alle Post-Fader-Redirects von dieser Spur entfernen?\n"
-"(Dies kann nicht rückgängig gemacht werden)"
+#: gtk2_ardour/imageframe_time_axis.cc:285
+msgid "0.5 seconds"
+msgstr "0,5 Sekunden"
-#: gtk2_ardour/redirect_box.cc:1014
-msgid ""
-"Do you really want to remove all pre-fader redirects from this bus?\n"
-"(this cannot be undone)"
-msgstr ""
-"Wollen Sie wirklich alle Pre-Fader-Redirects von diesem Bus entfernen?\n"
-"(Dies kann nicht rückgängig gemacht werden)"
+#: gtk2_ardour/imageframe_time_axis.cc:300
+msgid "Remove Frame"
+msgstr "Frame löschen"
-#: gtk2_ardour/redirect_box.cc:1017
-msgid ""
-"Do you really want to remove all post-fader redirects from this bus?\n"
-"(this cannot be undone)"
+#: gtk2_ardour/imageframe_time_axis.cc:303
+#, fuzzy
+msgid "Image Frame"
msgstr ""
-"Wollen Sie wirklich alle Post-Fader-Redirects von diesem Bus entfernen?\n"
-"(Dies kann nicht rückgängig gemacht werden)"
-
-#: gtk2_ardour/redirect_box.cc:1023
-msgid "Yes, remove them all"
-msgstr "Ja, alle löschen"
-
-#: gtk2_ardour/redirect_box.cc:1173
-msgid "New Plugin ..."
-msgstr "Plugin einfügen..."
-
-#: gtk2_ardour/redirect_box.cc:1175
-msgid "New Insert"
-msgstr "Insert einfügen"
-
-#: gtk2_ardour/redirect_box.cc:1177
-msgid "New Send ..."
-msgstr "Send einfügen..."
-
-#: gtk2_ardour/redirect_box.cc:1202
-msgid "Activate all"
-msgstr "Alle aktivieren"
-
-#: gtk2_ardour/redirect_box.cc:1203
-msgid "Deactivate all"
-msgstr "Alle deaktivieren"
-
-#: gtk2_ardour/redirect_box.cc:1396
-msgid "%1: %2 (by %3)"
-msgstr "%1: %2 (by %3)"
-
-#: gtk2_ardour/audio_region_editor.cc:48
-msgid "NAME:"
-msgstr "Name:"
-
-#: gtk2_ardour/audio_region_editor.cc:49
-msgid "play"
-msgstr "Play"
-
-#: gtk2_ardour/audio_region_editor.cc:68
-msgid "audition this region"
-msgstr "Diese Region Vorhören"
-
-#: gtk2_ardour/audio_region_editor.cc:83
-msgid "START:"
-msgstr "Beginn:"
-
-#: gtk2_ardour/audio_region_editor.cc:85
-msgid "END:"
-msgstr "Ende:"
-
-#: gtk2_ardour/audio_region_editor.cc:87
-msgid "LENGTH:"
-msgstr "Längess:"
-
-#: gtk2_ardour/audio_region_editor.cc:123
-msgid "Region %1"
-msgstr "Region %1"
-
-#: gtk2_ardour/audio_region_editor.cc:204
-msgid "change region start position"
-msgstr "Startposition der Region ändern"
-
-#: gtk2_ardour/audio_region_editor.cc:221
-msgid "change region end position"
-msgstr "Endposition der Region ändern"
-
-#: gtk2_ardour/audio_region_editor.cc:242
-msgid "change region length"
-msgstr "Länge der Region verändern"
-
-#: gtk2_ardour/audio_region_view.cc:922
-msgid "add gain control point"
-msgstr "Lautstärkekurve bearbeiten"
-#: gtk2_ardour/route_params_ui.cc:85
-msgid "Tracks/Buses"
-msgstr "Spuren/Busse"
-
-#: gtk2_ardour/route_params_ui.cc:105
-msgid "Pre-fader Redirects"
-msgstr "Pre-Fader Redirects"
-
-#: gtk2_ardour/route_params_ui.cc:106
-msgid "Post-fader Redirects"
-msgstr "Post-Fader Redirects"
-
-#: gtk2_ardour/route_params_ui.cc:205
-msgid "route display list item for renamed route not found!"
-msgstr "Konnte Bezeichnung für umbenannten Verbindung nicht in der Liste der Verbindungen finden!"
-
-#: gtk2_ardour/route_params_ui.cc:452
-msgid "NO TRACK"
-msgstr "KEINE SPUR"
-
-#: gtk2_ardour/route_params_ui.cc:682
-#: gtk2_ardour/route_params_ui.cc:683
-msgid "No Route Selected"
-msgstr "Keine Route ausgewählt"
-
-#: gtk2_ardour/route_ui.cc:156
-msgid "mute change"
-msgstr "Mute ändern"
-
-#: gtk2_ardour/route_ui.cc:234
-#: gtk2_ardour/route_ui.cc:245
-msgid "solo change"
-msgstr "Solo ändern"
-
-#: gtk2_ardour/route_ui.cc:303
-msgid "Not connected to JACK - cannot engage record"
-msgstr "Nicht mit JACK verbunden - konnte die Aufnahme nicht starten"
-
-#: gtk2_ardour/route_ui.cc:317
-msgid "rec-enable change"
-msgstr "Aufnahmestatus ändern"
+#: gtk2_ardour/main.cc:187
+msgid "cannot create user ardour folder %1 (%2)"
+msgstr "Kann benutzerspezifischen Ardour-Ordner %1 nicht erstellen: %2"
-#: gtk2_ardour/route_ui.cc:555
-msgid "Solo-safe"
-msgstr "Solo-Safe"
-
-#: gtk2_ardour/route_ui.cc:577
-msgid "Pre Fader"
-msgstr "Pre Fader"
-
-#: gtk2_ardour/route_ui.cc:584
-msgid "Post Fader"
-msgstr "Post Fader"
-
-#: gtk2_ardour/route_ui.cc:591
-msgid "Control Outs"
-msgstr "Vorhörausgang"
-
-#: gtk2_ardour/route_ui.cc:598
-msgid "Main Outs"
-msgstr "Main Ausgänge"
-
-#: gtk2_ardour/route_ui.cc:635
-msgid "mix group solo change"
-msgstr "Mixergruppe Solo-Status ändern"
-
-#: gtk2_ardour/route_ui.cc:674
-msgid "mix group mute change"
-msgstr "Mixergruppe Mute-Status ändern"
+#: gtk2_ardour/main.cc:195
+msgid "cannot open pango.rc file %1"
+msgstr "kann die Datei pango.rc nicht öffnen %1"
-#: gtk2_ardour/route_ui.cc:691
-msgid "mix group rec-enable change"
-msgstr "Mixergruppe Aufnahmestatus ändern"
+#: gtk2_ardour/main.cc:244
+msgid "SIGPIPE received - JACK has probably died"
+msgstr "SIGPIPE empfangen - möglicherweise ist JACK abgestürzt"
-#: gtk2_ardour/route_ui.cc:709
-#: gtk2_ardour/visual_time_axis.cc:241
-msgid "ardour: color selection"
-msgstr "ardour: Farbe auswählen"
+#: gtk2_ardour/main.cc:292
+msgid "Ardour/GTK "
+msgstr "Ardour/GTK "
-#: gtk2_ardour/route_ui.cc:785
+#: gtk2_ardour/main.cc:294
msgid ""
-"Do you really want to remove track \"%1\" ?\n"
"\n"
-"You may also lose the playlist used by this track.\n"
-"(cannot be undone)"
+" (built using "
msgstr ""
-"Wollen Sie wirklich die Spur \"%1\" löschen?\n"
"\n"
-"Sie werden auch die Wiedergabeliste, die diese Spur benutzt verlieren.\n"
-"(Dies kann nicht rückgängig gemacht werden!)"
-
-#: gtk2_ardour/route_ui.cc:787
-msgid ""
-"Do you really want to remove bus \"%1\" ?\n"
-"(cannot be undone)"
-msgstr ""
-"Wollen Sie den Bus \"%1\" wirklich löschen?\n"
-"(Dies kann nicht rückgängig gemacht werden!)"
-
-#: gtk2_ardour/route_ui.cc:812
-msgid "New Name: "
-msgstr "Neuer Name: "
-
-#: gtk2_ardour/sfdb_ui.cc:81
-#, fuzzy
-msgid "programming error: unknown import mode string %1"
-msgstr "Programmierfehler: unbekanntes Fernsteuerungsmodell in ARDOUR_UI::set_remote_model: %1"
-
-#: gtk2_ardour/sfdb_ui.cc:91
-#: gtk2_ardour/sfdb_ui.cc:100
-msgid "as new tracks"
-msgstr "als neue Spuren"
-
-#: gtk2_ardour/sfdb_ui.cc:93
-msgid "to selected tracks"
-msgstr "zu ausgewählten Spuren"
-
-#: gtk2_ardour/sfdb_ui.cc:95
-msgid "to region list"
-msgstr "zur Liste der Regionen"
-
-#: gtk2_ardour/sfdb_ui.cc:97
-msgid "as new tape tracks"
-msgstr "als neue Tape-Spuren"
-
-#: gtk2_ardour/sfdb_ui.cc:109
-msgid "Auto-play"
-msgstr "Auto-Play"
-
-#: gtk2_ardour/sfdb_ui.cc:118
-#: gtk2_ardour/sfdb_ui.cc:228
-msgid "<b>Soundfile Info</b>"
-msgstr "<b>Eigenschaften der Audiodatei</b>"
-
-#: gtk2_ardour/sfdb_ui.cc:129
-msgid "Length:"
-msgstr "Länge:"
-
-#: gtk2_ardour/sfdb_ui.cc:130
-msgid "Timestamp:"
-msgstr "Zeitstempel:"
-
-#: gtk2_ardour/sfdb_ui.cc:131
-msgid "Format:"
-msgstr "Format:"
-
-#: gtk2_ardour/sfdb_ui.cc:132
-msgid "Channels:"
-msgstr "Kanäle:"
-
-#: gtk2_ardour/sfdb_ui.cc:133
-#: gtk2_ardour/sfdb_ui.cc:248
-#: gtk2_ardour/sfdb_ui.cc:253
-msgid "Sample rate:"
-msgstr "Samplerate:"
-
-#: gtk2_ardour/sfdb_ui.cc:165
-msgid "Tags:"
-msgstr "Stichworte:"
-
-#: gtk2_ardour/sfdb_ui.cc:175
-msgid "Play (double click)"
-msgstr "Wiedergabe (Doppelklick)"
-
-#: gtk2_ardour/sfdb_ui.cc:229
-#: gtk2_ardour/sfdb_ui.cc:230
-#: gtk2_ardour/sfdb_ui.cc:231
-msgid "n/a"
-msgstr ""
-
-#: gtk2_ardour/sfdb_ui.cc:306
-msgid "Could not read file: %1 (%2)."
-msgstr "Konnte Datei nicht lesen: %1 (%2)."
-
-#: gtk2_ardour/sfdb_ui.cc:326
-msgid "Could not access soundfile: "
-msgstr "Konnte auf Audiodatei nicht zugreifen: "
-
-#: gtk2_ardour/sfdb_ui.cc:372
-msgid "SoundFileBox: Could not tokenize string: "
-msgstr ""
-
-#: gtk2_ardour/sfdb_ui.cc:392
-msgid "Search"
-msgstr "Suchen"
-
-#: gtk2_ardour/sfdb_ui.cc:421
-msgid "Paths"
-msgstr "Pfade"
-
-#: gtk2_ardour/sfdb_ui.cc:425
-msgid "Browse Files"
-msgstr "Durchsuchen"
-
-#: gtk2_ardour/sfdb_ui.cc:426
-msgid "Search Tags"
-msgstr "Stichwortsuche"
-
-#: gtk2_ardour/sfdb_ui.cc:434
-msgid "Audio files"
-msgstr "Audiodateien"
-
-#: gtk2_ardour/sfdb_ui.cc:437
-msgid "All files"
-msgstr "Alle Dateien"
-
-#: gtk2_ardour/sfdb_ui.cc:598
-msgid "SoundFileBrowser: Could not tokenize string: "
-msgstr ""
-
-#: gtk2_ardour/sfdb_ui.cc:766
-#: gtk2_ardour/sfdb_ui.cc:1049
-#: gtk2_ardour/sfdb_ui.cc:1091
-msgid "one track per file"
-msgstr "eine Spur pro Datei"
-
-#: gtk2_ardour/sfdb_ui.cc:769
-#: gtk2_ardour/sfdb_ui.cc:1092
-msgid "one track per channel"
-msgstr "eine Spur pro Kanal"
-
-#: gtk2_ardour/sfdb_ui.cc:777
-#: gtk2_ardour/sfdb_ui.cc:1094
-#, fuzzy
-msgid "sequence files"
-msgstr "aufgeräumte Dateien"
-
-#: gtk2_ardour/sfdb_ui.cc:780
-#: gtk2_ardour/sfdb_ui.cc:794
-#: gtk2_ardour/sfdb_ui.cc:1098
-msgid "all files in one region"
-msgstr "alle Dateien in einer Region"
-
-#: gtk2_ardour/sfdb_ui.cc:786
-#: gtk2_ardour/sfdb_ui.cc:1096
-msgid "one region per file"
-msgstr "eine Region pro Datei"
-
-#: gtk2_ardour/sfdb_ui.cc:789
-#: gtk2_ardour/sfdb_ui.cc:1097
-msgid "one region per channel"
-msgstr "eine Region pro Kanal"
-
-#: gtk2_ardour/sfdb_ui.cc:847
-msgid ""
-"One or more of the selected files\n"
-"cannot be used by Ardour"
-msgstr ""
-"Eine oder mehrere der ausgewählten Dateien\n"
-"können nicht von Ardour benutzt werden"
-
-#: gtk2_ardour/sfdb_ui.cc:978
-msgid "Copy files to session"
-msgstr "Kopiere Dateien zum Projekt"
-
-#: gtk2_ardour/sfdb_ui.cc:994
-#: gtk2_ardour/sfdb_ui.cc:1129
-msgid "use file timestamp"
-msgstr "verwende Datei-Zeitstempel"
-
-#: gtk2_ardour/sfdb_ui.cc:995
-#: gtk2_ardour/sfdb_ui.cc:1131
-msgid "at edit point"
-msgstr "am Arbeitspunkt"
-
-#: gtk2_ardour/sfdb_ui.cc:996
-#: gtk2_ardour/sfdb_ui.cc:1133
-msgid "at playhead"
-msgstr "am Positionszeiger"
-
-#: gtk2_ardour/sfdb_ui.cc:997
-msgid "at session start"
-msgstr "am Projektanfang"
-
-#: gtk2_ardour/sfdb_ui.cc:1002
-msgid "Add files:"
-msgstr "Dateien hinzufügen:"
-
-#: gtk2_ardour/sfdb_ui.cc:1024
-msgid "Insert:"
-msgstr "Einfügen:"
-
-#: gtk2_ardour/sfdb_ui.cc:1037
-msgid "Mapping:"
-msgstr ""
-
-#: gtk2_ardour/sfdb_ui.cc:1055
-msgid "Conversion Quality:"
-msgstr "Konvertierungsqualität:"
-
-#: gtk2_ardour/sfdb_ui.cc:1067
-#: gtk2_ardour/sfdb_ui.cc:1145
-msgid "Best"
-msgstr "bestmöglich"
-
-#: gtk2_ardour/sfdb_ui.cc:1068
-#: gtk2_ardour/sfdb_ui.cc:1147
-msgid "Good"
-msgstr "gut"
-
-#: gtk2_ardour/sfdb_ui.cc:1069
-#: gtk2_ardour/sfdb_ui.cc:1149
-msgid "Quick"
-msgstr "schnell"
-
-#: gtk2_ardour/sfdb_ui.cc:1093
-msgid "merge files"
-msgstr "Dateien zusammenfügen"
-
-#: gtk2_ardour/sfdb_ui.cc:1170
-msgid "programming error: %1 (%2)"
-msgstr "Programmierfehler: %1 (%2)"
-
-#: gtk2_ardour/tempo_dialog.cc:36
-msgid "edit tempo"
-msgstr "Tempo bearbeiten"
-
-#: gtk2_ardour/tempo_dialog.cc:39
-#: gtk2_ardour/tempo_dialog.cc:59
-msgid "Beats per minute"
-msgstr "Schläge pro Minute"
-
-#: gtk2_ardour/tempo_dialog.cc:40
-msgid "BPM denominator"
-msgstr "BPM Zählzeit"
-
-#: gtk2_ardour/tempo_dialog.cc:43
-#: gtk2_ardour/tempo_dialog.cc:62
-#: gtk2_ardour/tempo_dialog.cc:257
-#: gtk2_ardour/tempo_dialog.cc:275
-msgid "Bar"
-msgstr "Takt"
-
-#: gtk2_ardour/tempo_dialog.cc:44
-#: gtk2_ardour/tempo_dialog.cc:63
-#: gtk2_ardour/tempo_dialog.cc:258
-#: gtk2_ardour/tempo_dialog.cc:276
-msgid "Beat"
-msgstr "Schlag"
-
-#: gtk2_ardour/tempo_dialog.cc:46
-#: gtk2_ardour/tempo_dialog.cc:65
-#: gtk2_ardour/tempo_dialog.cc:259
-#: gtk2_ardour/tempo_dialog.cc:277
-msgid "Location"
-msgstr "Position"
-
-#: gtk2_ardour/tempo_dialog.cc:78
-#: gtk2_ardour/tempo_dialog.cc:95
-#: gtk2_ardour/tempo_dialog.cc:290
-#: gtk2_ardour/tempo_dialog.cc:308
-msgid "whole (1)"
-msgstr "Ganze (1)"
-
-#: gtk2_ardour/tempo_dialog.cc:79
-#: gtk2_ardour/tempo_dialog.cc:97
-#: gtk2_ardour/tempo_dialog.cc:291
-#: gtk2_ardour/tempo_dialog.cc:310
-msgid "second (2)"
-msgstr "Halbe (2)"
-
-#: gtk2_ardour/tempo_dialog.cc:80
-#: gtk2_ardour/tempo_dialog.cc:99
-#: gtk2_ardour/tempo_dialog.cc:292
-#: gtk2_ardour/tempo_dialog.cc:312
-msgid "third (3)"
-msgstr "Triolen (3)"
-
-#: gtk2_ardour/tempo_dialog.cc:81
-#: gtk2_ardour/tempo_dialog.cc:101
-#: gtk2_ardour/tempo_dialog.cc:109
-#: gtk2_ardour/tempo_dialog.cc:293
-#: gtk2_ardour/tempo_dialog.cc:314
-#: gtk2_ardour/tempo_dialog.cc:322
-msgid "quarter (4)"
-msgstr "Viertel (4)"
-
-#: gtk2_ardour/tempo_dialog.cc:82
-#: gtk2_ardour/tempo_dialog.cc:103
-#: gtk2_ardour/tempo_dialog.cc:294
-#: gtk2_ardour/tempo_dialog.cc:316
-msgid "eighth (8)"
-msgstr "Achtel (8)"
-
-#: gtk2_ardour/tempo_dialog.cc:83
-#: gtk2_ardour/tempo_dialog.cc:105
-#: gtk2_ardour/tempo_dialog.cc:295
-#: gtk2_ardour/tempo_dialog.cc:318
-msgid "sixteenth (16)"
-msgstr "Sechzehntel (16)"
-
-#: gtk2_ardour/tempo_dialog.cc:84
-#: gtk2_ardour/tempo_dialog.cc:107
-#: gtk2_ardour/tempo_dialog.cc:296
-#: gtk2_ardour/tempo_dialog.cc:320
-msgid "thirty-second (32)"
-msgstr "Zweiunddreissigstel (32)"
-
-#: gtk2_ardour/tempo_dialog.cc:225
-#: gtk2_ardour/tempo_dialog.cc:479
-msgid "garbaged note type entry (%1)"
-msgstr "Fehlerhafter Notentyp (%1)"
-
-#: gtk2_ardour/tempo_dialog.cc:235
-#: gtk2_ardour/tempo_dialog.cc:489
-msgid "incomprehensible note type entry (%1)"
-msgstr "Unverständlicher Notentyp (%1)"
-
-#: gtk2_ardour/tempo_dialog.cc:253
-#: gtk2_ardour/tempo_dialog.cc:271
-msgid "Meter denominator"
-msgstr "Takteinteilung"
-
-#: gtk2_ardour/tempo_dialog.cc:254
-#: gtk2_ardour/tempo_dialog.cc:272
-msgid "Beats per bar"
-msgstr "Schläge pro Takt"
-
-#: gtk2_ardour/tempo_dialog.cc:303
-#, fuzzy
-msgid "thirtq-second (32)"
-msgstr "Zweiunddreissigstel (32)"
-
-#: gtk2_ardour/theme_manager.cc:51
-msgid "Object"
-msgstr ""
-
-#: gtk2_ardour/theme_manager.cc:182
-msgid "Unable to find UI style file %1. Ardour will look strange"
-msgstr "Kann die UI-Style Datei %1 nicht finden. Ardour wird merkwürdig aussehen."
-
-#: gtk2_ardour/time_axis_view.cc:111
-msgid "gTortnam"
-msgstr ""
+" (kompiliert mit Version "
-#: gtk2_ardour/time_axis_view.cc:589
-msgid "Largest"
-msgstr "Am größten"
+#: gtk2_ardour/main.cc:297
+msgid " and GCC version "
+msgstr " und GCC Version"
-#: gtk2_ardour/time_axis_view.cc:590
-msgid "Large"
-msgstr "Groß"
+#: gtk2_ardour/main.cc:307
+msgid "Copyright (C) 1999-2008 Paul Davis"
+msgstr "Copyright (C) 1999-2008 Paul Davis"
-#: gtk2_ardour/time_axis_view.cc:591
-msgid "Larger"
-msgstr "Größer"
+#: gtk2_ardour/main.cc:308
+msgid "Some portions Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel Baker"
+msgstr "Einige Teile Copyright (C) Steve Harris, Ari Johnson, Brett Viren, Joel Baker"
-#: gtk2_ardour/time_axis_view.cc:593
-msgid "Smaller"
-msgstr "Kleiner"
+#: gtk2_ardour/main.cc:310
+msgid "Ardour comes with ABSOLUTELY NO WARRANTY"
+msgstr "Ardour wird Ihnen ohne jegliche Gewährleistung und ausdrücklich ohne die Zusicherung"
-#: gtk2_ardour/time_axis_view.cc:594
-msgid "Small"
-msgstr "Klein"
+#: gtk2_ardour/main.cc:311
+msgid "not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+msgstr "für allgemeine oder spezielle Gebrauchstauglichkeit zur Verfügung gestellt."
-#: gtk2_ardour/time_axis_view.cc:909
-msgid "unknown track height name \"%1\" in XML GUI information"
-msgstr "Unbekannte Spurhöhe \"%1\" in der XML GUI Information"
+#: gtk2_ardour/main.cc:312
+msgid "This is free software, and you are welcome to redistribute it "
+msgstr "Dies ist freie Software und Sie dürfen sie gerne weiterverbreiten,"
-#: gtk2_ardour/time_axis_view_item.cc:80
-msgid "TimeAxisViewItemName"
-msgstr ""
+#: gtk2_ardour/main.cc:313
+msgid "under certain conditions; see the source for copying conditions."
+msgstr "solange Sie sich an die Bedingungen, die in der Datei COPYING aufgeführt sind halten."
-#: gtk2_ardour/time_axis_view_item.cc:332
-msgid "new duration %1 frames is out of bounds for %2"
-msgstr "Neue Dauer %1 Frames ist außerhalb des erlaubten Bereichs %2"
+#: gtk2_ardour/main.cc:322
+msgid "Cannot install SIGPIPE error handler"
+msgstr "Kann keine Fehlerbehandlung via SIGPIPE initialisieren"
-#: gtk2_ardour/time_selection.cc:40
-msgid "programming error: request for non-existent audio range (%1)!"
-msgstr "Programmierfehler: request for non-existent audio range (%1)!"
+#: gtk2_ardour/main.cc:328
+msgid "could not create ARDOUR GUI"
+msgstr "konnte das grafische Ardour User Interface nicht erstellen"
-#: gtk2_ardour/ui_config.cc:68
+#: gtk2_ardour/ui_config.cc:78
msgid "loading default ui configuration file %1"
msgstr "lade voreingestellte UI-Konfigurationsdatei %1"
-#: gtk2_ardour/ui_config.cc:71
+#: gtk2_ardour/ui_config.cc:81
msgid "Ardour: cannot read default ui configuration file \"%1\""
msgstr "Ardour: kann die voreingestellte UI-Konfigurationsdatei \"%1\" nicht lesen"
-#: gtk2_ardour/ui_config.cc:76
+#: gtk2_ardour/ui_config.cc:86
msgid "Ardour: default ui configuration file \"%1\" not loaded successfully."
msgstr "Ardour: Die voreingestellte UI-Konfigurationsdatei \"%1\" konnte nicht geladen werden."
-#: gtk2_ardour/ui_config.cc:88
+#: gtk2_ardour/ui_config.cc:104
msgid "loading user ui configuration file %1"
msgstr "lade benutzerdefinierte UI-Konfigurationsdatei %1"
-#: gtk2_ardour/ui_config.cc:91
+#: gtk2_ardour/ui_config.cc:107
msgid "Ardour: cannot read ui configuration file \"%1\""
msgstr "Ardour: kann die UI-Konfigurationsdatei \"%1\" nicht lesen"
-#: gtk2_ardour/ui_config.cc:96
+#: gtk2_ardour/ui_config.cc:112
msgid "Ardour: user ui configuration file \"%1\" not loaded successfully."
msgstr "Ardour: Die benutzerdefinierte UI-Konfigurationsdatei \"%1\" konnte nicht geladen werden."
-#: gtk2_ardour/ui_config.cc:120
+#: gtk2_ardour/ui_config.cc:135
msgid "UI config file %1 not saved"
msgstr "UI-Konfigurationsdatei %1 nicht gespeichert."
-#: gtk2_ardour/utils.cc:132
-#: gtk2_ardour/utils.cc:175
-msgid "bad XPM header %1"
-msgstr "Fehlerhafter XPM Header %1"
-
-#: gtk2_ardour/utils.cc:314
-msgid "missing RGBA style for \"%1\""
-msgstr "Fehlender RGBA Style für \"%1\""
-
-#: gtk2_ardour/utils.cc:337
-msgid "no style found for %1, using red"
-msgstr ""
-
-#: gtk2_ardour/utils.cc:376
-msgid "unknown style attribute %1 requested for color; using \"red\""
-msgstr ""
-
-#: gtk2_ardour/utils.cc:581
-msgid "cannot find icon image for %1"
-msgstr "Konnte Icon-Bild für %1 nicht finden"
-
-#: gtk2_ardour/visual_time_axis.cc:280
-msgid ""
-"Do you really want to remove track \"%1\" ?\n"
-"(cannot be undone)"
-msgstr ""
-"Wollen Sie wirklich die Spur \"%1\" löschen?\n"
-"(Kann nicht rückgängig gemacht werden!)"
-
-#: gtk2_ardour/visual_time_axis.cc:329
-msgid "new name: "
-msgstr "Neuer Name: "
-
-#: gtk2_ardour/connection_editor.cc:50
-msgid "ardour: connections"
-msgstr "ardour: Verbindungen"
-
-#: gtk2_ardour/connection_editor.cc:51
-msgid "Input Connections"
-msgstr "Verbindungen der Eingänge"
-
-#: gtk2_ardour/connection_editor.cc:52
-msgid "Output Connections"
-msgstr "Verbindungen der Ausgänge"
-
-#: gtk2_ardour/connection_editor.cc:53
-msgid "New Input"
-msgstr "Neuer Eingang"
-
-#: gtk2_ardour/connection_editor.cc:54
-msgid "New Output"
-msgstr "Neuer Ausgang"
-
-#: gtk2_ardour/connection_editor.cc:57
-#: gtk2_ardour/connection_editor.cc:100
-msgid "Add Port"
-msgstr "Port hinzufügen"
-
-#: gtk2_ardour/connection_editor.cc:105
-msgid "Available Ports"
-msgstr "Verfügbare Verbindungen"
-
-#: gtk2_ardour/connection_editor.cc:500
-msgid "Connection \""
-msgstr "Verbindung \""
-
-#: gtk2_ardour/connection_editor.cc:502
-msgid "\""
-msgstr ""
-
-#: gtk2_ardour/connection_editor.cc:531
-#, c-format
-msgid "in %d"
-msgstr "In %d"
-
-#: gtk2_ardour/connection_editor.cc:533
-#, c-format
-msgid "out %d"
-msgstr "Out %d"
-
-#: gtk2_ardour/connection_editor.cc:657
-msgid "Name for new connection:"
-msgstr "Name für neue Verbindung:"
-
-#: gtk2_ardour/analysis_window.cc:45
-msgid "analysis window"
-msgstr "Analysefenster"
-
-#: gtk2_ardour/analysis_window.cc:47
-msgid "Signal source"
-msgstr "Signalquelle"
-
-#: gtk2_ardour/analysis_window.cc:48
-msgid "Selected ranges"
-msgstr "Ausgewählte Bereiche"
-
-#: gtk2_ardour/analysis_window.cc:49
-msgid "Selected regions"
-msgstr "Ausgewählte Regionen"
+#: gtk2_ardour/actions.cc:80
+#: gtk2_ardour/actions.cc:81
+msgid "badly formatted UI definition file: %1"
+msgstr "die UI Definitionsdatei %1 ist falsch formatiert"
-#: gtk2_ardour/analysis_window.cc:51
-msgid "Display model"
-msgstr "Anzeigetyp"
+#: gtk2_ardour/actions.cc:83
+msgid "Ardour menu definition file not found"
+msgstr "Konnte die Ardour Menü-Definition nicht finden"
-#: gtk2_ardour/analysis_window.cc:52
-msgid "Composite graphs for each track"
-msgstr "Graphen für jede Spur einzeln"
+#: gtk2_ardour/actions.cc:87
+msgid "ardour will not work without a valid ardour.menus file"
+msgstr "Ardour benötigt eine gültige ardour.menus Datei"
-#: gtk2_ardour/analysis_window.cc:53
-msgid "Composite graph of all tracks"
-msgstr "Graphen aller Spuren zusammenfassen"
+#: gtk2_ardour/actions.cc:325
+msgid "programmer error: %1 %2"
+msgstr "Programmierfehler: %1 %2"
-#: gtk2_ardour/analysis_window.cc:62
-msgid "Track"
-msgstr "Spur"
+#: gtk2_ardour/actions.cc:344
+msgid "Unknown action name: %1"
+msgstr "Unbekannte Aktionsbezeichnung: %1"
-#: gtk2_ardour/analysis_window.cc:130
-msgid "Analyze data"
-msgstr "Daten analysieren"
+#~ msgid "Paul Davis"
+#~ msgstr "Paul Davis"
+#~ msgid "Jesse Chappell"
+#~ msgstr "Jesse Chappell"
+#~ msgid "Taybin Rutkin"
+#~ msgstr "Taybin Rutkin"
+#~ msgid "Marcus Andersson"
+#~ msgstr "Marcus Andersson"
+#~ msgid "Jeremy Hall"
+#~ msgstr "Jeremy Hall"
+#~ msgid "Steve Harris"
+#~ msgstr "Steve Harris"
+#~ msgid "Tim Mayberry"
+#~ msgstr "Tim Mayberry"
+#~ msgid "Mark Stewart"
+#~ msgstr "Mark Stewart"
+#~ msgid "Sam Chessman"
+#~ msgstr "Sam Chessman"
+#~ msgid "Jack O'Quin"
+#~ msgstr "Jack O'Quin"
+#~ msgid "Matt Krai"
+#~ msgstr "Matt Krai"
+#~ msgid "Ben Bell"
+#~ msgstr "Ben Bell"
+#~ msgid "Gerard van Dongen"
+#~ msgstr "Gerard van Dongen"
+#~ msgid "Thomas Charbonnel"
+#~ msgstr "Thomas Charbonnel"
+#~ msgid "Nick Mainsbridge"
+#~ msgstr "Nick Mainsbridge"
+#~ msgid "Colin Law"
+#~ msgstr "Colin Law"
+#~ msgid "Sampo Savolainen"
+#~ msgstr "Sampo Savolainen"
+#~ msgid "Joshua Leach"
+#~ msgstr "Joshua Leach"
+#~ msgid "Rob Holland"
+#~ msgstr "Rob Holland"
+#~ msgid "Per Sigmond"
+#~ msgstr "Per Sigmond"
+#~ msgid "Doug Mclain"
+#~ msgstr "Doug Mclain"
+#~ msgid "Petter Sundlöf"
+#~ msgstr "Petter Sundlöf"
+#~ msgid "Thorsten Wilms"
+#~ msgstr "Thorsten Wilms"
+#~ msgid "Ben Loftis"
+#~ msgstr "Ben Loftis"
+#~ msgid "Stefan Kersten"
+#~ msgstr "Stefan Kersten"
+#~ msgid "Christopher George"
+#~ msgstr "Christopher George"
+#~ msgid "Robert Jordens"
+#~ msgstr "Robert Jordens"
+#~ msgid "Dave Robillard"
+#~ msgstr "Dave Robillard"
+#~ msgid "Hans Fugal"
+#~ msgstr "Hans Fugal"
+#~ msgid "Brian Ahr"
+#~ msgstr "Brian Ahr"
+#~ msgid "Nimal Ratnayake"
+#~ msgstr "Nimal Ratnayake"
+#~ msgid "Mike Täht"
+#~ msgstr "Mike Täht"
+#~ msgid "John Anderson"
+#~ msgstr "John Anderson"
+#~ msgid "Nedko Arnaudov"
+#~ msgstr "Nedko Arnaudov"
+#~ msgid "Carl Hetherington"
+#~ msgstr "Carl Hetherington"
+#~ msgid ""
+#~ "French:\n"
+#~ "\tAlain Fréhel <alain.frehel@free.fr>\n"
+#~ "\tChristophe Combelles <ccomb@free.fr>\n"
+#~ msgstr ""
+#~ "French:\n"
+#~ "\tAlain Fréhel <alain.frehel@free.fr>\n"
+#~ "\tChristophe Combelles <ccomb@free.fr>\n"
+#~ msgid ""
+#~ "German:\n"
+#~ "\tKarsten Petersen <kapet@kapet.de>\n"
+#~ "\tSebastian Arnold <mail@sebastian-arnold.net>\n"
+#~ msgstr ""
+#~ "Deutsch:\n"
+#~ "\tKarsten Petersen <kapet@kapet.de>\n"
+#~ "\tSebastian Arnold <mail@sebastian-arnold.net>\n"
+#~ msgid ""
+#~ "Italian:\n"
+#~ "\tFilippo Pappalardo <filippo@email.it>\n"
+#~ msgstr ""
+#~ "Italian:\n"
+#~ "\tFilippo Pappalardo <filippo@email.it>\n"
+#~ msgid ""
+#~ "Portuguese:\n"
+#~ "\tRui Nuno Capela <rncbc@rncbc.org>\n"
+#~ msgstr ""
+#~ "Portuguese:\n"
+#~ "\tRui Nuno Capela <rncbc@rncbc.org>\n"
+#~ msgid ""
+#~ "Brazilian Portuguese:\n"
+#~ "\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
+#~ "\tChris Ross <chris@tebibyte.org>\n"
+#~ msgstr ""
+#~ "Brazilian Portuguese:\n"
+#~ "\tAlexander da Franca Fernandes <alexander@nautae.eti.br>\n"
+#~ "\tChris Ross <chris@tebibyte.org>\n"
+#~ msgid ""
+#~ "Spanish:\n"
+#~ "\t Alex Krohn <alexkrohn@fastmail.fm>\n"
+#~ msgstr ""
+#~ "Spanish:\n"
+#~ "\t Alex Krohn <alexkrohn@fastmail.fm>\n"
+#~ msgid ""
+#~ "Russian:\n"
+#~ "\t Igor Blinov <pitstop@nm.ru>\n"
+#~ msgstr ""
+#~ "Russian:\n"
+#~ "\t Igor Blinov <pitstop@nm.ru>\n"
+#~ msgid ""
+#~ "Greek:\n"
+#~ "\t Klearchos Gourgourinis <muadib@in.gr>\n"
+#~ msgstr ""
+#~ "Greek:\n"
+#~ "\t Klearchos Gourgourinis <muadib@in.gr>\n"
+#~ msgid "3 Channels"
+#~ msgstr "3 Kanäle"
+#~ msgid "4 Channels"
+#~ msgstr "4 Kanäle"
+#~ msgid "6 Channels"
+#~ msgstr "6 Kanäle"
+#~ msgid "8 Channels"
+#~ msgstr "8 Kanäle"
+#~ msgid "Manual Setup"
+#~ msgstr "Manuell"
+#~ msgid "Could not find command line session \"%1\""
+#~ msgstr "Konnte das per Kommandozeile übergebene Projekt nicht laden: \"%1\""
+#~ msgid ""
+#~ "\n"
+#~ "\n"
+#~ "No session named \"%1\" exists.\n"
+#~ "To create it from the command line, start ardour as:\n"
+#~ " ardour --new %1"
+#~ msgstr ""
+#~ "\n"
+#~ "\n"
+#~ "Es existiert kein Projekt mit dem Namen \"%1\".\n"
+#~ "Um es von der Kommandozeile aus zu erstellen, starten Sie ardour mit:\n"
+#~ " ardour --new %1"
+#~ msgid "Ardour cannot understand \"%1\" as a session name"
+#~ msgstr "Ardour kann \"%1\" nicht als Projektnamen benutzen"
+#~ msgid "KeyMouse Actions"
+#~ msgstr "Tastatur/Maus-Befehle"
+#~ msgid "Header"
+#~ msgstr "Header"
+#~ msgid "Data"
+#~ msgstr "Datenformat"
+#~ msgid "Software monitoring"
+#~ msgstr "Software Monitoring"
+#~ msgid "External monitoring"
+#~ msgstr "Externes Monitoring"
+#~ msgid "Analyze region"
+#~ msgstr "Analysiere Region"
+#~ msgid "Analyze range"
+#~ msgstr "Bereich analysieren"
+#~ msgid "Bounce range"
+#~ msgstr "Bereich Bouncen"
+#~ msgid "Duplicate how many times?"
+#~ msgstr "Wie häufig duplizieren?"
+#~ msgid "to Center"
+#~ msgstr "zur Mitte"
+#~ msgid "to Playhead"
+#~ msgstr "zum Positionszeiger"
+#~ msgid "Set Edit Point"
+#~ msgstr "Arbeitspunkt setzen"
+#~ msgid "Reverse Region"
+#~ msgstr "Rückwärts"
+#~ msgid "Add Existing Audio"
+#~ msgstr "Audio importieren"
+#~ msgid "Add External Audio"
+#~ msgstr "Audio importieren..."
+#~ msgid ""
+#~ " This is destructive, will possibly delete audio files\n"
+#~ "It cannot be undone\n"
+#~ "Do you really want to destroy %1 ?"
+#~ msgstr ""
+#~ " Diese Aktion ist destruktiv und löscht möglicherweise Audiodateien\n"
+#~ "Dies kann nicht rückgängig gemacht werden\n"
+#~ "Wollen Sie %1 wirklich löschen ?"
+#~ msgid "these regions"
+#~ msgstr "diese Region"
+#~ msgid "this region"
+#~ msgstr "diese Region"
+#~ msgid "Yes, destroy them."
+#~ msgstr "Ja, entfernen."
+#~ msgid "cannot set loop: no region selected"
+#~ msgstr "Kann keine Schleife erstellen: keine Region ausgewählt"
+#~ msgid "editor"
+#~ msgstr "Editor"
+#~ msgid "best"
+#~ msgstr "bestmöglich"
+#~ msgid "Shaped Noise"
+#~ msgstr "Shaped Noise"
+#~ msgid "stereo"
+#~ msgstr "Stereo"
+#~ msgid "CUE"
+#~ msgstr "CUE"
+#~ msgid "WAV"
+#~ msgstr "WAV"
+#~ msgid "Binding"
+#~ msgstr "Zugewiesene Taste"
+#~ msgid "Set"
+#~ msgstr "Setzen"
+#~ msgid "BPM denominator"
+#~ msgstr "BPM Zählzeit"
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index 88bd7d0b15..fe648352d0 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -120,7 +120,7 @@ ProcessorBox::ProcessorBox (Placement pcmnt, Session& sess, PluginSelector &plug
processor_display.get_column(0)->set_sizing(TREE_VIEW_COLUMN_FIXED);
processor_display.get_column(0)->set_fixed_width(48);
processor_display.add_object_drag (columns.processor.index(), "processors");
- processor_display.signal_object_drop.connect (mem_fun (*this, &ProcessorBox::object_drop));
+ processor_display.signal_drop.connect (mem_fun (*this, &ProcessorBox::object_drop));
TreeViewColumn* name_col = processor_display.get_column(0);
CellRendererText* renderer = dynamic_cast<CellRendererText*>(processor_display.get_column_cell_renderer (0));
@@ -167,22 +167,11 @@ ProcessorBox::route_going_away ()
no_processor_redisplay = true;
}
+
void
-ProcessorBox::object_drop (string type, uint32_t cnt, const boost::shared_ptr<Processor>* ptr)
+ProcessorBox::object_drop (const list<boost::shared_ptr<Processor> >& procs)
{
- if (type != "processors" || cnt == 0 || !ptr) {
- return;
- }
-
- /* do something with the dropped processors */
-
- list<boost::shared_ptr<Processor> > processors;
-
- for (uint32_t n = 0; n < cnt; ++n) {
- processors.push_back (ptr[n]);
- }
-
- paste_processor_list (processors);
+ paste_processor_list (procs);
}
void
@@ -310,7 +299,13 @@ ProcessorBox::processor_button_press_event (GdkEventButton *ev)
// this is purely informational but necessary
ProcessorSelected (processor); // emit
+
+ } else if (!processor && ev->button == 1 && ev->type == GDK_2BUTTON_PRESS) {
+
+ choose_plugin ();
+ _plugin_selector.show_manager ();
}
+
return ret;
}
@@ -343,7 +338,7 @@ ProcessorBox::processor_button_release_event (GdkEventButton *ev)
show_processor_menu(ev->time);
ret = true;
- } else if (processor && (ev->button == 2) && (Keyboard::no_modifier_keys_pressed (ev) && ((ev->state & Gdk::BUTTON2_MASK) == Gdk::BUTTON2_MASK))) {
+ } else if (processor && Keyboard::is_button2_event (ev) && (Keyboard::no_modifier_keys_pressed (ev) && ((ev->state & Gdk::BUTTON2_MASK) == Gdk::BUTTON2_MASK))) {
/* button2-click with no modifiers */
@@ -399,6 +394,10 @@ ProcessorBox::use_plugins (const SelectedPlugins& plugins)
boost::shared_ptr<Processor> processor (new PluginInsert (_session, *p, _placement));
Route::ProcessorStreams err_streams;
+
+ if (Config->get_new_plugins_active()) {
+ processor->set_active (true);
+ }
if (_route->add_processor (processor, &err_streams)) {
weird_plugin_dialog (**p, err_streams, _route);
@@ -538,6 +537,9 @@ ProcessorBox::send_io_finished (IOSelector::Result r, boost::weak_ptr<Processor>
case IOSelector::Accepted:
_route->add_processor (processor);
+ if (Profile->get_sae()) {
+ processor->set_active (true);
+ }
break;
}
@@ -775,9 +777,10 @@ ProcessorBox::cut_processors ()
no_processor_redisplay = true;
for (vector<boost::shared_ptr<Processor> >::iterator i = to_be_removed.begin(); i != to_be_removed.end(); ++i) {
- // Do not cut inserts or sends
+ // Do not cut inserts
+ if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0 ||
+ (boost::dynamic_pointer_cast<Send>((*i)) != 0)) {
- if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0) {
void* gui = (*i)->get_gui ();
if (gui) {
@@ -814,8 +817,9 @@ ProcessorBox::copy_processors ()
}
for (vector<boost::shared_ptr<Processor> >::iterator i = to_be_copied.begin(); i != to_be_copied.end(); ++i) {
- // Do not copy processors or sends
- if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0) {
+ // Do not copy inserts
+ if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0 ||
+ (boost::dynamic_pointer_cast<Send>((*i)) != 0)) {
node->add_child_nocopy ((*i)->get_state());
}
}
@@ -905,11 +909,11 @@ ProcessorBox::paste_processors ()
}
void
-ProcessorBox::paste_processor_list (list<boost::shared_ptr<Processor> >& processors)
+ProcessorBox::paste_processor_list (const list<boost::shared_ptr<Processor> >& processors)
{
list<boost::shared_ptr<Processor> > copies;
- for (list<boost::shared_ptr<Processor> >::iterator i = processors.begin(); i != processors.end(); ++i) {
+ for (list<boost::shared_ptr<Processor> >::const_iterator i = processors.begin(); i != processors.end(); ++i) {
boost::shared_ptr<Processor> copy = Processor::clone (*i);
diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h
index 74d781a0d4..92a301633a 100644
--- a/gtk2_ardour/processor_box.h
+++ b/gtk2_ardour/processor_box.h
@@ -126,7 +126,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject
Gtkmm2ext::DnDTreeView<boost::shared_ptr<ARDOUR::Processor> > processor_display;
Gtk::ScrolledWindow processor_scroller;
- void object_drop (std::string type, uint32_t cnt, const boost::shared_ptr<ARDOUR::Processor>*);
+ void object_drop (const std::list<boost::shared_ptr<ARDOUR::Processor> >&);
Width _width;
@@ -186,7 +186,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject
void get_selected_processors (vector<boost::shared_ptr<ARDOUR::Processor> >&);
static Glib::RefPtr<Gtk::Action> paste_action;
- void paste_processor_list (std::list<boost::shared_ptr<ARDOUR::Processor> >& processors);
+ void paste_processor_list (const std::list<boost::shared_ptr<ARDOUR::Processor> >& processors);
void paste_processor_state (const XMLNode&);
void activate_processor (boost::shared_ptr<ARDOUR::Processor>);
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index 253c033eb8..0af92a592a 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -244,6 +244,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
/** @return true if the playhead is currently being dragged, otherwise false */
virtual bool dragging_playhead () const = 0;
+ virtual double get_physical_screen_width() const = 0;
virtual void ensure_float (Gtk::Window&) = 0;
virtual void show_window () = 0;
virtual TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0) = 0;
@@ -336,6 +337,8 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
virtual gdouble get_trackview_group_vertical_offset () const = 0;
+ virtual gdouble get_canvas_timebars_vsize () const = 0;
+ virtual ArdourCanvas::Group* get_background_group () const = 0;
virtual ArdourCanvas::Group* get_trackview_group () const = 0;
/// Singleton instance, set up by Editor::Editor()
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index a36a6bc35a..8e462c984e 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -136,6 +136,13 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
visual_button.set_name ("TrackVisualButton");
hide_button.set_name ("TrackRemoveButton");
+ edit_group_button.unset_flags (Gtk::CAN_FOCUS);
+ playlist_button.unset_flags (Gtk::CAN_FOCUS);
+ automation_button.unset_flags (Gtk::CAN_FOCUS);
+ size_button.unset_flags (Gtk::CAN_FOCUS);
+ visual_button.unset_flags (Gtk::CAN_FOCUS);
+ hide_button.unset_flags (Gtk::CAN_FOCUS);
+
hide_button.add (*(manage (new Image (::get_icon("hide")))));
hide_button.show_all ();
@@ -147,9 +154,9 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session& sess, boost::sh
hide_button.signal_clicked().connect (mem_fun(*this, &RouteTimeAxisView::hide_click));
solo_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::solo_press), false);
- solo_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::solo_release));
+ solo_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::solo_release), false);
mute_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::mute_press), false);
- mute_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::mute_release));
+ mute_button->signal_button_release_event().connect (mem_fun(*this, &RouteUI::mute_release), false);
if (is_track()) {
@@ -502,11 +509,10 @@ RouteTimeAxisView::build_display_menu ()
items.push_back (SeparatorElem());
- build_remote_control_menu ();
- build_automation_action_menu ();
-
if (!Profile->get_sae()) {
+ build_remote_control_menu ();
items.push_back (MenuElem (_("Remote Control ID"), *remote_control_menu));
+ build_automation_action_menu ();
items.push_back (MenuElem (_("Automation"), *automation_action_menu));
items.push_back (SeparatorElem());
}
@@ -586,7 +592,12 @@ RouteTimeAxisView::build_display_menu ()
items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Hide"), mem_fun(*this, &RouteTimeAxisView::hide_click)));
- items.push_back (MenuElem (_("Remove"), mem_fun(*this, &RouteUI::remove_this_route)));
+ if (!Profile->get_sae()) {
+ items.push_back (MenuElem (_("Remove"), mem_fun(*this, &RouteUI::remove_this_route)));
+ } else {
+ items.push_front (SeparatorElem());
+ items.push_front (MenuElem (_("Delete"), mem_fun(*this, &RouteUI::remove_this_route)));
+ }
}
static bool __reset_item (RadioMenuItem* item)
@@ -824,6 +835,18 @@ RouteTimeAxisView::set_height (uint32_t h)
} else {
+
+ /* don't allow name_entry to be hidden while
+ it has focus, otherwise the GUI becomes unusable.
+ */
+
+ if (name_entry.has_focus()) {
+ if (name_entry.get_text() != _route->name()) {
+ name_entry_changed ();
+ }
+ controls_ebox.grab_focus ();
+ }
+
hide_name_entry ();
show_name_label ();
@@ -2054,6 +2077,7 @@ RouteTimeAxisView::processor_menu_item_toggled (RouteTimeAxisView::ProcessorAuto
if (showit) {
pan->view->set_marked_for_display (true);
pan->view->canvas_display->show();
+ pan->view->canvas_background->show();
} else {
rai->processor->mark_automation_visible (pan->what, true);
pan->view->set_marked_for_display (false);
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index 26c99488cc..c53e205b49 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -23,6 +23,7 @@
#include <gtkmm2ext/doi.h>
#include <gtkmm2ext/bindable_button.h>
#include <gtkmm2ext/barcontroller.h>
+#include <gtkmm2ext/gtk_ui.h>
#include <ardour/route_group.h>
#include <pbd/memento_command.h>
@@ -46,6 +47,7 @@
#include <ardour/audio_diskstream.h>
#include <ardour/midi_track.h>
#include <ardour/midi_diskstream.h>
+#include <ardour/profile.h>
#include "i18n.h"
using namespace sigc;
@@ -92,19 +94,24 @@ RouteUI::init ()
was_solo_safe = false;
polarity_menu_item = 0;
denormal_menu_item = 0;
+ multiple_mute_change = false;
+ multiple_solo_change = false;
mute_button = manage (new BindableToggleButton (""));
mute_button->set_self_managed (true);
mute_button->set_name ("MuteButton");
+ UI::instance()->set_tip (mute_button, _("Mute this track"), "");
solo_button = manage (new BindableToggleButton (""));
solo_button->set_self_managed (true);
solo_button->set_name ("SoloButton");
+ UI::instance()->set_tip (solo_button, _("Mute other (non-soloed) tracks"), "");
rec_enable_button = manage (new BindableToggleButton (""));
rec_enable_button->set_name ("RecordEnableButton");
rec_enable_button->set_self_managed (true);
-
+ UI::instance()->set_tip (rec_enable_button, _("Enable recording on this track"), "");
+
_session.SoloChanged.connect (mem_fun(*this, &RouteUI::solo_changed_so_update_mute));
}
@@ -123,11 +130,6 @@ RouteUI::reset ()
mute_menu = 0;
}
- if (remote_control_menu) {
- delete remote_control_menu;
- remote_control_menu = 0;
- }
-
if (xml_node) {
/* do not delete the node - its owned by the route */
xml_node = 0;
@@ -207,10 +209,10 @@ RouteUI::set_route (boost::shared_ptr<Route> rp)
bool
RouteUI::mute_press(GdkEventButton* ev)
{
- if (ev->type == GDK_2BUTTON_PRESS) {
+ if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS ) {
return true;
}
-
+ multiple_mute_change = false;
if (!ignore_toggle) {
if (Keyboard::is_context_menu_event (ev)) {
@@ -223,7 +225,7 @@ RouteUI::mute_press(GdkEventButton* ev)
} else {
- if (ev->button == 2) {
+ if (Keyboard::is_button2_event (ev)) {
// Primary-button2 click is the midi binding click
// button2-click is "momentary"
@@ -234,7 +236,7 @@ RouteUI::mute_press(GdkEventButton* ev)
}
}
- if (ev->button == 1 || ev->button == 2) {
+ if (ev->button == 1 || Keyboard::is_button2_event (ev)) {
if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
@@ -246,6 +248,7 @@ RouteUI::mute_press(GdkEventButton* ev)
cmd->mark();
_session.add_command(cmd);
_session.commit_reversible_command ();
+ multiple_mute_change = true;
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
@@ -260,8 +263,11 @@ RouteUI::mute_press(GdkEventButton* ev)
} else {
/* plain click applies change to this route */
-
- reversibly_apply_route_boolean ("mute change", &Route::set_mute, !_route->muted(), this);
+ if (wait_for_release) {
+ _route->set_mute (!_route->muted(), this);
+ } else {
+ reversibly_apply_route_boolean ("mute change", &Route::set_mute, !_route->muted(), this);
+ }
}
}
}
@@ -277,9 +283,14 @@ RouteUI::mute_release(GdkEventButton* ev)
if (!ignore_toggle) {
if (wait_for_release){
wait_for_release = false;
- // undo the last op
- // because the press was the last undoable thing we did
- _session.undo (1U);
+ if (multiple_mute_change) {
+ multiple_mute_change = false;
+ // undo the last op
+ // because the press was the last undoable thing we did
+ _session.undo (1U);
+ } else {
+ _route->set_mute (!_route->muted(), this);
+ }
}
}
return true;
@@ -288,16 +299,16 @@ RouteUI::mute_release(GdkEventButton* ev)
bool
RouteUI::solo_press(GdkEventButton* ev)
{
- /* ignore double clicks */
+ /* ignore double/triple clicks */
- if (ev->type == GDK_2BUTTON_PRESS) {
+ if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS ) {
return true;
}
-
+ multiple_solo_change = false;
if (!ignore_toggle) {
if (Keyboard::is_context_menu_event (ev)) {
-
+
if (solo_menu == 0) {
build_solo_menu ();
}
@@ -306,7 +317,7 @@ RouteUI::solo_press(GdkEventButton* ev)
} else {
- if (ev->button == 2) {
+ if (Keyboard::is_button2_event (ev)) {
// Primary-button2 click is the midi binding click
// button2-click is "momentary"
@@ -318,18 +329,31 @@ RouteUI::solo_press(GdkEventButton* ev)
}
}
- if (ev->button == 1 || ev->button == 2) {
+ if (ev->button == 1 || Keyboard::is_button2_event (ev)) {
if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
/* Primary-Tertiary-click applies change to all routes */
-
+ bool was_not_latched = false;
+ if (!Config->get_solo_latched ()) {
+ was_not_latched = true;
+ /*
+ XXX it makes no sense to solo all tracks if we're
+ not in latched mode, but doing nothing feels like a bug,
+ so do it anyway
+ */
+ Config->set_solo_latched (true);
+ }
_session.begin_reversible_command (_("solo change"));
Session::GlobalSoloStateCommand *cmd = new Session::GlobalSoloStateCommand(_session, this);
_session.set_all_solo (!_route->soloed());
cmd->mark();
_session.add_command (cmd);
_session.commit_reversible_command ();
+ multiple_solo_change = true;
+ if (was_not_latched) {
+ Config->set_solo_latched (false);
+ }
} else if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
@@ -347,8 +371,17 @@ RouteUI::solo_press(GdkEventButton* ev)
// shift-click: set this route to solo safe
- _route->set_solo_safe (!_route->solo_safe(), this);
- wait_for_release = false;
+ if (Profile->get_sae() && ev->button == 1) {
+ // button 1 and shift-click: disables solo_latched for this click
+ if (!Config->get_solo_latched ()) {
+ Config->set_solo_latched (true);
+ reversibly_apply_route_boolean ("solo change", &Route::set_solo, !_route->soloed(), this);
+ Config->set_solo_latched (false);
+ }
+ } else {
+ _route->set_solo_safe (!_route->solo_safe(), this);
+ wait_for_release = false;
+ }
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
@@ -363,7 +396,11 @@ RouteUI::solo_press(GdkEventButton* ev)
} else {
/* click: solo this route */
- reversibly_apply_route_boolean ("solo change", &Route::set_solo, !_route->soloed(), this);
+ if (wait_for_release) {
+ _route->set_solo (!_route->soloed(), this);
+ } else {
+ reversibly_apply_route_boolean ("solo change", &Route::set_solo, !_route->soloed(), this);
+ }
}
}
}
@@ -378,10 +415,16 @@ RouteUI::solo_release(GdkEventButton* ev)
if (!ignore_toggle) {
if (wait_for_release) {
wait_for_release = false;
- // undo the last op
- // because the press was the last undoable thing we did
-
- _session.undo (1U);
+ if (multiple_solo_change) {
+ multiple_solo_change = false;
+ // undo the last op
+ // because the press was the last undoable thing we did
+ _session.undo (1U);
+ } else {
+ // we don't use "undo the last op"
+ // here because its expensive for the GUI
+ _route->set_solo (!_route->soloed(), this);
+ }
}
}
@@ -391,7 +434,7 @@ RouteUI::solo_release(GdkEventButton* ev)
bool
RouteUI::rec_enable_press(GdkEventButton* ev)
{
- if (ev->type == GDK_2BUTTON_PRESS) {
+ if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS ) {
return true;
}
@@ -403,7 +446,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
if (!ignore_toggle && is_track() && rec_enable_button) {
- if (ev->button == 2 && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
+ if (Keyboard::is_button2_event (ev) && Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
// do nothing on midi bind event
return false;
@@ -449,6 +492,7 @@ RouteUI::rec_enable_release (GdkEventButton* ev)
void
RouteUI::solo_changed(void* src)
{
+
Gtkmm2ext::UI::instance()->call_slot (mem_fun (*this, &RouteUI::update_solo_display));
}
@@ -907,7 +951,7 @@ gint
RouteUI::idle_remove_this_route (RouteUI *rui)
{
rui->_session.remove_route (rui->_route);
- return FALSE;
+ return false;
}
void
diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h
index 67aa409dda..c784b97668 100644
--- a/gtk2_ardour/route_ui.h
+++ b/gtk2_ardour/route_ui.h
@@ -76,6 +76,8 @@ class RouteUI : public virtual AxisView
bool ignore_toggle;
bool wait_for_release;
+ bool multiple_mute_change;
+ bool multiple_solo_change;
BindableToggleButton* mute_button;
BindableToggleButton* solo_button;
diff --git a/gtk2_ardour/send_ui.cc b/gtk2_ardour/send_ui.cc
index 6ce6edd303..e99ea25cbd 100644
--- a/gtk2_ardour/send_ui.cc
+++ b/gtk2_ardour/send_ui.cc
@@ -113,22 +113,20 @@ SendUI::fast_update ()
}
SendUIWindow::SendUIWindow (boost::shared_ptr<Send> s, Session& ss)
+ : ArdourDialog (string("Ardour: send ") + s->name())
{
ui = new SendUI (s, ss);
- vpacker.set_border_width (5);
-
hpacker.pack_start (*ui, true, true);
- vpacker.pack_start (hpacker);
+ get_vbox()->set_border_width (5);
+ get_vbox()->pack_start (hpacker);
- add (vpacker);
set_name ("SendUIWindow");
going_away_connection = s->GoingAway.connect (mem_fun (*this, &SendUIWindow::send_going_away));
signal_delete_event().connect (bind (ptr_fun (just_hide_it), reinterpret_cast<Window *> (this)));
-
}
SendUIWindow::~SendUIWindow ()
diff --git a/gtk2_ardour/send_ui.h b/gtk2_ardour/send_ui.h
index 5a7298c515..0d6356970e 100644
--- a/gtk2_ardour/send_ui.h
+++ b/gtk2_ardour/send_ui.h
@@ -22,6 +22,7 @@
#include "gain_meter.h"
#include "panner_ui.h"
+#include "ardour_dialog.h"
namespace ARDOUR {
class Send;
@@ -59,7 +60,7 @@ class SendUI : public Gtk::HBox
void outs_changed (ARDOUR::IOChange, void*);
};
-class SendUIWindow : public Gtk::Window
+class SendUIWindow : public ArdourDialog
{
public:
SendUIWindow(boost::shared_ptr<ARDOUR::Send>, ARDOUR::Session&);
@@ -68,7 +69,6 @@ class SendUIWindow : public Gtk::Window
SendUI* ui;
private:
- Gtk::VBox vpacker;
Gtk::HBox hpacker;
void send_going_away ();
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index 915c3c6d3c..799e74898b 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -732,7 +732,7 @@ SoundFileBrowser::found_search_clicked ()
void*
freesound_search_thread_entry (void* arg)
{
- PBD::ThreadCreated (pthread_self(), X_("Freesound Search"));
+ PBD::notify_gui_about_thread_creation (pthread_self(), X_("Freesound Search"));
static_cast<SoundFileBrowser*>(arg)->freesound_search_thread ();
diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc
index 8730c55f58..9658af06fc 100644
--- a/gtk2_ardour/streamview.cc
+++ b/gtk2_ardour/streamview.cc
@@ -48,6 +48,7 @@ using namespace Editing;
StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* group)
: _trackview (tv)
, owns_canvas_group(group == 0)
+ , _background_group(new ArdourCanvas::Group(*_trackview.canvas_background))
, canvas_group(group ? group : new ArdourCanvas::Group(*_trackview.canvas_display))
, _samples_per_unit(_trackview.editor.get_current_zoom())
, rec_updating(false)
@@ -62,10 +63,10 @@ StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* group)
{
/* set_position() will position the group */
- canvas_rect = new ArdourCanvas::SimpleRect (*canvas_group);
+ canvas_rect = new ArdourCanvas::SimpleRect (*_background_group);
canvas_rect->property_x1() = 0.0;
canvas_rect->property_y1() = 0.0;
- canvas_rect->property_x2() = _trackview.editor.frame_to_pixel (max_frames - 1);
+ canvas_rect->property_x2() = _trackview.editor.get_physical_screen_width();
canvas_rect->property_y2() = (double) tv.current_height();
canvas_rect->raise(1); // raise above tempo lines
@@ -301,10 +302,8 @@ StreamView::region_layered (RegionView* rv)
{
/* don't ever leave it at the bottom, since then it doesn't
get events - the parent group does instead ...
- we need to raise it above the streamview's
- canvas_rect, hence the layer+1 here
*/
- rv->get_canvas_group()->raise (rv->region()->layer() + 1);
+ rv->get_canvas_group()->raise (rv->region()->layer());
}
void
diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h
index 3b1b4cb12b..fe97489241 100644
--- a/gtk2_ardour/streamview.h
+++ b/gtk2_ardour/streamview.h
@@ -74,6 +74,7 @@ public:
void set_layer_display (LayerDisplay);
+ ArdourCanvas::Group* background_group() { return _background_group; }
ArdourCanvas::Group* canvas_item() { return canvas_group; }
enum ColorTarget {
@@ -128,6 +129,7 @@ protected:
RouteTimeAxisView& _trackview;
bool owns_canvas_group;
+ ArdourCanvas::Group* _background_group;
ArdourCanvas::Group* canvas_group;
ArdourCanvas::SimpleRect* canvas_rect; /* frame around the whole thing */
diff --git a/gtk2_ardour/theme_manager.cc b/gtk2_ardour/theme_manager.cc
index 9968fa9ea0..3735791eb8 100644
--- a/gtk2_ardour/theme_manager.cc
+++ b/gtk2_ardour/theme_manager.cc
@@ -31,6 +31,7 @@
#include <ardour/configuration.h>
#include <ardour/filesystem_paths.h>
+#include <ardour/profile.h>
#include "theme_manager.h"
#include "rgb_macros.h"
@@ -207,12 +208,29 @@ load_rc_file (const string& filename, bool themechange)
Gtkmm2ext::UI::instance()->load_rcfile (rc_file_path.to_string(), themechange);
}
+/* hmm, this is a problem. the profile doesn't
+ exist when the theme manager is constructed
+ and toggles buttons during "normal" GTK setup.
+
+ a better solution will be to make all Profile
+ methods static or something.
+
+ XXX FIX ME
+*/
+
+#define HACK_PROFILE_IS_SAE() (getenv("ARDOUR_SAE")!=0)
+
void
ThemeManager::on_dark_theme_button_toggled()
{
if (!dark_button.get_active()) return;
- ARDOUR_UI::config()->ui_rc_file.set("ardour3_ui_dark.rc");
+ if (HACK_PROFILE_IS_SAE()){
+ ARDOUR_UI::config()->ui_rc_file.set("ardour3_ui_dark_sae.rc");
+ } else {
+ ARDOUR_UI::config()->ui_rc_file.set("ardour3_ui_dark.rc");
+ }
+
load_rc_file (ARDOUR_UI::config()->ui_rc_file.get(), true);
}
@@ -221,7 +239,12 @@ ThemeManager::on_light_theme_button_toggled()
{
if (!light_button.get_active()) return;
- ARDOUR_UI::config()->ui_rc_file.set("ardour3_ui_light.rc");
+ if (HACK_PROFILE_IS_SAE()){
+ ARDOUR_UI::config()->ui_rc_file.set("ardour3_ui_light_sae.rc");
+ } else {
+ ARDOUR_UI::config()->ui_rc_file.set("ardour3_ui_light.rc");
+ }
+
load_rc_file (ARDOUR_UI::config()->ui_rc_file.get(), true);
}
@@ -258,9 +281,9 @@ ThemeManager::setup_theme ()
rcfile = ARDOUR_UI::config()->ui_rc_file.get();
}
- if (rcfile == "ardour3_ui_dark.rc") {
+ if (rcfile == "ardour3_ui_dark.rc" || rcfile == "ardour3_ui_dark_sae.rc") {
dark_button.set_active();
- } else if (rcfile == "ardour3_ui_light.rc") {
+ } else if (rcfile == "ardour3_ui_light.rc" || "ardour3_ui_light_sae.rc") {
light_button.set_active();
}
diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc
index 1887c6d7ea..7da878b9f3 100644
--- a/gtk2_ardour/time_axis_view.cc
+++ b/gtk2_ardour/time_axis_view.cc
@@ -1,922 +1,935 @@
-/*
- Copyright (C) 2000 Paul Davis
-
- 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 <cstdlib>
-#include <cmath>
-#include <algorithm>
-#include <string>
-#include <list>
-
-#include <libgnomecanvasmm.h>
-#include <libgnomecanvasmm/canvas.h>
-#include <libgnomecanvasmm/item.h>
-
-#include <pbd/error.h>
-
-#include <gtkmm2ext/utils.h>
-#include <gtkmm2ext/selector.h>
-#include <gtkmm2ext/stop_signal.h>
-
-#include <ardour/session.h>
-#include <ardour/utils.h>
-#include <ardour/ladspa_plugin.h>
-#include <ardour/processor.h>
-#include <ardour/location.h>
-
-#include "ardour_ui.h"
-#include "public_editor.h"
-#include "time_axis_view.h"
-#include "region_view.h"
-#include "ghostregion.h"
-#include "simplerect.h"
-#include "simpleline.h"
-#include "selection.h"
-#include "keyboard.h"
-#include "rgb_macros.h"
-#include "utils.h"
-
-#include "i18n.h"
-
-using namespace Gtk;
-using namespace Gdk;
-using namespace sigc;
-using namespace ARDOUR;
-using namespace PBD;
-using namespace Editing;
-using namespace ArdourCanvas;
-
-const double trim_handle_size = 6.0; /* pixels */
-
-uint32_t TimeAxisView::hLargest = 0;
-uint32_t TimeAxisView::hLarge = 0;
-uint32_t TimeAxisView::hLarger = 0;
-uint32_t TimeAxisView::hNormal = 0;
-uint32_t TimeAxisView::hSmaller = 0;
-uint32_t TimeAxisView::hSmall = 0;
-bool TimeAxisView::need_size_info = true;
-
-TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisView* rent, Canvas& canvas)
- : AxisView (sess),
- editor (ed),
- y_position(0),
- order(0),
- controls_table (2, 8)
-{
- if (need_size_info) {
- compute_controls_size_info ();
- need_size_info = false;
- }
-
- canvas_display = new Group (*ed.get_trackview_group (), 0.0, 0.0);
-
- ghost_group = new Group (*canvas_display);
- ghost_group->lower_to_bottom();
- ghost_group->show();
-
- selection_group = new Group (*canvas_display);
- selection_group->hide();
-
- control_parent = 0;
- display_menu = 0;
- size_menu = 0;
- _hidden = false;
- in_destructor = false;
- height = 0;
- effective_height = 0;
- parent = rent;
- _has_state = false;
- last_name_entry_key_press_event = 0;
- name_packing = NamePackingBits (0);
- resize_drag_start = -1;
-
- /*
- Create the standard LHS Controls
- We create the top-level container and name add the name label here,
- subclasses can add to the layout as required
- */
-
- name_entry.set_name ("EditorTrackNameDisplay");
- name_entry.signal_button_release_event().connect (mem_fun (*this, &TimeAxisView::name_entry_button_release));
- name_entry.signal_button_press_event().connect (mem_fun (*this, &TimeAxisView::name_entry_button_press));
- name_entry.signal_key_release_event().connect (mem_fun (*this, &TimeAxisView::name_entry_key_release));
- name_entry.signal_activate().connect (mem_fun(*this, &TimeAxisView::name_entry_activated));
- name_entry.signal_focus_in_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_in));
- name_entry.signal_focus_out_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_out));
- Gtkmm2ext::set_size_request_to_display_given_text (name_entry, N_("gTortnam"), 10, 10); // just represents a short name
-
- name_label.set_name ("TrackLabel");
- name_label.set_alignment (0.0, 0.5);
-
- /* typically, either name_label OR name_entry are visible,
- but not both. its up to derived classes to show/hide them as they
- wish.
- */
-
- name_hbox.show ();
-
- controls_table.set_border_width (2);
- controls_table.set_row_spacings (0);
- controls_table.set_col_spacings (0);
- controls_table.set_homogeneous (true);
-
- controls_table.attach (name_hbox, 0, 5, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 3, 0);
- controls_table.show_all ();
- controls_table.set_no_show_all ();
-
- resizer.set_size_request (10, 10);
- resizer.set_name ("ResizeHandle");
- resizer.signal_expose_event().connect (mem_fun (*this, &TimeAxisView::resizer_expose));
- resizer.signal_button_press_event().connect (mem_fun (*this, &TimeAxisView::resizer_button_press));
- resizer.signal_button_release_event().connect (mem_fun (*this, &TimeAxisView::resizer_button_release));
- resizer.signal_motion_notify_event().connect (mem_fun (*this, &TimeAxisView::resizer_motion));
- resizer.set_events (Gdk::BUTTON_PRESS_MASK|
- Gdk::BUTTON_RELEASE_MASK|
- Gdk::POINTER_MOTION_MASK|
- Gdk::SCROLL_MASK);
-
- resizer_box.pack_start (resizer, false, false);
- resizer.show ();
- resizer_box.show();
-
- HSeparator* separator = manage (new HSeparator());
-
- controls_vbox.pack_start (controls_table, false, false);
- controls_vbox.pack_end (*separator, false, false);
- controls_vbox.pack_end (resizer_box, false, true);
- controls_vbox.show ();
-
- //controls_ebox.set_name ("TimeAxisViewControlsBaseUnselected");
- controls_ebox.add (controls_vbox);
- controls_ebox.add_events (BUTTON_PRESS_MASK|BUTTON_RELEASE_MASK|SCROLL_MASK);
- controls_ebox.set_flags (CAN_FOCUS);
-
- controls_ebox.signal_button_release_event().connect (mem_fun (*this, &TimeAxisView::controls_ebox_button_release));
- controls_ebox.signal_scroll_event().connect (mem_fun (*this, &TimeAxisView::controls_ebox_scroll), true);
-
- controls_hbox.pack_start (controls_ebox,true,true);
- controls_hbox.show ();
-
- // controls_frame.add (controls_hbox);
- // controls_frame.set_name ("TimeAxisViewControlsBaseUnselected");
- // controls_vbox.set_name ("TimeAxisViewControlsBaseUnselected");
- // controls_frame.set_shadow_type (Gtk::SHADOW_ETCHED_OUT);
-
- ColorsChanged.connect (mem_fun (*this, &TimeAxisView::color_handler));
-}
-
-TimeAxisView::~TimeAxisView()
-{
- in_destructor = true;
-
- for (list<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
- delete *i;
- }
-
- for (list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i) {
- delete (*i)->rect;
- delete (*i)->start_trim;
- delete (*i)->end_trim;
-
- }
-
- for (list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i) {
- delete (*i)->rect;
- delete (*i)->start_trim;
- delete (*i)->end_trim;
- }
-
- for (list<SimpleLine*>::iterator i = feature_lines.begin(); i != feature_lines.end(); ++i) {
- delete (*i);
- }
-
- if (selection_group) {
- delete selection_group;
- selection_group = 0;
- }
-
- if (canvas_display) {
- delete canvas_display;
- canvas_display = 0;
- }
-
- if (display_menu) {
- delete display_menu;
- display_menu = 0;
- }
-}
-
-guint32
-TimeAxisView::show_at (double y, int& nth, VBox *parent)
-{
- if (control_parent) {
- control_parent->reorder_child (controls_hbox, nth);
- } else {
- control_parent = parent;
- parent->pack_start (controls_hbox, false, false);
- parent->reorder_child (controls_hbox, nth);
- }
-
- order = nth;
-
- if (y_position != y) {
- canvas_display->property_y () = y;
- canvas_display->move (0.0, 0.0);
- y_position = y;
-
- }
-
- canvas_display->raise_to_top ();
-
- if (_marked_for_display) {
- controls_hbox.show ();
- controls_ebox.show ();
- }
-
- _hidden = false;
-
- effective_height = current_height();
-
- /* now show children */
-
- for (Children::iterator i = children.begin(); i != children.end(); ++i) {
- if (canvas_item_visible ((*i)->canvas_display)) {
- ++nth;
- effective_height += (*i)->show_at (y + effective_height, nth, parent);
- }
- }
-
- return effective_height;
-}
-
-void
-TimeAxisView::clip_to_viewport ()
-{
- if (_marked_for_display) {
- if (y_position + effective_height < editor.get_trackview_group_vertical_offset () || y_position > editor.get_trackview_group_vertical_offset () + canvas_display->get_canvas()->get_height()) {
- canvas_display->hide ();
- return;
- }
- canvas_display->show ();
- }
- return;
-}
-
-bool
-TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev)
-{
- switch (ev->direction) {
- case GDK_SCROLL_UP:
- if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
- step_height (true);
- return true;
- } else if (Keyboard::no_modifiers_active (ev->state)) {
- editor.scroll_tracks_up_line();
- return true;
- }
- break;
-
- case GDK_SCROLL_DOWN:
- if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
- step_height (false);
- return true;
- } else if (Keyboard::no_modifiers_active (ev->state)) {
- editor.scroll_tracks_down_line();
- return true;
- }
- break;
-
- default:
- /* no handling for left/right, yet */
- break;
- }
-
- return false;
-}
-
-bool
-TimeAxisView::controls_ebox_button_release (GdkEventButton* ev)
-{
- switch (ev->button) {
- case 1:
- selection_click (ev);
- break;
-
- case 3:
- popup_display_menu (ev->time);
- break;
- }
-
- return true;
-}
-
-void
-TimeAxisView::selection_click (GdkEventButton* ev)
-{
- Selection::Operation op = Keyboard::selection_type (ev->state);
- editor.set_selected_track (*this, op, false);
-}
-
-void
-TimeAxisView::hide ()
-{
- if (_hidden) {
- return;
- }
-
- canvas_display->hide();
- controls_hbox.hide ();
-
- if (control_parent) {
- control_parent->remove (controls_hbox);
- control_parent = 0;
- }
-
- y_position = -1;
- _hidden = true;
-
- /* now hide children */
-
- for (Children::iterator i = children.begin(); i != children.end(); ++i) {
- (*i)->hide ();
- }
-
- /* if its hidden, it cannot be selected */
-
- editor.get_selection().remove (this);
-
- Hiding ();
-}
-
-void
-TimeAxisView::step_height (bool bigger)
-{
- static const uint32_t step = 20;
-
- if (bigger) {
- set_height (height + step);
- } else {
- if (height > step) {
- set_height (std::max (height - step, hSmall));
- } else if (height != hSmall) {
- set_height (hSmall);
- }
- }
-}
-
-void
-TimeAxisView::set_heights (uint32_t h)
-{
- TrackSelection& ts (editor.get_selection().tracks);
-
- for (TrackSelection::iterator i = ts.begin(); i != ts.end(); ++i) {
- (*i)->set_height (h);
- }
-}
-
-void
-TimeAxisView::set_height(uint32_t h)
-{
- controls_ebox.property_height_request () = h;
- height = h;
-
- for (list<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
- (*i)->set_height ();
- }
-
- if (canvas_item_visible (selection_group)) {
- /* resize the selection rect */
- show_selection (editor.get_selection().time);
- }
-
- reshow_feature_lines ();
-}
-
-bool
-TimeAxisView::name_entry_key_release (GdkEventKey* ev)
-{
- PublicEditor::TrackViewList *allviews = 0;
- PublicEditor::TrackViewList::iterator i;
-
- switch (ev->keyval) {
- case GDK_Escape:
- name_entry.select_region (0,0);
- controls_ebox.grab_focus ();
- name_entry_changed ();
- return true;
-
- /* Shift+Tab Keys Pressed. Note that for Shift+Tab, GDK actually
- * generates a different ev->keyval, rather than setting
- * ev->state.
+ /*
+ Copyright (C) 2000 Paul Davis
+
+ 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 <cstdlib>
+ #include <cmath>
+ #include <algorithm>
+ #include <string>
+ #include <list>
+
+ #include <libgnomecanvasmm.h>
+ #include <libgnomecanvasmm/canvas.h>
+ #include <libgnomecanvasmm/item.h>
+
+ #include <pbd/error.h>
+
+ #include <gtkmm2ext/utils.h>
+ #include <gtkmm2ext/selector.h>
+ #include <gtkmm2ext/stop_signal.h>
+
+ #include <ardour/session.h>
+ #include <ardour/utils.h>
+ #include <ardour/ladspa_plugin.h>
+ #include <ardour/processor.h>
+ #include <ardour/location.h>
+
+ #include "ardour_ui.h"
+ #include "public_editor.h"
+ #include "time_axis_view.h"
+ #include "region_view.h"
+ #include "ghostregion.h"
+ #include "simplerect.h"
+ #include "simpleline.h"
+ #include "selection.h"
+ #include "keyboard.h"
+ #include "rgb_macros.h"
+ #include "utils.h"
+
+ #include "i18n.h"
+
+ using namespace Gtk;
+ using namespace Gdk;
+ using namespace sigc;
+ using namespace ARDOUR;
+ using namespace PBD;
+ using namespace Editing;
+ using namespace ArdourCanvas;
+
+ const double trim_handle_size = 6.0; /* pixels */
+
+ uint32_t TimeAxisView::hLargest = 0;
+ uint32_t TimeAxisView::hLarge = 0;
+ uint32_t TimeAxisView::hLarger = 0;
+ uint32_t TimeAxisView::hNormal = 0;
+ uint32_t TimeAxisView::hSmaller = 0;
+ uint32_t TimeAxisView::hSmall = 0;
+ bool TimeAxisView::need_size_info = true;
+
+ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisView* rent, Canvas& canvas)
+ : AxisView (sess),
+ editor (ed),
+ y_position(0),
+ order(0),
+ controls_table (2, 8)
+ {
+ if (need_size_info) {
+ compute_controls_size_info ();
+ need_size_info = false;
+ }
+ canvas_background = new Group (*ed.get_background_group (), 0.0, 0.0);
+ canvas_display = new Group (*ed.get_trackview_group (), 0.0, 0.0);
+
+ selection_group = new Group (*canvas_display);
+ selection_group->hide();
+
+ ghost_group = new Group (*canvas_display);
+ ghost_group->lower_to_bottom();
+ ghost_group->show();
+
+ control_parent = 0;
+ display_menu = 0;
+ size_menu = 0;
+ _hidden = false;
+ in_destructor = false;
+ height = 0;
+ effective_height = 0;
+ parent = rent;
+ _has_state = false;
+ last_name_entry_key_press_event = 0;
+ name_packing = NamePackingBits (0);
+ resize_drag_start = -1;
+
+ /*
+ Create the standard LHS Controls
+ We create the top-level container and name add the name label here,
+ subclasses can add to the layout as required
*/
- case GDK_ISO_Left_Tab:
- case GDK_Tab:
- name_entry_changed ();
- allviews = editor.get_valid_views (0);
- if (allviews != 0) {
- i = find (allviews->begin(), allviews->end(), this);
- if (ev->keyval == GDK_Tab) {
- if (i != allviews->end()) {
- do {
- if (++i == allviews->end()) { return true; }
- } while((*i)->hidden());
- }
- } else {
- if (i != allviews->begin()) {
- do {
- if (--i == allviews->begin()) { return true; }
- } while ((*i)->hidden());
- }
- }
-
-
- /* resize to show editable name display */
-
- if ((*i)->current_height() >= hSmall && (*i)->current_height() < hNormal) {
- (*i)->set_height (hSmaller);
- }
-
- (*i)->name_entry.grab_focus();
- }
- return true;
- case GDK_Up:
- case GDK_Down:
- name_entry_changed ();
- return true;
-
- default:
- break;
- }
-
-#ifdef TIMEOUT_NAME_EDIT
- /* adapt the timeout to reflect the user's typing speed */
-
- guint32 name_entry_timeout;
-
- if (last_name_entry_key_press_event) {
- /* timeout is 1/2 second or 5 times their current inter-char typing speed */
- name_entry_timeout = std::max (500U, (5 * (ev->time - last_name_entry_key_press_event)));
- } else {
- /* start with a 1 second timeout */
- name_entry_timeout = 1000;
- }
-
- last_name_entry_key_press_event = ev->time;
-
- /* wait 1 seconds and if no more keys are pressed, act as if they pressed enter */
-
- name_entry_key_timeout.disconnect();
- name_entry_key_timeout = Glib::signal_timeout().connect (mem_fun (*this, &TimeAxisView::name_entry_key_timed_out), name_entry_timeout);
-#endif
-
- return false;
-}
-
-bool
-TimeAxisView::name_entry_focus_in (GdkEventFocus* ev)
-{
- name_entry.select_region (0, -1);
- name_entry.set_name ("EditorActiveTrackNameDisplay");
- return false;
-}
-
-bool
-TimeAxisView::name_entry_focus_out (GdkEventFocus* ev)
-{
- /* clean up */
-
- last_name_entry_key_press_event = 0;
- name_entry_key_timeout.disconnect ();
- name_entry.set_name ("EditorTrackNameDisplay");
- name_entry.select_region (0,0);
-
- /* do the real stuff */
-
- name_entry_changed ();
-
- return false;
-}
-
-bool
-TimeAxisView::name_entry_key_timed_out ()
-{
- name_entry_activated();
- return false;
-}
-
-void
-TimeAxisView::name_entry_activated ()
-{
- controls_ebox.grab_focus();
-}
-
-void
-TimeAxisView::name_entry_changed ()
-{
-}
-
-bool
-TimeAxisView::name_entry_button_press (GdkEventButton *ev)
-{
- if (ev->button == 3) {
- return true;
- }
- return false;
-}
-
-bool
-TimeAxisView::name_entry_button_release (GdkEventButton *ev)
-{
- if (ev->button == 3) {
- popup_display_menu (ev->time);
- return true;
- }
- return false;
-}
-
-void
-TimeAxisView::conditionally_add_to_selection ()
-{
- Selection& s (editor.get_selection());
-
- if (!s.selected (this)) {
- editor.set_selected_track (*this, Selection::Set);
- }
-}
-
-void
-TimeAxisView::popup_display_menu (guint32 when)
-{
- if (display_menu == 0) {
- build_display_menu ();
- }
-
- conditionally_add_to_selection ();
- display_menu->popup (1, when);
-}
-
-gint
-TimeAxisView::size_click (GdkEventButton *ev)
-{
- conditionally_add_to_selection ();
- popup_size_menu (ev->time);
- return TRUE;
-}
-
-void
-TimeAxisView::popup_size_menu (guint32 when)
-{
- if (size_menu == 0) {
- build_size_menu ();
- }
- size_menu->popup (1, when);
-}
-
-void
-TimeAxisView::set_selected (bool yn)
-{
- if (yn == _selected) {
- return;
- }
-
- Selectable::set_selected (yn);
-
- if (_selected) {
- controls_ebox.set_name (controls_base_selected_name);
- controls_hbox.set_name (controls_base_selected_name);
- controls_vbox.set_name (controls_base_selected_name);
- /* propagate any existing selection, if the mode is right */
-
- if (editor.current_mouse_mode() == Editing::MouseRange && !editor.get_selection().time.empty()) {
- show_selection (editor.get_selection().time);
- }
-
- } else {
- controls_ebox.set_name (controls_base_unselected_name);
- controls_hbox.set_name (controls_base_unselected_name);
- controls_vbox.set_name (controls_base_unselected_name);
- hide_selection ();
-
- /* children will be set for the yn=true case. but when deselecting
- the editor only has a list of top-level trackviews, so we
- have to do this here.
- */
-
- for (Children::iterator i = children.begin(); i != children.end(); ++i) {
- (*i)->set_selected (false);
- }
- }
-
- resizer.queue_draw ();
-}
-
-void
-TimeAxisView::build_size_menu ()
-{
- using namespace Menu_Helpers;
-
- size_menu = new Menu;
- size_menu->set_name ("ArdourContextMenu");
- MenuList& items = size_menu->items();
-
- items.push_back (MenuElem (_("Largest"), bind (mem_fun (*this, &TimeAxisView::set_heights), hLargest)));
- items.push_back (MenuElem (_("Large"), bind (mem_fun (*this, &TimeAxisView::set_heights), hLarge)));
- items.push_back (MenuElem (_("Larger"), bind (mem_fun (*this, &TimeAxisView::set_heights), hLarger)));
- items.push_back (MenuElem (_("Normal"), bind (mem_fun (*this, &TimeAxisView::set_heights), hNormal)));
- items.push_back (MenuElem (_("Smaller"), bind (mem_fun (*this, &TimeAxisView::set_heights),hSmaller)));
- items.push_back (MenuElem (_("Small"), bind (mem_fun (*this, &TimeAxisView::set_heights), hSmall)));
-}
-
-void
-TimeAxisView::build_display_menu ()
-{
- using namespace Menu_Helpers;
-
- display_menu = new Menu;
- display_menu->set_name ("ArdourContextMenu");
-
- // Just let implementing classes define what goes into the manu
-}
-
-void
-TimeAxisView::set_samples_per_unit (double spu)
-{
- for (Children::iterator i = children.begin(); i != children.end(); ++i) {
- (*i)->set_samples_per_unit (spu);
- }
-
- AnalysisFeatureList::const_iterator i;
- list<ArdourCanvas::SimpleLine*>::iterator l;
-
- for (i = analysis_features.begin(), l = feature_lines.begin(); i != analysis_features.end() && l != feature_lines.end(); ++i, ++l) {
- (*l)->property_x1() = editor.frame_to_pixel (*i);
- (*l)->property_x2() = editor.frame_to_pixel (*i);
- }
-}
-
-void
-TimeAxisView::show_timestretch (nframes_t start, nframes_t end)
-{
- for (Children::iterator i = children.begin(); i != children.end(); ++i) {
- (*i)->show_timestretch (start, end);
- }
-}
-
-void
-TimeAxisView::hide_timestretch ()
-{
- for (Children::iterator i = children.begin(); i != children.end(); ++i) {
- (*i)->hide_timestretch ();
- }
-}
-
-void
-TimeAxisView::show_selection (TimeSelection& ts)
-{
- double x1;
- double x2;
- double y2;
- SelectionRect *rect;
-
- for (Children::iterator i = children.begin(); i != children.end(); ++i) {
- (*i)->show_selection (ts);
- }
-
- if (canvas_item_visible (selection_group)) {
- while (!used_selection_rects.empty()) {
- free_selection_rects.push_front (used_selection_rects.front());
- used_selection_rects.pop_front();
- free_selection_rects.front()->rect->hide();
- free_selection_rects.front()->start_trim->hide();
- free_selection_rects.front()->end_trim->hide();
- }
- selection_group->hide();
- }
-
- selection_group->show();
- selection_group->raise_to_top();
-
- for (list<AudioRange>::iterator i = ts.begin(); i != ts.end(); ++i) {
- nframes_t start, end, cnt;
-
- start = (*i).start;
- end = (*i).end;
- cnt = end - start + 1;
-
- rect = get_selection_rect ((*i).id);
-
- x1 = editor.frame_to_unit (start);
- x2 = editor.frame_to_unit (start + cnt - 1);
- y2 = current_height();
-
- rect->rect->property_x1() = x1;
- rect->rect->property_y1() = 1.0;
- rect->rect->property_x2() = x2;
- rect->rect->property_y2() = y2;
-
- // trim boxes are at the top for selections
-
- if (x2 > x1) {
- rect->start_trim->property_x1() = x1;
- rect->start_trim->property_y1() = 1.0;
- rect->start_trim->property_x2() = x1 + trim_handle_size;
- rect->start_trim->property_y2() = 1.0 + trim_handle_size;
-
- rect->end_trim->property_x1() = x2 - trim_handle_size;
- rect->end_trim->property_y1() = 1.0;
- rect->end_trim->property_x2() = x2;
- rect->end_trim->property_y2() = 1.0 + trim_handle_size;
-
- rect->start_trim->show();
- rect->end_trim->show();
- } else {
- rect->start_trim->hide();
- rect->end_trim->hide();
- }
-
- rect->rect->show ();
- used_selection_rects.push_back (rect);
- }
-}
-
-void
-TimeAxisView::reshow_selection (TimeSelection& ts)
-{
- show_selection (ts);
-
- for (Children::iterator i = children.begin(); i != children.end(); ++i) {
- (*i)->show_selection (ts);
- }
-}
-
-void
-TimeAxisView::hide_selection ()
-{
- if (canvas_item_visible (selection_group)) {
- while (!used_selection_rects.empty()) {
- free_selection_rects.push_front (used_selection_rects.front());
- used_selection_rects.pop_front();
- free_selection_rects.front()->rect->hide();
- free_selection_rects.front()->start_trim->hide();
- free_selection_rects.front()->end_trim->hide();
- }
- selection_group->hide();
- }
-
- for (Children::iterator i = children.begin(); i != children.end(); ++i) {
- (*i)->hide_selection ();
- }
-}
-
-void
-TimeAxisView::order_selection_trims (ArdourCanvas::Item *item, bool put_start_on_top)
-{
- /* find the selection rect this is for. we have the item corresponding to one
- of the trim handles.
+ name_entry.set_name ("EditorTrackNameDisplay");
+ name_entry.signal_button_release_event().connect (mem_fun (*this, &TimeAxisView::name_entry_button_release));
+ name_entry.signal_button_press_event().connect (mem_fun (*this, &TimeAxisView::name_entry_button_press));
+ name_entry.signal_key_release_event().connect (mem_fun (*this, &TimeAxisView::name_entry_key_release));
+ name_entry.signal_activate().connect (mem_fun(*this, &TimeAxisView::name_entry_activated));
+ name_entry.signal_focus_in_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_in));
+ name_entry.signal_focus_out_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_out));
+ Gtkmm2ext::set_size_request_to_display_given_text (name_entry, N_("gTortnam"), 10, 10); // just represents a short name
+
+ name_label.set_name ("TrackLabel");
+ name_label.set_alignment (0.0, 0.5);
+
+ /* typically, either name_label OR name_entry are visible,
+ but not both. its up to derived classes to show/hide them as they
+ wish.
*/
- for (list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i) {
- if ((*i)->start_trim == item || (*i)->end_trim == item) {
-
- /* make one trim handle be "above" the other so that if they overlap,
- the top one is the one last used.
- */
-
- (*i)->rect->raise_to_top ();
- (put_start_on_top ? (*i)->start_trim : (*i)->end_trim)->raise_to_top ();
- (put_start_on_top ? (*i)->end_trim : (*i)->start_trim)->raise_to_top ();
-
- break;
- }
- }
-}
-
-SelectionRect *
-TimeAxisView::get_selection_rect (uint32_t id)
-{
- SelectionRect *rect;
-
- /* check to see if we already have a visible rect for this particular selection ID */
-
- for (list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i) {
- if ((*i)->id == id) {
- return (*i);
- }
- }
-
- /* ditto for the free rect list */
-
- for (list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i) {
- if ((*i)->id == id) {
- SelectionRect* ret = (*i);
- free_selection_rects.erase (i);
- return ret;
- }
- }
-
- /* no existing matching rect, so go get a new one from the free list, or create one if there are none */
-
- if (free_selection_rects.empty()) {
-
- rect = new SelectionRect;
-
- rect->rect = new SimpleRect (*selection_group);
- rect->rect->property_x1() = 0.0;
- rect->rect->property_y1() = 0.0;
- rect->rect->property_x2() = 0.0;
- rect->rect->property_y2() = 0.0;
- rect->rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_SelectionRect.get();
- rect->rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
-
- rect->start_trim = new SimpleRect (*selection_group);
- rect->start_trim->property_x1() = 0.0;
- rect->start_trim->property_x2() = 0.0;
- rect->start_trim->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
- rect->start_trim->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
-
- rect->end_trim = new SimpleRect (*selection_group);
- rect->end_trim->property_x1() = 0.0;
- rect->end_trim->property_x2() = 0.0;
- rect->end_trim->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
- rect->end_trim->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
-
- free_selection_rects.push_front (rect);
-
- rect->rect->signal_event().connect (bind (mem_fun (editor, &PublicEditor::canvas_selection_rect_event), rect->rect, rect));
- rect->start_trim->signal_event().connect (bind (mem_fun (editor, &PublicEditor::canvas_selection_start_trim_event), rect->rect, rect));
- rect->end_trim->signal_event().connect (bind (mem_fun (editor, &PublicEditor::canvas_selection_end_trim_event), rect->rect, rect));
- }
-
- rect = free_selection_rects.front();
- rect->id = id;
- free_selection_rects.pop_front();
- return rect;
-}
-
-struct null_deleter { void operator()(void const *) const {} };
-
-bool
-TimeAxisView::is_child (TimeAxisView* tav)
-{
- return find (children.begin(), children.end(), boost::shared_ptr<TimeAxisView>(tav, null_deleter())) != children.end();
-}
-
-void
-TimeAxisView::add_child (boost::shared_ptr<TimeAxisView> child)
-{
- children.push_back (child);
-}
-
-void
-TimeAxisView::remove_child (boost::shared_ptr<TimeAxisView> child)
-{
- Children::iterator i;
-
- if ((i = find (children.begin(), children.end(), child)) != children.end()) {
- children.erase (i);
- }
-}
-
-void
-TimeAxisView::get_selectables (nframes_t start, nframes_t end, double top, double bot, list<Selectable*>& result)
-{
- return;
-}
-
-void
-TimeAxisView::get_inverted_selectables (Selection& sel, list<Selectable*>& result)
-{
- return;
-}
-
-void
-TimeAxisView::add_ghost (RegionView* rv) {
- GhostRegion* gr = rv->add_ghost (*this);
-
- if(gr) {
- ghosts.push_back(gr);
- gr->GoingAway.connect (mem_fun(*this, &TimeAxisView::erase_ghost));
- }
-}
-
-void
-TimeAxisView::remove_ghost (RegionView* rv) {
+ name_hbox.show ();
+
+ controls_table.set_border_width (2);
+ controls_table.set_row_spacings (0);
+ controls_table.set_col_spacings (0);
+ controls_table.set_homogeneous (true);
+
+ controls_table.attach (name_hbox, 0, 5, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 3, 0);
+ controls_table.show_all ();
+ controls_table.set_no_show_all ();
+
+ resizer.set_size_request (10, 10);
+ resizer.set_name ("ResizeHandle");
+ resizer.signal_expose_event().connect (mem_fun (*this, &TimeAxisView::resizer_expose));
+ resizer.signal_button_press_event().connect (mem_fun (*this, &TimeAxisView::resizer_button_press));
+ resizer.signal_button_release_event().connect (mem_fun (*this, &TimeAxisView::resizer_button_release));
+ resizer.signal_motion_notify_event().connect (mem_fun (*this, &TimeAxisView::resizer_motion));
+ resizer.set_events (Gdk::BUTTON_PRESS_MASK|
+ Gdk::BUTTON_RELEASE_MASK|
+ Gdk::POINTER_MOTION_MASK|
+ Gdk::SCROLL_MASK);
+
+ resizer_box.pack_start (resizer, false, false);
+ resizer.show ();
+ resizer_box.show();
+
+ HSeparator* separator = manage (new HSeparator());
+
+ controls_vbox.pack_start (controls_table, false, false);
+ controls_vbox.pack_end (*separator, false, false);
+ controls_vbox.pack_end (resizer_box, false, true);
+ controls_vbox.show ();
+
+ //controls_ebox.set_name ("TimeAxisViewControlsBaseUnselected");
+ controls_ebox.add (controls_vbox);
+ controls_ebox.add_events (BUTTON_PRESS_MASK|BUTTON_RELEASE_MASK|SCROLL_MASK);
+ controls_ebox.set_flags (CAN_FOCUS);
+
+ controls_ebox.signal_button_release_event().connect (mem_fun (*this, &TimeAxisView::controls_ebox_button_release));
+ controls_ebox.signal_scroll_event().connect (mem_fun (*this, &TimeAxisView::controls_ebox_scroll), true);
+
+ controls_hbox.pack_start (controls_ebox,true,true);
+ controls_hbox.show ();
+
+ // controls_frame.add (controls_hbox);
+ // controls_frame.set_name ("TimeAxisViewControlsBaseUnselected");
+ // controls_vbox.set_name ("TimeAxisViewControlsBaseUnselected");
+ // controls_frame.set_shadow_type (Gtk::SHADOW_ETCHED_OUT);
+
+ ColorsChanged.connect (mem_fun (*this, &TimeAxisView::color_handler));
+ }
+
+ TimeAxisView::~TimeAxisView()
+ {
+ in_destructor = true;
+
+ for (list<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
+ delete *i;
+ }
+
+ for (list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i) {
+ delete (*i)->rect;
+ delete (*i)->start_trim;
+ delete (*i)->end_trim;
+
+ }
+
+ for (list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i) {
+ delete (*i)->rect;
+ delete (*i)->start_trim;
+ delete (*i)->end_trim;
+ }
+
+ for (list<SimpleLine*>::iterator i = feature_lines.begin(); i != feature_lines.end(); ++i) {
+ delete (*i);
+ }
+
+ if (selection_group) {
+ delete selection_group;
+ selection_group = 0;
+ }
+
+ if (canvas_background) {
+ delete canvas_background;
+ canvas_background = 0;
+ }
+
+ if (canvas_display) {
+ delete canvas_display;
+ canvas_display = 0;
+ }
+
+ if (display_menu) {
+ delete display_menu;
+ display_menu = 0;
+ }
+ }
+
+ guint32
+ TimeAxisView::show_at (double y, int& nth, VBox *parent)
+ {
+ if (control_parent) {
+ control_parent->reorder_child (controls_hbox, nth);
+ } else {
+ control_parent = parent;
+ parent->pack_start (controls_hbox, false, false);
+ parent->reorder_child (controls_hbox, nth);
+ }
+
+ order = nth;
+
+ if (y_position != y) {
+ canvas_display->property_y () = y;
+ canvas_background->property_y () = y;
+ /* silly canvas */
+ canvas_display->move (0.0, 0.0);
+ canvas_background->move (0.0, 0.0);
+ y_position = y;
+
+ }
+
+ canvas_background->raise_to_top ();
+ canvas_display->raise_to_top ();
+
+ if (_marked_for_display) {
+ controls_hbox.show ();
+ controls_ebox.show ();
+ canvas_background->show ();
+ }
+
+ _hidden = false;
+
+ effective_height = current_height();
+
+ /* now show children */
+
+ for (Children::iterator i = children.begin(); i != children.end(); ++i) {
+ if (canvas_item_visible ((*i)->canvas_display)) {
+ ++nth;
+ effective_height += (*i)->show_at (y + effective_height, nth, parent);
+ }
+ }
+
+ return effective_height;
+ }
+
+ void
+ TimeAxisView::clip_to_viewport ()
+ {
+ if (_marked_for_display) {
+ if (y_position + effective_height < editor.get_trackview_group_vertical_offset () || y_position > editor.get_trackview_group_vertical_offset () + canvas_display->get_canvas()->get_height()) {
+ canvas_background->hide ();
+ canvas_display->hide ();
+ return;
+ }
+ canvas_background->show();
+ canvas_display->show ();
+ }
+ return;
+ }
+
+ bool
+ TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev)
+ {
+ switch (ev->direction) {
+ case GDK_SCROLL_UP:
+ if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
+ step_height (true);
+ return true;
+ } else if (Keyboard::no_modifiers_active (ev->state)) {
+ editor.scroll_tracks_up_line();
+ return true;
+ }
+ break;
+
+ case GDK_SCROLL_DOWN:
+ if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
+ step_height (false);
+ return true;
+ } else if (Keyboard::no_modifiers_active (ev->state)) {
+ editor.scroll_tracks_down_line();
+ return true;
+ }
+ break;
+
+ default:
+ /* no handling for left/right, yet */
+ break;
+ }
+
+ return false;
+ }
+
+ bool
+ TimeAxisView::controls_ebox_button_release (GdkEventButton* ev)
+ {
+ switch (ev->button) {
+ case 1:
+ selection_click (ev);
+ break;
+
+ case 3:
+ popup_display_menu (ev->time);
+ break;
+ }
+
+ return true;
+ }
+
+ void
+ TimeAxisView::selection_click (GdkEventButton* ev)
+ {
+ Selection::Operation op = Keyboard::selection_type (ev->state);
+ editor.set_selected_track (*this, op, false);
+ }
+
+ void
+ TimeAxisView::hide ()
+ {
+ if (_hidden) {
+ return;
+ }
+
+ canvas_display->hide();
+ canvas_background->hide();
+ controls_frame.hide ();
+
+ if (control_parent) {
+ control_parent->remove (controls_hbox);
+ control_parent = 0;
+ }
+
+ y_position = -1;
+ _hidden = true;
+
+ /* now hide children */
+
+ for (Children::iterator i = children.begin(); i != children.end(); ++i) {
+ (*i)->hide ();
+ }
+
+ /* if its hidden, it cannot be selected */
+
+ editor.get_selection().remove (this);
+
+ Hiding ();
+ }
+
+ void
+ TimeAxisView::step_height (bool bigger)
+ {
+ static const uint32_t step = 20;
+
+ if (bigger) {
+ set_height (height + step);
+ } else {
+ if (height > step) {
+ set_height (std::max (height - step, hSmall));
+ } else if (height != hSmall) {
+ set_height (hSmall);
+ }
+ }
+ }
+
+ void
+ TimeAxisView::set_heights (uint32_t h)
+ {
+ TrackSelection& ts (editor.get_selection().tracks);
+
+ for (TrackSelection::iterator i = ts.begin(); i != ts.end(); ++i) {
+ (*i)->set_height (h);
+ }
+ }
+
+ void
+ TimeAxisView::set_height(uint32_t h)
+ {
+ controls_ebox.property_height_request () = h;
+ height = h;
+
+ for (list<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
+ (*i)->set_height ();
+ }
+
+ if (canvas_item_visible (selection_group)) {
+ /* resize the selection rect */
+ show_selection (editor.get_selection().time);
+ }
+
+ reshow_feature_lines ();
+ }
+
+ bool
+ TimeAxisView::name_entry_key_release (GdkEventKey* ev)
+ {
+ PublicEditor::TrackViewList *allviews = 0;
+ PublicEditor::TrackViewList::iterator i;
+
+ switch (ev->keyval) {
+ case GDK_Escape:
+ name_entry.select_region (0,0);
+ controls_ebox.grab_focus ();
+ name_entry_changed ();
+ return true;
+
+ /* Shift+Tab Keys Pressed. Note that for Shift+Tab, GDK actually
+ * generates a different ev->keyval, rather than setting
+ * ev->state.
+ */
+ case GDK_ISO_Left_Tab:
+ case GDK_Tab:
+ name_entry_changed ();
+ allviews = editor.get_valid_views (0);
+ if (allviews != 0) {
+ i = find (allviews->begin(), allviews->end(), this);
+ if (ev->keyval == GDK_Tab) {
+ if (i != allviews->end()) {
+ do {
+ if (++i == allviews->end()) { return true; }
+ } while((*i)->hidden());
+ }
+ } else {
+ if (i != allviews->begin()) {
+ do {
+ if (--i == allviews->begin()) { return true; }
+ } while ((*i)->hidden());
+ }
+ }
+
+
+ /* resize to show editable name display */
+
+ if ((*i)->current_height() >= hSmall && (*i)->current_height() < hNormal) {
+ (*i)->set_height (hSmaller);
+ }
+
+ (*i)->name_entry.grab_focus();
+ }
+ return true;
+
+ case GDK_Up:
+ case GDK_Down:
+ name_entry_changed ();
+ return true;
+
+ default:
+ break;
+ }
+
+ #ifdef TIMEOUT_NAME_EDIT
+ /* adapt the timeout to reflect the user's typing speed */
+
+ guint32 name_entry_timeout;
+
+ if (last_name_entry_key_press_event) {
+ /* timeout is 1/2 second or 5 times their current inter-char typing speed */
+ name_entry_timeout = std::max (500U, (5 * (ev->time - last_name_entry_key_press_event)));
+ } else {
+ /* start with a 1 second timeout */
+ name_entry_timeout = 1000;
+ }
+
+ last_name_entry_key_press_event = ev->time;
+
+ /* wait 1 seconds and if no more keys are pressed, act as if they pressed enter */
+
+ name_entry_key_timeout.disconnect();
+ name_entry_key_timeout = Glib::signal_timeout().connect (mem_fun (*this, &TimeAxisView::name_entry_key_timed_out), name_entry_timeout);
+ #endif
+
+ return false;
+ }
+
+ bool
+ TimeAxisView::name_entry_focus_in (GdkEventFocus* ev)
+ {
+ name_entry.select_region (0, -1);
+ name_entry.set_name ("EditorActiveTrackNameDisplay");
+ return false;
+ }
+
+ bool
+ TimeAxisView::name_entry_focus_out (GdkEventFocus* ev)
+ {
+ /* clean up */
+
+ last_name_entry_key_press_event = 0;
+ name_entry_key_timeout.disconnect ();
+ name_entry.set_name ("EditorTrackNameDisplay");
+ name_entry.select_region (0,0);
+
+ /* do the real stuff */
+
+ name_entry_changed ();
+
+ return false;
+ }
+
+ bool
+ TimeAxisView::name_entry_key_timed_out ()
+ {
+ name_entry_activated();
+ return false;
+ }
+
+ void
+ TimeAxisView::name_entry_activated ()
+ {
+ controls_ebox.grab_focus();
+ }
+
+ void
+ TimeAxisView::name_entry_changed ()
+ {
+ }
+
+ bool
+ TimeAxisView::name_entry_button_press (GdkEventButton *ev)
+ {
+ if (ev->button == 3) {
+ return true;
+ }
+ return false;
+ }
+
+ bool
+ TimeAxisView::name_entry_button_release (GdkEventButton *ev)
+ {
+ if (ev->button == 3) {
+ popup_display_menu (ev->time);
+ return true;
+ }
+ return false;
+ }
+
+ void
+ TimeAxisView::conditionally_add_to_selection ()
+ {
+ Selection& s (editor.get_selection());
+
+ if (!s.selected (this)) {
+ editor.set_selected_track (*this, Selection::Set);
+ }
+ }
+
+ void
+ TimeAxisView::popup_display_menu (guint32 when)
+ {
+ if (display_menu == 0) {
+ build_display_menu ();
+ }
+
+ conditionally_add_to_selection ();
+ display_menu->popup (1, when);
+ }
+
+ gint
+ TimeAxisView::size_click (GdkEventButton *ev)
+ {
+ conditionally_add_to_selection ();
+ popup_size_menu (ev->time);
+ return TRUE;
+ }
+
+ void
+ TimeAxisView::popup_size_menu (guint32 when)
+ {
+ if (size_menu == 0) {
+ build_size_menu ();
+ }
+ size_menu->popup (1, when);
+ }
+
+ void
+ TimeAxisView::set_selected (bool yn)
+ {
+ if (yn == _selected) {
+ return;
+ }
+
+ Selectable::set_selected (yn);
+
+ if (_selected) {
+ controls_ebox.set_name (controls_base_selected_name);
+ controls_hbox.set_name (controls_base_selected_name);
+ controls_vbox.set_name (controls_base_selected_name);
+ /* propagate any existing selection, if the mode is right */
+
+ if (editor.current_mouse_mode() == Editing::MouseRange && !editor.get_selection().time.empty()) {
+ show_selection (editor.get_selection().time);
+ }
+
+ } else {
+ controls_ebox.set_name (controls_base_unselected_name);
+ controls_hbox.set_name (controls_base_unselected_name);
+ controls_vbox.set_name (controls_base_unselected_name);
+ hide_selection ();
+
+ /* children will be set for the yn=true case. but when deselecting
+ the editor only has a list of top-level trackviews, so we
+ have to do this here.
+ */
+
+ for (Children::iterator i = children.begin(); i != children.end(); ++i) {
+ (*i)->set_selected (false);
+ }
+ }
+
+ resizer.queue_draw ();
+ }
+
+ void
+ TimeAxisView::build_size_menu ()
+ {
+ using namespace Menu_Helpers;
+
+ size_menu = new Menu;
+ size_menu->set_name ("ArdourContextMenu");
+ MenuList& items = size_menu->items();
+
+ items.push_back (MenuElem (_("Largest"), bind (mem_fun (*this, &TimeAxisView::set_heights), hLargest)));
+ items.push_back (MenuElem (_("Large"), bind (mem_fun (*this, &TimeAxisView::set_heights), hLarge)));
+ items.push_back (MenuElem (_("Larger"), bind (mem_fun (*this, &TimeAxisView::set_heights), hLarger)));
+ items.push_back (MenuElem (_("Normal"), bind (mem_fun (*this, &TimeAxisView::set_heights), hNormal)));
+ items.push_back (MenuElem (_("Smaller"), bind (mem_fun (*this, &TimeAxisView::set_heights),hSmaller)));
+ items.push_back (MenuElem (_("Small"), bind (mem_fun (*this, &TimeAxisView::set_heights), hSmall)));
+ }
+
+ void
+ TimeAxisView::build_display_menu ()
+ {
+ using namespace Menu_Helpers;
+
+ display_menu = new Menu;
+ display_menu->set_name ("ArdourContextMenu");
+
+ // Just let implementing classes define what goes into the manu
+ }
+
+ void
+ TimeAxisView::set_samples_per_unit (double spu)
+ {
+ for (Children::iterator i = children.begin(); i != children.end(); ++i) {
+ (*i)->set_samples_per_unit (spu);
+ }
+
+ AnalysisFeatureList::const_iterator i;
+ list<ArdourCanvas::SimpleLine*>::iterator l;
+
+ for (i = analysis_features.begin(), l = feature_lines.begin(); i != analysis_features.end() && l != feature_lines.end(); ++i, ++l) {
+ (*l)->property_x1() = editor.frame_to_pixel (*i);
+ (*l)->property_x2() = editor.frame_to_pixel (*i);
+ }
+ }
+
+ void
+ TimeAxisView::show_timestretch (nframes_t start, nframes_t end)
+ {
+ for (Children::iterator i = children.begin(); i != children.end(); ++i) {
+ (*i)->show_timestretch (start, end);
+ }
+ }
+
+ void
+ TimeAxisView::hide_timestretch ()
+ {
+ for (Children::iterator i = children.begin(); i != children.end(); ++i) {
+ (*i)->hide_timestretch ();
+ }
+ }
+
+ void
+ TimeAxisView::show_selection (TimeSelection& ts)
+ {
+ double x1;
+ double x2;
+ double y2;
+ SelectionRect *rect;
+
+ for (Children::iterator i = children.begin(); i != children.end(); ++i) {
+ (*i)->show_selection (ts);
+ }
+
+ if (canvas_item_visible (selection_group)) {
+ while (!used_selection_rects.empty()) {
+ free_selection_rects.push_front (used_selection_rects.front());
+ used_selection_rects.pop_front();
+ free_selection_rects.front()->rect->hide();
+ free_selection_rects.front()->start_trim->hide();
+ free_selection_rects.front()->end_trim->hide();
+ }
+ selection_group->hide();
+ }
+
+ selection_group->show();
+ selection_group->raise_to_top();
+
+ for (list<AudioRange>::iterator i = ts.begin(); i != ts.end(); ++i) {
+ nframes_t start, end, cnt;
+
+ start = (*i).start;
+ end = (*i).end;
+ cnt = end - start + 1;
+
+ rect = get_selection_rect ((*i).id);
+
+ x1 = editor.frame_to_unit (start);
+ x2 = editor.frame_to_unit (start + cnt - 1);
+ y2 = current_height();
+
+ rect->rect->property_x1() = x1;
+ rect->rect->property_y1() = 1.0;
+ rect->rect->property_x2() = x2;
+ rect->rect->property_y2() = y2;
+
+ // trim boxes are at the top for selections
+
+ if (x2 > x1) {
+ rect->start_trim->property_x1() = x1;
+ rect->start_trim->property_y1() = 1.0;
+ rect->start_trim->property_x2() = x1 + trim_handle_size;
+ rect->start_trim->property_y2() = 1.0 + trim_handle_size;
+
+ rect->end_trim->property_x1() = x2 - trim_handle_size;
+ rect->end_trim->property_y1() = 1.0;
+ rect->end_trim->property_x2() = x2;
+ rect->end_trim->property_y2() = 1.0 + trim_handle_size;
+
+ rect->start_trim->show();
+ rect->end_trim->show();
+ } else {
+ rect->start_trim->hide();
+ rect->end_trim->hide();
+ }
+
+ rect->rect->show ();
+ used_selection_rects.push_back (rect);
+ }
+ }
+
+ void
+ TimeAxisView::reshow_selection (TimeSelection& ts)
+ {
+ show_selection (ts);
+
+ for (Children::iterator i = children.begin(); i != children.end(); ++i) {
+ (*i)->show_selection (ts);
+ }
+ }
+
+ void
+ TimeAxisView::hide_selection ()
+ {
+ if (canvas_item_visible (selection_group)) {
+ while (!used_selection_rects.empty()) {
+ free_selection_rects.push_front (used_selection_rects.front());
+ used_selection_rects.pop_front();
+ free_selection_rects.front()->rect->hide();
+ free_selection_rects.front()->start_trim->hide();
+ free_selection_rects.front()->end_trim->hide();
+ }
+ selection_group->hide();
+ }
+
+ for (Children::iterator i = children.begin(); i != children.end(); ++i) {
+ (*i)->hide_selection ();
+ }
+ }
+
+ void
+ TimeAxisView::order_selection_trims (ArdourCanvas::Item *item, bool put_start_on_top)
+ {
+ /* find the selection rect this is for. we have the item corresponding to one
+ of the trim handles.
+ */
+
+ for (list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i) {
+ if ((*i)->start_trim == item || (*i)->end_trim == item) {
+
+ /* make one trim handle be "above" the other so that if they overlap,
+ the top one is the one last used.
+ */
+
+ (*i)->rect->raise_to_top ();
+ (put_start_on_top ? (*i)->start_trim : (*i)->end_trim)->raise_to_top ();
+ (put_start_on_top ? (*i)->end_trim : (*i)->start_trim)->raise_to_top ();
+
+ break;
+ }
+ }
+ }
+
+ SelectionRect *
+ TimeAxisView::get_selection_rect (uint32_t id)
+ {
+ SelectionRect *rect;
+
+ /* check to see if we already have a visible rect for this particular selection ID */
+
+ for (list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i) {
+ if ((*i)->id == id) {
+ return (*i);
+ }
+ }
+
+ /* ditto for the free rect list */
+
+ for (list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i) {
+ if ((*i)->id == id) {
+ SelectionRect* ret = (*i);
+ free_selection_rects.erase (i);
+ return ret;
+ }
+ }
+
+ /* no existing matching rect, so go get a new one from the free list, or create one if there are none */
+
+ if (free_selection_rects.empty()) {
+
+ rect = new SelectionRect;
+
+ rect->rect = new SimpleRect (*selection_group);
+ rect->rect->property_x1() = 0.0;
+ rect->rect->property_y1() = 0.0;
+ rect->rect->property_x2() = 0.0;
+ rect->rect->property_y2() = 0.0;
+ rect->rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_SelectionRect.get();
+ rect->rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+
+ rect->start_trim = new SimpleRect (*selection_group);
+ rect->start_trim->property_x1() = 0.0;
+ rect->start_trim->property_x2() = 0.0;
+ rect->start_trim->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+ rect->start_trim->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+
+ rect->end_trim = new SimpleRect (*selection_group);
+ rect->end_trim->property_x1() = 0.0;
+ rect->end_trim->property_x2() = 0.0;
+ rect->end_trim->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+ rect->end_trim->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_Selection.get();
+
+ free_selection_rects.push_front (rect);
+
+ rect->rect->signal_event().connect (bind (mem_fun (editor, &PublicEditor::canvas_selection_rect_event), rect->rect, rect));
+ rect->start_trim->signal_event().connect (bind (mem_fun (editor, &PublicEditor::canvas_selection_start_trim_event), rect->rect, rect));
+ rect->end_trim->signal_event().connect (bind (mem_fun (editor, &PublicEditor::canvas_selection_end_trim_event), rect->rect, rect));
+ }
+
+ rect = free_selection_rects.front();
+ rect->id = id;
+ free_selection_rects.pop_front();
+ return rect;
+ }
+
+ struct null_deleter { void operator()(void const *) const {} };
+
+ bool
+ TimeAxisView::is_child (TimeAxisView* tav)
+ {
+ return find (children.begin(), children.end(), boost::shared_ptr<TimeAxisView>(tav, null_deleter())) != children.end();
+ }
+
+ void
+ TimeAxisView::add_child (boost::shared_ptr<TimeAxisView> child)
+ {
+ children.push_back (child);
+ }
+
+ void
+ TimeAxisView::remove_child (boost::shared_ptr<TimeAxisView> child)
+ {
+ Children::iterator i;
+
+ if ((i = find (children.begin(), children.end(), child)) != children.end()) {
+ children.erase (i);
+ }
+ }
+
+ void
+ TimeAxisView::get_selectables (nframes_t start, nframes_t end, double top, double bot, list<Selectable*>& result)
+ {
+ return;
+ }
+
+ void
+ TimeAxisView::get_inverted_selectables (Selection& sel, list<Selectable*>& result)
+ {
+ return;
+ }
+
+ void
+ TimeAxisView::add_ghost (RegionView* rv) {
+ GhostRegion* gr = rv->add_ghost (*this);
+
+ if(gr) {
+ ghosts.push_back(gr);
+ gr->GoingAway.connect (mem_fun(*this, &TimeAxisView::erase_ghost));
+ }
+ }
+
+ void
+ TimeAxisView::remove_ghost (RegionView* rv) {
rv->remove_ghost_in (*this);
}
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index 277e4dba44..8c9576f951 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -104,6 +104,7 @@ class TimeAxisView : public virtual AxisView, public PBD::Stateful
uint32_t current_height() const { return height; }
+ ArdourCanvas::Group *canvas_background;
ArdourCanvas::Group *canvas_display;
Gtk::VBox *control_parent;
diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc
index e02117385a..6469017469 100644
--- a/gtk2_ardour/time_axis_view_item.cc
+++ b/gtk2_ardour/time_axis_view_item.cc
@@ -165,6 +165,7 @@ TimeAxisViewItem::init (const string& it_name, double spu, Gdk::Color& base_colo
frame->property_y2() = (double) trackview.current_height();
frame->property_outline_pixels() = 1;
frame->property_outline_what() = 0xF;
+ frame->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_TimeAxisFrame.get();
/* by default draw all 4 edges */
@@ -230,12 +231,14 @@ TimeAxisViewItem::init (const string& it_name, double spu, Gdk::Color& base_colo
frame_handle_start->property_x2() = (double) TimeAxisViewItem::GRAB_HANDLE_LENGTH;
frame_handle_start->property_y1() = (double) 1.0;
frame_handle_start->property_y2() = (double) TimeAxisViewItem::GRAB_HANDLE_LENGTH+1;
+ frame_handle_start->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_FrameHandle.get();
frame_handle_end = new ArdourCanvas::SimpleRect (*group);
frame_handle_end->property_x1() = (double) (trackview.editor.frame_to_pixel(get_duration())) - (TimeAxisViewItem::GRAB_HANDLE_LENGTH);
frame_handle_end->property_x2() = (double) trackview.editor.frame_to_pixel(get_duration());
frame_handle_end->property_y1() = (double) 1;
frame_handle_end->property_y2() = (double) TimeAxisViewItem::GRAB_HANDLE_LENGTH + 1;
+ frame_handle_end->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_FrameHandle.get();
} else {
frame_handle_start = 0;
diff --git a/gtk2_ardour/ui_config.cc b/gtk2_ardour/ui_config.cc
index 37a0ade3fe..d7cf0974ab 100644
--- a/gtk2_ardour/ui_config.cc
+++ b/gtk2_ardour/ui_config.cc
@@ -62,10 +62,17 @@ int
UIConfiguration::load_defaults ()
{
int found = 0;
+
sys::path default_ui_rc_file;
-
- if ( find_file_in_search_path (ardour_search_path() + system_config_search_path(),
- "ardour3_ui_default.conf", default_ui_rc_file) )
+ std::string rcfile;
+
+ if (getenv ("ARDOUR_SAE")) {
+ rcfile = "ardour3_ui_sae.conf";
+ } else {
+ rcfile = "ardour3_ui_default.conf";
+ }
+ if ( !find_file_in_search_path (ardour_search_path() + system_config_search_path(),
+ rcfile, default_ui_rc_file) )
{
XMLTree tree;
found = 1;
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc
index d083b17a1e..f625ae958e 100644
--- a/gtk2_ardour/utils.cc
+++ b/gtk2_ardour/utils.cc
@@ -396,7 +396,7 @@ set_color (Gdk::Color& c, int rgb)
c.set_rgb((rgb >> 16)*256, ((rgb & 0xff00) >> 8)*256, (rgb & 0xff)*256);
}
-#ifdef GTKOSX_ARDOUR_EVENTS_PATCH
+#ifdef GTKOSX
extern "C" {
gboolean gdk_quartz_possibly_forward (GdkEvent*);
}
@@ -408,10 +408,12 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
GtkWindow* win = window.gobj();
GtkWidget* focus = gtk_window_get_focus (win);
bool special_handling_of_unmodified_accelerators = false;
+ bool allow_activating = true;
#undef DEBUG_ACCELERATOR_HANDLING
#ifdef DEBUG_ACCELERATOR_HANDLING
- bool debug = (getenv ("ARDOUR_DEBUG_ACCELERATOR_HANDLING") != 0);
+ //bool debug = (getenv ("ARDOUR_DEBUG_ACCELERATOR_HANDLING") != 0);
+ bool debug=true;
#endif
if (focus) {
if (GTK_IS_ENTRY(focus) || Keyboard::some_magic_widget_has_focus()) {
@@ -419,10 +421,21 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
}
}
+#ifdef GTKOSX
+ /* should this be universally true? */
+ if (Keyboard::some_magic_widget_has_focus ()) {
+ allow_activating = false;
+ }
+#endif
+
#ifdef DEBUG_ACCELERATOR_HANDLING
if (debug) {
cerr << "Win = " << win << " Key event: code = " << ev->keyval << " state = " << hex << ev->state << dec << " special handling ? "
<< special_handling_of_unmodified_accelerators
+ << " magic widget focus ? "
+ << Keyboard::some_magic_widget_has_focus()
+ << " allow_activation ? "
+ << allow_activating
<< endl;
}
#endif
@@ -469,17 +482,19 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
uint32_t fakekey = ev->keyval;
if (possibly_translate_keyval_to_make_legal_accelerator (fakekey)) {
- if (gtk_accel_groups_activate(G_OBJECT(win), fakekey, GdkModifierType(ev->state))) {
+ if (allow_activating && gtk_accel_groups_activate(G_OBJECT(win), fakekey, GdkModifierType(ev->state))) {
return true;
}
-#ifdef GTKOSX_ARDOUR_EVENTS_PATCH
- int oldval = ev->keyval;
- ev->keyval = fakekey;
- if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) {
- return true;
+#ifdef GTKOSX
+ if (allow_activating) {
+ int oldval = ev->keyval;
+ ev->keyval = fakekey;
+ if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) {
+ return true;
+ }
+ ev->keyval = oldval;
}
- ev->keyval = oldval;
#endif
}
}
@@ -497,26 +512,24 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
cerr << "\tactivate, then propagate\n";
}
#endif
-#ifdef GTKOSX_ARDOUR_EVENTS_PATCH
- if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) {
- return true;
- }
-#endif
- if (!gtk_window_activate_key (win, ev)) {
-#ifdef DEBUG_ACCELERATOR_HANDLING
- if (debug) {
- cerr << "\tnot accelerated, now propagate\n";
+
+ if (allow_activating) {
+#ifdef GTKOSX
+ if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) {
+ return true;
}
#endif
- return gtk_window_propagate_key_event (win, ev);
- } else {
-#ifdef DEBUG_ACCELERATOR_HANDLING
- if (debug) {
- cerr << "\taccelerated - done.\n";
+ if (gtk_window_activate_key (win, ev)) {
+ return true;
}
+ }
+
+#ifdef DEBUG_ACCELERATOR_HANDLING
+ if (debug) {
+ cerr << "\tnot accelerated, now propagate\n";
+ }
#endif
- return true;
- }
+ return gtk_window_propagate_key_event (win, ev);
}
/* no modifiers, propagate first */
@@ -532,12 +545,17 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
cerr << "\tpropagation didn't handle, so activate\n";
}
#endif
-#ifdef GTKOSX_ARDOUR_EVENTS_PATCH
- if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) {
- return true;
- }
+
+ if (allow_activating) {
+
+#ifdef GTKOSX
+ if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) {
+ return true;
+ }
#endif
- return gtk_window_activate_key (win, ev);
+ return gtk_window_activate_key (win, ev);
+ }
+
} else {
#ifdef DEBUG_ACCELERATOR_HANDLING
if (debug) {
diff --git a/instant.xml b/instant.xml
new file mode 100644
index 0000000000..450abfbc84
--- /dev/null
+++ b/instant.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<instant>
+ <Editor id="12" mixer-width="Wide" zoom-focus="3" zoom="512.000000" snap-to="12" snap-mode="1" edit-point="EditAtPlayhead" playhead="0" show-waveforms="yes" show-waveforms-recording="yes" show-measures="yes" follow-playhead="yes" xfades-visible="yes" region-list-sort-type="ByEndInFile" mouse-mode="MouseObject" show-editor-mixer="yes">
+ <geometry x_size="1242" y_size="768" x_pos="0" y_pos="0" x_off="0" y_off="0" edit_pane_pos="1024"/>
+ </Editor>
+ <Mixer narrow-strips="no" show-mixer="no"/>
+</instant>
diff --git a/instant.xml.sae b/instant.xml.sae
new file mode 100644
index 0000000000..20b4f928fa
--- /dev/null
+++ b/instant.xml.sae
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<instant>
+ <Editor id="12" mixer-width="Wide" zoom-focus="3" zoom="512.000000" snap-to="12" snap-mode="2" edit-point="EditAtPlayhead" playhead="0" show-waveforms="yes" show-waveforms-recording="yes" show-measures="no" follow-playhead="yes" xfades-visible="yes" region-list-sort-type="ByEndInFile" mouse-mode="MouseObject" show-editor-mixer="yes">
+ <geometry x_size="1242" y_size="768" x_pos="0" y_pos="0" x_off="0" y_off="0" edit_pane_pos="1024"/>
+ </Editor>
+ <Mixer narrow-strips="no" show-mixer="no"/>
+</instant>
diff --git a/libs/appleutility/CAAudioFile.h b/libs/appleutility/CAAudioFile.h
index 2cfb4f3031..ce22bfe466 100644
--- a/libs/appleutility/CAAudioFile.h
+++ b/libs/appleutility/CAAudioFile.h
@@ -43,6 +43,7 @@
#ifndef __CAAudioFile_h__
#define __CAAudioFile_h__
+#include <iostream>
#include <AvailabilityMacros.h>
#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
@@ -98,6 +99,7 @@ public:
// implementation-independent helpers
void Open(const char *filePath) {
FSRef fsref;
+ std::cerr << "Opening " << filePath << std::endl;
XThrowIfError(FSPathMakeRef((UInt8 *)filePath, &fsref, NULL), "locate audio file");
Open(fsref);
}
@@ -112,9 +114,10 @@ public:
// or the file's sample rate is 0 (unknown)
#if CAAF_USE_EXTAUDIOFILE
+#warning HERE WE ARE
public:
- CAAudioFile() : mExtAF(NULL) { }
- virtual ~CAAudioFile() { if (mExtAF) Close(); }
+ CAAudioFile() : mExtAF(NULL) { std::cerr << "Constructing CAAudioFile\n"; }
+ virtual ~CAAudioFile() { std::cerr << "Destroying CAAudiofile @ " << this << std::endl; if (mExtAF) Close(); }
void Open(const FSRef &fsref) {
// open an existing file
@@ -131,6 +134,7 @@ public:
}
void Close() {
+ std::cerr << "\tdisposeo of ext audio file @ " << mExtAF << std::endl;
XThrowIfError(ExtAudioFileDispose(mExtAF), "ExtAudioFileClose failed");
mExtAF = NULL;
}
diff --git a/libs/appleutility/SConscript b/libs/appleutility/SConscript
index c4f65ec81e..7a3a5c8975 100644
--- a/libs/appleutility/SConscript
+++ b/libs/appleutility/SConscript
@@ -4,7 +4,7 @@ import os
import os.path
import glob
-appleutility_files = glob.glob('*.cpp')
+appleutility_files = [ glob.glob('*.cpp') + glob.glob('*.c') + glob.glob('*.C') ]
Import('env install_prefix')
appleutility = env.Clone()
diff --git a/libs/ardour/analyser.cc b/libs/ardour/analyser.cc
index 2e14c74b86..28eeeb190c 100644
--- a/libs/ardour/analyser.cc
+++ b/libs/ardour/analyser.cc
@@ -75,7 +75,7 @@ Analyser::queue_source_for_analysis (boost::shared_ptr<Source> src, bool force)
void
Analyser::work ()
{
- PBD::ThreadCreated (pthread_self(), string ("analyser-") + to_string (pthread_self(), std::dec));
+ PBD::notify_gui_about_thread_creation (pthread_self(), string ("analyser-") + to_string (pthread_self(), std::dec));
while (true) {
analysis_queue_lock.lock ();
diff --git a/libs/ardour/ardour/audio_buffer.h b/libs/ardour/ardour/audio_buffer.h
index 71eaf60ade..9a41e8e093 100644
--- a/libs/ardour/ardour/audio_buffer.h
+++ b/libs/ardour/ardour/audio_buffer.h
@@ -78,6 +78,19 @@ public:
_silent = ( (src.silent() && _silent) || (_silent && gain_coeff == 0) );
}
+
+ /** Accumulate (add) @a len frames FROM THE START OF @a src into self at @a offset
+ * scaling by @a gain_coeff */
+ void accumulate_with_gain_from(const Sample* src_raw, nframes_t len, nframes_t offset, gain_t gain_coeff) {
+ assert(_capacity > 0);
+ assert(offset + len <= _capacity);
+
+ Sample* const dst_raw = _data + offset;
+
+ mix_buffers_with_gain (dst_raw, src_raw, len, gain_coeff);
+
+ _silent = (_silent && gain_coeff == 0);
+ }
void apply_gain(gain_t gain, nframes_t len, nframes_t offset=0) {
apply_gain_to_buffer (_data + offset, len, gain);
diff --git a/libs/ardour/ardour/audioregion.h b/libs/ardour/ardour/audioregion.h
index b8cde44b77..5ebe22e312 100644
--- a/libs/ardour/ardour/audioregion.h
+++ b/libs/ardour/ardour/audioregion.h
@@ -56,6 +56,10 @@ class AudioRegion : public Region
~AudioRegion();
+ void copy_settings (boost::shared_ptr<const AudioRegion>);
+
+ bool source_equivalent (boost::shared_ptr<const Region>) const;
+
bool speed_mismatch (float) const;
boost::shared_ptr<AudioSource> audio_source (uint32_t n=0) const;
@@ -78,8 +82,17 @@ class AudioRegion : public Region
uint32_t chan_n=0, double samples_per_unit= 1.0) const;
/* Readable interface */
+
+ enum ReadOps {
+ ReadOpsNone = 0x0,
+ ReadOpsOwnAutomation = 0x1,
+ ReadOpsOwnScaling = 0x2,
+ ReadOpsCount = 0x4,
+ ReadOpsFades = 0x8
+ };
virtual nframes64_t read (Sample*, nframes64_t pos, nframes64_t cnt, int channel) const;
+ virtual nframes64_t read_with_ops (Sample*, nframes64_t pos, nframes64_t cnt, int channel, ReadOps rops) const;
virtual nframes64_t readable_length() const { return length(); }
virtual nframes_t read_at (Sample *buf, Sample *mixdown_buf,
@@ -151,11 +164,14 @@ class AudioRegion : public Region
private:
friend class RegionFactory;
+ friend class Crossfade;
AudioRegion (boost::shared_ptr<AudioSource>, nframes_t start, nframes_t length);
AudioRegion (boost::shared_ptr<AudioSource>, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags);
AudioRegion (const SourceList &, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags);
AudioRegion (boost::shared_ptr<const AudioRegion>, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags);
+ AudioRegion (boost::shared_ptr<const AudioRegion>, const SourceList&, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags);
+ AudioRegion (boost::shared_ptr<const AudioRegion>);
AudioRegion (boost::shared_ptr<AudioSource>, const XMLNode&);
AudioRegion (SourceList &, const XMLNode&);
@@ -174,7 +190,7 @@ class AudioRegion : public Region
uint32_t chan_n = 0,
nframes_t read_frames = 0,
nframes_t skip_frames = 0,
- bool raw = false) const;
+ ReadOps readops = ReadOps (~0)) const;
void recompute_at_start ();
void recompute_at_end ();
@@ -201,7 +217,6 @@ class AudioRegion : public Region
/* default constructor for derived (compound) types */
AudioRegion (Session& s, nframes_t, nframes_t, std::string name);
- AudioRegion (boost::shared_ptr<const AudioRegion>);
int set_live_state (const XMLNode&, Change&, bool send);
};
diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h
index db481b2f99..4cb6d1a79a 100644
--- a/libs/ardour/ardour/automation_control.h
+++ b/libs/ardour/ardour/automation_control.h
@@ -59,6 +59,10 @@ public:
return ((ARDOUR::AutomationList*)_list.get())->automation_state();
}
+ inline void set_automation_state(AutoState as) {
+ return ((ARDOUR::AutomationList*)_list.get())->set_automation_state(as);
+ }
+
inline void start_touch() {
return ((ARDOUR::AutomationList*)_list.get())->start_touch();
}
diff --git a/libs/ardour/ardour/automation_list.h b/libs/ardour/ardour/automation_list.h
index d5aff74ab9..923967448c 100644
--- a/libs/ardour/ardour/automation_list.h
+++ b/libs/ardour/ardour/automation_list.h
@@ -42,12 +42,12 @@ class AutomationList : public PBD::StatefulDestructible, public Evoral::ControlL
public:
AutomationList (Evoral::Parameter id);
AutomationList (const XMLNode&, Evoral::Parameter id);
+ AutomationList (const AutomationList&);
+ AutomationList (const AutomationList&, double start, double end);
~AutomationList();
virtual boost::shared_ptr<Evoral::ControlList> create(Evoral::Parameter id);
- AutomationList (const AutomationList&);
- AutomationList (const AutomationList&, double start, double end);
AutomationList& operator= (const AutomationList&);
bool operator== (const AutomationList&);
diff --git a/libs/ardour/ardour/configuration_vars.h b/libs/ardour/ardour/configuration_vars.h
index 5565e20401..bbf766d877 100644
--- a/libs/ardour/ardour/configuration_vars.h
+++ b/libs/ardour/ardour/configuration_vars.h
@@ -95,6 +95,7 @@ CONFIG_VARIABLE (bool, solo_latched, "solo-latched", true)
CONFIG_VARIABLE (bool, latched_record_enable, "latched-record-enable", false)
CONFIG_VARIABLE (bool, all_safe, "all-safe", false)
CONFIG_VARIABLE (bool, show_solo_mutes, "show-solo-mutes", false)
+CONFIG_VARIABLE (bool, solo_mute_override, "solo-mute-override", false)
CONFIG_VARIABLE (bool, tape_machine_mode, "tape-machine-mode", false)
/* click */
@@ -161,6 +162,7 @@ CONFIG_VARIABLE (uint32_t, periodic_safety_backup_interval, "periodic-safety-bac
CONFIG_VARIABLE (float, automation_interval, "automation-interval", 50)
CONFIG_VARIABLE (bool, sync_all_route_ordering, "sync-all-route-ordering", true)
CONFIG_VARIABLE (bool, only_copy_imported_files, "only-copy-imported-files", true)
+CONFIG_VARIABLE (bool, new_plugins_active, "new-plugins-active", true)
CONFIG_VARIABLE (std::string, keyboard_layout, "keyboard-layout", "ansi")
CONFIG_VARIABLE (std::string, default_bindings, "default-bindings", "ardour")
CONFIG_VARIABLE (bool, default_narrow_ms, "default-narrow_ms", false)
diff --git a/libs/ardour/ardour/osc.h b/libs/ardour/ardour/osc.h
index d7c2f4bd85..33759feb91 100644
--- a/libs/ardour/ardour/osc.h
+++ b/libs/ardour/ardour/osc.h
@@ -120,6 +120,29 @@ class OSC : public BasicUI, public sigc::trackable
PATH_CALLBACK1(set_transport_speed,f,);
PATH_CALLBACK1(access_action,s,&);
+
+#define PATH_CALLBACK2(name,arg1type,arg2type) \
+ static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \
+ return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, data); \
+ } \
+ int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \
+ if (argc > 1) { \
+ name (argv[0]->arg1type, argv[1]->arg2type); \
+ } \
+ return 0; \
+ }
+
+ PATH_CALLBACK2(route_mute,i,i);
+ PATH_CALLBACK2(route_solo,i,i);
+ PATH_CALLBACK2(route_recenable,i,i);
+ PATH_CALLBACK2(route_set_gain_abs,i,f);
+ PATH_CALLBACK2(route_set_gain_dB,i,f);
+
+ int route_mute (int rid, int yn);
+ int route_solo (int rid, int yn);
+ int route_recenable (int rid, int yn);
+ int route_set_gain_abs (int rid, float level);
+ int route_set_gain_dB (int rid, float dB);
};
}
diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h
index d3c8341623..66f5d2be35 100644
--- a/libs/ardour/ardour/region.h
+++ b/libs/ardour/ardour/region.h
@@ -131,8 +131,9 @@ class Region
nframes_t sync_offset(int& dir) const;
nframes_t sync_position() const;
+ nframes_t sync_point () const;
- nframes_t adjust_to_sync (nframes_t);
+ nframes_t adjust_to_sync (nframes_t) const;
/* first_frame() is an alias; last_frame() just hides some math */
@@ -264,6 +265,7 @@ class Region
const string& name, DataType type, layer_t = 0, Flag flags = DefaultFlags);
Region (boost::shared_ptr<const Region>, nframes_t start, nframes_t length, const string& name, layer_t = 0, Flag flags = DefaultFlags);
+ Region (boost::shared_ptr<const Region>, nframes_t length, const string& name, layer_t = 0, Flag flags = DefaultFlags);
Region (boost::shared_ptr<const Region>);
Region (boost::shared_ptr<Source> src, const XMLNode&);
Region (const SourceList& srcs, const XMLNode&);
@@ -271,6 +273,8 @@ class Region
Region (Session& s, nframes_t start, nframes_t length, const string& name, DataType, layer_t = 0, Flag flags = DefaultFlags);
protected:
+ void copy_stuff (boost::shared_ptr<const Region>, nframes_t start, nframes_t length, const string& name, layer_t, Flag flags);
+
XMLNode& get_short_state (); /* used only by Session */
void send_change (Change);
diff --git a/libs/ardour/ardour/region_factory.h b/libs/ardour/ardour/region_factory.h
index 12437ba998..b88f3b225a 100644
--- a/libs/ardour/ardour/region_factory.h
+++ b/libs/ardour/ardour/region_factory.h
@@ -48,11 +48,12 @@ class RegionFactory {
*/
static boost::shared_ptr<Region> create (boost::shared_ptr<Region>, nframes_t start,
- nframes_t length, std::string name,
+ nframes_t length, const std::string& name,
layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
static boost::shared_ptr<Region> create (boost::shared_ptr<AudioRegion>, nframes_t start,
- nframes_t length, std::string name,
+ nframes_t length, const std::string& name,
layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
+ static boost::shared_ptr<Region> create (boost::shared_ptr<Region>, const SourceList&, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
static boost::shared_ptr<Region> create (boost::shared_ptr<Source>, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
static boost::shared_ptr<Region> create (const SourceList &, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
static boost::shared_ptr<Region> create (Session&, XMLNode&, bool);
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index f963d3b2cf..28d15b7090 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -107,6 +107,8 @@ class Route : public IO
/* end of vfunc-based API */
+ void shift (nframes64_t, nframes64_t);
+
/* override IO::set_gain() to provide group control */
void set_gain (gain_t val, void *src);
@@ -117,7 +119,7 @@ class Route : public IO
void set_solo_safe (bool yn, void *src);
bool solo_safe() const { return _solo_safe; }
-
+
void set_mute (bool yn, void *src);
bool muted() const { return _muted; }
bool solo_muted() const { return desired_solo_gain == 0.0; }
@@ -262,6 +264,7 @@ class Route : public IO
protected:
friend class Session;
+ void catch_up_on_solo_mute_override ();
void set_solo_mute (bool yn);
void set_block_size (nframes_t nframes);
bool has_external_redirects() const;
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 017a78a015..16db305f94 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -413,6 +413,10 @@ class Session : public PBD::StatefulDestructible
double frames_per_smpte_frame() const { return _frames_per_smpte_frame; }
nframes_t smpte_frames_per_hour() const { return _smpte_frames_per_hour; }
+ MIDI::byte get_mtc_smpte_bits() const {
+ return mtc_smpte_bits; /* encoding of SMTPE type for MTC */
+ }
+
float smpte_frames_per_second() const;
bool smpte_drop_frames() const;
@@ -610,6 +614,7 @@ class Session : public PBD::StatefulDestructible
string doing_what;
/* control info */
+ uint32_t total;
SrcQuality quality;
volatile bool freeze;
std::vector<Glib::ustring> paths;
@@ -617,7 +622,6 @@ class Session : public PBD::StatefulDestructible
/* result */
SourceList sources;
-
};
void import_audiofiles (import_status&);
@@ -964,6 +968,10 @@ class Session : public PBD::StatefulDestructible
void add_controllable (boost::shared_ptr<PBD::Controllable>);
void remove_controllable (PBD::Controllable*);
+ /* metadata */
+
+ SessionMetadata & metadata () { return *_metadata; }
+
protected:
friend class AudioEngine;
void set_block_size (nframes_t nframes);
@@ -1457,6 +1465,7 @@ class Session : public PBD::StatefulDestructible
void route_mute_changed (void *src);
void route_solo_changed (void *src, boost::weak_ptr<Route>);
void catch_up_on_solo ();
+ void catch_up_on_solo_mute_override ();
void update_route_solo_state ();
void modify_solo_mute (bool, bool);
void strip_portname_for_solo (string& portname);
@@ -1701,6 +1710,12 @@ class Session : public PBD::StatefulDestructible
uint32_t n_physical_outputs;
uint32_t n_physical_inputs;
+ uint32_t n_physical_audio_outputs;
+ uint32_t n_physical_audio_inputs;
+
+ uint32_t n_physical_midi_outputs;
+ uint32_t n_physical_midi_inputs;
+
int find_all_sources (std::string path, std::set<std::string>& result);
int find_all_sources_across_snapshots (std::set<std::string>& result, bool exclude_this_snapshot);
@@ -1728,8 +1743,10 @@ class Session : public PBD::StatefulDestructible
/* Metadata */
SessionMetadata * _metadata;
- public:
- SessionMetadata & metadata () { return *_metadata; }
+
+ /* used in ::audible_frame() */
+
+ mutable bool have_looped;
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h
index ff8f48cd38..ffeacd3017 100644
--- a/libs/ardour/ardour/slave.h
+++ b/libs/ardour/ardour/slave.h
@@ -186,6 +186,7 @@ class MTC_Slave : public Slave, public sigc::trackable {
SafeTime current;
nframes_t mtc_frame; /* current time */
nframes_t last_inbound_frame; /* when we got it; audio clocked */
+ MIDI::byte last_mtc_fps_byte;
float mtc_speed;
nframes_t first_mtc_frame;
diff --git a/libs/ardour/ardour/svn_revision.h b/libs/ardour/ardour/svn_revision.h
index a44b97b5da..6c11d55e50 100644
--- a/libs/ardour/ardour/svn_revision.h
+++ b/libs/ardour/ardour/svn_revision.h
@@ -1,6 +1,8 @@
#ifndef __ardour_svn_revision_h__
#define __ardour_svn_revision_h__
+
namespace ARDOUR {
-extern const char* svn_revision;
+ extern const char* svn_revision;
}
+
#endif
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index fedd83ba68..b524c5d587 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -124,6 +124,9 @@ class Track : public Route
vector<FreezeRecordProcessorInfo*> processor_info;
bool have_mementos;
FreezeState state;
+ gain_t gain;
+ AutoState gain_automation_state;
+ AutoState pan_automation_state;
};
struct RecEnableControllable : public PBD::Controllable {
diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc
index d30899caf8..816f08cbd5 100644
--- a/libs/ardour/audio_track.cc
+++ b/libs/ardour/audio_track.cc
@@ -586,19 +586,74 @@ AudioTrack::roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame,
/* copy the diskstream data to all output buffers */
-
- const size_t limit = n_process_buffers().n_audio();
- BufferSet& bufs = _session.get_scratch_buffers (n_process_buffers());
-
+
+ size_t limit = n_process_buffers().n_audio();
+ BufferSet& bufs = _session.get_scratch_buffers ();
+ const size_t blimit = bufs.count().n_audio();
+
uint32_t n;
uint32_t i;
- for (i = 0, n = 1; i < limit; ++i, ++n) {
- memcpy (bufs.get_audio(i).data(), b, sizeof (Sample) * nframes);
- if (n < diskstream->n_channels().n_audio()) {
- tmpb = diskstream->playback_buffer(n);
- if (tmpb!=0) {
- b = tmpb;
+ if (limit > blimit) {
+
+ /* example case: auditioner configured for stereo output,
+ but loaded with an 8 channel file. there are only
+ 2 passthrough buffers, but n_process_buffers() will
+ return 8.
+
+ arbitrary decision: map all channels in the diskstream
+ to the outputs available.
+ */
+
+ float scaling = limit/blimit;
+
+ for (i = 0, n = 1; i < blimit; ++i, ++n) {
+
+ /* first time through just copy a channel into
+ the output buffer.
+ */
+
+ Sample* bb = bufs.get_audio (i).data();
+
+ for (nframes_t xx = 0; xx < nframes; ++xx) {
+ bb[xx] = b[xx] * scaling;
+ }
+
+ if (n < diskstream->n_channels().n_audio()) {
+ tmpb = diskstream->playback_buffer(n);
+ if (tmpb!=0) {
+ b = tmpb;
+ }
+ }
+ }
+
+ for (;i < limit; ++i, ++n) {
+
+ /* for all remaining channels, sum with existing
+ data in the output buffers
+ */
+
+ bufs.get_audio (i%blimit).accumulate_with_gain_from (b, nframes, 0, scaling);
+
+ if (n < diskstream->n_channels().n_audio()) {
+ tmpb = diskstream->playback_buffer(n);
+ if (tmpb!=0) {
+ b = tmpb;
+ }
+ }
+
+ }
+
+ limit = blimit;
+
+ } else {
+ for (i = 0, n = 1; i < limit; ++i, ++n) {
+ memcpy (bufs.get_audio (i).data(), b, sizeof (Sample) * nframes);
+ if (n < diskstream->n_channels().n_audio()) {
+ tmpb = diskstream->playback_buffer(n);
+ if (tmpb!=0) {
+ b = tmpb;
+ }
}
}
}
@@ -830,6 +885,11 @@ AudioTrack::freeze (InterThreadInfo& itt)
}
new_playlist = PlaylistFactory::create (DataType::AUDIO, _session, new_playlist_name, false);
+
+ _freeze_record.gain = _gain;
+ _freeze_record.gain_automation_state = _gain_control->automation_state();
+ _freeze_record.pan_automation_state = _panner->automation_state();
+
region_name = new_playlist_name;
/* create a new region from all filesources, keep it private */
@@ -847,6 +907,12 @@ AudioTrack::freeze (InterThreadInfo& itt)
diskstream->use_playlist (boost::dynamic_pointer_cast<AudioPlaylist>(new_playlist));
diskstream->set_record_enabled (false);
+ /* reset stuff that has already been accounted for in the freeze process */
+
+ set_gain (1.0, this);
+ _gain_control->set_automation_state (Off);
+ _panner->set_automation_state (Off);
+
_freeze_record.state = Frozen;
FreezeChange(); /* EMIT SIGNAL */
}
@@ -877,6 +943,9 @@ AudioTrack::unfreeze ()
}
_freeze_record.playlist.reset ();
+ set_gain (_freeze_record.gain, this);
+ _gain_control->set_automation_state (_freeze_record.gain_automation_state);
+ _panner->set_automation_state (_freeze_record.pan_automation_state);
}
_freeze_record.state = UnFrozen;
diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc
index 9c7ea0f13f..16d5e390f8 100644
--- a/libs/ardour/audio_unit.cc
+++ b/libs/ardour/audio_unit.cc
@@ -103,7 +103,15 @@ AUPlugin::~AUPlugin ()
void
AUPlugin::init ()
{
- OSErr err = CAAudioUnit::Open (*(comp.get()), *unit);
+ OSErr err;
+
+ try {
+ err = CAAudioUnit::Open (*(comp.get()), *unit);
+ } catch (...) {
+ error << _("Exception thrown during AudioUnit plugin loading - plugin ignored") << endmsg;
+ cerr << _("Exception thrown during AudioUnit plugin loading - plugin ignored") << endl;
+ throw failed_constructor();
+ }
if (err != noErr) {
error << _("AudioUnit: Could not convert CAComponent to CAAudioUnit") << endmsg;
@@ -1090,6 +1098,7 @@ AUPluginInfo::cached_io_configuration (const std::string& unique_id,
} catch (...) {
warning << string_compose (_("Could not load AU plugin %1 - ignored"), name) << endmsg;
+ cerr << string_compose (_("Could not load AU plugin %1 - ignored"), name) << endl;
return false;
}
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index 788017555a..8b5d4ba42c 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -132,7 +132,7 @@ _thread_init_callback (void *arg)
knows about it.
*/
- PBD::ThreadCreatedWithRequestSize (pthread_self(), X_("Audioengine"), 4096);
+ PBD::notify_gui_about_thread_creation (pthread_self(), X_("Audioengine"), 4096);
MIDI::JACK_MidiPort::set_process_thread (pthread_self());
}
@@ -922,8 +922,6 @@ AudioEngine::halted (void *arg)
ae->_buffer_size = 0;
ae->_frame_rate = 0;
- cerr << "!!! HALTED !!!\n";
-
if (was_running) {
ae->Halted(); /* EMIT SIGNAL */
}
@@ -1318,7 +1316,7 @@ AudioEngine::reconnect_to_jack ()
if (Config->get_jack_time_master()) {
jack_set_timebase_callback (_jack, 0, _jack_timebase_callback, this);
- }
+ }
if (jack_activate (_jack) == 0) {
_running = true;
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc
index c5c04bc33d..5d4748c2d4 100644
--- a/libs/ardour/audioregion.cc
+++ b/libs/ardour/audioregion.cc
@@ -133,9 +133,9 @@ AudioRegion::AudioRegion (const SourceList& srcs, nframes_t start, nframes_t len
AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other, nframes_t offset, nframes_t length, const string& name, layer_t layer, Flag flags)
: Region (other, offset, length, name, layer, flags)
, _automatable(other->session())
- , _fade_in (new AutomationList(Evoral::Parameter(FadeInAutomation)))
- , _fade_out (new AutomationList(Evoral::Parameter(FadeOutAutomation)))
- , _envelope (new AutomationList(Evoral::Parameter(EnvelopeAutomation)))
+ , _fade_in (new AutomationList(*other->_fade_in, offset, offset + length))
+ , _fade_out (new AutomationList(*other->_fade_out, offset, offset + length))
+ , _envelope (new AutomationList(*other->_envelope, offset, offset + length))
{
set<boost::shared_ptr<Source> > unique_srcs;
@@ -185,17 +185,48 @@ AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other, nframes_t
AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other)
: Region (other)
- , _automatable(other->session())
- , _fade_in (new AutomationList(Evoral::Parameter(FadeInAutomation)))
- , _fade_out (new AutomationList(Evoral::Parameter(FadeOutAutomation)))
- , _envelope (new AutomationList(Evoral::Parameter(EnvelopeAutomation)))
+ , _automatable (other->session())
+ , _fade_in (new AutomationList (*other->_fade_in))
+ , _fade_out (new AutomationList (*other->_fade_out))
+ , _envelope (new AutomationList (*other->_envelope))
{
assert(_type == DataType::AUDIO);
_scale_amplitude = other->_scale_amplitude;
- _envelope = other->_envelope;
set_default_fades ();
-
+
+ listen_to_my_curves ();
+ listen_to_my_sources ();
+}
+
+AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other, const SourceList& srcs,
+ nframes_t length, const string& name, layer_t layer, Flag flags)
+ : Region (other, length, name, layer, flags)
+ , _automatable (other->session())
+ , _fade_in (new AutomationList (*other->_fade_in))
+ , _fade_out (new AutomationList (*other->_fade_out))
+ , _envelope (new AutomationList (*other->_envelope))
+{
+ /* make-a-sort-of-copy-with-different-sources constructor (used by audio filter) */
+
+ set<boost::shared_ptr<AudioSource> > unique_srcs;
+
+ for (SourceList::const_iterator i=srcs.begin(); i != srcs.end(); ++i) {
+
+ _sources.push_back (*i);
+ _master_sources.push_back (*i);
+
+ boost::shared_ptr<AudioFileSource> afs = boost::dynamic_pointer_cast<AudioFileSource> ((*i));
+ if (afs) {
+ afs->HeaderPositionOffsetChanged.connect (mem_fun (*this, &AudioRegion::source_offset_changed));
+ }
+ }
+
+ _scale_amplitude = other->_scale_amplitude;
+
+ _fade_in_disabled = 0;
+ _fade_out_disabled = 0;
+
listen_to_my_curves ();
listen_to_my_sources ();
}
@@ -296,19 +327,25 @@ AudioRegion::read_peaks (PeakData *buf, nframes_t npeaks, nframes_t offset, nfra
}
nframes64_t
-AudioRegion::read (Sample* buf, nframes64_t position, nframes64_t cnt, int channel) const
+AudioRegion::read (Sample* buf, nframes64_t timeline_position, nframes64_t cnt, int channel) const
{
/* raw read, no fades, no gain, nada */
- return _read_at (_sources, _length, buf, 0, 0, _position + position, cnt, channel, 0, 0, true);
+ return _read_at (_sources, _length, buf, 0, 0, _position + timeline_position, cnt, channel, 0, 0, ReadOps (0));
+}
+
+nframes64_t
+AudioRegion::read_with_ops (Sample* buf, nframes64_t file_position, nframes64_t cnt, int channel, ReadOps rops) const
+{
+ return _read_at (_sources, _length, buf, 0, 0, file_position, cnt, channel, 0, 0, rops);
}
nframes_t
-AudioRegion::read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, nframes_t position,
+AudioRegion::read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, nframes_t file_position,
nframes_t cnt,
uint32_t chan_n, nframes_t read_frames, nframes_t skip_frames) const
{
/* regular diskstream/butler read complete with fades etc */
- return _read_at (_sources, _length, buf, mixdown_buffer, gain_buffer, position, cnt, chan_n, read_frames, skip_frames, false);
+ return _read_at (_sources, _length, buf, mixdown_buffer, gain_buffer, file_position, cnt, chan_n, read_frames, skip_frames, ReadOps (~0));
}
nframes_t
@@ -325,11 +362,12 @@ AudioRegion::_read_at (const SourceList& srcs, nframes_t limit,
uint32_t chan_n,
nframes_t read_frames,
nframes_t skip_frames,
- bool raw) const
+ ReadOps rops) const
{
nframes_t internal_offset;
nframes_t buf_offset;
nframes_t to_read;
+ bool raw = (rops == ReadOpsNone);
if (muted() && !raw) {
return 0; /* read nothing */
@@ -361,7 +399,7 @@ AudioRegion::_read_at (const SourceList& srcs, nframes_t limit,
mixdown_buffer += buf_offset;
}
- if (!raw) {
+ if (rops & ReadOpsCount) {
_read_data_count = 0;
}
@@ -372,7 +410,7 @@ AudioRegion::_read_at (const SourceList& srcs, nframes_t limit,
return 0; /* "read nothing" */
}
- if (!raw) {
+ if (rops & ReadOpsCount) {
_read_data_count += src->read_data_count();
}
@@ -383,18 +421,12 @@ AudioRegion::_read_at (const SourceList& srcs, nframes_t limit,
*/
memset (mixdown_buffer, 0, sizeof (Sample) * cnt);
-
- /* no fades required */
-
- if (!raw) {
- goto merge;
- }
}
- /* fade in */
-
- if (!raw) {
+ if (rops & ReadOpsFades) {
+ /* fade in */
+
if ((_flags & FadeIn) && Config->get_use_region_fades()) {
nframes_t fade_in_length = (nframes_t) _fade_in->back()->when;
@@ -407,6 +439,7 @@ AudioRegion::_read_at (const SourceList& srcs, nframes_t limit,
fi_limit = min (to_read, fade_in_length - internal_offset);
+
_fade_in->curve().get_vector (internal_offset, internal_offset+fi_limit, gain_buffer, fi_limit);
for (nframes_t n = 0; n < fi_limit; ++n) {
@@ -422,12 +455,12 @@ AudioRegion::_read_at (const SourceList& srcs, nframes_t limit,
/* see if some part of this read is within the fade out */
/* ................. >| REGION
- limit
+ limit
{ } FADE
fade_out_length
^
- limit - fade_out_length
+ limit - fade_out_length
|--------------|
^internal_offset
^internal_offset + to_read
@@ -457,39 +490,43 @@ AudioRegion::_read_at (const SourceList& srcs, nframes_t limit,
}
}
+ }
- /* Regular gain curves */
-
- if (envelope_active()) {
- _envelope->curve().get_vector (internal_offset, internal_offset + to_read, gain_buffer, to_read);
+ /* Regular gain curves and scaling */
+
+ if ((rops & ReadOpsOwnAutomation) && envelope_active()) {
+ _envelope->curve().get_vector (internal_offset, internal_offset + to_read, gain_buffer, to_read);
- if (_scale_amplitude != 1.0f) {
- for (nframes_t n = 0; n < to_read; ++n) {
- mixdown_buffer[n] *= gain_buffer[n] * _scale_amplitude;
- }
- } else {
- for (nframes_t n = 0; n < to_read; ++n) {
- mixdown_buffer[n] *= gain_buffer[n];
- }
+ if ((rops & ReadOpsOwnScaling) && _scale_amplitude != 1.0f) {
+ for (nframes_t n = 0; n < to_read; ++n) {
+ mixdown_buffer[n] *= gain_buffer[n] * _scale_amplitude;
}
- } else if (_scale_amplitude != 1.0f) {
- apply_gain_to_buffer (mixdown_buffer, to_read, _scale_amplitude);
+ } else {
+ for (nframes_t n = 0; n < to_read; ++n) {
+ mixdown_buffer[n] *= gain_buffer[n];
+ }
+ }
+ } else if ((rops & ReadOpsOwnScaling) && _scale_amplitude != 1.0f) {
+
+ // XXX this should be using what in 2.0 would have been:
+ // Session::apply_gain_to_buffer (mixdown_buffer, to_read, _scale_amplitude);
+
+ for (nframes_t n = 0; n < to_read; ++n) {
+ mixdown_buffer[n] *= _scale_amplitude;
}
+ }
- merge:
+ if (!opaque()) {
- if (!opaque()) {
-
- /* gack. the things we do for users.
- */
-
- buf += buf_offset;
+ /* gack. the things we do for users.
+ */
+
+ buf += buf_offset;
- for (nframes_t n = 0; n < to_read; ++n) {
- buf[n] += mixdown_buffer[n];
- }
- }
- }
+ for (nframes_t n = 0; n < to_read; ++n) {
+ buf[n] += mixdown_buffer[n];
+ }
+ }
return to_read;
}
diff --git a/libs/ardour/coreaudiosource.cc b/libs/ardour/coreaudiosource.cc
index 4383f1a696..a6aceb7842 100644
--- a/libs/ardour/coreaudiosource.cc
+++ b/libs/ardour/coreaudiosource.cc
@@ -19,6 +19,8 @@
*/
#include <algorithm>
+#define __STDC_FORMAT_MACROS
+#include <inttypes.h>
#include <pbd/error.h>
#include <ardour/coreaudiosource.h>
@@ -256,7 +258,103 @@ CoreAudioSource::get_soundfile_info (string path, SoundFileInfo& _info, string&
goto out;
}
- _info.format_name = CFStringRefToStdString(name);
+ _info.format_name = "";
+
+ if (absd.mFormatID == kAudioFormatLinearPCM) {
+ if (absd.mFormatFlags & kAudioFormatFlagIsBigEndian) {
+ _info.format_name += "big-endian";
+ } else {
+ _info.format_name += "little-endian";
+ }
+
+ char buf[32];
+ snprintf (buf, sizeof (buf), " %" PRIu32 " bit", absd.mBitsPerChannel);
+ _info.format_name += buf;
+ _info.format_name += '\n';
+
+ if (absd.mFormatFlags & kAudioFormatFlagIsFloat) {
+ _info.format_name += "float";
+ } else {
+ if (absd.mFormatFlags & kAudioFormatFlagIsSignedInteger) {
+ _info.format_name += "signed";
+ } else {
+ _info.format_name += "unsigned";
+ }
+ /* integer is typical, do not show it */
+ }
+
+ if (_info.channels > 1) {
+ if (absd.mFormatFlags & kAudioFormatFlagIsNonInterleaved) {
+ _info.format_name += " noninterleaved";
+ }
+ /* interleaved is the normal case, do not show it */
+ }
+
+ _info.format_name += ' ';
+ }
+
+ switch (absd.mFormatID) {
+ case kAudioFormatLinearPCM:
+ _info.format_name += "PCM";
+ break;
+
+ case kAudioFormatAC3:
+ _info.format_name += "AC3";
+ break;
+
+ case kAudioFormat60958AC3:
+ _info.format_name += "60958 AC3";
+ break;
+
+ case kAudioFormatMPEGLayer1:
+ _info.format_name += "MPEG-1";
+ break;
+
+ case kAudioFormatMPEGLayer2:
+ _info.format_name += "MPEG-2";
+ break;
+
+ case kAudioFormatMPEGLayer3:
+ _info.format_name += "MPEG-3";
+ break;
+
+ case kAudioFormatAppleIMA4:
+ _info.format_name += "IMA-4";
+ break;
+
+ case kAudioFormatMPEG4AAC:
+ _info.format_name += "AAC";
+ break;
+
+ case kAudioFormatMPEG4CELP:
+ _info.format_name += "CELP";
+ break;
+
+ case kAudioFormatMPEG4HVXC:
+ _info.format_name += "HVXC";
+ break;
+
+ case kAudioFormatMPEG4TwinVQ:
+ _info.format_name += "TwinVQ";
+ break;
+
+ /* these really shouldn't show up, but we should do something
+ somewhere else to make sure that doesn't happen. until
+ that is guaranteed, print something anyway.
+ */
+
+ case kAudioFormatTimeCode:
+ _info.format_name += "timecode";
+ break;
+
+ case kAudioFormatMIDIStream:
+ _info.format_name += "MIDI";
+ break;
+
+ case kAudioFormatParameterValueStream:
+ _info.format_name += "parameter values";
+ break;
+ }
// XXX it would be nice to find a way to get this information if it exists
diff --git a/libs/ardour/crossfade.cc b/libs/ardour/crossfade.cc
index 05ea7765f0..3a7b525db6 100644
--- a/libs/ardour/crossfade.cc
+++ b/libs/ardour/crossfade.cc
@@ -217,22 +217,57 @@ Crossfade::initialize ()
_fade_out.freeze ();
_fade_out.clear ();
- _fade_out.add (0.0, 1.0);
- _fade_out.add ((_length * 0.1), 0.99);
- _fade_out.add ((_length * 0.2), 0.97);
- _fade_out.add ((_length * 0.8), 0.03);
- _fade_out.add ((_length * 0.9), 0.01);
- _fade_out.add (_length, 0.0);
+
+#define EQUAL_POWER_MINUS_3DB
+#ifdef EQUAL_POWER_MINUS_3DB
+
+ _fade_out.add ((_length * 0.000000), 1.000000);
+ _fade_out.add ((_length * 0.166667), 0.948859);
+ _fade_out.add ((_length * 0.333333), 0.851507);
+ _fade_out.add ((_length * 0.500000), 0.707946);
+ _fade_out.add ((_length * 0.666667), 0.518174);
+ _fade_out.add ((_length * 0.833333), 0.282192);
+ _fade_out.add ((_length * 1.000000), 0.000000);
+
+#else // EQUAL_POWER_MINUS_6DB
+
+ _fade_out.add ((_length * 0.000000), 1.000000);
+ _fade_out.add ((_length * 0.166667), 0.833033);
+ _fade_out.add ((_length * 0.333333), 0.666186);
+ _fade_out.add ((_length * 0.500000), 0.499459);
+ _fade_out.add ((_length * 0.666667), 0.332853);
+ _fade_out.add ((_length * 0.833333), 0.166366);
+ _fade_out.add ((_length * 1.000000), 0.000000);
+#endif
+
_fade_out.thaw ();
_fade_in.freeze ();
_fade_in.clear ();
- _fade_in.add (0.0, 0.0);
- _fade_in.add ((_length * 0.1), 0.01);
- _fade_in.add ((_length * 0.2), 0.03);
- _fade_in.add ((_length * 0.8), 0.97);
- _fade_in.add ((_length * 0.9), 0.99);
- _fade_in.add (_length, 1.0);
+
+#define EQUAL_POWER_MINUS_3DB
+#ifdef EQUAL_POWER_MINUS_3DB
+
+ _fade_in.add ((_length * 0.000000), 0.000000);
+ _fade_in.add ((_length * 0.166667), 0.282192);
+ _fade_in.add ((_length * 0.333333), 0.518174);
+ _fade_in.add ((_length * 0.500000), 0.707946);
+ _fade_in.add ((_length * 0.666667), 0.851507);
+ _fade_in.add ((_length * 0.833333), 0.948859);
+ _fade_in.add ((_length * 1.000000), 1.000000);
+
+#else // EQUAL_POWER_MINUS_SIX_DB
+
+ _fade_in.add ((_length * 0.000000), 0.000000);
+ _fade_in.add ((_length * 0.166667), 0.166366);
+ _fade_in.add ((_length * 0.333333), 0.332853);
+ _fade_in.add ((_length * 0.500000), 0.499459);
+ _fade_in.add ((_length * 0.666667), 0.666186);
+ _fade_in.add ((_length * 0.833333), 0.833033);
+ _fade_in.add ((_length * 1.000000), 1.000000);
+
+#endif
+
_fade_in.thaw ();
overlap_type = _in->coverage (_out->position(), _out->last_frame());
diff --git a/libs/ardour/export_channel_configuration.cc b/libs/ardour/export_channel_configuration.cc
index a2a289737c..c8db1a6b0d 100644
--- a/libs/ardour/export_channel_configuration.cc
+++ b/libs/ardour/export_channel_configuration.cc
@@ -174,8 +174,7 @@ ExportChannelConfiguration::write_file ()
void *
ExportChannelConfiguration::_write_files (void *arg)
{
-
- PBD::ThreadCreated (pthread_self(), "Export post-processing");
+ notify_gui_about_thread_creation (pthread_self(), "Export post-processing");
// cc can be trated like 'this'
WriterThread & cc (*((WriterThread *) arg));
diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc
index 04b4543b71..8be2e3b8b6 100644
--- a/libs/ardour/globals.cc
+++ b/libs/ardour/globals.cc
@@ -128,6 +128,7 @@ setup_osc ()
return 0;
}
}
+
#endif
int
@@ -204,16 +205,17 @@ ARDOUR::setup_midi ()
<< endmsg;
return 0;
}
+
if (default_mtc_port == 0) {
warning << string_compose (_("No MTC support (MIDI port \"%1\" not available)"), Config->get_mtc_port_name())
<< endmsg;
- }
+ }
if (default_midi_port == 0) {
warning << string_compose (_("No MIDI parameter support (MIDI port \"%1\" not available)"), Config->get_midi_port_name())
<< endmsg;
- }
+ }
if (default_midi_clock_port == 0) {
warning << string_compose (_("No MIDI Clock support (MIDI port \"%1\" not available)"), Config->get_midi_clock_port_name())
diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc
index 3f6e60af33..6b3871c814 100644
--- a/libs/ardour/import.cc
+++ b/libs/ardour/import.cc
@@ -56,8 +56,10 @@
#include <ardour/tempo.h>
#ifdef HAVE_COREAUDIO
+#ifdef USE_COREAUDIO_FOR_FILE_IO
#include <ardour/caimportable.h>
#endif
+#endif
#include "i18n.h"
@@ -69,11 +71,13 @@ static boost::shared_ptr<ImportableSource>
open_importable_source (const string& path, nframes_t samplerate, ARDOUR::SrcQuality quality)
{
#ifdef HAVE_COREAUDIO
+#ifdef USE_COREAUDIO_FOR_FILE_IO
/* see if we can use CoreAudio to handle the IO */
try {
- boost::shared_ptr<CAImportableSource> source(new CAImportableSource(path));
+ CAImportableSource* src = new CAImportableSource(path);
+ boost::shared_ptr<CAImportableSource> source (src);
if (source->samplerate() == samplerate) {
return source;
@@ -87,8 +91,8 @@ open_importable_source (const string& path, nframes_t samplerate, ARDOUR::SrcQua
catch (...) {
/* fall back to SndFile */
-
#endif
+#endif
try {
boost::shared_ptr<SndFileImportableSource> source(new SndFileImportableSource(path));
@@ -96,7 +100,7 @@ open_importable_source (const string& path, nframes_t samplerate, ARDOUR::SrcQua
if (source->samplerate() == samplerate) {
return source;
}
-
+
/* rewrap as a resampled source */
return boost::shared_ptr<ImportableSource>(new ResampledImportableSource(source, samplerate, quality));
@@ -107,8 +111,10 @@ open_importable_source (const string& path, nframes_t samplerate, ARDOUR::SrcQua
}
#ifdef HAVE_COREAUDIO
+#ifdef USE_COREAUDIO_FOR_FILE_IO
}
#endif
+#endif
}
static std::string
@@ -437,7 +443,7 @@ Session::import_audiofiles (import_status& status)
if (source) { // audio
status.doing_what = compose_status_message (*p, source->samplerate(),
- frame_rate(), cnt, status.paths.size());
+ frame_rate(), cnt, status.total);
write_audio_data_to_new_files (source.get(), status, newfiles);
} else if (smf_reader.get()) { // midi
status.doing_what = string_compose(_("loading MIDI file %1"), *p);
@@ -479,8 +485,7 @@ Session::import_audiofiles (import_status& status)
save_state (_name);
- std::copy (all_new_sources.begin(), all_new_sources.end(),
- std::back_inserter(status.sources));
+ std::copy (all_new_sources.begin(), all_new_sources.end(), std::back_inserter(status.sources));
} else {
// this can throw...but it seems very unlikely
std::for_each (all_new_sources.begin(), all_new_sources.end(), remove_file_source);
diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc
index e245712fee..66023f1f4d 100644
--- a/libs/ardour/io.cc
+++ b/libs/ardour/io.cc
@@ -2331,8 +2331,9 @@ void
IO::set_gain (gain_t val, void *src)
{
// max gain at about +6dB (10.0 ^ ( 6 dB * 0.05))
- if (val > 1.99526231f)
+ if (val > 1.99526231f) {
val = 1.99526231f;
+ }
if (src != _gain_control.get()) {
_gain_control->set_value(val);
@@ -2347,7 +2348,7 @@ IO::set_gain (gain_t val, void *src)
}
if (_session.transport_stopped()) {
- _gain = val;
+ // _gain = val;
}
/*
@@ -2541,7 +2542,6 @@ IO::set_active (bool yn)
active_changed(); /* EMIT SIGNAL */
}
-
AudioPort*
IO::audio_input(uint32_t n) const
{
diff --git a/libs/ardour/mtc_slave.cc b/libs/ardour/mtc_slave.cc
index 0a0fbc1529..1a8cd589da 100644
--- a/libs/ardour/mtc_slave.cc
+++ b/libs/ardour/mtc_slave.cc
@@ -16,7 +16,7 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-
+#include <iostream>
#include <errno.h>
#include <poll.h>
#include <sys/types.h>
@@ -43,6 +43,8 @@ MTC_Slave::MTC_Slave (Session& s, MIDI::Port& p)
{
can_notify_on_unknown_rate = true;
+ last_mtc_fps_byte = session.get_mtc_smpte_bits ();
+
rebind (p);
reset ();
}
@@ -96,6 +98,8 @@ MTC_Slave::update_mtc_time (const byte *msg, bool was_full)
smpte.seconds = msg[1];
smpte.frames = msg[0];
+ last_mtc_fps_byte = msg[4];
+
switch (msg[4]) {
case MTC_24_FPS:
smpte.rate = 24;
@@ -120,7 +124,9 @@ MTC_Slave::update_mtc_time (const byte *msg, bool was_full)
default:
/* throttle error messages about unknown MTC rates */
if (can_notify_on_unknown_rate) {
- error << _("Unknown rate/drop value in incoming MTC stream, session values used instead") << endmsg;
+ error << string_compose (_("Unknown rate/drop value %1 in incoming MTC stream, session values used instead"),
+ (int) msg[4])
+ << endmsg;
can_notify_on_unknown_rate = false;
}
smpte.rate = session.smpte_frames_per_second();
@@ -170,8 +176,9 @@ MTC_Slave::update_mtc_time (const byte *msg, bool was_full)
void
MTC_Slave::handle_locate (const MIDI::byte* mmc_tc)
{
- MIDI::byte mtc[4];
+ MIDI::byte mtc[5];
+ mtc[4] = last_mtc_fps_byte;
mtc[3] = mmc_tc[0] & 0xf; /* hrs only */
mtc[2] = mmc_tc[1];
mtc[1] = mmc_tc[2];
diff --git a/libs/ardour/osc.cc b/libs/ardour/osc.cc
index 0c58040ad6..ffd2df63be 100644
--- a/libs/ardour/osc.cc
+++ b/libs/ardour/osc.cc
@@ -32,11 +32,13 @@
#include <pbd/pthread_utils.h>
#include <pbd/file_utils.h>
+#include <pbd/filesystem.h>
#include <ardour/osc.h>
#include <ardour/session.h>
#include <ardour/route.h>
#include <ardour/audio_track.h>
+#include <ardour/dB.h>
#include <ardour/filesystem_paths.h>
#include "i18n.h"
@@ -107,10 +109,10 @@ OSC::start ()
cerr << "OSC @ " << get_server_url () << endl;
- sys::path url_file;
+ PBD::sys::path url_file;
if (find_file_in_search_path (ardour_search_path() + system_config_search_path(),
- "osc_url", url_file)) {
+ "osc_url", url_file)) {
_osc_url_file = url_file.to_string();
ofstream urlfile;
urlfile.open(_osc_url_file.c_str(), ios::trunc);
@@ -154,9 +156,9 @@ OSC::stop ()
unlink(_osc_unix_socket_path.c_str());
}
- if (! _osc_url_file.empty() ) {
- unlink(_osc_url_file.c_str() );
- }
+ if (! _osc_url_file.empty() ) {
+ unlink(_osc_url_file.c_str() );
+ }
return 0;
}
@@ -204,6 +206,12 @@ OSC::register_callbacks()
REGISTER_CALLBACK (serv, "/ardour/rec_enable_toggle", "", rec_enable_toggle);
REGISTER_CALLBACK (serv, "/ardour/toggle_all_rec_enables", "", toggle_all_rec_enables);
+ REGISTER_CALLBACK (serv, "/ardour/routes/mute", "ii", route_mute);
+ REGISTER_CALLBACK (serv, "/ardour/routes/solo", "ii", route_solo);
+ REGISTER_CALLBACK (serv, "/ardour/routes/recenable", "ii", route_recenable);
+ REGISTER_CALLBACK (serv, "/ardour/routes/gainabs", "if", route_set_gain_abs);
+ REGISTER_CALLBACK (serv, "/ardour/routes/gaindB", "if", route_set_gain_dB);
+
#if 0
REGISTER_CALLBACK (serv, "/ardour/*/#current_value", "", current_value);
REGISTER_CALLBACK (serv, "/ardour/set", "", set);
@@ -310,7 +318,7 @@ OSC::get_unix_server_url()
void *
OSC::_osc_receiver(void * arg)
{
- PBD::ThreadCreated (pthread_self(), X_("OSC"));
+ PBD::notify_gui_about_thread_creation (pthread_self(), X_("OSC"));
static_cast<OSC*> (arg)->osc_receiver();
return 0;
@@ -378,7 +386,7 @@ OSC::osc_receiver()
if (pfd[i].revents & POLLIN)
{
// this invokes callbacks
- //cerr << "invoking recv on " << pfd[i].fd << endl;
+ // cerr << "invoking recv on " << pfd[i].fd << endl;
lo_server_recv(srvs[i]);
}
}
@@ -390,7 +398,7 @@ OSC::osc_receiver()
if (_osc_server) {
int fd = lo_server_get_socket_fd(_osc_server);
if (fd >=0) {
- // hack around
+ // hack around
close(fd);
}
lo_server_free (_osc_server);
@@ -500,3 +508,70 @@ OSC::current_value (const char *path, const char *types, lo_arg **argv, int argc
#endif
return 0;
}
+
+int
+OSC::route_mute (int rid, int yn)
+{
+ if (!session) return -1;
+
+ boost::shared_ptr<Route> r = session->route_by_remote_id (rid);
+
+ if (r) {
+ r->set_mute (yn, this);
+ }
+ return 0;
+}
+
+int
+OSC::route_solo (int rid, int yn)
+{
+ if (!session) return -1;
+
+ boost::shared_ptr<Route> r = session->route_by_remote_id (rid);
+
+ if (r) {
+ r->set_solo (yn, this);
+ }
+ return 0;
+}
+
+int
+OSC::route_recenable (int rid, int yn)
+{
+ if (!session) return -1;
+
+ boost::shared_ptr<Route> r = session->route_by_remote_id (rid);
+
+ if (r) {
+ r->set_record_enable (yn, this);
+ }
+ return 0;
+}
+
+int
+OSC::route_set_gain_abs (int rid, float level)
+{
+ if (!session) return -1;
+
+ boost::shared_ptr<Route> r = session->route_by_remote_id (rid);
+
+ if (r) {
+ r->set_gain (level, this);
+ }
+
+ return 0;
+}
+
+int
+OSC::route_set_gain_dB (int rid, float dB)
+{
+ if (!session) return -1;
+
+ boost::shared_ptr<Route> r = session->route_by_remote_id (rid);
+
+ if (r) {
+ r->set_gain (dB_to_coefficient (dB), this);
+ }
+
+ return 0;
+}
diff --git a/libs/ardour/panner.cc b/libs/ardour/panner.cc
index fe0a792b6b..04c744b880 100644
--- a/libs/ardour/panner.cc
+++ b/libs/ardour/panner.cc
@@ -749,10 +749,14 @@ Panner::reset (uint32_t nouts, uint32_t npans)
{
uint32_t n;
bool changed = false;
+ bool do_not_and_did_not_need_panning = ((nouts < 2) && (outputs.size() < 2));
- //configure_io( ChanCount( DataType::AUDIO, nout ), ChanCount( DataType::AUDIO, nin ) )
-
- if (nouts < 2 || (nouts == outputs.size() && npans == _streampanners.size())) {
+ /* if new and old config don't need panning, or if
+ the config hasn't changed, we're done.
+ */
+
+ if (do_not_and_did_not_need_panning ||
+ ((nouts == outputs.size()) && (npans == _streampanners.size()))) {
return;
}
@@ -770,6 +774,10 @@ Panner::reset (uint32_t nouts, uint32_t npans)
changed = true;
}
+ if (nouts < 2) {
+ goto send_changed;
+ }
+
switch (nouts) {
case 0:
break;
@@ -871,6 +879,7 @@ Panner::reset (uint32_t nouts, uint32_t npans)
}
}
+ send_changed:
if (changed) {
Changed (); /* EMIT SIGNAL */
}
diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc
index 0b5a14bf56..8dd1a7abb0 100644
--- a/libs/ardour/plugin_manager.cc
+++ b/libs/ardour/plugin_manager.cc
@@ -130,6 +130,8 @@ PluginManager::PluginManager ()
_lv2_world = new LV2World();
#endif
+ BootMessage (_("Discovering Plugins"));
+
refresh ();
}
@@ -632,7 +634,7 @@ PluginManager::add_favorite (PluginType t, string id)
{
FavoritePlugin fp (t, id);
pair<FavoritePluginList::iterator,bool> res = favorites.insert (fp);
- cerr << "Added " << t << " " << id << " success ? " << res.second << endl;
+ //cerr << "Added " << t << " " << id << " success ? " << res.second << endl;
}
void
diff --git a/libs/ardour/rb_effect.cc b/libs/ardour/rb_effect.cc
index d0a8a3abbf..a1dce0497f 100644
--- a/libs/ardour/rb_effect.cc
+++ b/libs/ardour/rb_effect.cc
@@ -206,7 +206,7 @@ RBEffect::run (boost::shared_ptr<Region> r)
while (pos < read_duration && !tsr.cancel) {
nframes_t this_read = 0;
-
+
for (uint32_t i = 0; i < channels; ++i) {
this_read = 0;
@@ -229,7 +229,7 @@ RBEffect::run (boost::shared_ptr<Region> r)
if (this_read != this_time) {
error << string_compose
(_("tempoize: error reading data from %1 at %2 (wanted %3, got %4)"),
- region->name(), pos + region->position(), this_time, this_read) << endmsg;
+ region->name(), this_position, this_time, this_read) << endmsg;
goto out;
}
}
diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc
index 982eb3e023..6375527664 100644
--- a/libs/ardour/region.cc
+++ b/libs/ardour/region.cc
@@ -38,6 +38,7 @@
#include <ardour/tempo.h>
#include <ardour/region_factory.h>
#include <ardour/filter.h>
+#include <ardour/profile.h>
#include "i18n.h"
@@ -153,50 +154,90 @@ Region::Region (const SourceList& srcs, nframes_t start, nframes_t length, const
/** Create a new Region from part of an existing one */
Region::Region (boost::shared_ptr<const Region> other, nframes_t offset, nframes_t length, const string& name, layer_t layer, Flag flags)
: SessionObject(other->session(), name)
- , _type(other->data_type())
- , _flags(Flag(flags & ~(Locked|PositionLocked|WholeFile|Hidden)))
- , _start(other->_start + offset)
- , _length(length)
- , _position(0)
- , _last_position(0)
- , _positional_lock_style(other->_positional_lock_style)
- , _sync_position(_start)
- , _layer(layer)
- , _first_edit(EditChangesNothing)
- , _frozen(0)
- , _ancestral_start (other->_ancestral_start + offset)
- , _ancestral_length (length)
- , _stretch (other->_stretch)
- , _shift (other->_shift)
- , _valid_transients(false)
- , _read_data_count(0)
- , _pending_changed(Change (0))
- , _last_layer_op(0)
+ , _type (other->data_type())
+
{
- if (other->_sync_position < offset)
- _sync_position = other->_sync_position;
+ _start = other->_start + offset;
+ copy_stuff (other, offset, length, name, layer, flags);
- set<boost::shared_ptr<Source> > unique_srcs;
+ /* if the other region had a distinct sync point
+ set, then continue to use it as best we can.
+ otherwise, reset sync point back to start.
+ */
- for (SourceList::const_iterator i= other->_sources.begin(); i != other->_sources.end(); ++i) {
- _sources.push_back (*i);
- (*i)->GoingAway.connect (bind (mem_fun (*this, &Region::source_deleted), (*i)));
- unique_srcs.insert (*i);
- }
-
- if (other->_sync_position < offset) {
- _sync_position = other->_sync_position;
+ if (other->flags() & SyncMarked) {
+ if (other->_sync_position < _start) {
+ _flags = Flag (_flags & ~SyncMarked);
+ _sync_position = _start;
+ } else {
+ _sync_position = other->_sync_position;
+ }
+ } else {
+ _flags = Flag (_flags & ~SyncMarked);
+ _sync_position = _start;
}
+ if (Profile->get_sae()) {
+ /* reset sync point to start if its ended up
+ outside region bounds.
+ */
- for (SourceList::const_iterator i = other->_master_sources.begin(); i != other->_master_sources.end(); ++i) {
- if (unique_srcs.find (*i) == unique_srcs.end()) {
- (*i)->GoingAway.connect (bind (mem_fun (*this, &Region::source_deleted), (*i)));
+ if (_sync_position < _start || _sync_position >= _start + _length) {
+ _flags = Flag (_flags & ~SyncMarked);
+ _sync_position = _start;
}
- _master_sources.push_back (*i);
}
+}
+
+Region::Region (boost::shared_ptr<const Region> other, nframes_t length, const string& name, layer_t layer, Flag flags)
+ : SessionObject(other->session(), name)
+ , _type (other->data_type())
+{
+ /* create a new Region exactly like another but starting at 0 in its sources */
+
+ _start = 0;
+ copy_stuff (other, 0, length, name, layer, flags);
+
+ /* sync pos is relative to start of file. our start-in-file is now zero,
+ so set our sync position to whatever the the difference between
+ _start and _sync_pos was in the other region.
+
+ result is that our new sync pos points to the same point in our source(s)
+ as the sync in the other region did in its source(s).
+
+ since we start at zero in our source(s), it is not possible to use a sync point that
+ is before the start. reset it to _start if that was true in the other region.
+ */
- assert(_sources.size() > 0);
+ if (other->flags() & SyncMarked) {
+ if (other->_start < other->_sync_position) {
+ /* sync pos was after the start point of the other region */
+ _sync_position = other->_sync_position - other->_start;
+ } else {
+ /* sync pos was before the start point of the other region. not possible here. */
+ _flags = Flag (_flags & ~SyncMarked);
+ _sync_position = _start;
+ }
+ } else {
+ _flags = Flag (_flags & ~SyncMarked);
+ _sync_position = _start;
+ }
+
+ if (Profile->get_sae()) {
+ /* reset sync point to start if its ended up
+ outside region bounds.
+ */
+
+ if (_sync_position < _start || _sync_position >= _start + _length) {
+ _flags = Flag (_flags & ~SyncMarked);
+ _sync_position = _start;
+ }
+ }
+
+ /* reset a couple of things that copy_stuff() gets wrong in this particular case */
+
+ _positional_lock_style = other->_positional_lock_style;
+ _first_edit = other->_first_edit;
}
/** Pure copy constructor */
@@ -337,6 +378,31 @@ Region::~Region ()
}
void
+Region::copy_stuff (boost::shared_ptr<const Region> other, nframes_t offset, nframes_t length, const string& name, layer_t layer, Flag flags)
+{
+ _frozen = 0;
+ _pending_changed = Change (0);
+ _read_data_count = 0;
+ _valid_transients = false;
+
+ _length = length;
+ _last_length = length;
+ _sync_position = other->_sync_position;
+ _ancestral_start = other->_ancestral_start;
+ _ancestral_length = other->_ancestral_length;
+ _stretch = other->_stretch;
+ _shift = other->_shift;
+ _name = name;
+ _last_position = 0;
+ _position = 0;
+ _layer = layer;
+ _flags = Flag (flags & ~(Locked|WholeFile|Hidden));
+ _first_edit = EditChangesNothing;
+ _last_layer_op = 0;
+ _positional_lock_style = AudioTime;
+}
+
+void
Region::set_playlist (boost::weak_ptr<Playlist> wpl)
{
boost::shared_ptr<Playlist> old_playlist = (_playlist.lock());
@@ -982,7 +1048,7 @@ Region::sync_offset (int& dir) const
}
nframes_t
-Region::adjust_to_sync (nframes_t pos)
+Region::adjust_to_sync (nframes_t pos) const
{
int sync_dir;
nframes_t offset = sync_offset (sync_dir);
@@ -1245,16 +1311,26 @@ Region::set_live_state (const XMLNode& node, Change& what_changed, bool send)
if ((prop = node.property ("stretch")) != 0) {
_stretch = atof (prop->value());
- if( _stretch == 0.0 )
+
+ /* fix problem with old sessions corrupted by an impossible
+ value for _stretch
+ */
+ if (_stretch == 0.0) {
_stretch = 1.0;
+ }
} else {
_stretch = 1.0;
}
if ((prop = node.property ("shift")) != 0) {
_shift = atof (prop->value());
- if( _shift == 0.0 )
+
+ /* fix problem with old sessions corrupted by an impossible
+ value for _shift
+ */
+ if (_shift == 0.0) {
_shift = 1.0;
+ }
} else {
_shift = 1.0;
}
diff --git a/libs/ardour/region_factory.cc b/libs/ardour/region_factory.cc
index 88925a7f16..742a65962e 100644
--- a/libs/ardour/region_factory.cc
+++ b/libs/ardour/region_factory.cc
@@ -37,7 +37,7 @@ sigc::signal<void,boost::shared_ptr<Region> > RegionFactory::CheckNewRegion;
boost::shared_ptr<Region>
RegionFactory::create (boost::shared_ptr<Region> region, nframes_t start,
- nframes_t length, std::string name,
+ nframes_t length, const std::string& name,
layer_t layer, Region::Flag flags, bool announce)
{
boost::shared_ptr<const AudioRegion> other_a;
@@ -91,13 +91,40 @@ RegionFactory::create (boost::shared_ptr<const Region> region)
boost::shared_ptr<Region>
RegionFactory::create (boost::shared_ptr<AudioRegion> region, nframes_t start,
- nframes_t length, std::string name,
+ nframes_t length, const std::string& name,
layer_t layer, Region::Flag flags, bool announce)
{
return create (boost::static_pointer_cast<Region> (region), start, length, name, layer, flags, announce);
}
boost::shared_ptr<Region>
+RegionFactory::create (boost::shared_ptr<Region> region, const SourceList& srcs,
+ const std::string& name, layer_t layer, Region::Flag flags, bool announce)
+
+{
+ boost::shared_ptr<const AudioRegion> other;
+
+ /* used by AudioFilter when constructing a new region that is intended to have nearly
+ identical settings to an original, but using different sources.
+ */
+
+ if ((other = boost::dynamic_pointer_cast<AudioRegion>(region)) != 0) {
+ AudioRegion* ar = new AudioRegion (other, srcs, srcs.front()->length(), name, layer, flags);
+ boost::shared_ptr<AudioRegion> arp (ar);
+ boost::shared_ptr<Region> ret (boost::static_pointer_cast<Region> (arp));
+ if (announce) {
+ CheckNewRegion (ret);
+ }
+ return ret;
+ } else {
+ fatal << _("programming error: RegionFactory::create() called with unknown Region type")
+ << endmsg;
+ /*NOTREACHED*/
+ return boost::shared_ptr<Region>();
+ }
+}
+
+boost::shared_ptr<Region>
RegionFactory::create (Session& session, XMLNode& node, bool yn)
{
boost::shared_ptr<Region> r = session.XMLRegionFactory (node, yn);
diff --git a/libs/ardour/reverse.cc b/libs/ardour/reverse.cc
index 02ec2924b0..9c15b1e4d9 100644
--- a/libs/ardour/reverse.cc
+++ b/libs/ardour/reverse.cc
@@ -70,6 +70,7 @@ Reverse::run (boost::shared_ptr<Region> r)
}
fpos = max (fstart, (fstart + region->length() - blocksize));
+
buf = new Sample[blocksize];
to_read = blocksize;
@@ -81,7 +82,7 @@ Reverse::run (boost::shared_ptr<Region> r)
for (n = 0, si = nsrcs.begin(); n < region->n_channels(); ++n, ++si) {
- /* read it in */
+ /* read it in directly from the source */
if (region->audio_source (n)->read (buf, fpos, to_read) != to_read) {
goto out;
@@ -92,7 +93,7 @@ Reverse::run (boost::shared_ptr<Region> r)
for (nframes_t i = 0; i < to_read/2; ++i) {
swap (buf[i],buf[to_read-1-i]);
}
-
+
/* write it out */
boost::shared_ptr<AudioSource> asrc(boost::dynamic_pointer_cast<AudioSource>(*si));
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 5d1a26d3d0..96f26a515c 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -25,6 +25,7 @@
#include <pbd/xml++.h>
#include <pbd/enumwriter.h>
#include <pbd/stacktrace.h>
+#include <pbd/memento_command.h>
#include <ardour/timestamps.h>
#include <ardour/audioengine.h>
@@ -1087,6 +1088,31 @@ Route::set_solo (bool yn, void *src)
_soloed = yn;
solo_changed (src); /* EMIT SIGNAL */
_solo_control->Changed (); /* EMIT SIGNAL */
+ }
+
+ catch_up_on_solo_mute_override ();
+}
+
+void
+Route::catch_up_on_solo_mute_override ()
+{
+ if (Config->get_solo_model() != InverseMute) {
+ return;
+ }
+
+ {
+
+ Glib::Mutex::Lock lm (declick_lock);
+
+ if (_muted) {
+ if (Config->get_solo_mute_override()) {
+ desired_mute_gain = (_soloed?1.0:0.0);
+ } else {
+ desired_mute_gain = 0.0;
+ }
+ } else {
+ desired_mute_gain = 1.0;
+ }
}
}
@@ -1126,7 +1152,12 @@ Route::set_mute (bool yn, void *src)
_mute_control->Changed (); /* EMIT SIGNAL */
Glib::Mutex::Lock lm (declick_lock);
- desired_mute_gain = (yn?0.0f:1.0f);
+
+ if (_soloed && Config->get_solo_mute_override()){
+ desired_mute_gain = 1.0f;
+ } else {
+ desired_mute_gain = (yn?0.0f:1.0f);
+ }
}
}
@@ -1234,7 +1265,6 @@ Route::add_processors (const ProcessorList& others, ProcessorStreams* err)
return -1;
}
- (*i)->activate ();
(*i)->ActiveChanged.connect (bind (mem_fun (_session, &Session::update_latency_compensation), false, false));
}
@@ -3089,3 +3119,50 @@ Route::set_pending_declick (int declick)
}
+/** Shift automation forwards from a particular place, thereby inserting time.
+ * Adds undo commands for any shifts that are performed.
+ *
+ * @param pos Position to start shifting from.
+ * @param frames Amount to shift forwards by.
+ */
+
+void
+Route::shift (nframes64_t pos, nframes64_t frames)
+{
+#ifdef THIS_NEEDS_FIXING_FOR_V3
+
+ /* gain automation */
+ XMLNode &before = _gain_control->get_state ();
+ _gain_control->shift (pos, frames);
+ XMLNode &after = _gain_control->get_state ();
+ _session.add_command (new MementoCommand<AutomationList> (_gain_automation_curve, &before, &after));
+
+ /* pan automation */
+ for (std::vector<StreamPanner*>::iterator i = _panner->begin (); i != _panner->end (); ++i) {
+ Curve & c = (*i)->automation ();
+ XMLNode &before = c.get_state ();
+ c.shift (pos, frames);
+ XMLNode &after = c.get_state ();
+ _session.add_command (new MementoCommand<AutomationList> (c, &before, &after));
+ }
+
+ /* redirect automation */
+ {
+ Glib::RWLock::ReaderLock lm (redirect_lock);
+ for (RedirectList::iterator i = _redirects.begin (); i != _redirects.end (); ++i) {
+
+ set<uint32_t> a;
+ (*i)->what_has_automation (a);
+
+ for (set<uint32_t>::const_iterator j = a.begin (); j != a.end (); ++j) {
+ AutomationList & al = (*i)->automation_list (*j);
+ XMLNode &before = al.get_state ();
+ al.shift (pos, frames);
+ XMLNode &after = al.get_state ();
+ _session.add_command (new MementoCommand<AutomationList> (al, &before, &after));
+ }
+ }
+ }
+#endif
+
+}
diff --git a/libs/ardour/send.cc b/libs/ardour/send.cc
index 034bed77c3..58352a5dfe 100644
--- a/libs/ardour/send.cc
+++ b/libs/ardour/send.cc
@@ -27,6 +27,8 @@
#include <ardour/audio_port.h>
#include <ardour/buffer_set.h>
#include <ardour/meter.h>
+#include <ardour/panner.h>
+
#include "i18n.h"
using namespace ARDOUR;
@@ -55,6 +57,41 @@ Send::Send (const Send& other)
: IOProcessor (other._session, string_compose (_("send %1"), (bitslot = other._session.next_send_id()) + 1), other.placement())
{
_metering = false;
+
+ expected_inputs.set (DataType::AUDIO, 0);
+
+#ifdef THIS_NEEDS_FIXING_FOR_V3
+
+ /* set up the same outputs, and connect them to the same places */
+
+ _io->no_panner_reset = true;
+
+ for (uint32_t i = 0; i < other.n_outputs (); ++i) {
+ add_output_port ("", 0);
+ Port* p = other.output (i);
+ if (p) {
+ /* this is what the other send's output is connected to */
+ const char **connections = p->get_connections ();
+ if (connections) {
+ for (uint32_t c = 0; connections[c]; ++c) {
+ connect_output (output (i), connections [c], 0);
+ }
+ }
+ }
+ }
+
+ /* setup panner */
+
+ _io->no_panner_reset = false;
+
+ /* copy state */
+
+ XMLNode& other_state (const_cast<Send*>(&other)->_panner->get_state());
+ _panner->set_state (other_state);
+
+ delete &other_state;
+#endif
+
ProcessorCreated (this); /* EMIT SIGNAL */
}
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 14ef0e1ac5..875b317936 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -123,23 +123,31 @@ Session::Session (AudioEngine &eng,
_scratch_buffers(new BufferSet()),
_silent_buffers(new BufferSet()),
_mix_buffers(new BufferSet()),
+ mmc (0),
_mmc_port (default_mmc_port),
_mtc_port (default_mtc_port),
_midi_port (default_midi_port),
_midi_clock_port (default_midi_clock_port),
_session_dir (new SessionDirectory(fullpath)),
pending_events (2048),
+ state_tree (0),
+ butler_mixdown_buffer (0),
+ butler_gain_buffer (0),
post_transport_work((PostTransportWork)0),
_send_smpte_update (false),
- midi_requests (128),
+ midi_thread (pthread_t (0)),
+ midi_requests (128), // the size of this should match the midi request pool size
diskstreams (new DiskstreamList),
routes (new RouteList),
auditioner ((Auditioner*) 0),
_total_free_4k_blocks (0),
_bundle_xml_node (0),
_click_io ((IO*) 0),
+ click_data (0),
+ click_emphasis_data (0),
main_outs (0),
_metadata (new SessionMetadata())
+
{
bool new_session;
@@ -196,21 +204,30 @@ Session::Session (AudioEngine &eng,
_scratch_buffers(new BufferSet()),
_silent_buffers(new BufferSet()),
_mix_buffers(new BufferSet()),
+ mmc (0),
_mmc_port (default_mmc_port),
_mtc_port (default_mtc_port),
_midi_port (default_midi_port),
_midi_clock_port (default_midi_clock_port),
_session_dir ( new SessionDirectory(fullpath)),
pending_events (2048),
+ state_tree (0),
+ butler_mixdown_buffer (0),
+ butler_gain_buffer (0),
post_transport_work((PostTransportWork)0),
_send_smpte_update (false),
+ midi_thread (pthread_t (0)),
midi_requests (16),
diskstreams (new DiskstreamList),
routes (new RouteList),
+ auditioner ((Auditioner *) 0),
_total_free_4k_blocks (0),
_bundle_xml_node (0),
- main_outs (0)
-
+ _click_io ((IO *) 0),
+ click_data (0),
+ click_emphasis_data (0),
+ main_outs (0),
+ _metadata (new SessionMetadata())
{
bool new_session;
@@ -316,18 +333,16 @@ Session::destroy ()
/* clear state tree so that no references to objects are held any more */
- if (state_tree) {
- delete state_tree;
- }
+ delete state_tree;
terminate_butler_thread ();
//terminate_midi_thread ();
- if (click_data && click_data != default_click) {
+ if (click_data != default_click) {
delete [] click_data;
}
- if (click_emphasis_data && click_emphasis_data != default_click_emphasis) {
+ if (click_emphasis_data != default_click_emphasis) {
delete [] click_emphasis_data;
}
@@ -471,19 +486,12 @@ Session::destroy ()
i = tmp;
}
- if (butler_mixdown_buffer) {
- delete [] butler_mixdown_buffer;
- }
-
- if (butler_gain_buffer) {
- delete [] butler_gain_buffer;
- }
+ delete [] butler_mixdown_buffer;
+ delete [] butler_gain_buffer;
Crossfade::set_buffer_size (0);
- if (mmc) {
- delete mmc;
- }
+ delete mmc;
}
void
@@ -1213,6 +1221,10 @@ Session::audible_frame () const
nframes_t offset;
nframes_t tf;
+ if (_transport_speed == 0.0f && non_realtime_work_pending()) {
+ return last_stop_frame;
+ }
+
/* the first of these two possible settings for "offset"
mean that the audible frame is stationary until
audio emerges from the latency compensation
@@ -1241,24 +1253,43 @@ Session::audible_frame () const
} else {
tf = _transport_frame;
}
-
- if (_transport_speed == 0) {
- return tf;
- }
-
- if (tf < offset) {
- return 0;
- }
-
+
ret = tf;
if (!non_realtime_work_pending()) {
/* MOVING */
- /* take latency into account */
+ /* check to see if we have passed the first guaranteed
+ audible frame past our last stopping position. if not,
+ the return that last stopping point because in terms
+ of audible frames, we have not moved yet.
+ */
+
+ if (_transport_speed > 0.0f) {
+
+ if (!play_loop || !have_looped) {
+ if (tf < last_stop_frame + offset) {
+ return last_stop_frame;
+
+ }
+ }
+
+
+ /* forwards */
+ ret -= offset;
+
+ } else if (_transport_speed < 0.0f) {
- ret -= offset;
+ /* XXX wot? no backward looping? */
+
+ if (tf > last_stop_frame - offset) {
+ return last_stop_frame;
+ } else {
+ /* backwards */
+ ret += offset;
+ }
+ }
}
return ret;
@@ -1875,6 +1906,10 @@ Session::new_audio_route (int input_channels, int output_channels, uint32_t how_
_engine.get_physical_outputs (DataType::AUDIO, physoutputs);
_engine.get_physical_inputs (DataType::AUDIO, physinputs);
+
+ n_physical_audio_outputs = physoutputs.size();
+ n_physical_audio_inputs = physinputs.size();
+
control_id = ntracks() + nbusses() + 1;
while (how_many) {
@@ -1900,21 +1935,24 @@ Session::new_audio_route (int input_channels, int output_channels, uint32_t how_
goto failure;
}
- for (uint32_t x = 0; n_physical_inputs && x < bus->n_inputs().n_audio(); ++x) {
- port = "";
+ /*
+ for (uint32_t x = 0; n_physical_audio_inputs && x < bus->n_inputs(); ++x) {
+
+ port = "";
+
if (Config->get_input_auto_connect() & AutoConnectPhysical) {
- port = physinputs[((n+x)%n_physical_inputs)];
- }
-
+ port = physinputs[((n+x)%n_physical_audio_inputs)];
+ }
+
if (port.length() && bus->connect_input (bus->input (x), port, this)) {
break;
}
}
+ */
- for (uint32_t x = 0; x < bus->n_outputs().n_audio(); ++x) {
-
+ for (uint32_t x = 0; n_physical_audio_outputs && x < bus->n_outputs().n_audio(); ++x) {
port = "";
if (Config->get_output_auto_connect() & AutoConnectPhysical) {
@@ -2240,8 +2278,6 @@ Session::update_route_solo_state ()
bool is_track = false;
bool signal = false;
- /* caller must hold RouteLock */
-
/* this is where we actually implement solo by changing
the solo mute setting of each track.
*/
@@ -2341,7 +2377,24 @@ Session::catch_up_on_solo ()
has.
*/
update_route_solo_state();
-}
+}
+
+void
+Session::catch_up_on_solo_mute_override ()
+{
+ if (Config->get_solo_model() != InverseMute) {
+ return;
+ }
+
+ /* this is called whenever the param solo-mute-override is
+ changed.
+ */
+ shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ (*i)->catch_up_on_solo_mute_override ();
+ }
+}
shared_ptr<Route>
Session::route_by_name (string name)
@@ -4220,8 +4273,13 @@ Session::get_silent_buffers (ChanCount count)
BufferSet&
Session::get_scratch_buffers (ChanCount count)
{
- assert(_scratch_buffers->available() >= count);
- _scratch_buffers->set_count(count);
+ if (count != ChanCount::ZERO) {
+ assert(_scratch_buffers->available() >= count);
+ _scratch_buffers->set_count(count);
+ } else {
+ _scratch_buffers->set_count (_scratch_buffers->available());
+ }
+
return *_scratch_buffers;
}
diff --git a/libs/ardour/session_butler.cc b/libs/ardour/session_butler.cc
index 02f8569a3d..5fe7a92d3d 100644
--- a/libs/ardour/session_butler.cc
+++ b/libs/ardour/session_butler.cc
@@ -162,7 +162,7 @@ Session::wait_till_butler_finished ()
void *
Session::_butler_thread_work (void* arg)
{
- PBD::ThreadCreated (pthread_self(), X_("Butler"));
+ PBD::notify_gui_about_thread_creation (pthread_self(), X_("Butler"));
return ((Session *) arg)->butler_thread_work ();
return 0;
}
diff --git a/libs/ardour/session_export.cc b/libs/ardour/session_export.cc
index 2e19041b9c..90ad257d3b 100644
--- a/libs/ardour/session_export.cc
+++ b/libs/ardour/session_export.cc
@@ -60,6 +60,7 @@ Session::get_export_status ()
return export_status;
}
+
int
Session::pre_export ()
{
diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc
index 64903f24a2..b85df5b714 100644
--- a/libs/ardour/session_midi.cc
+++ b/libs/ardour/session_midi.cc
@@ -1120,7 +1120,7 @@ Session::midi_thread_work ()
bool restart;
vector<MIDI::Port*> ports;
- PBD::ThreadCreatedWithRequestSize (pthread_self(), X_("MIDI"), 2048);
+ PBD::notify_gui_about_thread_creation (pthread_self(), X_("MIDI"), 2048);
memset (&rtparam, 0, sizeof (rtparam));
rtparam.sched_priority = 9; /* XXX should be relative to audio (JACK) thread */
@@ -1145,6 +1145,7 @@ Session::midi_thread_work ()
pfd[nfds].fd = _mmc_port->selectable();
pfd[nfds].events = POLLIN|POLLHUP|POLLERR;
ports[nfds] = _mmc_port;
+ //cerr << "MIDI port " << nfds << " = MMC @ " << _mmc_port << endl;
nfds++;
}
@@ -1157,6 +1158,7 @@ Session::midi_thread_work ()
pfd[nfds].fd = _mtc_port->selectable();
pfd[nfds].events = POLLIN|POLLHUP|POLLERR;
ports[nfds] = _mtc_port;
+ //cerr << "MIDI port " << nfds << " = MTC @ " << _mtc_port << endl;
nfds++;
}
@@ -1175,6 +1177,7 @@ Session::midi_thread_work ()
pfd[nfds].fd = _midi_port->selectable();
pfd[nfds].events = POLLIN|POLLHUP|POLLERR;
ports[nfds] = _midi_port;
+ // cerr << "MIDI port " << nfds << " = MIDI @ " << _midi_port << endl;
nfds++;
}
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc
index 3b81092a96..c2e78df643 100644
--- a/libs/ardour/session_process.cc
+++ b/libs/ardour/session_process.cc
@@ -677,12 +677,13 @@ Session::follow_slave (nframes_t nframes, nframes_t offset)
#if 0
cerr << "adjust using " << delta
- << " towards " << adjusted_speed
- << " ratio = " << adjusted_speed / slave_speed
- << " current = " << _transport_speed
- << " slave @ " << slave_speed
- << endl;
-#endif
+ << " towards " << adjusted_speed
+ << " ratio = " << adjusted_speed / slave_speed
+ << " current = " << _transport_speed
+ << " slave @ " << slave_speed
+ << endl;
+#endif
+
request_transport_speed (adjusted_speed);
#if 1
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index b1a494584a..cb4a9e5813 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -165,6 +165,7 @@ Session::first_stage_init (string fullpath, string snapshot_name)
g_atomic_int_set (&_record_status, Disabled);
loop_changing = false;
play_loop = false;
+ have_looped = false;
_last_roll_location = 0;
_last_record_location = 0;
pending_locate_frame = 0;
@@ -172,7 +173,6 @@ Session::first_stage_init (string fullpath, string snapshot_name)
pending_locate_flush = false;
audio_dstream_buffer_size = 0;
midi_dstream_buffer_size = 0;
- state_tree = 0;
state_was_pending = false;
set_next_event ();
outbound_mtc_smpte_frame = 0;
@@ -187,9 +187,6 @@ Session::first_stage_init (string fullpath, string snapshot_name)
_state_of_the_state = StateOfTheState(CannotSave|InitialConnecting|Loading);
_slave = 0;
- butler_mixdown_buffer = 0;
- butler_gain_buffer = 0;
- mmc = 0;
session_send_mmc = false;
session_send_mtc = false;
post_transport_work = PostTransportWork (0);
@@ -227,8 +224,6 @@ Session::first_stage_init (string fullpath, string snapshot_name)
waveforms for clicks.
*/
- click_data = 0;
- click_emphasis_data = 0;
click_length = 0;
click_emphasis_length = 0;
_clicking = false;
@@ -362,6 +357,8 @@ Session::second_stage_init (bool new_session)
MidiClockTicker::instance().set_session(*this);
MIDI::Name::MidiPatchManager::instance().set_session(*this);
+ /* initial program change will be delivered later; see ::config_changed() */
+
BootMessage (_("Reset Control Protocols"));
ControlProtocolManager::instance().set_session (*this);
@@ -3272,6 +3269,17 @@ Session::config_changed (const char* parameter_name)
_mmc_port->midimsg (buf, sizeof (buf), 0);
}
+ } else if (PARAM_IS ("initial-program-change")) {
+
+ if (_mmc_port && Config->get_initial_program_change() >= 0) {
+ MIDI::byte* buf = new MIDI::byte[2];
+
+ buf[0] = MIDI::program; // channel zero by default
+ buf[1] = (Config->get_initial_program_change() & 0x7f);
+ // deliver_midi (_mmc_port, buf, 2);
+ }
+ } else if (PARAM_IS ("solo-mute-override")) {
+ catch_up_on_solo_mute_override ();
}
set_dirty ();
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index 7f574d4811..5612429d0d 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -212,8 +212,7 @@ Session::butler_transport_work ()
}
if (post_transport_work & PostTransportReverse) {
-
-
+
clear_clicks();
cumulative_rf_motion = 0;
reset_rf_scale (0);
@@ -449,6 +448,12 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished)
_requested_return_frame = -1;
}
+ have_looped = false;
+
+ send_full_time_code (0);
+ deliver_mmc (MIDI::MachineControl::cmdStop, 0);
+ deliver_mmc (MIDI::MachineControl::cmdLocate, _transport_frame);
+
if (did_record) {
/* XXX its a little odd that we're doing this here
@@ -779,7 +784,7 @@ Session::locate (nframes_t target_frame, bool with_roll, bool with_flush, bool w
}
}
}
-
+ have_looped = true;
TransportLooped(); // EMIT SIGNAL
}
}
@@ -886,6 +891,7 @@ Session::set_transport_speed (float speed, bool abort)
if ((_transport_speed && speed * _transport_speed < 0.0f) || (_last_transport_speed * speed < 0.0f) || (_last_transport_speed == 0.0f && speed < 0.0f)) {
post_transport_work = PostTransportWork (post_transport_work | PostTransportReverse);
+ last_stop_frame = _transport_frame;
}
_last_transport_speed = _transport_speed;
@@ -951,6 +957,7 @@ void
Session::start_transport ()
{
_last_roll_location = _transport_frame;
+ have_looped = false;
/* if record status is Enabled, move it to Recording. if its
already Recording, move it to Disabled.
diff --git a/libs/ardour/sndfileimportable.cc b/libs/ardour/sndfileimportable.cc
index eb0e8a8afb..5cd00a8e96 100644
--- a/libs/ardour/sndfileimportable.cc
+++ b/libs/ardour/sndfileimportable.cc
@@ -1,5 +1,6 @@
#include <ardour/sndfileimportable.h>
#include <sndfile.h>
+#include <iostream>
using namespace ARDOUR;
using namespace std;
diff --git a/libs/ardour/sndfilesource.cc b/libs/ardour/sndfilesource.cc
index 097f0c235d..6a4b5e325d 100644
--- a/libs/ardour/sndfilesource.cc
+++ b/libs/ardour/sndfilesource.cc
@@ -317,7 +317,12 @@ SndFileSource::read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const
if (_info.channels == 1) {
nframes_t ret = sf_read_float (sf, dst, file_cnt);
- _read_data_count = cnt * sizeof(float);
+ _read_data_count = ret * sizeof(float);
+ if (ret != file_cnt) {
+ char errbuf[256];
+ sf_error_str (0, errbuf, sizeof (errbuf) - 1);
+ cerr << string_compose(_("SndFileSource: @ %1 could not read %2 within %3 (%4) (len = %5)"), start, file_cnt, _name.substr (1), errbuf, _length) << endl;
+ }
return ret;
}
}
@@ -381,7 +386,7 @@ SndFileSource::nondestructive_write_unlocked (Sample *data, nframes_t cnt)
}
_write_data_count = cnt;
-
+
return cnt;
}
diff --git a/libs/ardour/source_factory.cc b/libs/ardour/source_factory.cc
index 0b7c0f3d9e..4ada6b766c 100644
--- a/libs/ardour/source_factory.cc
+++ b/libs/ardour/source_factory.cc
@@ -52,7 +52,7 @@ std::list<boost::weak_ptr<AudioSource> > SourceFactory::files_with_peaks;
static void
peak_thread_work ()
{
- PBD::ThreadCreated (pthread_self(), string ("peakbuilder-") + to_string (pthread_self(), std::dec));
+ PBD::notify_gui_about_thread_creation (pthread_self(), string ("peakbuilder-") + to_string (pthread_self(), std::dec));
while (true) {
diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc
index c598a3d279..18194678ed 100644
--- a/libs/ardour/utils.cc
+++ b/libs/ardour/utils.cc
@@ -282,7 +282,7 @@ compute_equal_power_fades (nframes_t nframes, float* in, float* out)
{
double step;
- step = 1.0/nframes;
+ step = 1.0/(nframes-1);
in[0] = 0.0f;
diff --git a/libs/clearlooks/SConscript b/libs/clearlooks-newer/SConscript
index df730460aa..ca527c70da 100644
--- a/libs/clearlooks/SConscript
+++ b/libs/clearlooks-newer/SConscript
@@ -6,7 +6,7 @@ import glob
libclearlooks_files = [
'animation.c',
'cairo-support.c',
- 'clearlooks_draw.c',
+ 'clearlooks_draw.c',
'clearlooks_draw_glossy.c',
'clearlooks_draw_gummy.c',
'clearlooks_draw_inverted.c',
@@ -28,16 +28,23 @@ if env['GTKOSX']:
clearlooks.Append (CCFLAGS = '-DGTKOSX')
libclearlooks = clearlooks.SharedLibrary('clearlooks', libclearlooks_files)
-
usable_libclearlooks = clearlooks.Install ('engines', libclearlooks)
-Default (usable_libclearlooks)
-env.Alias('install',
- env.Install(os.path.join(install_prefix,env['LIBDIR'], 'ardour3', 'engines'),
- libclearlooks))
+if env['GTKOSX']:
+ # GTK looks only for foo.so, not foo.dylib
+ print ("GTKOSX part");
+ really_usable_module = clearlooks.Command ('engines/libclearlooks.so', usable_libclearlooks, 'ln -s libclearlooks.dylib libclearlooks.so', chdir=1)
+ Default (really_usable_module)
+else:
+ print ("non-GTKOSX part");
+ Default (usable_libclearlooks)
+
+env.Alias('install', env.Install (
+ os.path.join(install_prefix,env['LIBDIR'], 'ardour2', 'engines'),
+ libclearlooks))
env.Alias('tarball', env.Distribute (env['DISTTREE'],
- [ 'SConscript' ] +
+ [ 'SConscript', 'bits.c'] +
libclearlooks_files +
glob.glob('*.h')
))
diff --git a/libs/clearlooks/animation.c b/libs/clearlooks-newer/animation.c
index 82af498949..82af498949 100644
--- a/libs/clearlooks/animation.c
+++ b/libs/clearlooks-newer/animation.c
diff --git a/libs/clearlooks/animation.h b/libs/clearlooks-newer/animation.h
index b2059c29c2..da70b6ce66 100644
--- a/libs/clearlooks/animation.h
+++ b/libs/clearlooks-newer/animation.h
@@ -16,7 +16,7 @@
* Boston, MA 02111-1307, USA.
*/
-#include <config.h>
+#include "config.h"
#ifdef HAVE_ANIMATION
#include <gtk/gtk.h>
diff --git a/libs/clearlooks-newer/bits.c b/libs/clearlooks-newer/bits.c
new file mode 100644
index 0000000000..1e871bc5d3
--- /dev/null
+++ b/libs/clearlooks-newer/bits.c
@@ -0,0 +1,121 @@
+static unsigned char dot_intensity[] = {
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x98,0xb9,0xc6,0xb9,0x91,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0xb9,0xbd,0xac,0x9e,0x65,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0xc6,0xac,0x9e,0x96,0x5c,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0xb9,0x9e,0x96,0x62,0x55,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x91,0x65,0x5c,0x55,0x68,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+};
+static unsigned char dot_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x66,0xc4,0xff,0xc4,0x66,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x66,0xdf,0xff,0xff,0xff,0xdf,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0xc4,0xff,0xff,0xff,0xff,0xff,0xc4,0x00,0x00,0x00,
+0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0xc4,0xff,0xff,0xff,0xff,0xff,0xc4,0x00,0x00,0x00,
+0x00,0x00,0x00,0x66,0xdf,0xff,0xff,0xff,0xdf,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x66,0xc4,0xff,0xc4,0x66,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+
+static unsigned char circle_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x23,0x62,0x92,0xb3,0xb2,0x95,0x2b,0x00,0x00,0x00,
+0x00,0x00,0x3e,0xab,0xc9,0xeb,0xf9,0xf5,0xfd,0xff,0x57,0x00,0x00,
+0x00,0x1f,0xb5,0xd8,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x00,
+0x00,0x67,0xb9,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9c,0x00,
+0x00,0x9a,0xe2,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0x00,
+0x00,0xba,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xc0,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0x00,
+0x00,0x9b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9c,0x00,
+0x00,0x2b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x00,
+0x00,0x00,0x57,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x00,0x00,
+0x00,0x00,0x00,0x2b,0x9c,0xe5,0xff,0xe5,0x9c,0x2b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+static unsigned char outline_alpha[] = {
+0x00,0x00,0x00,0x4a,0xac,0xe9,0xff,0xe9,0xac,0x4a,0x00,0x00,0x00,
+0x00,0x00,0x98,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x98,0x00,0x00,
+0x00,0x98,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x98,0x00,
+0x4a,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,
+0xac,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xac,
+0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe9,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe9,
+0xac,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xac,
+0x4a,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,
+0x00,0x98,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x98,0x00,
+0x00,0x00,0x98,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x98,0x00,0x00,
+0x00,0x00,0x00,0x4a,0xac,0xe9,0xff,0xe9,0xac,0x4a,0x00,0x00,0x00,
+};
+static unsigned char inconsistent_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+static unsigned char check_base_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+static unsigned char check_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, 137, 151,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, 183, 172, 7,0x00,0x00,
+0x00,0x00, 12, 18,0x00,0x00, 3, 161, 233, 27,0x00,0x00,0x00,
+0x00,0x00, 199, 239, 101,0x00, 85, 253, 108,0x00,0x00,0x00,0x00,
+0x00,0x00, 83, 245, 250, 75, 206, 230, 8,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00, 104, 252, 243, 253, 124,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00, 2, 162, 255, 241, 28,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00, 18, 228, 163,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00, 78, 62,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+static unsigned char check_inconsistent_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
+0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
+0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
diff --git a/libs/clearlooks/cairo-support.c b/libs/clearlooks-newer/cairo-support.c
index 450c41bcfc..dbe6fd3d34 100644
--- a/libs/clearlooks/cairo-support.c
+++ b/libs/clearlooks-newer/cairo-support.c
@@ -81,31 +81,31 @@ ge_color_from_hsb (gdouble hue,
gdouble m1, m2, m3;
if (!color) return;
-
+
if (brightness <= 0.5)
m2 = brightness * (1 + saturation);
else
m2 = brightness + saturation - brightness * saturation;
-
+
m1 = 2 * brightness - m2;
-
+
hue_shift[0] = hue + 120;
hue_shift[1] = hue;
hue_shift[2] = hue - 120;
-
+
color_shift[0] = color_shift[1] = color_shift[2] = brightness;
-
+
i = (saturation == 0)?3:0;
-
+
for (; i < 3; i++)
{
m3 = hue_shift[i];
-
+
if (m3 > 360)
m3 = MODULA(m3, 360);
else if (m3 < 0)
m3 = 360 - MODULA(ABS(m3), 360);
-
+
if (m3 < 60)
color_shift[i] = m1 + (m2 - m1) * m3 / 60;
else if (m3 < 180)
@@ -114,8 +114,8 @@ ge_color_from_hsb (gdouble hue,
color_shift[i] = m1 + (m2 - m1) * (240 - m3) / 60;
else
color_shift[i] = m1;
- }
-
+ }
+
color->r = color_shift[0];
color->g = color_shift[1];
color->b = color_shift[2];
@@ -163,7 +163,7 @@ ge_gtk_style_to_cairo_color_cube (GtkStyle * style, CairoColorCube *cube)
g_return_if_fail (style && cube);
for (i = 0; i < 5; i++)
- {
+ {
ge_gdk_color_to_cairo (&style->bg[i], &cube->bg[i]);
ge_gdk_color_to_cairo (&style->fg[i], &cube->fg[i]);
@@ -174,7 +174,7 @@ ge_gtk_style_to_cairo_color_cube (GtkStyle * style, CairoColorCube *cube)
ge_gdk_color_to_cairo (&style->base[i], &cube->base[i]);
ge_gdk_color_to_cairo (&style->text[i], &cube->text[i]);
ge_gdk_color_to_cairo (&style->text_aa[i], &cube->text_aa[i]);
- }
+ }
cube->black.r = cube->black.g = cube->black.b = 0;
cube->black.a = 1;
@@ -189,27 +189,17 @@ ge_shade_color(const CairoColor *base, gdouble shade_ratio, CairoColor *composit
gdouble hue = 0;
gdouble saturation = 0;
gdouble brightness = 0;
-
+
g_return_if_fail (base && composite);
-
- if (shade_ratio == 1.0)
- {
- composite->r = base->r;
- composite->g = base->g;
- composite->b = base->b;
- composite->a = base->a;
-
- return;
- }
ge_hsb_from_color (base, &hue, &saturation, &brightness);
-
+
brightness = MIN(brightness*shade_ratio, 1.0);
brightness = MAX(brightness, 0.0);
-
+
saturation = MIN(saturation*shade_ratio, 1.0);
saturation = MAX(saturation, 0.0);
-
+
ge_color_from_hsb (hue, saturation, brightness, composite);
composite->a = base->a;
}
@@ -220,7 +210,7 @@ ge_saturate_color (const CairoColor *base, gdouble saturate_level, CairoColor *c
gdouble hue = 0;
gdouble saturation = 0;
gdouble brightness = 0;
-
+
g_return_if_fail (base && composite);
ge_hsb_from_color (base, &hue, &saturation, &brightness);
@@ -233,7 +223,7 @@ ge_saturate_color (const CairoColor *base, gdouble saturate_level, CairoColor *c
}
void
-ge_mix_color (const CairoColor *color1, const CairoColor *color2,
+ge_mix_color (const CairoColor *color1, const CairoColor *color2,
gdouble mix_factor, CairoColor *composite)
{
g_return_if_fail (color1 && color2 && composite);
@@ -256,7 +246,7 @@ ge_gdk_drawable_to_cairo (GdkDrawable *window, GdkRectangle *area)
cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);
- if (area)
+ if (area)
{
cairo_rectangle (cr, area->x, area->y, area->width, area->height);
cairo_clip_preserve (cr);
@@ -287,8 +277,8 @@ ge_cairo_set_gdk_color_with_alpha (cairo_t *cr, const GdkColor *color, gdouble a
void
ge_cairo_pattern_add_color_stop_color (cairo_pattern_t *pattern,
- gfloat offset,
- const CairoColor *color)
+ gfloat offset,
+ const CairoColor *color)
{
g_return_if_fail (pattern && color);
@@ -296,10 +286,10 @@ ge_cairo_pattern_add_color_stop_color (cairo_pattern_t *pattern,
}
void
-ge_cairo_pattern_add_color_stop_shade (cairo_pattern_t *pattern,
- gdouble offset,
- const CairoColor *color,
- gdouble shade)
+ge_cairo_pattern_add_color_stop_shade(cairo_pattern_t *pattern,
+ gdouble offset,
+ const CairoColor *color,
+ gdouble shade)
{
CairoColor shaded;
@@ -312,14 +302,12 @@ ge_cairo_pattern_add_color_stop_shade (cairo_pattern_t *pattern,
ge_shade_color(color, shade, &shaded);
}
- ge_cairo_pattern_add_color_stop_color(pattern, offset, &shaded);
+ ge_cairo_pattern_add_color_stop_color(pattern, offset, &shaded);
}
-/*
- * This function will draw a rounded corner at position x,y. If the radius
+/* This function will draw a rounded corner at position x,y. If the radius
* is very small (or negative) it will instead just do a line_to.
- * ge_cairo_rounded_corner assumes clockwise drawing.
- */
+ * ge_cairo_rounded_corner assumes clockwise drawing. */
void
ge_cairo_rounded_corner (cairo_t *cr,
double x,
@@ -333,29 +321,28 @@ ge_cairo_rounded_corner (cairo_t *cr,
}
else
{
- switch (corner)
- {
- case CR_CORNER_NONE:
- cairo_line_to (cr, x, y);
- break;
- case CR_CORNER_TOPLEFT:
- cairo_arc (cr, x + radius, y + radius, radius, G_PI, G_PI * 3/2);
- break;
- case CR_CORNER_TOPRIGHT:
- cairo_arc (cr, x - radius, y + radius, radius, G_PI * 3/2, G_PI * 2);
- break;
- case CR_CORNER_BOTTOMRIGHT:
- cairo_arc (cr, x - radius, y - radius, radius, 0, G_PI * 1/2);
- break;
- case CR_CORNER_BOTTOMLEFT:
- cairo_arc (cr, x + radius, y - radius, radius, G_PI * 1/2, G_PI);
- break;
-
- default:
- /* A bitfield and not a sane value ... */
- g_assert_not_reached ();
- cairo_line_to (cr, x, y);
- return;
+ switch (corner) {
+ case CR_CORNER_NONE:
+ cairo_line_to (cr, x, y);
+ break;
+ case CR_CORNER_TOPLEFT:
+ cairo_arc (cr, x + radius, y + radius, radius, G_PI, G_PI * 3/2);
+ break;
+ case CR_CORNER_TOPRIGHT:
+ cairo_arc (cr, x - radius, y + radius, radius, G_PI * 3/2, G_PI * 2);
+ break;
+ case CR_CORNER_BOTTOMRIGHT:
+ cairo_arc (cr, x - radius, y - radius, radius, 0, G_PI * 1/2);
+ break;
+ case CR_CORNER_BOTTOMLEFT:
+ cairo_arc (cr, x + radius, y - radius, radius, G_PI * 1/2, G_PI);
+ break;
+
+ default:
+ /* A bitfield and not a sane value ... */
+ g_assert_not_reached ();
+ cairo_line_to (cr, x, y);
+ return;
}
}
}
@@ -408,9 +395,9 @@ ge_cairo_rounded_rectangle (cairo_t *cr,
/* ge_cairo_stroke_rectangle.
*
- * A simple function to stroke the rectangle { x, y, w, h}.
- * (This function only exists because of a cairo performance bug that
- * has been fixed and it may be a good idea to get rid of it again.)
+ * A simple function to stroke the rectangle { x, y, w, h}.
+ * (This function only exists because of a cairo performance bug that
+ * has been fixed and it may be a good idea to get rid of it again.)
*/
void
ge_cairo_stroke_rectangle (cairo_t *cr, double x, double y, double w, double h)
@@ -419,48 +406,19 @@ ge_cairo_stroke_rectangle (cairo_t *cr, double x, double y, double w, double h)
cairo_stroke (cr);
}
-void
-ge_cairo_inner_rectangle (cairo_t *cr,
- double x, double y,
- double width, double height)
-{
- double line_width = cairo_get_line_width (cr);
-
- cairo_rectangle (cr, x + line_width / 2.0,
- y + line_width / 2.0,
- width - line_width,
- height - line_width);
-}
-
-void
-ge_cairo_inner_rounded_rectangle (cairo_t *cr,
- double x, double y,
- double width, double height,
- double radius, CairoCorners corners)
-{
- double line_width = cairo_get_line_width (cr);
-
- ge_cairo_rounded_rectangle (cr,
- x + line_width / 2.0,
- y + line_width / 2.0,
- width - line_width,
- height - line_width,
- radius, corners);
-}
-
/***********************************************
* ge_cairo_simple_border -
*
* A simple routine to draw thin squared
* borders with a topleft and bottomright color.
- *
+ *
* It originated in Smooth-Engine.
***********************************************/
void
ge_cairo_simple_border (cairo_t *cr,
- const CairoColor * tl, const CairoColor * br,
- gint x, gint y, gint width, gint height,
- gboolean topleft_overlap)
+ const CairoColor * tl, const CairoColor * br,
+ gint x, gint y, gint width, gint height,
+ gboolean topleft_overlap)
{
gboolean solid_color;
@@ -487,7 +445,7 @@ ge_cairo_simple_border (cairo_t *cr,
cairo_stroke (cr);
}
-
+
ge_cairo_set_color(cr, tl);
cairo_move_to(cr, x + 0.5, y + height - 0.5);
@@ -513,9 +471,9 @@ ge_cairo_simple_border (cairo_t *cr,
}
void ge_cairo_polygon (cairo_t *cr,
- const CairoColor *color,
- GdkPoint *points,
- gint npoints)
+ const CairoColor *color,
+ GdkPoint *points,
+ gint npoints)
{
int i = 0;
@@ -545,12 +503,12 @@ void ge_cairo_polygon (cairo_t *cr,
}
void ge_cairo_line (cairo_t *cr,
- const CairoColor *color,
- gint x1,
- gint y1,
- gint x2,
- gint y2)
-{
+ const CairoColor *color,
+ gint x1,
+ gint y1,
+ gint x2,
+ gint y2)
+{
cairo_save(cr);
ge_cairo_set_color(cr, color);
@@ -626,19 +584,18 @@ ge_cairo_exchange_axis (cairo_t *cr,
***********************************************/
void
ge_cairo_pattern_fill(cairo_t *canvas,
- CairoPattern *pattern,
- gint x,
- gint y,
- gint width,
- gint height)
+ CairoPattern *pattern,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
{
cairo_matrix_t original_matrix, current_matrix;
if (pattern->operator == CAIRO_OPERATOR_DEST)
+ {
return;
-
- if (width <= 0 || height <= 0)
- return;
+ }
cairo_pattern_get_matrix(pattern->handle, &original_matrix);
current_matrix = original_matrix;
@@ -684,7 +641,7 @@ ge_cairo_pattern_fill(cairo_t *canvas,
cairo_save(canvas);
cairo_set_source(canvas, pattern->handle);
- cairo_set_operator(canvas, pattern->operator);
+ cairo_set_operator(canvas, pattern->operator);
cairo_rectangle(canvas, x, y, width, height);
cairo_fill (canvas);
@@ -701,7 +658,7 @@ ge_cairo_pattern_fill(cairo_t *canvas,
***********************************************/
CairoPattern*
ge_cairo_color_pattern(CairoColor *base)
-{
+{
CairoPattern * result = g_new0(CairoPattern, 1);
#if ((CAIRO_VERSION_MAJOR < 1) || ((CAIRO_VERSION_MAJOR == 1) && (CAIRO_VERSION_MINOR < 2)))
@@ -711,10 +668,10 @@ ge_cairo_color_pattern(CairoColor *base)
result->scale = GE_DIRECTION_NONE;
result->translate = GE_DIRECTION_NONE;
- result->handle = cairo_pattern_create_rgba(base->r,
- base->g,
- base->b,
- base->a);
+ result->handle = cairo_pattern_create_rgba(base->r,
+ base->g,
+ base->b,
+ base->a);
result->operator = CAIRO_OPERATOR_SOURCE;
@@ -728,14 +685,14 @@ ge_cairo_color_pattern(CairoColor *base)
***********************************************/
CairoPattern*
ge_cairo_pixbuf_pattern(GdkPixbuf *pixbuf)
-{
+{
CairoPattern * result = g_new0(CairoPattern, 1);
cairo_t *canvas;
cairo_surface_t * surface;
gint width, height;
- #if ((CAIRO_VERSION_MAJOR < 1) || ((CAIRO_VERSION_MAJOR == 1) && (CAIRO_VERSION_MINOR < 2)))
+ #if ((CAIRO_VERSION_MAJOR < 1) || ((CAIRO_VERSION_MAJOR == 1) && (CAIRO_VERSION_MINOR < 2)))
result->type = CAIRO_PATTERN_TYPE_SURFACE;
#endif
@@ -780,8 +737,8 @@ ge_cairo_pixmap_pattern(GdkPixmap *pixmap)
gdk_drawable_get_size (GDK_DRAWABLE (pixmap), &width, &height);
pixbuf = gdk_pixbuf_get_from_drawable(NULL, GDK_DRAWABLE (pixmap),
- gdk_drawable_get_colormap(GDK_DRAWABLE (pixmap)),
- 0, 0, 0, 0, width, height);
+ gdk_drawable_get_colormap(GDK_DRAWABLE (pixmap)),
+ 0, 0, 0, 0, width, height);
result = ge_cairo_pixbuf_pattern(pixbuf);
@@ -800,9 +757,9 @@ ge_cairo_pixmap_pattern(GdkPixmap *pixmap)
***********************************************/
CairoPattern *
ge_cairo_linear_shade_gradient_pattern(CairoColor *base,
- gdouble shade1,
- gdouble shade2,
- gboolean vertical)
+ gdouble shade1,
+ gdouble shade2,
+ gboolean vertical)
{
CairoPattern * result = g_new0(CairoPattern, 1);
@@ -839,13 +796,12 @@ ge_cairo_pattern_destroy(CairoPattern *pattern)
{
if (pattern->handle)
cairo_pattern_destroy(pattern->handle);
-
+
g_free(pattern);
}
}
-/*
- * The following function will be called by GTK+ when the module
+/* The following function will be called by GTK+ when the module
* is loaded and checks to see if we are compatible with the
* version of GTK+ that loads us.
*/
@@ -853,7 +809,7 @@ GE_EXPORT const gchar* g_module_check_init (GModule *module);
const gchar*
g_module_check_init (GModule *module)
{
- return gtk_check_version (GTK_MAJOR_VERSION,
- GTK_MINOR_VERSION,
- GTK_MICRO_VERSION - GTK_INTERFACE_AGE);
+ return gtk_check_version (GTK_MAJOR_VERSION,
+ GTK_MINOR_VERSION,
+ GTK_MICRO_VERSION - GTK_INTERFACE_AGE);
}
diff --git a/libs/clearlooks/cairo-support.h b/libs/clearlooks-newer/cairo-support.h
index 2abcb81609..12163b0469 100644
--- a/libs/clearlooks/cairo-support.h
+++ b/libs/clearlooks-newer/cairo-support.h
@@ -101,8 +101,6 @@ GE_INTERNAL void ge_cairo_rounded_corner (cairo_t *cr, double x, double y, doubl
GE_INTERNAL void ge_cairo_rounded_rectangle (cairo_t *cr, double x, double y, double w, double h, double radius, CairoCorners corners);
GE_INTERNAL void ge_cairo_stroke_rectangle (cairo_t *cr, double x, double y, double w, double h);
-GE_INTERNAL void ge_cairo_inner_rectangle (cairo_t *cr, double x, double y, double width, double height);
-GE_INTERNAL void ge_cairo_inner_rounded_rectangle (cairo_t *cr, double x, double y, double width, double height, double radius, CairoCorners corners);
GE_INTERNAL void ge_cairo_simple_border (cairo_t *cr, const CairoColor * tl, const CairoColor * br, gint x, gint y, gint width, gint height, gboolean topleft_overlap);
GE_INTERNAL void ge_cairo_line (cairo_t *cr, const CairoColor *color, gint x1, gint y1, gint x2, gint y2);
diff --git a/libs/clearlooks/clearlooks_draw.c b/libs/clearlooks-newer/clearlooks_draw.c
index a6586ab0d6..614317ea3b 100644
--- a/libs/clearlooks/clearlooks_draw.c
+++ b/libs/clearlooks-newer/clearlooks_draw.c
@@ -31,12 +31,6 @@
#include <cairo.h>
-/* Normal shadings */
-#define SHADE_TOP 1.055
-#define SHADE_CENTER_TOP 1.01
-#define SHADE_CENTER_BOTTOM 0.98
-#define SHADE_BOTTOM 0.90
-
typedef void (*menubar_draw_proto) (cairo_t *cr,
const ClearlooksColors *colors,
const WidgetParameters *params,
@@ -44,124 +38,98 @@ typedef void (*menubar_draw_proto) (cairo_t *cr,
int x, int y, int width, int height);
static void
-clearlooks_draw_inset (cairo_t *cr,
- const CairoColor *bg_color,
- double x, double y, double width, double height,
+clearlooks_draw_inset (cairo_t *cr,
+ const CairoColor *bg_color,
+ double x, double y, double w, double h,
double radius, uint8 corners)
{
CairoColor shadow;
CairoColor highlight;
- double line_width;
- double min = MIN (width, height);
-
- line_width = cairo_get_line_width (cr);
/* not really sure of shading ratios... we will think */
ge_shade_color (bg_color, 0.94, &shadow);
ge_shade_color (bg_color, 1.06, &highlight);
/* highlight */
- cairo_save (cr);
+ cairo_move_to (cr, x + w + (radius * -0.2928932188), y - (radius * -0.2928932188)); /* 0.2928932... 1-sqrt(2)/2 gives middle of curve */
- cairo_move_to (cr, x, y + height);
- cairo_line_to (cr, x + min / 2.0, y + height - min / 2.0);
- cairo_line_to (cr, x + width - min / 2.0, y + min / 2.0);
- cairo_line_to (cr, x + width, y);
- cairo_line_to (cr, x, y);
- cairo_close_path (cr);
-
- cairo_clip (cr);
+ if (corners & CR_CORNER_TOPRIGHT)
+ cairo_arc (cr, x + w - radius, y + radius, radius, G_PI * 1.75, G_PI * 2);
+ else
+ cairo_line_to (cr, x + w, y);
- ge_cairo_rounded_rectangle (cr, x + line_width / 2.0, y + line_width / 2.0,
- width - line_width, height - line_width,
- radius, corners);
+ if (corners & CR_CORNER_BOTTOMRIGHT)
+ cairo_arc (cr, x + w - radius, y + h - radius, radius, 0, G_PI * 0.5);
+ else
+ cairo_line_to (cr, x + w, y + h);
- ge_cairo_set_color (cr, &shadow);
+ if (corners & CR_CORNER_BOTTOMLEFT)
+ cairo_arc (cr, x + radius, y + h - radius, radius, G_PI * 0.5, G_PI * 0.75);
+ else
+ cairo_line_to (cr, x, y + h);
+
+ ge_cairo_set_color (cr, &highlight);
cairo_stroke (cr);
-
- cairo_restore (cr);
/* shadow */
- cairo_save (cr);
+ cairo_move_to (cr, x + (radius * 0.2928932188), y + h + (radius * -0.2928932188));
- cairo_move_to (cr, x, y + height);
- cairo_line_to (cr, x + min / 2.0, y + height - min / 2.0);
- cairo_line_to (cr, x + width - min / 2.0, y + min / 2.0);
- cairo_line_to (cr, x + width, y);
- cairo_line_to (cr, x + width, y + height);
- cairo_close_path (cr);
-
- cairo_clip (cr);
+ if (corners & CR_CORNER_BOTTOMLEFT)
+ cairo_arc (cr, x + radius, y + h - radius, radius, M_PI * 0.75, M_PI);
+ else
+ cairo_line_to (cr, x, y + h);
- ge_cairo_rounded_rectangle (cr, x + line_width / 2.0, y + line_width / 2.0,
- width - line_width, height - line_width,
- radius, corners);
+ if (corners & CR_CORNER_TOPLEFT)
+ cairo_arc (cr, x + radius, y + radius, radius, M_PI, M_PI * 1.5);
+ else
+ cairo_line_to (cr, x, y);
- ge_cairo_set_color (cr, &highlight);
- cairo_stroke (cr);
+ if (corners & CR_CORNER_TOPRIGHT)
+ cairo_arc (cr, x + w - radius, y + radius, radius, M_PI * 1.5, M_PI * 1.75);
+ else
+ cairo_line_to (cr, x + w, y);
- cairo_restore (cr);
+ ge_cairo_set_color (cr, &shadow);
+ cairo_stroke (cr);
}
static void
clearlooks_draw_shadow (cairo_t *cr, const ClearlooksColors *colors, gfloat radius, int width, int height)
{
- CairoColor shadow;
- cairo_save (cr);
-
+ CairoColor shadow;
ge_shade_color (&colors->shade[6], 0.92, &shadow);
cairo_set_line_width (cr, 1.0);
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
-
+
cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, 0.1);
-
- cairo_move_to (cr, width - 0.5, radius);
- ge_cairo_rounded_corner (cr, width - 0.5, height - 0.5, radius, CR_CORNER_BOTTOMRIGHT);
- cairo_line_to (cr, radius, height - 0.5);
+
+ cairo_move_to (cr, width, radius);
+ ge_cairo_rounded_corner (cr, width, height, radius, CR_CORNER_BOTTOMRIGHT);
+ cairo_line_to (cr, radius, height);
cairo_stroke (cr);
- cairo_restore (cr);
}
-/* This is copied at least in clearlooks_draw_gummy.c.
- * KEEP IN SYNC IF POSSIBLE! */
static void
clearlooks_draw_top_left_highlight (cairo_t *cr, const CairoColor *color,
const WidgetParameters *params,
- int x, int y, int width, int height,
- gdouble radius, CairoCorners corners)
+ int width, int height, gdouble radius)
{
- CairoColor hilight;
-
- double line_width = cairo_get_line_width (cr);
- double offset = line_width / 2.0;
- double light_top, light_bottom, light_left, light_right;
-
- cairo_save (cr);
+ CairoColor hilight;
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
+ double light_top = params->ythickness-1,
+ light_bottom = height - params->ythickness - 1,
+ light_left = params->xthickness-1,
+ light_right = width - params->xthickness - 1;
- light_top = y + offset;
- light_bottom = y + height;
- light_left = x + offset;
- light_right = x + width;
-
- if (corners & CR_CORNER_BOTTOMLEFT)
- light_bottom -= radius;
- if (corners & CR_CORNER_TOPRIGHT)
- light_right -= radius;
+ ge_shade_color (color, 1.3, &hilight);
+ cairo_move_to (cr, light_left, light_bottom - (int)radius/2);
- ge_shade_color (color, params->style_constants->topleft_highlight_shade, &hilight);
- cairo_move_to (cr, light_left, light_bottom);
+ ge_cairo_rounded_corner (cr, light_left, light_top, radius, params->corners & CR_CORNER_TOPLEFT);
- ge_cairo_rounded_corner (cr, light_left, light_top, radius, corners & CR_CORNER_TOPLEFT);
-
- cairo_line_to (cr, light_right, light_top);
- cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, params->style_constants->topleft_highlight_alpha);
+ cairo_line_to (cr, light_right - (int)radius/2, light_top);
+ cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5);
cairo_stroke (cr);
-
- cairo_restore (cr);
}
#ifdef DEVELOPMENT
@@ -179,46 +147,47 @@ clearlooks_draw_highlight_and_shade (cairo_t *cr, const ClearlooksColors *colors
double x = 1.0;
double y = 1.0;
- ge_shade_color (&colors->bg[0], 1.06, &hilight);
- ge_shade_color (&colors->bg[0], 0.94, &shadow);
-
- width -= 2;
- height -= 2;
+ ge_shade_color (&colors->bg[GTK_STATE_NORMAL], 1.06, &hilight);
+ ge_shade_color (&colors->bg[GTK_STATE_NORMAL], 0.94, &shadow);
+ width -= 3;
+ height -= 3;
+
cairo_save (cr);
-
+
/* Top/Left highlight */
if (corners & CR_CORNER_BOTTOMLEFT)
- cairo_move_to (cr, x + 0.5, y+height-radius);
+ cairo_move_to (cr, x, y+height-radius);
else
- cairo_move_to (cr, x + 0.5, y+height);
-
- ge_cairo_rounded_corner (cr, x + 0.5, y + 0.5, radius, corners & CR_CORNER_TOPLEFT);
+ cairo_move_to (cr, x, y+height);
+
+ ge_cairo_rounded_corner (cr, x, y, radius, corners & CR_CORNER_TOPLEFT);
if (corners & CR_CORNER_TOPRIGHT)
- cairo_line_to (cr, x+width-radius, y + 0.5);
+ cairo_line_to (cr, x+width-radius, y);
else
- cairo_line_to (cr, x+width, y + 0.5);
-
+ cairo_line_to (cr, x+width, y);
+
if (params->shadow & CL_SHADOW_OUT)
ge_cairo_set_color (cr, &hilight);
else
ge_cairo_set_color (cr, &shadow);
-
+
cairo_stroke (cr);
-
+
/* Bottom/Right highlight -- this includes the corners */
- cairo_arc (cr, x + width - 0.5 - radius, y + radius, radius, G_PI * (3/2.0+1/4.0), G_PI * 2);
- ge_cairo_rounded_corner (cr, x+width - 0.5, y+height - 0.5, radius, corners & CR_CORNER_BOTTOMRIGHT);
- cairo_arc (cr, x + radius, y + height - 0.5 - radius, radius, G_PI * 1/2, G_PI * 3/4);
-
+ cairo_move_to (cr, x+width-radius, y); /* topright and by radius to the left */
+ ge_cairo_rounded_corner (cr, x+width, y, radius, corners & CR_CORNER_TOPRIGHT);
+ ge_cairo_rounded_corner (cr, x+width, y+height, radius, corners & CR_CORNER_BOTTOMRIGHT);
+ ge_cairo_rounded_corner (cr, x, y+height, radius, corners & CR_CORNER_BOTTOMLEFT);
+
if (params->shadow & CL_SHADOW_OUT)
ge_cairo_set_color (cr, &shadow);
else
ge_cairo_set_color (cr, &hilight);
-
+
cairo_stroke (cr);
-
+
cairo_restore (cr);
}
@@ -233,7 +202,7 @@ clearlooks_set_border_gradient (cairo_t *cr, const CairoColor *color, double hil
pattern = cairo_pattern_create_linear (0, 0, width, height);
cairo_pattern_add_color_stop_rgb (pattern, 0, color->r, color->g, color->b);
cairo_pattern_add_color_stop_rgb (pattern, 1, bottom_shade.r, bottom_shade.g, bottom_shade.b);
-
+
cairo_set_source (cr, pattern);
cairo_pattern_destroy (pattern);
}
@@ -247,25 +216,20 @@ clearlooks_draw_gripdots (cairo_t *cr, const ClearlooksColors *colors, int x, in
CairoColor hilight;
int i, j;
int xoff, yoff;
- int x_start, y_start;
ge_shade_color (dark, 1.5, &hilight);
-
- /* The "- 1" is because there is no space in front of the first dot. */
- x_start = x + width / 2 - ((xr * 3 - 1) / 2);
- y_start = y + height / 2 - ((yr * 3 - 1) / 2);
-
- for ( i = 0; i < xr; i++ )
+
+ for ( i = 0; i < xr; i++ )
{
for ( j = 0; j < yr; j++ )
{
- xoff = 3 * i;
- yoff = 3 * j;
-
- cairo_rectangle (cr, x_start + xoff, y_start + yoff, 2, 2);
+ xoff = x -(xr * 3 / 2) + 3 * i;
+ yoff = y -(yr * 3 / 2) + 3 * j;
+
+ cairo_rectangle (cr, width/2+0.5+xoff, height/2+0.5+yoff, 2, 2);
cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.8+contrast);
cairo_fill (cr);
- cairo_rectangle (cr, x_start + xoff, y_start + yoff, 1, 1);
+ cairo_rectangle (cr, width/2+0.5+xoff, height/2+0.5+yoff, 1, 1);
cairo_set_source_rgba (cr, dark->r, dark->g, dark->b, 0.8+contrast);
cairo_fill (cr);
}
@@ -281,16 +245,14 @@ clearlooks_draw_button (cairo_t *cr,
double xoffset = 0, yoffset = 0;
double radius = params->radius;
const CairoColor *fill = &colors->bg[params->state_type];
- CairoColor border_normal = colors->shade[6];
- CairoColor border_disabled = colors->shade[4];
+ const CairoColor *border_normal = &colors->shade[6];
+ const CairoColor *border_disabled = &colors->shade[4];
CairoColor shadow;
- ge_shade_color (&border_normal, 1.04, &border_normal);
- ge_shade_color (&border_normal, 0.94, &shadow);
- ge_shade_color (&border_disabled, 1.08, &border_disabled);
-
+ ge_shade_color (border_normal, 0.925, &shadow);
+
cairo_save (cr);
-
+
cairo_translate (cr, x, y);
cairo_set_line_width (cr, 1.0);
@@ -306,52 +268,42 @@ clearlooks_draw_button (cairo_t *cr,
if (params->xthickness == 3 || params->ythickness == 3)
{
- params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width, height, radius+1, params->corners);
- }
-
+ cairo_translate (cr, 0.5, 0.5);
+ params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width-1, height-1, radius+1, params->corners);
+ cairo_translate (cr, -0.5, -0.5);
+ }
+
ge_cairo_rounded_rectangle (cr, xoffset+1, yoffset+1,
width-(xoffset*2)-2,
height-(yoffset*2)-2,
radius, params->corners);
-
+
if (!params->active)
{
cairo_pattern_t *pattern;
- CairoColor top_shade, topmiddle_shade, bottom_shade, middle_shade;
-
- ge_shade_color (fill, SHADE_TOP, &top_shade);
- ge_shade_color (fill, SHADE_CENTER_TOP, &topmiddle_shade);
- ge_shade_color (fill, SHADE_CENTER_BOTTOM, &middle_shade);
- ge_shade_color (fill, SHADE_BOTTOM, &bottom_shade);
-
- cairo_save (cr);
- cairo_clip_preserve (cr);
-
+ gdouble shade_size = ((100.0/height)*8.0)/100.0;
+ CairoColor top_shade, bottom_shade, middle_shade;
+
+ ge_shade_color (fill, 1.1, &top_shade);
+ ge_shade_color (fill, 0.98, &middle_shade);
+ ge_shade_color (fill, 0.93, &bottom_shade);
+
pattern = cairo_pattern_create_linear (0, 0, 0, height);
cairo_pattern_add_color_stop_rgb (pattern, 0.0, top_shade.r, top_shade.g, top_shade.b);
- cairo_pattern_add_color_stop_rgb (pattern, 0.3, topmiddle_shade.r, topmiddle_shade.g, topmiddle_shade.b);
- cairo_pattern_add_color_stop_rgb (pattern, 0.7, middle_shade.r, middle_shade.g, middle_shade.b);
- cairo_pattern_add_color_stop_rgb (pattern, 1.0, bottom_shade.r, bottom_shade.g, bottom_shade.b);
+ cairo_pattern_add_color_stop_rgb (pattern, shade_size, fill->r, fill->g, fill->b);
+ cairo_pattern_add_color_stop_rgb (pattern, 1.0 - shade_size, middle_shade.r, middle_shade.g, middle_shade.b);
+ cairo_pattern_add_color_stop_rgb (pattern, (height-(yoffset*2)-1)/height, bottom_shade.r, bottom_shade.g, bottom_shade.b);
+ cairo_pattern_add_color_stop_rgba (pattern, (height-(yoffset*2)-1)/height, bottom_shade.r, bottom_shade.g, bottom_shade.b, 0.7);
+ cairo_pattern_add_color_stop_rgba (pattern, 1.0, bottom_shade.r, bottom_shade.g, bottom_shade.b, 0.7);
+
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
-
- cairo_move_to (cr, width-(xoffset*2)-0.5, 0);
- cairo_line_to (cr, width-(xoffset*2)-0.5, height);
- ge_cairo_set_color (cr, &bottom_shade);
- cairo_stroke (cr);
-
- /* Draw topleft shadow */
- params->style_functions->draw_top_left_highlight (cr, fill, params, xoffset + 1, yoffset + 1,
- width - 2*(xoffset + 1), height - 2*(yoffset + 1),
- MAX(radius-1, 0), params->corners);
-
- cairo_restore (cr);
}
else
{
cairo_pattern_t *pattern;
-
+
ge_cairo_set_color (cr, fill);
cairo_fill_preserve (cr);
@@ -364,46 +316,58 @@ clearlooks_draw_button (cairo_t *cr,
cairo_pattern_destroy (pattern);
pattern = cairo_pattern_create_linear (0, yoffset+1, 0, 3+yoffset);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, params->disabled ? 0.125 : 0.32);
+ cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, params->disabled ? 0.125 : 0.3);
cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.0);
cairo_set_source (cr, pattern);
cairo_fill_preserve (cr);
cairo_pattern_destroy (pattern);
pattern = cairo_pattern_create_linear (xoffset+1, 0, 3+xoffset, 0);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, params->disabled ? 0.125 : 0.32);
+ cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, params->disabled ? 0.125 : 0.3);
cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.0);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
}
+
/* Drawing the border */
if (!params->active && params->is_default)
{
- ge_shade_color (&border_normal, 0.74, &border_normal);
- }
+ const CairoColor *l = &colors->shade[4];
+ const CairoColor *d = &colors->shade[4];
+ ge_cairo_set_color (cr, l);
+ ge_cairo_stroke_rectangle (cr, 2.5, 2.5, width-5, height-5);
- ge_cairo_inner_rounded_rectangle (cr, xoffset, yoffset, width-(xoffset*2), height-(yoffset*2), radius, params->corners);
+ ge_cairo_set_color (cr, d);
+ ge_cairo_stroke_rectangle (cr, 3.5, 3.5, width-7, height-7);
+ }
+
+ ge_cairo_rounded_rectangle (cr, xoffset + 0.5, yoffset + 0.5, width-(xoffset*2)-1, height-(yoffset*2)-1, radius, params->corners);
if (params->disabled)
- {
- ge_cairo_set_color (cr, &border_disabled);
- }
+ ge_cairo_set_color (cr, border_disabled);
else
- {
if (!params->active)
- clearlooks_set_border_gradient (cr, &border_normal,
- params->is_default ? 1.1 : 1.3, 0, height);
+ clearlooks_set_border_gradient (cr, border_normal, 1.32, 0, height);
else
- {
- ge_shade_color (&border_normal, 1.08, &border_normal);
- ge_cairo_set_color (cr, &border_normal);
- }
- }
-
+ ge_cairo_set_color (cr, border_normal);
+
cairo_stroke (cr);
-
+
+ /* Draw the "shadow" */
+ if (!params->active)
+ {
+ cairo_translate (cr, 0.5, 0.5);
+ /* Draw right shadow */
+ cairo_move_to (cr, width-params->xthickness, params->ythickness - 1);
+ cairo_line_to (cr, width-params->xthickness, height - params->ythickness - 1);
+ cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, 0.1);
+ cairo_stroke (cr);
+
+ /* Draw topleft shadow */
+ clearlooks_draw_top_left_highlight (cr, fill, params, width, height, radius);
+ }
cairo_restore (cr);
}
@@ -414,53 +378,56 @@ clearlooks_draw_entry (cairo_t *cr,
int x, int y, int width, int height)
{
const CairoColor *base = &colors->base[params->state_type];
- CairoColor border = colors->shade[params->disabled ? 3 : 6];
+ CairoColor border = colors->shade[params->disabled ? 4 : 6];
double radius = MIN (params->radius, MIN ((width - 4.0) / 2.0, (height - 4.0) / 2.0));
-
+
if (params->focus)
border = colors->spot[2];
- cairo_save (cr);
-
- cairo_translate (cr, x, y);
+ cairo_translate (cr, x+0.5, y+0.5);
cairo_set_line_width (cr, 1.0);
+
+ /* Fill the background (shouldn't have to) */
+ cairo_rectangle (cr, -0.5, -0.5, width, height);
+ ge_cairo_set_color (cr, &params->parentbg);
+ cairo_fill (cr);
- /* Now fill the area we want to be base[NORMAL]. */
- ge_cairo_rounded_rectangle (cr, 2, 2, width-4, height-4, MAX(0, radius-1), params->corners);
+ /* Fill the entry's base color (why isn't is large enough by default?) */
+ cairo_rectangle (cr, 1.5, 1.5, width-4, height-4);
ge_cairo_set_color (cr, base);
cairo_fill (cr);
-
- params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width, height, radius+1, params->corners);
+
+ params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width-1, height-1, radius+1, params->corners);
/* Draw the inner shadow */
if (params->focus)
{
+ /* ge_cairo_rounded_rectangle (cr, 2, 2, width-5, height-5, RADIUS-1, params->corners); */
ge_cairo_set_color (cr, &colors->spot[0]);
- ge_cairo_inner_rounded_rectangle (cr, 2, 2, width-4, height-4, MAX(0, radius-1), params->corners);
- cairo_stroke (cr);
+ ge_cairo_stroke_rectangle (cr, 2, 2, width-5, height-5);
}
else
{
- CairoColor shadow;
+ CairoColor shadow;
ge_shade_color (&border, 0.925, &shadow);
cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, params->disabled ? 0.05 : 0.1);
-
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
- cairo_move_to (cr, 2.5, height-radius);
- cairo_arc (cr, 2.5+MAX(0, radius-1), 2.5+MAX(0, radius-1), MAX(0, radius-1), G_PI, 270*(G_PI/180));
- cairo_line_to (cr, width-radius, 2.5);
+ /*
+ cairo_move_to (cr, 2, height-3);
+ cairo_arc (cr, params->xthickness+RADIUS-1, params->ythickness+RADIUS-1, RADIUS, G_PI, 270*(G_PI/180));
+ cairo_line_to (cr, width-3, 2);*/
+ cairo_move_to (cr, 2, height-3);
+ cairo_line_to (cr, 2, 2);
+ cairo_line_to (cr, width-3, 2);
cairo_stroke (cr);
}
- ge_cairo_inner_rounded_rectangle (cr, 1, 1, width-2, height-2, radius, params->corners);
+ ge_cairo_rounded_rectangle (cr, 1, 1, width-3, height-3, radius, params->corners);
if (params->focus || params->disabled)
ge_cairo_set_color (cr, &border);
else
- clearlooks_set_border_gradient (cr, &border, 1.32, 0, height);
+ clearlooks_set_border_gradient (cr, &border, 1.32, 0, height);
cairo_stroke (cr);
-
- cairo_restore (cr);
}
static void
@@ -470,12 +437,11 @@ clearlooks_draw_spinbutton (cairo_t *cr,
int x, int y, int width, int height)
{
const CairoColor *border = &colors->shade[!params->disabled ? 5 : 3];
- CairoColor hilight;
+ CairoColor hilight;
params->style_functions->draw_button (cr, colors, params, x, y, width, height);
- ge_shade_color (&colors->bg[0], params->style_constants->topleft_highlight_shade, &hilight);
- hilight.a = params->style_constants->topleft_highlight_alpha;
+ ge_shade_color (border, 1.5, &hilight);
cairo_translate (cr, x, y);
@@ -498,24 +464,24 @@ clearlooks_draw_spinbutton_down (cairo_t *cr,
{
cairo_pattern_t *pattern;
double radius = MIN (params->radius, MIN ((width - 4.0) / 2.0, (height - 4.0) / 2.0));
- CairoColor shadow;
- ge_shade_color (&colors->bg[0], 0.8, &shadow);
+ CairoColor shadow;
+ ge_shade_color (&colors->bg[GTK_STATE_NORMAL], 0.8, &shadow);
cairo_translate (cr, x+1, y+1);
-
+
ge_cairo_rounded_rectangle (cr, 1, 1, width-4, height-4, radius, params->corners);
-
+
ge_cairo_set_color (cr, &colors->bg[params->state_type]);
-
+
cairo_fill_preserve (cr);
-
+
pattern = cairo_pattern_create_linear (0, 0, 0, height);
cairo_pattern_add_color_stop_rgb (pattern, 0.0, shadow.r, shadow.g, shadow.b);
cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.0);
-
+
cairo_set_source (cr, pattern);
cairo_fill (cr);
-
+
cairo_pattern_destroy (pattern);
}
@@ -529,21 +495,20 @@ clearlooks_scale_draw_gradient (cairo_t *cr,
{
cairo_pattern_t *pattern;
- pattern = cairo_pattern_create_linear (0.5, 0.5, horizontal ? 0.5 : width + 1, horizontal ? height + 1: 0.5);
+ pattern = cairo_pattern_create_linear (0, 0, horizontal ? 0 : width, horizontal ? height : 0);
cairo_pattern_add_color_stop_rgb (pattern, 0.0, c1->r, c1->g, c1->b);
cairo_pattern_add_color_stop_rgb (pattern, 1.0, c2->r, c2->g, c2->b);
- cairo_rectangle (cr, x, y, width, height);
+ cairo_rectangle (cr, x+0.5, y+0.5, width-1, height-1);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
-
+
ge_cairo_set_color (cr, c3);
- ge_cairo_inner_rectangle (cr, x, y, width, height);
- cairo_stroke (cr);
+ ge_cairo_stroke_rectangle (cr, x, y, width, height);
}
-#define TROUGH_SIZE 7
+#define TROUGH_SIZE 6
static void
clearlooks_draw_scale_trough (cairo_t *cr,
const ClearlooksColors *colors,
@@ -554,54 +519,43 @@ clearlooks_draw_scale_trough (cairo_t *cr,
int trough_width, trough_height;
double translate_x, translate_y;
- cairo_save (cr);
-
if (slider->horizontal)
{
- trough_width = width;
- trough_height = TROUGH_SIZE;
+ trough_width = width-3;
+ trough_height = TROUGH_SIZE-2;
- translate_x = x;
- translate_y = y + (height/2) - (TROUGH_SIZE/2);
+ translate_x = x + 0.5;
+ translate_y = y + 0.5 + (height/2) - (TROUGH_SIZE/2);
}
else
{
- trough_width = TROUGH_SIZE;
- trough_height = height;
+ trough_width = TROUGH_SIZE-2;
+ trough_height = height-3;
- translate_x = x + (width/2) - (TROUGH_SIZE/2);
- translate_y = y;
+ translate_x = x + 0.5 + (width/2) - (TROUGH_SIZE/2);
+ translate_y = y + 0.5;
}
cairo_set_line_width (cr, 1.0);
cairo_translate (cr, translate_x, translate_y);
-
+
if (!slider->fill_level)
- params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, trough_width, trough_height, 0, 0);
+ params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, trough_width+2, trough_height+2, 0, 0);
- if (!slider->lower && !slider->fill_level)
- {
- CairoColor shadow;
- ge_shade_color (&colors->shade[2], 0.96, &shadow);
-
- clearlooks_scale_draw_gradient (cr, &shadow, /* top */
- &colors->shade[2], /* bottom */
- &colors->shade[4], /* border */
- 1.0, 1.0, trough_width - 2, trough_height - 2,
- slider->horizontal);
- }
+ cairo_translate (cr, 1, 1);
+
+ if (!slider->lower && ! slider->fill_level)
+ clearlooks_scale_draw_gradient (cr, &colors->shade[3], /* top */
+ &colors->shade[2], /* bottom */
+ &colors->shade[6], /* border */
+ 0, 0, trough_width, trough_height,
+ slider->horizontal);
else
- {
- CairoColor border = colors->spot[2];
- border.a = 0.64;
-
- clearlooks_scale_draw_gradient (cr, &colors->spot[1], /* top */
- &colors->spot[0], /* bottom */
- &border, /* border */
- 1.0, 1.0, trough_width - 2, trough_height - 2,
- slider->horizontal);
- }
- cairo_restore (cr);
+ clearlooks_scale_draw_gradient (cr, &colors->spot[1], /* top */
+ &colors->spot[0], /* bottom */
+ &colors->spot[2], /* border */
+ 0, 0, trough_width, trough_height,
+ slider->horizontal);
}
static void
@@ -610,21 +564,21 @@ clearlooks_draw_slider (cairo_t *cr,
const WidgetParameters *params,
int x, int y, int width, int height)
{
+ const CairoColor *border = &colors->shade[params->disabled ? 4 : 6];
const CairoColor *spot = &colors->spot[1];
const CairoColor *fill = &colors->shade[2];
- CairoColor border = colors->shade[params->disabled ? 4 : 6];
double radius = MIN (params->radius, MIN ((width - 1.0) / 2.0, (height - 1.0) / 2.0));
cairo_pattern_t *pattern;
- cairo_set_line_width (cr, 1.0);
+ cairo_set_line_width (cr, 1.0);
cairo_translate (cr, x, y);
if (params->prelight)
- border = colors->spot[2];
+ border = &colors->spot[2];
/* fill the widget */
- ge_cairo_rounded_rectangle (cr, 1.0, 1.0, width-2, height-2, radius, params->corners);
+ cairo_rectangle (cr, 0.5, 0.5, width-2, height-2);
/* Fake light */
if (!params->disabled)
@@ -642,33 +596,34 @@ clearlooks_draw_slider (cairo_t *cr,
else
{
ge_cairo_set_color (cr, fill);
+ cairo_rectangle (cr, 0.5, 0.5, width-2, height-2);
cairo_fill (cr);
}
/* Set the clip */
cairo_save (cr);
- cairo_rectangle (cr, 1.0, 1.0, 6, height-2);
- cairo_rectangle (cr, width-7.0, 1.0, 6, height-2);
+ cairo_rectangle (cr, 0.5, 0.5, 6, height-2);
+ cairo_rectangle (cr, width-7.5, 0.5, 6 , height-2);
cairo_clip_preserve (cr);
cairo_new_path (cr);
/* Draw the handles */
- ge_cairo_rounded_rectangle (cr, 1.0, 1.0, width-1, height-1, radius, params->corners);
- pattern = cairo_pattern_create_linear (1.0, 1.0, 1.0, 1.0+height);
+ ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, radius, params->corners);
+ pattern = cairo_pattern_create_linear (0.5, 0.5, 0.5, 0.5+height);
if (params->prelight)
{
CairoColor highlight;
- ge_shade_color (spot, 1.3, &highlight);
+ ge_shade_color (spot, 1.5, &highlight);
cairo_pattern_add_color_stop_rgb (pattern, 0.0, highlight.r, highlight.g, highlight.b);
cairo_pattern_add_color_stop_rgb (pattern, 1.0, spot->r, spot->g, spot->b);
cairo_set_source (cr, pattern);
}
- else
+ else
{
- CairoColor hilight;
- ge_shade_color (fill, 1.3, &hilight);
+ CairoColor hilight;
+ ge_shade_color (fill, 1.5, &hilight);
cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5);
}
@@ -678,26 +633,28 @@ clearlooks_draw_slider (cairo_t *cr,
cairo_restore (cr);
/* Draw the border */
- ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, radius, params->corners);
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
if (params->prelight || params->disabled)
- ge_cairo_set_color (cr, &border);
+ ge_cairo_set_color (cr, border);
else
- clearlooks_set_border_gradient (cr, &border, 1.2, 0, height);
+ clearlooks_set_border_gradient (cr, border, 1.2, 0, height);
cairo_stroke (cr);
/* Draw handle lines */
if (width > 14)
{
- cairo_move_to (cr, 6.5, 1.0);
- cairo_line_to (cr, 6.5, height-1);
-
- cairo_move_to (cr, width-6.5, 1.0);
- cairo_line_to (cr, width-6.5, height-1);
-
+ cairo_move_to (cr, 6, 0.5);
+ cairo_line_to (cr, 6, height-1);
+
+ cairo_move_to (cr, width-7, 0.5);
+ cairo_line_to (cr, width-7, height-1);
+
cairo_set_line_width (cr, 1.0);
- border.a = params->disabled ? 0.6 : 0.3;
- ge_cairo_set_color (cr, &border);
+ cairo_set_source_rgba (cr, border->r,
+ border->g,
+ border->b,
+ 0.3);
cairo_stroke (cr);
}
}
@@ -709,22 +666,18 @@ clearlooks_draw_slider_button (cairo_t *cr,
const SliderParameters *slider,
int x, int y, int width, int height)
{
- double radius = MIN (params->radius, MIN ((width - 1.0) / 2.0, (height - 1.0) / 2.0));
-
- cairo_save (cr);
+ double radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
cairo_set_line_width (cr, 1.0);
-
+
if (!slider->horizontal)
ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
- cairo_translate (cr, x, y);
+ cairo_translate (cr, x+0.5, y+0.5);
- params->style_functions->draw_shadow (cr, colors, radius, width, height);
+ params->style_functions->draw_shadow (cr, colors, radius, width-1, height-1);
params->style_functions->draw_slider (cr, colors, params, 1, 1, width-2, height-2);
if (width > 24)
- params->style_functions->draw_gripdots (cr, colors, 1, 1, width-2, height-2, 3, 3, 0);
-
- cairo_restore (cr);
+ params->style_functions->draw_gripdots (cr, colors, 0, 0, width-2, height-2, 3, 3, 0);
}
static void
@@ -733,18 +686,24 @@ clearlooks_draw_progressbar_trough (cairo_t *cr,
const WidgetParameters *params,
int x, int y, int width, int height)
{
- const CairoColor *border = &colors->shade[4];
- CairoColor shadow;
- cairo_pattern_t *pattern;
- double radius = MIN (params->radius, MIN ((height-2.0) / 2.0, (width-2.0) / 2.0));
-
+ const CairoColor *border = &colors->shade[6];
+ CairoColor shadow;
+ cairo_pattern_t *pattern;
+ double radius = MIN (params->radius, MIN ((height-2.0) / 2.0, (width-2.0) / 2.0));
+
cairo_save (cr);
cairo_set_line_width (cr, 1.0);
+
+ /* Fill with bg color */
+ ge_cairo_set_color (cr, &colors->bg[params->state_type]);
+
+ cairo_rectangle (cr, x, y, width, height);
+ cairo_fill (cr);
/* Create trough box */
ge_cairo_rounded_rectangle (cr, x+1, y+1, width-2, height-2, radius, params->corners);
- ge_cairo_set_color (cr, &colors->shade[2]);
+ ge_cairo_set_color (cr, &colors->shade[3]);
cairo_fill (cr);
/* Draw border */
@@ -761,8 +720,8 @@ clearlooks_draw_progressbar_trough (cairo_t *cr,
/* Top shadow */
cairo_rectangle (cr, x+1, y+1, width-2, 4);
pattern = cairo_pattern_create_linear (x, y, x, y+4);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.2);
- cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0);
+ cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.3);
+ cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
@@ -770,8 +729,8 @@ clearlooks_draw_progressbar_trough (cairo_t *cr,
/* Left shadow */
cairo_rectangle (cr, x+1, y+1, 4, height-2);
pattern = cairo_pattern_create_linear (x, y, x+4, y);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.2);
- cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0);
+ cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.3);
+ cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
@@ -811,9 +770,9 @@ clearlooks_draw_progressbar_fill (cairo_t *cr,
/* Clamp the radius so that the _height_ fits ... */
radius = MIN (radius, height / 2.0);
- stroke_width = height;
+ stroke_width = height*2;
x_step = (((float)stroke_width/10)*offset); /* This looks weird ... */
-
+
cairo_translate (cr, x, y);
cairo_save (cr);
@@ -826,19 +785,13 @@ clearlooks_draw_progressbar_fill (cairo_t *cr,
/* Draw the background gradient */
ge_shade_color (&colors->spot[1], 1.1, &bg_shade);
-
- /* Just leave this disabled, maybe we could use the same gradient
- * as the buttons in the future, not flat fill */
-/* pattern = cairo_pattern_create_linear (0, 0, 0, height);*/
-/* cairo_pattern_add_color_stop_rgb (pattern, 0.0, bg_shade.r, bg_shade.g, bg_shade.b);*/
-/* cairo_pattern_add_color_stop_rgb (pattern, 0.6, colors->spot[1].r, colors->spot[1].g, colors->spot[1].b);*/
-/* cairo_pattern_add_color_stop_rgb (pattern, 1.0, bg_shade.r, bg_shade.g, bg_shade.b);*/
-/* cairo_set_source (cr, pattern);*/
-/* cairo_paint (cr);*/
-/* cairo_pattern_destroy (pattern);*/
-
- ge_cairo_set_color (cr, &bg_shade);
+ pattern = cairo_pattern_create_linear (0, 0, 0, height);
+ cairo_pattern_add_color_stop_rgb (pattern, 0.0, bg_shade.r, bg_shade.g, bg_shade.b);
+ cairo_pattern_add_color_stop_rgb (pattern, 0.6, colors->spot[1].r, colors->spot[1].g, colors->spot[1].b);
+ cairo_pattern_add_color_stop_rgb (pattern, 1.0, bg_shade.r, bg_shade.g, bg_shade.b);
+ cairo_set_source (cr, pattern);
cairo_paint (cr);
+ cairo_pattern_destroy (pattern);
/* Draw the Strokes */
while (tile_pos <= width+x_step)
@@ -847,20 +800,50 @@ clearlooks_draw_progressbar_fill (cairo_t *cr,
cairo_line_to (cr, stroke_width-x_step, 0);
cairo_line_to (cr, stroke_width/2-x_step, height);
cairo_line_to (cr, -x_step, height);
-
+
cairo_translate (cr, stroke_width, 0);
tile_pos += stroke_width;
}
-
- pattern = cairo_pattern_create_linear (0, 0, 0, height);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0, colors->spot[2].r, colors->spot[2].g, colors->spot[2].b, 0);
- cairo_pattern_add_color_stop_rgba (pattern, 1.0, colors->spot[2].r, colors->spot[2].g, colors->spot[2].b, 0.24);
- cairo_set_source (cr, pattern);
+
+ cairo_set_source_rgba (cr, colors->spot[2].r,
+ colors->spot[2].g,
+ colors->spot[2].b,
+ 0.15);
+
cairo_fill (cr);
- cairo_pattern_destroy (pattern);
-
cairo_restore (cr); /* rounded clip region */
+ /* inner highlight border
+ * This is again kinda ugly. Draw once from each side, clipping away the other. */
+ cairo_set_source_rgba (cr, colors->spot[0].r, colors->spot[0].g, colors->spot[0].b, 0.5);
+
+ /* left side */
+ cairo_save (cr);
+ cairo_rectangle (cr, 0, 0, width / 2, height);
+ cairo_clip (cr);
+
+ if (progressbar->pulsing)
+ ge_cairo_rounded_rectangle (cr, 1.5, 0.5, width + radius, height - 1, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
+ else
+ ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width + radius, height - 1, radius, CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT);
+
+ cairo_stroke (cr);
+ cairo_restore (cr); /* clip */
+
+ /* right side */
+ cairo_save (cr);
+ cairo_rectangle (cr, width / 2, 0, (width+1) / 2, height);
+ cairo_clip (cr);
+
+ if (progressbar->value < 1.0 || progressbar->pulsing)
+ ge_cairo_rounded_rectangle (cr, -1.5 - radius, 0.5, width + radius, height - 1, radius, CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT);
+ else
+ ge_cairo_rounded_rectangle (cr, -0.5 - radius, 0.5, width + radius, height - 1, radius, CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT);
+
+ cairo_stroke (cr);
+ cairo_restore (cr); /* clip */
+
+
/* Draw the dark lines and the shadow */
cairo_save (cr);
/* Again, this weird clip area. */
@@ -869,6 +852,8 @@ clearlooks_draw_progressbar_fill (cairo_t *cr,
ge_cairo_rounded_rectangle (cr, -radius - 1.0, 0, width + radius + 2.0, height, radius, CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT);
cairo_clip (cr);
+ border = colors->spot[2];
+ border.a = 0.5;
shadow.r = 0.0;
shadow.g = 0.0;
shadow.b = 0.0;
@@ -877,6 +862,12 @@ clearlooks_draw_progressbar_fill (cairo_t *cr,
if (progressbar->pulsing)
{
/* At the beginning of the bar. */
+ cairo_move_to (cr, 0.5 + radius, height + 0.5);
+ ge_cairo_rounded_corner (cr, 0.5, height + 0.5, radius + 1, CR_CORNER_BOTTOMLEFT);
+ ge_cairo_rounded_corner (cr, 0.5, -0.5, radius + 1, CR_CORNER_TOPLEFT);
+ ge_cairo_set_color (cr, &border);
+ cairo_stroke (cr);
+
cairo_move_to (cr, -0.5 + radius, height + 0.5);
ge_cairo_rounded_corner (cr, -0.5, height + 0.5, radius + 1, CR_CORNER_BOTTOMLEFT);
ge_cairo_rounded_corner (cr, -0.5, -0.5, radius + 1, CR_CORNER_TOPLEFT);
@@ -886,27 +877,19 @@ clearlooks_draw_progressbar_fill (cairo_t *cr,
if (progressbar->value < 1.0 || progressbar->pulsing)
{
/* At the end of the bar. */
+ cairo_move_to (cr, width - 0.5 - radius, -0.5);
+ ge_cairo_rounded_corner (cr, width - 0.5, -0.5, radius + 1, CR_CORNER_TOPRIGHT);
+ ge_cairo_rounded_corner (cr, width - 0.5, height + 0.5, radius + 1, CR_CORNER_BOTTOMRIGHT);
+ ge_cairo_set_color (cr, &border);
+ cairo_stroke (cr);
+
cairo_move_to (cr, width + 0.5 - radius, -0.5);
ge_cairo_rounded_corner (cr, width + 0.5, -0.5, radius + 1, CR_CORNER_TOPRIGHT);
ge_cairo_rounded_corner (cr, width + 0.5, height + 0.5, radius + 1, CR_CORNER_BOTTOMRIGHT);
ge_cairo_set_color (cr, &shadow);
cairo_stroke (cr);
}
-
-/* ge_cairo_rounded_rectangle (cr, 1.5,1.5, width-2, height-2, radius, CR_CORNER_ALL);*/
-/* cairo_set_source_rgba (cr, colors->spot[0].r, colors->spot[0].g, colors->spot[0].b, 1);*/
-/* cairo_stroke (cr);*/
-
- params->style_functions->draw_top_left_highlight (cr, &colors->spot[1], params, 1.5, 1.5,
- width - 1, height - 1,
- radius, params->corners);
-
- border = colors->spot[2];
- border.a = 0.6;
- ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, radius, CR_CORNER_ALL);
- ge_cairo_set_color (cr, &border);
- cairo_stroke (cr);
-
+
cairo_restore (cr);
cairo_restore (cr); /* rotation, mirroring */
@@ -920,10 +903,10 @@ clearlooks_draw_optionmenu (cairo_t *cr,
int x, int y, int width, int height)
{
SeparatorParameters separator;
- int offset = params->ythickness + 2;
-
+ int offset = params->ythickness + 1;
+
params->style_functions->draw_button (cr, colors, params, x, y, width, height);
-
+
separator.horizontal = FALSE;
params->style_functions->draw_separator (cr, colors, params, &separator, x+optionmenu->linepos, y + offset, 2, height - offset*2);
}
@@ -956,19 +939,21 @@ clearlooks_draw_menubar0 (cairo_t *cr,
const MenuBarParameters *menubar,
int x, int y, int width, int height)
{
+/* const CairoColor *light = &colors->shade[0]; */
const CairoColor *dark = &colors->shade[3];
- cairo_save (cr);
-
cairo_set_line_width (cr, 1);
- cairo_translate (cr, x, y);
+ cairo_translate (cr, x, y+0.5);
- cairo_move_to (cr, 0, height-0.5);
- cairo_line_to (cr, width, height-0.5);
+/* cairo_move_to (cr, 0, 0); */
+/* cairo_line_to (cr, width, 0); */
+/* ge_cairo_set_color (cr, light); */
+/* cairo_stroke (cr); */
+
+ cairo_move_to (cr, 0, height-1);
+ cairo_line_to (cr, width, height-1);
ge_cairo_set_color (cr, dark);
cairo_stroke (cr);
-
- cairo_restore (cr);
}
static void
@@ -981,13 +966,11 @@ clearlooks_draw_menubar2 (cairo_t *cr,
CairoColor lower;
cairo_pattern_t *pattern;
- cairo_save (cr);
-
ge_shade_color (&colors->bg[0], 0.96, &lower);
-
+
cairo_translate (cr, x, y);
cairo_rectangle (cr, 0, 0, width, height);
-
+
/* Draw the gradient */
pattern = cairo_pattern_create_linear (0, 0, 0, height);
cairo_pattern_add_color_stop_rgb (pattern, 0.0, colors->bg[0].r,
@@ -999,15 +982,13 @@ clearlooks_draw_menubar2 (cairo_t *cr,
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
-
+
/* Draw bottom line */
cairo_set_line_width (cr, 1.0);
cairo_move_to (cr, 0, height-0.5);
cairo_line_to (cr, width, height-0.5);
ge_cairo_set_color (cr, &colors->shade[3]);
cairo_stroke (cr);
-
- cairo_restore (cr);
}
static void
@@ -1028,10 +1009,10 @@ clearlooks_draw_menubar1 (cairo_t *cr,
static menubar_draw_proto clearlooks_menubar_draw[3] =
-{
- clearlooks_draw_menubar0,
+{
+ clearlooks_draw_menubar0,
clearlooks_draw_menubar1,
- clearlooks_draw_menubar2
+ clearlooks_draw_menubar2
};
static void
@@ -1041,7 +1022,7 @@ clearlooks_draw_menubar (cairo_t *cr,
const MenuBarParameters *menubar,
int x, int y, int width, int height)
{
- if (menubar->style < 0 || menubar->style >= G_N_ELEMENTS (clearlooks_menubar_draw))
+ if (menubar->style < 0 || menubar->style > 3)
return;
clearlooks_menubar_draw[menubar->style](cr, colors, params, menubar,
@@ -1049,38 +1030,38 @@ clearlooks_draw_menubar (cairo_t *cr,
}
static void
-clearlooks_get_frame_gap_clip (int x, int y, int width, int height,
+clearlooks_get_frame_gap_clip (int x, int y, int width, int height,
const FrameParameters *frame,
ClearlooksRectangle *bevel,
ClearlooksRectangle *border)
{
if (frame->gap_side == CL_GAP_TOP)
{
- CLEARLOOKS_RECTANGLE_SET (*bevel, 2.0 + frame->gap_x, 0.0,
- frame->gap_width - 3, 2.0);
- CLEARLOOKS_RECTANGLE_SET (*border, 1.0 + frame->gap_x, 0.0,
- frame->gap_width - 2, 2.0);
+ CLEARLOOKS_RECTANGLE_SET ((*bevel), 1.5 + frame->gap_x, -0.5,
+ frame->gap_width - 3, 2.0);
+ CLEARLOOKS_RECTANGLE_SET ((*border), 0.5 + frame->gap_x, -0.5,
+ frame->gap_width - 2, 2.0);
}
else if (frame->gap_side == CL_GAP_BOTTOM)
{
- CLEARLOOKS_RECTANGLE_SET (*bevel, 2.0 + frame->gap_x, height - 2.0,
- frame->gap_width - 3, 2.0);
- CLEARLOOKS_RECTANGLE_SET (*border, 1.0 + frame->gap_x, height - 1.0,
- frame->gap_width - 2, 2.0);
+ CLEARLOOKS_RECTANGLE_SET ((*bevel), 1.5 + frame->gap_x, height - 2.5,
+ frame->gap_width - 3, 2.0);
+ CLEARLOOKS_RECTANGLE_SET ((*border), 0.5 + frame->gap_x, height - 1.5,
+ frame->gap_width - 2, 2.0);
}
else if (frame->gap_side == CL_GAP_LEFT)
{
- CLEARLOOKS_RECTANGLE_SET (*bevel, 0.0, 2.0 + frame->gap_x,
- 2.0, frame->gap_width - 3);
- CLEARLOOKS_RECTANGLE_SET (*border, 0.0, 1.0 + frame->gap_x,
- 1.0, frame->gap_width - 2);
+ CLEARLOOKS_RECTANGLE_SET ((*bevel), -0.5, 1.5 + frame->gap_x,
+ 2.0, frame->gap_width - 3);
+ CLEARLOOKS_RECTANGLE_SET ((*border), -0.5, 0.5 + frame->gap_x,
+ 1.0, frame->gap_width - 2);
}
else if (frame->gap_side == CL_GAP_RIGHT)
{
- CLEARLOOKS_RECTANGLE_SET (*bevel, width - 2.0, 2.0 + frame->gap_x,
- 2.0, frame->gap_width - 3);
- CLEARLOOKS_RECTANGLE_SET (*border, width - 1.0, 1.0 + frame->gap_x,
- 1.0, frame->gap_width - 2);
+ CLEARLOOKS_RECTANGLE_SET ((*bevel), width - 2.5, 1.5 + frame->gap_x,
+ 2.0, frame->gap_width - 3);
+ CLEARLOOKS_RECTANGLE_SET ((*border), width - 1.5, 0.5 + frame->gap_x,
+ 1.0, frame->gap_width - 2);
}
}
@@ -1098,18 +1079,18 @@ clearlooks_draw_frame (cairo_t *cr,
double radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
CairoColor hilight;
- ge_shade_color (&colors->bg[0], 1.05, &hilight);
-
+ ge_shade_color (&colors->bg[GTK_STATE_NORMAL], 1.05, &hilight);
+
if (frame->shadow == CL_SHADOW_NONE)
return;
-
+
if (frame->gap_x != -1)
clearlooks_get_frame_gap_clip (x, y, width, height,
frame, &bevel_clip, &frame_clip);
-
+
cairo_set_line_width (cr, 1.0);
- cairo_translate (cr, x, y);
-
+ cairo_translate (cr, x+0.5, y+0.5);
+
/* save everything */
cairo_save (cr);
/* Set clip for the bevel */
@@ -1117,19 +1098,19 @@ clearlooks_draw_frame (cairo_t *cr,
{
/* Set clip for gap */
cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
- cairo_rectangle (cr, 0, 0, width, height);
+ cairo_rectangle (cr, -0.5, -0.5, width, height);
cairo_rectangle (cr, bevel_clip.x, bevel_clip.y, bevel_clip.width, bevel_clip.height);
cairo_clip (cr);
}
-
+
/* Draw the bevel */
if (frame->shadow == CL_SHADOW_ETCHED_IN || frame->shadow == CL_SHADOW_ETCHED_OUT)
{
ge_cairo_set_color (cr, &hilight);
if (frame->shadow == CL_SHADOW_ETCHED_IN)
- ge_cairo_inner_rounded_rectangle (cr, 1, 1, width-1, height-1, radius, params->corners);
+ ge_cairo_rounded_rectangle (cr, 1, 1, width-2, height-2, radius, params->corners);
else
- ge_cairo_inner_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-2, height-2, radius, params->corners);
cairo_stroke (cr);
}
else if (frame->shadow != CL_SHADOW_NONE)
@@ -1137,9 +1118,9 @@ clearlooks_draw_frame (cairo_t *cr,
ShadowParameters shadow;
shadow.corners = params->corners;
shadow.shadow = frame->shadow;
- clearlooks_draw_highlight_and_shade (cr, colors, &shadow, width, height, radius);
+ clearlooks_draw_highlight_and_shade (cr, colors, &shadow, width, height, 0);
}
-
+
/* restore the previous clip region */
cairo_restore (cr);
cairo_save (cr);
@@ -1147,7 +1128,7 @@ clearlooks_draw_frame (cairo_t *cr,
{
/* Set clip for gap */
cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
- cairo_rectangle (cr, 0, 0, width, height);
+ cairo_rectangle (cr, -0.5, -0.5, width, height);
cairo_rectangle (cr, frame_clip.x, frame_clip.y, frame_clip.width, frame_clip.height);
cairo_clip (cr);
}
@@ -1157,14 +1138,14 @@ clearlooks_draw_frame (cairo_t *cr,
{
ge_cairo_set_color (cr, dark);
if (frame->shadow == CL_SHADOW_ETCHED_IN)
- ge_cairo_inner_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-2, height-2, radius, params->corners);
else
- ge_cairo_inner_rounded_rectangle (cr, 1, 1, width-1, height-1, radius, params->corners);
+ ge_cairo_rounded_rectangle (cr, 1, 1, width-2, height-2, radius, params->corners);
}
else
{
ge_cairo_set_color (cr, border);
- ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, radius, params->corners);
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
}
cairo_stroke (cr);
@@ -1178,32 +1159,28 @@ clearlooks_draw_tab (cairo_t *cr,
const TabParameters *tab,
int x, int y, int width, int height)
{
- const CairoColor *border1 = &colors->shade[6];
- const CairoColor *border2 = &colors->shade[5];
- const CairoColor *stripe_fill = &colors->spot[1];
- const CairoColor *stripe_border = &colors->spot[2];
- const CairoColor *fill;
- CairoColor hilight;
-
- cairo_pattern_t *pattern;
-
- double radius;
- double stripe_size = 2.0;
- double stripe_fill_size;
- double length;
+ const CairoColor *border1 = &colors->shade[6];
+ const CairoColor *border2 = &colors->shade[5];
+ const CairoColor *stripe_fill = &colors->spot[1];
+ const CairoColor *stripe_border = &colors->spot[2];
+ const CairoColor *fill;
+ CairoColor hilight;
+
+ cairo_pattern_t *pattern;
+
+ double radius;
+ double strip_size;
radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
- cairo_save (cr);
-
/* Set clip */
cairo_rectangle (cr, x, y, width, height);
cairo_clip (cr);
cairo_new_path (cr);
- /* Translate and set line width */
+ /* Translate and set line width */
cairo_set_line_width (cr, 1.0);
- cairo_translate (cr, x, y);
+ cairo_translate (cr, x+0.5, y+0.5);
/* Make the tabs slightly bigger than they should be, to create a gap */
@@ -1211,29 +1188,27 @@ clearlooks_draw_tab (cairo_t *cr,
if (tab->gap_side == CL_GAP_TOP || tab->gap_side == CL_GAP_BOTTOM)
{
height += 3.0;
- length = height;
- stripe_fill_size = (tab->gap_side == CL_GAP_TOP ? stripe_size/height : stripe_size/(height-2));
-
+ strip_size = 2.0/height; /* 2 pixel high strip */
+
if (tab->gap_side == CL_GAP_TOP)
cairo_translate (cr, 0.0, -3.0); /* gap at the other side */
}
else
{
width += 3.0;
- length = width;
- stripe_fill_size = (tab->gap_side == CL_GAP_LEFT ? stripe_size/width : stripe_size/(width-2));
-
- if (tab->gap_side == CL_GAP_LEFT)
+ strip_size = 2.0/width;
+
+ if (tab->gap_side == CL_GAP_LEFT)
cairo_translate (cr, -3.0, 0.0); /* gap at the other side */
}
-
+
/* Set the fill color */
fill = &colors->bg[params->state_type];
/* Set tab shape */
- ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1,
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1,
radius, params->corners);
-
+
/* Draw fill */
ge_cairo_set_color (cr, fill);
cairo_fill (cr);
@@ -1245,45 +1220,32 @@ clearlooks_draw_tab (cairo_t *cr,
if (!params->active)
{
ShadowParameters shadow;
-
+
shadow.shadow = CL_SHADOW_OUT;
shadow.corners = params->corners;
-
+
clearlooks_draw_highlight_and_shade (cr, colors, &shadow,
width,
height, radius);
}
-
+
if (params->active)
{
CairoColor shadow;
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (0.5, height-1.5, 0.5, 0.5);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (0.5, 1.5, 0.5, height+0.5);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-1.5, 0.5, 1.5, 0.5);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (1.5, 0.5, width-1.5, 0.5);
- break;
- default:
- pattern = NULL;
- }
-
- ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, radius, params->corners);
+ pattern = cairo_pattern_create_linear ( tab->gap_side == CL_GAP_LEFT ? width-1 : 0,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 1,
+ tab->gap_side == CL_GAP_RIGHT ? width : 0,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 0 );
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
+
ge_shade_color (fill, 0.92, &shadow);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0, hilight.r, hilight.g, hilight.b, 0.4);
- cairo_pattern_add_color_stop_rgba (pattern, 1.0/length, hilight.r, hilight.g, hilight.b, 0.4);
- cairo_pattern_add_color_stop_rgb (pattern, 1.0/length, fill->r,fill->g,fill->b);
- cairo_pattern_add_color_stop_rgb (pattern, 1.0, shadow.r,shadow.g,shadow.b);
+ cairo_pattern_add_color_stop_rgba (pattern, 0.0, hilight.r, hilight.g, hilight.b, 0.4);
+ cairo_pattern_add_color_stop_rgba (pattern, 1.0/height, hilight.r, hilight.g, hilight.b, 0.4);
+ cairo_pattern_add_color_stop_rgb (pattern, 1.0/height, fill->r,fill->g,fill->b);
+ cairo_pattern_add_color_stop_rgb (pattern, 1.0, shadow.r,shadow.g,shadow.b);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
@@ -1291,37 +1253,25 @@ clearlooks_draw_tab (cairo_t *cr,
else
{
/* Draw shade */
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (0.5, height-1.5, 0.5, 0.5);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (0.5, 0.5, 0.5, height+0.5);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-1.5, 0.5, 0.5, 0.5);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (0.5, 0.5, width+0.5, 0.5);
- break;
- default:
- pattern = NULL;
- }
-
- ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, radius, params->corners);
+ pattern = cairo_pattern_create_linear ( tab->gap_side == CL_GAP_LEFT ? width-2 : 0,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 0,
+ tab->gap_side == CL_GAP_RIGHT ? width : 0,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 0 );
+
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
+
cairo_pattern_add_color_stop_rgb (pattern, 0.0, stripe_fill->r, stripe_fill->g, stripe_fill->b);
- cairo_pattern_add_color_stop_rgb (pattern, stripe_fill_size, stripe_fill->r, stripe_fill->g, stripe_fill->b);
- cairo_pattern_add_color_stop_rgba (pattern, stripe_fill_size, hilight.r, hilight.g, hilight.b, 0.5);
+ cairo_pattern_add_color_stop_rgb (pattern, strip_size, stripe_fill->r, stripe_fill->g, stripe_fill->b);
+ cairo_pattern_add_color_stop_rgba (pattern, strip_size, hilight.r, hilight.g, hilight.b, 0.5);
cairo_pattern_add_color_stop_rgba (pattern, 0.8, hilight.r, hilight.g, hilight.b, 0.0);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
}
- ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, radius, params->corners);
-
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
+
if (params->active)
{
ge_cairo_set_color (cr, border2);
@@ -1329,34 +1279,19 @@ clearlooks_draw_tab (cairo_t *cr,
}
else
{
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (2.5, height-1.5, 2.5, 2.5);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (2.5, 2.5, 2.5, height+0.5);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-1.5, 2.5, 2.5, 2.5);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (2.5, 2.5, width+0.5, 2.5);
- break;
- default:
- pattern = NULL;
- }
-
+ pattern = cairo_pattern_create_linear ( tab->gap_side == CL_GAP_LEFT ? width-2 : 2,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 2,
+ tab->gap_side == CL_GAP_RIGHT ? width : 2,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 2 );
+
cairo_pattern_add_color_stop_rgb (pattern, 0.0, stripe_border->r, stripe_border->g, stripe_border->b);
- cairo_pattern_add_color_stop_rgb (pattern, stripe_fill_size, stripe_border->r, stripe_border->g, stripe_border->b);
- cairo_pattern_add_color_stop_rgb (pattern, stripe_fill_size, border1->r, border1->g, border1->b);
+ cairo_pattern_add_color_stop_rgb (pattern, strip_size, stripe_border->r, stripe_border->g, stripe_border->b);
+ cairo_pattern_add_color_stop_rgb (pattern, strip_size, border1->r, border1->g, border1->b);
cairo_pattern_add_color_stop_rgb (pattern, 1.0, border2->r, border2->g, border2->b);
cairo_set_source (cr, pattern);
cairo_stroke (cr);
cairo_pattern_destroy (pattern);
}
-
- cairo_restore (cr);
}
static void
@@ -1366,9 +1301,9 @@ clearlooks_draw_separator (cairo_t *cr,
const SeparatorParameters *separator,
int x, int y, int width, int height)
{
- CairoColor color = colors->shade[2];
- CairoColor hilight;
- ge_shade_color (&colors->bg[0], 1.065, &hilight);
+ CairoColor color = colors->shade[3];
+ CairoColor hilight;
+ ge_shade_color (&color, 1.4, &hilight);
cairo_save (cr);
cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
@@ -1377,12 +1312,12 @@ clearlooks_draw_separator (cairo_t *cr,
{
cairo_set_line_width (cr, 1.0);
cairo_translate (cr, x, y+0.5);
-
+
cairo_move_to (cr, 0.0, 0.0);
cairo_line_to (cr, width, 0.0);
ge_cairo_set_color (cr, &color);
cairo_stroke (cr);
-
+
cairo_move_to (cr, 0.0, 1.0);
cairo_line_to (cr, width, 1.0);
ge_cairo_set_color (cr, &hilight);
@@ -1392,12 +1327,12 @@ clearlooks_draw_separator (cairo_t *cr,
{
cairo_set_line_width (cr, 1.0);
cairo_translate (cr, x+0.5, y);
-
+
cairo_move_to (cr, 0.0, 0.0);
cairo_line_to (cr, 0.0, height);
ge_cairo_set_color (cr, &color);
cairo_stroke (cr);
-
+
cairo_move_to (cr, 1.0, 0.0);
cairo_line_to (cr, 1.0, height);
ge_cairo_set_color (cr, &hilight);
@@ -1414,43 +1349,54 @@ clearlooks_draw_list_view_header (cairo_t *cr,
const ListViewHeaderParameters *header,
int x, int y, int width, int height)
{
- const CairoColor *border = &colors->shade[4];
- CairoColor hilight;
+ const CairoColor *border = &colors->shade[5];
+ cairo_pattern_t *pattern;
+ CairoColor hilight;
+ CairoColor shadow;
- ge_shade_color (&colors->bg[params->state_type],
- params->style_constants->topleft_highlight_shade, &hilight);
- hilight.a = params->style_constants->topleft_highlight_alpha;
+ ge_shade_color (border, 1.5, &hilight);
+ ge_shade_color (border, 0.925, &shadow);
cairo_translate (cr, x, y);
cairo_set_line_width (cr, 1.0);
-
+
/* Draw highlight */
- if (header->order & CL_ORDER_FIRST)
+ if (header->order == CL_ORDER_FIRST)
{
cairo_move_to (cr, 0.5, height-1);
cairo_line_to (cr, 0.5, 0.5);
}
else
cairo_move_to (cr, 0.0, 0.5);
-
+
cairo_line_to (cr, width, 0.5);
-
+
ge_cairo_set_color (cr, &hilight);
cairo_stroke (cr);
-
+
/* Draw bottom border */
cairo_move_to (cr, 0.0, height-0.5);
cairo_line_to (cr, width, height-0.5);
ge_cairo_set_color (cr, border);
cairo_stroke (cr);
+ /* Draw bottom shade */
+ pattern = cairo_pattern_create_linear (0.0, height-5.0, 0.0, height-1.0);
+ cairo_pattern_add_color_stop_rgba (pattern, 0.0, shadow.r, shadow.g, shadow.b, 0.0);
+ cairo_pattern_add_color_stop_rgba (pattern, 1.0, shadow.r, shadow.g, shadow.b, 0.3);
+
+ cairo_rectangle (cr, 0.0, height-5.0, width, 4.0);
+ cairo_set_source (cr, pattern);
+ cairo_fill (cr);
+ cairo_pattern_destroy (pattern);
+
/* Draw resize grip */
- if ((params->ltr && !(header->order & CL_ORDER_LAST)) ||
- (!params->ltr && !(header->order & CL_ORDER_FIRST)) || header->resizable)
+ if ((params->ltr && header->order != CL_ORDER_LAST) ||
+ (!params->ltr && header->order != CL_ORDER_FIRST) || header->resizable)
{
SeparatorParameters separator;
separator.horizontal = FALSE;
-
+
if (params->ltr)
params->style_functions->draw_separator (cr, colors, params, &separator,
width-1.5, 4.0, 2, height-8.0);
@@ -1469,18 +1415,18 @@ clearlooks_draw_toolbar (cairo_t *cr,
const ToolbarParameters *toolbar,
int x, int y, int width, int height)
{
- const CairoColor *fill = &colors->bg[0];
+ const CairoColor *fill = &colors->bg[GTK_STATE_NORMAL];
const CairoColor *dark = &colors->shade[3];
CairoColor light;
- ge_shade_color (fill, 1.065, &light);
-
+ ge_shade_color (fill, 1.1, &light);
+
cairo_set_line_width (cr, 1.0);
cairo_translate (cr, x, y);
ge_cairo_set_color (cr, fill);
cairo_paint (cr);
- if (!toolbar->topmost)
+ if (!toolbar->topmost)
{
/* Draw highlight */
cairo_move_to (cr, 0, 0.5);
@@ -1535,10 +1481,10 @@ clearlooks_draw_menubaritem (cairo_t *cr,
CairoColor fill_shade;
CairoColor border = colors->spot[2];
cairo_pattern_t *pattern;
-
+
ge_shade_color (&border, 1.05, &border);
ge_shade_color (fill, 0.85, &fill_shade);
-
+
cairo_set_line_width (cr, 1.0);
ge_cairo_rounded_rectangle (cr, x + 0.5, y + 0.5, width - 1, height, widget->radius, widget->corners);
@@ -1562,9 +1508,10 @@ clearlooks_draw_selected_cell (cairo_t *cr,
{
CairoColor upper_color;
CairoColor lower_color;
+ CairoColor border;
cairo_pattern_t *pattern;
cairo_save (cr);
-
+
cairo_translate (cr, x, y);
if (params->focus)
@@ -1587,6 +1534,16 @@ clearlooks_draw_selected_cell (cairo_t *cr,
cairo_fill (cr);
cairo_pattern_destroy (pattern);
+
+ ge_shade_color(&upper_color, 0.8, &border);
+
+ cairo_move_to (cr, 0, 0.5);
+ cairo_rel_line_to (cr, width, 0);
+ cairo_move_to (cr, 0, height-0.5);
+ cairo_rel_line_to (cr, width, 0);
+
+ ge_cairo_set_color (cr, &border);
+ cairo_stroke (cr);
cairo_restore (cr);
}
@@ -1603,44 +1560,34 @@ clearlooks_draw_scrollbar_trough (cairo_t *cr,
const CairoColor *border = &colors->shade[5];
CairoColor bg_shade;
cairo_pattern_t *pattern;
- double radius = MIN (widget->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
-
+
ge_shade_color (bg, 0.95, &bg_shade);
-
+
cairo_set_line_width (cr, 1);
/* cairo_translate (cr, x, y); */
-
+
if (scrollbar->horizontal)
ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
- cairo_translate (cr, x, y);
+ cairo_translate (cr, x, y);
/* Draw fill */
- if (radius > 3.0)
- ge_cairo_rounded_rectangle (cr, 1, 0, width-2, height,
- radius, widget->corners);
- else
- cairo_rectangle (cr, 1, 0, width-2, height);
+ cairo_rectangle (cr, 1, 0, width-2, height);
ge_cairo_set_color (cr, bg);
cairo_fill (cr);
/* Draw shadow */
pattern = cairo_pattern_create_linear (1, 0, 3, 0);
cairo_pattern_add_color_stop_rgb (pattern, 0, bg_shade.r, bg_shade.g, bg_shade.b);
- cairo_pattern_add_color_stop_rgb (pattern, 1.0, bg->r, bg->g, bg->b);
+ cairo_pattern_add_color_stop_rgb (pattern, 1.0, bg->r, bg->g, bg->b);
cairo_rectangle (cr, 1, 0, 4, height);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
-
+
/* Draw border */
- if (radius > 3.0)
- ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1,
- radius, widget->corners);
- else
- cairo_rectangle (cr, 0.5, 0.5, width-1, height-1);
ge_cairo_set_color (cr, border);
- cairo_stroke (cr);
+ ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
}
static void
@@ -1655,10 +1602,11 @@ clearlooks_draw_scrollbar_stepper (cairo_t *cr,
CairoColor border;
CairoColor s1, s2, s3, s4;
cairo_pattern_t *pattern;
+ ShadowParameters shadow;
double radius = MIN (widget->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
- ge_shade_color(&colors->shade[6], 1.08, &border);
-
+ ge_shade_color(&colors->shade[6], 1.05, &border);
+
if (scrollbar->horizontal)
{
if (stepper->stepper == CL_STEPPER_A)
@@ -1673,35 +1621,45 @@ clearlooks_draw_scrollbar_stepper (cairo_t *cr,
else if (stepper->stepper == CL_STEPPER_D)
corners = CR_CORNER_BOTTOMLEFT | CR_CORNER_BOTTOMRIGHT;
}
-
+
cairo_translate (cr, x, y);
cairo_set_line_width (cr, 1);
-
+
ge_cairo_rounded_rectangle (cr, 1, 1, width-2, height-2, radius, corners);
-
+
if (scrollbar->horizontal)
pattern = cairo_pattern_create_linear (0, 0, 0, height);
else
pattern = cairo_pattern_create_linear (0, 0, width, 0);
-
- ge_shade_color (&colors->bg[widget->state_type], SHADE_TOP, &s1);
- ge_shade_color (&colors->bg[widget->state_type], SHADE_CENTER_TOP, &s2);
- ge_shade_color (&colors->bg[widget->state_type], SHADE_CENTER_BOTTOM, &s3);
- ge_shade_color (&colors->bg[widget->state_type], SHADE_BOTTOM, &s4);
-
- cairo_pattern_add_color_stop_rgb(pattern, 0, s1.r, s1.g, s1.b);
- cairo_pattern_add_color_stop_rgb(pattern, 0.3, s2.r, s2.g, s2.b);
- cairo_pattern_add_color_stop_rgb(pattern, 0.7, s3.r, s3.g, s3.b);
- cairo_pattern_add_color_stop_rgb(pattern, 1.0, s4.r, s4.g, s4.b);
+
+ s2 = colors->bg[widget->state_type];
+ ge_shade_color(&s2, 1.06, &s1);
+ ge_shade_color(&s2, 0.98, &s3);
+ ge_shade_color(&s2, 0.94, &s4);
+
+ cairo_pattern_add_color_stop_rgb(pattern, 0, s1.r, s1.g, s1.b);
+ cairo_pattern_add_color_stop_rgb(pattern, 0.5, s2.r, s2.g, s2.b);
+ cairo_pattern_add_color_stop_rgb(pattern, 0.7, s3.r, s3.g, s3.b);
+ cairo_pattern_add_color_stop_rgb(pattern, 1.0, s4.r, s4.g, s4.b);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
-
- widget->style_functions->draw_top_left_highlight (cr, &s2, widget, 1, 1, width - 2, height - 2, MAX(radius - 1, 0), corners);
-
- ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, radius, corners);
- clearlooks_set_border_gradient (cr, &border, 1.1, (scrollbar->horizontal ? 0 : width), (scrollbar->horizontal ? height: 0));
+
+ cairo_translate (cr, 0.5, 0.5);
+ clearlooks_draw_top_left_highlight (cr, &s2, widget, width, height, (stepper->stepper == CL_STEPPER_A) ? radius : 0);
+ cairo_translate (cr, -0.5, -0.5);
+
+ ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, radius, corners);
+ clearlooks_set_border_gradient (cr, &border, 1.2, (scrollbar->horizontal ? 0 : width), (scrollbar->horizontal ? height: 0));
cairo_stroke (cr);
+
+ cairo_translate (cr, 0.5, 0.5);
+ shadow.shadow = CL_SHADOW_OUT;
+ shadow.corners = corners;
+ /*
+ clearlooks_draw_highlight_and_shade (cr, &shadow,
+ width,
+ height, params->radius);*/
}
static void
@@ -1711,8 +1669,6 @@ clearlooks_draw_scrollbar_slider (cairo_t *cr,
const ScrollBarParameters *scrollbar,
int x, int y, int width, int height)
{
- cairo_save (cr);
-
if (scrollbar->junction & CL_JUNCTION_BEGIN)
{
if (scrollbar->horizontal)
@@ -1733,11 +1689,11 @@ clearlooks_draw_scrollbar_slider (cairo_t *cr,
else
height += 1;
}
-
+
if (!scrollbar->horizontal)
ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
- cairo_translate (cr, x, y);
+ cairo_translate (cr, x, y);
if (scrollbar->has_color)
{
@@ -1749,27 +1705,27 @@ clearlooks_draw_scrollbar_slider (cairo_t *cr,
if (widget->prelight)
ge_shade_color (&fill, 1.1, &fill);
-
+
cairo_set_line_width (cr, 1);
-
+
ge_shade_color (&fill, 1.3, &hilight);
ge_shade_color (&fill, 1.1, &shade1);
ge_shade_color (&fill, 1.05, &shade2);
ge_shade_color (&fill, 0.98, &shade3);
-
+
pattern = cairo_pattern_create_linear (1, 1, 1, height-2);
cairo_pattern_add_color_stop_rgb (pattern, 0, shade1.r, shade1.g, shade1.b);
cairo_pattern_add_color_stop_rgb (pattern, 0.5, shade2.r, shade2.g, shade2.b);
- cairo_pattern_add_color_stop_rgb (pattern, 0.5, shade3.r, shade3.g, shade3.b);
+ cairo_pattern_add_color_stop_rgb (pattern, 0.5, shade3.r, shade3.g, shade3.b);
cairo_pattern_add_color_stop_rgb (pattern, 1, fill.r, fill.g, fill.b);
cairo_rectangle (cr, 1, 1, width-2, height-2);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
-
+
cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.5);
ge_cairo_stroke_rectangle (cr, 1.5, 1.5, width-3, height-3);
-
+
ge_cairo_set_color (cr, border);
ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
}
@@ -1782,15 +1738,16 @@ clearlooks_draw_scrollbar_slider (cairo_t *cr,
cairo_pattern_t *pattern;
int bar_x, i;
- ge_shade_color (&colors->shade[6], 1.08, &border);
- ge_shade_color (&colors->bg[widget->state_type], SHADE_TOP, &s1);
- ge_shade_color (&colors->bg[widget->state_type], SHADE_CENTER_TOP, &s2);
- ge_shade_color (&colors->bg[widget->state_type], SHADE_CENTER_BOTTOM, &s3);
- ge_shade_color (&colors->bg[widget->state_type], SHADE_BOTTOM, &s4);
-
+ ge_shade_color(&colors->shade[6], 1.05, &border);
+
+ s2 = colors->bg[widget->state_type];
+ ge_shade_color(&s2, 1.06, &s1);
+ ge_shade_color(&s2, 0.98, &s3);
+ ge_shade_color(&s2, 0.94, &s4);
+
pattern = cairo_pattern_create_linear(1, 1, 1, height-1);
cairo_pattern_add_color_stop_rgb(pattern, 0, s1.r, s1.g, s1.b);
- cairo_pattern_add_color_stop_rgb(pattern, 0.3, s2.r, s2.g, s2.b);
+ cairo_pattern_add_color_stop_rgb(pattern, 0.5, s2.r, s2.g, s2.b);
cairo_pattern_add_color_stop_rgb(pattern, 0.7, s3.r, s3.g, s3.b);
cairo_pattern_add_color_stop_rgb(pattern, 1.0, s4.r, s4.g, s4.b);
@@ -1798,41 +1755,38 @@ clearlooks_draw_scrollbar_slider (cairo_t *cr,
cairo_set_source(cr, pattern);
cairo_fill(cr);
cairo_pattern_destroy(pattern);
-
- clearlooks_set_border_gradient (cr, &border, 1.1, 0, height);
+
+ clearlooks_set_border_gradient (cr, &border, 1.2, 0, height);
ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
-
+
cairo_move_to (cr, 1.5, height-1.5);
cairo_line_to (cr, 1.5, 1.5);
cairo_line_to (cr, width-1.5, 1.5);
- ge_shade_color (&s2, widget->style_constants->topleft_highlight_shade, &s5);
- s5.a = widget->style_constants->topleft_highlight_alpha;
- ge_cairo_set_color (cr, &s5);
+ ge_shade_color (&s2, 1.3, &s5);
+ cairo_set_source_rgba (cr, s5.r, s5.g, s5.b, 0.5);
cairo_stroke(cr);
-
+
/* draw handles */
cairo_set_line_width (cr, 1);
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
-
+
bar_x = width/2 - 4;
-
+ cairo_translate(cr, 0.5, 0.5);
for (i=0; i<3; i++)
{
- cairo_move_to (cr, bar_x + 0.5, 4);
- cairo_line_to (cr, bar_x + 0.5, height-4);
+ cairo_move_to (cr, bar_x, 4);
+ cairo_line_to (cr, bar_x, height-5);
ge_cairo_set_color (cr, dark);
cairo_stroke (cr);
-
- cairo_move_to (cr, bar_x+1.5, 4);
- cairo_line_to (cr, bar_x+1.5, height-4);
+
+ cairo_move_to (cr, bar_x+1, 4);
+ cairo_line_to (cr, bar_x+1, height-5);
ge_cairo_set_color (cr, light);
cairo_stroke (cr);
-
+
bar_x += 3;
}
}
-
- cairo_restore (cr);
+
}
static void
@@ -1850,7 +1804,7 @@ clearlooks_draw_statusbar (cairo_t *cr,
cairo_translate (cr, x, y+0.5);
cairo_move_to (cr, 0, 0);
cairo_line_to (cr, width, 0);
- ge_cairo_set_color (cr, dark);
+ ge_cairo_set_color (cr, dark);
cairo_stroke (cr);
cairo_translate (cr, 0, 1);
@@ -1869,7 +1823,11 @@ clearlooks_draw_menu_frame (cairo_t *cr,
const CairoColor *border = &colors->shade[5];
cairo_translate (cr, x, y);
cairo_set_line_width (cr, 1);
-
+/*
+ cairo_set_source_rgba (cr, colors->bg[0].r, colors->bg[0].g, colors->bg[0].b, 0.9);
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+ cairo_paint (cr);
+*/
ge_cairo_set_color (cr, border);
ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
}
@@ -1908,16 +1866,17 @@ clearlooks_draw_handle (cairo_t *cr,
{
const CairoColor *fill = &colors->bg[params->state_type];
int num_bars = 6; /* shut up gcc warnings */
-
- cairo_save (cr);
-
+ int bar_spacing;
+
switch (handle->type)
{
case CL_HANDLE_TOOLBAR:
num_bars = 6;
+ bar_spacing = 3;
break;
case CL_HANDLE_SPLITTER:
num_bars = 16;
+ bar_spacing = 3;
break;
}
@@ -1927,11 +1886,11 @@ clearlooks_draw_handle (cairo_t *cr,
ge_cairo_set_color (cr, fill);
cairo_fill (cr);
}
-
- cairo_translate (cr, x, y);
-
+
+ cairo_translate (cr, x+0.5, y+0.5);
+
cairo_set_line_width (cr, 1);
-
+
if (handle->horizontal)
{
params->style_functions->draw_gripdots (cr, colors, 0, 0, width, height, num_bars, 2, 0.1);
@@ -1940,8 +1899,6 @@ clearlooks_draw_handle (cairo_t *cr,
{
params->style_functions->draw_gripdots (cr, colors, 0, 0, width, height, 2, num_bars, 0.1);
}
-
- cairo_restore (cr);
}
static void
@@ -1957,7 +1914,7 @@ clearlooks_draw_resize_grip (cairo_t *cr,
int x_down;
int y_down;
int dots;
-
+
ge_shade_color (dark, 1.5, &hilight);
/* The number of dots fitting into the area. Just hardcoded to 4 right now. */
@@ -2028,13 +1985,6 @@ clearlooks_draw_radiobutton (cairo_t *cr,
cairo_pattern_t *pt;
gboolean inconsistent;
gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
- gdouble w, h, cx, cy, radius;
-
- w = (gdouble) width;
- h = (gdouble) height;
- cx = width / 2.0;
- cy = height / 2.0;
- radius = MIN (width, height) / 2.0;
inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
draw_bullet |= inconsistent;
@@ -2053,53 +2003,53 @@ clearlooks_draw_radiobutton (cairo_t *cr,
ge_shade_color (&widget->parentbg, 0.9, &shadow);
ge_shade_color (&widget->parentbg, 1.1, &highlight);
- pt = cairo_pattern_create_linear (0, 0, radius * 2.0, radius * 2.0);
+ pt = cairo_pattern_create_linear (0, 0, 13, 13);
cairo_pattern_add_color_stop_rgb (pt, 0.0, shadow.r, shadow.b, shadow.g);
cairo_pattern_add_color_stop_rgba (pt, 0.5, shadow.r, shadow.b, shadow.g, 0.5);
cairo_pattern_add_color_stop_rgba (pt, 0.5, highlight.r, highlight.g, highlight.b, 0.5);
cairo_pattern_add_color_stop_rgb (pt, 1.0, highlight.r, highlight.g, highlight.b);
-
+
cairo_translate (cr, x, y);
-
- cairo_set_line_width (cr, MAX (1.0, floor (radius/3)));
- cairo_arc (cr, ceil (cx), ceil (cy), floor (radius - 0.1), 0, G_PI*2);
+
+ cairo_set_line_width (cr, 2);
+ cairo_arc (cr, 7, 7, 6, 0, G_PI*2);
cairo_set_source (cr, pt);
cairo_stroke (cr);
cairo_pattern_destroy (pt);
- cairo_set_line_width (cr, MAX (1.0, floor (radius/6)));
-
- cairo_arc (cr, ceil (cx), ceil (cy), MAX (1.0, ceil (radius) - 1.5), 0, G_PI*2);
+ cairo_set_line_width (cr, 1);
+ cairo_arc (cr, 7, 7, 5.5, 0, G_PI*2);
+
if (!widget->disabled)
{
ge_cairo_set_color (cr, &colors->base[0]);
cairo_fill_preserve (cr);
}
-
+
ge_cairo_set_color (cr, border);
cairo_stroke (cr);
-
+
if (draw_bullet)
{
if (inconsistent)
{
cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
- cairo_set_line_width (cr, ceil (radius * 2 / 3));
+ cairo_set_line_width (cr, 4);
- cairo_move_to (cr, ceil (cx - radius/3.0), ceil (cy));
- cairo_line_to (cr, ceil (cx + radius/3.0), ceil (cy));
+ cairo_move_to(cr, 5, 7);
+ cairo_line_to(cr, 9, 7);
ge_cairo_set_color (cr, dot);
cairo_stroke (cr);
}
else
{
- cairo_arc (cr, ceil (cx), ceil (cy), floor (radius/2.0), 0, G_PI*2);
+ cairo_arc (cr, 7, 7, 3, 0, G_PI*2);
ge_cairo_set_color (cr, dot);
cairo_fill (cr);
-
- cairo_arc (cr, floor (cx - radius/10.0), floor (cy - radius/10.0), floor (radius/6.0), 0, G_PI*2);
+
+ cairo_arc (cr, 6, 6, 1, 0, G_PI*2);
cairo_set_source_rgba (cr, highlight.r, highlight.g, highlight.b, 0.5);
cairo_fill (cr);
}
@@ -2120,7 +2070,7 @@ clearlooks_draw_checkbox (cairo_t *cr,
inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
draw_bullet |= inconsistent;
-
+
if (widget->disabled)
{
border = &colors->shade[5];
@@ -2134,11 +2084,11 @@ clearlooks_draw_checkbox (cairo_t *cr,
cairo_translate (cr, x, y);
cairo_set_line_width (cr, 1);
-
+
if (widget->xthickness > 2 && widget->ythickness > 2)
{
- widget->style_functions->draw_inset (cr, &widget->parentbg, 0, 0, width, height, 1, CR_CORNER_ALL);
-
+ widget->style_functions->draw_inset (cr, &widget->parentbg, 0.5, 0.5, width-1, height-1, 1, CR_CORNER_ALL);
+
/* Draw the rectangle for the checkbox itself */
ge_cairo_rounded_rectangle (cr, 1.5, 1.5, width-3, height-3, (widget->radius > 0)? 1 : 0, CR_CORNER_ALL);
}
@@ -2147,13 +2097,13 @@ clearlooks_draw_checkbox (cairo_t *cr,
/* Draw the rectangle for the checkbox itself */
ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, (widget->radius > 0)? 1 : 0, CR_CORNER_ALL);
}
-
+
if (!widget->disabled)
{
ge_cairo_set_color (cr, &colors->base[0]);
cairo_fill_preserve (cr);
}
-
+
ge_cairo_set_color (cr, border);
cairo_stroke (cr);
@@ -2170,13 +2120,13 @@ clearlooks_draw_checkbox (cairo_t *cr,
cairo_set_line_width (cr, 1.7);
cairo_move_to (cr, 0.5 + (width*0.2), (height*0.5));
cairo_line_to (cr, 0.5 + (width*0.4), (height*0.7));
-
+
cairo_curve_to (cr, 0.5 + (width*0.4), (height*0.7),
0.5 + (width*0.5), (height*0.4),
0.5 + (width*0.70), (height*0.25));
}
-
+
ge_cairo_set_color (cr, dot);
cairo_stroke (cr);
}
@@ -2195,7 +2145,7 @@ clearlooks_draw_normal_arrow (cairo_t *cr, const CairoColor *color,
arrow_width = MIN (height * 2.0 + MAX (1.0, ceil (height * 2.0 / 6.0 * 2.0) / 2.0) / 2.0, width);
line_width_2 = MAX (1.0, ceil (arrow_width / 6.0 * 2.0) / 2.0) / 2.0;
arrow_height = arrow_width / 2.0 + line_width_2;
-
+
cairo_translate (cr, x, y - arrow_height / 2.0);
cairo_move_to (cr, -arrow_width / 2.0, line_width_2);
@@ -2206,10 +2156,10 @@ clearlooks_draw_normal_arrow (cairo_t *cr, const CairoColor *color,
cairo_line_to (cr, arrow_width / 2.0, line_width_2);
cairo_line_to (cr, 0, arrow_height);
cairo_close_path (cr);
-
+
ge_cairo_set_color (cr, color);
cairo_fill (cr);
-
+
cairo_restore (cr);
}
@@ -2220,13 +2170,13 @@ clearlooks_draw_combo_arrow (cairo_t *cr, const CairoColor *color,
double arrow_width = MIN (height * 2 / 3.0, width);
double arrow_height = arrow_width / 2.0;
double gap_size = 1.0 * arrow_height;
-
+
cairo_save (cr);
cairo_translate (cr, x, y - (arrow_height + gap_size) / 2.0);
cairo_rotate (cr, G_PI);
clearlooks_draw_normal_arrow (cr, color, 0, 0, arrow_width, arrow_height);
cairo_restore (cr);
-
+
clearlooks_draw_normal_arrow (cr, color, x, y + (arrow_height + gap_size) / 2.0, arrow_width, arrow_height);
}
@@ -2236,7 +2186,7 @@ _clearlooks_draw_arrow (cairo_t *cr, const CairoColor *color,
double x, double y, double width, double height)
{
double rotate;
-
+
if (dir == CL_DIRECTION_LEFT)
rotate = G_PI*1.5;
else if (dir == CL_DIRECTION_RIGHT)
@@ -2247,11 +2197,11 @@ _clearlooks_draw_arrow (cairo_t *cr, const CairoColor *color,
rotate = 0;
else
return;
-
+
if (type == CL_ARROW_NORMAL)
{
cairo_translate (cr, x, y);
- cairo_rotate (cr, -rotate);
+ cairo_rotate (cr, -rotate);
clearlooks_draw_normal_arrow (cr, color, 0, 0, width, height);
}
else if (type == CL_ARROW_COMBO)
@@ -2263,17 +2213,17 @@ _clearlooks_draw_arrow (cairo_t *cr, const CairoColor *color,
static void
clearlooks_draw_arrow (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const ArrowParameters *arrow,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const ArrowParameters *arrow,
int x, int y, int width, int height)
{
const CairoColor *color = &colors->fg[widget->state_type];
gdouble tx, ty;
-
+
tx = x + width/2.0;
ty = y + height/2.0;
-
+
if (widget->disabled)
{
_clearlooks_draw_arrow (cr, &colors->shade[0],
@@ -2282,104 +2232,48 @@ clearlooks_draw_arrow (cairo_t *cr,
}
cairo_identity_matrix (cr);
-
+
_clearlooks_draw_arrow (cr, color, arrow->direction, arrow->type,
tx, ty, width, height);
}
void
-clearlooks_draw_focus (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const FocusParameters *focus,
- int x, int y, int width, int height)
-{
- if (focus->has_color)
- ge_cairo_set_color (cr, &focus->color);
- else if (focus->type == CL_FOCUS_COLOR_WHEEL_LIGHT)
- cairo_set_source_rgb (cr, 0., 0., 0.);
- else if (focus->type == CL_FOCUS_COLOR_WHEEL_DARK)
- cairo_set_source_rgb (cr, 1., 1., 1.);
- else
- cairo_set_source_rgba (cr,
- colors->fg[widget->state_type].r,
- colors->fg[widget->state_type].g,
- colors->fg[widget->state_type].b,
- 0.7);
-
- cairo_set_line_width (cr, focus->line_width);
-
- if (focus->dash_list[0])
- {
- gint n_dashes = strlen ((gchar *)focus->dash_list);
- gdouble *dashes = g_new (gdouble, n_dashes);
- gdouble total_length = 0;
- gdouble dash_offset;
- gint i;
-
- for (i = 0; i < n_dashes; i++)
- {
- dashes[i] = focus->dash_list[i];
- total_length += focus->dash_list[i];
- }
-
- dash_offset = -focus->line_width / 2.0;
- while (dash_offset < 0)
- dash_offset += total_length;
-
- cairo_set_dash (cr, dashes, n_dashes, dash_offset);
- g_free (dashes);
- }
-
- cairo_rectangle (cr,
- x + focus->line_width / 2.0,
- y + focus->line_width / 2.0,
- width - focus->line_width, height - focus->line_width);
- cairo_stroke (cr);
-}
-
-void
-clearlooks_register_style_classic (ClearlooksStyleFunctions *functions, ClearlooksStyleConstants *constants)
+clearlooks_register_style_classic (ClearlooksStyleFunctions *functions)
{
g_assert (functions);
- functions->draw_top_left_highlight = clearlooks_draw_top_left_highlight;
- functions->draw_button = clearlooks_draw_button;
- functions->draw_scale_trough = clearlooks_draw_scale_trough;
- functions->draw_progressbar_trough = clearlooks_draw_progressbar_trough;
- functions->draw_progressbar_fill = clearlooks_draw_progressbar_fill;
- functions->draw_slider_button = clearlooks_draw_slider_button;
- functions->draw_entry = clearlooks_draw_entry;
- functions->draw_spinbutton = clearlooks_draw_spinbutton;
- functions->draw_spinbutton_down = clearlooks_draw_spinbutton_down;
- functions->draw_optionmenu = clearlooks_draw_optionmenu;
- functions->draw_inset = clearlooks_draw_inset;
- functions->draw_menubar = clearlooks_draw_menubar;
- functions->draw_tab = clearlooks_draw_tab;
- functions->draw_frame = clearlooks_draw_frame;
- functions->draw_separator = clearlooks_draw_separator;
+ functions->draw_button = clearlooks_draw_button;
+ functions->draw_scale_trough = clearlooks_draw_scale_trough;
+ functions->draw_progressbar_trough = clearlooks_draw_progressbar_trough;
+ functions->draw_progressbar_fill = clearlooks_draw_progressbar_fill;
+ functions->draw_slider_button = clearlooks_draw_slider_button;
+ functions->draw_entry = clearlooks_draw_entry;
+ functions->draw_spinbutton = clearlooks_draw_spinbutton;
+ functions->draw_spinbutton_down = clearlooks_draw_spinbutton_down;
+ functions->draw_optionmenu = clearlooks_draw_optionmenu;
+ functions->draw_inset = clearlooks_draw_inset;
+ functions->draw_menubar = clearlooks_draw_menubar;
+ functions->draw_tab = clearlooks_draw_tab;
+ functions->draw_frame = clearlooks_draw_frame;
+ functions->draw_separator = clearlooks_draw_separator;
functions->draw_menu_item_separator = clearlooks_draw_menu_item_separator;
- functions->draw_list_view_header = clearlooks_draw_list_view_header;
- functions->draw_toolbar = clearlooks_draw_toolbar;
- functions->draw_menuitem = clearlooks_draw_menuitem;
- functions->draw_menubaritem = clearlooks_draw_menubaritem;
- functions->draw_selected_cell = clearlooks_draw_selected_cell;
- functions->draw_scrollbar_stepper = clearlooks_draw_scrollbar_stepper;
- functions->draw_scrollbar_slider = clearlooks_draw_scrollbar_slider;
- functions->draw_scrollbar_trough = clearlooks_draw_scrollbar_trough;
- functions->draw_statusbar = clearlooks_draw_statusbar;
- functions->draw_menu_frame = clearlooks_draw_menu_frame;
- functions->draw_tooltip = clearlooks_draw_tooltip;
- functions->draw_handle = clearlooks_draw_handle;
- functions->draw_resize_grip = clearlooks_draw_resize_grip;
- functions->draw_arrow = clearlooks_draw_arrow;
- functions->draw_focus = clearlooks_draw_focus;
- functions->draw_checkbox = clearlooks_draw_checkbox;
- functions->draw_radiobutton = clearlooks_draw_radiobutton;
- functions->draw_shadow = clearlooks_draw_shadow;
- functions->draw_slider = clearlooks_draw_slider;
- functions->draw_gripdots = clearlooks_draw_gripdots;
-
- constants->topleft_highlight_shade = 1.3;
- constants->topleft_highlight_alpha = 0.6;
+ functions->draw_list_view_header = clearlooks_draw_list_view_header;
+ functions->draw_toolbar = clearlooks_draw_toolbar;
+ functions->draw_menuitem = clearlooks_draw_menuitem;
+ functions->draw_menubaritem = clearlooks_draw_menubaritem;
+ functions->draw_selected_cell = clearlooks_draw_selected_cell;
+ functions->draw_scrollbar_stepper = clearlooks_draw_scrollbar_stepper;
+ functions->draw_scrollbar_slider = clearlooks_draw_scrollbar_slider;
+ functions->draw_scrollbar_trough = clearlooks_draw_scrollbar_trough;
+ functions->draw_statusbar = clearlooks_draw_statusbar;
+ functions->draw_menu_frame = clearlooks_draw_menu_frame;
+ functions->draw_tooltip = clearlooks_draw_tooltip;
+ functions->draw_handle = clearlooks_draw_handle;
+ functions->draw_resize_grip = clearlooks_draw_resize_grip;
+ functions->draw_arrow = clearlooks_draw_arrow;
+ functions->draw_checkbox = clearlooks_draw_checkbox;
+ functions->draw_radiobutton = clearlooks_draw_radiobutton;
+ functions->draw_shadow = clearlooks_draw_shadow;
+ functions->draw_slider = clearlooks_draw_slider;
+ functions->draw_gripdots = clearlooks_draw_gripdots;
}
diff --git a/libs/clearlooks-newer/clearlooks_draw.h b/libs/clearlooks-newer/clearlooks_draw.h
new file mode 100644
index 0000000000..a3f26764da
--- /dev/null
+++ b/libs/clearlooks-newer/clearlooks_draw.h
@@ -0,0 +1,17 @@
+#ifndef CLEARLOOKS_DRAW_H
+#define CLEARLOOKS_DRAW_H
+
+#include "clearlooks_types.h"
+#include "clearlooks_style.h"
+
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+
+#include <cairo.h>
+
+GE_INTERNAL void clearlooks_register_style_classic (ClearlooksStyleFunctions *functions);
+GE_INTERNAL void clearlooks_register_style_glossy (ClearlooksStyleFunctions *functions);
+GE_INTERNAL void clearlooks_register_style_gummy (ClearlooksStyleFunctions *functions);
+GE_INTERNAL void clearlooks_register_style_inverted (ClearlooksStyleFunctions *functions);
+
+#endif /* CLEARLOOKS_DRAW_H */
diff --git a/libs/clearlooks/clearlooks_draw_glossy.c b/libs/clearlooks-newer/clearlooks_draw_glossy.c
index 752b31b3e2..8a5921efc2 100644
--- a/libs/clearlooks/clearlooks_draw_glossy.c
+++ b/libs/clearlooks-newer/clearlooks_draw_glossy.c
@@ -36,9 +36,9 @@
static void
clearlooks_draw_glossy_gradient (cairo_t *cr,
- double x, double y, int width, int height,
- const CairoColor *color,
- gboolean disabled, gboolean radius, CairoCorners corners)
+ double x, double y, int width, int height,
+ const CairoColor *color,
+ gboolean disabled, gboolean radius, CairoCorners corners)
{
CairoColor a, b, c, d;
cairo_pattern_t *pt;
@@ -49,10 +49,10 @@ clearlooks_draw_glossy_gradient (cairo_t *cr,
ge_shade_color (color, disabled? 1.02 : 1.08, &d);
pt = cairo_pattern_create_linear (x, y, x, y+height);
- cairo_pattern_add_color_stop_rgb (pt, 0.0, a.r, a.g, a.b);
- cairo_pattern_add_color_stop_rgb (pt, 0.5, b.r, b.g, b.b);
- cairo_pattern_add_color_stop_rgb (pt, 0.5, c.r, c.g, c.b);
- cairo_pattern_add_color_stop_rgb (pt, 1.0, d.r, d.g, d.b);
+ cairo_pattern_add_color_stop_rgb (pt, 0.0, a.r, a.g, a.b);
+ cairo_pattern_add_color_stop_rgb (pt, 0.5, b.r, b.g, b.b);
+ cairo_pattern_add_color_stop_rgb (pt, 0.5, c.r, c.g, c.b);
+ cairo_pattern_add_color_stop_rgb (pt, 1.0, d.r, d.g, d.b);
cairo_set_source (cr, pt);
ge_cairo_rounded_rectangle (cr, x, y, width, height, radius, corners);
@@ -73,66 +73,60 @@ clearlooks_set_mixed_color (cairo_t *cr,
ge_cairo_set_color (cr, &composite);
}
-/* This draw_inset implementation only differes in the shades values from the
- * default one. */
static void
clearlooks_glossy_draw_inset (cairo_t *cr,
const CairoColor *bg_color,
- double x, double y, double width, double height,
+ double x, double y, double w, double h,
double radius, uint8 corners)
{
CairoColor shadow;
CairoColor highlight;
- double line_width;
- double min = MIN (width, height);
-
- line_width = cairo_get_line_width (cr);
/* not really sure of shading ratios... we will think */
ge_shade_color (bg_color, 0.93, &shadow);
ge_shade_color (bg_color, 1.07, &highlight);
/* highlight */
- cairo_save (cr);
+ cairo_move_to (cr, x + w + (radius * -0.2928932188), y - (radius * -0.2928932188)); /* 0.2928932... 1-sqrt(2)/2 gives middle of curve */
- cairo_move_to (cr, x, y + height);
- cairo_line_to (cr, x + min / 2.0, y + height - min / 2.0);
- cairo_line_to (cr, x + width - min / 2.0, y + min / 2.0);
- cairo_line_to (cr, x + width, y);
- cairo_line_to (cr, x, y);
- cairo_close_path (cr);
-
- cairo_clip (cr);
+ if (corners & CR_CORNER_TOPRIGHT)
+ cairo_arc (cr, x + w - radius, y + radius, radius, G_PI * 1.75, G_PI * 2);
+ else
+ cairo_line_to (cr, x + w, y);
- ge_cairo_rounded_rectangle (cr, x + line_width / 2.0, y + line_width / 2.0,
- width - line_width, height - line_width,
- radius, corners);
+ if (corners & CR_CORNER_BOTTOMRIGHT)
+ cairo_arc (cr, x + w - radius, y + h - radius, radius, 0, G_PI * 0.5);
+ else
+ cairo_line_to (cr, x + w, y + h);
- ge_cairo_set_color (cr, &shadow);
+ if (corners & CR_CORNER_BOTTOMLEFT)
+ cairo_arc (cr, x + radius, y + h - radius, radius, G_PI * 0.5, G_PI * 0.75);
+ else
+ cairo_line_to (cr, x, y + h);
+
+ ge_cairo_set_color (cr, &highlight);
cairo_stroke (cr);
-
- cairo_restore (cr);
/* shadow */
- cairo_save (cr);
+ cairo_move_to (cr, x + (radius * 0.2928932188), y + h + (radius * -0.2928932188));
- cairo_move_to (cr, x, y + height);
- cairo_line_to (cr, x + min / 2.0, y + height - min / 2.0);
- cairo_line_to (cr, x + width - min / 2.0, y + min / 2.0);
- cairo_line_to (cr, x + width, y);
- cairo_line_to (cr, x + width, y + height);
- cairo_close_path (cr);
-
- cairo_clip (cr);
+ if (corners & CR_CORNER_BOTTOMLEFT)
+ cairo_arc (cr, x + radius, y + h - radius, radius, M_PI * 0.75, M_PI);
+ else
+ cairo_line_to (cr, x, y + h);
- ge_cairo_rounded_rectangle (cr, x + line_width / 2.0, y + line_width / 2.0,
- width - line_width, height - line_width,
- radius, corners);
+ if (corners & CR_CORNER_TOPLEFT)
+ cairo_arc (cr, x + radius, y + radius, radius, M_PI, M_PI * 1.5);
+ else
+ cairo_line_to (cr, x, y);
- ge_cairo_set_color (cr, &highlight);
- cairo_stroke (cr);
+ if (corners & CR_CORNER_TOPRIGHT)
+ cairo_arc (cr, x + w - radius, y + radius, radius, M_PI * 1.5, M_PI * 1.75);
+ else
+ cairo_line_to (cr, x + w, y);
- cairo_restore (cr);
+ ge_cairo_set_color (cr, &shadow);
+ cairo_stroke (cr);
}
static void
@@ -173,17 +167,17 @@ clearlooks_glossy_draw_light_inset (cairo_t *cr,
cairo_move_to (cr, x + (radius * 0.2928932188), y + h + (radius * -0.2928932188));
if (corners & CR_CORNER_BOTTOMLEFT)
- cairo_arc (cr, x + radius, y + h - radius, radius, G_PI * 0.75, G_PI);
+ cairo_arc (cr, x + radius, y + h - radius, radius, M_PI * 0.75, M_PI);
else
cairo_line_to (cr, x, y + h);
if (corners & CR_CORNER_TOPLEFT)
- cairo_arc (cr, x + radius, y + radius, radius, G_PI, G_PI * 1.5);
+ cairo_arc (cr, x + radius, y + radius, radius, M_PI, M_PI * 1.5);
else
cairo_line_to (cr, x, y);
if (corners & CR_CORNER_TOPRIGHT)
- cairo_arc (cr, x + w - radius, y + radius, radius, G_PI * 1.5, G_PI * 1.75);
+ cairo_arc (cr, x + w - radius, y + radius, radius, M_PI * 1.5, M_PI * 1.75);
else
cairo_line_to (cr, x + w, y);
@@ -191,7 +185,6 @@ clearlooks_glossy_draw_light_inset (cairo_t *cr,
cairo_stroke (cr);
}
-/* This function currently assumes that the input is translated by 0.5px! */
static void
clearlooks_glossy_draw_highlight_and_shade (cairo_t *cr,
const CairoColor *bg_color,
@@ -248,9 +241,9 @@ clearlooks_glossy_draw_highlight_and_shade (cairo_t *cr,
static void
clearlooks_glossy_draw_button (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *params,
- int x, int y, int width, int height)
+ const ClearlooksColors *colors,
+ const WidgetParameters *params,
+ int x, int y, int width, int height)
{
double xoffset = 0, yoffset = 0;
CairoColor fill = colors->bg[params->state_type];
@@ -264,7 +257,7 @@ clearlooks_glossy_draw_button (cairo_t *cr,
cairo_translate (cr, x, y);
cairo_set_line_width (cr, 1.0);
- /* Shadows and shadow */
+ /* Shadows and Glow */
if (params->xthickness == 3 || params->ythickness == 3)
{
if (params->xthickness == 3)
@@ -277,32 +270,35 @@ clearlooks_glossy_draw_button (cairo_t *cr,
if (params->xthickness == 3 || params->ythickness == 3)
{
- /* if (params->enable_shadow && !params->active && !params->disabled) */
- if (!params->active && (params->prelight || params->enable_shadow))
+ cairo_translate (cr, 0.5, 0.5);
+
+ /* if (params->enable_glow && !params->active && !params->disabled) */
+ if (params->prelight && params->enable_glow && !params->active)
{
- /* shadow becomes a shadow to have 3d prelight buttons :) */
- CairoColor shadow;
+ /* Glow becomes a shadow to have 3d prelight buttons :) */
+ CairoColor glow;
radius = MIN (params->radius, MIN ((width - 2.0 - 2*xoffset) / 2.0 - 1.0, (height - 2.0 - 2*yoffset) / 2.0 - 1.0));
- ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, radius+1, params->corners);
- ge_shade_color (&params->parentbg, 0.96, &shadow);
- ge_cairo_set_color (cr, &shadow);
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius+1, params->corners);
+ ge_shade_color (&params->parentbg, 0.96, &glow);
+ ge_cairo_set_color (cr, &glow);
cairo_stroke (cr);
- ge_cairo_rounded_rectangle (cr, 1.5, 1.5, width-2, height-2, radius+1, params->corners);
- ge_shade_color (&params->parentbg, 0.92, &shadow);
- ge_cairo_set_color (cr, &shadow);
+ ge_cairo_rounded_rectangle (cr, 1, 1, width-2, height-2, radius+1, params->corners);
+ ge_shade_color (&params->parentbg, 0.92, &glow);
+ ge_cairo_set_color (cr, &glow);
cairo_stroke (cr);
}
- else
- {
+
+ /* if (!(params->enable_glow && !params->active && !params->disabled)) */
+ if (!(params->prelight && params->enable_glow && !params->active))
if (!(params->disabled))
- params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width, height, params->radius+1, params->corners);
+ params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width-1, height-1, params->radius+1, params->corners);
else
/*Draw a lighter inset */
- clearlooks_glossy_draw_light_inset (cr, &params->parentbg, 0, 0, width, height, params->radius+1, params->corners);
- }
+ clearlooks_glossy_draw_light_inset (cr, &params->parentbg, 0, 0, width-1, height-1, params->radius+1, params->corners);
+ cairo_translate (cr, -0.5, -0.5);
}
clearlooks_draw_glossy_gradient (cr, xoffset+1, yoffset+1,
@@ -343,30 +339,30 @@ clearlooks_glossy_draw_button (cairo_t *cr,
/* Default button highlight */
if (params->is_default && !params->active && !params->disabled)
{
- const CairoColor *shadow = &colors->spot[0];
+ const CairoColor *glow = &colors->spot[0];
double hh = (height-5)/2.0 + 1;
cairo_rectangle (cr, 3.5, 3.5, width-7, height-7);
- ge_cairo_set_color (cr, shadow);
+ ge_cairo_set_color (cr, glow);
cairo_stroke (cr);
- shadow = &colors->spot[0];
+ glow = &colors->spot[0];
cairo_move_to (cr, 2.5, 2.5+hh); cairo_rel_line_to (cr, 0, -hh);
cairo_rel_line_to (cr, width-5, 0); cairo_rel_line_to (cr, 0, hh);
- ge_cairo_set_color (cr, shadow);
+ ge_cairo_set_color (cr, glow);
cairo_stroke (cr);
hh--;
- shadow = &colors->spot[1];
+ glow = &colors->spot[1];
cairo_move_to (cr, 2.5, 2.5+hh); cairo_rel_line_to (cr, 0, hh);
cairo_rel_line_to (cr, width-5, 0); cairo_rel_line_to (cr, 0, -hh);
- ge_cairo_set_color (cr, shadow);
+ ge_cairo_set_color (cr, glow);
cairo_stroke (cr);
}
/* Border */
- if (params->is_default || (params->prelight && params->enable_shadow))
+ if (params->is_default || (params->prelight && params->enable_glow))
border_normal = colors->spot[2];
/* ge_mix_color (&border_normal, &colors->spot[2], 0.5, &border_normal); */
if (params->disabled)
@@ -395,6 +391,12 @@ clearlooks_glossy_draw_progressbar_trough (cairo_t *cr,
cairo_set_line_width (cr, 1.0);
+ /* Fill with bg color */
+ ge_cairo_set_color (cr, &colors->bg[params->state_type]);
+
+ cairo_rectangle (cr, x, y, width, height);
+ cairo_fill (cr);
+
/* Create trough box */
ge_cairo_rounded_rectangle (cr, x+1, y+1, width-2, height-2, radius, params->corners);
ge_cairo_set_color (cr, &colors->shade[2]);
@@ -602,21 +604,20 @@ clearlooks_glossy_scale_draw_gradient (cairo_t *cr,
{
cairo_pattern_t *pattern;
- pattern = cairo_pattern_create_linear (0.5, 0.5, horizontal ? 0.5 : width + 1, horizontal ? height + 1 : 0.5);
+ pattern = cairo_pattern_create_linear (0, 0, horizontal ? 0 : width, horizontal ? height : 0);
cairo_pattern_add_color_stop_rgb (pattern, 0.0, c1->r, c1->g, c1->b);
cairo_pattern_add_color_stop_rgb (pattern, 1.0, c2->r, c2->g, c2->b);
- cairo_rectangle (cr, x, y, width, height);
+ cairo_rectangle (cr, x+0.5, y+0.5, width-1, height-1);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
clearlooks_set_mixed_color (cr, c3, c1, 0.3);
- ge_cairo_inner_rectangle (cr, x, y, width, height);
- cairo_stroke (cr);
+ ge_cairo_stroke_rectangle (cr, x, y, width, height);
}
-#define TROUGH_SIZE 7
+#define TROUGH_SIZE 6
static void
clearlooks_glossy_draw_scale_trough (cairo_t *cr,
const ClearlooksColors *colors,
@@ -627,44 +628,43 @@ clearlooks_glossy_draw_scale_trough (cairo_t *cr,
int trough_width, trough_height;
double translate_x, translate_y;
- cairo_save (cr);
-
if (slider->horizontal)
{
- trough_width = width;
- trough_height = TROUGH_SIZE;
+ trough_width = width-3;
+ trough_height = TROUGH_SIZE-2;
- translate_x = x;
- translate_y = y + (height/2) - (TROUGH_SIZE/2);
+ translate_x = x + 0.5;
+ translate_y = y + 0.5 + (height/2) - (TROUGH_SIZE/2);
}
else
{
- trough_width = TROUGH_SIZE;
- trough_height = height;
+ trough_width = TROUGH_SIZE-2;
+ trough_height = height-3;
- translate_x = x + (width/2) - (TROUGH_SIZE/2);
- translate_y = y;
+ translate_x = x + 0.5 + (width/2) - (TROUGH_SIZE/2);
+ translate_y = y + 0.5;
}
cairo_set_line_width (cr, 1.0);
cairo_translate (cr, translate_x, translate_y);
if (!slider->fill_level)
- params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, trough_width, trough_height, 0, 0);
+ params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, trough_width+2, trough_height+2, 0, 0);
+
+ cairo_translate (cr, 1, 1);
if (!slider->lower && !slider->fill_level)
clearlooks_glossy_scale_draw_gradient (cr, &colors->shade[3], /* top */
&colors->shade[2], /* bottom */
&colors->shade[6], /* border */
- 1.0, 1.0, trough_width - 2, trough_height - 2,
+ 0, 0, trough_width, trough_height,
slider->horizontal);
else
clearlooks_glossy_scale_draw_gradient (cr, &colors->spot[1], /* top */
&colors->spot[0], /* bottom */
&colors->spot[2], /* border */
- 1.0, 1.0, trough_width - 2, trough_height - 2,
+ 0, 0, trough_width, trough_height,
slider->horizontal);
- cairo_restore (cr);
}
static void
@@ -685,7 +685,6 @@ clearlooks_glossy_draw_tab (cairo_t *cr,
double radius;
double strip_size;
- double length;
radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
@@ -704,7 +703,6 @@ clearlooks_glossy_draw_tab (cairo_t *cr,
if (tab->gap_side == CL_GAP_TOP || tab->gap_side == CL_GAP_BOTTOM)
{
height += 3.0;
- length = height;
strip_size = 2.0/height; /* 2 pixel high strip */
if (tab->gap_side == CL_GAP_TOP)
@@ -713,7 +711,6 @@ clearlooks_glossy_draw_tab (cairo_t *cr,
else
{
width += 3.0;
- length = width;
strip_size = 2.0/width;
if (tab->gap_side == CL_GAP_LEFT)
@@ -741,8 +738,6 @@ clearlooks_glossy_draw_tab (cairo_t *cr,
shadow.shadow = CL_SHADOW_OUT;
shadow.corners = params->corners;
- /* This is the only usage of clearlooks_glossy_draw_highlight_and_shade,
- * the function assumes currently that the input is translated by 0.5 px. */
clearlooks_glossy_draw_highlight_and_shade (cr, &colors->bg[0], &shadow,
width,
height, radius);
@@ -752,23 +747,10 @@ clearlooks_glossy_draw_tab (cairo_t *cr,
{
CairoColor shadow, hilight, f1, f2;
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (0, height-2, 0, 0);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (0, 1, 0, height);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-2, 0, 1, 0);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (1, 0, width-2, 0);
- break;
- default:
- pattern = NULL;
- }
+ pattern = cairo_pattern_create_linear (tab->gap_side == CL_GAP_LEFT ? width-1 : 0,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 1,
+ tab->gap_side == CL_GAP_RIGHT ? width : 0,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 0);
ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
@@ -778,8 +760,8 @@ clearlooks_glossy_draw_tab (cairo_t *cr,
ge_shade_color (fill, 1.06, &f2);
cairo_pattern_add_color_stop_rgb (pattern, 0.0, hilight.r, hilight.g, hilight.b);
- cairo_pattern_add_color_stop_rgb (pattern, 1.0/length, hilight.r, hilight.g, hilight.b);
- cairo_pattern_add_color_stop_rgb (pattern, 1.0/length, f1.r, f1.g, f1.b);
+ cairo_pattern_add_color_stop_rgb (pattern, 1.0/height, hilight.r, hilight.g, hilight.b);
+ cairo_pattern_add_color_stop_rgb (pattern, 1.0/height, f1.r, f1.g, f1.b);
cairo_pattern_add_color_stop_rgb (pattern, 0.45, f2.r, f2.g, f2.b);
cairo_pattern_add_color_stop_rgb (pattern, 0.45, fill->r, fill->g, fill->b);
cairo_pattern_add_color_stop_rgb (pattern, 1.0, shadow.r, shadow.g, shadow.b);
@@ -790,23 +772,10 @@ clearlooks_glossy_draw_tab (cairo_t *cr,
else
{
/* Draw shade */
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (0, height-2, 0, 0);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (0, 0, 0, height);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-2, 0, 0, 0);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (0, 0, width, 0);
- break;
- default:
- pattern = NULL;
- }
+ pattern = cairo_pattern_create_linear (tab->gap_side == CL_GAP_LEFT ? width-2 : 0,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 0,
+ tab->gap_side == CL_GAP_RIGHT ? width : 0,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 0);
ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
@@ -827,23 +796,10 @@ clearlooks_glossy_draw_tab (cairo_t *cr,
}
else
{
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (2, height-2, 2, 2);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (2, 2, 2, height);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-2, 2, 2, 2);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (2, 2, width, 2);
- break;
- default:
- pattern = NULL;
- }
+ pattern = cairo_pattern_create_linear (tab->gap_side == CL_GAP_LEFT ? width-2 : 2,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 2,
+ tab->gap_side == CL_GAP_RIGHT ? width : 2,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 2);
cairo_pattern_add_color_stop_rgb (pattern, 0.0, stripe_border->r, stripe_border->g, stripe_border->b);
cairo_pattern_add_color_stop_rgb (pattern, 0.8, border->r, border->g, border->b);
@@ -868,6 +824,8 @@ clearlooks_glossy_draw_slider (cairo_t *cr,
cairo_set_line_width (cr, 1.0);
cairo_translate (cr, x, y);
+ cairo_translate (cr, -0.5, -0.5);
+
ge_shade_color (&colors->bg[params->state_type], 1.0, &fill);
if (params->prelight)
ge_shade_color (&fill, 1.1, &fill);
@@ -913,8 +871,9 @@ clearlooks_glossy_draw_slider_button (cairo_t *cr,
if (!slider->horizontal)
ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
- cairo_translate (cr, x, y);
- params->style_functions->draw_shadow (cr, colors, radius, width, height);
+ cairo_translate (cr, x+0.5, y+0.5);
+
+ params->style_functions->draw_shadow (cr, colors, radius, width-1, height-1);
params->style_functions->draw_slider (cr, colors, params, 1, 1, width-2, height-2);
}
@@ -971,12 +930,16 @@ clearlooks_glossy_draw_scrollbar_stepper (cairo_t *cr,
cairo_fill (cr);
cairo_pattern_destroy (pattern);
- ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, radius, corners);
+ cairo_translate (cr, 0.5, 0.5);
+ cairo_translate (cr, -0.5, -0.5);
+
+ ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, radius, corners);
clearlooks_set_mixed_color (cr, border, &fill, 0.2);
if (widget->prelight)
ge_cairo_set_color (cr, &colors->spot[2]);
cairo_stroke (cr);
+ cairo_translate (cr, 0.5, 0.5);
shadow.shadow = CL_SHADOW_OUT;
shadow.corners = corners;
}
@@ -1091,7 +1054,7 @@ clearlooks_glossy_draw_list_view_header (cairo_t *cr,
cairo_pattern_destroy (pattern);
/* Draw highlight */
- if (header->order & CL_ORDER_FIRST)
+ if (header->order == CL_ORDER_FIRST)
{
cairo_move_to (cr, 0.5, height-1);
cairo_line_to (cr, 0.5, 0.5);
@@ -1105,8 +1068,8 @@ clearlooks_glossy_draw_list_view_header (cairo_t *cr,
cairo_stroke (cr);
/* Draw resize grip */
- if ((params->ltr && !(header->order & CL_ORDER_LAST)) ||
- (!params->ltr && !(header->order & CL_ORDER_FIRST)) || header->resizable)
+ if ((params->ltr && header->order != CL_ORDER_LAST) ||
+ (!params->ltr && header->order != CL_ORDER_FIRST) || header->resizable)
{
SeparatorParameters separator;
separator.horizontal = FALSE;
@@ -1274,13 +1237,6 @@ clearlooks_glossy_draw_radiobutton (cairo_t *cr,
cairo_pattern_t *pt;
gboolean inconsistent;
gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
- gdouble w, h, cx, cy, radius;
-
- w = (gdouble) width;
- h = (gdouble) height;
- cx = width / 2.0;
- cy = height / 2.0;
- radius = MIN (width, height) / 2.0;
inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
draw_bullet |= inconsistent;
@@ -1302,7 +1258,7 @@ clearlooks_glossy_draw_radiobutton (cairo_t *cr,
ge_shade_color (&widget->parentbg, 0.9, &shadow);
ge_shade_color (&widget->parentbg, 1.1, &highlight);
- pt = cairo_pattern_create_linear (0, 0, radius * 2.0, radius * 2.0);
+ pt = cairo_pattern_create_linear (0, 0, 13, 13);
cairo_pattern_add_color_stop_rgb (pt, 0.0, shadow.r, shadow.b, shadow.g);
cairo_pattern_add_color_stop_rgba (pt, 0.5, shadow.r, shadow.b, shadow.g, 0.5);
cairo_pattern_add_color_stop_rgba (pt, 0.5, highlight.r, highlight.g, highlight.b, 0.5);
@@ -1310,15 +1266,15 @@ clearlooks_glossy_draw_radiobutton (cairo_t *cr,
cairo_translate (cr, x, y);
- cairo_set_line_width (cr, MAX (1.0, floor (radius/3)));
- cairo_arc (cr, ceil (cx), ceil (cy), floor (radius - 0.1), 0, G_PI*2);
+ cairo_set_line_width (cr, 2);
+ cairo_arc (cr, 7, 7, 6, 0, G_PI*2);
cairo_set_source (cr, pt);
cairo_stroke (cr);
cairo_pattern_destroy (pt);
- cairo_set_line_width (cr, MAX (1.0, floor (radius/6)));
+ cairo_set_line_width (cr, 1);
- cairo_arc (cr, ceil (cx), ceil (cy), MAX (1.0, ceil (radius) - 1.5), 0, G_PI*2);
+ cairo_arc (cr, 7, 7, 5.5, 0, G_PI*2);
if (!widget->disabled)
{
@@ -1337,21 +1293,21 @@ clearlooks_glossy_draw_radiobutton (cairo_t *cr,
if (inconsistent)
{
cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
- cairo_set_line_width (cr, ceil (radius * 2 / 3));
+ cairo_set_line_width (cr, 4);
- cairo_move_to (cr, ceil (cx - radius/3.0), ceil (cy));
- cairo_line_to (cr, ceil (cx + radius/3.0), ceil (cy));
+ cairo_move_to(cr, 5, 7);
+ cairo_line_to(cr, 9, 7);
ge_cairo_set_color (cr, dot);
cairo_stroke (cr);
}
else
{
- cairo_arc (cr, ceil (cx), ceil (cy), floor (radius/2.0), 0, G_PI*2);
+ cairo_arc (cr, 7, 7, 3, 0, G_PI*2);
ge_cairo_set_color (cr, dot);
cairo_fill (cr);
- cairo_arc (cr, floor (cx - radius/10.0), floor (cy - radius/10.0), floor (radius/6.0), 0, G_PI*2);
+ cairo_arc (cr, 6, 6, 1, 0, G_PI*2);
cairo_set_source_rgba (cr, highlight.r, highlight.g, highlight.b, 0.5);
cairo_fill (cr);
}
@@ -1392,8 +1348,8 @@ clearlooks_glossy_draw_checkbox (cairo_t *cr,
if (widget->xthickness > 2 && widget->ythickness > 2)
{
- widget->style_functions->draw_inset (cr, &widget->parentbg, 0, 0,
- width, height, (widget->radius > 0)? 1 : 0, CR_CORNER_ALL);
+ widget->style_functions->draw_inset (cr, &widget->parentbg, 0.5, 0.5,
+ width-1, height-1, (widget->radius > 0)? 1 : 0, CR_CORNER_ALL);
/* Draw the rectangle for the checkbox itself */
ge_cairo_rounded_rectangle (cr, 1.5, 1.5,
@@ -1444,7 +1400,7 @@ clearlooks_glossy_draw_checkbox (cairo_t *cr,
}
void
-clearlooks_register_style_glossy (ClearlooksStyleFunctions *functions, ClearlooksStyleConstants *constants)
+clearlooks_register_style_glossy (ClearlooksStyleFunctions *functions)
{
functions->draw_inset = clearlooks_glossy_draw_inset;
functions->draw_button = clearlooks_glossy_draw_button;
diff --git a/libs/clearlooks/clearlooks_draw_gummy.c b/libs/clearlooks-newer/clearlooks_draw_gummy.c
index ccbd7d9e0f..e2a990230b 100644
--- a/libs/clearlooks/clearlooks_draw_gummy.c
+++ b/libs/clearlooks-newer/clearlooks_draw_gummy.c
@@ -33,6 +33,10 @@
#define SHADE_CENTER_TOP 1.02
#define SHADE_BOTTOM 0.94
+/* Topleft highlight */
+#define TOPLEFT_HIGHLIGHT_SHADE 1.3
+#define TOPLEFT_HIGHLIGHT_ALPHA 0.4
+
/* Listview */
#define LISTVIEW_SHADE_TOP 1.06
#define LISTVIEW_SHADE_CENTER_TOP 1.02
@@ -43,6 +47,7 @@
#define TOOLBAR_SHADE_CENTER_TOP 1.01
#define TOOLBAR_SHADE_BOTTOM 0.97
+
static void
clearlooks_draw_gummy_gradient (cairo_t *cr,
double x, double y, int width, int height,
@@ -72,9 +77,9 @@ clearlooks_draw_gummy_gradient (cairo_t *cr,
}
static void
-clearlooks_set_mixed_color (cairo_t *cr,
- const CairoColor *color1,
- const CairoColor *color2,
+clearlooks_set_mixed_color (cairo_t *cr,
+ const CairoColor *color1,
+ const CairoColor *color2,
gdouble mix_factor)
{
CairoColor composite;
@@ -84,7 +89,7 @@ clearlooks_set_mixed_color (cairo_t *cr,
}
static void
-clearlooks_gummy_draw_highlight_and_shade (cairo_t *cr,
+clearlooks_gummy_draw_highlight_and_shade (cairo_t *cr,
const CairoColor *bg_color,
const ShadowParameters *params,
int width, int height, gdouble radius)
@@ -118,7 +123,7 @@ clearlooks_gummy_draw_highlight_and_shade (cairo_t *cr,
cairo_set_source_rgba (cr, highlight.r, highlight.g, highlight.b, 0.5);
else
cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, 0.5);
-
+
cairo_stroke (cr);
/* Bottom/Right highlight -- this includes the corners */
@@ -138,6 +143,28 @@ clearlooks_gummy_draw_highlight_and_shade (cairo_t *cr,
}
static void
+clearlooks_gummy_draw_top_left_highlight (cairo_t *cr, const CairoColor *color,
+ const WidgetParameters *params,
+ int width, int height, gdouble radius)
+{
+ CairoColor hilight;
+
+ double light_top = params->ythickness-1,
+ light_bottom = height - params->ythickness - 1,
+ light_left = params->xthickness-1,
+ light_right = width - params->xthickness - 1;
+
+ ge_shade_color (color, TOPLEFT_HIGHLIGHT_SHADE, &hilight);
+ cairo_move_to (cr, light_left, light_bottom - (int)radius/2);
+
+ ge_cairo_rounded_corner (cr, light_left, light_top, radius, params->corners & CR_CORNER_TOPLEFT);
+
+ cairo_line_to (cr, light_right - (int)radius/2, light_top);
+ cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, TOPLEFT_HIGHLIGHT_ALPHA);
+ cairo_stroke (cr);
+}
+
+static void
clearlooks_gummy_draw_button (cairo_t *cr,
const ClearlooksColors *colors,
const WidgetParameters *params,
@@ -155,27 +182,33 @@ clearlooks_gummy_draw_button (cairo_t *cr,
cairo_translate (cr, x, y);
cairo_set_line_width (cr, 1.0);
- if (params->xthickness == 3)
- xoffset = 1;
- if (params->ythickness == 3)
- yoffset = 1;
+ /* Shadows and Glow */
+ if (params->xthickness == 3 || params->ythickness == 3)
+ {
+ if (params->xthickness == 3)
+ xoffset = 1;
+ if (params->ythickness == 3)
+ yoffset = 1;
+ }
radius = MIN (params->radius, MIN ((width - 2.0 - 2*xoffset) / 2.0, (height - 2.0 - 2*yoffset) / 2.0));
if (params->xthickness == 3 || params->ythickness == 3)
{
- if (params->enable_shadow && !params->active && !params->disabled && !params->is_default)
+ cairo_translate (cr, 0.5, 0.5);
+
+ if (params->enable_glow && !params->active && !params->disabled && !params->is_default)
{
CairoColor shadow;
radius = MIN (params->radius, MIN ((width - 2.0 - 2*xoffset) / 2.0 - 1.0, (height - 2.0 - 2*yoffset) / 2.0 - 1.0));
- ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, radius+1, params->corners);
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius+1, params->corners);
ge_shade_color (&params->parentbg, 0.97, &shadow);
ge_cairo_set_color (cr, &shadow);
cairo_stroke (cr);
- ge_cairo_inner_rounded_rectangle (cr, 1, 1, width-1, height-1, radius+1, params->corners);
+ ge_cairo_rounded_rectangle (cr, 1, 1, width-2, height-2, radius+1, params->corners);
ge_shade_color (&params->parentbg, 0.93, &shadow);
ge_cairo_set_color (cr, &shadow);
cairo_stroke (cr);
@@ -187,18 +220,19 @@ clearlooks_gummy_draw_button (cairo_t *cr,
radius = MIN (params->radius, MIN ((width - 2.0 - 2*xoffset) / 2.0 - 1.0, (height - 2.0 - 2*yoffset) / 2.0 - 1.0));
- ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, radius+1, params->corners);
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius+1, params->corners);
clearlooks_set_mixed_color (cr, &params->parentbg, &shadow, 0.5);
cairo_stroke (cr);
}
- if (!(params->enable_shadow && !params->active && !params->disabled))
- params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width, height, params->radius+1, params->corners);
+ if (!(params->enable_glow && !params->active && !params->disabled))
+ params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width-1, height-1, params->radius+1, params->corners);
+ cairo_translate (cr, -0.5, -0.5);
}
- clearlooks_draw_gummy_gradient (cr, xoffset+1, yoffset+1,
- width-(xoffset*2)-2, height-(yoffset*2)-2,
- &fill, params->disabled, radius, params->corners);
+ clearlooks_draw_gummy_gradient (cr, xoffset+1, yoffset+1,
+ width-(xoffset*2)-2, height-(yoffset*2)-2,
+ &fill, params->disabled, radius, params->corners);
/* Pressed button shadow */
if (params->active)
@@ -208,7 +242,7 @@ clearlooks_gummy_draw_button (cairo_t *cr,
cairo_save (cr);
- ge_cairo_rounded_rectangle (cr, xoffset+1, yoffset+1, width-(xoffset*2)-2, height, radius,
+ ge_cairo_rounded_rectangle (cr, xoffset+1, yoffset+1, width-(xoffset*2)-2, height, radius,
params->corners & (CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMLEFT));
cairo_clip (cr);
cairo_rectangle (cr, xoffset+1, yoffset+1, width-(xoffset*2)-2, 3);
@@ -233,22 +267,21 @@ clearlooks_gummy_draw_button (cairo_t *cr,
}
/* Border */
- if (params->is_default) /* || (params->prelight && params->enable_shadow)) */
+ if (params->is_default) /* || (params->prelight && params->enable_glow)) */
border_normal = colors->spot[2];
if (params->disabled)
ge_cairo_set_color (cr, &border_disabled);
else
clearlooks_set_mixed_color (cr, &border_normal, &fill, 0.2);
ge_cairo_rounded_rectangle (cr, xoffset + 0.5, yoffset + 0.5,
- width-(xoffset*2)-1, height-(yoffset*2)-1,
- radius, params->corners);
+ width-(xoffset*2)-1, height-(yoffset*2)-1,
+ radius, params->corners);
cairo_stroke (cr);
if (!params->active)
{
- params->style_functions->draw_top_left_highlight (cr, &fill, params, 1+xoffset, 1+xoffset,
- width-(1+xoffset)*2, height-(1+xoffset)*2,
- radius, params->corners);
+ cairo_translate (cr, 0.5, 0.5);
+ clearlooks_gummy_draw_top_left_highlight (cr, &fill, params, width, height, radius);
}
cairo_restore (cr);
}
@@ -266,44 +299,48 @@ clearlooks_gummy_draw_entry (cairo_t *cr,
if (params->focus)
border = colors->spot[2];
- cairo_save (cr);
-
- cairo_translate (cr, x, y);
+ cairo_translate (cr, x+0.5, y+0.5);
cairo_set_line_width (cr, 1.0);
- /* Now fill the area we want to be base[NORMAL]. */
- ge_cairo_rounded_rectangle (cr, 2, 2, width-4, height-4, MAX(0, radius-1), params->corners);
+ /* Fill the background to get the correct corners. */
+ cairo_rectangle (cr, -0.5, -0.5, width, height);
+ ge_cairo_set_color (cr, &params->parentbg);
+ cairo_fill (cr);
+
+ /* Fill with the base color, because it was just cleared above */
+ cairo_rectangle (cr, 1.5, 1.5, width-4, height-4);
ge_cairo_set_color (cr, base);
cairo_fill (cr);
- params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width, height, radius+1, params->corners);
+ params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width-1, height-1, radius+1, params->corners);
/* Draw the inner shadow */
if (params->focus)
{
- clearlooks_set_mixed_color (cr, base, &colors->spot[1], 0.5);
- ge_cairo_inner_rounded_rectangle (cr, 2, 2, width-4, height-4, MAX(0, radius-1), params->corners);
- cairo_stroke (cr);
+ /* ge_cairo_rounded_rectangle (cr, 2, 2, width-5, height-5, RADIUS-1, params->corners); */
+ ge_cairo_set_color (cr, &colors->spot[0]);
+ ge_cairo_stroke_rectangle (cr, 2, 2, width-5, height-5);
}
else
{
- CairoColor shadow;
+ CairoColor shadow;
ge_shade_color (&border, 0.92, &shadow);
cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, params->disabled ? 0.09 : 0.18);
-
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
- cairo_move_to (cr, 2.5, height-radius);
- cairo_arc (cr, 2.5+MAX(0, radius-1), 2.5+MAX(0, radius-1), MAX(0, radius-1), G_PI, 270*(G_PI/180));
- cairo_line_to (cr, width-radius, 2.5);
+ /*
+ cairo_move_to (cr, 2, height-3);
+ cairo_arc (cr, params->xthickness+RADIUS-1, params->ythickness+RADIUS-1, RADIUS, G_PI, 270*(G_PI/180));
+ cairo_line_to (cr, width-3, 2);
+ */
+ cairo_move_to (cr, 2, height-3);
+ cairo_line_to (cr, 2, 2);
+ cairo_line_to (cr, width-3, 2);
cairo_stroke (cr);
}
- ge_cairo_inner_rounded_rectangle (cr, 1, 1, width-2, height-2, radius, params->corners);
+ ge_cairo_rounded_rectangle (cr, 1, 1, width-3, height-3, radius, params->corners);
ge_cairo_set_color (cr, &border);
cairo_stroke (cr);
-
- cairo_restore (cr);
}
static void
@@ -321,6 +358,12 @@ clearlooks_gummy_draw_progressbar_trough (cairo_t *cr,
cairo_set_line_width (cr, 1.0);
+ /* Fill with bg color */
+ ge_cairo_set_color (cr, &colors->bg[params->state_type]);
+
+ cairo_rectangle (cr, x, y, width, height);
+ cairo_fill (cr);
+
/* Create trough box */
ge_cairo_rounded_rectangle (cr, x+1, y+1, width-2, height-2, radius, params->corners);
ge_cairo_set_color (cr, &colors->shade[2]);
@@ -365,11 +408,11 @@ clearlooks_gummy_draw_progressbar_fill (cairo_t *cr,
const ProgressBarParameters *progressbar,
int x, int y, int width, int height, gint offset)
{
- boolean is_horizontal = progressbar->orientation < 2;
- double tile_pos = 0;
- double stroke_width;
- double radius;
- int x_step;
+ boolean is_horizontal = progressbar->orientation < 2;
+ double tile_pos = 0;
+ double stroke_width;
+ double radius;
+ int x_step;
cairo_pattern_t *pattern;
CairoColor shade1, shade2, shade3;
@@ -415,14 +458,14 @@ clearlooks_gummy_draw_progressbar_fill (cairo_t *cr,
cairo_paint (cr);
cairo_pattern_destroy (pattern);
- /* Draw the strokes */
+ /* Draw the Strokes */
while (tile_pos <= width+x_step)
{
cairo_move_to (cr, stroke_width/2-x_step, 0);
cairo_line_to (cr, stroke_width-x_step, 0);
cairo_line_to (cr, stroke_width/2-x_step, height);
cairo_line_to (cr, -x_step, height);
-
+
cairo_translate (cr, stroke_width, 0);
tile_pos += stroke_width;
}
@@ -529,21 +572,20 @@ clearlooks_gummy_scale_draw_gradient (cairo_t *cr,
ge_shade_color (fill, in? 0.95 : 1.1, &f1);
ge_shade_color (fill, in? 1.05 : 0.9, &f2);
- pattern = cairo_pattern_create_linear (0.5, 0.5, horizontal ? 0.5 : width + 1.0, horizontal ? height + 1.0 : 0.5);
+ pattern = cairo_pattern_create_linear (0, 0, horizontal ? 0 : width, horizontal ? height : 0);
cairo_pattern_add_color_stop_rgba (pattern, 0.0, f1.r, f1.g, f1.b, f1.a);
cairo_pattern_add_color_stop_rgba (pattern, 1.0, f2.r, f2.g, f2.b, f2.a);
- cairo_rectangle (cr, x, y, width, height);
+ cairo_rectangle (cr, x+0.5, y+0.5, width-1, height-1);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
clearlooks_set_mixed_color (cr, border, fill, 0.2);
- ge_cairo_inner_rectangle (cr, x, y, width, height);
- cairo_stroke (cr);
+ ge_cairo_stroke_rectangle (cr, x, y, width, height);
}
-#define TROUGH_SIZE 7
+#define TROUGH_SIZE 6
static void
clearlooks_gummy_draw_scale_trough (cairo_t *cr,
const ClearlooksColors *colors,
@@ -551,66 +593,60 @@ clearlooks_gummy_draw_scale_trough (cairo_t *cr,
const SliderParameters *slider,
int x, int y, int width, int height)
{
- int trough_width, trough_height;
- double translate_x, translate_y;
- CairoColor fill, border;
- gboolean in;
-
- cairo_save (cr);
+ int trough_width, trough_height;
+ double translate_x, translate_y;
if (slider->horizontal)
{
- trough_width = width;
- trough_height = TROUGH_SIZE;
+ trough_width = width-3;
+ trough_height = TROUGH_SIZE-2;
- translate_x = x;
- translate_y = y + (height/2) - (TROUGH_SIZE/2);
+ translate_x = x + 0.5;
+ translate_y = y + 0.5 + (height/2) - (TROUGH_SIZE/2);
}
else
{
- trough_width = TROUGH_SIZE;
- trough_height = height;
+ trough_width = TROUGH_SIZE-2;
+ trough_height = height-3;
- translate_x = x + (width/2) - (TROUGH_SIZE/2);
- translate_y = y;
+ translate_x = x + 0.5 + (width/2) - (TROUGH_SIZE/2);
+ translate_y = y + 0.5;
}
cairo_set_line_width (cr, 1.0);
cairo_translate (cr, translate_x, translate_y);
if (!slider->fill_level)
- params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, trough_width, trough_height, 0, 0);
+ params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, trough_width+2, trough_height+2, 0, 0);
+
+ cairo_translate (cr, 1, 1);
if (!slider->lower && !slider->fill_level)
- {
- ge_shade_color (&params->parentbg, 0.896, &fill);
- border = colors->shade[6];
- in = TRUE;
- }
+ clearlooks_gummy_scale_draw_gradient (cr,
+ &colors->shade[2], /* bottom */
+ &colors->shade[6], /* border */
+ 0, 0, trough_width, trough_height,
+ slider->horizontal, TRUE);
else if (!slider->fill_level)
- {
- fill = colors->spot[1];
- border = colors->spot[2];
- in = FALSE;
+ clearlooks_gummy_scale_draw_gradient (cr,
+ &colors->spot[1], /* bottom */
+ &colors->spot[2], /* border */
+ 0, 0, trough_width, trough_height,
+ slider->horizontal, FALSE);
+ else {
+ CairoColor c1 = colors->spot[1];
+ CairoColor c2 = colors->spot[2];
+
+ c1.a = 0.25;
+ c2.a = 0.25;
+
+ clearlooks_gummy_scale_draw_gradient (cr,
+ &c1, /* bottom */
+ &c2, /* border */
+ 0, 0, trough_width, trough_height,
+ slider->horizontal, FALSE);
}
- else
- {
- fill = colors->spot[1];
- border = colors->spot[2];
- fill.a = 0.25;
- border.a = 0.25;
-
- in = FALSE;
- }
-
- clearlooks_gummy_scale_draw_gradient (cr,
- &fill,
- &border,
- 1, 1, trough_width - 2, trough_height - 2,
- slider->horizontal, in);
-
- cairo_restore (cr);
}
static void
@@ -620,19 +656,16 @@ clearlooks_gummy_draw_tab (cairo_t *cr,
const TabParameters *tab,
int x, int y, int width, int height)
{
- const CairoColor *border = &colors->shade[5];
- const CairoColor *stripe_fill = &colors->spot[1];
- const CairoColor *stripe_border = &colors->spot[2];
- const CairoColor *fill;
- cairo_pattern_t *pattern = NULL;
+ const CairoColor *border = &colors->shade[5];
+ const CairoColor *stripe_fill = &colors->spot[1];
+ const CairoColor *stripe_border = &colors->spot[2];
+ const CairoColor *fill;
- double radius;
- double stripe_size = 2.0;
- double stripe_fill_size;
- double stripe_border_pos;
+ cairo_pattern_t *pattern;
- gboolean horizontal = FALSE;
+ double radius;
+ double strip_size;
radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
@@ -649,28 +682,18 @@ clearlooks_gummy_draw_tab (cairo_t *cr,
/* And calculate the strip size too, while you're at it */
if (tab->gap_side == CL_GAP_TOP || tab->gap_side == CL_GAP_BOTTOM)
{
- if (params->ythickness == 3)
- stripe_size = 3.0;
-
height += 3.0;
- stripe_fill_size = (tab->gap_side == CL_GAP_TOP ? stripe_size/height : stripe_size/(height-2));
- stripe_border_pos = (tab->gap_side == CL_GAP_TOP ? (stripe_size+1.0)/height : (stripe_size+1.0)/(height-2));
-
- horizontal = TRUE;
+ strip_size = 2.0/height; /* 2 pixel high strip */
if (tab->gap_side == CL_GAP_TOP)
cairo_translate (cr, 0.0, -3.0); /* gap at the other side */
}
else
{
- if (params->xthickness == 3)
- stripe_size = 3.0;
-
width += 3.0;
- stripe_fill_size = (tab->gap_side == CL_GAP_LEFT ? stripe_size/width : stripe_size/(width-2));
- stripe_border_pos = (tab->gap_side == CL_GAP_LEFT ? (stripe_size+1.0)/width : (stripe_size+1.0)/(width-2));
+ strip_size = 2.0/width;
- if (tab->gap_side == CL_GAP_LEFT)
+ if (tab->gap_side == CL_GAP_LEFT)
cairo_translate (cr, -3.0, 0.0); /* gap at the other side */
}
@@ -694,7 +717,7 @@ clearlooks_gummy_draw_tab (cairo_t *cr,
shadow.corners = params->corners;
clearlooks_gummy_draw_highlight_and_shade (cr, &colors->bg[0], &shadow,
- width, height, radius);
+ width, height, radius);
}
if (params->active)
@@ -702,70 +725,39 @@ clearlooks_gummy_draw_tab (cairo_t *cr,
CairoColor hilight;
CairoColor shade1, shade2, shade3;
- ge_shade_color (fill, 1.15, &hilight);
+ pattern = cairo_pattern_create_linear (tab->gap_side == CL_GAP_LEFT ? width-1 : 0,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 1,
+ tab->gap_side == CL_GAP_RIGHT ? width : 0,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 0);
+
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
+
+ ge_shade_color (fill, 1.14, &hilight);
ge_shade_color (fill, SHADE_TOP, &shade1);
ge_shade_color (fill, SHADE_CENTER_TOP, &shade2);
ge_shade_color (fill, SHADE_BOTTOM, &shade3);
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (0, height-2, 0, 0);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (0, 1, 0, height);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-2, 0, 1, 0);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (1, 0, width-2, 0);
- break;
- }
-
- ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
-
- cairo_pattern_add_color_stop_rgb (pattern, 0.0, hilight.r, hilight.g, hilight.b);
- cairo_pattern_add_color_stop_rgb (pattern, 1.0/(horizontal ? height : width), hilight.r, hilight.g, hilight.b);
- cairo_pattern_add_color_stop_rgb (pattern, 1.0/(horizontal ? height : width), shade1.r, shade1.g, shade1.b);
- cairo_pattern_add_color_stop_rgb (pattern, 0.45, shade2.r, shade2.g, shade2.b);
- cairo_pattern_add_color_stop_rgb (pattern, 0.45, fill->r, fill->g, fill->b);
- cairo_pattern_add_color_stop_rgb (pattern, 1.0, shade3.r, shade3.g, shade3.b);
+ cairo_pattern_add_color_stop_rgb (pattern, 0.0, hilight.r, hilight.g, hilight.b);
+ cairo_pattern_add_color_stop_rgb (pattern, 1.0/height, hilight.r, hilight.g, hilight.b);
+ cairo_pattern_add_color_stop_rgb (pattern, 1.0/height, shade1.r, shade1.g, shade1.b);
+ cairo_pattern_add_color_stop_rgb (pattern, 0.45, shade2.r, shade2.g, shade2.b);
+ cairo_pattern_add_color_stop_rgb (pattern, 0.45, fill->r, fill->g, fill->b);
+ cairo_pattern_add_color_stop_rgb (pattern, 1.0, shade3.r, shade3.g, shade3.b);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
}
else
{
- CairoColor shade1;
-
- ge_shade_color (fill, SHADE_TOP, &shade1);
-
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (0, height-2, 0, 0);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (0, 0, 0, height);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-2, 0, 0, 0);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (0, 0, width, 0);
- break;
- }
+ /* Draw shade */
+ pattern = cairo_pattern_create_linear (tab->gap_side == CL_GAP_LEFT ? width-2 : 0,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 0,
+ tab->gap_side == CL_GAP_RIGHT ? width : 0,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 0);
ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0, stripe_fill->r, stripe_fill->g, stripe_fill->b, 0.6);
- /* cairo_pattern_add_color_stop_rgba (pattern, 1.0/(horizontal ? height : width), stripe_fill->r, stripe_fill->g, stripe_fill->b, 0.34);
- cairo_pattern_add_color_stop_rgba (pattern, 1.0/(horizontal ? height : width), stripe_fill->r, stripe_fill->g, stripe_fill->b, 0.5); */
- cairo_pattern_add_color_stop_rgb (pattern, stripe_fill_size, stripe_fill->r, stripe_fill->g, stripe_fill->b);
- cairo_pattern_add_color_stop_rgba (pattern, stripe_fill_size, stripe_border->r, stripe_border->g, stripe_border->b, 0.72);
- cairo_pattern_add_color_stop_rgba (pattern, stripe_border_pos, stripe_border->r, stripe_border->g, stripe_border->b, 0.72);
- cairo_pattern_add_color_stop_rgb (pattern, stripe_border_pos, shade1.r, shade1.g, shade1.b);
+ cairo_pattern_add_color_stop_rgba (pattern, 0.0, stripe_fill->r, stripe_fill->g, stripe_fill->b, 0.5);
cairo_pattern_add_color_stop_rgba (pattern, 0.8, fill->r, fill->g, fill->b, 0.0);
cairo_set_source (cr, pattern);
cairo_fill (cr);
@@ -781,21 +773,10 @@ clearlooks_gummy_draw_tab (cairo_t *cr,
}
else
{
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (2, height-2, 2, 2);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (2, 2, 2, height);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-2, 2, 2, 2);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (2, 2, width, 2);
- break;
- }
+ pattern = cairo_pattern_create_linear (tab->gap_side == CL_GAP_LEFT ? width-2 : 2,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 2,
+ tab->gap_side == CL_GAP_RIGHT ? width : 2,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 2);
cairo_pattern_add_color_stop_rgb (pattern, 0.0, stripe_border->r, stripe_border->g, stripe_border->b);
cairo_pattern_add_color_stop_rgb (pattern, 0.8, border->r, border->g, border->b);
@@ -803,39 +784,6 @@ clearlooks_gummy_draw_tab (cairo_t *cr,
cairo_stroke (cr);
cairo_pattern_destroy (pattern);
}
-
- /* In current GTK+ focus and active cannot happen together, but we are robust against it. */
- if (params->focus && !params->active)
- {
- CairoColor focus_fill = tab->focus.color;
- CairoColor fill_shade1, fill_shade2, fill_shade3;
- CairoColor focus_border;
-
- double focus_inset_x = ((tab->gap_side == CL_GAP_TOP || tab->gap_side == CL_GAP_BOTTOM) ? 4 : stripe_size + 3);
- double focus_inset_y = ((tab->gap_side == CL_GAP_TOP || tab->gap_side == CL_GAP_BOTTOM) ? stripe_size + 3 : 4);
- double border_alpha = 0.54;
- double fill_alpha = 0.17;
-
- ge_shade_color (&focus_fill, 0.65, &focus_border);
- ge_shade_color (&focus_fill, 1.18, &fill_shade1);
- ge_shade_color (&focus_fill, 1.02, &fill_shade2);
- ge_shade_color (&focus_fill, 0.84, &fill_shade3);
-
- ge_cairo_rounded_rectangle (cr, focus_inset_x, focus_inset_y, width-focus_inset_x*2-1, height-focus_inset_y*2-1, radius-1, CR_CORNER_ALL);
- pattern = cairo_pattern_create_linear (0, 0, 0, height);
-
- cairo_pattern_add_color_stop_rgba (pattern, 0.0, fill_shade1.r, fill_shade1.g, fill_shade1.b, fill_alpha);
- cairo_pattern_add_color_stop_rgba (pattern, 0.5, fill_shade2.r, fill_shade2.g, fill_shade2.b, fill_alpha);
- cairo_pattern_add_color_stop_rgba (pattern, 0.5, focus_fill.r, focus_fill.g, focus_fill.b, fill_alpha);
- cairo_pattern_add_color_stop_rgba (pattern, 1.0, fill_shade3.r, fill_shade3.g, fill_shade3.b, fill_alpha);
- cairo_set_source (cr, pattern);
- cairo_fill_preserve (cr);
-
- cairo_pattern_destroy (pattern);
-
- clearlooks_set_mixed_color (cr, &params->parentbg, &focus_border, border_alpha);
- cairo_stroke (cr);
- }
}
static void
@@ -854,33 +802,33 @@ clearlooks_gummy_draw_separator (cairo_t *cr,
if (separator->horizontal)
{
- cairo_set_line_width (cr, 1.0);
- cairo_translate (cr, x, y+0.5);
-
- cairo_move_to (cr, 0.0, 0.0);
- cairo_line_to (cr, width, 0.0);
- ge_cairo_set_color (cr, &color);
- cairo_stroke (cr);
-
- cairo_move_to (cr, 0.0, 1.0);
- cairo_line_to (cr, width, 1.0);
- ge_cairo_set_color (cr, &hilight);
- cairo_stroke (cr);
+ cairo_set_line_width (cr, 1.0);
+ cairo_translate (cr, x, y+0.5);
+
+ cairo_move_to (cr, 0.0, 0.0);
+ cairo_line_to (cr, width, 0.0);
+ ge_cairo_set_color (cr, &color);
+ cairo_stroke (cr);
+
+ cairo_move_to (cr, 0.0, 1.0);
+ cairo_line_to (cr, width, 1.0);
+ ge_cairo_set_color (cr, &hilight);
+ cairo_stroke (cr);
}
else
{
- cairo_set_line_width (cr, 1.0);
- cairo_translate (cr, x+0.5, y);
-
- cairo_move_to (cr, 0.0, 0.0);
- cairo_line_to (cr, 0.0, height);
- ge_cairo_set_color (cr, &color);
- cairo_stroke (cr);
-
- cairo_move_to (cr, 1.0, 0.0);
- cairo_line_to (cr, 1.0, height);
- ge_cairo_set_color (cr, &hilight);
- cairo_stroke (cr);
+ cairo_set_line_width (cr, 1.0);
+ cairo_translate (cr, x+0.5, y);
+
+ cairo_move_to (cr, 0.0, 0.0);
+ cairo_line_to (cr, 0.0, height);
+ ge_cairo_set_color (cr, &color);
+ cairo_stroke (cr);
+
+ cairo_move_to (cr, 1.0, 0.0);
+ cairo_line_to (cr, 1.0, height);
+ ge_cairo_set_color (cr, &hilight);
+ cairo_stroke (cr);
}
cairo_restore (cr);
@@ -893,15 +841,17 @@ clearlooks_gummy_draw_slider (cairo_t *cr,
int x, int y, int width, int height)
{
const CairoColor *border = &colors->shade[7];
- CairoColor fill;
- CairoColor shade1, shade2, shade3;
+ CairoColor fill;
+ CairoColor shade1, shade2, shade3;
cairo_pattern_t *pattern;
int bar_x, i;
int shift_x;
- cairo_set_line_width (cr, 1.0);
+ cairo_set_line_width (cr, 1.0);
cairo_translate (cr, x, y);
+ cairo_translate (cr, -0.5, -0.5);
+
ge_shade_color (&colors->bg[params->state_type], 1.0, &fill);
if (params->prelight)
ge_shade_color (&fill, 1.04, &fill);
@@ -911,10 +861,10 @@ clearlooks_gummy_draw_slider (cairo_t *cr,
ge_shade_color (&fill, SHADE_BOTTOM, &shade3);
pattern = cairo_pattern_create_linear (1, 1, 1, height-2);
- cairo_pattern_add_color_stop_rgb (pattern, 0, shade1.r, shade1.g, shade1.b);
- cairo_pattern_add_color_stop_rgb (pattern, 0.5, shade2.r, shade2.g, shade2.b);
- cairo_pattern_add_color_stop_rgb (pattern, 0.5, fill.r, fill.g, fill.b);
- cairo_pattern_add_color_stop_rgb (pattern, 1.0, shade3.r, shade3.g, shade3.b);
+ cairo_pattern_add_color_stop_rgb(pattern, 0, shade1.r, shade1.g, shade1.b);
+ cairo_pattern_add_color_stop_rgb(pattern, 0.5, shade2.r, shade2.g, shade2.b);
+ cairo_pattern_add_color_stop_rgb(pattern, 0.5, fill.r, fill.g, fill.b);
+ cairo_pattern_add_color_stop_rgb(pattern, 1.0, shade3.r, shade3.g, shade3.b);
cairo_rectangle (cr, 1, 1, width-2, height-2);
cairo_set_source (cr, pattern);
cairo_fill (cr);
@@ -939,7 +889,7 @@ clearlooks_gummy_draw_slider (cairo_t *cr,
}
cairo_stroke (cr);
- params->style_functions->draw_top_left_highlight (cr, &fill, params, 1, 1, width-2, height-2, 2.0, params->corners);
+ clearlooks_gummy_draw_top_left_highlight (cr, &fill, params, width, height, 2.0);
}
static void
@@ -956,9 +906,9 @@ clearlooks_gummy_draw_slider_button (cairo_t *cr,
if (!slider->horizontal)
ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
- cairo_translate (cr, x, y);
+ cairo_translate (cr, x+0.5, y+0.5);
- params->style_functions->draw_shadow (cr, colors, radius, width, height);
+ params->style_functions->draw_shadow (cr, colors, radius, width-1, height-1);
params->style_functions->draw_slider (cr, colors, params, 1, 1, width-2, height-2);
}
@@ -975,6 +925,7 @@ clearlooks_gummy_draw_scrollbar_stepper (cairo_t *cr,
CairoColor fill;
CairoColor shade1, shade2, shade3;
cairo_pattern_t *pattern;
+ ShadowParameters shadow;
double radius = MIN (widget->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
if (scrollbar->horizontal)
@@ -1003,24 +954,29 @@ clearlooks_gummy_draw_scrollbar_stepper (cairo_t *cr,
pattern = cairo_pattern_create_linear (0, 0, width, 0);
fill = colors->bg[widget->state_type];
- ge_shade_color (&fill, SHADE_TOP, &shade1);
- ge_shade_color (&fill, SHADE_CENTER_TOP, &shade2);
- ge_shade_color (&fill, SHADE_BOTTOM, &shade3);
-
- cairo_pattern_add_color_stop_rgb (pattern, 0, shade1.r, shade1.g, shade1.b);
- cairo_pattern_add_color_stop_rgb (pattern, 0.5, shade2.r, shade2.g, shade2.b);
- cairo_pattern_add_color_stop_rgb (pattern, 0.5, fill.r, fill.g, fill.b);
- cairo_pattern_add_color_stop_rgb (pattern, 1.0, shade3.r, shade3.g, shade3.b);
+ ge_shade_color(&fill, SHADE_TOP, &shade1);
+ ge_shade_color(&fill, SHADE_CENTER_TOP, &shade2);
+ ge_shade_color(&fill, SHADE_BOTTOM, &shade3);
+
+ cairo_pattern_add_color_stop_rgb(pattern, 0, shade1.r, shade1.g, shade1.b);
+ cairo_pattern_add_color_stop_rgb(pattern, 0.5, shade2.r, shade2.g, shade2.b);
+ cairo_pattern_add_color_stop_rgb(pattern, 0.5, fill.r, fill.g, fill.b);
+ cairo_pattern_add_color_stop_rgb(pattern, 1.0, shade3.r, shade3.g, shade3.b);
cairo_set_source (cr, pattern);
cairo_fill (cr);
cairo_pattern_destroy (pattern);
- widget->style_functions->draw_top_left_highlight (cr, &fill, widget, 1, 1, width - 2, height - 2,
- radius, corners);
+ cairo_translate (cr, 0.5, 0.5);
+ clearlooks_gummy_draw_top_left_highlight (cr, &fill, widget, width, height, (stepper->stepper == CL_STEPPER_A) ? radius : 0);
+ cairo_translate (cr, -0.5, -0.5);
ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, radius, corners);
clearlooks_set_mixed_color (cr, border, &fill, 0.2);
cairo_stroke (cr);
+
+ cairo_translate (cr, 0.5, 0.5);
+ shadow.shadow = CL_SHADOW_OUT;
+ shadow.corners = corners;
}
static void
@@ -1088,7 +1044,7 @@ clearlooks_gummy_draw_scrollbar_slider (cairo_t *cr,
cairo_set_line_width (cr, 1);
- ge_shade_color (&fill, widget->style_constants->topleft_highlight_shade, &hilight);
+ ge_shade_color (&fill, TOPLEFT_HIGHLIGHT_SHADE, &hilight);
ge_shade_color (&fill, SHADE_TOP, &shade1);
ge_shade_color (&fill, SHADE_CENTER_TOP, &shade2);
ge_shade_color (&fill, SHADE_BOTTOM, &shade3);
@@ -1103,7 +1059,7 @@ clearlooks_gummy_draw_scrollbar_slider (cairo_t *cr,
cairo_fill (cr);
cairo_pattern_destroy (pattern);
- if (scrollbar->has_color)
+ if (scrollbar->has_color)
{
cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.2);
ge_cairo_stroke_rectangle (cr, 1.5, 1.5, width-3, height-3);
@@ -1113,8 +1069,8 @@ clearlooks_gummy_draw_scrollbar_slider (cairo_t *cr,
cairo_move_to (cr, 1.5, height-1.5);
cairo_line_to (cr, 1.5, 1.5);
cairo_line_to (cr, width-1.5, 1.5);
- cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, widget->style_constants->topleft_highlight_alpha);
- cairo_stroke (cr);
+ cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, TOPLEFT_HIGHLIGHT_ALPHA);
+ cairo_stroke(cr);
}
ge_cairo_set_color (cr, &border);
@@ -1174,7 +1130,7 @@ clearlooks_gummy_draw_list_view_header (cairo_t *cr,
cairo_pattern_destroy (pattern);
/* Draw highlight */
- if (header->order & CL_ORDER_FIRST)
+ if (header->order == CL_ORDER_FIRST)
{
cairo_move_to (cr, 0.5, height-1.5);
cairo_line_to (cr, 0.5, 0.5);
@@ -1188,8 +1144,8 @@ clearlooks_gummy_draw_list_view_header (cairo_t *cr,
cairo_stroke (cr);
/* Draw resize grip */
- if ((params->ltr && !(header->order & CL_ORDER_LAST)) ||
- (!params->ltr && !(header->order & CL_ORDER_FIRST)) || header->resizable)
+ if ((params->ltr && header->order != CL_ORDER_LAST) ||
+ (!params->ltr && header->order != CL_ORDER_FIRST) || header->resizable)
{
SeparatorParameters separator;
separator.horizontal = FALSE;
@@ -1250,14 +1206,14 @@ clearlooks_gummy_draw_toolbar (cairo_t *cr,
{
/* Draw highlight */
cairo_move_to (cr, 0, 0.5);
- cairo_line_to (cr, width-0.5, 0.5);
+ cairo_line_to (cr, width-1, 0.5);
ge_cairo_set_color (cr, &light);
cairo_stroke (cr);
}
/* Draw shadow */
cairo_move_to (cr, 0, height-0.5);
- cairo_line_to (cr, width-0.5, height-0.5);
+ cairo_line_to (cr, width-1, height-0.5);
ge_cairo_set_color (cr, dark);
cairo_stroke (cr);
}
@@ -1287,7 +1243,7 @@ clearlooks_gummy_draw_menuitem (cairo_t *cr,
cairo_pattern_add_color_stop_rgb (pattern, 1, shade3.r, shade3.g, shade3.b);
cairo_set_source (cr, pattern);
- cairo_fill_preserve (cr);
+ cairo_fill_preserve (cr);
cairo_pattern_destroy (pattern);
ge_cairo_set_color (cr, border);
@@ -1319,7 +1275,7 @@ clearlooks_gummy_draw_menubaritem (cairo_t *cr,
cairo_pattern_add_color_stop_rgb (pattern, 1, shade3.r, shade3.g, shade3.b);
cairo_set_source (cr, pattern);
- cairo_fill_preserve (cr);
+ cairo_fill_preserve (cr);
cairo_pattern_destroy (pattern);
ge_cairo_set_color (cr, border);
@@ -1381,13 +1337,6 @@ clearlooks_gummy_draw_radiobutton (cairo_t *cr,
cairo_pattern_t *pt;
gboolean inconsistent;
gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
- gdouble w, h, cx, cy, radius;
-
- w = (gdouble) width;
- h = (gdouble) height;
- cx = width / 2.0;
- cy = height / 2.0;
- radius = MIN (width, height) / 2.0;
inconsistent = (checkbox->shadow_type == GTK_SHADOW_ETCHED_IN);
draw_bullet |= inconsistent;
@@ -1409,7 +1358,7 @@ clearlooks_gummy_draw_radiobutton (cairo_t *cr,
ge_shade_color (&widget->parentbg, 0.9, &shadow);
ge_shade_color (&widget->parentbg, 1.1, &highlight);
- pt = cairo_pattern_create_linear (0, 0, radius * 2.0, radius * 2.0);
+ pt = cairo_pattern_create_linear (0, 0, 13, 13);
cairo_pattern_add_color_stop_rgb (pt, 0.0, shadow.r, shadow.b, shadow.g);
cairo_pattern_add_color_stop_rgba (pt, 0.5, shadow.r, shadow.b, shadow.g, 0.5);
cairo_pattern_add_color_stop_rgba (pt, 0.5, highlight.r, highlight.g, highlight.b, 0.5);
@@ -1417,15 +1366,15 @@ clearlooks_gummy_draw_radiobutton (cairo_t *cr,
cairo_translate (cr, x, y);
- cairo_set_line_width (cr, MAX (1.0, floor (radius/3)));
- cairo_arc (cr, ceil (cx), ceil (cy), floor (radius - 0.1), 0, G_PI*2);
+ cairo_set_line_width (cr, 2);
+ cairo_arc (cr, 7, 7, 6, 0, G_PI*2);
cairo_set_source (cr, pt);
cairo_stroke (cr);
cairo_pattern_destroy (pt);
- cairo_set_line_width (cr, MAX (1.0, floor (radius/6)));
+ cairo_set_line_width (cr, 1);
- cairo_arc (cr, ceil (cx), ceil (cy), MAX (1.0, ceil (radius) - 1.5), 0, G_PI*2);
+ cairo_arc (cr, 7, 7, 5.5, 0, G_PI*2);
if (!widget->disabled)
{
@@ -1444,21 +1393,21 @@ clearlooks_gummy_draw_radiobutton (cairo_t *cr,
if (inconsistent)
{
cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
- cairo_set_line_width (cr, ceil (radius * 2 / 3));
+ cairo_set_line_width (cr, 4);
- cairo_move_to (cr, ceil (cx - radius/3.0), ceil (cy));
- cairo_line_to (cr, ceil (cx + radius/3.0), ceil (cy));
+ cairo_move_to(cr, 5, 7);
+ cairo_line_to(cr, 9, 7);
ge_cairo_set_color (cr, dot);
cairo_stroke (cr);
}
else
{
- cairo_arc (cr, ceil (cx), ceil (cy), floor (radius/2.0), 0, G_PI*2);
+ cairo_arc (cr, 7, 7, 3, 0, G_PI*2);
ge_cairo_set_color (cr, dot);
cairo_fill (cr);
- cairo_arc (cr, floor (cx - radius/10.0), floor (cy - radius/10.0), floor (radius/6.0), 0, G_PI*2);
+ cairo_arc (cr, 6, 6, 1, 0, G_PI*2);
cairo_set_source_rgba (cr, highlight.r, highlight.g, highlight.b, 0.5);
cairo_fill (cr);
}
@@ -1473,7 +1422,7 @@ clearlooks_gummy_draw_checkbox (cairo_t *cr,
int x, int y, int width, int height)
{
const CairoColor *border;
- const CairoColor *dot;
+ const CairoColor *dot;
gboolean inconsistent = FALSE;
gboolean draw_bullet = (checkbox->shadow_type == GTK_SHADOW_IN);
@@ -1489,7 +1438,7 @@ clearlooks_gummy_draw_checkbox (cairo_t *cr,
{
if (widget->prelight)
border = &colors->spot[2];
- else
+ else
border = &colors->shade[6];
dot = &colors->text[GTK_STATE_NORMAL];
}
@@ -1499,25 +1448,25 @@ clearlooks_gummy_draw_checkbox (cairo_t *cr,
if (widget->xthickness > 2 && widget->ythickness > 2)
{
- widget->style_functions->draw_inset (cr, &widget->parentbg, 0, 0,
- width, height, (widget->radius > 0)? 1 : 0, CR_CORNER_ALL);
-
+ widget->style_functions->draw_inset (cr, &widget->parentbg, 0.5, 0.5,
+ width-1, height-1, (widget->radius > 0)? 1 : 0, CR_CORNER_ALL);
+
/* Draw the rectangle for the checkbox itself */
- ge_cairo_rounded_rectangle (cr, 1.5, 1.5,
- width-3, height-3, (widget->radius > 0)? 1 : 0, CR_CORNER_ALL);
+ ge_cairo_rounded_rectangle (cr, 1.5, 1.5,
+ width-3, height-3, (widget->radius > 0)? 1 : 0, CR_CORNER_ALL);
}
else
{
/* Draw the rectangle for the checkbox itself */
- ge_cairo_rounded_rectangle (cr, 0.5, 0.5,
- width-1, height-1, (widget->radius > 0)? 1 : 0, CR_CORNER_ALL);
+ ge_cairo_rounded_rectangle (cr, 0.5, 0.5,
+ width-1, height-1, (widget->radius > 0)? 1 : 0, CR_CORNER_ALL);
}
-
+
if (!widget->disabled)
- {
+ {
if (widget->prelight)
clearlooks_set_mixed_color (cr, &colors->base[0], &colors->spot[1], 0.5);
- else
+ else
ge_cairo_set_color (cr, &colors->base[0]);
cairo_fill_preserve (cr);
}
@@ -1542,6 +1491,7 @@ clearlooks_gummy_draw_checkbox (cairo_t *cr,
cairo_curve_to (cr, 0.5 + (width*0.4), (height*0.7),
0.5 + (width*0.5), (height*0.4),
0.5 + (width*0.70), (height*0.25));
+
}
ge_cairo_set_color (cr, dot);
@@ -1549,160 +1499,26 @@ clearlooks_gummy_draw_checkbox (cairo_t *cr,
}
}
-static void
-clearlooks_gummy_draw_focus (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const FocusParameters *focus,
- int x, int y, int width, int height)
-{
- CairoColor fill = focus->color;
- CairoColor fill_shade1, fill_shade2, fill_shade3;
- CairoColor border;
- CairoColor parentbg = widget->parentbg;
-
- /* Default values */
- double xoffset = 1.5;
- double yoffset = 1.5;
- double radius = widget->radius-1.0;
- double border_alpha = 0.64;
- double fill_alpha = 0.18;
- double shadow_alpha = 0.5;
- boolean focus_fill = TRUE;
- boolean focus_border = TRUE;
- boolean focus_shadow = FALSE;
-
- ge_shade_color (&fill, 0.65, &border);
- ge_shade_color (&fill, 1.18, &fill_shade1);
- ge_shade_color (&fill, 1.02, &fill_shade2);
- ge_shade_color (&fill, 0.84, &fill_shade3);
-
- /* Do some useful things to adjust focus */
- switch (focus->type)
- {
- case CL_FOCUS_BUTTON:
- xoffset = -1.5-(focus->padding);
- yoffset = -1.5-(focus->padding);
- radius++;
- border_alpha = 0.9;
- fill_alpha = 0.12;
- if (!widget->active)
- focus_shadow = TRUE;
- break;
- case CL_FOCUS_BUTTON_FLAT:
- xoffset = -1.5-(focus->padding);
- yoffset = -1.5-(focus->padding);
- radius++;
- if (widget->active || widget->prelight)
- {
- border_alpha = 0.9;
- fill_alpha = 0.12;
- if (!widget->active)
- focus_shadow = TRUE;
- }
- break;
- case CL_FOCUS_LABEL:
- xoffset = 0.5;
- yoffset = 0.5;
- break;
- case CL_FOCUS_TREEVIEW:
- parentbg = colors->base[widget->state_type];
- xoffset = -1.5;
- yoffset = -1.5;
- fill_alpha = 0.08;
- focus_border = FALSE;
- break;
- case CL_FOCUS_TREEVIEW_DND:
- parentbg = colors->base[widget->state_type];
- break;
- case CL_FOCUS_TREEVIEW_HEADER:
- cairo_translate (cr, -1, 0);
- break;
- case CL_FOCUS_TREEVIEW_ROW:
- parentbg = colors->base[widget->state_type];
- xoffset = -2.5; /* hack to hide vertical lines */
- yoffset = 0.5;
- radius = CLAMP (radius, 0.0, 2.0);
- border_alpha = 0.7;
- focus_fill = FALSE;
- break;
- case CL_FOCUS_TAB:
- /* In current GTK+ focus and active cannot happen together, but we are robust against it.
- * IF the application sets the state to ACTIVE while drawing the tabs focus. */
- if (widget->focus && !widget->active)
- return;
- break;
- case CL_FOCUS_SCALE:
- break;
- case CL_FOCUS_UNKNOWN:
- /* Fallback to classic function, dots */
- clearlooks_draw_focus (cr, colors, widget, focus, x, y, width, height);
- return;
- break;
- default:
- break;
- };
-
- cairo_translate (cr, x, y);
- cairo_set_line_width (cr, focus->line_width);
-
- ge_cairo_rounded_rectangle (cr, xoffset, yoffset, width-(xoffset*2), height-(yoffset*2), radius, widget->corners);
-
- if (focus_fill)
- {
- cairo_pattern_t *pattern;
-
- pattern = cairo_pattern_create_linear (0, 0, 0, height);
- cairo_pattern_add_color_stop_rgba (pattern, 0.0, fill_shade1.r, fill_shade1.g, fill_shade1.b, fill_alpha);
- cairo_pattern_add_color_stop_rgba (pattern, 0.5, fill_shade2.r, fill_shade2.g, fill_shade2.b, fill_alpha);
- cairo_pattern_add_color_stop_rgba (pattern, 0.5, fill.r, fill.g, fill.b, fill_alpha);
- cairo_pattern_add_color_stop_rgba (pattern, 1.0, fill_shade3.r, fill_shade3.g, fill_shade3.b, fill_alpha);
- cairo_set_source (cr, pattern);
- cairo_fill_preserve (cr);
-
- cairo_pattern_destroy (pattern);
- }
-
- if (focus_border)
- {
- clearlooks_set_mixed_color (cr, &parentbg, &border, border_alpha);
- cairo_stroke (cr);
- }
-
- if (focus_shadow)
- {
- if (radius > 0)
- radius++;
- ge_cairo_rounded_rectangle (cr, xoffset-1, yoffset-1, width-(xoffset*2)+2, height-(yoffset*2)+2, radius, widget->corners);
- clearlooks_set_mixed_color (cr, &parentbg, &fill, shadow_alpha);
- cairo_stroke (cr);
- }
-}
-
void
-clearlooks_register_style_gummy (ClearlooksStyleFunctions *functions, ClearlooksStyleConstants *constants)
+clearlooks_register_style_gummy (ClearlooksStyleFunctions *functions)
{
- functions->draw_button = clearlooks_gummy_draw_button;
- functions->draw_entry = clearlooks_gummy_draw_entry;
- functions->draw_progressbar_trough = clearlooks_gummy_draw_progressbar_trough;
- functions->draw_progressbar_fill = clearlooks_gummy_draw_progressbar_fill;
- functions->draw_scale_trough = clearlooks_gummy_draw_scale_trough;
- functions->draw_tab = clearlooks_gummy_draw_tab;
- functions->draw_separator = clearlooks_gummy_draw_separator;
- functions->draw_slider = clearlooks_gummy_draw_slider;
- functions->draw_slider_button = clearlooks_gummy_draw_slider_button;
- functions->draw_scrollbar_stepper = clearlooks_gummy_draw_scrollbar_stepper;
- functions->draw_scrollbar_slider = clearlooks_gummy_draw_scrollbar_slider;
- functions->draw_list_view_header = clearlooks_gummy_draw_list_view_header;
- functions->draw_toolbar = clearlooks_gummy_draw_toolbar;
- functions->draw_menuitem = clearlooks_gummy_draw_menuitem;
- functions->draw_menubaritem = clearlooks_gummy_draw_menubaritem;
- functions->draw_selected_cell = clearlooks_gummy_draw_selected_cell;
- functions->draw_statusbar = clearlooks_gummy_draw_statusbar;
- functions->draw_checkbox = clearlooks_gummy_draw_checkbox;
- functions->draw_radiobutton = clearlooks_gummy_draw_radiobutton;
- functions->draw_focus = clearlooks_gummy_draw_focus;
-
- constants->topleft_highlight_shade = 1.3;
- constants->topleft_highlight_alpha = 0.4;
+ functions->draw_button = clearlooks_gummy_draw_button;
+ functions->draw_entry = clearlooks_gummy_draw_entry;
+ functions->draw_progressbar_trough = clearlooks_gummy_draw_progressbar_trough;
+ functions->draw_progressbar_fill = clearlooks_gummy_draw_progressbar_fill;
+ functions->draw_scale_trough = clearlooks_gummy_draw_scale_trough;
+ functions->draw_tab = clearlooks_gummy_draw_tab;
+ functions->draw_separator = clearlooks_gummy_draw_separator;
+ functions->draw_slider = clearlooks_gummy_draw_slider;
+ functions->draw_slider_button = clearlooks_gummy_draw_slider_button;
+ functions->draw_scrollbar_stepper = clearlooks_gummy_draw_scrollbar_stepper;
+ functions->draw_scrollbar_slider = clearlooks_gummy_draw_scrollbar_slider;
+ functions->draw_list_view_header = clearlooks_gummy_draw_list_view_header;
+ functions->draw_toolbar = clearlooks_gummy_draw_toolbar;
+ functions->draw_menuitem = clearlooks_gummy_draw_menuitem;
+ functions->draw_menubaritem = clearlooks_gummy_draw_menubaritem;
+ functions->draw_selected_cell = clearlooks_gummy_draw_selected_cell;
+ functions->draw_statusbar = clearlooks_gummy_draw_statusbar;
+ functions->draw_checkbox = clearlooks_gummy_draw_checkbox;
+ functions->draw_radiobutton = clearlooks_gummy_draw_radiobutton;
}
diff --git a/libs/clearlooks/clearlooks_draw_inverted.c b/libs/clearlooks-newer/clearlooks_draw_inverted.c
index 1bfff6d206..2e8ee3bcd7 100644
--- a/libs/clearlooks/clearlooks_draw_inverted.c
+++ b/libs/clearlooks-newer/clearlooks_draw_inverted.c
@@ -30,6 +30,29 @@
static void
+clearlooks_draw_top_left_highlight (cairo_t *cr,
+ const CairoColor *color,
+ const WidgetParameters *params,
+ int width, int height, gdouble radius)
+{
+ CairoColor hilight;
+
+ double light_top = params->ythickness-1,
+ light_bottom = height - params->ythickness - 1,
+ light_left = params->xthickness-1,
+ light_right = width - params->xthickness - 1;
+
+ ge_shade_color (color, 1.3, &hilight);
+ cairo_move_to (cr, light_left, light_bottom - (int)radius/2);
+
+ ge_cairo_rounded_corner (cr, light_left, light_top, radius, params->corners & CR_CORNER_TOPLEFT);
+
+ cairo_line_to (cr, light_right - (int)radius/2, light_top);
+ cairo_set_source_rgba (cr, hilight.r, hilight.g, hilight.b, 0.7);
+ cairo_stroke (cr);
+}
+
+static void
clearlooks_set_border_gradient (cairo_t *cr, const CairoColor *color, double hilight, int width, int height)
{
cairo_pattern_t *pattern;
@@ -78,7 +101,9 @@ clearlooks_inverted_draw_button (cairo_t *cr,
if (params->xthickness == 3 || params->ythickness == 3)
{
- params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width, height, radius+1, params->corners);
+ cairo_translate (cr, 0.5, 0.5);
+ params->style_functions->draw_inset (cr, &params->parentbg, 0, 0, width-1, height-1, radius+1, params->corners);
+ cairo_translate (cr, -0.5, -0.5);
}
ge_cairo_rounded_rectangle (cr, xoffset+1, yoffset+1,
@@ -160,17 +185,15 @@ clearlooks_inverted_draw_button (cairo_t *cr,
/* Draw the "shadow" */
if (!params->active)
{
+ cairo_translate (cr, 0.5, 0.5);
/* Draw right shadow */
- cairo_move_to (cr, width-xoffset-1.5, yoffset + radius);
- cairo_line_to (cr, width-xoffset-1.5, height - yoffset - radius);
+ cairo_move_to (cr, width-params->xthickness, params->ythickness - 1);
+ cairo_line_to (cr, width-params->xthickness, height - params->ythickness - 1);
cairo_set_source_rgba (cr, shadow.r, shadow.g, shadow.b, 0.1);
cairo_stroke (cr);
/* Draw topleft shadow */
- params->style_functions->draw_top_left_highlight (cr, fill, params,
- xoffset+1, yoffset+1,
- width-2*(xoffset+1), height-2*(yoffset+1),
- radius, params->corners);
+ clearlooks_draw_top_left_highlight (cr, fill, params, width, height, radius);
}
cairo_restore (cr);
}
@@ -413,7 +436,6 @@ clearlooks_inverted_draw_tab (cairo_t *cr,
double radius;
double strip_size;
- double length;
radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
@@ -432,7 +454,6 @@ clearlooks_inverted_draw_tab (cairo_t *cr,
if (tab->gap_side == CL_GAP_TOP || tab->gap_side == CL_GAP_BOTTOM)
{
height += 3.0;
- length = height;
strip_size = 2.0/height; /* 2 pixel high strip */
if (tab->gap_side == CL_GAP_TOP)
@@ -441,7 +462,6 @@ clearlooks_inverted_draw_tab (cairo_t *cr,
else
{
width += 3.0;
- length = width;
strip_size = 2.0/width;
if (tab->gap_side == CL_GAP_LEFT)
@@ -476,23 +496,10 @@ clearlooks_inverted_draw_tab (cairo_t *cr,
if (params->active)
{
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (0, height-2, 0, 0);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (0, 1, 0, height);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-2, 0, 1, 0);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (1, 0, width-2, 0);
- break;
- default:
- pattern = NULL;
- }
+ pattern = cairo_pattern_create_linear ( tab->gap_side == CL_GAP_LEFT ? width-1 : 0,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 1,
+ tab->gap_side == CL_GAP_RIGHT ? width : 0,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 0 );
ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
@@ -509,23 +516,10 @@ clearlooks_inverted_draw_tab (cairo_t *cr,
else
{
/* Draw shade */
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (0, height-2, 0, 0);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (0, 0, 0, height);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-2, 0, 0, 0);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (0, 0, width, 0);
- break;
- default:
- pattern = NULL;
- }
+ pattern = cairo_pattern_create_linear ( tab->gap_side == CL_GAP_LEFT ? width-2 : 0,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 0,
+ tab->gap_side == CL_GAP_RIGHT ? width : 0,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 0 );
ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
@@ -548,23 +542,10 @@ clearlooks_inverted_draw_tab (cairo_t *cr,
}
else
{
- switch (tab->gap_side)
- {
- case CL_GAP_TOP:
- pattern = cairo_pattern_create_linear (2, height-2, 2, 2);
- break;
- case CL_GAP_BOTTOM:
- pattern = cairo_pattern_create_linear (2, 2, 2, height);
- break;
- case CL_GAP_LEFT:
- pattern = cairo_pattern_create_linear (width-2, 2, 2, 2);
- break;
- case CL_GAP_RIGHT:
- pattern = cairo_pattern_create_linear (2, 2, width, 2);
- break;
- default:
- pattern = NULL;
- }
+ pattern = cairo_pattern_create_linear ( tab->gap_side == CL_GAP_LEFT ? width-2 : 2,
+ tab->gap_side == CL_GAP_TOP ? height-2 : 2,
+ tab->gap_side == CL_GAP_RIGHT ? width : 2,
+ tab->gap_side == CL_GAP_BOTTOM ? height : 2 );
cairo_pattern_add_color_stop_rgb (pattern, 0.0, stripe_border->r, stripe_border->g, stripe_border->b);
cairo_pattern_add_color_stop_rgb (pattern, strip_size, stripe_border->r, stripe_border->g, stripe_border->b);
@@ -600,7 +581,7 @@ clearlooks_inverted_draw_slider (cairo_t *cr,
border = &colors->shade[6];
/* fill the widget */
- cairo_rectangle (cr, 1.0, 1.0, width-2, height-2);
+ cairo_rectangle (cr, 0.5, 0.5, width-2, height-2);
/* Fake light */
if (!params->disabled)
@@ -618,20 +599,20 @@ clearlooks_inverted_draw_slider (cairo_t *cr,
else
{
ge_cairo_set_color (cr, fill);
- cairo_rectangle (cr, 1.0, 1.0, width-2, height-2);
+ cairo_rectangle (cr, 0.5, 0.5, width-2, height-2);
cairo_fill (cr);
}
/* Set the clip */
cairo_save (cr);
- cairo_rectangle (cr, 1.0, 1.0, 6, height-2);
- cairo_rectangle (cr, width-7.0, 1.0, 6, height-2);
+ cairo_rectangle (cr, 0.5, 0.5, 6, height-2);
+ cairo_rectangle (cr, width-7.5, 0.5, 6 , height-2);
cairo_clip_preserve (cr);
cairo_new_path (cr);
/* Draw the handles */
- ge_cairo_rounded_rectangle (cr, 1.0, 1.0, width-1, height-1, radius, params->corners);
+ ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, radius, params->corners);
pattern = cairo_pattern_create_linear (0.5, 0.5, 0.5, 0.5+height);
if (params->prelight)
@@ -654,7 +635,7 @@ clearlooks_inverted_draw_slider (cairo_t *cr,
cairo_restore (cr);
/* Draw the border */
- ge_cairo_inner_rounded_rectangle (cr, 0, 0, width, height, radius, params->corners);
+ ge_cairo_rounded_rectangle (cr, 0, 0, width-1, height-1, radius, params->corners);
if (params->prelight || params->disabled)
ge_cairo_set_color (cr, border);
else
@@ -664,11 +645,11 @@ clearlooks_inverted_draw_slider (cairo_t *cr,
/* Draw handle lines */
if (width > 14)
{
- cairo_move_to (cr, 6.5, 1.0);
- cairo_line_to (cr, 6.5, height-1);
+ cairo_move_to (cr, 6, 0.5);
+ cairo_line_to (cr, 6, height-1);
- cairo_move_to (cr, width-6.5, 1.0);
- cairo_line_to (cr, width-6.5, height-1);
+ cairo_move_to (cr, width-7, 0.5);
+ cairo_line_to (cr, width-7, height-1);
cairo_set_line_width (cr, 1.0);
cairo_set_source_rgba (cr, border->r,
@@ -680,6 +661,27 @@ clearlooks_inverted_draw_slider (cairo_t *cr,
}
static void
+clearlooks_inverted_draw_slider_button (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *params,
+ const SliderParameters *slider,
+ int x, int y, int width, int height)
+{
+ double radius = MIN (params->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
+ cairo_set_line_width (cr, 1.0);
+
+ if (!slider->horizontal)
+ ge_cairo_exchange_axis (cr, &x, &y, &width, &height);
+ cairo_translate (cr, x+0.5, y+0.5);
+
+ params->style_functions->draw_shadow (cr, colors, radius, width-1, height-1);
+ params->style_functions->draw_slider (cr, colors, params, 1, 1, width-2, height-2);
+
+ if (width > 24)
+ params->style_functions->draw_gripdots (cr, colors, 0, 0, width-2, height-2, 3, 3, 0);
+}
+
+static void
clearlooks_inverted_draw_list_view_header (cairo_t *cr,
const ClearlooksColors *colors,
const WidgetParameters *params,
@@ -701,7 +703,7 @@ clearlooks_inverted_draw_list_view_header (cairo_t *cr,
cairo_set_line_width (cr, 1.0);
/* Draw highlight */
- if (header->order & CL_ORDER_FIRST)
+ if (header->order == CL_ORDER_FIRST)
{
cairo_move_to (cr, 0.5, height-1);
cairo_line_to (cr, 0.5, 0.5);
@@ -731,8 +733,8 @@ clearlooks_inverted_draw_list_view_header (cairo_t *cr,
cairo_pattern_destroy (pattern);
/* Draw resize grip */
- if ((params->ltr && !(header->order & CL_ORDER_LAST)) ||
- (!params->ltr && !(header->order & CL_ORDER_FIRST)) || header->resizable)
+ if ((params->ltr && header->order != CL_ORDER_LAST) ||
+ (!params->ltr && header->order != CL_ORDER_FIRST) || header->resizable)
{
SeparatorParameters separator;
separator.horizontal = FALSE;
@@ -759,6 +761,7 @@ clearlooks_inverted_draw_scrollbar_stepper (cairo_t *cr,
CairoColor border;
CairoColor s1, s2, s3;
cairo_pattern_t *pattern;
+ ShadowParameters shadow;
double radius = MIN (widget->radius, MIN ((width - 2.0) / 2.0, (height - 2.0) / 2.0));
ge_shade_color(&colors->shade[6], 1.05, &border);
@@ -798,11 +801,19 @@ clearlooks_inverted_draw_scrollbar_stepper (cairo_t *cr,
cairo_fill (cr);
cairo_pattern_destroy (pattern);
- widget->style_functions->draw_top_left_highlight (cr, &s1, widget, 1, 1, width-2, height-2, radius, corners);
+ clearlooks_draw_top_left_highlight (cr, &s1, widget, width, height, radius);
ge_cairo_rounded_rectangle (cr, 0.5, 0.5, width-1, height-1, radius, corners);
clearlooks_set_border_gradient (cr, &border, 1.2, (scrollbar->horizontal ? 0 : width), (scrollbar->horizontal ? height: 0));
cairo_stroke (cr);
+
+ cairo_translate (cr, 0.5, 0.5);
+ shadow.shadow = CL_SHADOW_OUT;
+ shadow.corners = corners;
+ /*
+ clearlooks_draw_highlight_and_shade (cr, &shadow,
+ width,
+ height, params->radius);*/
}
static void
@@ -898,7 +909,7 @@ clearlooks_inverted_draw_scrollbar_slider (cairo_t *cr,
cairo_fill(cr);
cairo_pattern_destroy(pattern);
- widget->style_functions->draw_top_left_highlight (cr, &s2, widget, 1, 1, width-2, height-2, 0, widget->corners);
+ clearlooks_draw_top_left_highlight (cr, &s2, widget, width, height, 0);
clearlooks_set_border_gradient (cr, &border, 1.2, 0, height);
ge_cairo_stroke_rectangle (cr, 0.5, 0.5, width-1, height-1);
@@ -974,10 +985,11 @@ clearlooks_inverted_draw_selected_cell (cairo_t *cr,
}
void
-clearlooks_register_style_inverted (ClearlooksStyleFunctions *functions, ClearlooksStyleConstants *constants)
+clearlooks_register_style_inverted (ClearlooksStyleFunctions *functions)
{
functions->draw_button = clearlooks_inverted_draw_button;
functions->draw_slider = clearlooks_inverted_draw_slider;
+ functions->draw_slider_button = clearlooks_inverted_draw_slider_button;
functions->draw_progressbar_fill = clearlooks_inverted_draw_progressbar_fill;
functions->draw_menuitem = clearlooks_inverted_draw_menuitem;
functions->draw_menubaritem = clearlooks_inverted_draw_menubaritem;
@@ -986,8 +998,5 @@ clearlooks_register_style_inverted (ClearlooksStyleFunctions *functions, Clearlo
functions->draw_scrollbar_stepper = clearlooks_inverted_draw_scrollbar_stepper;
functions->draw_scrollbar_slider = clearlooks_inverted_draw_scrollbar_slider;
functions->draw_selected_cell = clearlooks_inverted_draw_selected_cell;
-
- constants->topleft_highlight_shade = 1.3;
- constants->topleft_highlight_alpha = 0.7;
}
diff --git a/libs/clearlooks/clearlooks_rc_style.c b/libs/clearlooks-newer/clearlooks_rc_style.c
index 14d405286f..f486453339 100644
--- a/libs/clearlooks/clearlooks_rc_style.c
+++ b/libs/clearlooks-newer/clearlooks_rc_style.c
@@ -1,7 +1,5 @@
/* Clearlooks theme engine
- * Copyright (C) 2005 Richard Stellingwerff
- * Copyright (C) 2007 Benjamin Berg
- * Copyright (C) 2007 Andrea Cimitan
+ * Copyright (C) 2005 Richard Stellingwerff.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -24,32 +22,35 @@
* Modified by Kulyk Nazar <schamane@myeburg.net>
*/
-#include <string.h>
-#include <widget-information.h>
#include "clearlooks_style.h"
#include "clearlooks_rc_style.h"
#include "animation.h"
+static void clearlooks_rc_style_init (ClearlooksRcStyle *style);
#ifdef HAVE_ANIMATION
static void clearlooks_rc_style_finalize (GObject *object);
#endif
+static void clearlooks_rc_style_class_init (ClearlooksRcStyleClass *klass);
static GtkStyle *clearlooks_rc_style_create_style (GtkRcStyle *rc_style);
static guint clearlooks_rc_style_parse (GtkRcStyle *rc_style,
- GtkSettings *settings,
- GScanner *scanner);
+ GtkSettings *settings,
+ GScanner *scanner);
static void clearlooks_rc_style_merge (GtkRcStyle *dest,
- GtkRcStyle *src);
+ GtkRcStyle *src);
+
+
+static GtkRcStyleClass *clearlooks_parent_rc_class;
+
+GType clearlooks_type_rc_style = 0;
enum
{
- TOKEN_FOCUSCOLOR = G_TOKEN_LAST + 1,
- TOKEN_SCROLLBARCOLOR,
+ TOKEN_SCROLLBARCOLOR = G_TOKEN_LAST + 1,
TOKEN_COLORIZESCROLLBAR,
TOKEN_CONTRAST,
TOKEN_SUNKENMENU,
TOKEN_PROGRESSBARSTYLE,
- TOKEN_RELIEFSTYLE,
TOKEN_MENUBARSTYLE,
TOKEN_TOOLBARSTYLE,
TOKEN_MENUITEMSTYLE,
@@ -57,7 +58,6 @@ enum
TOKEN_ANIMATION,
TOKEN_STYLE,
TOKEN_RADIUS,
- TOKEN_HINT,
TOKEN_CLASSIC,
TOKEN_GLOSSY,
@@ -65,42 +65,60 @@ enum
TOKEN_GUMMY,
TOKEN_TRUE,
- TOKEN_FALSE,
+ TOKEN_FALSE
+};
- TOKEN_LAST
+static struct
+{
+ const gchar *name;
+ guint token;
+}
+clearlooks_gtk2_rc_symbols[] =
+{
+ { "scrollbar_color", TOKEN_SCROLLBARCOLOR },
+ { "colorize_scrollbar", TOKEN_COLORIZESCROLLBAR },
+ { "contrast", TOKEN_CONTRAST },
+ { "sunkenmenubar", TOKEN_SUNKENMENU },
+ { "progressbarstyle", TOKEN_PROGRESSBARSTYLE },
+ { "menubarstyle", TOKEN_MENUBARSTYLE },
+ { "toolbarstyle", TOKEN_TOOLBARSTYLE },
+ { "menuitemstyle", TOKEN_MENUITEMSTYLE },
+ { "listviewitemstyle", TOKEN_LISTVIEWITEMSTYLE },
+ { "animation", TOKEN_ANIMATION },
+ { "style", TOKEN_STYLE },
+ { "radius", TOKEN_RADIUS },
+
+ { "CLASSIC", TOKEN_CLASSIC },
+ { "GLOSSY", TOKEN_GLOSSY },
+ { "INVERTED", TOKEN_INVERTED },
+ { "GUMMY", TOKEN_GUMMY },
+
+ { "TRUE", TOKEN_TRUE },
+ { "FALSE", TOKEN_FALSE }
};
-static gchar* clearlooks_rc_symbols =
- "focus_color\0"
- "scrollbar_color\0"
- "colorize_scrollbar\0"
- "contrast\0"
- "sunkenmenubar\0"
- "progressbarstyle\0"
- "reliefstyle\0"
- "menubarstyle\0"
- "toolbarstyle\0"
- "menuitemstyle\0"
- "listviewitemstyle\0"
- "animation\0"
- "style\0"
- "radius\0"
- "hint\0"
-
- "CLASSIC\0"
- "GLOSSY\0"
- "INVERTED\0"
- "GUMMY\0"
-
- "TRUE\0"
- "FALSE\0";
-
-G_DEFINE_DYNAMIC_TYPE (ClearlooksRcStyle, clearlooks_rc_style, GTK_TYPE_RC_STYLE)
void
-clearlooks_rc_style_register_types (GTypeModule *module)
+clearlooks_rc_style_register_type (GTypeModule *module)
{
- clearlooks_rc_style_register_type (module);
+ static const GTypeInfo object_info =
+ {
+ sizeof (ClearlooksRcStyleClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) clearlooks_rc_style_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (ClearlooksRcStyle),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) clearlooks_rc_style_init,
+ NULL
+ };
+
+ clearlooks_type_rc_style = g_type_module_register_type (module,
+ GTK_TYPE_RC_STYLE,
+ "ClearlooksRcStyle",
+ &object_info, 0);
}
static void
@@ -111,13 +129,11 @@ clearlooks_rc_style_init (ClearlooksRcStyle *clearlooks_rc)
clearlooks_rc->flags = 0;
clearlooks_rc->contrast = 1.0;
- clearlooks_rc->reliefstyle = 0;
clearlooks_rc->menubarstyle = 0;
clearlooks_rc->toolbarstyle = 0;
clearlooks_rc->animation = FALSE;
clearlooks_rc->colorize_scrollbar = FALSE;
clearlooks_rc->radius = 3.0;
- clearlooks_rc->hint = 0;
}
#ifdef HAVE_ANIMATION
@@ -127,8 +143,8 @@ clearlooks_rc_style_finalize (GObject *object)
/* cleanup all the animation stuff */
clearlooks_animation_cleanup ();
- if (G_OBJECT_CLASS (clearlooks_rc_style_parent_class)->finalize != NULL)
- G_OBJECT_CLASS (clearlooks_rc_style_parent_class)->finalize (object);
+ if (G_OBJECT_CLASS (clearlooks_parent_rc_class)->finalize != NULL)
+ G_OBJECT_CLASS (clearlooks_parent_rc_class)->finalize(object);
}
#endif
@@ -141,6 +157,8 @@ clearlooks_rc_style_class_init (ClearlooksRcStyleClass *klass)
GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
#endif
+ clearlooks_parent_rc_class = g_type_class_peek_parent (klass);
+
rc_style_class->parse = clearlooks_rc_style_parse;
rc_style_class->create_style = clearlooks_rc_style_create_style;
rc_style_class->merge = clearlooks_rc_style_merge;
@@ -150,15 +168,10 @@ clearlooks_rc_style_class_init (ClearlooksRcStyleClass *klass)
#endif
}
-static void
-clearlooks_rc_style_class_finalize (ClearlooksRcStyleClass *klass)
-{
-}
-
static guint
clearlooks_gtk2_rc_parse_boolean (GtkSettings *settings,
- GScanner *scanner,
- gboolean *retval)
+ GScanner *scanner,
+ gboolean *retval)
{
guint token;
token = g_scanner_get_next_token(scanner);
@@ -180,9 +193,8 @@ clearlooks_gtk2_rc_parse_boolean (GtkSettings *settings,
static guint
clearlooks_gtk2_rc_parse_color(GtkSettings *settings,
- GScanner *scanner,
- GtkRcStyle *style,
- GdkColor *color)
+ GScanner *scanner,
+ GdkColor *color)
{
guint token;
@@ -193,7 +205,7 @@ clearlooks_gtk2_rc_parse_color(GtkSettings *settings,
if (token != G_TOKEN_EQUAL_SIGN)
return G_TOKEN_EQUAL_SIGN;
- return gtk_rc_parse_color_full (scanner, style, color);
+ return gtk_rc_parse_color (scanner, color);
}
static guint
@@ -221,12 +233,12 @@ clearlooks_gtk2_rc_parse_double (GtkSettings *settings,
static guint
clearlooks_gtk2_rc_parse_int (GtkSettings *settings,
- GScanner *scanner,
- guint8 *progressbarstyle)
+ GScanner *scanner,
+ guint8 *progressbarstyle)
{
guint token;
- /* Skip option name */
+ /* Skip 'sunkenmenubar' */
token = g_scanner_get_next_token(scanner);
token = g_scanner_get_next_token(scanner);
@@ -259,7 +271,7 @@ clearlooks_gtk2_rc_parse_style (GtkSettings *settings,
return G_TOKEN_EQUAL_SIGN;
token = g_scanner_get_next_token (scanner);
-
+
switch (token)
{
case TOKEN_CLASSIC:
@@ -307,14 +319,16 @@ clearlooks_gtk2_rc_parse_dummy (GtkSettings *settings,
static guint
clearlooks_rc_style_parse (GtkRcStyle *rc_style,
- GtkSettings *settings,
- GScanner *scanner)
+ GtkSettings *settings,
+ GScanner *scanner)
+
{
static GQuark scope_id = 0;
ClearlooksRcStyle *clearlooks_style = CLEARLOOKS_RC_STYLE (rc_style);
guint old_scope;
guint token;
+ guint i;
/* Set up a new scope in this scanner. */
@@ -330,18 +344,13 @@ clearlooks_rc_style_parse (GtkRcStyle *rc_style,
* (in some previous call to clearlooks_rc_style_parse for the
* same scanner.
*/
- if (!g_scanner_lookup_symbol(scanner, clearlooks_rc_symbols)) {
- gchar *current_symbol = clearlooks_rc_symbols;
- gint i = G_TOKEN_LAST + 1;
-
- /* Add our symbols */
- while ((current_symbol[0] != '\0') && (i < TOKEN_LAST)) {
- g_scanner_scope_add_symbol(scanner, scope_id, current_symbol, GINT_TO_POINTER (i));
- current_symbol += strlen(current_symbol) + 1;
- i++;
- }
- g_assert (i == TOKEN_LAST && current_symbol[0] == '\0');
+ if (!g_scanner_lookup_symbol(scanner, clearlooks_gtk2_rc_symbols[0].name))
+ {
+ for (i = 0; i < G_N_ELEMENTS (clearlooks_gtk2_rc_symbols); i++)
+ g_scanner_scope_add_symbol(scanner, scope_id,
+ clearlooks_gtk2_rc_symbols[i].name,
+ GINT_TO_POINTER(clearlooks_gtk2_rc_symbols[i].token));
}
/* We're ready to go, now parse the top level */
@@ -351,12 +360,8 @@ clearlooks_rc_style_parse (GtkRcStyle *rc_style,
{
switch (token)
{
- case TOKEN_FOCUSCOLOR:
- token = clearlooks_gtk2_rc_parse_color (settings, scanner, rc_style, &clearlooks_style->focus_color);
- clearlooks_style->flags |= CL_FLAG_FOCUS_COLOR;
- break;
case TOKEN_SCROLLBARCOLOR:
- token = clearlooks_gtk2_rc_parse_color (settings, scanner, rc_style, &clearlooks_style->scrollbar_color);
+ token = clearlooks_gtk2_rc_parse_color (settings, scanner, &clearlooks_style->scrollbar_color);
clearlooks_style->flags |= CL_FLAG_SCROLLBAR_COLOR;
break;
case TOKEN_COLORIZESCROLLBAR:
@@ -367,10 +372,6 @@ clearlooks_rc_style_parse (GtkRcStyle *rc_style,
token = clearlooks_gtk2_rc_parse_double (settings, scanner, &clearlooks_style->contrast);
clearlooks_style->flags |= CL_FLAG_CONTRAST;
break;
- case TOKEN_RELIEFSTYLE:
- token = clearlooks_gtk2_rc_parse_int (settings, scanner, &clearlooks_style->reliefstyle);
- clearlooks_style->flags |= CL_FLAG_RELIEFSTYLE;
- break;
case TOKEN_MENUBARSTYLE:
token = clearlooks_gtk2_rc_parse_int (settings, scanner, &clearlooks_style->menubarstyle);
clearlooks_style->flags |= CL_FLAG_MENUBARSTYLE;
@@ -391,10 +392,6 @@ clearlooks_rc_style_parse (GtkRcStyle *rc_style,
token = clearlooks_gtk2_rc_parse_double (settings, scanner, &clearlooks_style->radius);
clearlooks_style->flags |= CL_FLAG_RADIUS;
break;
- case TOKEN_HINT:
- token = ge_rc_parse_hint (scanner, &clearlooks_style->hint);
- clearlooks_style->flags |= CL_FLAG_HINT;
- break;
/* stuff to ignore */
case TOKEN_SUNKENMENU:
@@ -431,12 +428,12 @@ clearlooks_rc_style_parse (GtkRcStyle *rc_style,
static void
clearlooks_rc_style_merge (GtkRcStyle *dest,
- GtkRcStyle *src)
+ GtkRcStyle *src)
{
ClearlooksRcStyle *dest_w, *src_w;
ClearlooksRcFlags flags;
- GTK_RC_STYLE_CLASS (clearlooks_rc_style_parent_class)->merge (dest, src);
+ clearlooks_parent_rc_class->merge (dest, src);
if (!CLEARLOOKS_IS_RC_STYLE (src))
return;
@@ -450,14 +447,10 @@ clearlooks_rc_style_merge (GtkRcStyle *dest,
dest_w->style = src_w->style;
if (flags & CL_FLAG_CONTRAST)
dest_w->contrast = src_w->contrast;
- if (flags & CL_FLAG_RELIEFSTYLE)
- dest_w->reliefstyle = src_w->reliefstyle;
if (flags & CL_FLAG_MENUBARSTYLE)
dest_w->menubarstyle = src_w->menubarstyle;
if (flags & CL_FLAG_TOOLBARSTYLE)
dest_w->toolbarstyle = src_w->toolbarstyle;
- if (flags & CL_FLAG_FOCUS_COLOR)
- dest_w->focus_color = src_w->focus_color;
if (flags & CL_FLAG_SCROLLBAR_COLOR)
dest_w->scrollbar_color = src_w->scrollbar_color;
if (flags & CL_FLAG_COLORIZE_SCROLLBAR)
@@ -466,8 +459,6 @@ clearlooks_rc_style_merge (GtkRcStyle *dest,
dest_w->animation = src_w->animation;
if (flags & CL_FLAG_RADIUS)
dest_w->radius = src_w->radius;
- if (flags & CL_FLAG_HINT)
- dest_w->hint = src_w->hint;
dest_w->flags |= src_w->flags;
}
diff --git a/libs/clearlooks/clearlooks_rc_style.h b/libs/clearlooks-newer/clearlooks_rc_style.h
index e48143bf40..a80a846000 100644
--- a/libs/clearlooks/clearlooks_rc_style.h
+++ b/libs/clearlooks-newer/clearlooks_rc_style.h
@@ -1,7 +1,5 @@
-/* Clearlooks theme engine
- * Copyright (C) 2005 Richard Stellingwerff
- * Copyright (C) 2007 Benjamin Berg
- * Copyright (C) 2007 Andrea Cimitan
+/* Clearlooks Theme Engine
+ * Copyright (C) 2005 Richard Stellingwerff.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -27,13 +25,12 @@
#include <gtk/gtkrc.h>
#include "clearlooks_types.h"
-#ifndef CLEARLOOKS_RC_STYLE_H
-#define CLEARLOOKS_RC_STYLE_H
-
typedef struct _ClearlooksRcStyle ClearlooksRcStyle;
typedef struct _ClearlooksRcStyleClass ClearlooksRcStyleClass;
-#define CLEARLOOKS_TYPE_RC_STYLE (clearlooks_rc_style_get_type ())
+GE_INTERNAL extern GType clearlooks_type_rc_style;
+
+#define CLEARLOOKS_TYPE_RC_STYLE clearlooks_type_rc_style
#define CLEARLOOKS_RC_STYLE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), CLEARLOOKS_TYPE_RC_STYLE, ClearlooksRcStyle))
#define CLEARLOOKS_RC_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLEARLOOKS_TYPE_RC_STYLE, ClearlooksRcStyleClass))
#define CLEARLOOKS_IS_RC_STYLE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), CLEARLOOKS_TYPE_RC_STYLE))
@@ -43,19 +40,15 @@ typedef struct _ClearlooksRcStyleClass ClearlooksRcStyleClass;
/* XXX: needs fixing! */
typedef enum {
CL_FLAG_STYLE = 1 << 0,
- CL_FLAG_FOCUS_COLOR = 1 << 1,
- CL_FLAG_SCROLLBAR_COLOR = 1 << 2,
- CL_FLAG_COLORIZE_SCROLLBAR = 1 << 3,
- CL_FLAG_CONTRAST = 1 << 4,
- CL_FLAG_RELIEFSTYLE = 1 << 5,
- CL_FLAG_MENUBARSTYLE = 1 << 6,
- CL_FLAG_TOOLBARSTYLE = 1 << 7,
- CL_FLAG_ANIMATION = 1 << 8,
- CL_FLAG_RADIUS = 1 << 9,
- CL_FLAG_HINT = 1 << 10
+ CL_FLAG_SCROLLBAR_COLOR = 1 << 1,
+ CL_FLAG_COLORIZE_SCROLLBAR = 1 << 2,
+ CL_FLAG_CONTRAST = 1 << 3,
+ CL_FLAG_MENUBARSTYLE = 1 << 4,
+ CL_FLAG_TOOLBARSTYLE = 1 << 5,
+ CL_FLAG_ANIMATION = 1 << 6,
+ CL_FLAG_RADIUS = 1 << 7
} ClearlooksRcFlags;
-
struct _ClearlooksRcStyle
{
GtkRcStyle parent_instance;
@@ -64,24 +57,18 @@ struct _ClearlooksRcStyle
ClearlooksStyles style;
- GdkColor focus_color;
GdkColor scrollbar_color;
gboolean colorize_scrollbar;
double contrast;
- guint8 reliefstyle;
guint8 menubarstyle;
guint8 toolbarstyle;
gboolean animation;
double radius;
- GQuark hint;
};
struct _ClearlooksRcStyleClass
{
- GtkRcStyleClass parent_class;
+ GtkRcStyleClass parent_class;
};
-GE_INTERNAL void clearlooks_rc_style_register_types (GTypeModule *module);
-GE_INTERNAL GType clearlooks_rc_style_get_type (void);
-
-#endif /* CLEARLOOKS_RC_STYLE_H */
+GE_INTERNAL void clearlooks_rc_style_register_type (GTypeModule *module);
diff --git a/libs/clearlooks/clearlooks_style.c b/libs/clearlooks-newer/clearlooks_style.c
index 4a7a75e072..48b6647df3 100644
--- a/libs/clearlooks/clearlooks_style.c
+++ b/libs/clearlooks-newer/clearlooks_style.c
@@ -1,7 +1,6 @@
/* Clearlooks theme engine
- * Copyright (C) 2005 Richard Stellingwerff
- * Copyright (C) 2007 Benjamin Berg
- * Copyright (C) 2007 Andrea Cimitan
+ * Copyright (C) 2005 Richard Stellingwerff.
+ * Copyright (C) 2007 Benjamin Berg <benjamin@sipsolutions.net>.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -34,7 +33,6 @@
/* #define DEBUG 1 */
#define DETAIL(xx) ((detail) && (!strcmp(xx, detail)))
-#define CHECK_HINT(xx) (ge_check_hint ((xx), CLEARLOOKS_RC_STYLE ((style)->rc_style)->hint, widget))
#define DRAW_ARGS GtkStyle *style, \
GdkWindow *window, \
@@ -52,9 +50,10 @@
#include "animation.h"
#endif
-#define STYLE_FUNCTION(function) (CLEARLOOKS_STYLE_GET_CLASS (style)->style_functions[CLEARLOOKS_STYLE (style)->style].function)
+#define STYLE_FUNCTION(function) (clearlooks_style_class->style_functions[CLEARLOOKS_STYLE (style)->style].function)
-G_DEFINE_DYNAMIC_TYPE (ClearlooksStyle, clearlooks_style, GTK_TYPE_STYLE)
+static ClearlooksStyleClass *clearlooks_style_class;
+static GtkStyleClass *clearlooks_parent_class;
static void
clearlooks_set_widget_parameters (const GtkWidget *widget,
@@ -62,23 +61,25 @@ clearlooks_set_widget_parameters (const GtkWidget *widget,
GtkStateType state_type,
WidgetParameters *params)
{
- params->style_functions = &(CLEARLOOKS_STYLE_GET_CLASS (style)->style_functions[CLEARLOOKS_STYLE (style)->style]);
- params->style_constants = &(CLEARLOOKS_STYLE_GET_CLASS (style)->style_constants[CLEARLOOKS_STYLE (style)->style]);
-
- params->active = (state_type == GTK_STATE_ACTIVE);
- params->prelight = (state_type == GTK_STATE_PRELIGHT);
- params->disabled = (state_type == GTK_STATE_INSENSITIVE);
- params->state_type = (ClearlooksStateType)state_type;
- params->corners = CR_CORNER_ALL;
- params->ltr = ge_widget_is_ltr ((GtkWidget*)widget);
- params->focus = widget && GTK_WIDGET_HAS_FOCUS (widget);
- params->is_default = widget && GE_WIDGET_HAS_DEFAULT (widget);
- params->enable_shadow = FALSE;
- params->radius = CLEARLOOKS_STYLE (style)->radius;
-
- params->xthickness = style->xthickness;
- params->ythickness = style->ythickness;
-
+ params->style_functions = &(clearlooks_style_class->style_functions[CLEARLOOKS_STYLE (style)->style]);
+
+ params->active = (state_type == GTK_STATE_ACTIVE);
+ params->prelight = (state_type == GTK_STATE_PRELIGHT);
+ params->disabled = (state_type == GTK_STATE_INSENSITIVE);
+ params->state_type = (ClearlooksStateType)state_type;
+ params->corners = CR_CORNER_ALL;
+ params->ltr = ge_widget_is_ltr ((GtkWidget*)widget);
+ params->focus = widget && GTK_WIDGET_HAS_FOCUS (widget);
+ params->is_default = widget && GE_WIDGET_HAS_DEFAULT (widget);
+ params->enable_glow = FALSE;
+ params->radius = CLEARLOOKS_STYLE (style)->radius;
+
+ if (!params->active && widget && GE_IS_TOGGLE_BUTTON (widget))
+ params->active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+
+ params->xthickness = style->xthickness;
+ params->ythickness = style->ythickness;
+
/* This is used in GtkEntry to fake transparency. The reason to do this
* is that the entry has it's entire background filled with base[STATE].
* This is not a very good solution as it will eg. fail if one changes
@@ -90,7 +91,7 @@ clearlooks_set_widget_parameters (const GtkWidget *widget,
static void
clearlooks_style_draw_flat_box (DRAW_ARGS)
{
- if (detail &&
+ if (detail &&
state_type == GTK_STATE_SELECTED && (
!strncmp ("cell_even", detail, 9) ||
!strncmp ("cell_odd", detail, 8)))
@@ -140,10 +141,10 @@ clearlooks_style_draw_flat_box (DRAW_ARGS)
}
else
{
- GTK_STYLE_CLASS (clearlooks_style_parent_class)->draw_flat_box (style, window, state_type,
- shadow_type,
- area, widget, detail,
- x, y, width, height);
+ clearlooks_parent_class->draw_flat_box (style, window, state_type,
+ shadow_type,
+ area, widget, detail,
+ x, y, width, height);
}
}
@@ -157,83 +158,65 @@ clearlooks_style_draw_shadow (DRAW_ARGS)
CHECK_ARGS
SANITIZE_SIZE
- /* The "frame" thing is a hack because of GtkCombo. */
- if ((DETAIL ("entry") && !CHECK_HINT (GE_HINT_TREEVIEW)) ||
- (DETAIL ("frame") && CHECK_HINT (GE_HINT_COMBOBOX_ENTRY)))
+ if ((DETAIL ("entry") && !(widget && widget->parent && GE_IS_TREE_VIEW (widget->parent))) ||
+ (DETAIL ("frame") && ge_is_in_combo_box (widget)))
{
WidgetParameters params;
+
+ clearlooks_set_widget_parameters (widget, style, state_type, &params);
/* Override the entries state type, because we are too lame to handle this via
* the focus ring, and GtkEntry doesn't even set the INSENSITIVE state ... */
if (state_type == GTK_STATE_NORMAL && widget && GE_IS_ENTRY (widget))
- state_type = GTK_WIDGET_STATE (widget);
+ params.state_type = GTK_WIDGET_STATE (widget);
- clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
- if (CHECK_HINT (GE_HINT_COMBOBOX_ENTRY) || CHECK_HINT (GE_HINT_SPINBUTTON))
+ if (widget && (ge_is_in_combo_box (widget) || GE_IS_SPIN_BUTTON (widget)))
{
width += style->xthickness;
if (!params.ltr)
x -= style->xthickness;
-
+
if (params.ltr)
params.corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
else
params.corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
}
- /* Fill the background as it is initilized to base[NORMAL].
- * Relevant GTK+ bug: http://bugzilla.gnome.org/show_bug.cgi?id=513471
- * The fill only happens if no hint has been added by some application
- * that is faking GTK+ widgets. */
- if (!widget || !g_object_get_data(G_OBJECT (widget), "transparent-bg-hint"))
- {
- cairo_rectangle (cr, 0, 0, width, height);
- ge_cairo_set_color (cr, &params.parentbg);
- cairo_fill (cr);
- }
-
STYLE_FUNCTION (draw_entry) (cr, &clearlooks_style->colors, &params,
- x, y, width, height);
+ x, y, width, height);
}
- else if (DETAIL ("frame") && CHECK_HINT (GE_HINT_STATUSBAR))
+ else if (DETAIL ("frame") && widget && GE_IS_STATUSBAR (widget->parent))
{
WidgetParameters params;
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
gtk_style_apply_default_background (style, window, TRUE, state_type,
area, x, y, width, height);
- if (shadow_type != GTK_SHADOW_NONE)
- STYLE_FUNCTION (draw_statusbar) (cr, colors, &params,
- x, y, width, height);
+
+ STYLE_FUNCTION (draw_statusbar) (cr, colors, &params,
+ x, y, width, height);
}
- else if (DETAIL ("frame") || DETAIL ("calendar"))
+ else if (DETAIL ("frame"))
{
WidgetParameters params;
FrameParameters frame;
frame.shadow = shadow_type;
- frame.gap_x = -1; /* No gap will be drawn */
+ frame.gap_x = -1; /* No gap will be drawn */
frame.border = &colors->shade[4];
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
params.corners = CR_CORNER_NONE;
-
+
if (widget && !g_str_equal ("XfcePanelWindow", gtk_widget_get_name (gtk_widget_get_toplevel (widget))))
STYLE_FUNCTION(draw_frame) (cr, colors, &params, &frame,
- x, y, width, height);
+ x, y, width, height);
}
else if (DETAIL ("scrolled_window") || DETAIL ("viewport") || detail == NULL)
{
- CairoColor border;
-
- if (CLEARLOOKS_STYLE (style)->style == CL_STYLE_CLASSIC)
- ge_shade_color ((CairoColor*)&colors->bg[0], 0.78, &border);
- else
- border = colors->shade[5];
-
+ CairoColor *border = (CairoColor*)&colors->shade[5];
cairo_rectangle (cr, x+0.5, y+0.5, width-1, height-1);
- ge_cairo_set_color (cr, &border);
+ ge_cairo_set_color (cr, border);
cairo_set_line_width (cr, 1);
cairo_stroke (cr);
}
@@ -247,18 +230,18 @@ clearlooks_style_draw_shadow (DRAW_ARGS)
frame.border = &colors->shade[5];
clearlooks_set_widget_parameters (widget, style, state_type, &params);
params.corners = CR_CORNER_ALL;
-
+
STYLE_FUNCTION(draw_frame) (cr, colors, &params, &frame, x, y, width, height);
}
-
+
cairo_destroy (cr);
}
-static void
+static void
clearlooks_style_draw_box_gap (DRAW_ARGS,
- GtkPositionType gap_side,
- gint gap_x,
- gint gap_width)
+ GtkPositionType gap_side,
+ gint gap_x,
+ gint gap_width)
{
ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
ClearlooksColors *colors = &clearlooks_style->colors;
@@ -274,30 +257,38 @@ clearlooks_style_draw_box_gap (DRAW_ARGS,
WidgetParameters params;
FrameParameters frame;
gboolean start, end;
-
+
frame.shadow = shadow_type;
frame.gap_side = gap_side;
frame.gap_x = gap_x;
frame.gap_width = gap_width;
frame.border = &colors->shade[5];
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
clearlooks_get_notebook_tab_position (widget, &start, &end);
params.corners = CR_CORNER_ALL;
- switch (gap_side)
- {
+ switch (gap_side) {
+ case GTK_POS_LEFT:
+ if (start)
+ params.corners ^= CR_CORNER_TOPLEFT;
+ if (end)
+ params.corners ^= CR_CORNER_BOTTOMLEFT;
+ break;
+ case GTK_POS_RIGHT:
+ if (start)
+ params.corners ^= CR_CORNER_TOPRIGHT;
+ if (end)
+ params.corners ^= CR_CORNER_BOTTOMRIGHT;
+ break;
case GTK_POS_TOP:
- if (ge_widget_is_ltr (widget))
- {
+ if (ge_widget_is_ltr (widget)) {
if (start)
params.corners ^= CR_CORNER_TOPLEFT;
if (end)
params.corners ^= CR_CORNER_TOPRIGHT;
- }
- else
- {
+ } else {
if (start)
params.corners ^= CR_CORNER_TOPRIGHT;
if (end)
@@ -305,52 +296,37 @@ clearlooks_style_draw_box_gap (DRAW_ARGS,
}
break;
case GTK_POS_BOTTOM:
- if (ge_widget_is_ltr (widget))
- {
+ if (ge_widget_is_ltr (widget)) {
if (start)
params.corners ^= CR_CORNER_BOTTOMLEFT;
if (end)
params.corners ^= CR_CORNER_BOTTOMRIGHT;
- }
- else
- {
+ } else {
if (start)
params.corners ^= CR_CORNER_BOTTOMRIGHT;
if (end)
params.corners ^= CR_CORNER_BOTTOMLEFT;
}
break;
- case GTK_POS_LEFT:
- if (start)
- params.corners ^= CR_CORNER_TOPLEFT;
- if (end)
- params.corners ^= CR_CORNER_BOTTOMLEFT;
- break;
- case GTK_POS_RIGHT:
- if (start)
- params.corners ^= CR_CORNER_TOPRIGHT;
- if (end)
- params.corners ^= CR_CORNER_BOTTOMRIGHT;
- break;
}
/* Fill the background with bg[NORMAL] */
ge_cairo_rounded_rectangle (cr, x, y, width, height, params.radius, params.corners);
ge_cairo_set_color (cr, &colors->bg[GTK_STATE_NORMAL]);
cairo_fill (cr);
-
+
STYLE_FUNCTION(draw_frame) (cr, colors, &params, &frame,
- x, y, width, height);
+ x, y, width, height);
}
else
{
- GTK_STYLE_CLASS (clearlooks_style_parent_class)->draw_box_gap (style, window, state_type, shadow_type,
- area, widget, detail,
- x, y, width, height,
- gap_side, gap_x, gap_width);
+ clearlooks_parent_class->draw_box_gap (style, window, state_type, shadow_type,
+ area, widget, detail,
+ x, y, width, height,
+ gap_side, gap_x, gap_width);
}
-
- cairo_destroy (cr);
+
+ cairo_destroy (cr);
}
static void
@@ -364,69 +340,61 @@ clearlooks_style_draw_extension (DRAW_ARGS, GtkPositionType gap_side)
SANITIZE_SIZE
cr = ge_gdk_drawable_to_cairo (window, area);
-
+
if (DETAIL ("tab"))
{
WidgetParameters params;
TabParameters tab;
- FocusParameters focus;
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
+
tab.gap_side = (ClearlooksGapSide)gap_side;
-
+
switch (gap_side)
{
- case CL_GAP_TOP:
- params.corners = CR_CORNER_BOTTOMLEFT | CR_CORNER_BOTTOMRIGHT;
- break;
case CL_GAP_BOTTOM:
params.corners = CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT;
break;
- case CL_GAP_LEFT:
- params.corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
+ case CL_GAP_TOP:
+ params.corners = CR_CORNER_BOTTOMLEFT | CR_CORNER_BOTTOMRIGHT;
break;
case CL_GAP_RIGHT:
params.corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
break;
+ case CL_GAP_LEFT:
+ params.corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
}
-
- /* Focus color */
- if (clearlooks_style->has_focus_color)
- {
- ge_gdk_color_to_cairo (&clearlooks_style->focus_color, &focus.color);
- focus.has_color = TRUE;
- }
- else
- focus.color = colors->bg[GTK_STATE_SELECTED];
-
- tab.focus = focus;
-
+
STYLE_FUNCTION(draw_tab) (cr, colors, &params, &tab,
- x, y, width, height);
+ x, y, width, height);
}
else
{
- GTK_STYLE_CLASS (clearlooks_style_parent_class)->draw_extension (style, window, state_type, shadow_type, area,
- widget, detail, x, y, width, height,
- gap_side);
- }
+ clearlooks_parent_class->draw_extension (style, window, state_type, shadow_type, area,
+ widget, detail, x, y, width, height,
+ gap_side);
+ }
+
cairo_destroy (cr);
}
-static void
+static void
clearlooks_style_draw_handle (DRAW_ARGS, GtkOrientation orientation)
{
ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
ClearlooksColors *colors = &clearlooks_style->colors;
cairo_t *cr;
-
+ gboolean is_horizontal;
+
CHECK_ARGS
SANITIZE_SIZE
-
+
cr = ge_gdk_drawable_to_cairo (window, area);
-
+
+ /* Evil hack to work around broken orientation for toolbars */
+ is_horizontal = (width > height);
+
if (DETAIL ("handlebox"))
{
WidgetParameters params;
@@ -434,10 +402,24 @@ clearlooks_style_draw_handle (DRAW_ARGS, GtkOrientation orientation)
clearlooks_set_widget_parameters (widget, style, state_type, &params);
handle.type = CL_HANDLE_TOOLBAR;
- handle.horizontal = (orientation == GTK_ORIENTATION_HORIZONTAL);
+ handle.horizontal = is_horizontal;
+
+ /* Is this ever true? -Daniel */
+ if (GE_IS_TOOLBAR (widget) && shadow_type != GTK_SHADOW_NONE)
+ {
+ ToolbarParameters toolbar;
+ clearlooks_set_toolbar_parameters (&toolbar, widget, window, x, y);
+
+ toolbar.style = clearlooks_style->toolbarstyle;
+
+ cairo_save (cr);
+ STYLE_FUNCTION(draw_toolbar) (cr, colors, &params, &toolbar, x, y, width, height);
+ cairo_restore (cr);
+ }
+
STYLE_FUNCTION(draw_handle) (cr, colors, &params, &handle,
- x, y, width, height);
+ x, y, width, height);
}
else if (DETAIL ("paned"))
{
@@ -446,10 +428,10 @@ clearlooks_style_draw_handle (DRAW_ARGS, GtkOrientation orientation)
clearlooks_set_widget_parameters (widget, style, state_type, &params);
handle.type = CL_HANDLE_SPLITTER;
- handle.horizontal = (orientation == GTK_ORIENTATION_HORIZONTAL);
-
+ handle.horizontal = orientation == GTK_ORIENTATION_HORIZONTAL;
+
STYLE_FUNCTION(draw_handle) (cr, colors, &params, &handle,
- x, y, width, height);
+ x, y, width, height);
}
else
{
@@ -458,10 +440,24 @@ clearlooks_style_draw_handle (DRAW_ARGS, GtkOrientation orientation)
clearlooks_set_widget_parameters (widget, style, state_type, &params);
handle.type = CL_HANDLE_TOOLBAR;
- handle.horizontal = (orientation == GTK_ORIENTATION_HORIZONTAL);
+ handle.horizontal = is_horizontal;
+
+ /* Is this ever true? -Daniel */
+ if (GE_IS_TOOLBAR (widget) && shadow_type != GTK_SHADOW_NONE)
+ {
+ ToolbarParameters toolbar;
+ clearlooks_set_toolbar_parameters (&toolbar, widget, window, x, y);
+
+ toolbar.style = clearlooks_style->toolbarstyle;
+
+ cairo_save (cr);
+ STYLE_FUNCTION(draw_toolbar) (cr, colors, &params, &toolbar, x, y, width, height);
+ cairo_restore (cr);
+ }
+
STYLE_FUNCTION(draw_handle) (cr, colors, &params, &handle,
- x, y, width, height);
+ x, y, width, height);
}
cairo_destroy (cr);
@@ -480,77 +476,76 @@ clearlooks_style_draw_box (DRAW_ARGS)
CHECK_ARGS
SANITIZE_SIZE
- if (DETAIL ("menubar"))
+ if (DETAIL ("menubar") && !ge_is_panel_widget_item(widget))
{
WidgetParameters params;
MenuBarParameters menubar;
- gboolean horizontal;
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
menubar.style = clearlooks_style->menubarstyle;
- horizontal = height < 2*width;
- /* This is not that great. Ideally we would have a nice vertical menubar. */
- if ((shadow_type != GTK_SHADOW_NONE) && horizontal)
- STYLE_FUNCTION(draw_menubar) (cr, colors, &params, &menubar,
- x, y, width, height);
+ STYLE_FUNCTION(draw_menubar) (cr, colors, &params, &menubar,
+ x, y, width, height);
}
- else if (DETAIL ("button") && CHECK_HINT (GE_HINT_TREEVIEW_HEADER))
+ else if (DETAIL ("button") && widget && widget->parent &&
+ (GE_IS_TREE_VIEW(widget->parent) ||
+ GE_IS_CLIST (widget->parent) ||
+ ge_object_is_a (G_OBJECT(widget->parent), "ETree"))) /* ECanvas inside ETree */
{
WidgetParameters params;
ListViewHeaderParameters header;
-
+
gint columns, column_index;
gboolean resizable = TRUE;
-
- /* XXX: This makes unknown treeview header "middle", in need for something nicer */
+
+ /* XXX: This makes unknown treeview header CL_ORDER_MIDDLE, in need for something nicer */
columns = 3;
column_index = 1;
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
+
params.corners = CR_CORNER_NONE;
-
+
if (GE_IS_TREE_VIEW (widget->parent))
{
clearlooks_treeview_get_header_index (GTK_TREE_VIEW(widget->parent),
- widget, &column_index, &columns,
- &resizable);
+ widget, &column_index, &columns,
+ &resizable);
}
else if (GE_IS_CLIST (widget->parent))
{
clearlooks_clist_get_header_index (GTK_CLIST(widget->parent),
- widget, &column_index, &columns);
+ widget, &column_index, &columns);
}
-
+
header.resizable = resizable;
-
- header.order = 0;
+
if (column_index == 0)
- header.order |= params.ltr ? CL_ORDER_FIRST : CL_ORDER_LAST;
- if (column_index == columns-1)
- header.order |= params.ltr ? CL_ORDER_LAST : CL_ORDER_FIRST;
-
+ header.order = params.ltr ? CL_ORDER_FIRST : CL_ORDER_LAST;
+ else if (column_index == columns-1)
+ header.order = params.ltr ? CL_ORDER_LAST : CL_ORDER_FIRST;
+ else
+ header.order = CL_ORDER_MIDDLE;
+
gtk_style_apply_default_background (style, window, FALSE, state_type, area, x, y, width, height);
-
+
STYLE_FUNCTION(draw_list_view_header) (cr, colors, &params, &header,
- x, y, width, height);
+ x, y, width, height);
}
else if (DETAIL ("button") || DETAIL ("buttondefault"))
{
WidgetParameters params;
ShadowParameters shadow = { CR_CORNER_ALL, CL_SHADOW_NONE } ;
clearlooks_set_widget_parameters (widget, style, state_type, &params);
- params.active = shadow_type == GTK_SHADOW_IN;
- if (CHECK_HINT (GE_HINT_COMBOBOX_ENTRY))
+ if (ge_is_in_combo_box(widget))
{
if (params.ltr)
params.corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
else
params.corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
-
+
shadow.shadow = CL_SHADOW_IN;
if (params.xthickness > 2)
@@ -558,15 +553,19 @@ clearlooks_style_draw_box (DRAW_ARGS)
if (params.ltr)
x--;
width++;
- }
+ }
}
else
{
- params.corners = CR_CORNER_ALL;
- if (clearlooks_style->reliefstyle != 0)
- params.enable_shadow = TRUE;
- }
-
+ params.corners = CR_CORNER_ALL;
+ /* if (!(ge_is_combo_box (widget, FALSE))) */
+ params.enable_glow = TRUE;
+ }
+
+ if (GE_IS_TOGGLE_BUTTON (widget) &&
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
+ params.active = TRUE;
+
STYLE_FUNCTION(draw_button) (cr, &clearlooks_style->colors, &params,
x, y, width, height);
}
@@ -576,14 +575,14 @@ clearlooks_style_draw_box (DRAW_ARGS)
{
WidgetParameters params;
clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
+
if (style->xthickness == 3)
{
width++;
if (params.ltr)
x--;
}
-
+
if (DETAIL ("spinbutton_up"))
{
height+=2;
@@ -599,139 +598,84 @@ clearlooks_style_draw_box (DRAW_ARGS)
else
params.corners = CR_CORNER_BOTTOMLEFT;
}
-
+
STYLE_FUNCTION(draw_spinbutton_down) (cr, &clearlooks_style->colors, &params, x, y, width, height);
}
}
else if (DETAIL ("spinbutton"))
{
WidgetParameters params;
-
- /* The "spinbutton" box is always drawn with state NORMAL, even if it is insensitive.
- * So work around this here. */
- if (state_type == GTK_STATE_NORMAL && widget && GE_IS_ENTRY (widget))
- state_type = GTK_WIDGET_STATE (widget);
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
+
if (params.ltr)
params.corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
else
params.corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
-
+
if (style->xthickness == 3)
{
if (params.ltr)
x--;
width++;
}
-
+
STYLE_FUNCTION(draw_spinbutton) (cr, &clearlooks_style->colors, &params,
- x, y, width, height);
+ x, y, width, height);
}
- else if (detail && g_str_has_prefix (detail, "trough") && CHECK_HINT (GE_HINT_SCALE))
+ else if (detail && g_str_has_prefix (detail, "trough") && GE_IS_SCALE (widget))
{
WidgetParameters params;
SliderParameters slider;
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
params.corners = CR_CORNER_NONE;
-
+
slider.lower = DETAIL ("trough-lower");
slider.fill_level = DETAIL ("trough-fill-level") || DETAIL ("trough-fill-level-full");
- if (CHECK_HINT (GE_HINT_HSCALE))
- slider.horizontal = TRUE;
- else if (CHECK_HINT (GE_HINT_VSCALE))
- slider.horizontal = FALSE;
- else /* Fallback based on the size... */
- slider.horizontal = width >= height;
-
+ slider.horizontal = (GTK_RANGE (widget)->orientation == GTK_ORIENTATION_HORIZONTAL);
+
STYLE_FUNCTION(draw_scale_trough) (cr, &clearlooks_style->colors,
- &params, &slider,
- x, y, width, height);
+ &params, &slider,
+ x, y, width, height);
}
- else if (DETAIL ("trough") && CHECK_HINT (GE_HINT_PROGRESSBAR))
+ else if (DETAIL ("trough") && widget && GE_IS_PROGRESS_BAR (widget))
{
WidgetParameters params;
-
- clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
- /* Fill the background as it is initilized to base[NORMAL].
- * Relevant GTK+ bug: http://bugzilla.gnome.org/show_bug.cgi?id=513476
- * The fill only happens if no hint has been added by some application
- * that is faking GTK+ widgets. */
- if (!widget || !g_object_get_data(G_OBJECT (widget), "transparent-bg-hint"))
- {
- cairo_rectangle (cr, 0, 0, width, height);
- ge_cairo_set_color (cr, &params.parentbg);
- cairo_fill (cr);
- }
- STYLE_FUNCTION(draw_progressbar_trough) (cr, colors, &params,
- x, y, width, height);
+
+ clearlooks_set_widget_parameters (widget, style, state_type, &params);
+
+ STYLE_FUNCTION(draw_progressbar_trough) (cr, colors, &params,
+ x, y, width, height);
}
- else if (DETAIL ("trough") && CHECK_HINT (GE_HINT_SCROLLBAR))
+ else if (DETAIL ("trough") && widget && (GE_IS_VSCROLLBAR (widget) || GE_IS_HSCROLLBAR (widget)))
{
WidgetParameters params;
ScrollBarParameters scrollbar;
- gboolean trough_under_steppers = TRUE;
- ClearlooksStepper steppers;
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
- params.corners = CR_CORNER_ALL;
-
+ params.corners = CR_CORNER_NONE;
+
scrollbar.horizontal = TRUE;
scrollbar.junction = clearlooks_scrollbar_get_junction (widget);
- steppers = clearlooks_scrollbar_visible_steppers (widget);
-
- if (CHECK_HINT (GE_HINT_HSCROLLBAR))
- scrollbar.horizontal = TRUE;
- else if (CHECK_HINT (GE_HINT_VSCROLLBAR))
- scrollbar.horizontal = FALSE;
- else /* Fallback based on the size ... */
- scrollbar.horizontal = width >= height;
-
- if (widget)
- gtk_widget_style_get (widget,
- "trough-under-steppers", &trough_under_steppers,
- NULL);
-
- if (trough_under_steppers)
+ if (GE_IS_RANGE (widget))
+ scrollbar.horizontal = GTK_RANGE (widget)->orientation == GTK_ORIENTATION_HORIZONTAL;
+
+ if (scrollbar.horizontal)
{
- /* If trough under steppers is set, then we decrease the size
- * slightly. The size is decreased so that the trough is not
- * visible underneath the steppers. This is not really needed
- * as one can use the trough-under-steppers style property,
- * but it needs to exist for backward compatibility. */
- if (scrollbar.horizontal)
- {
- if (steppers & (CL_STEPPER_A | CL_STEPPER_B))
- {
- x += 2;
- width -= 2;
- }
- if (steppers & (CL_STEPPER_C | CL_STEPPER_D))
- {
- width -= 2;
- }
- }
- else
- {
- if (steppers & (CL_STEPPER_A | CL_STEPPER_B))
- {
- y += 2;
- height -= 2;
- }
- if (steppers & (CL_STEPPER_C | CL_STEPPER_D))
- {
- height -= 2;
- }
- }
+ x += 2;
+ width -= 4;
}
-
+ else
+ {
+ y += 2;
+ height -= 4;
+ }
+
STYLE_FUNCTION(draw_scrollbar_trough) (cr, colors, &params, &scrollbar,
- x, y, width, height);
+ x, y, width, height);
}
else if (DETAIL ("bar"))
{
@@ -741,10 +685,10 @@ clearlooks_style_draw_box (DRAW_ARGS)
#ifdef HAVE_ANIMATION
if(clearlooks_style->animation && CL_IS_PROGRESS_BAR (widget))
- {
+ {
gboolean activity_mode = GTK_PROGRESS (widget)->activity_mode;
-
- if (!activity_mode)
+
+ if (!activity_mode)
clearlooks_animation_progressbar_add ((gpointer)widget);
}
@@ -765,7 +709,7 @@ clearlooks_style_draw_box (DRAW_ARGS)
progressbar.value = 0;
progressbar.pulsing = FALSE;
}
-
+
if (!params.ltr)
{
if (progressbar.orientation == GTK_PROGRESS_LEFT_TO_RIGHT)
@@ -809,52 +753,51 @@ clearlooks_style_draw_box (DRAW_ARGS)
tmp.height += 2;
}
}
-
+
cairo_reset_clip (cr);
gdk_cairo_rectangle (cr, &tmp);
cairo_clip (cr);
}
-
+
STYLE_FUNCTION(draw_progressbar_fill) (cr, colors, &params, &progressbar,
- x, y, width, height,
- 10 - (int)(elapsed * 10.0) % 10);
+ x, y, width, height,
+ 10 - (int)(elapsed * 10.0) % 10);
}
else if (DETAIL ("optionmenu"))
{
WidgetParameters params;
OptionMenuParameters optionmenu;
-
+
GtkRequisition indicator_size;
GtkBorder indicator_spacing;
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
- if (clearlooks_style->reliefstyle != 0)
- params.enable_shadow = TRUE;
+
+ params.enable_glow = TRUE;
ge_option_menu_get_props (widget, &indicator_size, &indicator_spacing);
-
+
if (ge_widget_is_ltr (widget))
optionmenu.linepos = width - (indicator_size.width + indicator_spacing.left + indicator_spacing.right) - 1;
else
optionmenu.linepos = (indicator_size.width + indicator_spacing.left + indicator_spacing.right) + 1;
-
+
STYLE_FUNCTION(draw_optionmenu) (cr, colors, &params, &optionmenu,
- x, y, width, height);
+ x, y, width, height);
}
else if (DETAIL ("menuitem"))
{
WidgetParameters params;
clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
- if (CHECK_HINT (GE_HINT_MENUBAR))
+
+ if (widget && GE_IS_MENU_BAR (widget->parent))
{
params.corners = CR_CORNER_TOPLEFT | CR_CORNER_TOPRIGHT;
height += 1;
STYLE_FUNCTION(draw_menubaritem) (cr, colors, &params, x, y, width, height);
}
else
- {
+ {
params.corners = CR_CORNER_ALL;
STYLE_FUNCTION(draw_menuitem) (cr, colors, &params, x, y, width, height);
}
@@ -865,70 +808,59 @@ clearlooks_style_draw_box (DRAW_ARGS)
ScrollBarParameters scrollbar;
ScrollBarStepperParameters stepper;
GdkRectangle this_rectangle;
-
+
this_rectangle.x = x;
this_rectangle.y = y;
this_rectangle.width = width;
this_rectangle.height = height;
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
params.corners = CR_CORNER_NONE;
-
+
scrollbar.has_color = FALSE;
scrollbar.horizontal = TRUE;
scrollbar.junction = clearlooks_scrollbar_get_junction (widget);
- if (clearlooks_style->colorize_scrollbar || clearlooks_style->has_scrollbar_color)
+ if (clearlooks_style->colorize_scrollbar || clearlooks_style->has_scrollbar_color) {
scrollbar.has_color = TRUE;
+ }
scrollbar.horizontal = DETAIL ("hscrollbar");
-
+
stepper.stepper = clearlooks_scrollbar_get_stepper (widget, &this_rectangle);
STYLE_FUNCTION(draw_scrollbar_stepper) (cr, colors, &params, &scrollbar, &stepper,
- x, y, width, height);
+ x, y, width, height);
}
else if (DETAIL ("toolbar") || DETAIL ("handlebox_bin") || DETAIL ("dockitem_bin"))
{
WidgetParameters params;
ToolbarParameters toolbar;
- gboolean horizontal;
clearlooks_set_widget_parameters (widget, style, state_type, &params);
clearlooks_set_toolbar_parameters (&toolbar, widget, window, x, y);
toolbar.style = clearlooks_style->toolbarstyle;
- if ((DETAIL ("handlebox_bin") || DETAIL ("dockitem_bin")) && GE_IS_BIN (widget))
- {
- GtkWidget* child = gtk_bin_get_child ((GtkBin*) widget);
- /* This is to draw the correct shadow on the handlebox.
- * We need to draw it here, as otherwise the handle will not get the
- * background. */
- if (GE_IS_TOOLBAR (child))
- gtk_widget_style_get (child, "shadow-type", &shadow_type, NULL);
- }
-
- horizontal = height < 2*width;
- /* This is not that great. Ideally we would have a nice vertical toolbar. */
- if ((shadow_type != GTK_SHADOW_NONE) && horizontal)
+ /* Only draw the shadows on horizontal toolbars */
+ if (shadow_type != GTK_SHADOW_NONE && height < 2*width )
STYLE_FUNCTION(draw_toolbar) (cr, colors, &params, &toolbar, x, y, width, height);
}
else if (DETAIL ("trough"))
{
- /* Nothing? Why benjamin? */
+
}
else if (DETAIL ("menu"))
{
WidgetParameters params;
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
+
STYLE_FUNCTION(draw_menu_frame) (cr, colors, &params, x, y, width, height);
}
else if (DETAIL ("hseparator") || DETAIL ("vseparator"))
{
- gchar *new_detail = (gchar*) detail;
+ const gchar *new_detail = detail;
/* Draw a normal separator, we just use this because it gives more control
* over sizing (currently). */
@@ -937,21 +869,19 @@ clearlooks_style_draw_box (DRAW_ARGS)
if (GE_IS_MENU_ITEM (widget))
new_detail = "menuitem";
- if (DETAIL ("hseparator"))
- {
+ if (DETAIL ("hseparator")) {
gtk_paint_hline (style, window, state_type, area, widget, new_detail,
x, x + width - 1, y + height/2);
- }
- else
+ } else
gtk_paint_vline (style, window, state_type, area, widget, new_detail,
y, y + height - 1, x + width/2);
}
else
{
- GTK_STYLE_CLASS (clearlooks_style_parent_class)->draw_box (style, window, state_type, shadow_type, area,
- widget, detail, x, y, width, height);
+ clearlooks_parent_class->draw_box (style, window, state_type, shadow_type, area,
+ widget, detail, x, y, width, height);
}
-
+
cairo_destroy (cr);
}
@@ -967,24 +897,24 @@ clearlooks_style_draw_slider (DRAW_ARGS, GtkOrientation orientation)
CHECK_ARGS
SANITIZE_SIZE
-
+
if (DETAIL ("hscale") || DETAIL ("vscale"))
{
WidgetParameters params;
SliderParameters slider;
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
+
slider.horizontal = (orientation == GTK_ORIENTATION_HORIZONTAL);
slider.lower = FALSE;
slider.fill_level = FALSE;
-
+
if (clearlooks_style->style == CL_STYLE_GLOSSY) /* XXX! */
params.corners = CR_CORNER_ALL;
-
+
STYLE_FUNCTION(draw_slider_button) (cr, &clearlooks_style->colors,
- &params, &slider,
- x, y, width, height);
+ &params, &slider,
+ x, y, width, height);
}
else if (DETAIL ("slider"))
{
@@ -998,8 +928,7 @@ clearlooks_style_draw_slider (DRAW_ARGS, GtkOrientation orientation)
scrollbar.horizontal = (orientation == GTK_ORIENTATION_HORIZONTAL);
scrollbar.junction = clearlooks_scrollbar_get_junction (widget);
- if (clearlooks_style->colorize_scrollbar)
- {
+ if (clearlooks_style->colorize_scrollbar) {
scrollbar.color = colors->spot[1];
scrollbar.has_color = TRUE;
}
@@ -1014,14 +943,14 @@ clearlooks_style_draw_slider (DRAW_ARGS, GtkOrientation orientation)
if ((clearlooks_style->style == CL_STYLE_GLOSSY || clearlooks_style->style == CL_STYLE_GUMMY)
&& !scrollbar.has_color)
scrollbar.color = colors->bg[0];
-
+
STYLE_FUNCTION(draw_scrollbar_slider) (cr, colors, &params, &scrollbar,
x, y, width, height);
}
else
{
- GTK_STYLE_CLASS (clearlooks_style_parent_class)->draw_slider (style, window, state_type, shadow_type, area,
- widget, detail, x, y, width, height, orientation);
+ clearlooks_parent_class->draw_slider (style, window, state_type, shadow_type, area,
+ widget, detail, x, y, width, height, orientation);
}
cairo_destroy (cr);
@@ -1035,18 +964,18 @@ clearlooks_style_draw_option (DRAW_ARGS)
WidgetParameters params;
CheckboxParameters checkbox;
cairo_t *cr;
-
+
CHECK_ARGS
SANITIZE_SIZE
cr = ge_gdk_drawable_to_cairo (window, area);
colors = &clearlooks_style->colors;
-
+
checkbox.shadow_type = shadow_type;
checkbox.in_menu = (widget && GTK_IS_MENU(widget->parent));
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
+
STYLE_FUNCTION(draw_radiobutton) (cr, colors, &params, &checkbox, x, y, width, height);
cairo_destroy (cr);
@@ -1064,19 +993,19 @@ clearlooks_style_draw_check (DRAW_ARGS)
SANITIZE_SIZE
cr = ge_gdk_drawable_to_cairo (window, area);
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
-
+
params.corners = CR_CORNER_ALL;
-
+
checkbox.shadow_type = shadow_type;
checkbox.in_cell = DETAIL("cellcheck");
checkbox.in_menu = (widget && widget->parent && GTK_IS_MENU(widget->parent));
STYLE_FUNCTION(draw_checkbox) (cr, &clearlooks_style->colors, &params, &checkbox,
- x, y, width, height);
-
+ x, y, width, height);
+
cairo_destroy (cr);
}
@@ -1106,7 +1035,7 @@ clearlooks_style_draw_vline (GtkStyle *style,
* (and even if, a normal one should be better on menu bars) */
STYLE_FUNCTION(draw_separator) (cr, colors, NULL, &separator,
x, y1, 2, y2-y1+1);
-
+
cairo_destroy (cr);
}
@@ -1131,24 +1060,24 @@ clearlooks_style_draw_hline (GtkStyle *style,
colors = &clearlooks_style->colors;
cr = ge_gdk_drawable_to_cairo (window, area);
-
+
separator.horizontal = TRUE;
-
+
if (!DETAIL ("menuitem"))
STYLE_FUNCTION(draw_separator) (cr, colors, NULL, &separator,
x1, y, x2-x1+1, 2);
else
STYLE_FUNCTION(draw_menu_item_separator) (cr, colors, NULL, &separator,
- x1, y, x2-x1+1, 2);
-
+ x1, y, x2-x1+1, 2);
+
cairo_destroy (cr);
}
-static void
+static void
clearlooks_style_draw_shadow_gap (DRAW_ARGS,
- GtkPositionType gap_side,
- gint gap_x,
- gint gap_width)
+ GtkPositionType gap_side,
+ gint gap_x,
+ gint gap_width)
{
ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
const ClearlooksColors *colors;
@@ -1159,47 +1088,47 @@ clearlooks_style_draw_shadow_gap (DRAW_ARGS,
cr = ge_gdk_drawable_to_cairo (window, area);
colors = &clearlooks_style->colors;
-
+
if (DETAIL ("frame"))
{
WidgetParameters params;
FrameParameters frame;
-
+
frame.shadow = shadow_type;
frame.gap_side = gap_side;
frame.gap_x = gap_x;
frame.gap_width = gap_width;
frame.border = &colors->shade[5];
-
+
clearlooks_set_widget_parameters (widget, style, state_type, &params);
params.corners = CR_CORNER_ALL;
-
+
STYLE_FUNCTION(draw_frame) (cr, colors, &params, &frame,
- x, y, width, height);
+ x, y, width, height);
}
else
{
- GTK_STYLE_CLASS (clearlooks_style_parent_class)->draw_shadow_gap (style, window, state_type, shadow_type, area,
- widget, detail, x, y, width, height,
- gap_side, gap_x, gap_width);
+ clearlooks_parent_class->draw_shadow_gap (style, window, state_type, shadow_type, area,
+ widget, detail, x, y, width, height,
+ gap_side, gap_x, gap_width);
}
-
+
cairo_destroy (cr);
}
static void
clearlooks_style_draw_resize_grip (GtkStyle *style,
- GdkWindow *window,
- GtkStateType state_type,
- GdkRectangle *area,
- GtkWidget *widget,
- const gchar *detail,
- GdkWindowEdge edge,
- gint x,
- gint y,
- gint width,
- gint height)
+ GdkWindow *window,
+ GtkStateType state_type,
+ GdkRectangle *area,
+ GtkWidget *widget,
+ const gchar *detail,
+ GdkWindowEdge edge,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
{
ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
ClearlooksColors *colors = &clearlooks_style->colors;
@@ -1216,10 +1145,10 @@ clearlooks_style_draw_resize_grip (GtkStyle *style,
cr = ge_gdk_drawable_to_cairo (window, area);
- clearlooks_set_widget_parameters (widget, style, state_type, &params);
+ clearlooks_set_widget_parameters (widget, style, state_type, &params);
STYLE_FUNCTION(draw_resize_grip) (cr, colors, &params, &grip,
- x, y, width, height);
+ x, y, width, height);
cairo_destroy (cr);
}
@@ -1230,17 +1159,17 @@ clearlooks_style_draw_tab (DRAW_ARGS)
ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
ClearlooksColors *colors = &clearlooks_style->colors;
WidgetParameters params;
- ArrowParameters arrow;
+ ArrowParameters arrow;
cairo_t *cr;
CHECK_ARGS
SANITIZE_SIZE
-
+
cr = ge_gdk_drawable_to_cairo (window, area);
clearlooks_set_widget_parameters (widget, style, state_type, &params);
arrow.type = CL_ARROW_COMBO;
- arrow.direction = CL_DIRECTION_DOWN;
+ arrow.direction = CL_DIRECTION_DOWN;
STYLE_FUNCTION(draw_arrow) (cr, colors, &params, &arrow, x, y, width, height);
@@ -1249,18 +1178,18 @@ clearlooks_style_draw_tab (DRAW_ARGS)
static void
clearlooks_style_draw_arrow (GtkStyle *style,
- GdkWindow *window,
- GtkStateType state_type,
- GtkShadowType shadow,
- GdkRectangle *area,
- GtkWidget *widget,
- const gchar *detail,
- GtkArrowType arrow_type,
- gboolean fill,
- gint x,
- gint y,
- gint width,
- gint height)
+ GdkWindow *window,
+ GtkStateType state_type,
+ GtkShadowType shadow,
+ GdkRectangle *area,
+ GtkWidget *widget,
+ const gchar *detail,
+ GtkArrowType arrow_type,
+ gboolean fill,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
{
ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
ClearlooksColors *colors = &clearlooks_style->colors;
@@ -1271,8 +1200,7 @@ clearlooks_style_draw_arrow (GtkStyle *style,
CHECK_ARGS
SANITIZE_SIZE
- if (arrow_type == GTK_ARROW_NONE)
- {
+ if (arrow_type == GTK_ARROW_NONE) {
cairo_destroy (cr);
return;
}
@@ -1280,12 +1208,12 @@ clearlooks_style_draw_arrow (GtkStyle *style,
clearlooks_set_widget_parameters (widget, style, state_type, &params);
arrow.type = CL_ARROW_NORMAL;
arrow.direction = (ClearlooksDirection)arrow_type;
-
+
if (ge_is_combo_box (widget, FALSE) && !ge_is_combo_box_entry (widget))
{
arrow.type = CL_ARROW_COMBO;
}
-
+
/* I have no idea why, but the arrow of GtkCombo is larger than in other places.
* Subtracting 3 seems to fix this. */
if (widget && widget->parent && GE_IS_COMBO (widget->parent->parent))
@@ -1296,34 +1224,30 @@ clearlooks_style_draw_arrow (GtkStyle *style,
x += 2;
width -= 3;
}
-
+
STYLE_FUNCTION(draw_arrow) (cr, colors, &params, &arrow, x, y, width, height);
-
+
cairo_destroy (cr);
}
static void
clearlooks_style_init_from_rc (GtkStyle * style,
- GtkRcStyle * rc_style)
+ GtkRcStyle * rc_style)
{
ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
-
- GTK_STYLE_CLASS (clearlooks_style_parent_class)->init_from_rc (style, rc_style);
-
+
+ clearlooks_parent_class->init_from_rc (style, rc_style);
+
g_assert ((CLEARLOOKS_RC_STYLE (rc_style)->style >= 0) && (CLEARLOOKS_RC_STYLE (rc_style)->style < CL_NUM_STYLES));
- clearlooks_style->style = CLEARLOOKS_RC_STYLE (rc_style)->style;
-
- clearlooks_style->reliefstyle = CLEARLOOKS_RC_STYLE (rc_style)->reliefstyle;
- clearlooks_style->menubarstyle = CLEARLOOKS_RC_STYLE (rc_style)->menubarstyle;
- clearlooks_style->toolbarstyle = CLEARLOOKS_RC_STYLE (rc_style)->toolbarstyle;
- clearlooks_style->has_focus_color = CLEARLOOKS_RC_STYLE (rc_style)->flags & CL_FLAG_FOCUS_COLOR;
+ clearlooks_style->style = CLEARLOOKS_RC_STYLE (rc_style)->style;
+
+ clearlooks_style->menubarstyle = CLEARLOOKS_RC_STYLE (rc_style)->menubarstyle;
+ clearlooks_style->toolbarstyle = CLEARLOOKS_RC_STYLE (rc_style)->toolbarstyle;
clearlooks_style->has_scrollbar_color = CLEARLOOKS_RC_STYLE (rc_style)->flags & CL_FLAG_SCROLLBAR_COLOR;
- clearlooks_style->colorize_scrollbar = CLEARLOOKS_RC_STYLE (rc_style)->colorize_scrollbar;
- clearlooks_style->animation = CLEARLOOKS_RC_STYLE (rc_style)->animation;
- clearlooks_style->radius = CLAMP (CLEARLOOKS_RC_STYLE (rc_style)->radius, 0.0, 10.0);
+ clearlooks_style->colorize_scrollbar = CLEARLOOKS_RC_STYLE (rc_style)->colorize_scrollbar;
+ clearlooks_style->animation = CLEARLOOKS_RC_STYLE (rc_style)->animation;
+ clearlooks_style->radius = CLAMP (CLEARLOOKS_RC_STYLE (rc_style)->radius, 0.0, 10.0);
- if (clearlooks_style->has_focus_color)
- clearlooks_style->focus_color = CLEARLOOKS_RC_STYLE (rc_style)->focus_color;
if (clearlooks_style->has_scrollbar_color)
clearlooks_style->scrollbar_color = CLEARLOOKS_RC_STYLE (rc_style)->scrollbar_color;
}
@@ -1337,37 +1261,25 @@ clearlooks_style_realize (GtkStyle * style)
CairoColor bg_normal;
double contrast;
int i;
-
- GTK_STYLE_CLASS (clearlooks_style_parent_class)->realize (style);
+
+ clearlooks_parent_class->realize (style);
contrast = CLEARLOOKS_RC_STYLE (style->rc_style)->contrast;
-
+
/* Lighter to darker */
ge_gdk_color_to_cairo (&style->bg[GTK_STATE_NORMAL], &bg_normal);
for (i = 0; i < 9; i++)
{
- ge_shade_color (&bg_normal, (shades[i] < 1.0) ?
- (shades[i]/contrast) : (shades[i]*contrast),
- &clearlooks_style->colors.shade[i]);
+ ge_shade_color(&bg_normal, (shades[i]-0.7) * contrast + 0.7, &clearlooks_style->colors.shade[i]);
}
-
+
ge_gdk_color_to_cairo (&style->bg[GTK_STATE_SELECTED], &spot_color);
-
- /* Andrea Cimitan wants something like the following to handle dark themes.
- * However, these two lines are broken currently, as ge_hsb_from_color expects
- * a CairoColor and not GdkColor
- * ge_hsb_from_color (&style->bg[GTK_STATE_SELECTED], &hue_spot, &saturation_spot, &brightness_spot);
- * ge_hsb_from_color (&style->bg[GTK_STATE_NORMAL], &hue_bg, &saturation_bg, &brightness_bg);
- */
-
- /* Here to place some checks for dark themes.
- * We should use a different shade value for spot[2]. */
-
- ge_shade_color (&spot_color, 1.25, &clearlooks_style->colors.spot[0]);
- ge_shade_color (&spot_color, 1.05, &clearlooks_style->colors.spot[1]);
- ge_shade_color (&spot_color, 0.65, &clearlooks_style->colors.spot[2]);
-
+
+ ge_shade_color(&spot_color, 1.42, &clearlooks_style->colors.spot[0]);
+ ge_shade_color(&spot_color, 1.05, &clearlooks_style->colors.spot[1]);
+ ge_shade_color(&spot_color, 0.65, &clearlooks_style->colors.spot[2]);
+
for (i=0; i<5; i++)
{
ge_gdk_color_to_cairo (&style->fg[i], &clearlooks_style->colors.fg[i]);
@@ -1379,170 +1291,90 @@ clearlooks_style_realize (GtkStyle * style)
static void
clearlooks_style_draw_focus (GtkStyle *style, GdkWindow *window, GtkStateType state_type,
- GdkRectangle *area, GtkWidget *widget, const gchar *detail,
- gint x, gint y, gint width, gint height)
+ GdkRectangle *area, GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height)
{
- ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
- ClearlooksColors *colors = &clearlooks_style->colors;
- WidgetParameters params;
- FocusParameters focus;
- guint8* dash_list;
-
cairo_t *cr;
+ gboolean free_dash_list = FALSE;
+ gint line_width = 1;
+ gint8 *dash_list = (gint8 *)"\1\1";
- CHECK_ARGS
- SANITIZE_SIZE
-
- cr = gdk_cairo_create (window);
+ if (widget)
+ {
+ gtk_widget_style_get (widget,
+ "focus-line-width", &line_width,
+ "focus-line-pattern",
+ (gchar *) & dash_list, NULL);
- clearlooks_set_widget_parameters (widget, style, state_type, &params);
+ free_dash_list = TRUE;
+ }
- /* Corners */
- params.corners = CR_CORNER_ALL;
- if (CHECK_HINT (GE_HINT_COMBOBOX_ENTRY))
+ if (detail && !strcmp (detail, "add-mode"))
{
- if (params.ltr)
- params.corners = CR_CORNER_TOPRIGHT | CR_CORNER_BOTTOMRIGHT;
- else
- params.corners = CR_CORNER_TOPLEFT | CR_CORNER_BOTTOMLEFT;
+ if (free_dash_list)
+ g_free (dash_list);
- if (params.xthickness > 2)
- {
- if (params.ltr)
- x--;
- width++;
- }
+ dash_list = (gint8 *)"\4\4";
+ free_dash_list = FALSE;
}
- focus.has_color = FALSE;
- focus.interior = FALSE;
- focus.line_width = 1;
- focus.padding = 1;
- dash_list = NULL;
+ CHECK_ARGS
+ SANITIZE_SIZE
+
+ cr = gdk_cairo_create (window);
- if (widget)
- {
- gtk_widget_style_get (widget,
- "focus-line-width", &focus.line_width,
- "focus-line-pattern", &dash_list,
- "focus-padding", &focus.padding,
- "interior-focus", &focus.interior,
- NULL);
- }
- if (dash_list)
- focus.dash_list = dash_list;
+ if (detail && !strcmp (detail, "colorwheel_light"))
+ cairo_set_source_rgb (cr, 0., 0., 0.);
+ else if (detail && !strcmp (detail, "colorwheel_dark"))
+ cairo_set_source_rgb (cr, 1., 1., 1.);
else
- focus.dash_list = (guint8*) g_strdup ("\1\1");
+ ge_cairo_set_gdk_color_with_alpha (cr, &style->fg[state_type],
+ 0.7);
- /* Focus type */
- if (DETAIL("button"))
- {
- if (CHECK_HINT (GE_HINT_TREEVIEW_HEADER))
- {
- focus.type = CL_FOCUS_TREEVIEW_HEADER;
- }
- else
- {
- GtkReliefStyle relief = GTK_RELIEF_NORMAL;
- /* Check for the shadow type. */
- if (widget && GTK_IS_BUTTON (widget))
- g_object_get (G_OBJECT (widget), "relief", &relief, NULL);
+ cairo_set_line_width (cr, line_width);
- if (relief == GTK_RELIEF_NORMAL)
- focus.type = CL_FOCUS_BUTTON;
- else
- focus.type = CL_FOCUS_BUTTON_FLAT;
-
- /* This is a workaround for the bogus focus handling that
- * clearlooks has currently.
- * I truely dislike putting it here, but I guess it is better
- * then having such a visible bug. It should be removed in the
- * next unstable release cycle. -- Benjamin */
- if (ge_object_is_a (G_OBJECT (widget), "ButtonWidget"))
- focus.type = CL_FOCUS_LABEL;
- }
- }
- else if (detail && g_str_has_prefix (detail, "treeview"))
+ if (dash_list[0])
{
- /* Focus in a treeview, and that means a lot of different detail strings. */
- if (g_str_has_prefix (detail, "treeview-drop-indicator"))
- focus.type = CL_FOCUS_TREEVIEW_DND;
- else
- focus.type = CL_FOCUS_TREEVIEW_ROW;
+ gint n_dashes = strlen ((gchar *)dash_list);
+ gdouble *dashes = g_new (gdouble, n_dashes);
+ gdouble total_length = 0;
+ gdouble dash_offset;
+ gint i;
- if (g_str_has_suffix (detail, "left"))
- {
- focus.continue_side = CL_CONT_RIGHT;
- }
- else if (g_str_has_suffix (detail, "right"))
- {
- focus.continue_side = CL_CONT_LEFT;
- }
- else if (g_str_has_suffix (detail, "middle"))
+ for (i = 0; i < n_dashes; i++)
{
- focus.continue_side = CL_CONT_LEFT | CL_CONT_RIGHT;
- }
- else
- {
- /* This may either mean no continuation, or unknown ...
- * if it is unknown we assume it continues on both sides */
- gboolean row_ending_details = FALSE;
-
- /* Try to get the style property. */
- if (widget)
- gtk_widget_style_get (widget,
- "row-ending-details", &row_ending_details,
- NULL);
-
- if (row_ending_details)
- focus.continue_side = CL_CONT_NONE;
- else
- focus.continue_side = CL_CONT_LEFT | CL_CONT_RIGHT;
+ dashes[i] = dash_list[i];
+ total_length += dash_list[i];
}
- }
- else if (detail && g_str_has_prefix (detail, "trough") && CHECK_HINT (GE_HINT_SCALE))
- {
- focus.type = CL_FOCUS_SCALE;
- }
- else if (DETAIL("tab"))
- {
- focus.type = CL_FOCUS_TAB;
- }
- else if (detail && g_str_has_prefix (detail, "colorwheel"))
- {
- if (DETAIL ("colorwheel_dark"))
- focus.type = CL_FOCUS_COLOR_WHEEL_DARK;
- else
- focus.type = CL_FOCUS_COLOR_WHEEL_LIGHT;
- }
- else if (DETAIL("checkbutton") || DETAIL("radiobutton"))
- {
- focus.type = CL_FOCUS_LABEL; /* Let's call it "LABEL" :) */
- }
- else if (CHECK_HINT (GE_HINT_TREEVIEW))
- {
- focus.type = CL_FOCUS_TREEVIEW; /* Treeview without content is focused. */
- }
- else
- {
- focus.type = CL_FOCUS_UNKNOWN; /* Custom widgets (Beagle) and something unknown */
+ /* The dash offset here aligns the pattern to integer pixels
+ * by starting the dash at the right side of the left border
+ * Negative dash offsets in cairo don't work
+ * (https://bugs.freedesktop.org/show_bug.cgi?id=2729)
+ */
+ dash_offset = -line_width / 2.;
+ while (dash_offset < 0)
+ dash_offset += total_length;
+
+ cairo_set_dash (cr, dashes, n_dashes, dash_offset);
+ g_free (dashes);
}
- /* Focus color */
- if (clearlooks_style->has_focus_color)
+ if (area)
{
- ge_gdk_color_to_cairo (&clearlooks_style->focus_color, &focus.color);
- focus.has_color = TRUE;
+ gdk_cairo_rectangle (cr, area);
+ cairo_clip (cr);
}
- else
- focus.color = colors->bg[GTK_STATE_SELECTED];
-
- STYLE_FUNCTION(draw_focus) (cr, colors, &params, &focus, x, y, width, height);
-
- g_free (focus.dash_list);
+ cairo_rectangle (cr,
+ x + line_width / 2.,
+ y + line_width / 2.,
+ width - line_width, height - line_width);
+ cairo_stroke (cr);
cairo_destroy (cr);
+
+ if (free_dash_list)
+ g_free (dash_list);
}
static void
@@ -1550,27 +1382,24 @@ clearlooks_style_copy (GtkStyle * style, GtkStyle * src)
{
ClearlooksStyle * cl_style = CLEARLOOKS_STYLE (style);
ClearlooksStyle * cl_src = CLEARLOOKS_STYLE (src);
-
+
cl_style->colors = cl_src->colors;
- cl_style->reliefstyle = cl_src->reliefstyle;
cl_style->menubarstyle = cl_src->menubarstyle;
cl_style->toolbarstyle = cl_src->toolbarstyle;
- cl_style->focus_color = cl_src->focus_color;
- cl_style->has_focus_color = cl_src->has_focus_color;
cl_style->scrollbar_color = cl_src->scrollbar_color;
cl_style->has_scrollbar_color = cl_src->has_scrollbar_color;
cl_style->colorize_scrollbar = cl_src->colorize_scrollbar;
cl_style->animation = cl_src->animation;
cl_style->radius = cl_src->radius;
cl_style->style = cl_src->style;
-
- GTK_STYLE_CLASS (clearlooks_style_parent_class)->copy (style, src);
+
+ clearlooks_parent_class->copy (style, src);
}
static void
clearlooks_style_unrealize (GtkStyle * style)
{
- GTK_STYLE_CLASS (clearlooks_style_parent_class)->unrealize (style);
+ clearlooks_parent_class->unrealize (style);
}
static GdkPixbuf *
@@ -1595,13 +1424,11 @@ set_transparency (const GdkPixbuf *pixbuf, gdouble alpha_percent)
rowstride = gdk_pixbuf_get_rowstride (target);
data = gdk_pixbuf_get_pixels (target);
- for (y = 0; y < height; y++)
- {
- for (x = 0; x < width; x++)
- {
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
/* The "4" is the number of chars per pixel, in this case, RGBA,
the 3 means "skip to the alpha" */
- current = data + (y * rowstride) + (x * 4) + 3;
+ current = data + (y * rowstride) + (x * 4) + 3;
*(current) = (guchar) (*(current) * alpha_percent);
}
}
@@ -1615,26 +1442,23 @@ scale_or_ref (GdkPixbuf *src,
int height)
{
if (width == gdk_pixbuf_get_width (src) &&
- height == gdk_pixbuf_get_height (src))
- {
+ height == gdk_pixbuf_get_height (src)) {
return g_object_ref (src);
- }
- else
- {
+ } else {
return gdk_pixbuf_scale_simple (src,
- width, height,
- GDK_INTERP_BILINEAR);
+ width, height,
+ GDK_INTERP_BILINEAR);
}
}
static void
clearlooks_style_draw_layout (GtkStyle * style,
- GdkWindow * window,
- GtkStateType state_type,
- gboolean use_text,
- GdkRectangle * area,
- GtkWidget * widget,
- const gchar * detail, gint x, gint y, PangoLayout * layout)
+ GdkWindow * window,
+ GtkStateType state_type,
+ gboolean use_text,
+ GdkRectangle * area,
+ GtkWidget * widget,
+ const gchar * detail, gint x, gint y, PangoLayout * layout)
{
GdkGC *gc;
@@ -1646,8 +1470,7 @@ clearlooks_style_draw_layout (GtkStyle * style,
if (area)
gdk_gc_set_clip_rectangle (gc, area);
- if (state_type == GTK_STATE_INSENSITIVE)
- {
+ if (state_type == GTK_STATE_INSENSITIVE) {
ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
ClearlooksColors *colors = &clearlooks_style->colors;
@@ -1661,7 +1484,7 @@ clearlooks_style_draw_layout (GtkStyle * style,
ge_shade_color (&params.parentbg, 1.2, &temp);
else
ge_shade_color (&colors->bg[widget->state], 1.2, &temp);
-
+
etched.red = (int) (temp.r * 65535);
etched.green = (int) (temp.g * 65535);
etched.blue = (int) (temp.b * 65535);
@@ -1678,12 +1501,12 @@ clearlooks_style_draw_layout (GtkStyle * style,
static GdkPixbuf *
clearlooks_style_draw_render_icon (GtkStyle *style,
- const GtkIconSource *source,
- GtkTextDirection direction,
- GtkStateType state,
- GtkIconSize size,
- GtkWidget *widget,
- const char *detail)
+ const GtkIconSource *source,
+ GtkTextDirection direction,
+ GtkStateType state,
+ GtkIconSize size,
+ GtkWidget *widget,
+ const char *detail)
{
int width = 1;
int height = 1;
@@ -1692,35 +1515,30 @@ clearlooks_style_draw_render_icon (GtkStyle *style,
GdkPixbuf *base_pixbuf;
GdkScreen *screen;
GtkSettings *settings;
-
+
/* Oddly, style can be NULL in this function, because
* GtkIconSet can be used without a style and if so
* it uses this function.
*/
-
+
base_pixbuf = gtk_icon_source_get_pixbuf (source);
-
+
g_return_val_if_fail (base_pixbuf != NULL, NULL);
-
- if (widget && gtk_widget_has_screen (widget))
- {
+
+ if (widget && gtk_widget_has_screen (widget)) {
screen = gtk_widget_get_screen (widget);
settings = gtk_settings_get_for_screen (screen);
- }
- else if (style->colormap)
- {
+ } else if (style->colormap) {
screen = gdk_colormap_get_screen (style->colormap);
settings = gtk_settings_get_for_screen (screen);
- }
- else
- {
+ } else {
settings = gtk_settings_get_default ();
GTK_NOTE (MULTIHEAD,
g_warning ("Using the default screen for gtk_default_render_icon()"));
}
-
- if (size != (GtkIconSize) -1 && !gtk_icon_size_lookup_for_settings (settings, size, &width, &height))
- {
+
+
+ if (size != (GtkIconSize) -1 && !gtk_icon_size_lookup_for_settings (settings, size, &width, &height)) {
g_warning (G_STRLOC ": invalid icon size '%d'", size);
return NULL;
}
@@ -1732,40 +1550,30 @@ clearlooks_style_draw_render_icon (GtkStyle *style,
scaled = scale_or_ref (base_pixbuf, width, height);
else
scaled = g_object_ref (base_pixbuf);
-
+
/* If the state was wildcarded, then generate a state. */
- if (gtk_icon_source_get_state_wildcarded (source))
- {
- if (state == GTK_STATE_INSENSITIVE)
- {
+ if (gtk_icon_source_get_state_wildcarded (source)) {
+ if (state == GTK_STATE_INSENSITIVE) {
stated = set_transparency (scaled, 0.3);
- gdk_pixbuf_saturate_and_pixelate (stated, stated, 0.1, FALSE);
-
+ gdk_pixbuf_saturate_and_pixelate (stated, stated,
+ 0.1, FALSE);
+
g_object_unref (scaled);
- }
- else if (state == GTK_STATE_PRELIGHT)
- {
- stated = gdk_pixbuf_copy (scaled);
-
- gdk_pixbuf_saturate_and_pixelate (scaled, stated, 1.2, FALSE);
-
+ } else if (state == GTK_STATE_PRELIGHT) {
+ stated = gdk_pixbuf_copy (scaled);
+
+ gdk_pixbuf_saturate_and_pixelate (scaled, stated,
+ 1.2, FALSE);
+
g_object_unref (scaled);
- }
- else
- {
+ } else {
stated = scaled;
}
}
else
stated = scaled;
-
- return stated;
-}
-
-void
-clearlooks_style_register_types (GTypeModule *module)
-{
- clearlooks_style_register_type (module);
+
+ return stated;
}
static void
@@ -1777,6 +1585,9 @@ static void
clearlooks_style_class_init (ClearlooksStyleClass * klass)
{
GtkStyleClass *style_class = GTK_STYLE_CLASS (klass);
+
+ clearlooks_style_class = CLEARLOOKS_STYLE_CLASS (klass);
+ clearlooks_parent_class = g_type_class_peek_parent (klass);
style_class->copy = clearlooks_style_copy;
style_class->realize = clearlooks_style_realize;
@@ -1801,26 +1612,36 @@ clearlooks_style_class_init (ClearlooksStyleClass * klass)
style_class->draw_layout = clearlooks_style_draw_layout;
style_class->render_icon = clearlooks_style_draw_render_icon;
- clearlooks_register_style_classic (&klass->style_functions[CL_STYLE_CLASSIC],
- &klass->style_constants[CL_STYLE_CLASSIC]);
-
- klass->style_functions[CL_STYLE_GLOSSY] = klass->style_functions[CL_STYLE_CLASSIC];
- klass->style_constants[CL_STYLE_GLOSSY] = klass->style_constants[CL_STYLE_CLASSIC];
- clearlooks_register_style_glossy (&klass->style_functions[CL_STYLE_GLOSSY],
- &klass->style_constants[CL_STYLE_GLOSSY]);
-
- klass->style_functions[CL_STYLE_INVERTED] = klass->style_functions[CL_STYLE_CLASSIC];
- klass->style_constants[CL_STYLE_INVERTED] = klass->style_constants[CL_STYLE_CLASSIC];
- clearlooks_register_style_inverted (&klass->style_functions[CL_STYLE_INVERTED],
- &klass->style_constants[CL_STYLE_INVERTED]);
-
- klass->style_functions[CL_STYLE_GUMMY] = klass->style_functions[CL_STYLE_CLASSIC];
- klass->style_constants[CL_STYLE_GUMMY] = klass->style_constants[CL_STYLE_CLASSIC];
- clearlooks_register_style_gummy (&klass->style_functions[CL_STYLE_GUMMY],
- &klass->style_constants[CL_STYLE_GUMMY]);
+ clearlooks_register_style_classic (&clearlooks_style_class->style_functions[CL_STYLE_CLASSIC]);
+ clearlooks_style_class->style_functions[CL_STYLE_GLOSSY] = clearlooks_style_class->style_functions[CL_STYLE_CLASSIC];
+ clearlooks_register_style_glossy (&clearlooks_style_class->style_functions[CL_STYLE_GLOSSY]);
+ clearlooks_style_class->style_functions[CL_STYLE_INVERTED] = clearlooks_style_class->style_functions[CL_STYLE_CLASSIC];
+ clearlooks_register_style_inverted (&clearlooks_style_class->style_functions[CL_STYLE_INVERTED]);
+ clearlooks_style_class->style_functions[CL_STYLE_GUMMY] = clearlooks_style_class->style_functions[CL_STYLE_CLASSIC];
+ clearlooks_register_style_gummy (&clearlooks_style_class->style_functions[CL_STYLE_GUMMY]);
}
-static void
-clearlooks_style_class_finalize (ClearlooksStyleClass *klass)
+GType clearlooks_type_style = 0;
+
+void
+clearlooks_style_register_type (GTypeModule * module)
{
+ static const GTypeInfo object_info =
+ {
+ sizeof (ClearlooksStyleClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) clearlooks_style_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (ClearlooksStyle),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) clearlooks_style_init,
+ NULL
+ };
+
+ clearlooks_type_style = g_type_module_register_type (module,
+ GTK_TYPE_STYLE,
+ "ClearlooksStyle",
+ &object_info, 0);
}
diff --git a/libs/clearlooks/clearlooks_style.h b/libs/clearlooks-newer/clearlooks_style.h
index d524df5ddf..78f3ca1675 100644
--- a/libs/clearlooks/clearlooks_style.h
+++ b/libs/clearlooks-newer/clearlooks_style.h
@@ -1,7 +1,6 @@
-/* Clearlooks theme engine
+/* Clearlooks Engine
* Copyright (C) 2005 Richard Stellingwerff.
- * Copyright (C) 2007 Benjamin Berg
- * Copyright (C) 2007 Andrea Cimitan
+ * Copyright (C) 2006 Benjamin Berg
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -22,7 +21,6 @@
* and by Alexander Larsson <alexl@redhat.com>
* Modified by Richard Stellingwerff <remenic@gmail.com>
*/
-
#include <gtk/gtkstyle.h>
#ifndef CLEARLOOKS_STYLE_H
@@ -34,7 +32,9 @@
typedef struct _ClearlooksStyle ClearlooksStyle;
typedef struct _ClearlooksStyleClass ClearlooksStyleClass;
-#define CLEARLOOKS_TYPE_STYLE (clearlooks_style_get_type ())
+GE_INTERNAL extern GType clearlooks_type_style;
+
+#define CLEARLOOKS_TYPE_STYLE clearlooks_type_style
#define CLEARLOOKS_STYLE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), CLEARLOOKS_TYPE_STYLE, ClearlooksStyle))
#define CLEARLOOKS_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLEARLOOKS_TYPE_STYLE, ClearlooksStyleClass))
#define CLEARLOOKS_IS_STYLE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), CLEARLOOKS_TYPE_STYLE))
@@ -48,12 +48,9 @@ struct _ClearlooksStyle
ClearlooksColors colors;
ClearlooksStyles style;
-
- guint8 reliefstyle;
+
guint8 menubarstyle;
guint8 toolbarstyle;
- GdkColor focus_color;
- gboolean has_focus_color;
GdkColor scrollbar_color;
gboolean colorize_scrollbar;
gboolean has_scrollbar_color;
@@ -66,10 +63,8 @@ struct _ClearlooksStyleClass
GtkStyleClass parent_class;
ClearlooksStyleFunctions style_functions[CL_NUM_STYLES];
- ClearlooksStyleConstants style_constants[CL_NUM_STYLES];
};
-GE_INTERNAL void clearlooks_style_register_types (GTypeModule *module);
-GE_INTERNAL GType clearlooks_style_get_type (void);
+GE_INTERNAL void clearlooks_style_register_type (GTypeModule *module);
#endif /* CLEARLOOKS_STYLE_H */
diff --git a/libs/clearlooks/clearlooks_theme_main.c b/libs/clearlooks-newer/clearlooks_theme_main.c
index b68cfe4119..c042fdbac0 100644
--- a/libs/clearlooks/clearlooks_theme_main.c
+++ b/libs/clearlooks-newer/clearlooks_theme_main.c
@@ -7,8 +7,8 @@
GE_EXPORT void
theme_init (GTypeModule *module)
{
- clearlooks_rc_style_register_types (module);
- clearlooks_style_register_types (module);
+ clearlooks_rc_style_register_type (module);
+ clearlooks_style_register_type (module);
}
GE_EXPORT void
diff --git a/libs/clearlooks-newer/clearlooks_types.h b/libs/clearlooks-newer/clearlooks_types.h
new file mode 100644
index 0000000000..7caf8a3208
--- /dev/null
+++ b/libs/clearlooks-newer/clearlooks_types.h
@@ -0,0 +1,455 @@
+#ifndef CLEARLOOKS_TYPES_H
+#define CLEARLOOKS_TYPES_H
+
+#include <ge-support.h>
+
+typedef unsigned char boolean;
+typedef unsigned char uint8;
+typedef struct _ClearlooksStyleFunctions ClearlooksStyleFunctions;
+
+typedef enum
+{
+ CL_STYLE_CLASSIC = 0,
+ CL_STYLE_GLOSSY = 1,
+ CL_STYLE_INVERTED = 2,
+ CL_STYLE_GUMMY = 3,
+ CL_NUM_STYLES = 4
+} ClearlooksStyles;
+
+
+typedef enum
+{
+ CL_STATE_NORMAL,
+ CL_STATE_ACTIVE,
+ CL_STATE_SELECTED,
+ CL_STATE_INSENSITIVE
+} ClearlooksStateType;
+
+typedef enum
+{
+ CL_JUNCTION_NONE = 0,
+ CL_JUNCTION_BEGIN = 1,
+ CL_JUNCTION_END = 2
+} ClearlooksJunction;
+
+typedef enum
+{
+ CL_STEPPER_UNKNOWN = 0,
+ CL_STEPPER_A = 1,
+ CL_STEPPER_B = 2,
+ CL_STEPPER_C = 4,
+ CL_STEPPER_D = 8
+} ClearlooksStepper;
+
+typedef enum
+{
+ CL_ORDER_FIRST,
+ CL_ORDER_MIDDLE,
+ CL_ORDER_LAST
+} ClearlooksOrder;
+
+typedef enum
+{
+ CL_ORIENTATION_LEFT_TO_RIGHT,
+ CL_ORIENTATION_RIGHT_TO_LEFT,
+ CL_ORIENTATION_BOTTOM_TO_TOP,
+ CL_ORIENTATION_TOP_TO_BOTTOM
+} ClearlooksOrientation;
+
+typedef enum
+{
+ CL_GAP_LEFT,
+ CL_GAP_RIGHT,
+ CL_GAP_TOP,
+ CL_GAP_BOTTOM
+} ClearlooksGapSide;
+
+typedef enum
+{
+ CL_SHADOW_NONE,
+ CL_SHADOW_IN,
+ CL_SHADOW_OUT,
+ CL_SHADOW_ETCHED_IN,
+ CL_SHADOW_ETCHED_OUT
+} ClearlooksShadowType;
+
+typedef enum
+{
+ CL_HANDLE_TOOLBAR,
+ CL_HANDLE_SPLITTER
+} ClearlooksHandleType;
+
+typedef enum
+{
+ CL_ARROW_NORMAL,
+ CL_ARROW_COMBO
+} ClearlooksArrowType;
+
+typedef enum
+{
+ CL_DIRECTION_UP,
+ CL_DIRECTION_DOWN,
+ CL_DIRECTION_LEFT,
+ CL_DIRECTION_RIGHT
+} ClearlooksDirection;
+
+typedef enum
+{
+ CL_PROGRESSBAR_CONTINUOUS,
+ CL_PROGRESSBAR_DISCRETE
+} ClearlooksProgressBarStyle;
+
+typedef enum
+{
+ CL_WINDOW_EDGE_NORTH_WEST,
+ CL_WINDOW_EDGE_NORTH,
+ CL_WINDOW_EDGE_NORTH_EAST,
+ CL_WINDOW_EDGE_WEST,
+ CL_WINDOW_EDGE_EAST,
+ CL_WINDOW_EDGE_SOUTH_WEST,
+ CL_WINDOW_EDGE_SOUTH,
+ CL_WINDOW_EDGE_SOUTH_EAST
+} ClearlooksWindowEdge;
+
+typedef struct
+{
+ double x;
+ double y;
+ double width;
+ double height;
+} ClearlooksRectangle;
+
+typedef struct
+{
+ CairoColor fg[5];
+ CairoColor bg[5];
+ CairoColor base[5];
+ CairoColor text[5];
+
+ CairoColor shade[9];
+ CairoColor spot[3];
+} ClearlooksColors;
+
+typedef struct
+{
+ boolean active;
+ boolean prelight;
+ boolean disabled;
+ boolean focus;
+ boolean is_default;
+ boolean ltr;
+ boolean enable_glow;
+
+ gfloat radius;
+
+ ClearlooksStateType state_type;
+
+ uint8 corners;
+ uint8 xthickness;
+ uint8 ythickness;
+
+ CairoColor parentbg;
+
+ ClearlooksStyleFunctions *style_functions;
+} WidgetParameters;
+
+typedef struct
+{
+ boolean lower;
+ boolean horizontal;
+ boolean fill_level;
+} SliderParameters;
+
+typedef struct
+{
+ ClearlooksOrientation orientation;
+ boolean pulsing;
+ float value;
+} ProgressBarParameters;
+
+typedef struct
+{
+ int linepos;
+} OptionMenuParameters;
+
+typedef struct
+{
+ ClearlooksShadowType shadow;
+ ClearlooksGapSide gap_side;
+ int gap_x;
+ int gap_width;
+ const CairoColor *border; /* maybe changes this to some other hint ... */
+} FrameParameters;
+
+typedef struct
+{
+ ClearlooksGapSide gap_side;
+} TabParameters;
+
+typedef struct
+{
+ CairoCorners corners;
+ ClearlooksShadowType shadow;
+} ShadowParameters;
+
+typedef struct
+{
+ boolean horizontal;
+} SeparatorParameters;
+
+typedef struct
+{
+ ClearlooksOrder order; /* XXX: rename to position */
+ boolean resizable;
+} ListViewHeaderParameters;
+
+typedef struct
+{
+ CairoColor color;
+ ClearlooksJunction junction; /* On which sides the slider junctions */
+ boolean horizontal;
+ boolean has_color;
+} ScrollBarParameters;
+
+typedef struct
+{
+ ClearlooksHandleType type;
+ boolean horizontal;
+} HandleParameters;
+
+typedef struct
+{
+ ClearlooksStepper stepper; /* Which stepper to draw */
+} ScrollBarStepperParameters;
+
+typedef struct
+{
+ ClearlooksWindowEdge edge;
+} ResizeGripParameters;
+
+typedef struct
+{
+ int style;
+} MenuBarParameters;
+
+typedef struct
+{
+ ClearlooksShadowType shadow_type;
+ boolean in_cell;
+ boolean in_menu;
+} CheckboxParameters;
+
+typedef struct
+{
+ ClearlooksArrowType type;
+ ClearlooksDirection direction;
+} ArrowParameters;
+
+typedef struct
+{
+ int style;
+ boolean topmost;
+} ToolbarParameters;
+
+struct _ClearlooksStyleFunctions
+{
+ void (*draw_button) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_scale_trough) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const SliderParameters *slider,
+ int x, int y, int width, int height);
+
+ void (*draw_progressbar_trough) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_progressbar_fill) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const ProgressBarParameters *progressbar,
+ int x, int y, int width, int height, gint offset);
+
+ void (*draw_slider_button) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const SliderParameters *slider,
+ int x, int y, int width, int height);
+
+ void (*draw_entry) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_spinbutton) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_spinbutton_down) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_optionmenu) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const OptionMenuParameters *optionmenu,
+ int x, int y, int width, int height);
+
+ void (*draw_inset) (cairo_t *cr,
+ const CairoColor *bg_color,
+ double x, double y, double w, double h,
+ double radius, uint8 corners);
+
+ void (*draw_menubar) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const MenuBarParameters *menubar,
+ int x, int y, int width, int height);
+
+ void (*draw_tab) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const TabParameters *tab,
+ int x, int y, int width, int height);
+
+ void (*draw_frame) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const FrameParameters *frame,
+ int x, int y, int width, int height);
+
+ void (*draw_separator) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const SeparatorParameters *separator,
+ int x, int y, int width, int height);
+
+ void (*draw_menu_item_separator) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const SeparatorParameters *separator,
+ int x, int y, int width, int height);
+
+ void (*draw_list_view_header) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const ListViewHeaderParameters *header,
+ int x, int y, int width, int height);
+
+ void (*draw_toolbar) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const ToolbarParameters *toolbar,
+ int x, int y, int width, int height);
+
+ void (*draw_menuitem) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_menubaritem) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_selected_cell) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_scrollbar_stepper) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const ScrollBarParameters *scrollbar,
+ const ScrollBarStepperParameters *stepper,
+ int x, int y, int width, int height);
+
+ void (*draw_scrollbar_slider) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const ScrollBarParameters *scrollbar,
+ int x, int y, int width, int height);
+
+ void (*draw_scrollbar_trough) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const ScrollBarParameters *scrollbar,
+ int x, int y, int width, int height);
+
+ void (*draw_statusbar) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_menu_frame) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_tooltip) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_handle) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const HandleParameters *handle,
+ int x, int y, int width, int height);
+
+ void (*draw_resize_grip) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const ResizeGripParameters *grip,
+ int x, int y, int width, int height);
+
+ void (*draw_arrow) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const ArrowParameters *arrow,
+ int x, int y, int width, int height);
+
+ void (*draw_checkbox) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const CheckboxParameters *checkbox,
+ int x, int y, int width, int height);
+
+ void (*draw_radiobutton) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ const CheckboxParameters *checkbox,
+ int x, int y, int width, int height);
+
+ /* Style internal functions */
+ /* XXX: Only used by slider_button, inline it? */
+ void (*draw_shadow) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ gfloat radius,
+ int width, int height);
+
+ void (*draw_slider) (cairo_t *cr,
+ const ClearlooksColors *colors,
+ const WidgetParameters *widget,
+ int x, int y, int width, int height);
+
+ void (*draw_gripdots) (cairo_t *cr,
+ const ClearlooksColors *colors, int x, int y,
+ int width, int height, int xr, int yr,
+ float contrast);
+};
+
+
+#define CLEARLOOKS_RECTANGLE_SET(rect, _x, _y, _w, _h) rect.x = _x; \
+ rect.y = _y; \
+ rect.width = _w; \
+ rect.height = _h;
+
+#endif /* CLEARLOOKS_TYPES_H */
diff --git a/libs/clearlooks/config.h b/libs/clearlooks-newer/config.h
index cfafc0134f..4326e37ec1 100644
--- a/libs/clearlooks/config.h
+++ b/libs/clearlooks-newer/config.h
@@ -1,13 +1,9 @@
-/* engines/support/config.h. Generated from config.h.in by configure. */
-/* engines/support/config.h.in. Generated from configure.ac by autoheader. */
+/* engines/clearlooks/src/config.h. Generated from config.h.in by configure. */
+/* engines/clearlooks/src/config.h.in. Generated from configure.ac by autoheader. */
/* always defined to indicate that i18n is enabled */
#define ENABLE_NLS 1
-/* Defines whether to enable runtime widget checks as a fallback to hints from
- the theme. */
-#define ENABLE_WIDGET_CHECKS 1
-
/* Gettext package */
#define GETTEXT_PACKAGE "gtk-engines"
@@ -59,9 +55,6 @@
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-/* #undef NO_MINUS_C_MINUS_O */
-
/* Name of package */
#define PACKAGE "gtk-engines"
@@ -72,16 +65,16 @@
#define PACKAGE_NAME "gtk-engines"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "gtk-engines 2.16.0"
+#define PACKAGE_STRING "gtk-engines 2.12.2"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "gtk-engines"
/* Define to the version of this package. */
-#define PACKAGE_VERSION "2.16.0"
+#define PACKAGE_VERSION "2.12.2"
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Version number of package */
-#define VERSION "2.16.0"
+#define VERSION "2.12.2"
diff --git a/libs/clearlooks/cpdll.sh b/libs/clearlooks-newer/cpdll.sh
index fb101d52a0..fb101d52a0 100755
--- a/libs/clearlooks/cpdll.sh
+++ b/libs/clearlooks-newer/cpdll.sh
diff --git a/libs/clearlooks/ge-support.h b/libs/clearlooks-newer/ge-support.h
index bce9ced038..e0a42b6c3d 100644
--- a/libs/clearlooks/ge-support.h
+++ b/libs/clearlooks-newer/ge-support.h
@@ -5,4 +5,5 @@
#include "cairo-support.h"
#include "widget-information.h"
+
#endif /* GE_SUPPORT_H */
diff --git a/libs/clearlooks/general-support.h b/libs/clearlooks-newer/general-support.h
index 4d31946152..25999e2d31 100644
--- a/libs/clearlooks/general-support.h
+++ b/libs/clearlooks-newer/general-support.h
@@ -1,5 +1,3 @@
-#ifndef __GENERAL_SUPPORT_H
-#define __GENERAL_SUPPORT_H
#include <gmodule.h>
#include <glib.h>
@@ -39,5 +37,3 @@
# define GE_EXPORT __global
# define GE_INTERNAL __hidden
#endif
-
-#endif /* __GENERAL_SUPPORT_H */
diff --git a/libs/clearlooks/support.c b/libs/clearlooks-newer/support.c
index ec35ef754b..6d4d8a286d 100644
--- a/libs/clearlooks/support.c
+++ b/libs/clearlooks-newer/support.c
@@ -66,34 +66,14 @@ clearlooks_get_parent_bg (const GtkWidget *widget, CairoColor *color)
GtkStateType state_type;
const GtkWidget *parent;
GdkColor *gcolor;
- gboolean stop;
if (widget == NULL)
return;
parent = widget->parent;
- stop = FALSE;
- while (parent && !stop)
- {
- stop = FALSE;
-
- stop |= !GTK_WIDGET_NO_WINDOW (parent);
- stop |= GTK_IS_NOTEBOOK (parent) &&
- gtk_notebook_get_show_tabs (GTK_NOTEBOOK (parent)) &&
- gtk_notebook_get_show_border (GTK_NOTEBOOK (parent));
-
- if (GTK_IS_TOOLBAR (parent))
- {
- GtkShadowType shadow = GTK_SHADOW_OUT;
- gtk_widget_style_get (GTK_WIDGET (parent), "shadow-type", &shadow, NULL);
-
- stop |= (shadow != GTK_SHADOW_NONE);
- }
-
- if (!stop)
- parent = parent->parent;
- }
+ while (parent && GTK_WIDGET_NO_WINDOW (parent) && !((GTK_IS_NOTEBOOK (parent)) || (GTK_IS_TOOLBAR (parent))))
+ parent = parent->parent;
if (parent == NULL)
return;
@@ -171,10 +151,8 @@ clearlooks_scrollbar_visible_steppers (GtkWidget *widget)
{
ClearlooksStepper steppers = 0;
- /* If this is not a range widget, assume that the primary steppers
- * are present. */
if (!GE_IS_RANGE (widget))
- return CL_STEPPER_A | CL_STEPPER_D;
+ return 0;
if (GTK_RANGE (widget)->has_stepper_a)
steppers |= CL_STEPPER_A;
@@ -205,29 +183,20 @@ clearlooks_scrollbar_get_junction (GtkWidget *widget)
if (adj->value <= adj->lower &&
(GTK_RANGE (widget)->has_stepper_a || GTK_RANGE (widget)->has_stepper_b))
{
- if (!gtk_range_get_inverted (GTK_RANGE (widget)))
- junction |= CL_JUNCTION_BEGIN;
- else
- junction |= CL_JUNCTION_END;
+ junction |= CL_JUNCTION_BEGIN;
}
if (adj->value >= adj->upper - adj->page_size &&
(GTK_RANGE (widget)->has_stepper_c || GTK_RANGE (widget)->has_stepper_d))
{
- if (!gtk_range_get_inverted (GTK_RANGE (widget)))
- junction |= CL_JUNCTION_END;
- else
- junction |= CL_JUNCTION_BEGIN;
+ junction |= CL_JUNCTION_END;
}
return junction;
}
void
-clearlooks_set_toolbar_parameters (ToolbarParameters *toolbar,
- GtkWidget *widget,
- GdkWindow *window,
- gint x, gint y)
+clearlooks_set_toolbar_parameters (ToolbarParameters *toolbar, GtkWidget *widget, GdkWindow *window, gint x, gint y)
{
toolbar->topmost = FALSE;
diff --git a/libs/clearlooks/support.h b/libs/clearlooks-newer/support.h
index 23e33c58e7..23e33c58e7 100644
--- a/libs/clearlooks/support.h
+++ b/libs/clearlooks-newer/support.h
diff --git a/libs/clearlooks-newer/support.h.orig b/libs/clearlooks-newer/support.h.orig
new file mode 100644
index 0000000000..a1430b40d0
--- /dev/null
+++ b/libs/clearlooks-newer/support.h.orig
@@ -0,0 +1,110 @@
+#include <gtk/gtk.h>
+#include <math.h>
+#include <string.h>
+
+/* GTK 2.2 compatibility */
+#ifndef GTK_IS_COMBO_BOX_ENTRY
+ #define GTK_IS_COMBO_BOX_ENTRY(x) 0
+#endif
+#ifndef GTK_IS_COMBO_BOX
+ #define GTK_IS_COMBO_BOX(x) 0
+#endif
+
+#define RADIO_SIZE 13
+#define CHECK_SIZE 13
+
+GtkTextDirection
+get_direction (GtkWidget *widget);
+
+GdkPixbuf *
+generate_bit (unsigned char alpha[],
+ GdkColor *color,
+ double mult);
+
+GdkPixbuf *
+colorize_bit (unsigned char *bit,
+ unsigned char *alpha,
+ GdkColor *new_color);
+
+GdkPixmap *
+pixbuf_to_pixmap (GtkStyle *style,
+ GdkPixbuf *pixbuf,
+ GdkScreen *screen);
+
+gboolean
+sanitize_size (GdkWindow *window,
+ gint *width,
+ gint *height);
+
+void
+rgb_to_hls (gdouble *r,
+ gdouble *g,
+ gdouble *b);
+
+void
+hls_to_rgb (gdouble *h,
+ gdouble *l,
+ gdouble *s);
+
+void
+shade (GdkColor * a, GdkColor * b, float k);
+
+void
+draw_hgradient (GdkDrawable *drawable, GdkGC *gc, GtkStyle *style,
+ int x, int y, int width, int height,
+ GdkColor *top_color, GdkColor *bottom_color);
+
+void
+draw_vgradient (GdkDrawable *drawable, GdkGC *gc, GtkStyle *style,
+ int x, int y, int width, int height,
+ GdkColor *left_color, GdkColor *right_color);
+
+void
+arrow_draw_hline (GdkWindow *window,
+ GdkGC *gc,
+ int x1,
+ int x2,
+ int y,
+ gboolean last);
+
+void
+arrow_draw_vline (GdkWindow *window,
+ GdkGC *gc,
+ int y1,
+ int y2,
+ int x,
+ gboolean last);
+
+void
+draw_arrow (GdkWindow *window,
+ GdkGC *gc,
+ GdkRectangle *area,
+ GtkArrowType arrow_type,
+ gint x,
+ gint y,
+ gint width,
+ gint height);
+
+void
+calculate_arrow_geometry (GtkArrowType arrow_type,
+ gint *x,
+ gint *y,
+ gint *width,
+ gint *height);
+
+GtkWidget *special_get_ancestor(GtkWidget * widget,
+ GType widget_type);
+
+void blend (GdkColormap *colormap,
+ GdkColor *a, GdkColor *b, GdkColor *c, int alpha);
+
+GtkWidget *get_parent_window (GtkWidget *widget);
+
+GdkColor *get_parent_bgcolor (GtkWidget *widget);
+
+gboolean is_combo_box (GtkWidget * widget);
+
+GtkWidget *find_combo_box_widget (GtkWidget * widget);
+
+void gtk_clist_get_header_index (GtkCList *clist, GtkWidget *button,
+ gint *column_index, gint *columns);
diff --git a/libs/clearlooks/widget-information.c b/libs/clearlooks-newer/widget-information.c
index 8972d7a009..cbeb00e291 100644
--- a/libs/clearlooks/widget-information.c
+++ b/libs/clearlooks-newer/widget-information.c
@@ -2,169 +2,9 @@
#include "general-support.h"
#include "widget-information.h"
-#include "config.h"
#include <math.h>
#include <string.h>
-static gchar ge_widget_hints[] =
- "treeview\0"
- "treeview-header\0"
- "statusbar\0"
- "comboboxentry\0"
- "spinbutton\0"
- "scale\0"
- "vscale\0"
- "hscale\0"
- "scrollbar\0"
- "vscrollbar\0"
- "hscrollbar\0"
- "progressbar\0"
- "menubar\0";
-
-gboolean
-ge_check_hint (GEHint hint,
- GQuark style_hint,
- GtkWidget *widget)
-{
- static GEHint quark_hint_lookup[GE_HINT_COUNT] = {0};
-
- g_assert ((hint >= 0) && (hint < GE_HINT_COUNT));
-
- /* Initilize lookup table */
- if (G_UNLIKELY (quark_hint_lookup[0] == 0))
- {
- guint i = 0;
- gchar *cur_hint_str = ge_widget_hints;
- while ((i < GE_HINT_COUNT) && cur_hint_str[0])
- {
- /* Can't use _from_static_string as the engine may be unloaded. */
- quark_hint_lookup[i] = g_quark_from_string (cur_hint_str);
- cur_hint_str += strlen(cur_hint_str) + 1;
- i++;
- }
- g_assert (i == GE_HINT_COUNT && cur_hint_str[0] == '\0');
- }
-
-
- if (quark_hint_lookup[hint] == style_hint)
- return TRUE;
-
-
- /* Try to decide based on other hints, eg. hscale is also a scale. */
- if (hint == GE_HINT_SCALE)
- if (ge_check_hint (GE_HINT_VSCALE, style_hint, widget) ||
- ge_check_hint (GE_HINT_HSCALE, style_hint, widget))
- return TRUE;
- if (hint == GE_HINT_SCROLLBAR)
- if (ge_check_hint (GE_HINT_VSCROLLBAR, style_hint, widget) ||
- ge_check_hint (GE_HINT_HSCROLLBAR, style_hint, widget))
- return TRUE;
- if (hint == GE_HINT_TREEVIEW)
- if (ge_check_hint (GE_HINT_TREEVIEW_HEADER, style_hint, widget))
- return TRUE;
-
-
- /* These may be caused by applications so we never want to disable them.
- * TODO: This does not catch the case where the theme uses appears-as-list
- * and the application turns it off again. Though this case
- * is even less likely. */
- switch (hint) {
- case GE_HINT_COMBOBOX_ENTRY:
- if (widget && ge_object_is_a (G_OBJECT (widget), "GtkComboBox"))
- {
- gboolean appears_as_list = FALSE;
-
- gtk_widget_style_get (widget, "appears-as-list", &appears_as_list, NULL);
-
- if (appears_as_list)
- return TRUE;
- }
- break;
- default:
- break;
- }
-
-
-#ifdef ENABLE_WIDGET_CHECKS
- /* If a style_hint *was* set, and nothing matched, just give up right away.
- * A theme shall either support it fully, or not at all. */
- if (style_hint != 0)
- return FALSE;
-
- /* No widget? Just give up. Nothing we can do. */
- if (widget == NULL)
- return FALSE;
-
- /* Try to do something based on the passed in widget pointer. */
- switch (hint) {
- case GE_HINT_TREEVIEW:
- if (widget->parent && (ge_object_is_a (G_OBJECT (widget->parent), "GtkTreeView")))
- return TRUE;
- break;
- case GE_HINT_TREEVIEW_HEADER:
- if (ge_object_is_a (G_OBJECT (widget), "GtkButton") && widget->parent &&
- (ge_object_is_a (G_OBJECT (widget->parent), "GtkTreeView") || ge_object_is_a (G_OBJECT (widget->parent), "GtkCList") ||
- ge_object_is_a (G_OBJECT (widget->parent), "GtkCTree")))
- return TRUE;
- if (widget->parent && ge_object_is_a (G_OBJECT (widget->parent), "ETreeView"))
- return TRUE;
- break;
- case GE_HINT_COMBOBOX_ENTRY:
- if (ge_is_in_combo_box (widget))
- return TRUE;
- break;
- case GE_HINT_SPINBUTTON:
- if (ge_object_is_a (G_OBJECT (widget), "GtkSpinButton"))
- return TRUE;
- break;
- case GE_HINT_STATUSBAR:
- if (widget->parent && ge_object_is_a (G_OBJECT (widget), "GtkStatusbar"))
- return TRUE;
- break;
- case GE_HINT_SCALE:
- if (ge_object_is_a (G_OBJECT (widget), "GtkScale"))
- return TRUE;
- break;
- case GE_HINT_HSCALE:
- if (ge_object_is_a (G_OBJECT (widget), "GtkHScale"))
- return TRUE;
- break;
- case GE_HINT_VSCALE:
- if (ge_object_is_a (G_OBJECT (widget), "GtkVScale"))
- return TRUE;
- break;
- case GE_HINT_SCROLLBAR:
- if (ge_object_is_a (G_OBJECT (widget), "GtkScrollbar"))
- return TRUE;
- break;
- case GE_HINT_HSCROLLBAR:
- if (ge_object_is_a (G_OBJECT (widget), "GtkHScrollbar"))
- return TRUE;
- break;
- case GE_HINT_VSCROLLBAR:
- if (ge_object_is_a (G_OBJECT (widget), "GtkVScrollbar"))
- return TRUE;
- break;
- case GE_HINT_PROGRESSBAR:
- if (ge_object_is_a (G_OBJECT (widget), "GtkProgressBar"))
- return TRUE;
- break;
- case GE_HINT_MENUBAR:
- if (ge_object_is_a (G_OBJECT (widget), "GtkMenuBar") ||
- ge_object_is_a (G_OBJECT (widget->parent), "GtkMenuBar"))
- return TRUE;
- break;
-
- default:
- break;
- }
-
-#endif
-
-
- return FALSE;
-}
-
/* Widget Type Lookups/Macros
Based on/modified from functions in
@@ -200,14 +40,21 @@ ge_is_combo_box_entry (GtkWidget * widget)
}
return result;
}
-
+
static gboolean
ge_combo_box_is_using_list (GtkWidget * widget)
{
gboolean result = FALSE;
if (GE_IS_COMBO_BOX (widget))
- gtk_widget_style_get (widget, "appears-as-list", &result, NULL);
+ {
+ gboolean *tmp = NULL;
+
+ gtk_widget_style_get (widget, "appears-as-list", &result, NULL);
+
+ if (tmp)
+ result = *tmp;
+ }
return result;
}
@@ -395,8 +242,8 @@ ge_find_combo_box_widget_parent (GtkWidget * widget)
***********************************************/
void
ge_option_menu_get_props (GtkWidget * widget,
- GtkRequisition * indicator_size,
- GtkBorder * indicator_spacing)
+ GtkRequisition * indicator_size,
+ GtkBorder * indicator_spacing)
{
GtkRequisition default_size = { 9, 5 };
GtkBorder default_spacing = { 7, 5, 2, 2 };
@@ -446,6 +293,7 @@ ge_button_get_default_border (GtkWidget *widget,
}
}
+
gboolean
ge_widget_is_ltr (GtkWidget *widget)
{
@@ -462,26 +310,3 @@ ge_widget_is_ltr (GtkWidget *widget)
else
return TRUE;
}
-
-guint
-ge_rc_parse_hint (GScanner *scanner,
- GQuark *quark)
-{
- guint token;
-
- /* Skip 'hint' */
- token = g_scanner_get_next_token(scanner);
-
- token = g_scanner_get_next_token(scanner);
- if (token != G_TOKEN_EQUAL_SIGN)
- return G_TOKEN_EQUAL_SIGN;
-
- token = g_scanner_get_next_token(scanner);
- if (token != G_TOKEN_STRING)
- return G_TOKEN_STRING;
-
- *quark = g_quark_from_string (scanner->value.v_string);
-
- return G_TOKEN_NONE;
-}
-
diff --git a/libs/clearlooks/widget-information.h b/libs/clearlooks-newer/widget-information.h
index 7b9b2ab334..55da859d78 100644
--- a/libs/clearlooks/widget-information.h
+++ b/libs/clearlooks-newer/widget-information.h
@@ -1,45 +1,18 @@
-#ifndef WIDGET_INFORMATION_H
-#define WIDGET_INFORMATION_H
-
-#include "general-support.h"
-#include <glib.h>
-#include <gtk/gtkwidget.h>
-
-typedef enum {
- GE_HINT_TREEVIEW,
- GE_HINT_TREEVIEW_HEADER,
- GE_HINT_STATUSBAR,
- GE_HINT_COMBOBOX_ENTRY,
- GE_HINT_SPINBUTTON,
- GE_HINT_SCALE,
- GE_HINT_VSCALE,
- GE_HINT_HSCALE,
- GE_HINT_SCROLLBAR,
- GE_HINT_VSCROLLBAR,
- GE_HINT_HSCROLLBAR,
- GE_HINT_PROGRESSBAR,
- GE_HINT_MENUBAR,
- GE_HINT_COUNT
-} GEHint;
-
-/* ALL OF THE FOLLOWING SHOULD DIE ...
- * instead the hint system will be used, and a huge switch ;-) */
-
/* Object Type Lookups/Macros
Based on/modified from functions in
Smooth-Engine.
*/
-#define GE_IS_WIDGET(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkWidget"))
-#define GE_IS_CONTAINER(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkContainer"))
-#define GE_IS_BIN(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkBin"))
+#define GE_IS_WIDGET(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkWidget"))
+#define GE_IS_CONTAINER(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkContainer"))
+#define GE_IS_BIN(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkBin"))
-#define GE_IS_ARROW(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkArrow"))
+#define GE_IS_ARROW(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkArrow"))
-#define GE_IS_SEPARATOR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkSeparator"))
-#define GE_IS_VSEPARATOR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVSeparator"))
-#define GE_IS_HSEPARATOR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHSeparator"))
+#define GE_IS_SEPARATOR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkSeparator"))
+#define GE_IS_VSEPARATOR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkVSeparator"))
+#define GE_IS_HSEPARATOR(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHSeparator"))
#define GE_IS_HANDLE_BOX(object) ((object) && ge_object_is_a ((GObject*)(object), "GtkHandleBox"))
#define GE_IS_HANDLE_BOX_ITEM(object) ((object) && GE_IS_HANDLE_BOX(object->parent))
@@ -100,9 +73,6 @@ typedef enum {
#define GE_WIDGET_HAS_DEFAULT(object) ((object) && GE_IS_WIDGET(object) && GTK_WIDGET_HAS_DEFAULT(object))
-
-GE_INTERNAL gboolean ge_check_hint (GEHint hint, GQuark style_hint, GtkWidget *widget);
-
GE_INTERNAL gboolean ge_object_is_a (const GObject * object, const gchar * type_name);
GE_INTERNAL gboolean ge_is_combo_box_entry (GtkWidget * widget);
@@ -127,6 +97,3 @@ GE_INTERNAL void ge_button_get_default_border (GtkWidget *widget,
GE_INTERNAL gboolean ge_widget_is_ltr (GtkWidget *widget);
-GE_INTERNAL guint ge_rc_parse_hint (GScanner *scanner, GQuark *quark);
-
-#endif /* WIDGET_INFORMATION_H */
diff --git a/libs/clearlooks-older/SConscript b/libs/clearlooks-older/SConscript
new file mode 100644
index 0000000000..4feff6db90
--- /dev/null
+++ b/libs/clearlooks-older/SConscript
@@ -0,0 +1,36 @@
+# -*- python -*-
+
+import os.path
+import glob
+
+libclearlooks_files = [
+ 'clearlooks_draw.c',
+ 'clearlooks_rc_style.c',
+ 'clearlooks_style.c',
+ 'clearlooks_theme_main.c',
+ 'support.c' ]
+
+Import ('env install_prefix')
+
+clearlooks = env.Clone()
+
+clearlooks.Replace(CCFLAGS = ' `pkg-config --cflags gtk+-2.0` ',
+ LINKFLAGS = ' `pkg-config --libs gtk+-2.0` ')
+
+if env['GTKOSX']:
+ clearlooks.Append (CCFLAGS = '-DGTKOSX')
+
+libclearlooks = clearlooks.SharedLibrary('clearlooks', libclearlooks_files)
+
+usable_libclearlooks = clearlooks.Install ('engines', libclearlooks)
+Default (usable_libclearlooks)
+
+env.Alias('install',
+ env.Install(os.path.join(install_prefix,env['LIBDIR'], 'ardour2', 'engines'),
+ libclearlooks))
+
+env.Alias('tarball', env.Distribute (env['DISTTREE'],
+ [ 'SConscript', 'bits.c'] +
+ libclearlooks_files +
+ glob.glob('*.h')
+ ))
diff --git a/libs/clearlooks-older/bits.c b/libs/clearlooks-older/bits.c
new file mode 100644
index 0000000000..1e871bc5d3
--- /dev/null
+++ b/libs/clearlooks-older/bits.c
@@ -0,0 +1,121 @@
+static unsigned char dot_intensity[] = {
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x98,0xb9,0xc6,0xb9,0x91,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0xb9,0xbd,0xac,0x9e,0x65,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0xc6,0xac,0x9e,0x96,0x5c,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0xb9,0x9e,0x96,0x62,0x55,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x91,0x65,0x5c,0x55,0x68,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,
+};
+static unsigned char dot_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x66,0xc4,0xff,0xc4,0x66,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x66,0xdf,0xff,0xff,0xff,0xdf,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0xc4,0xff,0xff,0xff,0xff,0xff,0xc4,0x00,0x00,0x00,
+0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0xc4,0xff,0xff,0xff,0xff,0xff,0xc4,0x00,0x00,0x00,
+0x00,0x00,0x00,0x66,0xdf,0xff,0xff,0xff,0xdf,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x66,0xc4,0xff,0xc4,0x66,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+
+static unsigned char circle_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x23,0x62,0x92,0xb3,0xb2,0x95,0x2b,0x00,0x00,0x00,
+0x00,0x00,0x3e,0xab,0xc9,0xeb,0xf9,0xf5,0xfd,0xff,0x57,0x00,0x00,
+0x00,0x1f,0xb5,0xd8,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x00,
+0x00,0x67,0xb9,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9c,0x00,
+0x00,0x9a,0xe2,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0x00,
+0x00,0xba,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xc0,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0x00,
+0x00,0x9b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9c,0x00,
+0x00,0x2b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0x00,
+0x00,0x00,0x57,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x00,0x00,
+0x00,0x00,0x00,0x2b,0x9c,0xe5,0xff,0xe5,0x9c,0x2b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+static unsigned char outline_alpha[] = {
+0x00,0x00,0x00,0x4a,0xac,0xe9,0xff,0xe9,0xac,0x4a,0x00,0x00,0x00,
+0x00,0x00,0x98,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x98,0x00,0x00,
+0x00,0x98,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x98,0x00,
+0x4a,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,
+0xac,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xac,
+0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe9,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe9,
+0xac,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xac,
+0x4a,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,
+0x00,0x98,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x98,0x00,
+0x00,0x00,0x98,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x98,0x00,0x00,
+0x00,0x00,0x00,0x4a,0xac,0xe9,0xff,0xe9,0xac,0x4a,0x00,0x00,0x00,
+};
+static unsigned char inconsistent_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+static unsigned char check_base_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0xea,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+static unsigned char check_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 11, 137, 151,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00, 9, 183, 172, 7,0x00,0x00,
+0x00,0x00, 12, 18,0x00,0x00, 3, 161, 233, 27,0x00,0x00,0x00,
+0x00,0x00, 199, 239, 101,0x00, 85, 253, 108,0x00,0x00,0x00,0x00,
+0x00,0x00, 83, 245, 250, 75, 206, 230, 8,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00, 104, 252, 243, 253, 124,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00, 2, 162, 255, 241, 28,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00, 18, 228, 163,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00, 78, 62,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+static unsigned char check_inconsistent_alpha[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
+0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
+0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
diff --git a/libs/clearlooks-older/clearlooks_draw.c b/libs/clearlooks-older/clearlooks_draw.c
new file mode 100644
index 0000000000..144be35152
--- /dev/null
+++ b/libs/clearlooks-older/clearlooks_draw.c
@@ -0,0 +1,1293 @@
+#include "clearlooks_draw.h"
+#include "clearlooks_style.h"
+
+#include "support.h"
+
+/** WANTED:
+ FASTER GRADIENT FILL FUNCTION, POSSIBLY USING XRENDER. **/
+
+static void cl_draw_borders (GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x, int y, int width, int height, CLRectangle *r);
+
+static void cl_draw_line (GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x1, int y1, int x2, int y2, CLBorderType border,
+ CLRectangle *r);
+
+static void cl_draw_corner (GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x, int y, int width, int height,
+ CLRectangle *r, CLCornerSide corner);
+
+static void cl_draw_fill (GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x, int y, int width, int height, CLRectangle *r);
+
+void cl_draw_rectangle (GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x, int y, int width, int height, CLRectangle *r)
+{
+ if (r->fillgc)
+ {
+ cl_draw_fill(window, widget, style, x, y, width, height, r);
+ }
+
+ if (r->bordergc)
+ {
+ cl_draw_borders(window, widget, style, x, y, width, height, r);
+ }
+}
+
+
+static void cl_get_coords ( CLBorderType border,
+ int x, int y, int width, int height,
+ CLRectangle *r, int *x1, int *y1, int *x2, int *y2)
+{
+ switch (border)
+ {
+ case CL_BORDER_TOP:
+ *x1 = x + r->corners[CL_CORNER_TOPLEFT];
+ *x2 = *x1 + width - r->corners[CL_CORNER_TOPLEFT] - r->corners[CL_CORNER_TOPRIGHT] - 1;
+ *y1 = *y2 = y;
+ break;
+ case CL_BORDER_BOTTOM:
+ *x1 = x + r->corners[CL_CORNER_BOTTOMLEFT];
+ *x2 = *x1 + width - r->corners[CL_CORNER_BOTTOMLEFT] - r->corners[CL_CORNER_BOTTOMRIGHT] - 1;
+ *y1 = *y2 = y + height - 1;
+ break;
+ case CL_BORDER_LEFT:
+ *x1 = *x2 = x;
+ *y1 = y + r->corners[CL_CORNER_TOPLEFT];
+ *y2 = *y1 + height - r->corners[CL_CORNER_TOPLEFT] - r->corners[CL_CORNER_BOTTOMLEFT] - 1;
+ break;
+ case CL_BORDER_RIGHT:
+ *x1 = *x2 = x + width - 1;
+ *y1 = y + r->corners[CL_CORNER_TOPRIGHT];
+ *y2 = *y1 + height - r->corners[CL_CORNER_TOPRIGHT] - r->corners[CL_CORNER_BOTTOMRIGHT] - 1;
+ break;
+ }
+}
+
+void cl_draw_borders (GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x, int y, int width, int height, CLRectangle *r)
+{
+ int x1, y1, x2, y2, i;
+
+ if (r->bordergc == NULL)
+ return;
+
+ for ( i=0; i<4; i++) /* draw all four borders + corners */
+ {
+ cl_get_coords (i, x, y, width, height, r, &x1, &y1, &x2, &y2);
+ cl_draw_line (window, widget, style, x1, y1, x2, y2, i, r);
+ cl_draw_corner (window, widget, style, x, y, width, height, r, i );
+ }
+}
+
+
+static GdkColor cl_gc_get_foreground(GdkGC *gc)
+{
+ GdkGCValues values;
+ gdk_gc_get_values (gc, &values);
+ return values.foreground;
+}
+
+static void cl_draw_line (GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x1, int y1, int x2, int y2, CLBorderType border,
+ CLRectangle *r)
+{
+ if (r->gradient_type == CL_GRADIENT_NONE ||
+ r->border_gradient.from == NULL || r->border_gradient.to == NULL )
+ {
+ gdk_draw_line (window, r->bordergc, x1, y1, x2, y2);
+ }
+ else if (r->gradient_type == CL_GRADIENT_HORIZONTAL && (border == CL_BORDER_TOP || border == CL_BORDER_BOTTOM))
+ {
+ draw_vgradient (window, r->bordergc, style,
+ x1, y1, x2-x1+1, 1,
+ r->border_gradient.from, r->border_gradient.to);
+ }
+ else if (r->gradient_type == CL_GRADIENT_VERTICAL && (border == CL_BORDER_LEFT || border == CL_BORDER_RIGHT))
+ {
+ draw_hgradient (window, r->bordergc, style,
+ x1, y1, 1, y2-y1+1,
+ r->border_gradient.from, r->border_gradient.to);
+ }
+ else
+ {
+ GdkColor tmp_color = cl_gc_get_foreground (r->bordergc);
+
+ if (r->gradient_type == CL_GRADIENT_HORIZONTAL && border == CL_BORDER_LEFT ||
+ r->gradient_type == CL_GRADIENT_VERTICAL && border == CL_BORDER_TOP)
+ gdk_gc_set_foreground (r->bordergc, r->border_gradient.from);
+ else
+ gdk_gc_set_foreground (r->bordergc, r->border_gradient.to);
+
+ gdk_draw_line (window, r->bordergc, x1, y1, x2, y2);
+
+ gdk_gc_set_foreground (r->bordergc, &tmp_color);
+ }
+}
+
+static GdkColor *cl_get_gradient_corner_color (CLRectangle *r, CLCornerSide corner)
+{
+ GdkColor *color;
+
+ if (r->border_gradient.from == NULL || r->border_gradient.to == NULL)
+ {
+ color = NULL;
+ }
+ else if ((r->gradient_type == CL_GRADIENT_HORIZONTAL && (corner == CL_CORNER_TOPLEFT || corner == CL_CORNER_BOTTOMLEFT)) ||
+ (r->gradient_type == CL_GRADIENT_VERTICAL && (corner == CL_CORNER_TOPLEFT || corner == CL_CORNER_TOPRIGHT)))
+ {
+ color = r->border_gradient.from;
+ }
+ else /* no gradient or other corner */
+ {
+ color = r->border_gradient.to;
+ }
+
+ return color;
+}
+
+static void cl_draw_corner (GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x, int y, int width, int height,
+ CLRectangle *r, CLCornerSide corner)
+{
+ GdkColor *color;
+ GdkColor aacolor; /* anti-aliasing color */
+ GdkGCValues values;
+ GdkColor tmp;
+ GdkColor *bgcolor;
+
+ int x1;
+ int y1;
+
+ if (r->corners[corner] == CL_CORNER_NONE)
+ return;
+
+ color = cl_get_gradient_corner_color (r, corner);
+ gdk_gc_get_values (r->bordergc, &values);
+
+ if (color == NULL)
+ {
+ tmp = values.foreground;
+ gdk_colormap_query_color (gtk_widget_get_colormap(widget), values.foreground.pixel, &tmp);
+ color = &tmp;
+ }
+
+ bgcolor = get_parent_bgcolor(widget);
+
+ if (bgcolor == NULL)
+ {
+ bgcolor = color;
+ }
+
+ blend (style->colormap, bgcolor, color, &aacolor, 70);
+
+ if (r->corners[corner] == CL_CORNER_ROUND)
+ {
+ x1 = (corner == CL_CORNER_TOPLEFT ||
+ corner == CL_CORNER_BOTTOMLEFT) ? x+1 : x+width - 2;
+
+ y1 = (corner == CL_CORNER_TOPLEFT ||
+ corner == CL_CORNER_TOPRIGHT) ? y+1 : y+height - 2;
+
+ gdk_gc_set_foreground (r->bordergc, color);
+ gdk_draw_point (window, r->bordergc, x1, y1);
+
+ gdk_gc_set_foreground (r->bordergc, &aacolor);
+
+ x1 = (corner == CL_CORNER_TOPLEFT ||
+ corner == CL_CORNER_BOTTOMLEFT) ? x+1 : x+width-2;
+
+ y1 = (corner == CL_CORNER_TOPLEFT ||
+ corner == CL_CORNER_TOPRIGHT) ? y : y+height-1;
+
+ gdk_draw_point (window, r->bordergc, x1, y1);
+
+ x1 = (corner == CL_CORNER_TOPLEFT ||
+ corner == CL_CORNER_BOTTOMLEFT) ? x : x+width-1;
+
+ y1 = (corner == CL_CORNER_TOPLEFT ||
+ corner == CL_CORNER_TOPRIGHT) ? y+1 : y+height-2;
+
+ gdk_draw_point (window, r->bordergc, x1, y1);
+
+ }
+ else if (r->corners[corner] == CL_CORNER_NARROW)
+ {
+ x1 = (corner == CL_CORNER_TOPLEFT ||
+ corner == CL_CORNER_BOTTOMLEFT) ? x : x+width-1;
+
+ y1 = (corner == CL_CORNER_TOPLEFT ||
+ corner == CL_CORNER_TOPRIGHT) ? y : y+height-1;
+
+ gdk_gc_set_foreground (r->bordergc, &aacolor);
+ gdk_draw_point (window, r->bordergc, x1, y1);
+ }
+
+ gdk_gc_set_foreground (r->bordergc, &values.foreground);
+}
+
+static void cl_draw_fill (GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x, int y, int width, int height, CLRectangle *r)
+{
+ if (r->gradient_type == CL_GRADIENT_NONE ||
+ r->fill_gradient.from == NULL || r->fill_gradient.to == NULL)
+ {
+ gdk_draw_rectangle (window, r->fillgc, TRUE,
+ x+1, y+1, width-2, height-2);
+ }
+ else if (r->gradient_type == CL_GRADIENT_HORIZONTAL)
+ {
+ draw_vgradient (window, r->fillgc, gtk_widget_get_style(widget),
+ x+1, y+1, width-2, height-2,
+ r->fill_gradient.from, r->fill_gradient.to);
+ }
+ else if (r->gradient_type == CL_GRADIENT_VERTICAL)
+ {
+ draw_hgradient (window, r->fillgc, gtk_widget_get_style(widget),
+ x+1, y+1, width-2, height-2,
+ r->fill_gradient.from, r->fill_gradient.to);
+ }
+}
+
+void cl_rectangle_set_button(CLRectangle *r, GtkStyle *style,
+ GtkStateType state_type, gboolean has_default,
+ gboolean has_focus,
+ CLBorderType tl, CLBorderType tr,
+ CLBorderType bl, CLBorderType br)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ int my_state_type = (state_type == GTK_STATE_ACTIVE) ? 2 : 0;
+ GdkGC *border_gc = clearlooks_style->border_gc[CL_BORDER_UPPER+my_state_type];
+
+
+ cl_rectangle_init (r, style->bg_gc[state_type],
+ clearlooks_style->border_gc[CL_BORDER_UPPER+my_state_type],
+ tl, tr, bl, br);
+
+ if (state_type != GTK_STATE_INSENSITIVE && !has_default)
+ {
+ cl_rectangle_set_gradient (&r->border_gradient,
+ &clearlooks_style->border[CL_BORDER_UPPER+my_state_type],
+ &clearlooks_style->border[CL_BORDER_LOWER+my_state_type]);
+ }
+ else if (has_default)
+ r->bordergc = style->black_gc;
+ else
+ r->bordergc = clearlooks_style->shade_gc[4];
+
+ r->gradient_type = CL_GRADIENT_VERTICAL;
+
+ r->topleft = (state_type != GTK_STATE_ACTIVE) ? style->light_gc[state_type] : clearlooks_style->shade_gc[4];
+ r->bottomright = (state_type != GTK_STATE_ACTIVE) ? clearlooks_style->shade_gc[1] : NULL;
+
+ shade (&style->bg[state_type], &r->tmp_color, 0.93);
+
+
+ cl_rectangle_set_gradient (&r->fill_gradient,
+ &style->bg[state_type],
+ &r->tmp_color);
+}
+
+void cl_rectangle_set_entry (CLRectangle *r, GtkStyle *style,
+ GtkStateType state_type,
+ CLBorderType tl, CLBorderType tr,
+ CLBorderType bl, CLBorderType br,
+ gboolean has_focus)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ GdkGC *bordergc;
+
+ if (has_focus)
+ bordergc = clearlooks_style->spot3_gc;
+ else if (state_type != GTK_STATE_INSENSITIVE)
+ bordergc = clearlooks_style->border_gc[CL_BORDER_LOWER];
+ else
+ bordergc = clearlooks_style->shade_gc[3];
+
+ cl_rectangle_init (r, style->base_gc[state_type], bordergc,
+ tl, tr, bl, br);
+
+ if (state_type != GTK_STATE_INSENSITIVE )
+ r->topleft = (has_focus) ? clearlooks_style->spot1_gc
+ : style->bg_gc[GTK_STATE_NORMAL];
+
+ if (has_focus)
+ r->bottomright = clearlooks_style->spot1_gc;
+ else if (state_type == GTK_STATE_INSENSITIVE)
+ r->bottomright = style->base_gc[state_type];
+}
+
+void cl_draw_shadow(GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x, int y, int width, int height, CLRectangle *r)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ int x1, y1, x2, y2;
+
+ if (r->bottomright != NULL)
+ {
+ x1 = x+1+(r->corners[CL_CORNER_BOTTOMLEFT]/2);
+ y1 = y2 = y+height-2;
+ x2 = x+width - 1 - (1+r->corners[CL_CORNER_BOTTOMRIGHT]/2);
+
+ gdk_draw_line (window, r->bottomright, x1, y1, x2, y2);
+
+ x1 = x2 = x+width-2;
+ y1 = y+1+(r->corners[CL_CORNER_TOPRIGHT]/2);
+ y2 = y+height - 1 - (1+r->corners[CL_CORNER_BOTTOMRIGHT]/2);
+
+ gdk_draw_line (window, r->bottomright, x1, y1, x2, y2);
+ }
+
+ if (r->topleft != NULL)
+ {
+ x1 = x+1+(r->corners[CL_CORNER_TOPLEFT]/2);
+ y1 = y2 = y+1;
+ x2 = x+width-1-(1+r->corners[CL_CORNER_TOPRIGHT]/2);
+
+ gdk_draw_line (window, r->topleft, x1, y1, x2, y2);
+
+ x1 = x2 = x+1;
+ y1 = y+1+(r->corners[CL_CORNER_TOPLEFT]/2);
+ y2 = y+height-1-(1+r->corners[CL_CORNER_BOTTOMLEFT]/2);
+
+ gdk_draw_line (window, r->topleft, x1, y1, x2, y2);
+ }
+}
+
+void cl_rectangle_set_color (CLGradient *g, GdkColor *color)
+{
+ g->from = color;
+ g->to = color;
+}
+
+void cl_rectangle_set_gradient (CLGradient *g, GdkColor *from, GdkColor *to)
+{
+ g->from = from;
+ g->to = to;
+}
+
+void cl_rectangle_init (CLRectangle *r,
+ GdkGC *fillgc, GdkGC *bordergc,
+ int tl, int tr, int bl, int br)
+{
+ r->gradient_type = CL_GRADIENT_NONE;
+
+ r->border_gradient.from = r->border_gradient.to = NULL;
+ r->fill_gradient.from = r->fill_gradient.to = NULL;
+
+ r->fillgc = fillgc;
+ r->bordergc = bordergc;
+
+ r->topleft = NULL;
+ r->bottomright = NULL;
+
+ r->corners[CL_CORNER_TOPLEFT] = tl;
+ r->corners[CL_CORNER_TOPRIGHT] = tr;
+ r->corners[CL_CORNER_BOTTOMLEFT] = bl;
+ r->corners[CL_CORNER_BOTTOMRIGHT] = br;
+}
+
+void cl_rectangle_set_corners (CLRectangle *r, int tl, int tr, int bl, int br)
+{
+ r->corners[CL_CORNER_TOPLEFT] = tl;
+ r->corners[CL_CORNER_TOPRIGHT] = tr;
+ r->corners[CL_CORNER_BOTTOMLEFT] = bl;
+ r->corners[CL_CORNER_BOTTOMRIGHT] = br;
+}
+
+void cl_set_corner_sharpness (const gchar *detail, GtkWidget *widget, CLRectangle *r)
+{
+ if (widget->parent && GTK_IS_COMBO_BOX_ENTRY (widget->parent) || GTK_IS_COMBO (widget->parent))
+ {
+ gboolean rtl = get_direction (widget->parent) == GTK_TEXT_DIR_RTL;
+ int cl = rtl ? CL_CORNER_ROUND : CL_CORNER_NONE;
+ int cr = rtl ? CL_CORNER_NONE : CL_CORNER_ROUND;
+
+ cl_rectangle_set_corners (r, cl, cr, cl, cr);
+ }
+ else if (detail && !strcmp (detail, "spinbutton_up"))
+ {
+ gboolean rtl = get_direction (widget->parent) == GTK_TEXT_DIR_RTL;
+ int tl = rtl ? CL_CORNER_ROUND : CL_CORNER_NONE;
+ int tr = rtl ? CL_CORNER_NONE : CL_CORNER_ROUND;
+
+ cl_rectangle_set_corners (r, tl, tr,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+ }
+ else if (detail && !strcmp (detail, "spinbutton_down"))
+ {
+ gboolean rtl = get_direction (widget->parent) == GTK_TEXT_DIR_RTL;
+ int bl = rtl ? CL_CORNER_ROUND : CL_CORNER_NONE;
+ int br = rtl ? CL_CORNER_NONE : CL_CORNER_ROUND;
+
+ cl_rectangle_set_corners (r, CL_CORNER_NONE, CL_CORNER_NONE,
+ bl, br);
+ }
+ else
+ {
+ cl_rectangle_set_corners (r, CL_CORNER_ROUND, CL_CORNER_ROUND,
+ CL_CORNER_ROUND, CL_CORNER_ROUND);
+ };
+}
+
+void cl_rectangle_set_clip_rectangle (CLRectangle *r, GdkRectangle *area)
+{
+ if (area == NULL)
+ return;
+
+ if (r->fillgc)
+ gdk_gc_set_clip_rectangle (r->fillgc, area);
+
+ if (r->bordergc)
+ gdk_gc_set_clip_rectangle (r->bordergc, area);
+
+ if (r->topleft)
+ gdk_gc_set_clip_rectangle (r->topleft, area);
+
+ if (r->bottomright)
+ gdk_gc_set_clip_rectangle (r->bottomright, area);
+}
+
+void cl_rectangle_reset_clip_rectangle (CLRectangle *r)
+{
+ if (r->fillgc)
+ gdk_gc_set_clip_rectangle (r->fillgc, NULL);
+
+ if (r->bordergc)
+ gdk_gc_set_clip_rectangle (r->bordergc, NULL);
+
+ if (r->topleft)
+ gdk_gc_set_clip_rectangle (r->topleft, NULL);
+
+ if (r->bottomright)
+ gdk_gc_set_clip_rectangle (r->bottomright, NULL);
+}
+
+void cl_rectangle_reset (CLRectangle *r, GtkStyle *style)
+{
+ cl_rectangle_init (r,
+ NULL, NULL,
+ CL_CORNER_ROUND, CL_CORNER_ROUND,
+ CL_CORNER_ROUND, CL_CORNER_ROUND);
+}
+
+static void cl_progressbar_points_transform (GdkPoint *points, int npoints,
+ int offset, gboolean is_horizontal)
+{
+ int i;
+ for ( i=0; i<npoints; i++) {
+ if ( is_horizontal )
+ points[i].x += offset;
+ else
+ points[i].y += offset;
+ }
+}
+
+GdkPixmap* cl_progressbar_tile_new (GdkDrawable *drawable, GtkWidget *widget,
+ GtkStyle *style, gint height, gint offset)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ int width = height;
+ int line = 0;
+ int center = width/2;
+ int xdir = 1;
+ int trans;
+
+ int stripe_width = height/2;
+ int topright = height + stripe_width;
+ int topright_div_2 = topright/2;
+
+ double shift;
+ GdkPoint points[4];
+
+ GtkProgressBarOrientation orientation = gtk_progress_bar_get_orientation (GTK_PROGRESS_BAR (widget));
+ gboolean is_horizontal = (orientation == GTK_PROGRESS_LEFT_TO_RIGHT || orientation == GTK_PROGRESS_RIGHT_TO_LEFT) ? 1 : 0;
+
+ GdkPixmap *tmp = gdk_pixmap_new (widget->window, width, height, -1);
+
+ GdkColor tmp_color;
+ shade (&clearlooks_style->spot2, &tmp_color, 0.90);
+
+ if (is_horizontal)
+ draw_hgradient (tmp, style->black_gc, style, 0, 0, width, height,
+ &clearlooks_style->spot2, &tmp_color );
+ else
+ draw_vgradient (tmp, style->black_gc, style, 0, 0, width, height,
+ &tmp_color, &clearlooks_style->spot2); /* TODO: swap for RTL */
+
+ if (orientation == GTK_PROGRESS_RIGHT_TO_LEFT ||
+ orientation == GTK_PROGRESS_BOTTOM_TO_TOP)
+ {
+ offset = -offset;
+ xdir = -1;
+ }
+
+ if (get_direction (widget) == GTK_TEXT_DIR_RTL)
+ offset = -offset;
+
+ if (is_horizontal)
+ {
+ points[0] = (GdkPoint){xdir*(topright - stripe_width - topright_div_2), 0}; /* topleft */
+ points[1] = (GdkPoint){xdir*(topright - topright_div_2), 0}; /* topright */
+ points[2] = (GdkPoint){xdir*(stripe_width - topright_div_2), height}; /* bottomright */
+ points[3] = (GdkPoint){xdir*(-topright_div_2), height}; /* bottomleft */
+ }
+ else
+ {
+ points[0] = (GdkPoint){height, xdir*(topright - stripe_width - topright_div_2)}; /* topleft */
+ points[1] = (GdkPoint){height, xdir*(topright - topright_div_2)}; /* topright */
+ points[2] = (GdkPoint){0, xdir*(stripe_width - topright_div_2)}; /* bottomright */
+ points[3] = (GdkPoint){0, xdir*(-topright_div_2)}; /* bottomleft */
+ }
+
+
+ shift = (stripe_width*2)/(double)10;
+ cl_progressbar_points_transform (points, 4, (offset*shift), is_horizontal);
+
+ trans = (width/2)-1-(stripe_width*2);
+ cl_progressbar_points_transform (points, 4, trans, is_horizontal);
+ gdk_draw_polygon (tmp, clearlooks_style->spot2_gc, TRUE, points, 4);
+ cl_progressbar_points_transform (points, 4, -trans, is_horizontal);
+
+ trans = width/2-1;
+ cl_progressbar_points_transform (points, 4, trans, is_horizontal);
+ gdk_draw_polygon (tmp, clearlooks_style->spot2_gc, TRUE, points, 4);
+ cl_progressbar_points_transform (points, 4, -trans, is_horizontal);
+
+ trans = (width/2)-1+(stripe_width*2);
+ cl_progressbar_points_transform (points, 4, trans, is_horizontal);
+ gdk_draw_polygon (tmp, clearlooks_style->spot2_gc, TRUE, points, 4);
+
+ return tmp;
+}
+
+/* could be improved, I think. */
+void cl_progressbar_fill (GdkDrawable *drawable, GtkWidget *widget,
+ GtkStyle *style, GdkGC *gc,
+ gint x, gint y,
+ gint width, gint height,
+ guint8 offset, GdkRectangle *area)
+{
+ GtkProgressBarOrientation orientation = gtk_progress_bar_get_orientation (GTK_PROGRESS_BAR (widget));
+ gint size = (orientation == GTK_PROGRESS_LEFT_TO_RIGHT || orientation == GTK_PROGRESS_RIGHT_TO_LEFT) ? height : width;
+ GdkPixmap *tile = cl_progressbar_tile_new (widget->window, widget, style, size, offset);
+
+ gint nx = x,
+ ny = y,
+ nwidth = height,
+ nheight = width;
+
+ gdk_gc_set_clip_rectangle (gc, area);
+
+ switch (orientation)
+ {
+ case GTK_PROGRESS_LEFT_TO_RIGHT:
+ {
+ while (nx <= x + width )
+ {
+ if (nx + nwidth > x+width ) nwidth = (x+width) - nx;
+ gdk_draw_drawable (drawable, gc, tile, 0, 0, nx, y, nwidth, height);
+ if (height <= 1)
+ nx += 1;
+ else
+ nx += (height-1 + !(height % 2));
+ }
+ break;
+ }
+ case GTK_PROGRESS_RIGHT_TO_LEFT:
+ {
+ gint src_x = 0, dst_x;
+ nx += width;
+ while (nx >= x )
+ {
+ dst_x = nx - height;
+ if (dst_x < x )
+ {
+ src_x = x - dst_x;
+ dst_x = x;
+ }
+ gdk_draw_drawable (drawable, gc, tile, src_x, 0, dst_x, y, nwidth, height);
+ if (height <= 1)
+ nx -= 1;
+ else
+ nx -= (height-1 + !(height % 2));
+ }
+ break;
+ }
+ case GTK_PROGRESS_TOP_TO_BOTTOM:
+ {
+ while (ny <= y + height )
+ {
+ if (ny + nheight > y+height ) nheight = (y+height) - ny;
+ gdk_draw_drawable (drawable, gc, tile, 0, 0, x, ny, width, nheight);
+ if (width <= 1)
+ ny += 1;
+ else
+ ny += (width-1 + !(width % 2));
+ }
+ break;
+ }
+ case GTK_PROGRESS_BOTTOM_TO_TOP:
+ {
+ gint src_y = 0, dst_y;
+ ny += height;
+ while (ny >= y )
+ {
+ dst_y = ny - width;
+ if (dst_y < y )
+ {
+ src_y = y - dst_y;
+ dst_y = y;
+ }
+ gdk_draw_drawable (drawable, gc, tile, 0, src_y, x, dst_y, width, width);
+ if (width <= 1)
+ ny -= 1;
+ else
+ ny -= (width-1 + !(width % 2));
+ }
+ break;
+ }
+ }
+
+ gdk_gc_set_clip_rectangle (gc, NULL);
+
+ g_object_unref (tile);
+}
+
+GdkColor cl_gc_set_fg_color_shade (GdkGC *gc, GdkColormap *colormap,
+ GdkColor *from, gfloat s)
+{
+ GdkColor tmp_color;
+ GdkGCValues values;
+
+ shade (from, &tmp_color, s);
+ gdk_gc_get_values (gc, &values);
+ gdk_rgb_find_color (colormap, &tmp_color);
+ gdk_gc_set_foreground (gc, &tmp_color);
+
+ return values.foreground;
+}
+
+/* #warning MOVE THIS TO SUPPORT.C/H SO THE DRAW_CORNER FUNCTION CAN USE IT. OR, MAKE DRAW_CORNER USE IT SOME OTHER WAY. */
+
+static void cl_get_window_style_state (GtkWidget *widget, GtkStyle **style, GtkStateType *state_type)
+{
+ GtkStyle *windowstyle = NULL;
+ GtkWidget *tmpwidget = widget;
+ GtkStateType windowstate;
+
+ if (widget && GTK_IS_ENTRY (widget))
+ tmpwidget = tmpwidget->parent;
+
+ while (tmpwidget && GTK_WIDGET_NO_WINDOW (tmpwidget) && !GTK_IS_NOTEBOOK(tmpwidget))
+ {
+ tmpwidget = tmpwidget->parent;
+ }
+
+ *style = tmpwidget->style;
+ *state_type = GTK_WIDGET_STATE(tmpwidget);
+}
+
+static GdkGC *cl_get_window_bg_gc (GtkWidget *widget)
+{
+ GtkStyle *style;
+ GtkStateType state_type;
+
+ cl_get_window_style_state (widget, &style, &state_type);
+
+ return style->bg_gc[state_type];
+}
+
+/******************************************************************************
+ * DRAW THE MIGHTY WIDGETS! *
+ ******************************************************************************/
+
+void cl_draw_inset (GtkStyle *style, GdkWindow *window, GtkWidget *widget,
+ GdkRectangle *area,
+ gint x, gint y, gint width, gint height,
+ int tl, int tr, int bl, int br )
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE(style);
+ ClearlooksStyle *clwindowstyle; /* style of the window this widget is on */
+ GtkStateType windowstate;
+ CLRectangle r;
+
+ cl_rectangle_init (&r, NULL, style->black_gc,
+ tl, tr, bl, br);
+
+ r.gradient_type = CL_GRADIENT_VERTICAL;
+
+ cl_get_window_style_state(widget, (GtkStyle**)&clwindowstyle, &windowstate);
+
+ g_assert (clwindowstyle != NULL);
+
+ if (GTK_WIDGET_HAS_DEFAULT (widget))
+ {
+ r.bordergc = style->mid_gc[GTK_STATE_NORMAL];
+ }
+ else
+ {
+ cl_rectangle_set_gradient (&r.border_gradient,
+ &clwindowstyle->inset_dark[windowstate],
+ &clwindowstyle->inset_light[windowstate]);
+ }
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+}
+
+/* Draw a normal (toggle)button. Not spinbuttons.*/
+void cl_draw_button(GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE(style);
+ int my_state_type = (state_type == GTK_STATE_ACTIVE) ? 2 : 0;
+ GdkGC *bg_gc = NULL;
+ gboolean is_active = FALSE;
+ CLRectangle r;
+
+ /* Get the background color of the window we're on */
+ bg_gc = cl_get_window_bg_gc(widget);
+
+ cl_rectangle_set_button (&r, style, state_type,
+ GTK_WIDGET_HAS_DEFAULT (widget),
+ GTK_WIDGET_HAS_FOCUS (widget),
+ CL_CORNER_ROUND, CL_CORNER_ROUND,
+ CL_CORNER_ROUND, CL_CORNER_ROUND);
+
+ if (state_type == GTK_STATE_ACTIVE)
+ is_active = TRUE;
+
+ if (GTK_IS_TOGGLE_BUTTON(widget) &&
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget)) &&
+ state_type == GTK_STATE_PRELIGHT)
+ {
+ cl_rectangle_set_gradient (&r.fill_gradient, &clearlooks_style->shade[1], &clearlooks_style->shade[1]);
+ r.topleft = clearlooks_style->shade_gc[3];
+ r.bottomright = clearlooks_style->shade_gc[1];
+
+ is_active = TRUE;
+ }
+
+ if (!is_active)
+ r.fillgc = NULL;
+
+ if (!GTK_IS_NOTEBOOK (widget->parent))
+ {
+ gdk_draw_rectangle (window, bg_gc, FALSE, x, y, width-1, height-1);
+
+ /* Draw "sunken" look when border thickness is more than 2 pixels. */
+ if (style->xthickness > 2 && style->ythickness > 2)
+ cl_draw_inset (style, window, widget, area, x, y, width, height,
+ CL_CORNER_ROUND, CL_CORNER_ROUND,
+ CL_CORNER_ROUND, CL_CORNER_ROUND);
+ }
+
+ /* Draw "sunken" look when border thickness is more than 2 pixels.*/
+ if (style->xthickness > 2 && style->ythickness > 2)
+ {
+ x++;
+ y++;
+ height-=2;
+ width-=2;
+ }
+
+ /* Don't draw the normal gradient for normal buttons. */
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+
+
+ if (!is_active)
+ {
+ int tmp_height = (float)height*0.25;
+
+ gdk_gc_set_clip_rectangle (style->bg_gc[state_type], area);
+
+ draw_hgradient (window, style->bg_gc[state_type], style,
+ x+2,y+2,width-4,tmp_height,
+ &clearlooks_style->button_g1[state_type],
+ &clearlooks_style->button_g2[state_type]);
+
+ draw_hgradient (window, style->bg_gc[state_type], style,
+ x+2, y+2+tmp_height, width-4, height-3-tmp_height*2,
+ &clearlooks_style->button_g2[state_type],
+ &clearlooks_style->button_g3[state_type]);
+
+ draw_hgradient (window, style->bg_gc[state_type], style,
+ x+2,y+height-tmp_height-1,width-4,tmp_height,
+ &clearlooks_style->button_g3[state_type],
+ &clearlooks_style->button_g4[state_type]);
+
+ gdk_gc_set_clip_rectangle (style->bg_gc[state_type], NULL);
+ }
+
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+}
+
+/* Draw spinbuttons. */
+void cl_draw_spinbutton(GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height)
+{
+ CLRectangle r;
+ GdkRectangle new_area;
+
+ int tl = CL_CORNER_NONE, tr = CL_CORNER_NONE,
+ bl = CL_CORNER_NONE, br = CL_CORNER_NONE;
+
+ if (area == NULL)
+ {
+ new_area.x = x;
+ new_area.y = y;
+ new_area.width = width;
+ new_area.height = height;
+ area = &new_area;
+ }
+
+ if (!strcmp (detail, "spinbutton")) /* draws the 'back' of the spinbutton */
+ {
+ GdkGC *bg_gc = cl_get_window_bg_gc(widget);
+
+ gdk_gc_set_clip_rectangle (bg_gc, area);
+ gdk_draw_rectangle (window, bg_gc, FALSE, x, y, width-1, height-1);
+ gdk_gc_set_clip_rectangle (bg_gc, NULL);
+
+ if (style->xthickness > 2 && style->ythickness > 2)
+ cl_draw_inset (style, window, widget, area, x, y, width, height,
+ CL_CORNER_NONE, CL_CORNER_ROUND,
+ CL_CORNER_NONE, CL_CORNER_ROUND);
+
+ return;
+ }
+
+ if (!strcmp (detail, "spinbutton_up"))
+ {
+ tr = CL_CORNER_ROUND;
+
+ (style->xthickness > 2 && style->ythickness > 2) ? y++ : height++;
+ }
+
+ if (!strcmp (detail, "spinbutton_down"))
+ {
+ br = CL_CORNER_ROUND;
+
+ if (style->xthickness > 2 && style->ythickness > 2)
+ height--;
+ }
+
+ cl_rectangle_set_button (&r, style, state_type,
+ GTK_WIDGET_HAS_DEFAULT (widget),
+ GTK_WIDGET_HAS_FOCUS (widget),
+ tl, tr,
+ bl, br);
+ width--;
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+}
+
+void cl_draw_combobox_entry (GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height)
+{
+ CLRectangle r;
+
+ gboolean rtl = get_direction (widget->parent) == GTK_TEXT_DIR_RTL;
+ gboolean has_focus = GTK_WIDGET_HAS_FOCUS (widget);
+
+ int cl = rtl ? CL_CORNER_NONE : CL_CORNER_ROUND,
+ cr = rtl ? CL_CORNER_ROUND : CL_CORNER_NONE;
+
+ GdkGC *bg_gc = cl_get_window_bg_gc(widget);
+
+ if (rtl)
+ {
+ if (!has_focus)
+ {
+ x -= 1;
+ width +=1;
+ }
+ }
+ else
+ {
+ width += 2;
+ if (has_focus) width--; /* this gives us a 2px focus line at the right side. */
+ }
+
+ cl_rectangle_set_entry (&r, style, state_type,
+ cl, cr, cl, cr,
+ has_focus);
+
+ gdk_gc_set_clip_rectangle (bg_gc, area);
+ gdk_draw_rectangle (window, bg_gc, FALSE, x, y, width-1, height-1);
+ gdk_gc_set_clip_rectangle (bg_gc, NULL);
+
+ /* Draw "sunken" look when border thickness is more than 2 pixels. */
+ if (style->xthickness > 2 && style->ythickness > 2)
+ {
+ cl_draw_inset (style, window, widget, area, x, y, width, height,
+ cl, cr, cl, cr);
+
+ y++;
+ x++;
+ width-=2;
+ height-=2;
+ }
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+
+ cl_rectangle_reset_clip_rectangle (&r);
+}
+
+void cl_draw_combobox_button (GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE(style);
+ gboolean is_active = FALSE;
+ gboolean draw_inset = FALSE;
+ CLRectangle r;
+
+ cl_rectangle_set_button (&r, style, state_type,
+ GTK_WIDGET_HAS_DEFAULT (widget),
+ GTK_WIDGET_HAS_FOCUS (widget),
+ CL_CORNER_NONE, CL_CORNER_ROUND,
+ CL_CORNER_NONE, CL_CORNER_ROUND);
+
+ if (state_type == GTK_STATE_ACTIVE)
+ is_active = TRUE;
+ else
+ r.fillgc = NULL;
+
+ /* Seriously, why can't non-gtk-apps at least try to be decent citizens?
+ Take this fscking OpenOffice.org 1.9 for example. The morons responsible
+ for this utter piece of crap give the clip size wrong values! :'( */
+
+ if (area)
+ {
+ area->x = x;
+ area->y = y;
+ area->width = width;
+ area->height = height;
+ }
+
+ x--;
+ width++;
+
+ /* Draw "sunken" look when border thickness is more than 2 pixels. */
+ if (GTK_IS_COMBO(widget->parent))
+ draw_inset = (widget->parent->style->xthickness > 2 &&
+ widget->parent->style->ythickness > 2);
+ else
+ draw_inset = (style->xthickness > 2 && style->ythickness > 2);
+
+ if (draw_inset)
+ {
+ cl_draw_inset (style, window, widget, area, x, y, width, height,
+ CL_CORNER_NONE, CL_CORNER_ROUND,
+ CL_CORNER_NONE, CL_CORNER_ROUND);
+
+ x++;
+ y++;
+ height-=2;
+ width-=2;
+ }
+ else
+ {
+ x++;
+ width--;
+ }
+
+ if (area)
+ cl_rectangle_set_clip_rectangle (&r, area);
+
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+
+ if (!is_active)
+ {
+ int tmp_height = (float)height*0.25;
+
+ gdk_gc_set_clip_rectangle (style->bg_gc[state_type], area);
+
+ draw_hgradient (window, style->bg_gc[state_type], style,
+ x+2,y+2,width-4,tmp_height,
+ &clearlooks_style->button_g1[state_type],
+ &clearlooks_style->button_g2[state_type]);
+
+ draw_hgradient (window, style->bg_gc[state_type], style,
+ x+2, y+2+tmp_height, width-4, height-3-tmp_height*2,
+ &clearlooks_style->button_g2[state_type],
+ &clearlooks_style->button_g3[state_type]);
+
+ draw_hgradient (window, style->bg_gc[state_type], style,
+ x+2,y+height-tmp_height-1,width-4,tmp_height,
+ &clearlooks_style->button_g3[state_type],
+ &clearlooks_style->button_g4[state_type]);
+
+ gdk_gc_set_clip_rectangle (style->bg_gc[state_type], NULL);
+ }
+
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+
+ if (area)
+ cl_rectangle_reset_clip_rectangle (&r);
+}
+
+/* Draw text Entry */
+void cl_draw_entry (GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height)
+{
+ CLRectangle r;
+ gboolean has_focus = GTK_WIDGET_HAS_FOCUS(widget);
+ GdkGC *bg_gc = cl_get_window_bg_gc(widget);
+
+ gdk_draw_rectangle (window, bg_gc, FALSE, x, y, width-1, height-1);
+
+ gtk_style_apply_default_background (style, window, TRUE, state_type,
+ area, x+1, y+1, width-2, height-2);
+
+
+ cl_rectangle_set_entry (&r, style, state_type,
+ CL_CORNER_ROUND, CL_CORNER_ROUND,
+ CL_CORNER_ROUND, CL_CORNER_ROUND,
+ has_focus);
+
+ /* Draw "sunken" look when border thickness is more than 2 pixels. */
+ if (style->xthickness > 2 && style->ythickness > 2)
+ {
+ cl_draw_inset (style, window, widget, area, x, y, width, height,
+ CL_CORNER_ROUND, CL_CORNER_ROUND,
+ CL_CORNER_ROUND, CL_CORNER_ROUND);
+
+ x++;
+ y++;
+ width-=2;
+ height-=2;
+ }
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+}
+
+void cl_draw_optionmenu(GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area, GtkWidget *widget,
+ const gchar *detail,
+ gint x, gint y, gint width, gint height)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE(style);
+ GtkRequisition indicator_size;
+ GtkBorder indicator_spacing;
+ int line_pos;
+
+ option_menu_get_props (widget, &indicator_size, &indicator_spacing);
+
+ if (get_direction (widget) == GTK_TEXT_DIR_RTL)
+ line_pos = x + (indicator_size.width + indicator_spacing.left + indicator_spacing.right) + style->xthickness;
+ else
+ line_pos = x + width - (indicator_size.width + indicator_spacing.left + indicator_spacing.right) - style->xthickness;
+
+ cl_draw_button (style, window, state_type, shadow_type, area, widget, detail, x, y, width, height);
+
+ gdk_draw_line (window, clearlooks_style->shade_gc[3],
+ line_pos, y + style->ythickness - 1, line_pos,
+ y + height - style->ythickness);
+
+ gdk_draw_line (window, style->light_gc[state_type],
+ line_pos+1, y + style->ythickness - 1, line_pos+1,
+ y + height - style->ythickness);
+}
+
+
+void cl_draw_menuitem_button (GdkDrawable *window, GtkWidget *widget, GtkStyle *style,
+ GdkRectangle *area, GtkStateType state_type,
+ int x, int y, int width, int height, CLRectangle *r)
+{
+ ClearlooksStyle *clearlooks_style = (ClearlooksStyle*)style;
+ gboolean menubar = (widget->parent && GTK_IS_MENU_BAR(widget->parent)) ? TRUE : FALSE;
+ int corner = CL_CORNER_NARROW;
+ GdkColor lower_color;
+
+ shade (&style->base[GTK_STATE_SELECTED], &lower_color, 0.85);
+
+ if (menubar)
+ {
+ height++;
+ corner = CL_CORNER_NONE;
+ r->bordergc = clearlooks_style->border_gc[CL_BORDER_UPPER];
+ }
+ else
+ {
+ r->bordergc = clearlooks_style->spot3_gc;
+ }
+
+ cl_rectangle_set_corners (r, corner, corner, corner, corner);
+
+ cl_rectangle_set_gradient (&r->fill_gradient,
+ &style->base[GTK_STATE_SELECTED], &lower_color);
+
+ r->gradient_type = CL_GRADIENT_VERTICAL;
+
+ r->fillgc = clearlooks_style->spot2_gc;
+ r->topleft = clearlooks_style->spot1_gc;
+
+ cl_rectangle_set_clip_rectangle (r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, r);
+ cl_draw_shadow (window, widget, style, x, y, width, height, r);
+ cl_rectangle_reset_clip_rectangle (r);
+}
+
+void cl_draw_menuitem_flat (GdkDrawable *window, GtkWidget *widget, GtkStyle *style,
+ GdkRectangle *area, GtkStateType state_type,
+ int x, int y, int width, int height, CLRectangle *r)
+{
+ ClearlooksStyle *clearlooks_style = (ClearlooksStyle*)style;
+ gboolean menubar = (widget->parent && GTK_IS_MENU_BAR(widget->parent)) ? TRUE : FALSE;
+ GdkColor tmp;
+
+ cl_rectangle_set_corners (r, CL_CORNER_NARROW, CL_CORNER_NARROW,
+ CL_CORNER_NARROW, CL_CORNER_NARROW);
+
+ tmp = cl_gc_set_fg_color_shade (style->black_gc, style->colormap,
+ &style->base[GTK_STATE_PRELIGHT], 0.8);
+
+ r->bordergc = style->black_gc;
+ r->fillgc = style->base_gc[GTK_STATE_PRELIGHT];
+
+ if (menubar) height++;
+
+ cl_rectangle_set_clip_rectangle (r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, r);
+ cl_rectangle_reset_clip_rectangle (r);
+
+ gdk_gc_set_foreground (style->black_gc, &tmp);
+}
+
+void cl_draw_menuitem_gradient (GdkDrawable *window, GtkWidget *widget, GtkStyle *style,
+ GdkRectangle *area, GtkStateType state_type,
+ int x, int y, int width, int height, CLRectangle *r)
+{
+ ClearlooksStyle *clearlooks_style = (ClearlooksStyle*)style;
+ gboolean menubar = (widget->parent && GTK_IS_MENU_BAR(widget->parent)) ? TRUE : FALSE;
+ GdkColor tmp;
+ GdkColor lower_color;
+
+ shade (&style->base[GTK_STATE_SELECTED], &lower_color, 0.8);
+
+ cl_rectangle_set_corners (r, CL_CORNER_NARROW, CL_CORNER_NARROW,
+ CL_CORNER_NARROW, CL_CORNER_NARROW);
+
+ cl_rectangle_set_gradient (&r->fill_gradient,
+ &style->base[GTK_STATE_SELECTED], &lower_color);
+
+ r->gradient_type = CL_GRADIENT_VERTICAL;
+
+ tmp = cl_gc_set_fg_color_shade (style->black_gc, style->colormap,
+ &style->base[GTK_STATE_PRELIGHT], 0.8);
+
+ r->bordergc = style->black_gc;
+ r->fillgc = style->base_gc[GTK_STATE_PRELIGHT];
+
+ if (menubar) height++;
+
+ cl_rectangle_set_clip_rectangle (r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, r);
+ cl_rectangle_reset_clip_rectangle (r);
+
+ gdk_gc_set_foreground (style->black_gc, &tmp);
+}
+
+void cl_draw_treeview_header (GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ gint columns = 0, column_index = -1, fill_width = width;
+ gboolean is_etree = strcmp("ETree", G_OBJECT_TYPE_NAME(widget->parent)) == 0;
+ gboolean resizable = TRUE;
+
+ GdkGC *bottom = clearlooks_style->shade_gc[5];
+
+ if ( width < 2 || height < 2 )
+ return;
+
+ if (GTK_IS_TREE_VIEW (widget->parent))
+ {
+ gtk_treeview_get_header_index (GTK_TREE_VIEW(widget->parent),
+ widget, &column_index, &columns,
+ &resizable);
+ }
+ else if (GTK_IS_CLIST (widget->parent))
+ {
+ gtk_clist_get_header_index (GTK_CLIST(widget->parent),
+ widget, &column_index, &columns);
+ }
+
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[0], area);
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[4], area);
+ gdk_gc_set_clip_rectangle (style->bg_gc[state_type], area);
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[5], area);
+ }
+
+ if (state_type != GTK_STATE_NORMAL)
+ fill_width-=2;
+
+ gdk_draw_rectangle (window, style->bg_gc[state_type], TRUE, x, y, fill_width, height-(height/3)+1);
+
+ draw_hgradient (window, style->bg_gc[state_type], style,
+ x, 1+y+height-(height/3), fill_width, height/3,
+ &style->bg[state_type], &clearlooks_style->inset_dark[state_type]);
+
+ if (resizable || (column_index != columns-1))
+ {
+ gdk_draw_line (window, clearlooks_style->shade_gc[4], x+width-2, y+4, x+width-2, y+height-5);
+ gdk_draw_line (window, clearlooks_style->shade_gc[0], x+width-1, y+4, x+width-1, y+height-5);
+ }
+
+ /* left light line */
+ if (column_index == 0)
+ gdk_draw_line (window, clearlooks_style->shade_gc[0], x, y+1, x, y+height-2);
+
+ /* top light line */
+ gdk_draw_line (window, clearlooks_style->shade_gc[0], x, y, x+width-1, y);
+
+ /* bottom dark line */
+ if (state_type == GTK_STATE_INSENSITIVE)
+ bottom = clearlooks_style->shade_gc[3];
+
+
+ gdk_draw_line (window, bottom, x, y+height-1, x+width-1, y+height-1);
+
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[0], NULL);
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[4], NULL);
+ gdk_gc_set_clip_rectangle (style->bg_gc[state_type], NULL);
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[5], NULL);
+ }
+}
diff --git a/libs/clearlooks-older/clearlooks_draw.h b/libs/clearlooks-older/clearlooks_draw.h
new file mode 100644
index 0000000000..a8cbb3732f
--- /dev/null
+++ b/libs/clearlooks-older/clearlooks_draw.h
@@ -0,0 +1,159 @@
+#ifndef CLEARLOOKS_DRAW_H
+#define CLEARLOOKS_DRAW_H
+
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+
+typedef struct
+{
+ GdkColor *from;
+ GdkColor *to;
+} CLGradient;
+
+typedef enum
+{
+ CL_GRADIENT_NONE,
+ CL_GRADIENT_HORIZONTAL,
+ CL_GRADIENT_VERTICAL
+} CLGradientType;
+
+typedef struct
+{
+ CLGradient fill_gradient;
+ CLGradient border_gradient;
+
+ CLGradientType gradient_type;
+
+ GdkGC *bordergc;
+ GdkGC *fillgc;
+
+ guint8 corners[4];
+
+ GdkGC *topleft; /* top + left shadow */
+ GdkGC *bottomright; /* bottom + right shadow */
+
+ GdkColor tmp_color; /* used for gradient */
+} CLRectangle;
+
+typedef enum /* DON'T CHANGE THE ORDER! */
+{
+ CL_CORNER_TOPRIGHT,
+ CL_CORNER_BOTTOMRIGHT,
+ CL_CORNER_BOTTOMLEFT,
+ CL_CORNER_TOPLEFT
+} CLCornerSide;
+
+typedef enum /* DON'T CHANGE THE ORDER! */
+{
+ CL_BORDER_TOP,
+ CL_BORDER_RIGHT,
+ CL_BORDER_BOTTOM,
+ CL_BORDER_LEFT
+} CLBorderType;
+
+typedef enum
+{
+ CL_CORNER_NONE = 0,
+ CL_CORNER_NARROW = 1,
+ CL_CORNER_ROUND = 2
+} CLCornerSharpness;
+
+
+
+CLRectangle *cl_rectangle_new(GdkGC *fillgc, GdkGC *bordergc,
+ int tl, int tr, int bl, int br);
+
+void cl_draw_rectangle (GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x, int y, int width, int height, CLRectangle *r);
+
+void cl_rectangle_set_color (CLGradient *g, GdkColor *color);
+void cl_rectangle_set_gradient (CLGradient *g, GdkColor *from, GdkColor *to);
+
+void cl_rectangle_set_button (CLRectangle *r, GtkStyle *style,
+ GtkStateType state_type, gboolean hasdefault, gboolean has_focus,
+ CLBorderType tl, CLBorderType tr,
+ CLBorderType bl, CLBorderType br);
+
+void cl_rectangle_set_entry (CLRectangle *r, GtkStyle *style,
+ GtkStateType state_type,
+ CLBorderType tl, CLBorderType tr,
+ CLBorderType bl, CLBorderType br,
+ gboolean has_focus);
+
+void cl_draw_shadow(GdkWindow *window, GtkWidget *widget, GtkStyle *style,
+ int x, int y, int width, int height, CLRectangle *r);
+
+void cl_rectangle_set_clip_rectangle (CLRectangle *r, GdkRectangle *area);
+void cl_rectangle_reset_clip_rectangle (CLRectangle *r);
+
+void cl_set_corner_sharpness (const gchar *detail, GtkWidget *widget, CLRectangle *r);
+
+
+void cl_rectangle_set_corners (CLRectangle *r, int tl, int tr, int bl, int br);
+
+void cl_rectangle_init (CLRectangle *r, GdkGC *fillgc, GdkGC *bordergc,
+ int tl, int tr, int bl, int br);
+
+void cl_rectangle_reset (CLRectangle *r, GtkStyle *style);
+
+
+GdkPixmap* cl_progressbar_tile_new (GdkDrawable *drawable, GtkWidget *widget,
+ GtkStyle *style, gint height, gint offset);
+
+void cl_progressbar_fill (GdkDrawable *drawable, GtkWidget *widget,
+ GtkStyle *style, GdkGC *gc,
+ gint x, gint y, gint width, gint height,
+ guint8 offset, GdkRectangle *area);
+
+GdkColor cl_gc_set_fg_color_shade (GdkGC *gc, GdkColormap *colormap,
+ GdkColor *from, gfloat s);
+
+void cl_draw_spinbutton(GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height);
+
+void cl_draw_button(GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height);
+
+void cl_draw_entry (GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height);
+
+void cl_draw_combobox_entry (GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height);
+
+void cl_draw_combobox_button (GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height);
+
+void cl_draw_menuitem_button (GdkDrawable *window, GtkWidget *widget, GtkStyle *style,
+ GdkRectangle *area, GtkStateType state_type,
+ int x, int y, int wiidth, int height, CLRectangle *r);
+
+void cl_draw_menuitem_flat (GdkDrawable *window, GtkWidget *widget, GtkStyle *style,
+ GdkRectangle *area, GtkStateType state_type,
+ int x, int y, int wiidth, int height, CLRectangle *r);
+
+void cl_draw_menuitem_gradient (GdkDrawable *window, GtkWidget *widget, GtkStyle *style,
+ GdkRectangle *area, GtkStateType state_type,
+ int x, int y, int wiidth, int height, CLRectangle *r);
+
+void cl_draw_treeview_header (GtkStyle *style, GdkWindow *window,
+ GtkStateType state_type, GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget, const gchar *detail,
+ gint x, gint y, gint width, gint height);
+
+#endif /* CLEARLOOKS_DRAW_H */
diff --git a/libs/clearlooks-older/clearlooks_rc_style.c b/libs/clearlooks-older/clearlooks_rc_style.c
new file mode 100644
index 0000000000..1c5f2c495e
--- /dev/null
+++ b/libs/clearlooks-older/clearlooks_rc_style.c
@@ -0,0 +1,392 @@
+/* Clearlooks theme engine
+ * Copyright (C) 2005 Richard Stellingwerff.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Written by Owen Taylor <otaylor@redhat.com>
+ * and by Alexander Larsson <alexl@redhat.com>
+ * Modified by Richard Stellingwerff <remenic@gmail.com>
+ */
+
+#include "clearlooks_style.h"
+#include "clearlooks_rc_style.h"
+
+static void clearlooks_rc_style_init (ClearlooksRcStyle *style);
+static void clearlooks_rc_style_class_init (ClearlooksRcStyleClass *klass);
+static GtkStyle *clearlooks_rc_style_create_style (GtkRcStyle *rc_style);
+static guint clearlooks_rc_style_parse (GtkRcStyle *rc_style,
+ GtkSettings *settings,
+ GScanner *scanner);
+static void clearlooks_rc_style_merge (GtkRcStyle *dest,
+ GtkRcStyle *src);
+
+
+static GtkRcStyleClass *parent_class;
+
+GType clearlooks_type_rc_style = 0;
+
+enum
+{
+ TOKEN_SPOTCOLOR = G_TOKEN_LAST + 1,
+ TOKEN_CONTRAST,
+ TOKEN_SUNKENMENU,
+ TOKEN_PROGRESSBARSTYLE,
+ TOKEN_MENUBARSTYLE,
+ TOKEN_MENUITEMSTYLE,
+ TOKEN_LISTVIEWITEMSTYLE
+};
+
+static struct
+ {
+ const gchar *name;
+ guint token;
+ }
+theme_symbols[] =
+{
+ { "spotcolor", TOKEN_SPOTCOLOR },
+ { "contrast", TOKEN_CONTRAST },
+ { "sunkenmenubar", TOKEN_SUNKENMENU },
+ { "progressbarstyle", TOKEN_PROGRESSBARSTYLE },
+ { "menubarstyle", TOKEN_MENUBARSTYLE },
+ { "menuitemstyle", TOKEN_MENUITEMSTYLE },
+ { "listviewitemstyle", TOKEN_LISTVIEWITEMSTYLE }
+};
+
+
+void
+clearlooks_rc_style_register_type (GTypeModule *module)
+{
+ static const GTypeInfo object_info =
+ {
+ sizeof (ClearlooksRcStyleClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) clearlooks_rc_style_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (ClearlooksRcStyle),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) clearlooks_rc_style_init,
+ NULL
+ };
+
+ clearlooks_type_rc_style = g_type_module_register_type (module,
+ GTK_TYPE_RC_STYLE,
+ "ClearlooksRcStyle",
+ &object_info, 0);
+}
+
+static void
+clearlooks_rc_style_init (ClearlooksRcStyle *clearlooks_rc)
+{
+ clearlooks_rc->has_spot_color = FALSE;
+ clearlooks_rc->contrast = 1.0;
+ clearlooks_rc->sunkenmenubar = 1;
+ clearlooks_rc->progressbarstyle = 0;
+ clearlooks_rc->menubarstyle = 0;
+ clearlooks_rc->menuitemstyle = 1;
+ clearlooks_rc->listviewitemstyle = 1;
+}
+
+static void
+clearlooks_rc_style_class_init (ClearlooksRcStyleClass *klass)
+{
+ GtkRcStyleClass *rc_style_class = GTK_RC_STYLE_CLASS (klass);
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ rc_style_class->parse = clearlooks_rc_style_parse;
+ rc_style_class->create_style = clearlooks_rc_style_create_style;
+ rc_style_class->merge = clearlooks_rc_style_merge;
+}
+
+static guint
+theme_parse_color(GtkSettings *settings,
+ GScanner *scanner,
+ GdkColor *color)
+{
+ guint token;
+
+ /* Skip 'blah_color' */
+ token = g_scanner_get_next_token(scanner);
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_EQUAL_SIGN)
+ return G_TOKEN_EQUAL_SIGN;
+
+ return gtk_rc_parse_color (scanner, color);
+}
+
+static guint
+theme_parse_contrast(GtkSettings *settings,
+ GScanner *scanner,
+ double *contrast)
+{
+ guint token;
+
+ /* Skip 'contrast' */
+ token = g_scanner_get_next_token(scanner);
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_EQUAL_SIGN)
+ return G_TOKEN_EQUAL_SIGN;
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_FLOAT)
+ return G_TOKEN_FLOAT;
+
+ *contrast = scanner->value.v_float;
+
+ return G_TOKEN_NONE;
+}
+
+static guint
+theme_parse_sunkenmenubar(GtkSettings *settings,
+ GScanner *scanner,
+ guint8 *sunken)
+{
+ guint token;
+
+ /* Skip 'sunkenmenubar' */
+ token = g_scanner_get_next_token(scanner);
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_EQUAL_SIGN)
+ return G_TOKEN_EQUAL_SIGN;
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_INT)
+ return G_TOKEN_INT;
+
+ *sunken = scanner->value.v_int;
+
+ return G_TOKEN_NONE;
+}
+
+static guint
+theme_parse_progressbarstyle(GtkSettings *settings,
+ GScanner *scanner,
+ guint8 *progressbarstyle)
+{
+ guint token;
+
+ /* Skip 'sunkenmenubar' */
+ token = g_scanner_get_next_token(scanner);
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_EQUAL_SIGN)
+ return G_TOKEN_EQUAL_SIGN;
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_INT)
+ return G_TOKEN_INT;
+
+ *progressbarstyle = scanner->value.v_int;
+
+ return G_TOKEN_NONE;
+}
+
+static guint
+theme_parse_menubarstyle(GtkSettings *settings,
+ GScanner *scanner,
+ guint8 *menubarstyle)
+{
+ guint token;
+
+ /* Skip 'menubarstyle' */
+ token = g_scanner_get_next_token(scanner);
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_EQUAL_SIGN)
+ return G_TOKEN_EQUAL_SIGN;
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_INT)
+ return G_TOKEN_INT;
+
+ *menubarstyle = scanner->value.v_int;
+
+ return G_TOKEN_NONE;
+}
+
+static guint
+theme_parse_menuitemstyle(GtkSettings *settings,
+ GScanner *scanner,
+ guint8 *menuitemstyle)
+{
+ guint token;
+
+ /* Skip 'sunkenmenubar' */
+ token = g_scanner_get_next_token(scanner);
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_EQUAL_SIGN)
+ return G_TOKEN_EQUAL_SIGN;
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_INT)
+ return G_TOKEN_INT;
+
+ *menuitemstyle = scanner->value.v_int;
+
+ return G_TOKEN_NONE;
+}
+
+static guint
+theme_parse_listviewitemstyle(GtkSettings *settings,
+ GScanner *scanner,
+ guint8 *listviewitemstyle)
+{
+ guint token;
+
+ token = g_scanner_get_next_token(scanner);
+
+ token = g_scanner_get_next_token(scanner);
+
+ if (token != G_TOKEN_EQUAL_SIGN)
+ return G_TOKEN_EQUAL_SIGN;
+
+ token = g_scanner_get_next_token(scanner);
+ if (token != G_TOKEN_INT)
+ return G_TOKEN_INT;
+
+ *listviewitemstyle = scanner->value.v_int;
+
+ return G_TOKEN_NONE;
+}
+
+static guint
+clearlooks_rc_style_parse (GtkRcStyle *rc_style,
+ GtkSettings *settings,
+ GScanner *scanner)
+
+{
+ static GQuark scope_id = 0;
+ ClearlooksRcStyle *clearlooks_style = CLEARLOOKS_RC_STYLE (rc_style);
+
+ guint old_scope;
+ guint token;
+ guint i;
+
+ /* Set up a new scope in this scanner. */
+
+ if (!scope_id)
+ scope_id = g_quark_from_string("clearlooks_theme_engine");
+
+ /* If we bail out due to errors, we *don't* reset the scope, so the
+ * error messaging code can make sense of our tokens.
+ */
+ old_scope = g_scanner_set_scope(scanner, scope_id);
+
+ /* Now check if we already added our symbols to this scope
+ * (in some previous call to clearlooks_rc_style_parse for the
+ * same scanner.
+ */
+
+ if (!g_scanner_lookup_symbol(scanner, theme_symbols[0].name))
+ {
+ g_scanner_freeze_symbol_table(scanner);
+ for (i = 0; i < G_N_ELEMENTS (theme_symbols); i++)
+ g_scanner_scope_add_symbol(scanner, scope_id,
+ theme_symbols[i].name,
+ GINT_TO_POINTER(theme_symbols[i].token));
+ g_scanner_thaw_symbol_table(scanner);
+ }
+
+ /* We're ready to go, now parse the top level */
+
+ token = g_scanner_peek_next_token(scanner);
+ while (token != G_TOKEN_RIGHT_CURLY)
+ {
+ switch (token)
+ {
+ case TOKEN_SPOTCOLOR:
+ token = theme_parse_color(settings, scanner, &clearlooks_style->spot_color);
+ clearlooks_style->has_spot_color = TRUE;
+ break;
+ case TOKEN_CONTRAST:
+ token = theme_parse_contrast(settings, scanner, &clearlooks_style->contrast);
+ break;
+ case TOKEN_SUNKENMENU:
+ token = theme_parse_sunkenmenubar(settings, scanner, &clearlooks_style->sunkenmenubar);
+ break;
+ case TOKEN_PROGRESSBARSTYLE:
+ token = theme_parse_progressbarstyle(settings, scanner, &clearlooks_style->progressbarstyle);
+ break;
+ case TOKEN_MENUBARSTYLE:
+ token = theme_parse_menubarstyle(settings, scanner, &clearlooks_style->menubarstyle);
+ break;
+ case TOKEN_MENUITEMSTYLE:
+ token = theme_parse_menuitemstyle(settings, scanner, &clearlooks_style->menuitemstyle);
+ break;
+ case TOKEN_LISTVIEWITEMSTYLE:
+ token = theme_parse_listviewitemstyle(settings, scanner, &clearlooks_style->listviewitemstyle);
+ break;
+ default:
+ g_scanner_get_next_token(scanner);
+ token = G_TOKEN_RIGHT_CURLY;
+ break;
+ }
+
+ if (token != G_TOKEN_NONE)
+ return token;
+
+ token = g_scanner_peek_next_token(scanner);
+ }
+
+ g_scanner_get_next_token(scanner);
+
+ g_scanner_set_scope(scanner, old_scope);
+
+ return G_TOKEN_NONE;
+}
+
+static void
+clearlooks_rc_style_merge (GtkRcStyle *dest,
+ GtkRcStyle *src)
+{
+ ClearlooksRcStyle *dest_w, *src_w;
+
+ parent_class->merge (dest, src);
+
+ if (!CLEARLOOKS_IS_RC_STYLE (src))
+ return;
+
+ src_w = CLEARLOOKS_RC_STYLE (src);
+ dest_w = CLEARLOOKS_RC_STYLE (dest);
+
+ dest_w->contrast = src_w->contrast;
+ dest_w->sunkenmenubar = src_w->sunkenmenubar;
+ dest_w->progressbarstyle = src_w->progressbarstyle;
+ dest_w->menubarstyle = src_w->menubarstyle;
+ dest_w->menuitemstyle = src_w->menuitemstyle;
+ dest_w->listviewitemstyle = src_w->listviewitemstyle;
+
+ if (src_w->has_spot_color)
+ {
+ dest_w->has_spot_color = TRUE;
+ dest_w->spot_color = src_w->spot_color;
+ }
+}
+
+
+/* Create an empty style suitable to this RC style
+ */
+static GtkStyle *
+clearlooks_rc_style_create_style (GtkRcStyle *rc_style)
+{
+ return GTK_STYLE (g_object_new (CLEARLOOKS_TYPE_STYLE, NULL));
+}
diff --git a/libs/clearlooks-older/clearlooks_rc_style.h b/libs/clearlooks-older/clearlooks_rc_style.h
new file mode 100644
index 0000000000..bd8e0ca05d
--- /dev/null
+++ b/libs/clearlooks-older/clearlooks_rc_style.h
@@ -0,0 +1,57 @@
+/* Clearlooks Theme Engine
+ * Copyright (C) 2005 Richard Stellingwerff.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Written by Owen Taylor <otaylor@redhat.com>
+ * and by Alexander Larsson <alexl@redhat.com>
+ * Modified by Richard Stellingwerff <remenic@gmail.com>
+ */
+
+#include <gtk/gtkrc.h>
+
+typedef struct _ClearlooksRcStyle ClearlooksRcStyle;
+typedef struct _ClearlooksRcStyleClass ClearlooksRcStyleClass;
+
+extern GType clearlooks_type_rc_style;
+
+#define CLEARLOOKS_TYPE_RC_STYLE clearlooks_type_rc_style
+#define CLEARLOOKS_RC_STYLE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), CLEARLOOKS_TYPE_RC_STYLE, ClearlooksRcStyle))
+#define CLEARLOOKS_RC_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLEARLOOKS_TYPE_RC_STYLE, ClearlooksRcStyleClass))
+#define CLEARLOOKS_IS_RC_STYLE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), CLEARLOOKS_TYPE_RC_STYLE))
+#define CLEARLOOKS_IS_RC_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLEARLOOKS_TYPE_RC_STYLE))
+#define CLEARLOOKS_RC_STYLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLEARLOOKS_TYPE_RC_STYLE, ClearlooksRcStyleClass))
+
+struct _ClearlooksRcStyle
+{
+ GtkRcStyle parent_instance;
+
+ GdkColor spot_color;
+ gboolean has_spot_color;
+ double contrast;
+ guint8 sunkenmenubar;
+ guint8 progressbarstyle;
+ guint8 menubarstyle;
+ guint8 menuitemstyle;
+ guint8 listviewitemstyle;
+};
+
+struct _ClearlooksRcStyleClass
+{
+ GtkRcStyleClass parent_class;
+};
+
+void clearlooks_rc_style_register_type (GTypeModule *module);
diff --git a/libs/clearlooks-older/clearlooks_style.c b/libs/clearlooks-older/clearlooks_style.c
new file mode 100644
index 0000000000..074f1604b1
--- /dev/null
+++ b/libs/clearlooks-older/clearlooks_style.c
@@ -0,0 +1,2661 @@
+#include <gtk/gtk.h>
+
+#include "clearlooks_style.h"
+#include "clearlooks_rc_style.h"
+#include "clearlooks_draw.h"
+
+#include <math.h>
+#include <string.h>
+
+#include "bits.c"
+#include "support.h"
+//#include "config.h"
+
+/* #define DEBUG 1 */
+
+#define SCALE_SIZE 5
+
+#define DETAIL(xx) ((detail) && (!strcmp(xx, detail)))
+#define COMPARE_COLORS(a,b) (a.red == b.red && a.green == b.green && a.blue == b.blue)
+
+#define DRAW_ARGS GtkStyle *style, \
+ GdkWindow *window, \
+ GtkStateType state_type, \
+ GtkShadowType shadow_type, \
+ GdkRectangle *area, \
+ GtkWidget *widget, \
+ const gchar *detail, \
+ gint x, \
+ gint y, \
+ gint width, \
+ gint height
+
+static GdkGC *realize_color (GtkStyle * style, GdkColor * color);
+static GtkStyleClass *parent_class;
+static GList *progressbars = NULL;
+static gint8 pboffset = 10;
+static int timer_id = 0;
+
+static void cl_progressbar_remove (gpointer data)
+{
+ if (g_list_find (progressbars, data) == NULL)
+ return;
+
+ progressbars = g_list_remove (progressbars, data);
+ g_object_unref (data);
+
+ if (g_list_first(progressbars) == NULL) {
+ g_source_remove(timer_id);
+ timer_id = 0;
+ }
+}
+
+static void update_progressbar (gpointer data, gpointer user_data)
+{
+ gfloat fraction;
+
+ if (data == NULL)
+ return;
+
+ fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (data));
+
+ /* update only if not filled */
+ if (fraction < 1.0)
+ gtk_widget_queue_resize ((GtkWidget*)data);
+
+ if (fraction >= 1.0 || GTK_PROGRESS (data)->activity_mode)
+ cl_progressbar_remove (data);
+}
+
+static gboolean timer_func (gpointer data)
+{
+ g_list_foreach (progressbars, update_progressbar, NULL);
+ if (--pboffset < 0) pboffset = 9;
+ return (g_list_first(progressbars) != NULL);
+}
+
+static gboolean cl_progressbar_known(gconstpointer data)
+{
+ return (g_list_find (progressbars, data) != NULL);
+}
+
+
+static void cl_progressbar_add (gpointer data)
+{
+ if (!GTK_IS_PROGRESS_BAR (data))
+ return;
+
+ progressbars = g_list_append (progressbars, data);
+
+ g_object_ref (data);
+ g_signal_connect ((GObject*)data, "unrealize", G_CALLBACK (cl_progressbar_remove), data);
+
+ if (timer_id == 0)
+ timer_id = g_timeout_add (100, timer_func, NULL);
+}
+
+static GdkColor *
+clearlooks_get_spot_color (ClearlooksRcStyle *clearlooks_rc)
+{
+ GtkRcStyle *rc = GTK_RC_STYLE (clearlooks_rc);
+
+ if (clearlooks_rc->has_spot_color)
+ return &clearlooks_rc->spot_color;
+ else
+ return &rc->base[GTK_STATE_SELECTED];
+}
+
+/**************************************************************************/
+
+/* used for optionmenus... */
+static void
+draw_tab (GtkStyle *style,
+ GdkWindow *window,
+ GtkStateType state_type,
+ GtkShadowType shadow_type,
+ GdkRectangle *area,
+ GtkWidget *widget,
+ const gchar *detail,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
+{
+#define ARROW_SPACE 2
+#define ARROW_LINE_HEIGHT 2
+#define ARROW_LINE_WIDTH 5
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ GtkRequisition indicator_size;
+ GtkBorder indicator_spacing;
+ gint arrow_height;
+
+ option_menu_get_props (widget, &indicator_size, &indicator_spacing);
+
+ indicator_size.width += (indicator_size.width % 2) - 1;
+ arrow_height = indicator_size.width / 2 + 2;
+
+ x += (width - indicator_size.width) / 2;
+ y += height/2;
+
+ if (state_type == GTK_STATE_INSENSITIVE)
+ {
+ draw_arrow (window, style->light_gc[state_type], area,
+ GTK_ARROW_UP, 1+x, 1+y-arrow_height,
+ indicator_size.width, arrow_height);
+
+ draw_arrow (window, style->light_gc[state_type], area,
+ GTK_ARROW_DOWN, 1+x, 1+y+1,
+ indicator_size.width, arrow_height);
+ }
+
+ draw_arrow (window, style->fg_gc[state_type], area,
+ GTK_ARROW_UP, x, y-arrow_height,
+ indicator_size.width, arrow_height);
+
+ draw_arrow (window, style->fg_gc[state_type], area,
+ GTK_ARROW_DOWN, x, y+1,
+ indicator_size.width, arrow_height);
+}
+
+static void
+clearlooks_draw_arrow (GtkStyle *style,
+ GdkWindow *window,
+ GtkStateType state,
+ GtkShadowType shadow,
+ GdkRectangle *area,
+ GtkWidget *widget,
+ const gchar *detail,
+ GtkArrowType arrow_type,
+ gboolean fill,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ gint original_width, original_x;
+ GdkGC *gc;
+
+ sanitize_size (window, &width, &height);
+
+ if (is_combo_box (widget))
+ {
+ width = 7;
+ height = 5;
+ x+=2;
+ y+=4;
+ if (state == GTK_STATE_INSENSITIVE)
+ {
+ draw_arrow (window, style->light_gc[state], area,
+ GTK_ARROW_UP, 1+x, 1+y-height,
+ width, height);
+
+ draw_arrow (window, style->light_gc[state], area,
+ GTK_ARROW_DOWN, 1+x, 1+y+1,
+ width, height);
+ }
+
+ draw_arrow (window, style->fg_gc[state], area,
+ GTK_ARROW_UP, x, y-height,
+ width, height);
+
+ draw_arrow (window, style->fg_gc[state], area,
+ GTK_ARROW_DOWN, x, y+1,
+ width, height);
+
+ return;
+ }
+
+ original_width = width;
+ original_x = x;
+
+ /* Make spinbutton arrows and arrows in menus
+ * slightly larger to get the right pixels drawn */
+ if (DETAIL ("spinbutton"))
+ height += 1;
+
+ if (DETAIL("menuitem"))
+ {
+ width = 6;
+ height = 7;
+ }
+
+ /* Compensate arrow position for "sunken" look */
+ if (DETAIL ("spinbutton") && arrow_type == GTK_ARROW_DOWN &&
+ style->xthickness > 2 && style->ythickness > 2)
+ y -= 1;
+
+ if (widget && widget->parent && GTK_IS_COMBO (widget->parent->parent))
+ {
+ width -= 2;
+ height -=2;
+ x++;
+ }
+
+ calculate_arrow_geometry (arrow_type, &x, &y, &width, &height);
+
+ if (DETAIL ("menuitem"))
+ x = original_x + original_width - width;
+
+ if (DETAIL ("spinbutton") && (arrow_type == GTK_ARROW_DOWN))
+ y += 1;
+
+ if (state == GTK_STATE_INSENSITIVE)
+ draw_arrow (window, style->light_gc[state], area, arrow_type, x + 1, y + 1, width, height);
+
+ gc = style->fg_gc[state];
+
+ draw_arrow (window, gc, area, arrow_type, x, y, width, height);
+}
+
+
+static void
+draw_flat_box (DRAW_ARGS)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+
+ g_return_if_fail (GTK_IS_STYLE (style));
+ g_return_if_fail (window != NULL);
+
+ sanitize_size (window, &width, &height);
+
+ if (detail &&
+ clearlooks_style->listviewitemstyle == 1 &&
+ state_type == GTK_STATE_SELECTED && (
+ !strncmp ("cell_even", detail, strlen ("cell_even")) ||
+ !strncmp ("cell_odd", detail, strlen ("cell_odd"))))
+ {
+ GdkGC *gc;
+ GdkColor lower_color;
+ GdkColor *upper_color;
+
+ if (GTK_WIDGET_HAS_FOCUS (widget))
+ {
+ gc = style->base_gc[state_type];
+ upper_color = &style->base[state_type];
+ }
+ else
+ {
+ gc = style->base_gc[GTK_STATE_ACTIVE];
+ upper_color = &style->base[GTK_STATE_ACTIVE];
+ }
+
+ if (GTK_IS_TREE_VIEW (widget) && 0)
+ {
+ GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+
+ if (gtk_tree_selection_count_selected_rows (sel) > 1)
+ {
+ parent_class->draw_flat_box (style, window, state_type, shadow_type,
+ area, widget, detail,
+ x, y, width, height);
+ return;
+ }
+ }
+
+ shade (upper_color, &lower_color, 0.8);
+
+ if (area)
+ gdk_gc_set_clip_rectangle (gc, area);
+
+ draw_hgradient (window, gc, style,
+ x, y, width, height, upper_color, &lower_color);
+
+ if (area)
+ gdk_gc_set_clip_rectangle (gc, NULL);
+ }
+ else
+ {
+ parent_class->draw_flat_box (style, window, state_type,
+ shadow_type,
+ area, widget, detail,
+ x, y, width, height);
+ }
+}
+/**************************************************************************/
+
+static void
+draw_shadow (DRAW_ARGS)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ CLRectangle r;
+
+ GdkGC *outer_gc = clearlooks_style->shade_gc[4];
+ GdkGC *gc1 = NULL;
+ GdkGC *gc2 = NULL;
+ gint thickness_light;
+ gint thickness_dark;
+ gboolean interior_focus = FALSE;
+
+#if DEBUG
+ printf("draw_shadow: %s %d %d %d %d\n", detail, x, y, width, height);
+#endif
+
+ if (widget == NULL)
+ {
+ gdk_draw_rectangle (window, outer_gc, FALSE,
+ x, y, width - 1, height - 1);
+ return;
+ }
+
+ if ((width == -1) && (height == -1))
+ gdk_window_get_size (window, &width, &height);
+ else if (width == -1)
+ gdk_window_get_size (window, &width, NULL);
+ else if (height == -1)
+ gdk_window_get_size (window, NULL, &height);
+
+ cl_rectangle_reset (&r, style);
+
+ if (DETAIL ("frame") && widget->parent &&
+ GTK_IS_STATUSBAR (widget->parent))
+ {
+ gtk_style_apply_default_background (style, window,widget && !GTK_WIDGET_NO_WINDOW (widget),
+ state_type, area, x, y, width, height);
+
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[3], area);
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[0], area);
+ }
+
+ gdk_draw_line (window, clearlooks_style->shade_gc[3],
+ x, y, x + width, y);
+ gdk_draw_line (window, clearlooks_style->shade_gc[0],
+ x, y + 1, x + width, y + 1);
+
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[3], NULL);
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[0], NULL);
+ }
+ }
+ else if (detail && !strcmp (detail, "entry"))
+ {
+ if ( widget->parent && (GTK_IS_COMBO_BOX_ENTRY (widget->parent) ||
+ GTK_IS_SPIN_BUTTON(widget) ||
+ GTK_IS_COMBO (widget->parent)))
+ {
+ cl_draw_combobox_entry (style, window, GTK_WIDGET_STATE(widget), shadow_type, area, widget, detail, x, y, width, height);
+ }
+ else
+ {
+ cl_draw_entry (style, window, GTK_WIDGET_STATE(widget), shadow_type, area, widget, detail, x, y, width, height);
+ }
+ }
+ else if (DETAIL ("viewport") || DETAIL ("scrolled_window"))
+ {
+ gdk_draw_rectangle (window, clearlooks_style->shade_gc[4], FALSE,
+ x, y, width - 1, height - 1);
+ }
+ else
+ {
+ if (DETAIL ("menuitem"))
+ outer_gc = clearlooks_style->spot3_gc;
+ else
+ outer_gc = clearlooks_style->shade_gc[4];
+
+ if (shadow_type == GTK_SHADOW_IN)
+ gdk_draw_rectangle (window, outer_gc, FALSE,
+ x, y, width - 1, height - 1);
+ else if (shadow_type == GTK_SHADOW_OUT)
+ {
+ gdk_draw_rectangle (window, outer_gc, FALSE,
+ x, y, width - 1, height - 1);
+ gdk_draw_line (window, style->light_gc[state_type],
+ x+1, y+1, x+width-2, y+1);
+ gdk_draw_line (window, style->light_gc[state_type],
+ x+1, y+1, x+1, y+height-2);
+ }
+ else if (shadow_type == GTK_SHADOW_ETCHED_IN)
+ {
+ GdkGC *a = clearlooks_style->shade_gc[(shadow_type == GTK_SHADOW_ETCHED_IN) ? 0 : 3];
+ GdkGC *b = clearlooks_style->shade_gc[(shadow_type == GTK_SHADOW_ETCHED_IN) ? 3 : 0];
+
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+
+ r.bordergc = a;
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x+1, y+1, width-1, height-1, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+
+ r.bordergc = b;
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width-1, height-1, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+ }
+ else if (shadow_type == GTK_SHADOW_ETCHED_IN)
+ {
+ GdkGC *a = clearlooks_style->shade_gc[(shadow_type == GTK_SHADOW_ETCHED_IN) ? 3 : 0];
+ GdkGC *b = clearlooks_style->shade_gc[(shadow_type == GTK_SHADOW_ETCHED_IN) ? 0 : 3];
+
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+
+ r.bordergc = a;
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x+1, y+1, width-1, height-1, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+
+ r.bordergc = b;
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width-1, height-1, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+ }
+ else
+ parent_class->draw_shadow (style, window, state_type, shadow_type,
+ area, widget, detail,
+ x, y, width, height);
+ }
+}
+
+#define GDK_RECTANGLE_SET(rect,a,b,c,d) rect.x = a; \
+ rect.y = b; \
+ rect.width = c; \
+ rect.height = d;
+
+
+static void
+draw_box_gap (DRAW_ARGS,
+ GtkPositionType gap_side,
+ gint gap_x,
+ gint gap_width)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ CLRectangle r;
+
+ GdkRegion *area_region = NULL,
+ *gap_region = NULL;
+ GdkRectangle light_rect;
+ GdkRectangle dark_rect;
+
+#if DEBUG
+ printf("draw_box_gap: %s %d %d %d %d\n", detail, x, y, width, height);
+#endif
+
+ g_return_if_fail (GTK_IS_STYLE (style));
+ g_return_if_fail (window != NULL);
+
+ sanitize_size (window, &width, &height);
+
+ cl_rectangle_reset (&r, style);
+
+ r.bordergc = clearlooks_style->shade_gc[5];
+
+ r.topleft = style->light_gc[state_type];
+ r.bottomright = clearlooks_style->shade_gc[1];
+
+ if (area)
+ area_region = gdk_region_rectangle (area);
+ else
+ {
+ GdkRectangle tmp = { x, y, width, height };
+ area_region = gdk_region_rectangle (&tmp);
+ }
+
+ switch (gap_side)
+ {
+ case GTK_POS_TOP:
+ {
+ GdkRectangle rect = { x+gap_x+1, y, gap_width-2, 2 };
+ gap_region = gdk_region_rectangle (&rect);
+
+ GDK_RECTANGLE_SET (light_rect, x+gap_x+1, y, x+gap_x+1, y+1);
+ GDK_RECTANGLE_SET (dark_rect, x+gap_x+gap_width-2, y, x+gap_x+gap_width-2, y);
+
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_ROUND, CL_CORNER_ROUND);
+
+ break;
+ }
+ case GTK_POS_BOTTOM:
+ {
+ GdkRectangle rect = { x+gap_x+1, y+height-2, gap_width-2, 2 };
+ gap_region = gdk_region_rectangle (&rect);
+
+ GDK_RECTANGLE_SET (light_rect, x+gap_x+1, y+height-2, x+gap_x+1, y+height-1);
+ GDK_RECTANGLE_SET (dark_rect, x+gap_x+gap_width-2, y+height-2, x+gap_x+gap_width-2, y+height-1);
+
+ cl_rectangle_set_corners (&r, CL_CORNER_ROUND, CL_CORNER_ROUND,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+
+ break;
+ }
+ case GTK_POS_LEFT:
+ {
+ GdkRectangle rect = { x, y+gap_x+1, 2, gap_width-2 };
+ gap_region = gdk_region_rectangle (&rect);
+
+ GDK_RECTANGLE_SET (light_rect, x, y+gap_x+1, x+1, y+gap_x+1);
+ GDK_RECTANGLE_SET (dark_rect, x, y+gap_x+gap_width-2, x, y+gap_x+gap_width-2);
+
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_ROUND,
+ CL_CORNER_NONE, CL_CORNER_ROUND);
+ break;
+ }
+ case GTK_POS_RIGHT:
+ {
+ GdkRectangle rect = { x+width-2, y+gap_x+1, 2, gap_width-2 };
+ gap_region = gdk_region_rectangle (&rect);
+
+ GDK_RECTANGLE_SET (light_rect, x+width-2, y+gap_x+1, x+width-1, y+gap_x+1);
+ GDK_RECTANGLE_SET (dark_rect, x+width-2, y+gap_x+gap_width-2, x+width-1, y+gap_x+gap_width-2);
+
+ cl_rectangle_set_corners (&r, CL_CORNER_ROUND, CL_CORNER_NONE,
+ CL_CORNER_ROUND, CL_CORNER_NONE);
+ break;
+ }
+ }
+
+ gdk_region_subtract (area_region, gap_region);
+
+ gdk_gc_set_clip_region (r.bordergc, area_region);
+ gdk_gc_set_clip_region (r.topleft, area_region);
+ gdk_gc_set_clip_region (r.bottomright, area_region);
+
+ gdk_region_destroy (area_region);
+ gdk_region_destroy (gap_region);
+
+ gdk_draw_rectangle (window, style->bg_gc[state_type], TRUE, x, y, width, height);
+
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+
+ gdk_gc_set_clip_region (r.bordergc, NULL);
+ gdk_gc_set_clip_region (r.topleft, NULL);
+ gdk_gc_set_clip_region (r.bottomright, NULL);
+
+ /* it's a semi hack */
+ gdk_draw_line (window, style->light_gc[state_type],
+ light_rect.x, light_rect.y,
+ light_rect.width, light_rect.height);
+
+ gdk_draw_line (window, clearlooks_style->shade_gc[1],
+ dark_rect.x, dark_rect.y,
+ dark_rect.width, dark_rect.height);
+}
+
+/**************************************************************************/
+
+static void
+draw_extension (DRAW_ARGS, GtkPositionType gap_side)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ int my_state_type = (state_type == GTK_STATE_ACTIVE) ? 2 : 0;
+ CLRectangle r;
+
+#if DEBUG
+ printf("draw_extension: %s %d %d %d %d\n", detail, x, y, width, height);
+#endif
+
+ g_return_if_fail (GTK_IS_STYLE (style));
+ g_return_if_fail (window != NULL);
+
+ sanitize_size (window, &width, &height);
+
+ if (DETAIL ("tab"))
+ {
+ GdkRectangle new_area;
+ GdkColor tmp_color;
+
+ cl_rectangle_set_button (&r, style, state_type, FALSE, FALSE,
+ CL_CORNER_ROUND, CL_CORNER_ROUND,
+ CL_CORNER_ROUND, CL_CORNER_ROUND);
+
+ if (state_type == GTK_STATE_ACTIVE)
+ shade (&style->bg[state_type], &tmp_color, 1.08);
+ else
+ shade (&style->bg[state_type], &tmp_color, 1.05);
+
+ if (area)
+ {
+ new_area = *area;
+ }
+ else
+ {
+ new_area.x = x;
+ new_area.y = y;
+ new_area.width = width;
+ new_area.height = height;
+ }
+
+ switch (gap_side)
+ {
+ case GTK_POS_BOTTOM:
+ height+=2;
+ new_area.y = y;
+ new_area.height = height-2;
+ r.gradient_type = CL_GRADIENT_VERTICAL;
+ cl_rectangle_set_gradient (&r.fill_gradient, &tmp_color, &style->bg[state_type]);
+ cl_rectangle_set_gradient (&r.border_gradient,
+ &clearlooks_style->border[CL_BORDER_UPPER+my_state_type],
+ &clearlooks_style->border[CL_BORDER_LOWER+my_state_type]);
+ break;
+ case GTK_POS_TOP:
+ y-=2;
+ height+=2;
+ new_area.y = y+2;
+ new_area.height = height;
+ r.gradient_type = CL_GRADIENT_VERTICAL;
+ cl_rectangle_set_gradient (&r.fill_gradient, &style->bg[state_type], &tmp_color);
+ cl_rectangle_set_gradient (&r.border_gradient,
+ &clearlooks_style->border[CL_BORDER_LOWER+my_state_type],
+ &clearlooks_style->border[CL_BORDER_UPPER+my_state_type]);
+ break;
+ case GTK_POS_LEFT:
+ x-=2;
+ width+=2;
+ new_area.x = x+2;
+ new_area.width = width;
+ r.gradient_type = CL_GRADIENT_HORIZONTAL;
+ cl_rectangle_set_gradient (&r.fill_gradient, &style->bg[state_type], &tmp_color);
+ cl_rectangle_set_gradient (&r.border_gradient,
+ &clearlooks_style->border[CL_BORDER_LOWER+my_state_type],
+ &clearlooks_style->border[CL_BORDER_UPPER+my_state_type]);
+ break;
+ case GTK_POS_RIGHT:
+ width+=2;
+ new_area.x = x;
+ new_area.width = width-2;
+ r.gradient_type = CL_GRADIENT_HORIZONTAL;
+ cl_rectangle_set_gradient (&r.fill_gradient, &tmp_color, &style->bg[state_type]);
+ cl_rectangle_set_gradient (&r.border_gradient,
+ &clearlooks_style->border[CL_BORDER_UPPER+my_state_type],
+ &clearlooks_style->border[CL_BORDER_LOWER+my_state_type]);
+ break;
+ }
+
+ r.topleft = style->light_gc[state_type];
+ r.bottomright = (state_type == GTK_STATE_NORMAL) ? clearlooks_style->shade_gc[1] : NULL;
+
+ cl_rectangle_set_clip_rectangle (&r, &new_area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+
+ /* draw the selection stripe */
+ if (state_type != GTK_STATE_ACTIVE) {
+ cl_rectangle_set_gradient (&r.fill_gradient, NULL, NULL);
+ r.fillgc = clearlooks_style->spot2_gc;
+
+ switch (gap_side)
+ {
+ case GTK_POS_BOTTOM:
+ cl_rectangle_set_corners (&r, CL_CORNER_ROUND, CL_CORNER_ROUND,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+ cl_rectangle_set_gradient (&r.border_gradient, &clearlooks_style->spot3, &clearlooks_style->spot2);
+ r.gradient_type = CL_GRADIENT_VERTICAL;
+
+ cl_rectangle_set_clip_rectangle (&r, &new_area);
+ cl_draw_rectangle (window, widget, style, x, y, width, 3, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+ break;
+ case GTK_POS_TOP:
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_ROUND, CL_CORNER_ROUND);
+ cl_rectangle_set_gradient (&r.border_gradient, &clearlooks_style->spot2, &clearlooks_style->spot3);
+ r.gradient_type = CL_GRADIENT_VERTICAL;
+
+ cl_rectangle_set_clip_rectangle (&r, &new_area);
+ cl_draw_rectangle (window, widget, style, x, y + height - 3, width, 3, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+ break;
+ case GTK_POS_LEFT:
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_ROUND,
+ CL_CORNER_NONE, CL_CORNER_ROUND);
+ cl_rectangle_set_gradient (&r.border_gradient, &clearlooks_style->spot2, &clearlooks_style->spot3);
+ r.gradient_type = CL_GRADIENT_HORIZONTAL;
+
+ cl_rectangle_set_clip_rectangle (&r, &new_area);
+ cl_draw_rectangle (window, widget, style, x + width - 3, y, 3, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+ break;
+ case GTK_POS_RIGHT:
+ cl_rectangle_set_corners (&r, CL_CORNER_ROUND, CL_CORNER_NONE,
+ CL_CORNER_ROUND, CL_CORNER_NONE);
+ cl_rectangle_set_gradient (&r.border_gradient, &clearlooks_style->spot3, &clearlooks_style->spot2);
+ r.gradient_type = CL_GRADIENT_HORIZONTAL;
+
+ cl_rectangle_set_clip_rectangle (&r, &new_area);
+ cl_draw_rectangle (window, widget, style, x, y, 3, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+ break;
+ }
+ }
+
+
+ }
+ else
+ {
+ parent_class->draw_extension (style, window, state_type, shadow_type, area,
+ widget, detail, x, y, width, height,
+ gap_side);
+ }
+}
+
+
+/**************************************************************************/
+
+static void
+draw_handle (DRAW_ARGS, GtkOrientation orientation)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ gint xx, yy;
+ gint xthick, ythick;
+ GdkGC *light_gc, *dark_gc;
+ GdkRectangle rect;
+ GdkRectangle dest;
+ gint intersect;
+ gint h;
+ int i;
+ int n_lines;
+ int offset;
+
+#if DEBUG
+ printf("draw_handle: %s %d %d %d %d\n", detail, x, y, width, height);
+#endif
+
+ g_return_if_fail (GTK_IS_STYLE (style));
+ g_return_if_fail (window != NULL);
+
+ sanitize_size (window, &width, &height);
+
+ if (state_type == GTK_STATE_PRELIGHT)
+ gtk_style_apply_default_background (style, window,
+ widget && !GTK_WIDGET_NO_WINDOW (widget),
+ state_type, area, x, y, width, height);
+
+ /* orientation is totally bugged, but this actually works... */
+ orientation = (width > height) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL;
+
+ if (!strcmp (detail, "paned"))
+ {
+ /* we want to ignore the shadow border in paned widgets */
+ xthick = 0;
+ ythick = 0;
+ }
+ else
+ {
+ xthick = style->xthickness;
+ ythick = style->ythickness;
+ }
+
+ if ( ((DETAIL ("handlebox") && widget && GTK_IS_HANDLE_BOX (widget)) || DETAIL ("dockitem")) &&
+ orientation == GTK_ORIENTATION_VERTICAL )
+ {
+ /* The line in the toolbar */
+
+ light_gc = style->light_gc[state_type];
+ dark_gc = clearlooks_style->shade_gc[3];
+
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (light_gc, area);
+ gdk_gc_set_clip_rectangle (dark_gc, area);
+ }
+
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (light_gc, NULL);
+ gdk_gc_set_clip_rectangle (dark_gc, NULL);
+ }
+
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[0], area);
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[3], area);
+ }
+
+ gdk_draw_line (window, clearlooks_style->shade_gc[0], x, y, x + width, y);
+ gdk_draw_line (window, clearlooks_style->shade_gc[3], x, y + height - 1, x + width, y + height - 1);
+
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[0], NULL);
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[3], NULL);
+ }
+ }
+
+ light_gc = clearlooks_style->shade_gc[0];
+ dark_gc = clearlooks_style->shade_gc[4];
+
+ rect.x = x + xthick;
+ rect.y = y + ythick;
+ rect.width = width - (xthick * 2);
+ rect.height = height - (ythick * 2);
+
+ if (area)
+ intersect = gdk_rectangle_intersect (area, &rect, &dest);
+ else
+ {
+ intersect = TRUE;
+ dest = rect;
+ }
+
+ if (!intersect)
+ return;
+
+ gdk_gc_set_clip_rectangle (light_gc, &dest);
+ gdk_gc_set_clip_rectangle (dark_gc, &dest);
+
+ n_lines = (!strcmp (detail, "paned")) ? 21 : 11;
+
+ if (orientation == GTK_ORIENTATION_VERTICAL)
+ {
+ h = width - 2 * xthick;
+ h = MAX (3, h - 6);
+
+ xx = x + (width - h) / 2;
+ offset = (height - 2*ythick - 2*n_lines)/2 + 1;
+ if (offset < 0)
+ offset = 0;
+
+ for (i = 0, yy = y + ythick + offset; yy <= (y + height - ythick - 1) && i < n_lines; yy += 2, i++)
+ {
+ gdk_draw_line (window, dark_gc, xx, yy, xx + h, yy);
+ gdk_draw_line (window, light_gc, xx, yy + 1, xx + h, yy + 1);
+ }
+ }
+ else
+ {
+ h = height - 2 * ythick;
+ h = MAX (3, h - 6);
+
+ yy = y + (height - h) / 2;
+ offset = (width - 2*xthick - 2*n_lines)/2 + 1;
+ if (offset < 0)
+ offset = 0;
+
+ for (i = 0, xx = x + xthick + offset; i < n_lines; xx += 2, i++)
+ {
+ gdk_draw_line (window, dark_gc, xx, yy, xx, yy + h);
+ gdk_draw_line (window, light_gc, xx + 1, yy, xx + 1, yy + h);
+ }
+ }
+
+ gdk_gc_set_clip_rectangle (light_gc, NULL);
+ gdk_gc_set_clip_rectangle (dark_gc, NULL);
+}
+
+/**************************************************************************/
+
+static void
+draw_box (DRAW_ARGS)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ CLRectangle r;
+ gboolean false_size = FALSE;
+
+#ifdef DEBUG
+ printf("draw_box: %s %d %d %d %d\n", detail, x, y, width, height);
+#endif
+
+ g_return_if_fail (style != NULL);
+ g_return_if_fail (window != NULL);
+
+ if (width == -1 || height == -1)
+ false_size = TRUE;
+
+ if ((width == -1) && (height == -1))
+ gdk_window_get_size (window, &width, &height);
+ else if (width == -1)
+ gdk_window_get_size (window, &width, NULL);
+ else if (height == -1)
+ gdk_window_get_size (window, NULL, &height);
+
+ cl_rectangle_reset (&r, style);
+
+ if (widget == NULL)
+ return;
+
+ /* listview headers */
+ if (widget && DETAIL ("button") && widget->parent &&
+ (GTK_IS_TREE_VIEW(widget->parent) ||
+ GTK_IS_CLIST (widget->parent) ||
+ strcmp(G_OBJECT_TYPE_NAME (widget->parent), "ETree") == 0))
+ {
+ cl_draw_treeview_header (style, window, state_type, shadow_type,
+ area, widget, detail, x, y, width, height);
+ }
+ else if (detail && (!strcmp (detail, "button") ||
+ !strcmp (detail, "buttondefault")))
+ {
+ if (GTK_IS_COMBO_BOX_ENTRY(widget->parent) || GTK_IS_COMBO(widget->parent))
+ {
+ cl_draw_combobox_button (style, window, state_type, shadow_type,
+ area, widget,
+ detail, x, y, width, height);
+ }
+ else
+ {
+ cl_draw_button (style, window, state_type, shadow_type, area, widget,
+ detail, x, y, width, height);
+ }
+ }
+ else if (detail && (
+ !strcmp (detail, "spinbutton_up") ||
+ !strcmp (detail, "spinbutton_down") ||
+ !strcmp (detail, "spinbutton")))
+ {
+ cl_draw_spinbutton (style, window, state_type, shadow_type, area,
+ widget, detail, x, y, width, height);
+ }
+ else if (detail && (
+ !strcmp (detail, "hscale") || !strcmp (detail, "vscale")))
+ {
+ cl_rectangle_set_button (&r, style, state_type,
+ GTK_WIDGET_HAS_DEFAULT (widget), GTK_WIDGET_HAS_FOCUS (widget),
+ CL_CORNER_ROUND, CL_CORNER_ROUND,
+ CL_CORNER_ROUND, CL_CORNER_ROUND);
+
+ if (!strcmp (detail, "hscale") || !strcmp (detail, "vscale"))
+ {
+ r.fill_gradient.to = &clearlooks_style->shade[2];
+ r.bottomright = clearlooks_style->shade_gc[2];
+ }
+
+ cl_set_corner_sharpness (detail, widget, &r);
+
+ if (!strcmp (detail, "spinbutton_up"))
+ {
+ r.border_gradient.to = r.border_gradient.from;
+ height++;
+ gtk_style_apply_default_background (style, window, FALSE, state_type,
+ area, x, y, width, height);
+ }
+ else if (!strcmp (detail, "spinbutton_down"))
+ {
+ r.border_gradient.to = r.border_gradient.from;
+ gtk_style_apply_default_background (style, window, FALSE, state_type,
+ area, x, y, width, height);
+ }
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x+1, y+1, width-2, height-2, &r);
+ cl_draw_shadow (window, widget, style, x+1, y+1, width-2, height-2, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+ }
+ else if (DETAIL ("trough") && GTK_IS_PROGRESS_BAR (widget))
+ {
+ GdkPoint points[4] = { {x,y}, {x+width-1,y}, {x,y+height-1}, {x+width-1,y+height-1} };
+
+ gdk_draw_points (window, style->bg_gc[state_type], points, 4);
+
+ r.bordergc = clearlooks_style->shade_gc[5];
+ r.fillgc = clearlooks_style->shade_gc[2];
+
+ cl_rectangle_set_corners (&r, CL_CORNER_NARROW, CL_CORNER_NARROW,
+ CL_CORNER_NARROW, CL_CORNER_NARROW);
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+ }
+ else if (DETAIL ("trough") &&
+ (GTK_IS_VSCALE (widget) || GTK_IS_HSCALE (widget)))
+ {
+ GdkGC *inner = clearlooks_style->shade_gc[3],
+ *outer = clearlooks_style->shade_gc[5],
+ *shadow = clearlooks_style->shade_gc[4];
+ GdkColor upper_color = *clearlooks_get_spot_color (CLEARLOOKS_RC_STYLE (style->rc_style)),
+ lower_color;
+
+ GtkAdjustment *adjustment = gtk_range_get_adjustment (GTK_RANGE (widget));
+
+ GtkOrientation orientation = GTK_RANGE (widget)->orientation;
+
+ gint fill_size = (orientation ? height : width) *
+ (1 / ((adjustment->upper - adjustment->lower) /
+ (adjustment->value - adjustment->lower)));
+
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ y += (height - SCALE_SIZE) / 2;
+ height = SCALE_SIZE;
+ }
+ else
+ {
+ x += (width - SCALE_SIZE) / 2;
+ width = SCALE_SIZE;
+ }
+
+ if (state_type == GTK_STATE_INSENSITIVE)
+ {
+ outer = clearlooks_style->shade_gc[4];
+ inner = clearlooks_style->shade_gc[2];
+ shadow = clearlooks_style->shade_gc[3];
+ }
+
+ cl_rectangle_init (&r, inner, outer, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_NONE, CL_CORNER_NONE );
+
+ r.topleft = shadow;
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+
+ /* DRAW FILL */
+ shade (&upper_color, &lower_color, 1.3);
+
+ r.bordergc = clearlooks_style->spot3_gc;
+ r.fillgc = style->bg_gc[state_type];
+
+ r.gradient_type = (orientation == GTK_ORIENTATION_HORIZONTAL ) ? CL_GRADIENT_VERTICAL
+ : CL_GRADIENT_HORIZONTAL;
+
+ cl_rectangle_set_gradient (&r.fill_gradient, &upper_color, &lower_color);
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ if (orientation == GTK_ORIENTATION_HORIZONTAL && fill_size > 1)
+ {
+ if (gtk_range_get_inverted(GTK_RANGE(widget)) != (get_direction(widget) == GTK_TEXT_DIR_RTL))
+ cl_draw_rectangle (window, widget, style, x+width-fill_size, y, fill_size, height, &r);
+ else
+ cl_draw_rectangle (window, widget, style, x, y, fill_size, height, &r);
+ }
+ else if (fill_size > 1)
+ {
+ if (gtk_range_get_inverted (GTK_RANGE (widget)))
+ cl_draw_rectangle (window, widget, style, x, y+height-fill_size, width, fill_size, &r);
+ else
+ cl_draw_rectangle (window, widget, style, x, y, width, fill_size, &r);
+ }
+ cl_rectangle_reset_clip_rectangle (&r);
+ }
+ else if (DETAIL ("trough"))
+ {
+ GdkGC *inner = clearlooks_style->shade_gc[3],
+ *outer = clearlooks_style->shade_gc[5];
+
+ cl_rectangle_init (&r, inner, outer, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_NONE, CL_CORNER_NONE );
+
+ if (GTK_RANGE (widget)->orientation == GTK_ORIENTATION_VERTICAL)
+ {
+ y+=1;
+ height-=2;
+ }
+ else
+ {
+ x+=1;
+ width-=2;
+ }
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+ }
+ else if (detail && (!strcmp (detail, "vscrollbar") ||
+ !strcmp (detail, "hscrollbar") ||
+ !strcmp (detail, "stepper")))
+ {
+ ClScrollButtonType button_type = CL_SCROLLBUTTON_OTHER;
+ gboolean horizontal = TRUE;
+
+ if (GTK_IS_VSCROLLBAR(widget))
+ {
+ if (y == widget->allocation.y)
+ button_type = CL_SCROLLBUTTON_BEGIN;
+ else if (y+height == widget->allocation.y+widget->allocation.height)
+ button_type = CL_SCROLLBUTTON_END;
+
+ horizontal = FALSE;
+ }
+ else if (GTK_IS_HSCROLLBAR(widget))
+ {
+ if (x == widget->allocation.x)
+ button_type = CL_SCROLLBUTTON_BEGIN;
+ else if (x+width == widget->allocation.x+widget->allocation.width)
+ button_type = CL_SCROLLBUTTON_END;
+ }
+
+ cl_rectangle_set_button (&r, style, state_type, FALSE, FALSE, 0,0,0,0);
+
+ cl_rectangle_set_gradient (&r.fill_gradient, NULL, NULL);
+ cl_rectangle_set_gradient (&r.fill_gradient, &clearlooks_style->inset_light[state_type],
+ &clearlooks_style->inset_dark[state_type]);
+
+
+ r.gradient_type = horizontal ? CL_GRADIENT_VERTICAL
+ : CL_GRADIENT_HORIZONTAL;
+
+ r.bottomright = clearlooks_style->shade_gc[1];
+ r.border_gradient.to = r.border_gradient.from;
+
+ if (button_type == CL_SCROLLBUTTON_OTHER)
+ {
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+ }
+ else if (button_type == CL_SCROLLBUTTON_BEGIN)
+ {
+ if (horizontal)
+ cl_rectangle_set_corners (&r, CL_CORNER_ROUND, CL_CORNER_NONE,
+ CL_CORNER_ROUND, CL_CORNER_NONE);
+ else
+ cl_rectangle_set_corners (&r, CL_CORNER_ROUND, CL_CORNER_ROUND,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+ }
+ else
+ {
+ if (horizontal)
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_ROUND,
+ CL_CORNER_NONE, CL_CORNER_ROUND);
+ else
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_ROUND, CL_CORNER_ROUND);
+ }
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+
+ }
+ else if (DETAIL ("slider"))
+ {
+ if (DETAIL("slider") && widget && GTK_IS_RANGE (widget))
+ {
+ GtkAdjustment *adj = GTK_RANGE (widget)->adjustment;
+
+ if (adj->value <= adj->lower &&
+ (GTK_RANGE (widget)->has_stepper_a || GTK_RANGE (widget)->has_stepper_b))
+ {
+ if (GTK_IS_VSCROLLBAR (widget))
+ {
+ y-=1;
+ height+=1;
+ }
+ else if (GTK_IS_HSCROLLBAR (widget))
+ {
+ x-=1;
+ width+=1;
+ }
+ }
+ if (adj->value >= adj->upper - adj->page_size &&
+ (GTK_RANGE (widget)->has_stepper_c || GTK_RANGE (widget)->has_stepper_d))
+ {
+ if (GTK_IS_VSCROLLBAR (widget))
+ height+=1;
+ else if (GTK_IS_HSCROLLBAR (widget))
+ width+=1;
+ }
+ }
+
+ cl_rectangle_set_button (&r, style, state_type, FALSE, GTK_WIDGET_HAS_FOCUS (widget),
+ CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+
+ r.gradient_type = GTK_IS_HSCROLLBAR (widget) ? CL_GRADIENT_VERTICAL
+ : CL_GRADIENT_HORIZONTAL;
+
+ cl_rectangle_set_gradient (&r.fill_gradient, &clearlooks_style->inset_light[state_type],
+ &clearlooks_style->inset_dark[state_type]);
+
+ r.bottomright = clearlooks_style->shade_gc[1];
+ r.border_gradient.to = r.border_gradient.from;
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+ }
+ else if (detail && !strcmp (detail, "optionmenu")) /* supporting deprecated */
+ {
+ cl_draw_optionmenu(style, window, state_type, shadow_type, area, widget, detail, x, y, width, height);
+ }
+ else if (DETAIL ("menuitem"))
+ {
+ if (clearlooks_style->menuitemstyle == 0)
+ {
+ cl_draw_menuitem_flat (window, widget, style, area, state_type,
+ x, y, width, height, &r);
+ }
+ else if (clearlooks_style->menuitemstyle == 1)
+ {
+ cl_draw_menuitem_gradient (window, widget, style, area, state_type,
+ x, y, width, height, &r);
+ }
+ else
+ {
+ cl_draw_menuitem_button (window, widget, style, area, state_type,
+ x, y, width, height, &r);
+ }
+ }
+ else if (DETAIL ("menubar") && (clearlooks_style->sunkenmenubar || clearlooks_style->menubarstyle > 0))
+ {
+ GdkGC *dark = clearlooks_style->shade_gc[2];
+ GdkColor upper_color, lower_color;
+
+ /* don't draw sunken menubar on gnome panel
+ IT'S A HACK! HORRIBLE HACK! HIDEOUS HACK!
+ BUT IT WORKS FOR ME(tm)! */
+ if (widget->parent &&
+ strcmp(G_OBJECT_TYPE_NAME (widget->parent), "PanelWidget") == 0)
+ return;
+
+ shade(&style->bg[state_type], &upper_color, 1.0);
+ shade(&style->bg[state_type], &lower_color, 0.95);
+
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+
+ r.fillgc = style->bg_gc[state_type];
+ r.bordergc = clearlooks_style->shade_gc[2];
+ r.gradient_type = CL_GRADIENT_VERTICAL;
+
+ cl_rectangle_set_gradient (&r.border_gradient, &clearlooks_style->shade[2],
+ &clearlooks_style->shade[3]);
+ cl_rectangle_set_gradient (&r.fill_gradient, &upper_color, &lower_color);
+
+ /* make vertical and top borders invisible for style 2 */
+ if (clearlooks_style->menubarstyle == 2) {
+ x--; width+=2;
+ y--; height+=1;
+ }
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+ }
+ else if (DETAIL ("menu") && widget->parent &&
+ GDK_IS_WINDOW (widget->parent->window))
+ {
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+
+ r.bordergc = clearlooks_style->border_gc[CL_BORDER_UPPER];
+ r.topleft = style->light_gc[state_type];
+ r.bottomright = clearlooks_style->shade_gc[1];
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+
+ return;
+ }
+ else if (DETAIL ("bar") && widget && GTK_IS_PROGRESS_BAR (widget))
+ {
+ GdkColor upper_color = *clearlooks_get_spot_color (CLEARLOOKS_RC_STYLE (style->rc_style)),
+ lower_color,
+ prev_foreground;
+ gboolean activity_mode = GTK_PROGRESS (widget)->activity_mode;
+
+#ifdef HAVE_ANIMATION
+ if (!activity_mode && gtk_progress_bar_get_fraction (widget) != 1.0 &&
+ !cl_progressbar_known((gconstpointer)widget))
+ {
+ cl_progressbar_add ((gpointer)widget);
+ }
+#endif
+ cl_progressbar_fill (window, widget, style, style->black_gc,
+ x, y, width, height,
+#ifdef HAVE_ANIMATION
+ activity_mode ? 0 : pboffset,
+#else
+ 0,
+#endif
+ area);
+
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+
+ r.bordergc = clearlooks_style->spot3_gc;
+ r.topleft = clearlooks_style->spot2_gc;
+
+ prev_foreground = cl_gc_set_fg_color_shade (clearlooks_style->spot2_gc,
+ style->colormap,
+ &clearlooks_style->spot2,
+ 1.2);
+
+ cl_rectangle_set_clip_rectangle (&r, area);
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+ cl_rectangle_reset_clip_rectangle (&r);
+
+ gdk_gc_set_foreground (clearlooks_style->spot2_gc, &prev_foreground);
+ }
+
+ else if ( widget && (DETAIL ("menubar") || DETAIL ("toolbar") || DETAIL ("dockitem_bin") || DETAIL ("handlebox_bin")) && shadow_type != GTK_SHADOW_NONE) /* Toolbars and menus */
+ {
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[0], area);
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[3], area);
+ }
+
+ gtk_style_apply_default_background (style, window,
+ widget && !GTK_WIDGET_NO_WINDOW (widget),
+ state_type, area, x, y, width, height);
+
+ /* we only want the borders on horizontal toolbars */
+ if ( DETAIL ("menubar") || height < 2*width ) {
+ if (!DETAIL ("menubar"))
+ gdk_draw_line (window, clearlooks_style->shade_gc[0],
+ x, y, x + width, y); /* top */
+
+ gdk_draw_line (window, clearlooks_style->shade_gc[3],
+ x, y + height - 1, x + width, y + height - 1); /* bottom */
+ }
+
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[0], NULL);
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[3], NULL);
+ }
+ }
+ else
+ {
+ parent_class->draw_box (style, window, state_type, shadow_type, area,
+ widget, detail, x, y, width, height);
+ }
+}
+
+/**************************************************************************/
+
+static void
+ensure_check_pixmaps (GtkStyle *style,
+ GtkStateType state,
+ GdkScreen *screen,
+ gboolean treeview)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ ClearlooksRcStyle *clearlooks_rc = CLEARLOOKS_RC_STYLE (style->rc_style);
+ GdkPixbuf *check, *base, *inconsistent, *composite;
+ GdkColor *spot_color = clearlooks_get_spot_color (clearlooks_rc);
+
+ if (clearlooks_style->check_pixmap_nonactive[state] != NULL)
+ return;
+
+ if (state == GTK_STATE_ACTIVE || state == GTK_STATE_SELECTED) {
+ check = generate_bit (check_alpha, &style->text[GTK_STATE_NORMAL], 1.0);
+ inconsistent = generate_bit (check_inconsistent_alpha, &style->text[GTK_STATE_NORMAL], 1.0);
+ } else {
+ check = generate_bit (check_alpha, &style->text[state], 1.0);
+ inconsistent = generate_bit (check_inconsistent_alpha, &style->text[state], 1.0);
+ }
+
+ if (state == GTK_STATE_ACTIVE && !treeview)
+ base = generate_bit (check_base_alpha, &style->bg[state], 1.0);
+ else
+ base = generate_bit (check_base_alpha, &style->base[GTK_STATE_NORMAL], 1.0);
+
+ if (treeview)
+ composite = generate_bit (NULL, &clearlooks_style->shade[6], 1.0);
+ else
+ composite = generate_bit (NULL, &clearlooks_style->shade[5], 1.0);
+
+ gdk_pixbuf_composite (base, composite,
+ 0, 0, RADIO_SIZE, RADIO_SIZE, 0, 0,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 255);
+
+ clearlooks_style->check_pixmap_nonactive[state] =
+ pixbuf_to_pixmap (style, composite, screen);
+
+ gdk_pixbuf_composite (check, composite,
+ 0, 0, RADIO_SIZE, RADIO_SIZE, 0, 0,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 255);
+
+ clearlooks_style->check_pixmap_active[state] =
+ pixbuf_to_pixmap (style, composite, screen);
+
+ g_object_unref (composite);
+
+ composite = generate_bit (NULL, &clearlooks_style->shade[6], 1.0);
+
+ gdk_pixbuf_composite (base, composite,
+ 0, 0, RADIO_SIZE, RADIO_SIZE, 0, 0,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 255);
+
+ gdk_pixbuf_composite (inconsistent, composite,
+ 0, 0, RADIO_SIZE, RADIO_SIZE, 0, 0,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 255);
+
+ clearlooks_style->check_pixmap_inconsistent[state] =
+ pixbuf_to_pixmap (style, composite, screen);
+
+ g_object_unref (composite);
+ g_object_unref (base);
+ g_object_unref (check);
+ g_object_unref (inconsistent);
+}
+
+static void
+draw_check (DRAW_ARGS)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ GdkGC *gc = style->base_gc[state_type];
+ GdkPixmap *pixmap;
+ gboolean treeview;
+
+ if (DETAIL ("check")) /* Menu item */
+ {
+ parent_class->draw_check (style, window, state_type, shadow_type, area,
+ widget, detail, x, y, width, height);
+ return;
+ }
+
+ treeview = widget && GTK_IS_TREE_VIEW(widget);
+ ensure_check_pixmaps (style, state_type, gtk_widget_get_screen (widget), treeview);
+
+ if (area)
+ gdk_gc_set_clip_rectangle (gc, area);
+
+ if (shadow_type == GTK_SHADOW_IN)
+ pixmap = clearlooks_style->check_pixmap_active[state_type];
+ else if (shadow_type == GTK_SHADOW_ETCHED_IN) /* inconsistent */
+ pixmap = clearlooks_style->check_pixmap_inconsistent[state_type];
+ else
+ pixmap = clearlooks_style->check_pixmap_nonactive[state_type];
+
+ x += (width - CHECK_SIZE)/2;
+ y += (height - CHECK_SIZE)/2;
+
+ gdk_draw_drawable (window, gc, pixmap, 0, 0, x, y, CHECK_SIZE, CHECK_SIZE);
+
+ if (area)
+ gdk_gc_set_clip_rectangle (gc, NULL);
+}
+
+/**************************************************************************/
+static void
+draw_slider (DRAW_ARGS, GtkOrientation orientation)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ GdkGC *shade_gc = clearlooks_style->shade_gc[4];
+ GdkGC *white_gc = clearlooks_style->shade_gc[0];
+ int x1, y1;
+
+#if DEBUG
+ printf("draw_slider: %s %d %d %d %d\n", detail, x, y, width, height);
+#endif
+
+ g_return_if_fail (GTK_IS_STYLE (style));
+ g_return_if_fail (window != NULL);
+
+ sanitize_size (window, &width, &height);
+
+ gtk_paint_box (style, window, state_type, shadow_type,
+ area, widget, detail, x, y, width, height);
+
+ if ((orientation == GTK_ORIENTATION_VERTICAL && height < 20) ||
+ (orientation == GTK_ORIENTATION_HORIZONTAL && width < 20))
+ return;
+
+ if (detail && strcmp ("slider", detail) == 0)
+ {
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (shade_gc, area);
+ gdk_gc_set_clip_rectangle (white_gc, area);
+ }
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ x1 = x + width / 2 - 4;
+ y1 = y + (height - 6) / 2;
+ gdk_draw_line (window, shade_gc, x1, y1, x1, y1 + 6);
+ gdk_draw_line (window, white_gc, x1 + 1, y1, x1 + 1, y1 + 6);
+ gdk_draw_line (window, shade_gc, x1 + 3, y1, x1 + 3, y1 + 6);
+ gdk_draw_line (window, white_gc, x1 + 3 + 1, y1, x1 + 3 + 1, y1 + 6);
+ gdk_draw_line (window, shade_gc, x1 + 3*2, y1, x1 + 3*2, y1 + 6);
+ gdk_draw_line (window, white_gc, x1 + 3*2 + 1, y1, x1 + 3*2 + 1, y1 + 6);
+ }
+ else
+ {
+ x1 = x + (width - 6) / 2;
+ y1 = y + height / 2 - 4;
+ gdk_draw_line (window, shade_gc, x1 + 6, y1, x1, y1);
+ gdk_draw_line (window, white_gc, x1 + 6, y1 + 1, x1, y1 + 1);
+ gdk_draw_line (window, shade_gc, x1 + 6, y1 + 3, x1, y1 + 3);
+ gdk_draw_line (window, white_gc, x1 + 6, y1 + 3 + 1, x1, y1 + 3 + 1);
+ gdk_draw_line (window, shade_gc, x1 + 6, y1 + 3*2, x1, y1 + 3*2);
+ gdk_draw_line (window, white_gc, x1 + 6, y1 + 3*2 + 1, x1, y1 + 3*2 + 1);
+ }
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (shade_gc, NULL);
+ gdk_gc_set_clip_rectangle (white_gc, NULL);
+ }
+ }
+ else if (detail && (strcmp ("hscale", detail) == 0 || strcmp ("vscale", detail) == 0))
+ {
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (shade_gc, area);
+ gdk_gc_set_clip_rectangle (white_gc, area);
+ }
+
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ x1 = x + width / 2 - 3;
+ y1 = y + (height - 7) / 2;
+ gdk_draw_line (window, shade_gc, x1 + 0, y1 + 5, x1 + 0, y1 + 1);
+ gdk_draw_line (window, white_gc, x1 + 1, y1 + 5, x1 + 1, y1 + 1);
+ gdk_draw_line (window, shade_gc, x1 + 3, y1 + 5, x1 + 3, y1 + 1);
+ gdk_draw_line (window, white_gc, x1 + 4, y1 + 5, x1 + 4, y1 + 1);
+ gdk_draw_line (window, shade_gc, x1 + 6, y1 + 5, x1 + 6, y1 + 1);
+ gdk_draw_line (window, white_gc, x1 + 7, y1 + 5, x1 + 7, y1 + 1);
+ }
+ else
+ {
+ x1 = x + (width - 7) / 2;
+ y1 = y + height / 2 - 3;
+ gdk_draw_line (window, shade_gc, x1 + 5, y1 + 0, x1 + 1, y1 + 0);
+ gdk_draw_line (window, white_gc, x1 + 5, y1 + 1, x1 + 1, y1 + 1);
+ gdk_draw_line (window, shade_gc, x1 + 5, y1 + 3, x1 + 1, y1 + 3);
+ gdk_draw_line (window, white_gc, x1 + 5, y1 + 4, x1 + 1, y1 + 4);
+ gdk_draw_line (window, shade_gc, x1 + 5, y1 + 6, x1 + 1, y1 + 6);
+ gdk_draw_line (window, white_gc, x1 + 5, y1 + 7, x1 + 1, y1 + 7);
+ }
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (shade_gc, NULL);
+ gdk_gc_set_clip_rectangle (white_gc, NULL);
+ }
+ }
+}
+
+/**************************************************************************/
+static void
+ensure_radio_pixmaps (GtkStyle *style,
+ GtkStateType state,
+ GdkScreen *screen)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ ClearlooksRcStyle *clearlooks_rc = CLEARLOOKS_RC_STYLE (style->rc_style);
+ GdkPixbuf *dot, *circle, *outline, *inconsistent, *composite;
+ GdkColor *spot_color = clearlooks_get_spot_color (clearlooks_rc);
+ GdkColor *composite_color;
+
+ if (clearlooks_style->radio_pixmap_nonactive[state] != NULL)
+ return;
+
+ if (state == GTK_STATE_ACTIVE || state == GTK_STATE_SELECTED) {
+ dot = colorize_bit (dot_intensity, dot_alpha, &style->text[GTK_STATE_NORMAL]);
+ inconsistent = generate_bit (inconsistent_alpha, &style->text[GTK_STATE_NORMAL], 1.0);
+ } else {
+ dot = colorize_bit (dot_intensity, dot_alpha, &style->text[state]);
+ inconsistent = generate_bit (inconsistent_alpha, &style->text[state], 1.0);
+ }
+
+ outline = generate_bit (outline_alpha, &clearlooks_style->shade[5], 1.0);
+
+ if (clearlooks_style->radio_pixmap_mask == NULL)
+ {
+ gdk_pixbuf_render_pixmap_and_mask (outline,
+ NULL,
+ &clearlooks_style->radio_pixmap_mask,
+ 1);
+ }
+
+ if (state == GTK_STATE_ACTIVE)
+ {
+ composite_color = &style->bg[GTK_STATE_PRELIGHT];
+ circle = generate_bit (circle_alpha, &style->bg[state], 1.0);
+ }
+ else
+ {
+ composite_color = &style->bg[state];
+ circle = generate_bit (circle_alpha, &style->base[GTK_STATE_NORMAL], 1.0);
+ }
+
+ composite = generate_bit (NULL, composite_color, 1.0);
+
+ gdk_pixbuf_composite (outline, composite,
+ 0, 0, RADIO_SIZE, RADIO_SIZE, 0, 0,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 255);
+
+ gdk_pixbuf_composite (circle, composite,
+ 0, 0, RADIO_SIZE, RADIO_SIZE, 0, 0,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 255);
+
+ clearlooks_style->radio_pixmap_nonactive[state] =
+ pixbuf_to_pixmap (style, composite, screen);
+
+ gdk_pixbuf_composite (dot, composite,
+ 0, 0, RADIO_SIZE, RADIO_SIZE, 0, 0,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 255);
+
+ clearlooks_style->radio_pixmap_active[state] =
+ pixbuf_to_pixmap (style, composite, screen);
+
+ g_object_unref (composite);
+
+ composite = generate_bit (NULL, composite_color,1.0);
+
+ gdk_pixbuf_composite (outline, composite,
+ 0, 0, RADIO_SIZE, RADIO_SIZE, 0, 0,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 255);
+ gdk_pixbuf_composite (circle, composite,
+ 0, 0, RADIO_SIZE, RADIO_SIZE, 0, 0,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 255);
+ gdk_pixbuf_composite (inconsistent, composite,
+ 0, 0, RADIO_SIZE, RADIO_SIZE, 0, 0,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 255);
+
+ clearlooks_style->radio_pixmap_inconsistent[state] =
+ pixbuf_to_pixmap (style, composite, screen);
+
+ g_object_unref (composite);
+ g_object_unref (circle);
+ g_object_unref (dot);
+ g_object_unref (inconsistent);
+ g_object_unref (outline);
+}
+
+static void
+draw_option (DRAW_ARGS)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ GdkGC *gc = style->base_gc[state_type];
+ GdkPixmap *pixmap;
+
+ if (DETAIL ("option")) /* Menu item */
+ {
+ parent_class->draw_option (style, window, state_type, shadow_type,
+ area, widget, detail, x, y, width, height);
+ return;
+ }
+
+ ensure_radio_pixmaps (style, state_type, gtk_widget_get_screen (widget));
+
+ if (area)
+ gdk_gc_set_clip_rectangle (gc, area);
+
+ if (shadow_type == GTK_SHADOW_IN)
+ pixmap = clearlooks_style->radio_pixmap_active[state_type];
+ else if (shadow_type == GTK_SHADOW_ETCHED_IN) /* inconsistent */
+ pixmap = clearlooks_style->radio_pixmap_inconsistent[state_type];
+ else
+ pixmap = clearlooks_style->radio_pixmap_nonactive[state_type];
+
+ x += (width - RADIO_SIZE)/2;
+ y += (height - RADIO_SIZE)/2;
+
+#ifndef GTKOSX
+ gdk_gc_set_clip_mask (gc, clearlooks_style->radio_pixmap_mask);
+ gdk_gc_set_clip_origin (gc, x, y);
+#endif
+
+ gdk_draw_drawable (window, gc, pixmap, 0, 0, x, y,
+ RADIO_SIZE, RADIO_SIZE);
+
+#ifndef GTKOSX
+ gdk_gc_set_clip_origin (gc, 0, 0);
+ gdk_gc_set_clip_mask (gc, NULL);
+#endif
+
+ if (area)
+ gdk_gc_set_clip_rectangle (gc, NULL);
+}
+
+/**************************************************************************/
+
+static void
+draw_shadow_gap (DRAW_ARGS,
+ GtkPositionType gap_side,
+ gint gap_x,
+ gint gap_width)
+{
+ /* I need to improve this function. */
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ CLRectangle r;
+ GdkRegion *area_region = NULL,
+ *gap_region = NULL;
+
+#if DEBUG
+ printf("draw_shadow_gap: %s %d %d %d %d\n", detail, x, y, width, height);
+#endif
+
+ g_return_if_fail (GTK_IS_STYLE (style));
+ g_return_if_fail (window != NULL);
+
+ sanitize_size (window, &width, &height);
+
+ cl_rectangle_reset (&r, style);
+ cl_rectangle_set_corners (&r, CL_CORNER_NONE, CL_CORNER_NONE,
+ CL_CORNER_NONE, CL_CORNER_NONE);
+
+ if (area)
+ {
+ area_region = gdk_region_rectangle (area);
+
+ switch (gap_side)
+ {
+ case GTK_POS_TOP:
+ {
+ GdkRectangle rect = { x+gap_x, y, gap_width, 2 };
+ gap_region = gdk_region_rectangle (&rect);
+ break;
+ }
+ case GTK_POS_BOTTOM:
+ {
+ GdkRectangle rect = { x+gap_x, y+height-2, gap_width, 2 };
+ gap_region = gdk_region_rectangle (&rect);
+ break;
+ }
+ case GTK_POS_LEFT:
+ {
+ GdkRectangle rect = { x, y+gap_x, 2, gap_width };
+ gap_region = gdk_region_rectangle (&rect);
+ break;
+ }
+ case GTK_POS_RIGHT:
+ {
+ GdkRectangle rect = { x+width-2, y+gap_x, 2, gap_width };
+ gap_region = gdk_region_rectangle (&rect);
+ break;
+ }
+ }
+
+ gdk_region_subtract (area_region, gap_region);
+ }
+
+ if (shadow_type == GTK_SHADOW_ETCHED_IN ||
+ shadow_type == GTK_SHADOW_ETCHED_OUT)
+ {
+ GdkGC *a;
+ GdkGC *b;
+
+ if (shadow_type == GTK_SHADOW_ETCHED_IN)
+ {
+ a = style->light_gc[state_type];
+ b = clearlooks_style->shade_gc[3];
+ }
+ else
+ {
+ a = clearlooks_style->shade_gc[3];
+ b = style->light_gc[state_type];
+ }
+
+ gdk_gc_set_clip_region (a, area_region);
+ gdk_gc_set_clip_region (b, area_region);
+
+ r.bordergc = a;
+ cl_draw_rectangle (window, widget, style, x+1, y+1, width-1, height-1, &r);
+
+ r.bordergc = b;
+ cl_draw_rectangle (window, widget, style, x, y, width-1, height-1, &r);
+
+ gdk_gc_set_clip_region (a, NULL);
+ gdk_gc_set_clip_region (b, NULL);
+ }
+ else if (shadow_type == GTK_SHADOW_IN || shadow_type == GTK_SHADOW_OUT)
+ {
+ r.topleft = (shadow_type == GTK_SHADOW_OUT) ? style->light_gc[state_type] : clearlooks_style->shade_gc[1];
+ r.bottomright = (shadow_type == GTK_SHADOW_OUT) ? clearlooks_style->shade_gc[1] : style->light_gc[state_type];
+ r.bordergc = clearlooks_style->shade_gc[5];
+
+ gdk_gc_set_clip_region (r.bordergc, area_region);
+ gdk_gc_set_clip_region (r.topleft, area_region);
+ gdk_gc_set_clip_region (r.bottomright, area_region);
+
+ cl_draw_rectangle (window, widget, style, x, y, width, height, &r);
+
+ cl_draw_shadow (window, widget, style, x, y, width, height, &r);
+
+ gdk_gc_set_clip_region (r.bordergc, NULL);
+ gdk_gc_set_clip_region (r.topleft, NULL);
+ gdk_gc_set_clip_region (r.bottomright, NULL);
+ }
+
+ if (area_region)
+ gdk_region_destroy (area_region);
+}
+
+/**************************************************************************/
+static void
+draw_hline (GtkStyle *style,
+ GdkWindow *window,
+ GtkStateType state_type,
+ GdkRectangle *area,
+ GtkWidget *widget,
+ const gchar *detail,
+ gint x1,
+ gint x2,
+ gint y)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+
+#if DEBUG
+ printf("draw_hline\n");
+#endif
+
+ g_return_if_fail (GTK_IS_STYLE (style));
+ g_return_if_fail (window != NULL);
+
+ if (area)
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[2], area);
+
+ if (detail && !strcmp (detail, "label"))
+ {
+ if (state_type == GTK_STATE_INSENSITIVE)
+ gdk_draw_line (window, style->light_gc[state_type], x1 + 1, y + 1, x2 + 1, y + 1);
+
+ gdk_draw_line (window, style->fg_gc[state_type], x1, y, x2, y);
+ }
+ else
+ {
+ gdk_draw_line (window, clearlooks_style->shade_gc[2], x1, y, x2, y);
+
+ /* if (DETAIL ("menuitem")) */
+ gdk_draw_line (window, clearlooks_style->shade_gc[0], x1, y+1, x2, y+1);
+ }
+
+ if (area)
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[2], NULL);
+}
+
+/**************************************************************************/
+static void
+draw_vline (GtkStyle *style,
+ GdkWindow *window,
+ GtkStateType state_type,
+ GdkRectangle *area,
+ GtkWidget *widget,
+ const gchar *detail,
+ gint y1,
+ gint y2,
+ gint x)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ gint thickness_light;
+ gint thickness_dark;
+
+#if DEBUG
+ printf("draw_vline\n");
+#endif
+
+ g_return_if_fail (GTK_IS_STYLE (style));
+ g_return_if_fail (window != NULL);
+
+ thickness_light = style->xthickness / 2;
+ thickness_dark = style->xthickness - thickness_light;
+
+ if (area)
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[2], area);
+
+ gdk_draw_line (window, clearlooks_style->shade_gc[2], x, y1, x, y2 - 1);
+ gdk_draw_line (window, clearlooks_style->shade_gc[0], x+1, y1, x+1, y2 - 1);
+
+ if (area)
+ gdk_gc_set_clip_rectangle (clearlooks_style->shade_gc[2], NULL);
+}
+
+/**************************************************************************/
+static void
+draw_focus (GtkStyle *style,
+ GdkWindow *window,
+ GtkStateType state_type,
+ GdkRectangle *area,
+ GtkWidget *widget,
+ const gchar *detail,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ GdkPoint points[5];
+ GdkGC *gc;
+ gboolean free_dash_list = FALSE;
+ gint line_width = 1;
+ gchar *dash_list = "\1\1";
+ gint dash_len;
+
+#if DEBUG
+ printf("draw_focus: %s %d %d %d %d\n", detail, x, y, width, height);
+#endif
+
+ gc = clearlooks_style->shade_gc[6];
+
+ if (widget)
+ {
+ gtk_widget_style_get (widget,
+ "focus-line-width", &line_width,
+ "focus-line-pattern", (gchar *)&dash_list,
+ NULL);
+
+ free_dash_list = TRUE;
+ }
+
+ sanitize_size (window, &width, &height);
+
+ if (area)
+ gdk_gc_set_clip_rectangle (gc, area);
+
+ gdk_gc_set_line_attributes (gc, line_width,
+ dash_list[0] ? GDK_LINE_ON_OFF_DASH : GDK_LINE_SOLID,
+ GDK_CAP_BUTT, GDK_JOIN_MITER);
+
+
+ if (detail && !strcmp (detail, "add-mode"))
+ {
+ if (free_dash_list)
+ g_free (dash_list);
+
+ dash_list = "\4\4";
+ free_dash_list = FALSE;
+ }
+
+ points[0].x = x + line_width / 2;
+ points[0].y = y + line_width / 2;
+ points[1].x = x + width - line_width + line_width / 2;
+ points[1].y = y + line_width / 2;
+ points[2].x = x + width - line_width + line_width / 2;
+ points[2].y = y + height - line_width + line_width / 2;
+ points[3].x = x + line_width / 2;
+ points[3].y = y + height - line_width + line_width / 2;
+ points[4] = points[0];
+
+ if (!dash_list[0])
+ {
+ gdk_draw_lines (window, gc, points, 5);
+ }
+ else
+ {
+ dash_len = strlen (dash_list);
+
+ if (dash_list[0])
+ gdk_gc_set_dashes (gc, 0, dash_list, dash_len);
+
+ gdk_draw_lines (window, gc, points, 3);
+
+ points[2].x += 1;
+
+ if (dash_list[0])
+ {
+ gint dash_pixels = 0;
+ gint i;
+
+ /* Adjust the dash offset for the bottom and left so we
+ * match up at the upper left.
+ */
+ for (i = 0; i < dash_len; i++)
+ dash_pixels += dash_list[i];
+
+ if (dash_len % 2 == 1)
+ dash_pixels *= 2;
+
+ gdk_gc_set_dashes (gc,
+ dash_pixels - (width + height - 2 * line_width) % dash_pixels,
+ dash_list, dash_len);
+ }
+
+ gdk_draw_lines (window, gc, points + 2, 3);
+ }
+
+ gdk_gc_set_line_attributes (gc, 0, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER);
+
+ if (area)
+ gdk_gc_set_clip_rectangle (gc, NULL);
+
+ if (free_dash_list)
+ g_free (dash_list);
+}
+
+static void
+draw_layout(GtkStyle * style,
+ GdkWindow * window,
+ GtkStateType state_type,
+ gboolean use_text,
+ GdkRectangle * area,
+ GtkWidget * widget,
+ const gchar * detail, gint x, gint y, PangoLayout * layout)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+
+ g_return_if_fail(GTK_IS_STYLE (style));
+ g_return_if_fail(window != NULL);
+
+ parent_class->draw_layout(style, window, state_type, use_text,
+ area, widget, detail, x, y, layout);
+
+
+}
+
+/**************************************************************************/
+static void
+draw_resize_grip (GtkStyle *style,
+ GdkWindow *window,
+ GtkStateType state_type,
+ GdkRectangle *area,
+ GtkWidget *widget,
+ const gchar *detail,
+ GdkWindowEdge edge,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ g_return_if_fail (GTK_IS_STYLE (style));
+ g_return_if_fail (window != NULL);
+
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (style->light_gc[state_type], area);
+ gdk_gc_set_clip_rectangle (style->dark_gc[state_type], area);
+ gdk_gc_set_clip_rectangle (style->bg_gc[state_type], area);
+ }
+
+ switch (edge)
+ {
+ case GDK_WINDOW_EDGE_NORTH_WEST:
+ /* make it square */
+ if (width < height)
+ {
+ height = width;
+ }
+ else if (height < width)
+ {
+ width = height;
+ }
+ break;
+ case GDK_WINDOW_EDGE_NORTH:
+ if (width < height)
+ {
+ height = width;
+ }
+ break;
+ case GDK_WINDOW_EDGE_NORTH_EAST:
+ /* make it square, aligning to top right */
+ if (width < height)
+ {
+ height = width;
+ }
+ else if (height < width)
+ {
+ x += (width - height);
+ width = height;
+ }
+ break;
+ case GDK_WINDOW_EDGE_WEST:
+ if (height < width)
+ {
+ width = height;
+ }
+ break;
+ case GDK_WINDOW_EDGE_EAST:
+ /* aligning to right */
+ if (height < width)
+ {
+ x += (width - height);
+ width = height;
+ }
+ break;
+ case GDK_WINDOW_EDGE_SOUTH_WEST:
+ /* make it square, aligning to bottom left */
+ if (width < height)
+ {
+ y += (height - width);
+ height = width;
+ }
+ else if (height < width)
+ {
+ width = height;
+ }
+ break;
+ case GDK_WINDOW_EDGE_SOUTH:
+ /* align to bottom */
+ if (width < height)
+ {
+ y += (height - width);
+ height = width;
+ }
+ break;
+ case GDK_WINDOW_EDGE_SOUTH_EAST:
+ /* make it square, aligning to bottom right */
+ if (width < height)
+ {
+ y += (height - width);
+ height = width;
+ }
+ else if (height < width)
+ {
+ x += (width - height);
+ width = height;
+ }
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ /* Clear background */
+ gtk_style_apply_default_background (style, window, FALSE,
+ state_type, area,
+ x, y, width, height);
+
+ switch (edge)
+ {
+ case GDK_WINDOW_EDGE_WEST:
+ case GDK_WINDOW_EDGE_EAST:
+ {
+ gint xi;
+
+ xi = x;
+
+ while (xi < x + width)
+ {
+ gdk_draw_line (window,
+ style->light_gc[state_type],
+ xi, y,
+ xi, y + height);
+
+ xi++;
+ gdk_draw_line (window,
+ clearlooks_style->shade_gc[4],
+ xi, y,
+ xi, y + height);
+
+ xi += 2;
+ }
+ }
+ break;
+ case GDK_WINDOW_EDGE_NORTH:
+ case GDK_WINDOW_EDGE_SOUTH:
+ {
+ gint yi;
+
+ yi = y;
+
+ while (yi < y + height)
+ {
+ gdk_draw_line (window,
+ style->light_gc[state_type],
+ x, yi,
+ x + width, yi);
+
+ yi++;
+ gdk_draw_line (window,
+ clearlooks_style->shade_gc[4],
+ x, yi,
+ x + width, yi);
+
+ yi+= 2;
+ }
+ }
+ break;
+ case GDK_WINDOW_EDGE_NORTH_WEST:
+ {
+ gint xi, yi;
+
+ xi = x + width;
+ yi = y + height;
+
+ while (xi > x + 3)
+ {
+ gdk_draw_line (window,
+ clearlooks_style->shade_gc[4],
+ xi, y,
+ x, yi);
+
+ --xi;
+ --yi;
+
+ gdk_draw_line (window,
+ style->light_gc[state_type],
+ xi, y,
+ x, yi);
+
+ xi -= 3;
+ yi -= 3;
+
+ }
+ }
+ break;
+ case GDK_WINDOW_EDGE_NORTH_EAST:
+ {
+ gint xi, yi;
+
+ xi = x;
+ yi = y + height;
+
+ while (xi < (x + width - 3))
+ {
+ gdk_draw_line (window,
+ style->light_gc[state_type],
+ xi, y,
+ x + width, yi);
+
+ ++xi;
+ --yi;
+
+ gdk_draw_line (window,
+ clearlooks_style->shade_gc[4],
+ xi, y,
+ x + width, yi);
+
+ xi += 3;
+ yi -= 3;
+ }
+ }
+ break;
+ case GDK_WINDOW_EDGE_SOUTH_WEST:
+ {
+ gint xi, yi;
+
+ xi = x + width;
+ yi = y;
+
+ while (xi > x + 3)
+ {
+ gdk_draw_line (window,
+ clearlooks_style->shade_gc[4],
+ x, yi,
+ xi, y + height);
+
+ --xi;
+ ++yi;
+
+ gdk_draw_line (window,
+ style->light_gc[state_type],
+ x, yi,
+ xi, y + height);
+
+ xi -= 3;
+ yi += 3;
+
+ }
+ }
+ break;
+
+ case GDK_WINDOW_EDGE_SOUTH_EAST:
+ {
+ gint xi, yi;
+
+ xi = x;
+ yi = y;
+
+ while (xi < (x + width - 3))
+ {
+ gdk_draw_line (window,
+ style->light_gc[state_type],
+ xi, y + height,
+ x + width, yi);
+
+ ++xi;
+ ++yi;
+
+ gdk_draw_line (window,
+ clearlooks_style->shade_gc[4],
+ xi, y + height,
+ x + width, yi);
+
+ xi += 3;
+ yi += 3;
+ }
+ }
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ if (area)
+ {
+ gdk_gc_set_clip_rectangle (style->light_gc[state_type], NULL);
+ gdk_gc_set_clip_rectangle (style->dark_gc[state_type], NULL);
+ gdk_gc_set_clip_rectangle (style->bg_gc[state_type], NULL);
+ }
+}
+
+/**************************************************************************/
+
+static void
+clearlooks_style_init_from_rc (GtkStyle * style,
+ GtkRcStyle * rc_style)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ GdkColor *spot_color;
+ double shades[] = {1.065, 0.93, 0.896, 0.85, 0.768, 0.665, 0.4, 0.205};
+ int i;
+ double contrast;
+
+ parent_class->init_from_rc (style, rc_style);
+
+ contrast = CLEARLOOKS_RC_STYLE (rc_style)->contrast;
+
+ clearlooks_style->sunkenmenubar = CLEARLOOKS_RC_STYLE (rc_style)->sunkenmenubar;
+ clearlooks_style->progressbarstyle = CLEARLOOKS_RC_STYLE (rc_style)->progressbarstyle;
+ clearlooks_style->menubarstyle = CLEARLOOKS_RC_STYLE (rc_style)->menubarstyle;
+ clearlooks_style->menuitemstyle = CLEARLOOKS_RC_STYLE (rc_style)->menuitemstyle;
+ clearlooks_style->listviewitemstyle = CLEARLOOKS_RC_STYLE (rc_style)->listviewitemstyle;
+
+ /* Lighter to darker */
+ for (i = 0; i < 8; i++)
+ {
+ shade (&style->bg[GTK_STATE_NORMAL], &clearlooks_style->shade[i],
+ (shades[i]-0.7) * contrast + 0.7);
+ }
+
+ spot_color = clearlooks_get_spot_color (CLEARLOOKS_RC_STYLE (rc_style));
+
+ clearlooks_style->spot_color = *spot_color;
+ shade (&clearlooks_style->spot_color, &clearlooks_style->spot1, 1.42);
+ shade (&clearlooks_style->spot_color, &clearlooks_style->spot2, 1.05);
+ shade (&clearlooks_style->spot_color, &clearlooks_style->spot3, 0.65);
+
+ shade (&style->bg[GTK_STATE_NORMAL], &clearlooks_style->border[CL_BORDER_UPPER], 0.5);
+ shade (&style->bg[GTK_STATE_NORMAL], &clearlooks_style->border[CL_BORDER_LOWER], 0.62);
+ shade (&style->bg[GTK_STATE_ACTIVE], &clearlooks_style->border[CL_BORDER_UPPER_ACTIVE], 0.5);
+ shade (&style->bg[GTK_STATE_ACTIVE], &clearlooks_style->border[CL_BORDER_LOWER_ACTIVE], 0.55);
+}
+
+static GdkGC *
+realize_color (GtkStyle * style,
+ GdkColor * color)
+{
+ GdkGCValues gc_values;
+
+ gdk_colormap_alloc_color (style->colormap, color, FALSE, TRUE);
+
+ gc_values.foreground = *color;
+
+ return gtk_gc_get (style->depth, style->colormap, &gc_values, GDK_GC_FOREGROUND);
+}
+
+static void
+clearlooks_style_realize (GtkStyle * style)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ int i;
+
+ parent_class->realize (style);
+
+ for (i = 0; i < 8; i++)
+ clearlooks_style->shade_gc[i] = realize_color (style, &clearlooks_style->shade[i]);
+
+ for (i=0; i < CL_BORDER_COUNT; i++)
+ clearlooks_style->border_gc[i] = realize_color (style, &clearlooks_style->border[i]);
+
+ clearlooks_style->spot1_gc = realize_color (style, &clearlooks_style->spot1);
+ clearlooks_style->spot2_gc = realize_color (style, &clearlooks_style->spot2);
+ clearlooks_style->spot3_gc = realize_color (style, &clearlooks_style->spot3);
+
+ /* set light inset color */
+ for (i=0; i<5; i++)
+ {
+ shade (&style->bg[i], &clearlooks_style->inset_dark[i], 0.93);
+ gdk_rgb_find_color (style->colormap, &clearlooks_style->inset_dark[i]);
+
+ shade (&style->bg[i], &clearlooks_style->inset_light[i], 1.055);
+ gdk_rgb_find_color (style->colormap, &clearlooks_style->inset_light[i]);
+
+ shade (&style->bg[i], &clearlooks_style->listview_bg[i], 1.015);
+ gdk_rgb_find_color (style->colormap, &clearlooks_style->listview_bg[i]);
+
+ /* CREATE GRADIENT FOR BUTTONS */
+ shade (&style->bg[i], &clearlooks_style->button_g1[i], 1.055);
+ gdk_rgb_find_color (style->colormap, &clearlooks_style->button_g1[i]);
+
+ shade (&style->bg[i], &clearlooks_style->button_g2[i], 1.005);
+ gdk_rgb_find_color (style->colormap, &clearlooks_style->button_g2[i]);
+
+ shade (&style->bg[i], &clearlooks_style->button_g3[i], 0.98);
+ gdk_rgb_find_color (style->colormap, &clearlooks_style->button_g3[i]);
+
+ shade (&style->bg[i], &clearlooks_style->button_g4[i], 0.91);
+ gdk_rgb_find_color (style->colormap, &clearlooks_style->button_g4[i]);
+ }
+
+}
+
+static void
+clearlooks_style_unrealize (GtkStyle * style)
+{
+ ClearlooksStyle *clearlooks_style = CLEARLOOKS_STYLE (style);
+ int i;
+
+ /* We don't free the colors, because we don't know if
+ * gtk_gc_release() actually freed the GC. FIXME - need
+ * a way of ref'ing colors explicitely so GtkGC can
+ * handle things properly.
+ */
+ for (i=0; i < 8; i++)
+ gtk_gc_release (clearlooks_style->shade_gc[i]);
+
+ gtk_gc_release (clearlooks_style->spot1_gc);
+ gtk_gc_release (clearlooks_style->spot2_gc);
+ gtk_gc_release (clearlooks_style->spot3_gc);
+
+ for (i = 0; i < 5; i++)
+ {
+ if (clearlooks_style->radio_pixmap_nonactive[i] != NULL)
+ {
+ g_object_unref (clearlooks_style->radio_pixmap_nonactive[i]);
+ clearlooks_style->radio_pixmap_nonactive[i] = NULL;
+ g_object_unref (clearlooks_style->radio_pixmap_active[i]);
+ clearlooks_style->radio_pixmap_active[i] = NULL;
+ g_object_unref (clearlooks_style->radio_pixmap_inconsistent[i]);
+ clearlooks_style->radio_pixmap_inconsistent[i] = NULL;
+ }
+
+ if (clearlooks_style->check_pixmap_nonactive[i] != NULL)
+ {
+ g_object_unref (clearlooks_style->check_pixmap_nonactive[i]);
+ clearlooks_style->check_pixmap_nonactive[i] = NULL;
+ g_object_unref (clearlooks_style->check_pixmap_active[i]);
+ clearlooks_style->check_pixmap_active[i] = NULL;
+ g_object_unref (clearlooks_style->check_pixmap_inconsistent[i]);
+ clearlooks_style->check_pixmap_inconsistent[i] = NULL;
+ }
+ }
+
+ if (clearlooks_style->radio_pixmap_mask != NULL)
+ g_object_unref (clearlooks_style->radio_pixmap_mask);
+
+ clearlooks_style->radio_pixmap_mask = NULL;
+
+ while (progressbars = g_list_first (progressbars))
+ cl_progressbar_remove (progressbars->data);
+
+ if (timer_id != 0)
+ {
+ g_source_remove(timer_id);
+ timer_id = 0;
+ }
+
+ parent_class->unrealize (style);
+}
+
+static GdkPixbuf *
+set_transparency (const GdkPixbuf *pixbuf, gdouble alpha_percent)
+{
+ GdkPixbuf *target;
+ guchar *data, *current;
+ guint x, y, rowstride, height, width;
+
+ g_return_val_if_fail (pixbuf != NULL, NULL);
+ g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
+
+ /* Returns a copy of pixbuf with it's non-completely-transparent pixels to
+ have an alpha level "alpha_percent" of their original value. */
+
+ target = gdk_pixbuf_add_alpha (pixbuf, FALSE, 0, 0, 0);
+
+ if (alpha_percent == 1.0)
+ return target;
+ width = gdk_pixbuf_get_width (target);
+ height = gdk_pixbuf_get_height (target);
+ rowstride = gdk_pixbuf_get_rowstride (target);
+ data = gdk_pixbuf_get_pixels (target);
+
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ /* The "4" is the number of chars per pixel, in this case, RGBA,
+ the 3 means "skip to the alpha" */
+ current = data + (y * rowstride) + (x * 4) + 3;
+ *(current) = (guchar) (*(current) * alpha_percent);
+ }
+ }
+
+ return target;
+}
+
+static GdkPixbuf*
+scale_or_ref (GdkPixbuf *src,
+ int width,
+ int height)
+{
+ if (width == gdk_pixbuf_get_width (src) &&
+ height == gdk_pixbuf_get_height (src)) {
+ return g_object_ref (src);
+ } else {
+ return gdk_pixbuf_scale_simple (src,
+ width, height,
+ GDK_INTERP_BILINEAR);
+ }
+}
+
+static GdkPixbuf *
+render_icon (GtkStyle *style,
+ const GtkIconSource *source,
+ GtkTextDirection direction,
+ GtkStateType state,
+ GtkIconSize size,
+ GtkWidget *widget,
+ const char *detail)
+{
+ int width = 1;
+ int height = 1;
+ GdkPixbuf *scaled;
+ GdkPixbuf *stated;
+ GdkPixbuf *base_pixbuf;
+ GdkScreen *screen;
+ GtkSettings *settings;
+
+ /* Oddly, style can be NULL in this function, because
+ * GtkIconSet can be used without a style and if so
+ * it uses this function.
+ */
+
+ base_pixbuf = gtk_icon_source_get_pixbuf (source);
+
+ g_return_val_if_fail (base_pixbuf != NULL, NULL);
+
+ if (widget && gtk_widget_has_screen (widget)) {
+ screen = gtk_widget_get_screen (widget);
+ settings = gtk_settings_get_for_screen (screen);
+ } else if (style->colormap) {
+ screen = gdk_colormap_get_screen (style->colormap);
+ settings = gtk_settings_get_for_screen (screen);
+ } else {
+ settings = gtk_settings_get_default ();
+ GTK_NOTE (MULTIHEAD,
+ g_warning ("Using the default screen for gtk_default_render_icon()"));
+ }
+
+
+ if (size != (GtkIconSize) -1 && !gtk_icon_size_lookup_for_settings (settings, size, &width, &height)) {
+ g_warning (G_STRLOC ": invalid icon size '%d'", size);
+ return NULL;
+ }
+
+ /* If the size was wildcarded, and we're allowed to scale, then scale; otherwise,
+ * leave it alone.
+ */
+ if (size != (GtkIconSize)-1 && gtk_icon_source_get_size_wildcarded (source))
+ scaled = scale_or_ref (base_pixbuf, width, height);
+ else
+ scaled = g_object_ref (base_pixbuf);
+
+ /* If the state was wildcarded, then generate a state. */
+ if (gtk_icon_source_get_state_wildcarded (source)) {
+ if (state == GTK_STATE_INSENSITIVE) {
+ stated = set_transparency (scaled, 0.3);
+#if 0
+ stated =
+ gdk_pixbuf_composite_color_simple (scaled,
+ gdk_pixbuf_get_width (scaled),
+ gdk_pixbuf_get_height (scaled),
+ GDK_INTERP_BILINEAR, 128,
+ gdk_pixbuf_get_width (scaled),
+ style->bg[state].pixel,
+ style->bg[state].pixel);
+#endif
+ gdk_pixbuf_saturate_and_pixelate (stated, stated,
+ 0.1, FALSE);
+
+ g_object_unref (scaled);
+ } else if (state == GTK_STATE_PRELIGHT) {
+ stated = gdk_pixbuf_copy (scaled);
+
+ gdk_pixbuf_saturate_and_pixelate (scaled, stated,
+ 1.2, FALSE);
+
+ g_object_unref (scaled);
+ } else {
+ stated = scaled;
+ }
+ }
+ else
+ stated = scaled;
+
+ return stated;
+}
+
+static void
+clearlooks_style_init (ClearlooksStyle * style)
+{
+}
+
+static void
+clearlooks_style_class_init (ClearlooksStyleClass * klass)
+{
+ GtkStyleClass *style_class = GTK_STYLE_CLASS (klass);
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ style_class->realize = clearlooks_style_realize;
+ style_class->unrealize = clearlooks_style_unrealize;
+ style_class->init_from_rc = clearlooks_style_init_from_rc;
+ style_class->draw_focus = draw_focus;
+ style_class->draw_resize_grip = draw_resize_grip;
+ style_class->draw_handle = draw_handle;
+ style_class->draw_vline = draw_vline;
+ style_class->draw_hline = draw_hline;
+ style_class->draw_slider = draw_slider;
+ style_class->draw_shadow_gap = draw_shadow_gap;
+ style_class->draw_arrow = clearlooks_draw_arrow;
+ style_class->draw_check = draw_check;
+ style_class->draw_tab = draw_tab;
+ style_class->draw_box = draw_box;
+ style_class->draw_shadow = draw_shadow;
+ style_class->draw_box_gap = draw_box_gap;
+ style_class->draw_extension = draw_extension;
+ style_class->draw_option = draw_option;
+ style_class->draw_layout = draw_layout;
+ style_class->render_icon = render_icon;
+ style_class->draw_flat_box = draw_flat_box;
+}
+
+GType clearlooks_type_style = 0;
+
+void
+clearlooks_style_register_type (GTypeModule * module)
+{
+ static const GTypeInfo object_info =
+ {
+ sizeof (ClearlooksStyleClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) clearlooks_style_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (ClearlooksStyle),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) clearlooks_style_init,
+ NULL
+ };
+
+ clearlooks_type_style = g_type_module_register_type (module,
+ GTK_TYPE_STYLE,
+ "ClearlooksStyle",
+ &object_info, 0);
+}
diff --git a/libs/clearlooks-older/clearlooks_style.h b/libs/clearlooks-older/clearlooks_style.h
new file mode 100644
index 0000000000..1e07877bf7
--- /dev/null
+++ b/libs/clearlooks-older/clearlooks_style.h
@@ -0,0 +1,108 @@
+/* Clearlooks Engine
+ * Copyright (C) 2005 Richard Stellingwerff.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Written by Owen Taylor <otaylor@redhat.com>
+ * and by Alexander Larsson <alexl@redhat.com>
+ * Modified by Richard Stellingwerff <remenic@gmail.com>
+ */
+#include <gtk/gtkstyle.h>
+
+#include "clearlooks_draw.h"
+
+typedef struct _ClearlooksStyle ClearlooksStyle;
+typedef struct _ClearlooksStyleClass ClearlooksStyleClass;
+
+extern GType clearlooks_type_style;
+
+#define CLEARLOOKS_TYPE_STYLE clearlooks_type_style
+#define CLEARLOOKS_STYLE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), CLEARLOOKS_TYPE_STYLE, ClearlooksStyle))
+#define CLEARLOOKS_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLEARLOOKS_TYPE_STYLE, ClearlooksStyleClass))
+#define CLEARLOOKS_IS_STYLE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), CLEARLOOKS_TYPE_STYLE))
+#define CLEARLOOKS_IS_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLEARLOOKS_TYPE_STYLE))
+#define CLEARLOOKS_STYLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLEARLOOKS_TYPE_STYLE, ClearlooksStyleClass))
+
+typedef enum
+{
+ CL_BORDER_UPPER = 0,
+ CL_BORDER_LOWER,
+ CL_BORDER_UPPER_ACTIVE,
+ CL_BORDER_LOWER_ACTIVE,
+ CL_BORDER_COUNT
+} ClBorderColorType;
+
+typedef enum
+{
+ CL_SCROLLBUTTON_BEGIN = 0,
+ CL_SCROLLBUTTON_END,
+ CL_SCROLLBUTTON_OTHER
+} ClScrollButtonType;
+
+struct _ClearlooksStyle
+{
+ GtkStyle parent_instance;
+
+ GdkColor shade[9];
+
+ GdkColor spot_color;
+ GdkColor spot1;
+ GdkColor spot2;
+ GdkColor spot3;
+
+ GdkColor border[CL_BORDER_COUNT];
+
+ /* from light to dark */
+ GdkGC *shade_gc[9];
+ GdkGC *border_gc[CL_BORDER_COUNT];
+
+ GdkGC *spot1_gc;
+ GdkGC *spot2_gc;
+ GdkGC *spot3_gc;
+
+ GdkColor inset_light[5];
+ GdkColor inset_dark[5];
+
+ GdkColor button_g1[5];
+ GdkColor button_g2[5];
+ GdkColor button_g3[5];
+ GdkColor button_g4[5];
+
+ GdkColor listview_bg[5];
+
+ GdkPixmap *radio_pixmap_nonactive[5];
+ GdkPixmap *radio_pixmap_active[5];
+ GdkPixmap *radio_pixmap_inconsistent[5];
+ GdkBitmap *radio_pixmap_mask; /* All masks are the same */
+
+ GdkPixmap *check_pixmap_nonactive[5];
+ GdkPixmap *check_pixmap_active[5];
+ GdkPixmap *check_pixmap_inconsistent[5];
+
+ gboolean sunkenmenubar:1;
+
+ guint8 progressbarstyle;
+ guint8 menubarstyle;
+ guint8 menuitemstyle;
+ guint8 listviewitemstyle;
+};
+
+struct _ClearlooksStyleClass
+{
+ GtkStyleClass parent_class;
+};
+
+void clearlooks_style_register_type (GTypeModule *module);
diff --git a/libs/clearlooks-older/clearlooks_theme_main.c b/libs/clearlooks-older/clearlooks_theme_main.c
new file mode 100644
index 0000000000..5356f915dd
--- /dev/null
+++ b/libs/clearlooks-older/clearlooks_theme_main.c
@@ -0,0 +1,37 @@
+#include <gmodule.h>
+#include <gtk/gtk.h>
+
+#include "clearlooks_style.h"
+#include "clearlooks_rc_style.h"
+
+G_MODULE_EXPORT void
+theme_init (GTypeModule *module)
+{
+ clearlooks_rc_style_register_type (module);
+ clearlooks_style_register_type (module);
+ printf("theme_init() called from internal clearlooks engine\n");
+}
+
+G_MODULE_EXPORT void
+theme_exit (void)
+{
+}
+
+G_MODULE_EXPORT GtkRcStyle *
+theme_create_rc_style (void)
+{
+ return GTK_RC_STYLE (g_object_new (CLEARLOOKS_TYPE_RC_STYLE, NULL));
+}
+
+/* The following function will be called by GTK+ when the module
+ * is loaded and checks to see if we are compatible with the
+ * version of GTK+ that loads us.
+ */
+G_MODULE_EXPORT const gchar* g_module_check_init (GModule *module);
+const gchar*
+g_module_check_init (GModule *module)
+{
+ return gtk_check_version (GTK_MAJOR_VERSION,
+ GTK_MINOR_VERSION,
+ GTK_MICRO_VERSION - GTK_INTERFACE_AGE);
+}
diff --git a/libs/clearlooks-older/cpdll.sh b/libs/clearlooks-older/cpdll.sh
new file mode 100755
index 0000000000..fb101d52a0
--- /dev/null
+++ b/libs/clearlooks-older/cpdll.sh
@@ -0,0 +1,2 @@
+mkdir engines
+cp libclearlooks.so engines
diff --git a/libs/clearlooks-older/support.c b/libs/clearlooks-older/support.c
new file mode 100644
index 0000000000..358c7f43fb
--- /dev/null
+++ b/libs/clearlooks-older/support.c
@@ -0,0 +1,981 @@
+#include "support.h"
+
+/* #define ALWAYS_DITHER_GRADIENTS */
+
+GtkTextDirection
+get_direction (GtkWidget *widget)
+{
+ GtkTextDirection dir;
+
+ if (widget)
+ dir = gtk_widget_get_direction (widget);
+ else
+ dir = GTK_TEXT_DIR_LTR;
+
+ return dir;
+}
+
+GdkPixbuf *
+generate_bit (unsigned char alpha[], GdkColor *color, double mult)
+{
+ guint r, g, b;
+ GdkPixbuf *pixbuf;
+ unsigned char *pixels;
+ int w, h, rs;
+ int x, y;
+
+ r = (color->red >> 8) * mult;
+ r = MIN(r, 255);
+ g = (color->green >> 8) * mult;
+ g = MIN(g, 255);
+ b = (color->blue >> 8) * mult;
+ b = MIN(b, 255);
+
+ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, RADIO_SIZE, RADIO_SIZE);
+
+ w = gdk_pixbuf_get_width (pixbuf);
+ h = gdk_pixbuf_get_height (pixbuf);
+ rs = gdk_pixbuf_get_rowstride (pixbuf);
+ pixels = gdk_pixbuf_get_pixels (pixbuf);
+
+
+ for (y=0; y < h; y++)
+ {
+ for (x=0; x < w; x++)
+ {
+ pixels[y*rs + x*4 + 0] = r;
+ pixels[y*rs + x*4 + 1] = g;
+ pixels[y*rs + x*4 + 2] = b;
+ if (alpha)
+ pixels[y*rs + x*4 + 3] = alpha[y*w + x];
+ else
+ pixels[y*rs + x*4 + 3] = 255;
+ }
+ }
+
+ return pixbuf;
+}
+
+#define CLAMP_UCHAR(v) ((guchar) (CLAMP (((int)v), (int)0, (int)255)))
+
+GdkPixbuf *
+colorize_bit (unsigned char *bit,
+ unsigned char *alpha,
+ GdkColor *new_color)
+{
+ GdkPixbuf *pixbuf;
+ double intensity;
+ int x, y;
+ const guchar *src, *asrc;
+ guchar *dest;
+ int dest_rowstride;
+ int width, height;
+ guchar *dest_pixels;
+
+ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, RADIO_SIZE, RADIO_SIZE);
+
+ if (pixbuf == NULL)
+ return NULL;
+
+ dest_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+ dest_pixels = gdk_pixbuf_get_pixels (pixbuf);
+
+ for (y = 0; y < RADIO_SIZE; y++)
+ {
+ src = bit + y * RADIO_SIZE;
+ asrc = alpha + y * RADIO_SIZE;
+ dest = dest_pixels + y * dest_rowstride;
+
+ for (x = 0; x < RADIO_SIZE; x++)
+ {
+ double dr, dg, db;
+
+ intensity = (src[x] + 0 )/ 255.0;
+
+ if (intensity <= 0.5)
+ {
+ /* Go from black at intensity = 0.0 to new_color at intensity = 0.5 */
+ dr = (new_color->red * intensity * 2.0) / 65535.0;
+ dg = (new_color->green * intensity * 2.0) / 65535.0;
+ db = (new_color->blue * intensity * 2.0) / 65535.0;
+ }
+ else
+ {
+ /* Go from new_color at intensity = 0.5 to white at intensity = 1.0 */
+ dr = (new_color->red + (65535 - new_color->red) * (intensity - 0.5) * 2.0) / 65535.0;
+ dg = (new_color->green + (65535 - new_color->green) * (intensity - 0.5) * 2.0) / 65535.0;
+ db = (new_color->blue + (65535 - new_color->blue) * (intensity - 0.5) * 2.0) / 65535.0;
+ }
+
+ dest[0] = CLAMP_UCHAR (255 * dr);
+ dest[1] = CLAMP_UCHAR (255 * dg);
+ dest[2] = CLAMP_UCHAR (255 * db);
+
+ dest[3] = asrc[x];
+ dest += 4;
+ }
+ }
+
+ return pixbuf;
+}
+
+GdkPixmap *
+pixbuf_to_pixmap (GtkStyle *style,
+ GdkPixbuf *pixbuf,
+ GdkScreen *screen)
+{
+ GdkGC *tmp_gc;
+ GdkPixmap *pixmap;
+
+ pixmap = gdk_pixmap_new (gdk_screen_get_root_window (screen),
+ gdk_pixbuf_get_width (pixbuf),
+ gdk_pixbuf_get_height (pixbuf),
+ style->depth);
+
+ gdk_drawable_set_colormap (pixmap, style->colormap);
+
+ tmp_gc = gdk_gc_new (pixmap);
+
+ gdk_pixbuf_render_to_drawable (pixbuf, pixmap, tmp_gc, 0, 0, 0, 0,
+ gdk_pixbuf_get_width (pixbuf),
+ gdk_pixbuf_get_height (pixbuf),
+ GDK_RGB_DITHER_NORMAL, 0, 0);
+
+ gdk_gc_unref (tmp_gc);
+
+ return pixmap;
+}
+
+
+void
+rgb_to_hls (gdouble *r,
+ gdouble *g,
+ gdouble *b)
+{
+ gdouble min;
+ gdouble max;
+ gdouble red;
+ gdouble green;
+ gdouble blue;
+ gdouble h, l, s;
+ gdouble delta;
+
+ red = *r;
+ green = *g;
+ blue = *b;
+
+ if (red > green)
+ {
+ if (red > blue)
+ max = red;
+ else
+ max = blue;
+
+ if (green < blue)
+ min = green;
+ else
+ min = blue;
+ }
+ else
+ {
+ if (green > blue)
+ max = green;
+ else
+ max = blue;
+
+ if (red < blue)
+ min = red;
+ else
+ min = blue;
+ }
+
+ l = (max + min) / 2;
+ s = 0;
+ h = 0;
+
+ if (max != min)
+ {
+ if (l <= 0.5)
+ s = (max - min) / (max + min);
+ else
+ s = (max - min) / (2 - max - min);
+
+ delta = max -min;
+ if (red == max)
+ h = (green - blue) / delta;
+ else if (green == max)
+ h = 2 + (blue - red) / delta;
+ else if (blue == max)
+ h = 4 + (red - green) / delta;
+
+ h *= 60;
+ if (h < 0.0)
+ h += 360;
+ }
+
+ *r = h;
+ *g = l;
+ *b = s;
+}
+
+void
+hls_to_rgb (gdouble *h,
+ gdouble *l,
+ gdouble *s)
+{
+ gdouble hue;
+ gdouble lightness;
+ gdouble saturation;
+ gdouble m1, m2;
+ gdouble r, g, b;
+
+ lightness = *l;
+ saturation = *s;
+
+ if (lightness <= 0.5)
+ m2 = lightness * (1 + saturation);
+ else
+ m2 = lightness + saturation - lightness * saturation;
+
+ m1 = 2 * lightness - m2;
+
+ if (saturation == 0)
+ {
+ *h = lightness;
+ *l = lightness;
+ *s = lightness;
+ }
+ else
+ {
+ hue = *h + 120;
+ while (hue > 360)
+ hue -= 360;
+ while (hue < 0)
+ hue += 360;
+
+ if (hue < 60)
+ r = m1 + (m2 - m1) * hue / 60;
+ else if (hue < 180)
+ r = m2;
+ else if (hue < 240)
+ r = m1 + (m2 - m1) * (240 - hue) / 60;
+ else
+ r = m1;
+
+ hue = *h;
+ while (hue > 360)
+ hue -= 360;
+ while (hue < 0)
+ hue += 360;
+
+ if (hue < 60)
+ g = m1 + (m2 - m1) * hue / 60;
+ else if (hue < 180)
+ g = m2;
+ else if (hue < 240)
+ g = m1 + (m2 - m1) * (240 - hue) / 60;
+ else
+ g = m1;
+
+ hue = *h - 120;
+ while (hue > 360)
+ hue -= 360;
+ while (hue < 0)
+ hue += 360;
+
+ if (hue < 60)
+ b = m1 + (m2 - m1) * hue / 60;
+ else if (hue < 180)
+ b = m2;
+ else if (hue < 240)
+ b = m1 + (m2 - m1) * (240 - hue) / 60;
+ else
+ b = m1;
+
+ *h = r;
+ *l = g;
+ *s = b;
+ }
+}
+
+void
+shade (GdkColor * a, GdkColor * b, float k)
+{
+ gdouble red;
+ gdouble green;
+ gdouble blue;
+
+ red = (gdouble) a->red / 65535.0;
+ green = (gdouble) a->green / 65535.0;
+ blue = (gdouble) a->blue / 65535.0;
+
+ rgb_to_hls (&red, &green, &blue);
+
+ green *= k;
+ if (green > 1.0)
+ green = 1.0;
+ else if (green < 0.0)
+ green = 0.0;
+
+ blue *= k;
+ if (blue > 1.0)
+ blue = 1.0;
+ else if (blue < 0.0)
+ blue = 0.0;
+
+ hls_to_rgb (&red, &green, &blue);
+
+ b->red = red * 65535.0;
+ b->green = green * 65535.0;
+ b->blue = blue * 65535.0;
+}
+
+
+/**************************************************************************/
+
+void
+arrow_draw_hline (GdkWindow *window,
+ GdkGC *gc,
+ int x1,
+ int x2,
+ int y,
+ gboolean last)
+{
+ if (x2 - x1 < 7 && !last) /* 7 to get garretts pixels, otherwise 6 */
+ {
+ gdk_draw_line (window, gc, x1, y, x2, y);
+ }
+ else if (last)
+ {
+ /* we don't draw "spikes" for very small arrows */
+ if (x2 - x1 <= 9)
+ {
+ /*gdk_draw_line (window, gc, x1+1, y, x1+1, y);
+ gdk_draw_line (window, gc, x2-1, y, x2-1, y);*/
+ }
+ else
+ {
+ gdk_draw_line (window, gc, x1+2, y, x1+2, y);
+ gdk_draw_line (window, gc, x2-2, y, x2-2, y);
+ }
+ }
+ else
+ {
+ gdk_draw_line (window, gc, x1, y, x1+2, y);
+ gdk_draw_line (window, gc, x2-2, y, x2, y);
+ }
+}
+
+void
+arrow_draw_vline (GdkWindow *window,
+ GdkGC *gc,
+ int y1,
+ int y2,
+ int x,
+ gboolean last)
+{
+ if (y2 - y1 < 7 && !last) /* 7 to get garretts pixels */
+ gdk_draw_line (window, gc, x, y1, x, y2);
+ else if (last)
+ {
+ /* we don't draw "spikes" for very small arrows */
+ if (y2 - y1 > 9) {
+ gdk_draw_line (window, gc, x, y1+2, x, y1+2);
+ gdk_draw_line (window, gc, x, y2-2, x, y2-2);
+ }
+ }
+ else
+ {
+ gdk_draw_line (window, gc, x, y1, x, y1+2);
+ gdk_draw_line (window, gc, x, y2-2, x, y2);
+ }
+}
+
+
+
+void
+draw_arrow (GdkWindow *window,
+ GdkGC *gc,
+ GdkRectangle *area,
+ GtkArrowType arrow_type,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
+{
+ gint i, j;
+
+ if (area)
+ gdk_gc_set_clip_rectangle (gc, area);
+
+ if (arrow_type == GTK_ARROW_DOWN)
+ {
+ for (i = 0, j = -1; i < height; i++, j++)
+ arrow_draw_hline (window, gc, x + j, x + width - j - 1, y + i, i == 0);
+
+ }
+ else if (arrow_type == GTK_ARROW_UP)
+ {
+ for (i = height - 1, j = -1; i >= 0; i--, j++)
+ arrow_draw_hline (window, gc, x + j, x + width - j - 1, y + i, i == height - 1);
+ }
+ else if (arrow_type == GTK_ARROW_LEFT)
+ {
+ for (i = width - 1, j = -1; i >= 0; i--, j++)
+ arrow_draw_vline (window, gc, y + j, y + height - j - 1, x + i, i == width - 1);
+ }
+ else if (arrow_type == GTK_ARROW_RIGHT)
+ {
+ for (i = 0, j = -1; i < width; i++, j++)
+ arrow_draw_vline (window, gc, y + j, y + height - j - 1, x + i, i == 0);
+ }
+
+ if (area)
+ gdk_gc_set_clip_rectangle (gc, NULL);
+}
+
+void
+calculate_arrow_geometry (GtkArrowType arrow_type,
+ gint *x,
+ gint *y,
+ gint *width,
+ gint *height)
+{
+ gint w = *width;
+ gint h = *height;
+
+ switch (arrow_type)
+ {
+ case GTK_ARROW_UP:
+ case GTK_ARROW_DOWN:
+ w += (w % 2) - 1;
+ h = (w / 2 + 1) + 1;
+
+ if (h > *height)
+ {
+ h = *height;
+ w = 2 * (h - 1) - 1;
+ }
+
+ if (arrow_type == GTK_ARROW_DOWN)
+ {
+ if (*height % 2 == 1 || h % 2 == 0)
+ *height += 1;
+ }
+ else
+ {
+ if (*height % 2 == 0 || h % 2 == 0)
+ *height -= 1;
+ }
+ break;
+
+ case GTK_ARROW_RIGHT:
+ case GTK_ARROW_LEFT:
+ h += (h % 2) - 1;
+ w = (h / 2 + 1) + 1;
+
+ if (w > *width)
+ {
+ w = *width;
+ h = 2 * (w - 1) - 1;
+ }
+
+ if (arrow_type == GTK_ARROW_RIGHT)
+ {
+ if (*width % 2 == 1 || w % 2 == 0)
+ *width += 1;
+ }
+ else
+ {
+ if (*width % 2 == 0 || w % 2 == 0)
+ *width -= 1;
+ }
+ break;
+
+ default:
+ /* should not be reached */
+ break;
+ }
+
+ *x += (*width - w) / 2;
+ *y += (*height - h) / 2;
+ *height = h;
+ *width = w;
+}
+
+
+void gtk_treeview_get_header_index (GtkTreeView *tv, GtkWidget *header,
+ gint *column_index, gint *columns,
+gboolean *resizable)
+{
+ GList *list;
+ *column_index = *columns = 0;
+ list = gtk_tree_view_get_columns (tv);
+
+ do
+ {
+ GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(list->data);
+ if ( column->button == header )
+ {
+ *column_index = *columns;
+ *resizable = column->resizable;
+ }
+ if ( column->visible )
+ (*columns)++;
+ } while ((list = g_list_next(list)));
+}
+
+void gtk_clist_get_header_index (GtkCList *clist, GtkWidget *button,
+ gint *column_index, gint *columns)
+{
+ *columns = clist->columns;
+ int i;
+
+ for (i=0; i<*columns; i++)
+ {
+ if (clist->column[i].button == button)
+ {
+ *column_index = i;
+ break;
+ }
+ }
+}
+
+gboolean
+sanitize_size (GdkWindow *window,
+ gint *width,
+ gint *height)
+{
+ gboolean set_bg = FALSE;
+
+ if ((*width == -1) && (*height == -1))
+ {
+ set_bg = GDK_IS_WINDOW (window);
+ gdk_window_get_size (window, width, height);
+ }
+ else if (*width == -1)
+ gdk_window_get_size (window, width, NULL);
+ else if (*height == -1)
+ gdk_window_get_size (window, NULL, height);
+
+ return set_bg;
+}
+
+static GtkRequisition default_option_indicator_size = { 7, 13 };
+static GtkBorder default_option_indicator_spacing = { 7, 5, 2, 2 };
+
+void
+option_menu_get_props (GtkWidget *widget,
+ GtkRequisition *indicator_size,
+ GtkBorder *indicator_spacing)
+{
+ GtkRequisition *tmp_size = NULL;
+ GtkBorder *tmp_spacing = NULL;
+
+ if (widget)
+ gtk_widget_style_get (widget, "indicator_size", &tmp_size,
+ "indicator_spacing", &tmp_spacing, NULL);
+
+ if (tmp_size)
+ {
+ *indicator_size = *tmp_size;
+ g_free (tmp_size);
+ }
+ else
+ *indicator_size = default_option_indicator_size;
+
+ if (tmp_spacing)
+ {
+ *indicator_spacing = *tmp_spacing;
+ g_free (tmp_spacing);
+ }
+ else
+ *indicator_spacing = default_option_indicator_spacing;
+}
+
+GtkWidget *special_get_ancestor(GtkWidget * widget,
+ GType widget_type)
+{
+ g_return_val_if_fail(GTK_IS_WIDGET(widget), NULL);
+
+ while (widget && widget->parent
+ && !g_type_is_a(GTK_WIDGET_TYPE(widget->parent),
+ widget_type))
+ widget = widget->parent;
+
+ if (!
+ (widget && widget->parent
+ && g_type_is_a(GTK_WIDGET_TYPE(widget->parent), widget_type)))
+ return NULL;
+
+ return widget;
+}
+
+/* Dithered Gradient Buffers */
+static void
+internel_image_buffer_free_pixels (guchar *pixels, gpointer data)
+{
+ g_free (pixels);
+}
+
+static GdkPixbuf*
+internal_image_buffer_new (gint width, gint height)
+{
+ guchar *buf;
+ int rowstride;
+
+ g_return_val_if_fail (width > 0, NULL);
+ g_return_val_if_fail (height > 0, NULL);
+
+ rowstride = width * 3;
+
+ buf = g_try_malloc (height * rowstride);
+
+ if (!buf)
+ return NULL;
+
+ return gdk_pixbuf_new_from_data(buf, GDK_COLORSPACE_RGB,
+ FALSE, 8,
+ width, height, rowstride,
+ internel_image_buffer_free_pixels, NULL);
+}
+
+static void
+internal_color_get_as_uchars(GdkColor *color,
+ guchar *red,
+ guchar *green,
+ guchar *blue)
+{
+ *red = (guchar) (color->red / 256.0);
+ *green = (guchar) (color->green / 256.0);
+ *blue = (guchar) (color->blue / 256.0);
+}
+
+static GdkPixbuf*
+internal_create_horizontal_gradient_image_buffer (gint width, gint height,
+ GdkColor *from,
+ GdkColor *to)
+{
+ int i;
+ long r, g, b, dr, dg, db;
+ GdkPixbuf* buffer;
+ guchar *ptr;
+ guchar *pixels;
+ guchar r0, g0, b0;
+ guchar rf, gf, bf;
+ int rowstride;
+
+ buffer = internal_image_buffer_new (width, height);
+
+ if (buffer == NULL)
+ return NULL;
+
+ pixels = gdk_pixbuf_get_pixels (buffer);
+ ptr = pixels;
+ rowstride = gdk_pixbuf_get_rowstride (buffer);
+
+ internal_color_get_as_uchars(from, &r0, &g0, &b0);
+ internal_color_get_as_uchars(to, &rf, &gf, &bf);
+
+ r = r0 << 16;
+ g = g0 << 16;
+ b = b0 << 16;
+
+ dr = ((rf-r0)<<16)/width;
+ dg = ((gf-g0)<<16)/width;
+ db = ((bf-b0)<<16)/width;
+
+ /* render the first line */
+ for (i=0; i<width; i++)
+ {
+ *(ptr++) = (guchar)(r>>16);
+ *(ptr++) = (guchar)(g>>16);
+ *(ptr++) = (guchar)(b>>16);
+
+ r += dr;
+ g += dg;
+ b += db;
+ }
+
+ /* copy the first line to the other lines */
+ for (i=1; i<height; i++)
+ {
+ memcpy (&(pixels[i*rowstride]), pixels, rowstride);
+ }
+
+ return buffer;
+}
+
+static GdkPixbuf*
+internal_create_vertical_gradient_image_buffer (gint width, gint height,
+ GdkColor *from,
+ GdkColor *to)
+{
+ gint i, j, max_block, last_block;
+ long r, g, b, dr, dg, db;
+ GdkPixbuf *buffer;
+
+ guchar *ptr;
+ guchar point[4];
+
+ guchar r0, g0, b0;
+ guchar rf, gf, bf;
+
+ gint rowstride;
+ guchar *pixels;
+
+ buffer = internal_image_buffer_new (width, height);
+
+ if (buffer == NULL)
+ return NULL;
+
+ pixels = gdk_pixbuf_get_pixels (buffer);
+ rowstride = gdk_pixbuf_get_rowstride (buffer);
+
+ internal_color_get_as_uchars(from, &r0, &g0, &b0);
+ internal_color_get_as_uchars(to, &rf, &gf, &bf);
+
+ r = r0<<16;
+ g = g0<<16;
+ b = b0<<16;
+
+ dr = ((rf-r0)<<16)/height;
+ dg = ((gf-g0)<<16)/height;
+ db = ((bf-b0)<<16)/height;
+
+ max_block = width/2;
+
+ for (i=0; i < height; i++)
+ {
+ ptr = pixels + i * rowstride;
+
+ ptr[0] = r>>16;
+ ptr[1] = g>>16;
+ ptr[2] = b>>16;
+
+ if (width > 1)
+ {
+ last_block = 0;
+
+ for (j=1; j <= max_block; j *= 2)
+ {
+ memcpy (&(ptr[j*3]), ptr, j*3);
+
+ if ((j*2) >= max_block)
+ {
+ last_block = j*2;
+ }
+ }
+
+ if ((last_block < width) && (last_block > 0))
+ {
+ memcpy (&(ptr[last_block*3]), ptr, (width - last_block)*3);
+ }
+ }
+
+ r += dr;
+ g += dg;
+ b += db;
+ }
+
+ return buffer;
+}
+
+void
+draw_vgradient (GdkDrawable *drawable, GdkGC *gc, GtkStyle *style,
+ int x, int y, int width, int height,
+ GdkColor *left_color, GdkColor *right_color)
+{
+ #ifndef ALWAYS_DITHER_GRADIENTS
+ gboolean dither = ((style->depth > 0) && (style->depth <= 16));
+ #endif
+
+ if ((width <= 0) || (height <= 0))
+ return;
+
+ if ( left_color == NULL || right_color == NULL )
+ {
+ gdk_draw_rectangle (drawable, gc, TRUE, x, y, width, height);
+ return;
+ }
+
+ #ifndef ALWAYS_DITHER_GRADIENTS
+ if (dither)
+ #endif
+ {
+ GdkPixbuf *image_buffer = NULL;
+
+ image_buffer = internal_create_horizontal_gradient_image_buffer (width, height, left_color, right_color);
+
+ if (image_buffer)
+ {
+ gdk_draw_pixbuf(drawable, gc, image_buffer, 0, 0, x, y, width, height, GDK_RGB_DITHER_MAX, 0, 0);
+
+ g_object_unref(image_buffer);
+ }
+ }
+ #ifndef ALWAYS_DITHER_GRADIENTS
+ else
+ {
+ int i;
+ GdkColor col;
+ int dr, dg, db;
+ GdkGCValues old_values;
+
+ gdk_gc_get_values (gc, &old_values);
+
+ if (left_color == right_color )
+ {
+ col = *left_color;
+ gdk_rgb_find_color (style->colormap, &col);
+ gdk_gc_set_foreground (gc, &col);
+ gdk_draw_rectangle (drawable, gc, TRUE, x, y, width, height);
+ gdk_gc_set_foreground (gc, &old_values.foreground);
+ return;
+ }
+
+ col = *left_color;
+ dr = (right_color->red - left_color->red) / width;
+ dg = (right_color->green - left_color->green) / width;
+ db = (right_color->blue - left_color->blue) / width;
+
+ for (i = 0; i < width; i++)
+ {
+ gdk_rgb_find_color (style->colormap, &col);
+
+ gdk_gc_set_foreground (gc, &col);
+ gdk_draw_line (drawable, gc, x + i, y, x + i, y + height - 1);
+
+ col.red += dr;
+ col.green += dg;
+ col.blue += db;
+ }
+
+ gdk_gc_set_foreground (gc, &old_values.foreground);
+ }
+ #endif
+}
+
+void
+draw_hgradient (GdkDrawable *drawable, GdkGC *gc, GtkStyle *style,
+ int x, int y, int width, int height,
+ GdkColor *top_color, GdkColor *bottom_color)
+{
+ #ifndef ALWAYS_DITHER_GRADIENTS
+ gboolean dither = ((style->depth > 0) && (style->depth <= 16));
+ #endif
+
+ if ((width <= 0) || (height <= 0))
+ return;
+
+ #ifndef ALWAYS_DITHER_GRADIENTS
+ if (dither)
+ #endif
+ {
+ GdkPixbuf *image_buffer = NULL;
+
+ image_buffer = internal_create_vertical_gradient_image_buffer (width, height, top_color, bottom_color);
+
+ if (image_buffer)
+ {
+ gdk_draw_pixbuf(drawable, gc, image_buffer, 0, 0, x, y, width, height, GDK_RGB_DITHER_MAX, 0, 0);
+
+ g_object_unref(image_buffer);
+ }
+ }
+ #ifndef ALWAYS_DITHER_GRADIENTS
+ else
+ {
+ int i;
+ GdkColor col;
+ int dr, dg, db;
+ GdkGCValues old_values;
+
+ gdk_gc_get_values (gc, &old_values);
+
+ if (top_color == bottom_color )
+ {
+ col = *top_color;
+ gdk_rgb_find_color (style->colormap, &col);
+ gdk_gc_set_foreground (gc, &col);
+ gdk_draw_rectangle (drawable, gc, TRUE, x, y, width, height);
+ gdk_gc_set_foreground (gc, &old_values.foreground);
+ return;
+ }
+
+ col = *top_color;
+ dr = (bottom_color->red - top_color->red) / height;
+ dg = (bottom_color->green - top_color->green) / height;
+ db = (bottom_color->blue - top_color->blue) / height;
+
+ for (i = 0; i < height; i++)
+ {
+ gdk_rgb_find_color (style->colormap, &col);
+
+ gdk_gc_set_foreground (gc, &col);
+ gdk_draw_line (drawable, gc, x, y + i, x + width - 1, y + i);
+
+ col.red += dr;
+ col.green += dg;
+ col.blue += db;
+ }
+
+ gdk_gc_set_foreground (gc, &old_values.foreground);
+ }
+ #endif
+}
+
+void blend (GdkColormap *colormap,
+ GdkColor *a, GdkColor *b, GdkColor *c, int alpha)
+{
+ int inAlpha = 100-alpha;
+ c->red = (a->red * alpha + b->red * inAlpha) / 100;
+ c->green = (a->green * alpha + b->green * inAlpha) / 100;
+ c->blue = (a->blue * alpha + b->blue * inAlpha) / 100;
+
+ gdk_rgb_find_color (colormap, c);
+}
+
+GtkWidget *get_parent_window (GtkWidget *widget)
+{
+ GtkWidget *parent = widget->parent;
+
+ while (parent && GTK_WIDGET_NO_WINDOW (parent))
+ parent = parent->parent;
+
+ return parent;
+}
+
+GdkColor *get_parent_bgcolor (GtkWidget *widget)
+{
+ GtkWidget *parent = get_parent_window (widget);
+
+ if (parent && parent->style)
+ return &parent->style->bg[GTK_STATE_NORMAL];
+
+ return NULL;
+}
+
+GtkWidget *
+find_combo_box_widget (GtkWidget * widget)
+{
+ GtkWidget *result = NULL;
+
+ if (widget && !GTK_IS_COMBO_BOX_ENTRY (widget))
+ {
+ if (GTK_IS_COMBO_BOX (widget))
+ result = widget;
+ else
+ result = find_combo_box_widget(widget->parent);
+ }
+
+ return result;
+}
+
+gboolean
+is_combo_box (GtkWidget * widget)
+{
+ return (find_combo_box_widget(widget) != NULL);
+}
diff --git a/libs/clearlooks-older/support.h b/libs/clearlooks-older/support.h
new file mode 100644
index 0000000000..a1430b40d0
--- /dev/null
+++ b/libs/clearlooks-older/support.h
@@ -0,0 +1,110 @@
+#include <gtk/gtk.h>
+#include <math.h>
+#include <string.h>
+
+/* GTK 2.2 compatibility */
+#ifndef GTK_IS_COMBO_BOX_ENTRY
+ #define GTK_IS_COMBO_BOX_ENTRY(x) 0
+#endif
+#ifndef GTK_IS_COMBO_BOX
+ #define GTK_IS_COMBO_BOX(x) 0
+#endif
+
+#define RADIO_SIZE 13
+#define CHECK_SIZE 13
+
+GtkTextDirection
+get_direction (GtkWidget *widget);
+
+GdkPixbuf *
+generate_bit (unsigned char alpha[],
+ GdkColor *color,
+ double mult);
+
+GdkPixbuf *
+colorize_bit (unsigned char *bit,
+ unsigned char *alpha,
+ GdkColor *new_color);
+
+GdkPixmap *
+pixbuf_to_pixmap (GtkStyle *style,
+ GdkPixbuf *pixbuf,
+ GdkScreen *screen);
+
+gboolean
+sanitize_size (GdkWindow *window,
+ gint *width,
+ gint *height);
+
+void
+rgb_to_hls (gdouble *r,
+ gdouble *g,
+ gdouble *b);
+
+void
+hls_to_rgb (gdouble *h,
+ gdouble *l,
+ gdouble *s);
+
+void
+shade (GdkColor * a, GdkColor * b, float k);
+
+void
+draw_hgradient (GdkDrawable *drawable, GdkGC *gc, GtkStyle *style,
+ int x, int y, int width, int height,
+ GdkColor *top_color, GdkColor *bottom_color);
+
+void
+draw_vgradient (GdkDrawable *drawable, GdkGC *gc, GtkStyle *style,
+ int x, int y, int width, int height,
+ GdkColor *left_color, GdkColor *right_color);
+
+void
+arrow_draw_hline (GdkWindow *window,
+ GdkGC *gc,
+ int x1,
+ int x2,
+ int y,
+ gboolean last);
+
+void
+arrow_draw_vline (GdkWindow *window,
+ GdkGC *gc,
+ int y1,
+ int y2,
+ int x,
+ gboolean last);
+
+void
+draw_arrow (GdkWindow *window,
+ GdkGC *gc,
+ GdkRectangle *area,
+ GtkArrowType arrow_type,
+ gint x,
+ gint y,
+ gint width,
+ gint height);
+
+void
+calculate_arrow_geometry (GtkArrowType arrow_type,
+ gint *x,
+ gint *y,
+ gint *width,
+ gint *height);
+
+GtkWidget *special_get_ancestor(GtkWidget * widget,
+ GType widget_type);
+
+void blend (GdkColormap *colormap,
+ GdkColor *a, GdkColor *b, GdkColor *c, int alpha);
+
+GtkWidget *get_parent_window (GtkWidget *widget);
+
+GdkColor *get_parent_bgcolor (GtkWidget *widget);
+
+gboolean is_combo_box (GtkWidget * widget);
+
+GtkWidget *find_combo_box_widget (GtkWidget * widget);
+
+void gtk_clist_get_header_index (GtkCList *clist, GtkWidget *button,
+ gint *column_index, gint *columns);
diff --git a/libs/clearlooks/clearlooks_draw.h b/libs/clearlooks/clearlooks_draw.h
deleted file mode 100644
index 71d3b4ae68..0000000000
--- a/libs/clearlooks/clearlooks_draw.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef CLEARLOOKS_DRAW_H
-#define CLEARLOOKS_DRAW_H
-
-#include "clearlooks_types.h"
-#include "clearlooks_style.h"
-
-#include <gtk/gtk.h>
-#include <gdk/gdk.h>
-
-#include <cairo.h>
-
-GE_INTERNAL void clearlooks_register_style_classic (ClearlooksStyleFunctions *functions, ClearlooksStyleConstants *constants);
-GE_INTERNAL void clearlooks_register_style_glossy (ClearlooksStyleFunctions *functions, ClearlooksStyleConstants *constants);
-GE_INTERNAL void clearlooks_register_style_gummy (ClearlooksStyleFunctions *functions, ClearlooksStyleConstants *constants);
-GE_INTERNAL void clearlooks_register_style_inverted (ClearlooksStyleFunctions *functions, ClearlooksStyleConstants *constants);
-
-/* Fallback focus function */
-GE_INTERNAL void clearlooks_draw_focus (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const FocusParameters *focus,
- int x, int y, int width, int height);
-
-#endif /* CLEARLOOKS_DRAW_H */
diff --git a/libs/clearlooks/clearlooks_types.h b/libs/clearlooks/clearlooks_types.h
deleted file mode 100644
index 5d5757f95a..0000000000
--- a/libs/clearlooks/clearlooks_types.h
+++ /dev/null
@@ -1,510 +0,0 @@
-#ifndef CLEARLOOKS_TYPES_H
-#define CLEARLOOKS_TYPES_H
-
-#include <ge-support.h>
-
-typedef unsigned char boolean;
-typedef unsigned char uint8;
-typedef struct _ClearlooksStyleFunctions ClearlooksStyleFunctions;
-typedef struct _ClearlooksStyleConstants ClearlooksStyleConstants;
-
-typedef enum
-{
- CL_STYLE_CLASSIC = 0,
- CL_STYLE_GLOSSY = 1,
- CL_STYLE_INVERTED = 2,
- CL_STYLE_GUMMY = 3,
- CL_NUM_STYLES = 4
-} ClearlooksStyles;
-
-typedef enum
-{
- CL_STATE_NORMAL,
- CL_STATE_ACTIVE,
- CL_STATE_SELECTED,
- CL_STATE_INSENSITIVE
-} ClearlooksStateType;
-
-typedef enum
-{
- CL_JUNCTION_NONE = 0,
- CL_JUNCTION_BEGIN = 1,
- CL_JUNCTION_END = 2
-} ClearlooksJunction;
-
-typedef enum
-{
- CL_STEPPER_UNKNOWN = 0,
- CL_STEPPER_A = 1,
- CL_STEPPER_B = 2,
- CL_STEPPER_C = 4,
- CL_STEPPER_D = 8
-} ClearlooksStepper;
-
-typedef enum
-{
- CL_ORDER_FIRST = 1 << 0,
- CL_ORDER_LAST = 1 << 1,
-} ClearlooksOrder;
-
-typedef enum
-{
- CL_CONT_NONE = 0,
- CL_CONT_LEFT = 1 << 0,
- CL_CONT_RIGHT = 1 << 1
-} ClearlooksContinue;
-
-typedef enum
-{
- CL_ORIENTATION_LEFT_TO_RIGHT,
- CL_ORIENTATION_RIGHT_TO_LEFT,
- CL_ORIENTATION_BOTTOM_TO_TOP,
- CL_ORIENTATION_TOP_TO_BOTTOM
-} ClearlooksOrientation;
-
-typedef enum
-{
- CL_GAP_LEFT,
- CL_GAP_RIGHT,
- CL_GAP_TOP,
- CL_GAP_BOTTOM
-} ClearlooksGapSide;
-
-typedef enum
-{
- CL_SHADOW_NONE,
- CL_SHADOW_IN,
- CL_SHADOW_OUT,
- CL_SHADOW_ETCHED_IN,
- CL_SHADOW_ETCHED_OUT
-} ClearlooksShadowType;
-
-typedef enum
-{
- CL_HANDLE_TOOLBAR,
- CL_HANDLE_SPLITTER
-} ClearlooksHandleType;
-
-typedef enum
-{
- CL_ARROW_NORMAL,
- CL_ARROW_COMBO
-} ClearlooksArrowType;
-
-typedef enum
-{
- CL_FOCUS_BUTTON,
- CL_FOCUS_BUTTON_FLAT,
- CL_FOCUS_LABEL,
- CL_FOCUS_TREEVIEW,
- CL_FOCUS_TREEVIEW_HEADER,
- CL_FOCUS_TREEVIEW_ROW,
- CL_FOCUS_TREEVIEW_DND,
- CL_FOCUS_SCALE,
- CL_FOCUS_TAB,
- CL_FOCUS_COLOR_WHEEL_DARK,
- CL_FOCUS_COLOR_WHEEL_LIGHT,
- CL_FOCUS_UNKNOWN
-} ClearlooksFocusType;
-
-
-typedef enum
-{
- CL_DIRECTION_UP,
- CL_DIRECTION_DOWN,
- CL_DIRECTION_LEFT,
- CL_DIRECTION_RIGHT
-} ClearlooksDirection;
-
-typedef enum
-{
- CL_PROGRESSBAR_CONTINUOUS,
- CL_PROGRESSBAR_DISCRETE
-} ClearlooksProgressBarStyle;
-
-typedef enum
-{
- CL_WINDOW_EDGE_NORTH_WEST,
- CL_WINDOW_EDGE_NORTH,
- CL_WINDOW_EDGE_NORTH_EAST,
- CL_WINDOW_EDGE_WEST,
- CL_WINDOW_EDGE_EAST,
- CL_WINDOW_EDGE_SOUTH_WEST,
- CL_WINDOW_EDGE_SOUTH,
- CL_WINDOW_EDGE_SOUTH_EAST
-} ClearlooksWindowEdge;
-
-typedef struct
-{
- double x;
- double y;
- double width;
- double height;
-} ClearlooksRectangle;
-
-typedef struct
-{
- CairoColor fg[5];
- CairoColor bg[5];
- CairoColor base[5];
- CairoColor text[5];
-
- CairoColor shade[9];
- CairoColor spot[3];
-} ClearlooksColors;
-
-typedef struct
-{
- boolean active;
- boolean prelight;
- boolean disabled;
- boolean focus;
- boolean is_default;
- boolean ltr;
- boolean enable_shadow;
-
- gfloat radius;
-
- ClearlooksStateType state_type;
-
- uint8 corners;
- uint8 xthickness;
- uint8 ythickness;
-
- CairoColor parentbg;
-
- ClearlooksStyleFunctions *style_functions;
- ClearlooksStyleConstants *style_constants;
-} WidgetParameters;
-
-typedef struct
-{
- ClearlooksFocusType type;
- ClearlooksContinue continue_side;
- CairoColor color;
- boolean has_color;
- gint line_width;
- gint padding;
- guint8* dash_list;
- boolean interior;
-} FocusParameters;
-
-typedef struct
-{
- boolean lower;
- boolean horizontal;
- boolean fill_level;
-} SliderParameters;
-
-typedef struct
-{
- ClearlooksOrientation orientation;
- boolean pulsing;
- float value;
-} ProgressBarParameters;
-
-typedef struct
-{
- int linepos;
-} OptionMenuParameters;
-
-typedef struct
-{
- ClearlooksShadowType shadow;
- ClearlooksGapSide gap_side;
- int gap_x;
- int gap_width;
- const CairoColor *border; /* maybe changes this to some other hint ... */
-} FrameParameters;
-
-typedef struct
-{
- ClearlooksGapSide gap_side;
- FocusParameters focus;
-} TabParameters;
-
-typedef struct
-{
- CairoCorners corners;
- ClearlooksShadowType shadow;
-} ShadowParameters;
-
-typedef struct
-{
- boolean horizontal;
-} SeparatorParameters;
-
-typedef struct
-{
- ClearlooksOrder order; /* XXX: rename to position */
- boolean resizable;
-} ListViewHeaderParameters;
-
-typedef struct
-{
- CairoColor color;
- ClearlooksJunction junction; /* On which sides the slider junctions */
- boolean horizontal;
- boolean has_color;
-} ScrollBarParameters;
-
-typedef struct
-{
- ClearlooksHandleType type;
- boolean horizontal;
-} HandleParameters;
-
-typedef struct
-{
- ClearlooksStepper stepper; /* Which stepper to draw */
-} ScrollBarStepperParameters;
-
-typedef struct
-{
- ClearlooksWindowEdge edge;
-} ResizeGripParameters;
-
-typedef struct
-{
- int style;
-} MenuBarParameters;
-
-typedef struct
-{
- ClearlooksShadowType shadow_type;
- boolean in_cell;
- boolean in_menu;
-} CheckboxParameters;
-
-typedef struct
-{
- ClearlooksArrowType type;
- ClearlooksDirection direction;
-} ArrowParameters;
-
-typedef struct
-{
- int style;
- boolean topmost;
-} ToolbarParameters;
-
-struct _ClearlooksStyleConstants
-{
- gdouble topleft_highlight_shade;
- gdouble topleft_highlight_alpha;
-};
-
-struct _ClearlooksStyleFunctions
-{
- void (*draw_top_left_highlight) (cairo_t *cr,
- const CairoColor *color,
- const WidgetParameters *params,
- int x, int y, int width, int height,
- gdouble radius,
- CairoCorners corners);
-
- void (*draw_button) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_scale_trough) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const SliderParameters *slider,
- int x, int y, int width, int height);
-
- void (*draw_progressbar_trough) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_progressbar_fill) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const ProgressBarParameters *progressbar,
- int x, int y, int width, int height, gint offset);
-
- void (*draw_slider_button) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const SliderParameters *slider,
- int x, int y, int width, int height);
-
- void (*draw_entry) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_spinbutton) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_spinbutton_down) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_optionmenu) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const OptionMenuParameters *optionmenu,
- int x, int y, int width, int height);
-
- void (*draw_inset) (cairo_t *cr,
- const CairoColor *bg_color,
- double x, double y, double w, double h,
- double radius, uint8 corners);
-
- void (*draw_menubar) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const MenuBarParameters *menubar,
- int x, int y, int width, int height);
-
- void (*draw_tab) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const TabParameters *tab,
- int x, int y, int width, int height);
-
- void (*draw_frame) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const FrameParameters *frame,
- int x, int y, int width, int height);
-
- void (*draw_separator) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const SeparatorParameters *separator,
- int x, int y, int width, int height);
-
- void (*draw_menu_item_separator) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const SeparatorParameters *separator,
- int x, int y, int width, int height);
-
- void (*draw_list_view_header) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const ListViewHeaderParameters *header,
- int x, int y, int width, int height);
-
- void (*draw_toolbar) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const ToolbarParameters *toolbar,
- int x, int y, int width, int height);
-
- void (*draw_menuitem) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_menubaritem) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_selected_cell) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_scrollbar_stepper) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const ScrollBarParameters *scrollbar,
- const ScrollBarStepperParameters *stepper,
- int x, int y, int width, int height);
-
- void (*draw_scrollbar_slider) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const ScrollBarParameters *scrollbar,
- int x, int y, int width, int height);
-
- void (*draw_scrollbar_trough) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const ScrollBarParameters *scrollbar,
- int x, int y, int width, int height);
-
- void (*draw_statusbar) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_menu_frame) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_tooltip) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_handle) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const HandleParameters *handle,
- int x, int y, int width, int height);
-
- void (*draw_resize_grip) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const ResizeGripParameters *grip,
- int x, int y, int width, int height);
-
- void (*draw_arrow) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const ArrowParameters *arrow,
- int x, int y, int width, int height);
-
- void (*draw_focus) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const FocusParameters *focus,
- int x, int y, int width, int height);
-
- void (*draw_checkbox) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const CheckboxParameters *checkbox,
- int x, int y, int width, int height);
-
- void (*draw_radiobutton) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- const CheckboxParameters *checkbox,
- int x, int y, int width, int height);
-
- /* Style internal functions */
- /* XXX: Only used by slider_button, inline it? */
- void (*draw_shadow) (cairo_t *cr,
- const ClearlooksColors *colors,
- gfloat radius, int width, int height);
-
- void (*draw_slider) (cairo_t *cr,
- const ClearlooksColors *colors,
- const WidgetParameters *widget,
- int x, int y, int width, int height);
-
- void (*draw_gripdots) (cairo_t *cr,
- const ClearlooksColors *colors, int x, int y,
- int width, int height, int xr, int yr,
- float contrast);
-};
-
-
-#define CLEARLOOKS_RECTANGLE_SET(rect, _x, _y, _w, _h) (rect).x = (_x); \
- (rect).y = (_y); \
- (rect).width = (_w); \
- (rect).height = (_h);
-
-#endif /* CLEARLOOKS_TYPES_H */
diff --git a/libs/gtkmm2ext/dndtreeview.cc b/libs/gtkmm2ext/dndtreeview.cc
index 2c2e69f6b6..0695dd3281 100644
--- a/libs/gtkmm2ext/dndtreeview.cc
+++ b/libs/gtkmm2ext/dndtreeview.cc
@@ -29,6 +29,8 @@ using namespace Gtk;
using namespace Glib;
using namespace Gtkmm2ext;
+DnDTreeViewBase::DragData DnDTreeViewBase::drag_data;
+
DnDTreeViewBase::DnDTreeViewBase ()
: TreeView ()
{
@@ -47,6 +49,7 @@ DnDTreeViewBase::add_drop_targets (list<TargetEntry>& targets)
for (list<TargetEntry>::iterator i = targets.begin(); i != targets.end(); ++i) {
draggable.push_back (*i);
}
+
enable_model_drag_source (draggable);
enable_model_drag_dest (draggable);
}
@@ -56,6 +59,7 @@ DnDTreeViewBase::add_object_drag (int column, string type_name)
{
draggable.push_back (TargetEntry (type_name, TargetFlags(0)));
data_column = column;
+ object_type = type_name;
enable_model_drag_source (draggable);
enable_model_drag_dest (draggable);
diff --git a/libs/gtkmm2ext/gtk_ui.cc b/libs/gtkmm2ext/gtk_ui.cc
index 4ca23b0240..e15a3524db 100644
--- a/libs/gtkmm2ext/gtk_ui.cc
+++ b/libs/gtkmm2ext/gtk_ui.cc
@@ -65,6 +65,9 @@ UI::UI (string namestr, int *argc, char ***argv)
: AbstractUI<UIRequest> (namestr, true)
{
theMain = new Main (argc, argv);
+#ifndef GTK_NEW_TOOLTIP_API
+ tips = new Tooltips;
+#endif
_active = false;
@@ -95,6 +98,7 @@ UI::UI (string namestr, int *argc, char ***argv)
errors->dismiss_button().set_name ("ErrorLogCloseButton");
errors->signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), (Window *) errors));
+ errors->set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY);
register_thread (pthread_self(), X_("GUI"));
@@ -372,7 +376,16 @@ UI::do_request (UIRequest* req)
} else if (req->type == SetTip) {
- /* XXX need to figure out how this works */
+#ifdef GTK_NEW_TOOLTIP_API
+ /* even if the installed GTK is up to date,
+ at present (November 2008) our included
+ version of gtkmm is not. so use the GTK
+ API that we've verified has the right function.
+ */
+ gtk_widget_set_tooltip_text (req->widget->gobj(), req->msg);
+#else
+ tips->set_tip (*req->widget, req->msg, "");
+#endif
} else {
diff --git a/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h b/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h
index fbc5ea90ef..085e500f21 100644
--- a/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h
+++ b/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h
@@ -62,6 +62,21 @@ class DnDTreeViewBase : public Gtk::TreeView
std::list<Gtk::TargetEntry> draggable;
Gdk::DragAction suggested_action;
int data_column;
+ std::string object_type;
+
+ struct DragData {
+ Gtk::TreeView* source;
+ int data_column;
+ std::string object_type;
+ };
+
+ static DragData drag_data;
+
+ void start_object_drag () {
+ drag_data.source = this;
+ drag_data.data_column = data_column;
+ drag_data.object_type = object_type;
+ }
};
template<class DataType>
@@ -71,21 +86,26 @@ class DnDTreeView : public DnDTreeViewBase
DnDTreeView() {}
~DnDTreeView() {}
- sigc::signal<void,std::string,uint32_t,const DataType*> signal_object_drop;
+ sigc::signal<void,const std::list<DataType>& > signal_drop;
void on_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context, Gtk::SelectionData& selection_data, guint info, guint time) {
if (selection_data.get_target() == "GTK_TREE_MODEL_ROW") {
-
+
TreeView::on_drag_data_get (context, selection_data, info, time);
-
- } else if (data_column >= 0) {
-
- Gtk::TreeSelection::ListHandle_Path selection = get_selection()->get_selected_rows ();
- SerializedObjectPointers<DataType>* sr = serialize_pointers (get_model(), &selection, selection_data.get_target());
- selection_data.set (8, (guchar*)sr, sr->size);
+
+ } else if (selection_data.get_target() == object_type) {
+
+ start_object_drag ();
+
+ /* we don't care about the data passed around by DnD, but
+ we have to provide something otherwise it will stop.
+ */
+
+ guchar c;
+ selection_data.set (8, (guchar*)&c, 1);
}
}
-
+
void on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, const Gtk::SelectionData& selection_data, guint info, guint time) {
if (suggested_action) {
/* this is a drag motion callback. just update the status to
@@ -100,64 +120,39 @@ class DnDTreeView : public DnDTreeViewBase
TreeView::on_drag_data_received (context, x, y, selection_data, info, time);
- } else if (data_column >= 0) {
-
- /* object D-n-D */
-
- const void* data = selection_data.get_data();
- const SerializedObjectPointers<DataType>* sr = reinterpret_cast<const SerializedObjectPointers<DataType> *>(data);
-
- if (sr) {
- signal_object_drop (sr->type, sr->cnt, sr->data);
- }
+
+ } else if (selection_data.get_target() == object_type) {
+ end_object_drag ();
+
} else {
/* some kind of target type added by the app, which will be handled by a signal handler */
}
}
- private:
-
- SerializedObjectPointers<DataType>* serialize_pointers (Glib::RefPtr<Gtk::TreeModel> model,
- Gtk::TreeSelection::ListHandle_Path* selection,
- Glib::ustring type) {
-
- /* this nasty chunk of code is here because X's DnD protocol (probably other graphics UI's too)
- requires that we package up the entire data collection for DnD in a single contiguous region
- (so that it can be trivially copied between address spaces). We don't know the type of DataType so
- we have to mix-and-match C and C++ programming techniques here to get the right result.
-
- The C trick is to use the "someType foo[0];" declaration trick to create a zero-sized array at the
- end of a SerializedObjectPointers<DataType object. Then we allocate a raw memory buffer that extends
- past that array and thus provides space for however many DataType items we actually want to pass
- around.
-
- The C++ trick is to use the placement operator new() syntax to initialize that extra
- memory properly.
- */
-
- uint32_t cnt = selection->size();
- uint32_t sz = (sizeof (DataType) * cnt) + sizeof (SerializedObjectPointers<DataType>);
-
- char* buf = new char[sz];
- SerializedObjectPointers<DataType>* sr = (SerializedObjectPointers<DataType>*) buf;
+ /**
+ * this can be called by the Treeview itself or by some other
+ * object that wants to get the list of dragged items.
+ */
- for (uint32_t i = 0; i < cnt; ++i) {
- new ((void *) &sr->data[i]) DataType ();
- }
-
- sr->cnt = cnt;
- sr->size = sz;
- snprintf (sr->type, sizeof (sr->type), "%s", type.c_str());
+ void get_object_drag_data (std::list<DataType>& l) {
+ Glib::RefPtr<Gtk::TreeModel> model = drag_data.source->get_model();
+ DataType v;
+ Gtk::TreeSelection::ListHandle_Path selection = drag_data.source->get_selection()->get_selected_rows ();
- cnt = 0;
-
- for (Gtk::TreeSelection::ListHandle_Path::iterator x = selection->begin(); x != selection->end(); ++x, ++cnt) {
- model->get_iter (*x)->get_value (data_column, sr->data[cnt]);
+ for (Gtk::TreeSelection::ListHandle_Path::iterator x = selection.begin(); x != selection.end(); ++x) {
+ model->get_iter (*x)->get_value (drag_data.data_column, v);
+ l.push_back (v);
}
+ }
- return sr;
+ private:
+ void end_object_drag () {
+ std::list<DataType> l;
+ get_object_drag_data (l);
+ signal_drop (l);
}
+
};
} // namespace
diff --git a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
index 22ac517672..89f3413435 100644
--- a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
+++ b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
@@ -29,6 +29,9 @@
#include <pthread.h>
#include <gtkmm/widget.h>
#include <gtkmm/style.h>
+#ifndef GTK_NEW_TOOLTIP_API
+#include <gtkmm/tooltips.h>
+#endif
#include <gtkmm/textbuffer.h>
#include <gtkmm/main.h>
#include <gdkmm/color.h>
@@ -149,6 +152,9 @@ class UI : public Receiver, public AbstractUI<UIRequest>
static pthread_t gui_thread;
bool _active;
Gtk::Main *theMain;
+#ifndef GTK_NEW_TOOLTIP_API
+ Gtk::Tooltips *tips;
+#endif
TextViewer *errors;
Glib::RefPtr<Gtk::TextBuffer::Tag> error_ptag;
Glib::RefPtr<Gtk::TextBuffer::Tag> error_mtag;
diff --git a/libs/gtkmm2ext/gtkmm2ext/tearoff.h b/libs/gtkmm2ext/gtkmm2ext/tearoff.h
index 5e80892b98..737a6ddd03 100644
--- a/libs/gtkmm2ext/gtkmm2ext/tearoff.h
+++ b/libs/gtkmm2ext/gtkmm2ext/tearoff.h
@@ -34,6 +34,8 @@ class TearOff : public Gtk::HBox
virtual ~TearOff ();
void set_visible (bool yn);
+ void set_can_be_torn_off (bool);
+ bool can_be_torn_off () const { return _can_be_torn_off; }
sigc::signal<void> Detach;
sigc::signal<void> Attach;
@@ -55,6 +57,7 @@ class TearOff : public Gtk::HBox
double drag_y;
bool dragging;
bool _visible;
+ bool _can_be_torn_off;
gint tearoff_click (GdkEventButton*);
gint close_click (GdkEventButton*);
diff --git a/libs/gtkmm2ext/popup.cc b/libs/gtkmm2ext/popup.cc
index 0b150eefe1..2d586d0317 100644
--- a/libs/gtkmm2ext/popup.cc
+++ b/libs/gtkmm2ext/popup.cc
@@ -22,6 +22,7 @@
#include <gtkmm2ext/popup.h>
#include <gtkmm2ext/utils.h>
+#include <gtkmm2ext/gtk_ui.h>
using namespace std;
using namespace Gtk;
@@ -83,9 +84,17 @@ PopUp::remove ()
}
}
+#define ENSURE_GUI_THREAD(slot) \
+ if (!Gtkmm2ext::UI::instance()->caller_is_ui_thread()) {\
+ Gtkmm2ext::UI::instance()->call_slot ((slot));\
+ return;\
+ }
+
void
PopUp::touch ()
{
+ ENSURE_GUI_THREAD (mem_fun (*this, &PopUp::touch));
+
if (is_visible ()) {
remove ();
} else {
diff --git a/libs/gtkmm2ext/tearoff.cc b/libs/gtkmm2ext/tearoff.cc
index 92bde5541e..be3bfe4113 100644
--- a/libs/gtkmm2ext/tearoff.cc
+++ b/libs/gtkmm2ext/tearoff.cc
@@ -36,6 +36,7 @@ TearOff::TearOff (Widget& c, bool allow_resize)
{
dragging = false;
_visible = true;
+ _can_be_torn_off = true;
tearoff_event_box.add (tearoff_arrow);
tearoff_event_box.set_events (BUTTON_PRESS_MASK|BUTTON_RELEASE_MASK);
@@ -79,6 +80,21 @@ TearOff::~TearOff ()
}
void
+TearOff::set_can_be_torn_off (bool yn)
+{
+ if (yn != _can_be_torn_off) {
+ if (yn) {
+ tearoff_arrow.set_no_show_all (false);
+ tearoff_arrow.show ();
+ } else {
+ tearoff_arrow.set_no_show_all (true);
+ tearoff_arrow.hide ();
+ }
+ _can_be_torn_off = yn;
+ }
+}
+
+void
TearOff::set_visible (bool yn)
{
/* don't change visibility if torn off */
@@ -102,13 +118,16 @@ TearOff::set_visible (bool yn)
gint
TearOff::tearoff_click (GdkEventButton* ev)
{
- remove (contents);
- window_box.pack_start (contents);
- own_window.set_name (get_name());
- close_event_box.set_name (get_name());
- own_window.show_all ();
- hide ();
- Detach ();
+ if (_can_be_torn_off) {
+ remove (contents);
+ window_box.pack_start (contents);
+ own_window.set_name (get_name());
+ close_event_box.set_name (get_name());
+ own_window.show_all ();
+ hide ();
+ Detach ();
+ }
+
return true;
}
diff --git a/libs/midi++2/alsa_sequencer_midiport.cc b/libs/midi++2/alsa_sequencer_midiport.cc
index 1c2a98bfa3..fc69099d0e 100644
--- a/libs/midi++2/alsa_sequencer_midiport.cc
+++ b/libs/midi++2/alsa_sequencer_midiport.cc
@@ -171,7 +171,7 @@ ALSA_SequencerMidiPort::create_ports (const Port::Descriptor& desc)
caps |= SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE;
if (desc.mode == O_RDONLY || desc.mode == O_RDWR)
caps |= SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ;
-
+
if (0 <= (err = snd_seq_create_simple_port (seq, desc.tag.c_str(), caps,
(SND_SEQ_PORT_TYPE_MIDI_GENERIC|
SND_SEQ_PORT_TYPE_SOFTWARE|
@@ -308,13 +308,17 @@ ALSA_SequencerMidiPort::get_connections (vector<SequencerPortAddress>& connectio
seq_addr.client = snd_seq_client_id (seq);
seq_addr.port = port_id;
snd_seq_query_subscribe_set_root(subs, &seq_addr);
-
+
while (snd_seq_query_port_subscribers(seq, subs) >= 0) {
- seq_addr = *snd_seq_query_subscribe_get_addr (subs);
-
- connections.push_back (SequencerPortAddress (seq_addr.client,
- seq_addr.port));
+ if (snd_seq_query_subscribe_get_time_real (subs)) {
+ /* interesting connection */
+
+ seq_addr = *snd_seq_query_subscribe_get_addr (subs);
+
+ connections.push_back (SequencerPortAddress (seq_addr.client,
+ seq_addr.port));
+ }
snd_seq_query_subscribe_set_index(subs, snd_seq_query_subscribe_get_index(subs) + 1);
}
diff --git a/libs/midi++2/coremidi_midiport.cc b/libs/midi++2/coremidi_midiport.cc
index 14020a6f35..9eacfc0cc3 100644
--- a/libs/midi++2/coremidi_midiport.cc
+++ b/libs/midi++2/coremidi_midiport.cc
@@ -122,7 +122,7 @@ void CoreMidi_MidiPort::read_proc (const MIDIPacketList *pktlist, void *refCon,
if (driver->firstrecv) {
driver->firstrecv = false;
- PBD::ThreadCreated (pthread_self(), "COREMIDI");
+ PBD::notify_gui_about_thread_creation (pthread_self(), "COREMIDI");
}
for (unsigned int i = 0; i < pktlist->numPackets; ++i) {
diff --git a/libs/midi++2/midi.cc b/libs/midi++2/midi.cc
index f612b4707a..89d74b1b31 100644
--- a/libs/midi++2/midi.cc
+++ b/libs/midi++2/midi.cc
@@ -19,8 +19,6 @@
*/
#include <cstring>
-#include <string>
-#include <cstring>
#include <cstdlib>
#include <midi++/types.h>
diff --git a/libs/midi++2/midimanager.cc b/libs/midi++2/midimanager.cc
index 8a358c3183..14c9d43793 100644
--- a/libs/midi++2/midimanager.cc
+++ b/libs/midi++2/midimanager.cc
@@ -70,6 +70,47 @@ Manager::add_port (const XMLNode& node)
PortMap::iterator existing;
pair<string, Port *> newpair;
+ /* do not allow multiple ports with the same tag. if attempted, just return the existing
+ port with the same tag. XXX this is really caused by the mess of setup_midi() being
+ called twice in Ardour, once in the global init() function and once after the user RC file
+ has been loaded (there may be extra ports in it).
+ */
+
+ if ((existing = ports_by_tag.find (desc.tag)) != ports_by_tag.end()) {
+
+ port = (*existing).second;
+
+ if (port->mode() == desc.mode) {
+
+ /* Same mode - reuse the port, and just
+ create a new tag entry.
+ */
+
+ newpair.first = desc.tag;
+ newpair.second = port;
+
+ ports_by_tag.insert (newpair);
+ return port;
+ }
+
+ /* If the existing is duplex, and this request
+ is not, then fail, because most drivers won't
+ allow opening twice with duplex and non-duplex
+ operation.
+ */
+
+ if ((desc.mode == O_RDWR && port->mode() != O_RDWR) ||
+ (desc.mode != O_RDWR && port->mode() == O_RDWR)) {
+ error << "MIDIManager: port tagged \""
+ << desc.tag
+ << "\" cannot be opened duplex and non-duplex"
+ << endmsg;
+ return 0;
+ }
+
+ /* modes must be different or complementary */
+ }
+
if (!PortFactory::ignore_duplicate_devices (desc.type)) {
if ((existing = ports_by_device.find (desc.device)) != ports_by_device.end()) {
diff --git a/libs/midi++2/midiparser.cc b/libs/midi++2/midiparser.cc
index 423e833d2c..4cbcd27694 100644
--- a/libs/midi++2/midiparser.cc
+++ b/libs/midi++2/midiparser.cc
@@ -24,7 +24,7 @@
#include <cstring>
#include <cstdlib>
#include <unistd.h>
-#include <string>
+#include <cstring>
#include <iostream>
#include <iterator>
diff --git a/libs/midi++2/mtc.cc b/libs/midi++2/mtc.cc
index 13f5221929..9d62c7354c 100644
--- a/libs/midi++2/mtc.cc
+++ b/libs/midi++2/mtc.cc
@@ -18,10 +18,9 @@
$Id$
*/
-#include <cstring>
#include <cstdlib>
#include <unistd.h>
-#include <string>
+#include <cstring>
#include <iostream>
#include <midi++/types.h>
@@ -51,7 +50,6 @@ Parser::possible_mtc (byte *sysex_buf, size_t msglen)
fake_mtc_time[3] = (sysex_buf[5] & 0x1f); // hours
_mtc_fps = MTC_FPS ((sysex_buf[5] & 0x60) >> 5); // fps
-
fake_mtc_time[4] = (byte) _mtc_fps;
/* wait for first quarter frame, which could indicate forwards
@@ -293,6 +291,7 @@ Parser::process_mtc_quarter_frame (byte *msg)
if (!_mtc_locked) {
_mtc_locked = true;
}
+
mtc_time (_mtc_time, false);
}
expected_mtc_quarter_frame_code = 0;
diff --git a/libs/pbd/command.cc b/libs/pbd/command.cc
index 011534a662..2b64c46030 100644
--- a/libs/pbd/command.cc
+++ b/libs/pbd/command.cc
@@ -20,7 +20,6 @@
#include <pbd/command.h>
#include <pbd/xml++.h>
-
XMLNode &Command::get_state()
{
XMLNode *node = new XMLNode ("Command");
diff --git a/libs/pbd/pbd/abstract_ui.cc b/libs/pbd/pbd/abstract_ui.cc
index 97f19e1fe5..8e5b9ceb07 100644
--- a/libs/pbd/pbd/abstract_ui.cc
+++ b/libs/pbd/pbd/abstract_ui.cc
@@ -17,7 +17,6 @@ AbstractUI<RequestObject>::AbstractUI (string name, bool with_signal_pipes)
throw failed_constructor();
}
- PBD::ThreadCreated.connect (mem_fun (*this, &AbstractUI<RequestObject>::register_thread));
PBD::ThreadCreatedWithRequestSize.connect (mem_fun (*this, &AbstractUI<RequestObject>::register_thread_with_request_count));
}
diff --git a/libs/pbd/pbd/command.h b/libs/pbd/pbd/command.h
index a66485bc0d..3fac531591 100644
--- a/libs/pbd/pbd/command.h
+++ b/libs/pbd/pbd/command.h
@@ -26,7 +26,7 @@
class Command : public PBD::StatefulDestructible
{
public:
- virtual ~Command() {}
+ virtual ~Command() { /* NOTE: derived classes must call drop_references() */ }
virtual void operator() () = 0;
diff --git a/libs/pbd/pbd/memento_command.h b/libs/pbd/pbd/memento_command.h
index fdc7527dc6..660e5875d5 100644
--- a/libs/pbd/pbd/memento_command.h
+++ b/libs/pbd/pbd/memento_command.h
@@ -43,7 +43,7 @@ public:
: obj(object), before(before), after(after)
{
/* catch destruction of the object */
- new PBD::Shiva<obj_T,MementoCommand<obj_T> > (object, *this);
+ new PBD::PairedShiva<obj_T,MementoCommand<obj_T> > (object, *this);
}
~MementoCommand ()
diff --git a/libs/pbd/pbd/pthread_utils.h b/libs/pbd/pbd/pthread_utils.h
index 9fa6ba4ce4..dd91e0a2b1 100644
--- a/libs/pbd/pbd/pthread_utils.h
+++ b/libs/pbd/pbd/pthread_utils.h
@@ -35,8 +35,11 @@ void pthread_exit_pbd (void* status);
std::string pthread_name ();
namespace PBD {
- extern sigc::signal<void,pthread_t,std::string> ThreadCreated;
- extern sigc::signal<void,pthread_t,std::string,uint32_t> ThreadCreatedWithRequestSize;
+ extern void notify_gui_about_thread_creation (pthread_t, std::string, int requests = 256);
+ extern void notify_gui_about_thread_exit (pthread_t);
+
+ extern sigc::signal<void,pthread_t> ThreadLeaving;
+ extern sigc::signal<void,pthread_t,std::string,uint32_t> ThreadCreatedWithRequestSize;
}
#endif /* __pbd_pthread_utils__ */
diff --git a/libs/pbd/pbd/shiva.h b/libs/pbd/pbd/shiva.h
index 2e53ff65f5..90adad6250 100644
--- a/libs/pbd/pbd/shiva.h
+++ b/libs/pbd/pbd/shiva.h
@@ -27,7 +27,8 @@ namespace PBD {
/* named after the Hindu god Shiva, The Destroyer */
template<typename ObjectWithGoingAway, typename ObjectToBeDestroyed>
-class Shiva {
+class Shiva : public sigc::trackable
+{
public:
Shiva (ObjectWithGoingAway& emitter, ObjectToBeDestroyed& receiver) {
@@ -58,15 +59,15 @@ class Shiva {
};
template<typename ObjectWithGoingAway, typename ObjectToBeDestroyed>
-class ProxyShiva {
+class ProxyShiva : public sigc::trackable
+{
public:
ProxyShiva (ObjectWithGoingAway& emitter, ObjectToBeDestroyed& receiver, void (*callback)(ObjectToBeDestroyed*, ObjectWithGoingAway*)) {
-
+
/* if the emitter goes away, destroy the receiver */
_callback = callback;
- _callback_argument1 = &receiver;
- _callback_argument2 = &emitter;
+ _callback_argument = &emitter;
_connection = emitter.GoingAway.connect
(sigc::bind (sigc::mem_fun
@@ -74,19 +75,18 @@ class ProxyShiva {
&receiver));
}
- ~ProxyShiva() {
+ ~ProxyShiva () {
forget ();
}
private:
sigc::connection _connection;
void (*_callback) (ObjectToBeDestroyed*, ObjectWithGoingAway*);
- ObjectToBeDestroyed* _callback_argument1;
- ObjectWithGoingAway* _callback_argument2;
+ ObjectWithGoingAway* _callback_argument;
void destroy (ObjectToBeDestroyed* obj) {
/* callback must destroy obj if appropriate, not done here */
- _callback (obj, _callback_argument2);
+ _callback (obj, _callback_argument);
forget ();
}
@@ -96,7 +96,8 @@ class ProxyShiva {
};
template<typename ObjectWithGoingAway, typename ObjectToBeDestroyed>
-class PairedShiva {
+class PairedShiva : public sigc::trackable
+{
public:
PairedShiva (ObjectWithGoingAway& emitter, ObjectToBeDestroyed& receiver) {
diff --git a/libs/pbd/pbd/undo.h b/libs/pbd/pbd/undo.h
index 8f1716d09f..cf1f6f3470 100644
--- a/libs/pbd/pbd/undo.h
+++ b/libs/pbd/pbd/undo.h
@@ -27,6 +27,7 @@
#include <sigc++/bind.h>
#include <sys/time.h>
#include <pbd/command.h>
+#include <pbd/shiva.h>
typedef sigc::slot<void> UndoAction;
@@ -36,7 +37,6 @@ class UndoTransaction : public Command
UndoTransaction ();
UndoTransaction (const UndoTransaction&);
UndoTransaction& operator= (const UndoTransaction&);
- ~UndoTransaction ();
void clear ();
bool empty() const;
@@ -61,10 +61,17 @@ class UndoTransaction : public Command
private:
std::list<Command*> actions;
+ std::list<PBD::ProxyShiva<Command,UndoTransaction>*> shivas;
struct timeval _timestamp;
bool _clearing;
friend void command_death (UndoTransaction*, Command *);
+
+ friend class UndoHistory;
+
+ ~UndoTransaction ();
+ void about_to_explicitly_delete ();
+
};
class UndoHistory : public sigc::trackable
@@ -87,17 +94,24 @@ class UndoHistory : public sigc::trackable
void clear_undo ();
void clear_redo ();
+ /* returns all or part of the history.
+ If depth==0 it returns just the top
+ node. If depth<0, it returns everything.
+ If depth>0, it returns state for that
+ many elements of the history, or
+ the full history, whichever is smaller.
+ */
+
XMLNode &get_state(int32_t depth = 0);
void save_state();
- void set_depth (int32_t);
- int32_t get_depth() const { return _depth; }
+ void set_depth (uint32_t);
sigc::signal<void> Changed;
private:
bool _clearing;
- int32_t _depth;
+ uint32_t _depth;
std::list<UndoTransaction*> UndoList;
std::list<UndoTransaction*> RedoList;
diff --git a/libs/pbd/pthread_utils.cc b/libs/pbd/pthread_utils.cc
index 3408f2c0b7..c63f988af3 100644
--- a/libs/pbd/pthread_utils.cc
+++ b/libs/pbd/pthread_utils.cc
@@ -30,14 +30,31 @@ using namespace std;
typedef std::map<string,pthread_t> ThreadMap;
static ThreadMap all_threads;
static pthread_mutex_t thread_map_lock = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t gui_notify_lock = PTHREAD_MUTEX_INITIALIZER;
namespace PBD {
- sigc::signal<void,pthread_t,std::string> ThreadCreated;
+ sigc::signal<void,pthread_t> ThreadLeaving;
sigc::signal<void,pthread_t,std::string,uint32_t> ThreadCreatedWithRequestSize;
}
using namespace PBD;
+void
+PBD::notify_gui_about_thread_creation (pthread_t thread, std::string str, int request_count)
+{
+ pthread_mutex_lock (&gui_notify_lock);
+ ThreadCreatedWithRequestSize (thread, str, request_count);
+ pthread_mutex_unlock (&gui_notify_lock);
+}
+
+void
+PBD::notify_gui_about_thread_exit (pthread_t thread)
+{
+ pthread_mutex_lock (&gui_notify_lock);
+ ThreadLeaving (thread);
+ pthread_mutex_unlock (&gui_notify_lock);
+}
+
int
pthread_create_and_store (string name, pthread_t *thread, pthread_attr_t *attr, void * (*start_routine)(void *), void * arg)
{
diff --git a/libs/pbd/undo.cc b/libs/pbd/undo.cc
index f04b4d9431..5365a98146 100644
--- a/libs/pbd/undo.cc
+++ b/libs/pbd/undo.cc
@@ -18,14 +18,12 @@
$Id$
*/
-#include <iostream>
#include <string>
#include <sstream>
#include <time.h>
#include <pbd/undo.h>
#include <pbd/xml++.h>
-#include <pbd/shiva.h>
#include <sigc++/bind.h>
@@ -79,8 +77,10 @@ UndoTransaction::operator= (const UndoTransaction& rhs)
void
UndoTransaction::add_command (Command *const action)
{
- /* catch death */
- new PBD::ProxyShiva<Command,UndoTransaction> (*action, *this, &command_death);
+ /* catch death of command (e.g. caused by death of object to
+ which it refers.
+ */
+ shivas.push_back (new PBD::ProxyShiva<Command,UndoTransaction> (*action, *this, &command_death));
actions.push_back (action);
}
@@ -90,6 +90,21 @@ UndoTransaction::remove_command (Command* const action)
actions.remove (action);
}
+void
+UndoTransaction::about_to_explicitly_delete ()
+{
+ /* someone is going to call our destructor and its not Shiva,
+ the god of destruction and chaos. This happens when an UndoHistory
+ is pruning itself. we must remove Shivas to avoid the god
+ striking us down a second time, unnecessarily and illegally.
+ */
+
+ for (list<PBD::ProxyShiva<Command,UndoTransaction>*>::iterator i = shivas.begin(); i != shivas.end(); ++i) {
+ delete *i;
+ }
+ shivas.clear ();
+}
+
bool
UndoTransaction::empty () const
{
@@ -154,27 +169,59 @@ UndoHistory::UndoHistory ()
}
void
-UndoHistory::set_depth (int32_t d)
+UndoHistory::set_depth (uint32_t d)
{
+ UndoTransaction* ut;
+ uint32_t current_depth = UndoList.size();
+
_depth = d;
- while (_depth > 0 && UndoList.size() > (uint32_t) _depth) {
- UndoList.pop_front ();
+ if (d > current_depth) {
+ /* not even transactions to meet request */
+ return;
+ }
+
+ if (_depth > 0) {
+
+ uint32_t cnt = current_depth - d;
+
+ while (cnt--) {
+ ut = UndoList.front();
+ UndoList.pop_front ();
+ ut->about_to_explicitly_delete ();
+ delete ut;
+ }
}
}
void
UndoHistory::add (UndoTransaction* const ut)
{
+ uint32_t current_depth = UndoList.size();
+
ut->GoingAway.connect (bind (mem_fun (*this, &UndoHistory::remove), ut));
- while (_depth > 0 && UndoList.size() > (uint32_t) _depth) {
- UndoList.pop_front ();
+ /* if the current undo history is larger than or equal to the currently
+ requested depth, then pop off at least 1 element to make space
+ at the back for new one.
+ */
+
+ if ((_depth > 0) && current_depth && (current_depth >= _depth)) {
+
+ uint32_t cnt = 1 + (current_depth - _depth);
+
+ while (cnt--) {
+ UndoTransaction* ut;
+ ut = UndoList.front ();
+ UndoList.pop_front ();
+ ut->about_to_explicitly_delete ();
+ delete ut;
+ }
}
UndoList.push_back (ut);
- /* we are now owners of the transaction */
+ /* we are now owners of the transaction and must delete it when finished with it */
Changed (); /* EMIT SIGNAL */
}
diff --git a/libs/surfaces/control_protocol/basic_ui.cc b/libs/surfaces/control_protocol/basic_ui.cc
index 71d5794805..b88e002374 100644
--- a/libs/surfaces/control_protocol/basic_ui.cc
+++ b/libs/surfaces/control_protocol/basic_ui.cc
@@ -50,10 +50,9 @@ BasicUI::~BasicUI ()
void
BasicUI::register_thread (std::string name)
{
- PBD::ThreadCreated (pthread_self(), name);
+ PBD::notify_gui_about_thread_creation (pthread_self(), name);
}
-
void
BasicUI::access_action ( std::string action_path )
{
diff --git a/libs/surfaces/control_protocol/control_protocol.cc b/libs/surfaces/control_protocol/control_protocol.cc
index 708373e3bc..1c9ee83833 100644
--- a/libs/surfaces/control_protocol/control_protocol.cc
+++ b/libs/surfaces/control_protocol/control_protocol.cc
@@ -70,14 +70,14 @@ ControlProtocol::next_track (uint32_t initial_id)
id++;
}
- while (id < limit) {
+ while (id <= limit) {
if ((cr = session->route_by_remote_id (id)) != 0) {
break;
}
id++;
}
- if (id == limit) {
+ if (id >= limit) {
id = 0;
while (id != initial_id) {
if ((cr = session->route_by_remote_id (id)) != 0) {
@@ -93,9 +93,9 @@ ControlProtocol::next_track (uint32_t initial_id)
void
ControlProtocol::prev_track (uint32_t initial_id)
{
- uint32_t limit = session->nroutes() - 1;
+ uint32_t limit = session->nroutes();
boost::shared_ptr<Route> cr = route_table[0];
- uint32_t id;
+ int32_t id;
if (cr) {
id = cr->remote_control_id ();
@@ -104,7 +104,7 @@ ControlProtocol::prev_track (uint32_t initial_id)
}
if (id == 0) {
- id = session->nroutes() - 1;
+ id = limit;
} else {
id--;
}
diff --git a/libs/surfaces/frontier/tranzport/tranzport_control_protocol.cc b/libs/surfaces/frontier/tranzport/tranzport_control_protocol.cc
index c874a05de5..5b413273ea 100644
--- a/libs/surfaces/frontier/tranzport/tranzport_control_protocol.cc
+++ b/libs/surfaces/frontier/tranzport/tranzport_control_protocol.cc
@@ -1029,7 +1029,7 @@ TranzportControlProtocol::monitor_work ()
uint8_t offline = 0;
- PBD::ThreadCreated (pthread_self(), X_("Tranzport"));
+ PBD::notify_gui_about_thread_creation (pthread_self(), X_("Tranzport"));
pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, 0);
pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0);
next_track ();
diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc
index 502cea581f..f7886e078f 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.cc
+++ b/libs/surfaces/mackie/mackie_control_protocol.cc
@@ -1030,9 +1030,9 @@ void MackieControlProtocol::update_automation( RouteSignal & rs )
}
}
-void MackieControlProtocol::poll_automation()
+void MackieControlProtocol::poll_automation ()
{
- if ( _active )
+ if ( _active && _automation_last.elapsed() >= 20 )
{
// do all currently mapped routes
for( RouteSignals::iterator it = route_signals.begin(); it != route_signals.end(); ++it )
@@ -1041,7 +1041,92 @@ void MackieControlProtocol::poll_automation()
}
// and the master strip
- if ( master_route_signal != 0 ) update_automation( *master_route_signal );
+ if ( master_route_signal != 0 )
+ {
+ update_automation( *master_route_signal );
+ }
+
+ update_timecode_display();
+
+ _automation_last.start();
+ }
+}
+
+string MackieControlProtocol::format_bbt_timecode( nframes_t now_frame )
+{
+ BBT_Time bbt_time;
+ session->bbt_time( now_frame, bbt_time );
+
+ // According to the Logic docs
+ // digits: 888/88/88/888
+ // BBT mode: Bars/Beats/Subdivisions/Ticks
+ ostringstream os;
+ os << setw(3) << setfill('0') << bbt_time.bars;
+ os << setw(2) << setfill('0') << bbt_time.beats;
+
+ // figure out subdivisions per beat
+ const Meter & meter = session->tempo_map().meter_at( now_frame );
+ int subdiv = 2;
+ if ( meter.note_divisor() == 8 && (meter.beats_per_bar() == 12.0 || meter.beats_per_bar() == 9.0 || meter.beats_per_bar() == 6.0) )
+ {
+ subdiv = 3;
+ }
+
+ uint32_t subdivisions = bbt_time.ticks / uint32_t( Meter::ticks_per_beat / subdiv );
+ uint32_t ticks = bbt_time.ticks % uint32_t( Meter::ticks_per_beat / subdiv );
+
+ os << setw(2) << setfill('0') << subdivisions + 1;
+ os << setw(3) << setfill('0') << ticks;
+
+ return os.str();
+}
+
+string MackieControlProtocol::format_smpte_timecode( nframes_t now_frame )
+{
+ SMPTE::Time smpte;
+ session->smpte_time( now_frame, smpte );
+
+ // According to the Logic docs
+ // digits: 888/88/88/888
+ // SMPTE mode: Hours/Minutes/Seconds/Frames
+ ostringstream os;
+ os << setw(3) << setfill('0') << smpte.hours;
+ os << setw(2) << setfill('0') << smpte.minutes;
+ os << setw(2) << setfill('0') << smpte.seconds;
+ os << setw(3) << setfill('0') << smpte.frames;
+
+ return os.str();
+}
+
+void MackieControlProtocol::update_timecode_display()
+{
+ if ( surface().has_timecode_display() )
+ {
+ // do assignment here so current_frame is fixed
+ nframes_t current_frame = session->transport_frame();
+ string timecode;
+
+ switch ( _timecode_type )
+ {
+ case ARDOUR::AnyTime::BBT:
+ timecode = format_bbt_timecode( current_frame );
+ break;
+ case ARDOUR::AnyTime::SMPTE:
+ timecode = format_smpte_timecode( current_frame );
+ break;
+ default:
+ ostringstream os;
+ os << "Unknown timecode: " << _timecode_type;
+ throw runtime_error( os.str() );
+ }
+
+ // only write the timecode string to the MCU if it's changed
+ // since last time. This is to reduce midi bandwidth used.
+ if ( timecode != _timecode_last )
+ {
+ surface().display_timecode( mcu_port(), builder, timecode, _timecode_last );
+ _timecode_last = timecode;
+ }
}
}
diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h
index 0ff7fbd9d4..735a2c88bd 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.h
+++ b/libs/surfaces/mackie/mackie_control_protocol.h
@@ -255,12 +255,19 @@ class MackieControlProtocol
void add_port( MIDI::Port &, int number );
- /// read automation data from the currently active routes and send to surface
- void poll_automation();
+ /**
+ Read session data and send to surface. Includes
+ automation from the currently active routes and
+ timecode displays.
+ */
+ void poll_automation ();
// called from poll_automation to figure out which automations need to be sent
void update_automation( Mackie::RouteSignal & );
+ // also called from poll_automation to update timecode display
+ void update_timecode_display();
+
/**
notification that the port is about to start it's init sequence.
We must make sure that before this exits, the port is being polled
diff --git a/libs/surfaces/mackie/mackie_control_protocol_poll.cc b/libs/surfaces/mackie/mackie_control_protocol_poll.cc
index cf72c35678..cd95551f70 100644
--- a/libs/surfaces/mackie/mackie_control_protocol_poll.cc
+++ b/libs/surfaces/mackie/mackie_control_protocol_poll.cc
@@ -33,8 +33,7 @@ bool MackieControlProtocol::probe()
void * MackieControlProtocol::monitor_work()
{
- // What does ThreadCreatedWithRequestSize do?
- PBD::ThreadCreated (pthread_self(), X_("Mackie"));
+ PBD::notify_gui_about_thread_creation (pthread_self(), X_("Mackie"));
pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, 0);
pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0);
@@ -105,6 +104,8 @@ void MackieControlProtocol::read_ports()
for ( int p = 0; p < nfds; ++p )
{
// this will cause handle_midi_any in the MackiePort to be triggered
+ // for alsa/raw ports
+ // alsa/sequencer ports trigger the midi parser off poll
if ( (pfd[p].revents & POLLIN) > 0 )
{
// avoid deadlocking?
diff --git a/libs/surfaces/tranzport/init.cc b/libs/surfaces/tranzport/init.cc
index 94f85bdc56..726cb60d49 100644
--- a/libs/surfaces/tranzport/init.cc
+++ b/libs/surfaces/tranzport/init.cc
@@ -173,7 +173,7 @@ TranzportControlProtocol::monitor_work ()
bool first_time = true;
uint8_t offline = 0;
- PBD::ThreadCreated (pthread_self(), X_("Tranzport"));
+ PBD::notify_gui_about_thread_creation (pthread_self(), X_("Tranzport"));
pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, 0);
pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0);
rtpriority_set();
diff --git a/libs/surfaces/wiimote/SConscript b/libs/surfaces/wiimote/SConscript
new file mode 100644
index 0000000000..c530445887
--- /dev/null
+++ b/libs/surfaces/wiimote/SConscript
@@ -0,0 +1,60 @@
+# -*- python -*-
+
+import os
+import os.path
+import glob
+
+Import('env final_prefix install_prefix final_config_prefix libraries i18n')
+
+wiimote = env.Clone()
+
+#
+# this defines the version number of libardour_wiimote
+#
+
+domain = 'ardour_wiimote'
+
+wiimote.Append(DOMAIN = domain, MAJOR = 1, MINOR = 0, MICRO = 0)
+wiimote.Append(CXXFLAGS = "-DPACKAGE=\\\"" + domain + "\\\"")
+wiimote.Append(CXXFLAGS="-DLIBSIGC_DISABLE_DEPRECATED")
+wiimote.Append(PACKAGE = domain)
+wiimote.Append(POTFILE = domain + '.pot')
+
+wiimote_files=Split("""
+wiimote.cc
+interface.cc
+""")
+
+wiimote.Append(CCFLAGS="-D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE")
+wiimote.Append(CXXFLAGS="-DDATA_DIR=\\\""+final_prefix+"/share\\\"")
+wiimote.Append(CXXFLAGS="-DCONFIG_DIR=\\\""+final_config_prefix+"\\\"")
+wiimote.Append(CXXFLAGS="-DLOCALEDIR=\\\""+final_prefix+"/share/locale\\\"")
+wiimote.Append(LINKFLAGS="-lcwiid")
+#wiimote.Append(CPPPATH = libraries['jack'].get('CPPPATH', []))
+
+wiimote.Merge ([
+ libraries['ardour'],
+ libraries['ardour_cp'],
+ libraries['sndfile'],
+ libraries['midi++2'],
+ libraries['pbd'],
+ libraries['sigc2'],
+ libraries['usb'],
+ libraries['xml'],
+ libraries['glib2'],
+ libraries['glibmm2']
+ ])
+
+libardour_wiimote = wiimote.SharedLibrary('ardour_wiimote', wiimote_files)
+
+if wiimote['WIIMOTE']:
+ Default(libardour_wiimote)
+ env.Alias('install', env.Install(os.path.join(install_prefix, env['LIBDIR'], 'ardour2', 'surfaces'), libardour_wiimote))
+
+if env['NLS']:
+ i18n (wiimote, wiimote_files, env)
+
+env.Alias('tarball', env.Distribute (env['DISTTREE'],
+ [ 'SConscript' ] +
+ wiimote_files +
+ glob.glob('po/*.po') + glob.glob('*.h')))
diff --git a/libs/surfaces/wiimote/interface.cc b/libs/surfaces/wiimote/interface.cc
new file mode 100644
index 0000000000..0ef301dd6c
--- /dev/null
+++ b/libs/surfaces/wiimote/interface.cc
@@ -0,0 +1,73 @@
+#include <pbd/failed_constructor.h>
+
+#include <control_protocol/control_protocol.h>
+#include "wiimote.h"
+
+#include <ardour/session.h>
+
+using namespace ARDOUR;
+
+static WiimoteControlProtocol *foo;
+
+ControlProtocol*
+new_wiimote_protocol (ControlProtocolDescriptor* descriptor, Session* s)
+{
+ WiimoteControlProtocol* wmcp;
+
+ try {
+ wmcp = new WiimoteControlProtocol (*s);
+ } catch (failed_constructor& err) {
+ return 0;
+ }
+
+ if (wmcp-> set_active (true)) {
+ delete wmcp;
+ return 0;
+ }
+
+ foo = wmcp;
+
+ return wmcp;
+}
+
+void
+wiimote_control_protocol_cwiid_callback(cwiid_wiimote_t *wiimote, int mesg_count, union cwiid_mesg mesg[], struct timespec *t)
+{
+ assert(foo != 0);
+
+ foo->wiimote_callback(wiimote,mesg_count,mesg,t);
+}
+
+void
+delete_wiimote_protocol (ControlProtocolDescriptor* descriptor, ControlProtocol* cp)
+{
+ foo = 0;
+ delete cp;
+}
+
+bool
+probe_wiimote_protocol (ControlProtocolDescriptor* descriptor)
+{
+ return WiimoteControlProtocol::probe ();
+}
+
+static ControlProtocolDescriptor wiimote_descriptor = {
+ name : "Wiimote",
+ id : "uri://ardour.org/surfaces/wiimote:0",
+ ptr : 0,
+ module : 0,
+ mandatory : 0,
+ supports_feedback : false,
+ probe : probe_wiimote_protocol,
+ initialize : new_wiimote_protocol,
+ destroy : delete_wiimote_protocol
+};
+
+
+extern "C" {
+ControlProtocolDescriptor*
+protocol_descriptor () {
+ return &wiimote_descriptor;
+}
+}
+
diff --git a/libs/surfaces/wiimote/wiimote.cc b/libs/surfaces/wiimote/wiimote.cc
new file mode 100644
index 0000000000..af3bbc369d
--- /dev/null
+++ b/libs/surfaces/wiimote/wiimote.cc
@@ -0,0 +1,289 @@
+#include "wiimote.h"
+
+#include <iostream>
+#include <sigc++/bind.h>
+
+#include <pbd/xml++.h>
+#include <ardour/session.h>
+
+#include "i18n.h"
+
+
+using namespace ARDOUR;
+using namespace PBD;
+
+void wiimote_control_protocol_cwiid_callback(cwiid_wiimote_t *wiimote, int mesg_count, union cwiid_mesg mesg[], struct timespec *t);
+
+uint16_t WiimoteControlProtocol::button_state = 0;
+
+WiimoteControlProtocol::WiimoteControlProtocol ( Session & session)
+ : ControlProtocol ( session, "Wiimote"),
+ main_thread_quit (false),
+ restart_discovery (false),
+ callback_thread_registered_for_ardour (false),
+ wiimote_handle (0)
+{
+ main_thread = Glib::Thread::create( sigc::mem_fun(*this, &WiimoteControlProtocol::wiimote_main), true);
+}
+
+WiimoteControlProtocol::~WiimoteControlProtocol()
+{
+ main_thread_quit = true;
+ slot_cond.signal();
+ main_thread->join();
+
+ if (wiimote_handle) {
+ cwiid_close(wiimote_handle);
+ }
+ std::cerr << "Wiimote: closed" << std::endl;
+}
+
+
+bool
+WiimoteControlProtocol::probe()
+{
+ return true;
+}
+
+void
+WiimoteControlProtocol::wiimote_callback(cwiid_wiimote_t *wiimote, int mesg_count, union cwiid_mesg mesg[], struct timespec *t)
+{
+ int i;
+ uint16_t b;
+
+ if (!callback_thread_registered_for_ardour) {
+ register_thread("Wiimote Control Protocol");
+ callback_thread_registered_for_ardour = true;
+ }
+
+ for (i=0; i < mesg_count; i++)
+ {
+ if (mesg[i].type == CWIID_MESG_ERROR) {
+ std::cerr << "Wiimote: disconnect" << std::endl;
+ restart_discovery = true;
+ slot_cond.signal();
+ return;
+ }
+
+ if (mesg[i].type != CWIID_MESG_BTN) continue;
+
+ // what buttons are pressed down which weren't pressed down last time
+ b = (mesg[i].btn_mesg.buttons ^ button_state) & mesg[i].btn_mesg.buttons;
+
+ button_state = mesg[i].btn_mesg.buttons;
+
+ // if B is pressed down
+ if (button_state & CWIID_BTN_B) {
+ if (b & CWIID_BTN_A) { // B is down and A is pressed
+ access_action("Transport/ToggleRollForgetCapture");
+ }
+
+ if (b & CWIID_BTN_LEFT) {
+ access_action("Editor/playhead-to-previous-region-boundary");
+ }
+ if (b & CWIID_BTN_RIGHT) {
+ access_action("Editor/playhead-to-next-region-boundary");
+ }
+ if (b & CWIID_BTN_UP) {
+ next_marker();
+ }
+ if (b & CWIID_BTN_DOWN) {
+ prev_marker();
+ }
+
+ if (b & CWIID_BTN_HOME) {
+ access_action("Editor/add-location-from-playhead");
+ }
+
+ if (b & CWIID_BTN_MINUS) {
+ access_action("Transport/GotoStart");
+ }
+
+ if (b & CWIID_BTN_PLUS) {
+ access_action("Transport/GotoEnd");
+ }
+
+ continue;
+ }
+
+
+ if (b & CWIID_BTN_A) {
+ access_action("Transport/ToggleRoll");
+ }
+
+ if (b & CWIID_BTN_1) { // 1
+ access_action("Editor/track-record-enable-toggle");
+ }
+ if (b & CWIID_BTN_2) { // 2
+ rec_enable_toggle();
+ }
+
+ // d-pad
+ if (b & CWIID_BTN_LEFT) { // left
+ access_action("Editor/nudge-playhead-backward");
+ }
+ if (b & CWIID_BTN_RIGHT) { // right
+ access_action("Editor/nudge-playhead-forward");
+ }
+ if (b & CWIID_BTN_DOWN) { // down
+ access_action("Editor/select-next-route");
+ }
+ if (b & CWIID_BTN_UP) { // up
+ access_action("Editor/select-prev-route");
+ }
+
+
+ if (b & CWIID_BTN_PLUS) { // +
+ access_action("Editor/temporal-zoom-in");
+ }
+ if (b & CWIID_BTN_MINUS) { // -
+ access_action("Editor/temporal-zoom-out");
+ }
+ if (b & CWIID_BTN_HOME) { // "home"
+ // no op, yet. any suggestions?
+ access_action("Editor/playhead-to-edit");
+ }
+
+ }
+}
+
+void
+WiimoteControlProtocol::update_led_state()
+{
+ ENSURE_WIIMOTE_THREAD(sigc::mem_fun(*this, &WiimoteControlProtocol::update_led_state));
+
+ uint8_t state = 0;
+
+ if (session->transport_rolling()) {
+ state |= CWIID_LED1_ON;
+ }
+
+ if (session->actively_recording()) {
+ state |= CWIID_LED4_ON;
+ }
+
+ cwiid_set_led(wiimote_handle, state);
+}
+
+void
+WiimoteControlProtocol::wiimote_main()
+{
+ bdaddr_t bdaddr;
+ unsigned char rpt_mode = 0;
+ register_thread("Wiimote Discovery and Callback Thread");
+
+wiimote_discovery:
+
+ std::cerr << "Wiimote: discovering, press 1+2" << std::endl;
+
+ while (!wiimote_handle && !main_thread_quit) {
+ bdaddr = *BDADDR_ANY;
+ callback_thread_registered_for_ardour = false;
+ wiimote_handle = cwiid_open(&bdaddr, 0);
+
+ if (!wiimote_handle && !main_thread_quit) {
+ sleep(1);
+ // We don't know whether the issue was a timeout or a configuration
+ // issue
+ }
+ }
+
+ if (main_thread_quit) {
+ // The corner case where the wiimote is bound at the same time as
+ // the control protocol is destroyed
+ if (wiimote_handle) {
+ cwiid_close(wiimote_handle);
+ }
+ wiimote_handle = 0;
+
+ std::cerr << "Wiimote Control Protocol stopped before connected to a wiimote" << std::endl;
+ return;
+ }
+
+ std::cerr << "Wiimote: connected" << std::endl;
+ WiimoteControlProtocol::button_state = 0;
+
+ if (cwiid_enable(wiimote_handle, CWIID_FLAG_REPEAT_BTN)) {
+ std::cerr << "cwiid_enable(), error" << std::endl;
+ cwiid_close(wiimote_handle);
+ wiimote_handle = 0;
+ return;
+ }
+ if (cwiid_set_mesg_callback(wiimote_handle, wiimote_control_protocol_cwiid_callback)) {
+ std::cerr << "cwiid_set_mesg_callback(), couldn't connect callback" << std::endl;
+ cwiid_close(wiimote_handle);
+ wiimote_handle = 0;
+ return;
+ }
+ if (cwiid_command(wiimote_handle, CWIID_CMD_RPT_MODE, CWIID_RPT_BTN)) {
+ std::cerr << "cwiid_command(), RPT_MODE error" << std::endl;
+ cwiid_close(wiimote_handle);
+ wiimote_handle = 0;
+ return;
+ }
+
+ rpt_mode |= CWIID_RPT_BTN;
+ cwiid_enable(wiimote_handle, CWIID_FLAG_MESG_IFC);
+ cwiid_set_rpt_mode(wiimote_handle, rpt_mode);
+
+ transport_state_conn = session->TransportStateChange.connect(sigc::mem_fun(*this, &WiimoteControlProtocol::update_led_state));
+ record_state_conn = session->RecordStateChanged.connect(sigc::mem_fun(*this, &WiimoteControlProtocol::update_led_state));
+
+ std::cerr << "Wiimote: initialization done, waiting for callbacks / quit" << std::endl;
+
+ while (!main_thread_quit) {
+ slot_mutex.lock();
+ while (slot_list.empty() && !main_thread_quit && !restart_discovery)
+ slot_cond.wait(slot_mutex);
+
+ if (main_thread_quit) {
+ slot_mutex.unlock();
+ break;
+ }
+
+ if (restart_discovery) {
+ std::cerr << "Wiimote: closing wiimote and restarting discovery" << std::endl;
+ if (wiimote_handle) {
+ cwiid_close(wiimote_handle);
+ wiimote_handle = 0;
+ }
+ slot_mutex.unlock();
+ restart_discovery = false;
+ goto wiimote_discovery;
+ }
+
+ sigc::slot<void> call_me = *slot_list.begin();
+ slot_list.pop_front();
+ slot_mutex.unlock();
+
+ call_me();
+ }
+
+
+ std::cerr << "Wiimote: main thread stopped" << std::endl;
+}
+
+
+int
+WiimoteControlProtocol::set_active (bool yn)
+{
+ // Let's not care about this just yet
+ return 0;
+
+}
+
+XMLNode&
+WiimoteControlProtocol::get_state()
+{
+ XMLNode *node = new XMLNode ("Protocol");
+ node->add_property (X_("name"), _name);
+ node->add_property (X_("feedback"), "0");
+
+ return *node;
+}
+
+int
+WiimoteControlProtocol::set_state(const XMLNode& node)
+{
+ return 0;
+}
diff --git a/libs/surfaces/wiimote/wiimote.h b/libs/surfaces/wiimote/wiimote.h
new file mode 100644
index 0000000000..a6680edd2e
--- /dev/null
+++ b/libs/surfaces/wiimote/wiimote.h
@@ -0,0 +1,69 @@
+#ifndef ardour_wiimote_control_protocol_h
+#define ardour_wiimote_control_protocol_h
+
+#include <ardour/types.h>
+#include <control_protocol/control_protocol.h>
+
+#include <glibmm/thread.h>
+
+#include <pbd/abstract_ui.h>
+
+#include <cwiid.h>
+
+
+namespace ARDOUR {
+ class Session;
+}
+
+#define ENSURE_WIIMOTE_THREAD(slot) \
+ if (Glib::Thread::self() != main_thread) {\
+ slot_mutex.lock();\
+ slot_list.push_back(slot);\
+ slot_cond.signal();\
+ slot_mutex.unlock();\
+ return;\
+ }
+
+
+class WiimoteControlProtocol : public ARDOUR::ControlProtocol {
+ public:
+ WiimoteControlProtocol (ARDOUR::Session &);
+ virtual ~WiimoteControlProtocol ();
+
+ static bool probe();
+
+ int set_active (bool yn);
+ XMLNode& get_state();
+ int set_state(const XMLNode&);
+
+ void wiimote_callback(cwiid_wiimote_t *, int, union cwiid_mesg [],
+ struct timespec *);
+
+ private:
+
+ void wiimote_main();
+ volatile bool main_thread_quit;
+ volatile bool restart_discovery;
+
+ Glib::Thread *main_thread;
+
+ void update_led_state();
+
+ bool callback_thread_registered_for_ardour;
+
+ static uint16_t button_state;
+
+ cwiid_wiimote_t *wiimote_handle;
+
+ Glib::Cond slot_cond;
+ Glib::Mutex slot_mutex;
+
+ std::list< sigc::slot<void> > slot_list;
+
+ sigc::connection transport_state_conn;
+ sigc::connection record_state_conn;
+};
+
+
+#endif /* ardour_wiimote_control_protocol_h */
+
diff --git a/libs/vamp-sdk/vamp-sdk/PluginAdapter.cpp b/libs/vamp-sdk/vamp-sdk/PluginAdapter.cpp
index 63cbfecfd1..ff02b87b75 100644
--- a/libs/vamp-sdk/vamp-sdk/PluginAdapter.cpp
+++ b/libs/vamp-sdk/vamp-sdk/PluginAdapter.cpp
@@ -38,6 +38,9 @@
#include <cstdlib>
#include "PluginAdapter.h"
+#include <cstdlib>
+#include <cstring>
+
//#define DEBUG_PLUGIN_ADAPTER 1
diff --git a/libs/vamp-sdk/vamp-sdk/PluginHostAdapter.cpp b/libs/vamp-sdk/vamp-sdk/PluginHostAdapter.cpp
index 334c11103c..4729a6223c 100644
--- a/libs/vamp-sdk/vamp-sdk/PluginHostAdapter.cpp
+++ b/libs/vamp-sdk/vamp-sdk/PluginHostAdapter.cpp
@@ -37,6 +37,8 @@
#include <cstdlib>
#include "PluginHostAdapter.h"
+#include <cstdlib>
+
namespace Vamp
{
diff --git a/patches/gtk-osx.patch b/patches/gtk-osx.patch
new file mode 100644
index 0000000000..013e4561bb
--- /dev/null
+++ b/patches/gtk-osx.patch
@@ -0,0 +1,542 @@
+Index: gtk/gtktreeview.c
+===================================================================
+--- gtk/gtktreeview.c (revision 21770)
++++ gtk/gtktreeview.c (working copy)
+@@ -2534,6 +2534,7 @@
+ gboolean row_double_click = FALSE;
+ gboolean rtl;
+ gboolean node_selected;
++ gboolean edits_allowed;
+
+ /* Empty tree? */
+ if (tree_view->priv->tree == NULL)
+@@ -2643,9 +2644,17 @@
+
+ tree_view->priv->focus_column = column;
+
++ /* ARDOUR HACK */
++
++ if (g_object_get_data (G_OBJECT(tree_view), "mouse-edits-require-mod1")) {
++ edits_allowed = (event->state & GDK_MOD1_MASK);
++ } else {
++ /* regular GTK design: do edits if none of the default modifiers are active */
++ edits_allowed = !(event->state & gtk_accelerator_get_default_mod_mask ());
++ }
++
+ /* decide if we edit */
+- if (event->type == GDK_BUTTON_PRESS && event->button == 1 &&
+- !(event->state & gtk_accelerator_get_default_mod_mask ()))
++ if (event->type == GDK_BUTTON_PRESS && event->button == 1 && edits_allowed)
+ {
+ GtkTreePath *anchor;
+ GtkTreeIter iter;
+Index: gtk/gtkquartz.c
+===================================================================
+--- gtk/gtkquartz.c (revision 21770)
++++ gtk/gtkquartz.c (working copy)
+@@ -24,6 +24,23 @@
+ #include "gtkalias.h"
+
+ NSImage *
++_gtk_quartz_create_image_from_drawable (GdkDrawable* drawable)
++{
++ GdkPixbuf* pixbuf;
++ NSImage* image = NULL;
++
++ pixbuf = gdk_pixbuf_get_from_drawable (NULL, drawable, NULL,
++ 0, 0, /* src */
++ 0, 0, /* dst */
++ -1, -1);
++ if (pixbuf)
++ image = _gtk_quartz_create_image_from_pixbuf (pixbuf);
++
++ return image;
++}
++
++
++NSImage *
+ _gtk_quartz_create_image_from_pixbuf (GdkPixbuf *pixbuf)
+ {
+ CGColorSpaceRef colorspace;
+Index: gtk/gtkquartz.h
+===================================================================
+--- gtk/gtkquartz.h (revision 21770)
++++ gtk/gtkquartz.h (working copy)
+@@ -41,6 +41,7 @@
+ GtkSelectionData *selection_data);
+
+ NSImage *_gtk_quartz_create_image_from_pixbuf (GdkPixbuf *pixbuf);
++NSImage *_gtk_quartz_create_image_from_drawable (GdkDrawable *drawable);
+
+ G_END_DECLS
+
+Index: gtk/gtktooltip.c
+===================================================================
+--- gtk/gtktooltip.c (revision 21770)
++++ gtk/gtktooltip.c (working copy)
+@@ -426,6 +426,7 @@
+ gtk_tooltip_trigger_tooltip_query (GdkDisplay *display)
+ {
+ gint x, y;
++ gint rx, ry;
+ GdkWindow *window;
+ GdkEvent event;
+
+@@ -434,10 +435,14 @@
+ if (!window)
+ return;
+
++ gdk_window_get_origin (window, &rx, &ry);
++
+ event.type = GDK_MOTION_NOTIFY;
+ event.motion.window = window;
+ event.motion.x = x;
++ event.motion.x_root = rx + x;
+ event.motion.y = y;
++ event.motion.y_root = ry + y;
+ event.motion.is_hint = FALSE;
+
+ _gtk_tooltip_handle_event (&event);
+Index: gtk/gtkdnd-quartz.c
+===================================================================
+--- gtk/gtkdnd-quartz.c (revision 21770)
++++ gtk/gtkdnd-quartz.c (working copy)
+@@ -63,6 +63,11 @@
+ gboolean create);
+ static void gtk_drag_source_site_destroy (gpointer data);
+
++static GtkDragSourceInfo *gtk_drag_get_source_info (GdkDragContext *context,
++ gboolean create);
++
++extern GdkDragContext *gdk_quartz_drag_source_context(); /* gdk/quartz/gdkdnd-quartz.c */
++
+ struct _GtkDragSourceSite
+ {
+ GdkModifierType start_button_mask;
+@@ -89,13 +94,16 @@
+
+ struct _GtkDragSourceInfo
+ {
++ GtkWidget *source_widget;
+ GtkWidget *widget;
+ GtkTargetList *target_list; /* Targets for drag data */
+ GdkDragAction possible_actions; /* Actions allowed by source */
+ GdkDragContext *context; /* drag context */
+-
++ NSEvent *nsevent; /* what started it */
+ gint hot_x, hot_y; /* Hot spot for drag */
+ GdkPixbuf *icon_pixbuf;
++ gboolean success;
++ gboolean delete;
+ };
+
+ struct _GtkDragDestSite
+@@ -223,7 +231,9 @@
+ selection_data,
+ 0, time);
+ }
++
+
++
+ if (site && site->flags & GTK_DEST_DEFAULT_DROP)
+ {
+ gtk_drag_finish (context,
+@@ -233,19 +243,24 @@
+ }
+ }
+
+-
+-GtkWidget *
+-gtk_drag_get_source_widget (GdkDragContext *context)
+-{
+- return NULL;
+-}
+-
+ void
+ gtk_drag_finish (GdkDragContext *context,
+ gboolean success,
+ gboolean del,
+ guint32 time)
+ {
++ GtkDragSourceInfo *info;
++ GdkDragContext* source_context = gdk_quartz_drag_source_context ();
++
++ if (source_context)
++ {
++ info = gtk_drag_get_source_info (source_context, FALSE);
++ if (info)
++ {
++ info->success = success;
++ info->delete = del;
++ }
++ }
+ }
+
+ static void
+@@ -307,6 +322,22 @@
+ g_object_set_qdata (G_OBJECT (context), dest_info_quark, NULL);
+ }
+
++GtkWidget *
++gtk_drag_get_source_widget (GdkDragContext *context)
++{
++ GtkDragSourceInfo *info;
++ GdkDragContext* real_source_context = gdk_quartz_drag_source_context();
++
++ if (!real_source_context)
++ return NULL;
++
++ info = gtk_drag_get_source_info (real_source_context, FALSE);
++ if (!info)
++ return NULL;
++
++ return info->source_widget;
++}
++
+ /*************************************************************
+ * gtk_drag_highlight_expose:
+ * Callback for expose_event for highlighted widgets.
+@@ -857,6 +888,8 @@
+ gtk_drag_get_data (widget, context, target, time);
+ }
+
++ /* leave a note for the source-side context about the action chosen */
++
+ g_signal_emit_by_name (widget, "drag-drop",
+ context, x, y, time, &retval);
+
+@@ -1031,6 +1064,45 @@
+ return GDK_NONE;
+ }
+
++static gboolean
++gtk_drag_begin_idle (gpointer arg)
++{
++ GdkDragContext* context = (GdkDragContext*) arg;
++ GtkDragSourceInfo* info = gtk_drag_get_source_info (context, FALSE);
++ NSWindow *nswindow;
++ NSPasteboard *pasteboard;
++ GtkDragSourceOwner *owner;
++ NSPoint point;
++
++ g_assert (info != NULL);
++
++ pasteboard = [NSPasteboard pasteboardWithName:NSDragPboard];
++ owner = [[GtkDragSourceOwner alloc] initWithInfo:info];
++
++ [pasteboard declareTypes:_gtk_quartz_target_list_to_pasteboard_types (info->target_list) owner:owner];
++
++ if ((nswindow = get_toplevel_nswindow (info->source_widget)) == NULL)
++ return FALSE;
++
++ /* Ref the context. It's unreffed when the drag has been aborted */
++ g_object_ref (info->context);
++
++ /* FIXME: If the event isn't a mouse event, use the global cursor position instead */
++ point = [info->nsevent locationInWindow];
++
++ [nswindow dragImage:_gtk_quartz_create_image_from_pixbuf (info->icon_pixbuf)
++ at:point
++ offset:NSMakeSize(0, 0)
++ event:info->nsevent
++ pasteboard:pasteboard
++ source:nswindow
++ slideBack:YES];
++
++ [info->nsevent release];
++
++ return FALSE;
++}
++
+ static GdkDragContext *
+ gtk_drag_begin_internal (GtkWidget *widget,
+ GtkDragSourceSite *site,
+@@ -1042,16 +1114,13 @@
+ GtkDragSourceInfo *info;
+ GdkDragContext *context;
+ NSWindow *nswindow;
+- NSPasteboard *pasteboard;
+- GtkDragSourceOwner *owner;
+- NSEvent *nsevent;
+- NSPoint point;
+
+ context = gdk_drag_begin (NULL, NULL);
+ context->is_source = TRUE;
+
+ info = gtk_drag_get_source_info (context, TRUE);
+
++ info->source_widget = g_object_ref (widget);
+ info->widget = g_object_ref (widget);
+ info->target_list = target_list;
+ gtk_target_list_ref (target_list);
+@@ -1086,13 +1155,13 @@
+ GdkPixbuf *pixbuf;
+
+ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 1, 1);
+- gdk_pixbuf_fill (pixbuf, 0xffffff);
+-
+- gtk_drag_set_icon_pixbuf (context,
+- pixbuf,
++ gdk_pixbuf_fill (pixbuf, 0xffffff);
++
++ gtk_drag_set_icon_pixbuf (context,
++ pixbuf,
+ 0, 0);
+
+- g_object_unref (pixbuf);
++ g_object_unref (pixbuf);
+ }
+ break;
+ case GTK_IMAGE_PIXBUF:
+@@ -1117,31 +1186,17 @@
+ }
+ }
+
+- gdk_pointer_ungrab (0);
+-
+- pasteboard = [NSPasteboard pasteboardWithName:NSDragPboard];
+- owner = [[GtkDragSourceOwner alloc] initWithInfo:info];
++ nswindow = get_toplevel_nswindow (widget);
++ info->nsevent = [nswindow currentEvent];
++ [info->nsevent retain];
+
+- [pasteboard declareTypes:_gtk_quartz_target_list_to_pasteboard_types (target_list) owner:owner];
++ /* drag will begin in an idle handler to avoid nested run loops */
+
+- /* Ref the context. It's unreffed when the drag has been aborted */
+- g_object_ref (info->context);
++ g_idle_add_full (G_PRIORITY_HIGH_IDLE, gtk_drag_begin_idle, context, NULL);
+
+- nswindow = get_toplevel_nswindow (widget);
++ gdk_pointer_ungrab (0);
+
+- /* FIXME: If the event isn't a mouse event, use the global cursor position instead */
+- nsevent = [nswindow currentEvent];
+- point = [nsevent locationInWindow];
+-
+- [nswindow dragImage:_gtk_quartz_create_image_from_pixbuf (info->icon_pixbuf)
+- at:point
+- offset:NSMakeSize(0, 0)
+- event:nsevent
+- pasteboard:pasteboard
+- source:nswindow
+- slideBack:YES];
+-
+- return info->context;
++ return context;
+ }
+
+ GdkDragContext *
+@@ -1668,7 +1723,20 @@
+ gint hot_x,
+ gint hot_y)
+ {
+- g_warning ("gtk_drag_set_icon_pixmap is not supported on Mac OS X");
++ GdkPixbuf *pixbuf;
++
++ g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
++ g_return_if_fail (context->is_source);
++ g_return_if_fail (GDK_IS_COLORMAP (colormap));
++ g_return_if_fail (GDK_IS_PIXMAP (pixmap));
++
++ pixbuf = gdk_pixbuf_get_from_drawable (NULL, pixmap, colormap,
++ 0, 0, /* src */
++ 0, 0, /* dst */
++ -1, -1);
++
++ gtk_drag_set_icon_pixbuf (context, pixbuf, hot_x, hot_y);
++ g_object_unref (pixbuf);
+ }
+
+ /**
+@@ -1760,6 +1828,9 @@
+ g_signal_emit_by_name (info->widget, "drag-end",
+ info->context);
+
++ if (info->source_widget)
++ g_object_unref (info->source_widget);
++
+ if (info->widget)
+ g_object_unref (info->widget);
+
+@@ -1781,6 +1852,10 @@
+ static void
+ gtk_drag_drop_finished (GtkDragSourceInfo *info)
+ {
++ if (info->success && info->delete)
++ g_signal_emit_by_name (info->source_widget, "drag-data-delete",
++ info->context);
++
+ /* Workaround for the fact that the NS API blocks until the drag is
+ * over. This way the context is still valid when returning from
+ * drag_begin, even if it will still be quite useless. See bug #501588.
+Index: gdk/quartz/gdkevents-quartz.c
+===================================================================
+--- gdk/quartz/gdkevents-quartz.c (revision 21770)
++++ gdk/quartz/gdkevents-quartz.c (working copy)
+@@ -112,6 +112,18 @@
+ return ((GdkEventPrivate *) event)->windowing_data;
+ }
+
++/* A category that exposes the protected carbon event for an NSEvent. */
++@interface NSEvent (GdkQuartzNSEvent)
++- (void *)gdk_quartz_event_ref;
++@end
++
++@implementation NSEvent (GdkQuartzNSEvent)
++- (void *)gdk_quartz_event_ref
++{
++ return _eventRef;
++}
++@end
++
+ void
+ _gdk_events_init (void)
+ {
+@@ -1668,6 +1680,65 @@
+ }
+
+ static gboolean
++_gdk_quartz_possibly_forward_accelerator (NSEvent* nsevent)
++{
++ /* Special-case menu shortcut events. We create command events for
++ * those and forward to the corresponding menu.
++ */
++ if ((!_gdk_quartz_keyboard_grab_window ||
++ (_gdk_quartz_keyboard_grab_window && keyboard_grab_owner_events)) &&
++ [nsevent type] == NSKeyDown)
++ {
++ EventRef event_ref;
++ MenuRef menu_ref;
++ MenuItemIndex index;
++
++ event_ref = [nsevent gdk_quartz_event_ref];
++ if (IsMenuKeyEvent (NULL, event_ref,
++ kMenuEventQueryOnly,
++ &menu_ref, &index))
++ {
++ MenuCommand menu_command;
++ HICommand hi_command;
++
++ if (GetMenuItemCommandID (menu_ref, index, &menu_command) != noErr)
++ return FALSE;
++
++ hi_command.commandID = menu_command;
++ hi_command.menu.menuRef = menu_ref;
++ hi_command.menu.menuItemIndex = index;
++
++ CreateEvent (NULL, kEventClassCommand, kEventCommandProcess,
++ 0, kEventAttributeUserEvent, &event_ref);
++ SetEventParameter (event_ref, kEventParamDirectObject,
++ typeHICommand,
++ sizeof (HICommand), &hi_command);
++
++ SendEventToEventTarget (event_ref, GetMenuEventTarget (menu_ref));
++
++ ReleaseEvent (event_ref);
++
++ return TRUE;
++ }
++ }
++ return FALSE;
++}
++
++gboolean
++gdk_quartz_possibly_forward (GdkEvent* event)
++{
++ NSEvent *nsevent;
++ g_return_val_if_fail (event != NULL, FALSE);
++
++ nsevent = ((GdkEventPrivate*)event)->windowing_data;
++
++ if (nsevent)
++ return _gdk_quartz_possibly_forward_accelerator (nsevent);
++
++ return FALSE;
++}
++
++static gboolean
+ gdk_event_translate (NSEvent *nsevent)
+ {
+ NSWindow *nswindow;
+Index: gdk/quartz/gdkdnd-quartz.c
+===================================================================
+--- gdk/quartz/gdkdnd-quartz.c (revision 21770)
++++ gdk/quartz/gdkdnd-quartz.c (working copy)
+@@ -101,6 +101,12 @@
+
+ GdkDragContext *_gdk_quartz_drag_source_context = NULL;
+
++GdkDragContext*
++gdk_quartz_drag_source_context()
++{
++ return _gdk_quartz_drag_source_context;
++}
++
+ GdkDragContext *
+ gdk_drag_begin (GdkWindow *window,
+ GList *targets)
+Index: gdk/quartz/GdkQuartzWindow.c
+===================================================================
+--- gdk/quartz/GdkQuartzWindow.c (revision 21770)
++++ gdk/quartz/GdkQuartzWindow.c (working copy)
+@@ -461,8 +461,29 @@
+ {
+ GdkDragAction result = 0;
+
++ /* GDK and Quartz drag operations do not map 1:1.
++ This mapping represents about the best that we
++ can come up.
++
++ Note that NSDragOperationPrivate and GDK_ACTION_PRIVATE
++ have almost opposite meanings: the GDK one means that the
++ destination is solely responsible for the action; the Quartz
++ one means that the source and destination will agree
++ privately on the action. NSOperationGeneric is close in meaning
++ to GDK_ACTION_PRIVATE but there is a problem: it will be
++ sent for any ordinary drag, and likely not understood
++ by any intra-widget drag (since the source & dest are the
++ same)
++ */
++
+ if (operation & NSDragOperationGeneric)
++ result |= GDK_ACTION_MOVE;
++ if (operation & NSDragOperationCopy)
+ result |= GDK_ACTION_COPY;
++ if (operation & NSDragOperationMove)
++ result |= GDK_ACTION_MOVE;
++ if (operation & NSDragOperationLink)
++ result |= GDK_ACTION_LINK;
+
+ return result;
+ }
+@@ -474,6 +495,10 @@
+
+ if (action & GDK_ACTION_COPY)
+ result |= NSDragOperationCopy;
++ if (action & GDK_ACTION_LINK)
++ result |= NSDragOperationLink;
++ if (action & GDK_ACTION_MOVE)
++ result |= NSDragOperationMove;
+
+ return result;
+ }
+@@ -485,6 +510,7 @@
+
+ GDK_DRAG_CONTEXT_PRIVATE (current_context)->dragging_info = sender;
+ current_context->suggested_action = drag_operation_to_drag_action ([sender draggingSourceOperationMask]);
++ current_context->actions = current_context->suggested_action;
+ }
+
+ - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
+@@ -510,6 +536,10 @@
+
+ - (void)draggingEnded:(id <NSDraggingInfo>)sender
+ {
++ /* leave a note for the source about what action was taken */
++ if (_gdk_quartz_drag_source_context && current_context)
++ _gdk_quartz_drag_source_context->action = current_context->action;
++
+ if (current_context)
+ g_object_unref (current_context);
+ current_context = NULL;
diff --git a/tools/osx_packaging/Ardour2-SAE.icns b/tools/osx_packaging/Ardour2-SAE.icns
new file mode 100644
index 0000000000..417107c899
--- /dev/null
+++ b/tools/osx_packaging/Ardour2-SAE.icns
Binary files differ
diff --git a/tools/osx_packaging/InfoPlist.strings.in b/tools/osx_packaging/InfoPlist.strings.in
new file mode 100644
index 0000000000..1ee76ac4c0
--- /dev/null
+++ b/tools/osx_packaging/InfoPlist.strings.in
@@ -0,0 +1,4 @@
+CFBundleName = "@APPNAME@";
+CFBundleShortVersionString = "@VERSION@";
+CFBundleGetInfoString = "@APPNAME@ v @VERSION@ Copyright 2001-2008 Paul Davis";
+NSHumanReadableCopyright = "Copyright 2001-2008 Paul Davis.";
diff --git a/tools/osx_packaging/sae_ladspa/caps.so b/tools/osx_packaging/sae_ladspa/caps.so
new file mode 100755
index 0000000000..e53b10791d
--- /dev/null
+++ b/tools/osx_packaging/sae_ladspa/caps.so
Binary files differ
diff --git a/tools/osx_packaging/sae_ladspa/cmt.so b/tools/osx_packaging/sae_ladspa/cmt.so
new file mode 100755
index 0000000000..e834f6528f
--- /dev/null
+++ b/tools/osx_packaging/sae_ladspa/cmt.so
Binary files differ
diff --git a/tools/osx_packaging/sae_ladspa/fast_lookahead_limiter_1913.so b/tools/osx_packaging/sae_ladspa/fast_lookahead_limiter_1913.so
new file mode 100755
index 0000000000..159f36d89b
--- /dev/null
+++ b/tools/osx_packaging/sae_ladspa/fast_lookahead_limiter_1913.so
Binary files differ
diff --git a/tools/osx_packaging/sae_ladspa/gverb_1216.so b/tools/osx_packaging/sae_ladspa/gverb_1216.so
new file mode 100755
index 0000000000..0aea9095d7
--- /dev/null
+++ b/tools/osx_packaging/sae_ladspa/gverb_1216.so
Binary files differ
diff --git a/tools/osx_packaging/sae_ladspa/single_para_1203.so b/tools/osx_packaging/sae_ladspa/single_para_1203.so
new file mode 100755
index 0000000000..514bd9be91
--- /dev/null
+++ b/tools/osx_packaging/sae_ladspa/single_para_1203.so
Binary files differ
diff --git a/tools/osx_packaging/sae_ladspa/tap_pitch.so b/tools/osx_packaging/sae_ladspa/tap_pitch.so
new file mode 100755
index 0000000000..c32e5ee88e
--- /dev/null
+++ b/tools/osx_packaging/sae_ladspa/tap_pitch.so
Binary files differ
diff --git a/tools/osx_packaging/startup_script b/tools/osx_packaging/startup_script
new file mode 100644
index 0000000000..c7b9b5acf8
--- /dev/null
+++ b/tools/osx_packaging/startup_script
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+#
+# NOTE: Leopard appears not to set PATH for this script, so be absolutely certain
+# never to use any other program without fully specifying the path.
+#
+# this is used to detect a missing JACK install which
+# is the most common thing causing startup crashes.
+#
+
+if test ! -x /usr/local/bin/jackd -a ! -x /usr/bin/jackd ; then
+ /usr/bin/osascript -e 'tell application "Finder"
+display dialog "You do not have JACK installed. Ardour will not run without it. See http://jackaudio.org/ for info" buttons["OK"]
+end tell'
+ exit 1
+fi
+
+#
+# all clear, lets go
+# this quoting is all needed to handle installation
+# in folders likes /home/user/Frank's Wild Years
+
+CWD="`/usr/bin/dirname \"$0\"`"
+exec "$CWD/Ardour2.bin" "$*"
diff --git a/tools/resample_session.pl b/tools/resample_session.pl
index c6a390f480..eadc536985 100755
--- a/tools/resample_session.pl
+++ b/tools/resample_session.pl
@@ -9,6 +9,8 @@
# The peakfiles and dead_sounds aren't copied. Only "identified" files are copied, instant.xml's
# or .bak's aren't copied either.
+use FindBin '$Bin';
+use lib "$Bin";
use XML::Parser::PerlSAX;
use XML::Handler::XMLWriter;
use IO::Handle;
diff --git a/tools/synthesize_sources.pl b/tools/synthesize_sources.pl
index 3123d0cb1f..54fb8eb60d 100755
--- a/tools/synthesize_sources.pl
+++ b/tools/synthesize_sources.pl
@@ -7,6 +7,8 @@
# for each missing source file. The length of each file is determined
# by how far regions using that source file go into the sample data.
+use FindBin '$Bin';
+use lib "$Bin";
use XML::Parser::PerlSAX;
use XML::Handler::XMLWriter;
use IO::Handle;